{"version":3,"file":"ej2.min.js","sources":["../node_modules/@syncfusion/ej2-base/src/util.js","../node_modules/@syncfusion/ej2-base/src/dom.js","../node_modules/@syncfusion/ej2-base/src/notify-property-change.js","../node_modules/@syncfusion/ej2-base/src/animation.js","../node_modules/@syncfusion/ej2-base/src/internationalization.js","../node_modules/@syncfusion/ej2-base/src/template.js","../node_modules/@syncfusion/ej2-base/src/template-engine.js","../node_modules/@syncfusion/ej2-buttons/src/common/common.js","../node_modules/@syncfusion/ej2-popups/src/common/position.js","../node_modules/@syncfusion/ej2-popups/src/common/collision.js","../node_modules/@syncfusion/ej2-popups/src/popup/popup.js","../node_modules/@syncfusion/ej2-popups/src/spinner/spinner.js","../node_modules/@syncfusion/ej2-inputs/src/maskedtextbox/base/mask-base.js","../node_modules/@syncfusion/ej2-splitbuttons/src/common/common.js","../node_modules/@syncfusion/ej2-lists/src/common/list-base.js","../node_modules/@syncfusion/ej2-charts/src/common/model/theme.js","../node_modules/@syncfusion/ej2-charts/src/common/utils/helper.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/utils.js","../node_modules/@syncfusion/ej2-file-utils/src/encoding.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/interface.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/helper.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/model/acc-base.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/utils/helper.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/utils/helper.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/utils/theme.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/helper.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/path-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/matrix.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/dictionary/basic-shapes.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/dictionary/common.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/dictionary/flow-shapes.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/tooltip.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/connector.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/connector.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/constraints-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/ruler/ruler.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/diagram-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/dom-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/base-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/actions.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/bpmn.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/symmetrical-layout.js","../node_modules/@syncfusion/ej2-dropdowns/src/common/incremental-search.js","../node_modules/@syncfusion/ej2-dropdowns/src/common/highlight-search.js","../node_modules/@syncfusion/ej2-dropdowns/src/multi-select/float-label.js","../node_modules/@syncfusion/ej2-grids/src/grid/base/util.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/aria-service.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/aggregate.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/datepicker-edit-cell.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/utils/helper.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-maps/src/maps/utils/helper.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/util.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-attributes.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/util.js","../node_modules/@syncfusion/ej2-schedule/src/recurrence-editor/date-generator.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/utils/helper.js","../node_modules/@syncfusion/ej2-base/src/ajax.js","../node_modules/@syncfusion/ej2-base/src/event-handler.js","../node_modules/@syncfusion/ej2-base/src/observer.js","../node_modules/@syncfusion/ej2-base/src/base.js","../node_modules/@syncfusion/ej2-base/src/browser.js","../node_modules/@syncfusion/ej2-base/src/intl/intl-base.js","../node_modules/@syncfusion/ej2-base/src/canvas-renderer.js","../node_modules/@syncfusion/ej2-base/src/module-loader.js","../node_modules/@syncfusion/ej2-base/src/child-property.js","../node_modules/@syncfusion/ej2-base/src/intl/parser-base.js","../node_modules/@syncfusion/ej2-base/src/intl/number-formatter.js","../node_modules/@syncfusion/ej2-base/src/intl/date-formatter.js","../node_modules/@syncfusion/ej2-base/src/component.js","../node_modules/@syncfusion/ej2-base/src/intl/date-parser.js","../node_modules/@syncfusion/ej2-base/src/intl/number-parser.js","../node_modules/@syncfusion/ej2-base/src/draggable.js","../node_modules/@syncfusion/ej2-popups/src/dialog/dialog.js","../node_modules/@syncfusion/ej2-base/src/droppable.js","../node_modules/@syncfusion/ej2-base/src/keyboard.js","../node_modules/@syncfusion/ej2-base/src/l10n.js","../node_modules/@syncfusion/ej2-base/src/svg-renderer.js","../node_modules/@syncfusion/ej2-base/src/touch.js","../node_modules/@syncfusion/ej2-buttons/src/button/button.js","../node_modules/@syncfusion/ej2-buttons/src/check-box/check-box.js","../node_modules/@syncfusion/ej2-buttons/src/radio-button/radio-button.js","../node_modules/@syncfusion/ej2-buttons/src/switch/switch.js","../node_modules/@syncfusion/ej2-calendars/src/calendar/calendar.js","../node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-inputs/src/input/input.js","../node_modules/@syncfusion/ej2-inputs/src/numerictextbox/numerictextbox.js","../node_modules/@syncfusion/ej2-inputs/src/form-validator/form-validator.js","../node_modules/@syncfusion/ej2-inputs/src/maskedtextbox/maskedtextbox/maskedtextbox.js","../node_modules/@syncfusion/ej2-inputs/src/slider/slider.js","../node_modules/@syncfusion/ej2-inputs/src/uploader/uploader.js","../node_modules/@syncfusion/ej2-splitbuttons/src/drop-down-button/drop-down-button.js","../node_modules/@syncfusion/ej2-splitbuttons/src/split-button/split-button.js","../node_modules/@syncfusion/ej2-splitbuttons/src/progress-button/progress-button.js","../node_modules/@syncfusion/ej2-inputs/src/color-picker/color-picker.js","../node_modules/@syncfusion/ej2-inputs/src/textbox/textbox.js","../node_modules/@syncfusion/ej2-calendars/src/datepicker/datepicker.js","../node_modules/@syncfusion/ej2-data/src/query.js","../node_modules/@syncfusion/ej2-data/src/util.js","../node_modules/@syncfusion/ej2-data/src/adaptors.js","../node_modules/@syncfusion/ej2-data/src/manager.js","../node_modules/@syncfusion/ej2-lists/src/list-view/list-view.js","../node_modules/@syncfusion/ej2-calendars/src/timepicker/timepicker.js","../node_modules/@syncfusion/ej2-lists/src/list-view/virtualization.js","../node_modules/@syncfusion/ej2-calendars/src/daterangepicker/daterangepicker.js","../node_modules/@syncfusion/ej2-calendars/src/datetimepicker/datetimepicker.js","../node_modules/@syncfusion/ej2-charts/src/common/model/base.js","../node_modules/@syncfusion/ej2-charts/src/chart/utils/double-range.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/double-axis.js","../node_modules/@syncfusion/ej2-charts/src/common/model/constants.js","../node_modules/@syncfusion/ej2-charts/src/chart/model/chart-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/cartesian-panel.js","../node_modules/@syncfusion/ej2-charts/src/chart/utils/get-data.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/chart-series.js","../node_modules/@syncfusion/ej2-charts/src/common/model/data.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/marker-explode.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/marker.js","../node_modules/@syncfusion/ej2-charts/src/common/legend/legend.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/technical-indicator.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-name.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-operators.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-dictionary-properties.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-number.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-array.js","../node_modules/@syncfusion/ej2-file-utils/src/save.js","../node_modules/@syncfusion/ej2-file-utils/src/xml-writer.js","../node_modules/@syncfusion/ej2-file-utils/src/stream-writer.js","../node_modules/@syncfusion/ej2-compression/src/compression-writer.js","../node_modules/@syncfusion/ej2-compression/src/zip-archive.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-stream.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-string.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-reference.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/actions/action.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/actions/uri-action.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-color.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/drawing/pdf-drawing.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-brush.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-solid-brush.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-string-format.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/string-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/string-tokenizer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-main-object-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document-base.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-catalog.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-size.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-margins.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/image-decoder.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-settings.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-stream-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-pen.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-transformation-matrix.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/constants.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/object-object-pair/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-transparency.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field-info-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/graphics-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/byte-array.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-boolean.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/unit-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/pdf-image.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/pdf-bitmap.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-table-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-name-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-name-record.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-head-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-horizontal-header-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-OS2-Table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-post-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-long-hor-metric.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-cmap-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-glyph-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-loca-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-apple-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-microsoft-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-trimmed-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-glyph-header.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/big-endian-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-reader.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-font-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/unicode-true-type-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl/rtl-text-shape.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl/rtl-bidirectional.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl-renderer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-graphics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-layer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-layer-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/pdf-template.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-resources.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-base.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/annotation-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/page-added-event-arguments.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document-template.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-templates.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-document-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-cache-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-standard-font-metrics-factory.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-standard-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/action-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/document-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/element-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/layout-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/text-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/text-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/uri-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/pdf-text-web-link.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-numbers-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-template-value-pair.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/multiple-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-page-number-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/composite-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/single-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/page-count-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-destination.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/tables/light-tables/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-true-type-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-template-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/styles/pdf-borders.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/styles/style.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-cell.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-column.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-row.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/layout/grid-layouter.js","../node_modules/@syncfusion/ej2-charts/src/common/utils/export.js","../node_modules/@syncfusion/ej2-charts/src/chart/chart.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/axis-helper.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/date-time-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/category-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/logarithmic-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/date-time-category-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/strip-line.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/line-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/column-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/column-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/bar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/polar-radar-panel.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/polar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/radar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-bar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/candle-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-column-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/step-line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/step-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/scatter-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/range-column-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/waterfall-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/hilo-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/hilo-open-close-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/range-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/bubble-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/spline-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/spline-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/histogram-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/spline-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/indicator-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/sma-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/ema-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/tma-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/ad-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/atr-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/momentum-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/rsi-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/stochastic-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/bollinger-bands.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/macd-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/trend-lines/trend-line.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/crosshair.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/common/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/zooming-toolkit.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/zooming.js","../node_modules/@syncfusion/ej2-charts/src/common/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/data-label.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/error-bar.js","../node_modules/@syncfusion/ej2-charts/src/chart/legend/legend.js","../node_modules/@syncfusion/ej2-charts/src/common/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/src/chart/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/box-and-whisker-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/multi-level-labels.js","../node_modules/@syncfusion/ej2-charts/src/common/scrollbar/scrollbar-elements.js","../node_modules/@syncfusion/ej2-charts/src/common/scrollbar/scrollbar.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/pareto-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/accumulation-base.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/pie-base.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/pie-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/accumulation.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/triangular-base.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/funnel-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/pyramid-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/legend.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/dataLabel.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/renderer/chart-render.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/renderer/range-axis.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/model/range-base.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/model/theme.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/renderer/slider.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/range-navigator.js","../node_modules/@syncfusion/ej2-navigations/src/common/h-scroll.js","../node_modules/@syncfusion/ej2-navigations/src/toolbar/toolbar.js","../node_modules/@syncfusion/ej2-navigations/src/accordion/accordion.js","../node_modules/@syncfusion/ej2-navigations/src/common/menu-base.js","../node_modules/@syncfusion/ej2-navigations/src/context-menu/context-menu.js","../node_modules/@syncfusion/ej2-navigations/src/menu/menu.js","../node_modules/@syncfusion/ej2-navigations/src/tab/tab.js","../node_modules/@syncfusion/ej2-navigations/src/treeview/treeview.js","../node_modules/@syncfusion/ej2-navigations/src/sidebar/sidebar.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/renderer/period-selector.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/utils.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/legend/legend.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/axis/axis.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/title/title.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/series.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/area.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/axis/axisrender.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/marker.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/datalabel.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/seriesrender.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/model/constant.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/export.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/enum.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/smithchart.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/legend/legendrender.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/model/base.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/rendering/sparkline-renderer.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/sparkline.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/rendering/sparkline-tooltip.js","../charts.ts","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/model/theme.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/model/base.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/model/constants.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/pointer-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/circular-gauge.js","../circulargauge.ts","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/size.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/point.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/rect.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/enum/enum.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/diagram-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/appearance.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/containers/container.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/path-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/native-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/text-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/image-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/containers/canvas.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/port.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/annotation.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/icon.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/node-base.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/selector.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/html-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/node.js","../node_modules/@syncfusion/ej2-diagrams/src/ruler/ruler.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/rendering/canvas-renderer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/rendering/svg-renderer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/rendering/renderer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/page-settings.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/service.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/grid-lines.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/ruler-settings.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/data-source.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/layout-base.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/tool.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/connector-editing.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/event-handlers.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/layer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/command-manager.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/scroller.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/spatial-search/quad.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/spatial-search/spatial-search.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/keyboard-commands.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/print-settings.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/containers/stack-panel.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/data-binding/data-binding.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/context-menu.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/connector-bridging.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/snapping.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/undo-redo.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/layout-animation.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/hierarchical-tree.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/mind-map.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/radial-tree.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/complex-hierarchical-tree.js","../node_modules/@syncfusion/ej2-diagrams/src/symbol-palette/symbol-palette.js","../node_modules/@syncfusion/ej2-diagrams/src/overview/overview.js","../diagrams.ts","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/dictionary.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/unique-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/unique-formats.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/document-editor.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/print.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/section-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/level-override.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/list.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/list-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/paragraph-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/character-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/editor-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/style.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/border.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/borders.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/shading.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/table-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/row-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/cell-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/page.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/context-menu.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/abstract-list.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/list-level.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/layout.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/render.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/text-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/zooming.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/viewer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/sfdt-reader.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/html-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search-result.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search-results.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/search-results.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/search.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/options-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/table-resizer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/editor.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/history-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/base-history-info.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/image-resizer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/history-info.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/editor-history.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/word-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/text-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/sfdt-export.js","../node_modules/@syncfusion/ej2-dropdowns/src/drop-down-base/drop-down-base.js","../node_modules/@syncfusion/ej2-dropdowns/src/drop-down-list/drop-down-list.js","../node_modules/@syncfusion/ej2-dropdowns/src/combo-box/combo-box.js","../node_modules/@syncfusion/ej2-dropdowns/src/auto-complete/auto-complete.js","../node_modules/@syncfusion/ej2-dropdowns/src/multi-select/multi-select.js","../node_modules/@syncfusion/ej2-dropdowns/src/multi-select/checkbox-selection.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/hyperlink-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/bookmark-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-of-contents-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/page-setup-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/paragraph-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/list-view-model.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/list-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/style-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/bullets-and-numbering-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/font-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-properties-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/borders-and-shading-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-options-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/cell-options-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/styles-dialog.js","../documenteditor.ts","../dropdowns.ts","../node_modules/@syncfusion/ej2-grids/src/grid/base/enum.js","../node_modules/@syncfusion/ej2-excel-export/src/cell-style.js","../node_modules/@syncfusion/ej2-excel-export/src/cell.js","../node_modules/@syncfusion/ej2-excel-export/src/column.js","../node_modules/@syncfusion/ej2-excel-export/src/row.js","../node_modules/@syncfusion/ej2-excel-export/src/worksheets.js","../node_modules/@syncfusion/ej2-excel-export/src/worksheet.js","../node_modules/@syncfusion/ej2-excel-export/src/value-formatter.js","../node_modules/@syncfusion/ej2-excel-export/src/csv-helper.js","../node_modules/@syncfusion/ej2-excel-export/src/blob-helper.js","../node_modules/@syncfusion/ej2-excel-export/src/workbook.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/value-formatter.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/column.js","../node_modules/@syncfusion/ej2-grids/src/grid/base/constant.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/checkbox-filter.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/data.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/row.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-merge-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/row-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/summary-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/group-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/content-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/stacked-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/indent-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/caption-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/render.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/cell-render-factory.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/service-locator.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/renderer-factory.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/width-controller.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/focus-strategy.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/page-settings.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/selection.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/search.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/show-hide.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/scroll.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/print.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/aggregate.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/clipboard.js","../node_modules/@syncfusion/ej2-grids/src/grid/base/grid.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/sort.js","../node_modules/@syncfusion/ej2-grids/src/pager/numeric-container.js","../node_modules/@syncfusion/ej2-grids/src/pager/pager-message.js","../node_modules/@syncfusion/ej2-grids/src/pager/pager.js","../node_modules/@syncfusion/ej2-grids/src/pager/pager-dropdown.js","../node_modules/@syncfusion/ej2-grids/src/pager/external-message.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/page.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-operator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/string-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/number-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/date-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-filter.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/filter.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/resize.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/reorder.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/row-reorder.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/group.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/detail-row.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/toolbar.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/footer-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/summary-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/intersection-observer.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/virtual-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/virtual-content-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/virtual-scroll.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/inline-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/batch-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/dialog-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/dropdown-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/numeric-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/default-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/normal-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/inline-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/batch-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/dialog-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/template-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/column-chooser.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/export-helper.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-export.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/pdf-export.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/command-column-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/command-column.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/context-menu.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/freeze-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/freeze-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/freeze.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/column-menu.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/foreign-key.js","../grids.ts","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/model/theme.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/model/base.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/utils/colorMapping.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/axis/axis.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/axis/axis-helpers.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/series/series.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/datasource/twodimensional.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/legend/legend.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/heatmap.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/datasource/adaptor.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/utils/tooltip.js","../heatmap.ts","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/model/base.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/model/constant.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/animation.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/linear-gauge.js","../lineargauge.ts","../lists.ts","../node_modules/@syncfusion/ej2-maps/src/maps/model/theme.js","../node_modules/@syncfusion/ej2-maps/src/maps/model/base.js","../node_modules/@syncfusion/ej2-maps/src/maps/model/constants.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/bing-map.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/color-mapping.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/layer-panel.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/annotation.js","../node_modules/@syncfusion/ej2-maps/src/maps/utils/export.js","../node_modules/@syncfusion/ej2-maps/src/maps/maps.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/bubble.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/marker.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/data-label.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/navigation-selected-line.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/legend.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/highlight.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/selection.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/zoom.js","../maps.ts","../node_modules/@syncfusion/ej2-notifications/src/toast/toast.js","../node_modules/@syncfusion/ej2-pivotview/src/base/util.js","../node_modules/@syncfusion/ej2-pivotview/src/base/engine.js","../node_modules/@syncfusion/ej2-pivotview/src/common/base/constant.js","../node_modules/@syncfusion/ej2-pivotview/src/common/base/css-constant.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/renderer/render.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/model/dataSource.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/model/gridsettings.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/excel-export.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/pdf-export.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/keyboard.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/context-menu.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/virtualscroll.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/base/pivotview.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/keyboard.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/event-base.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/node-state-modified.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/dataSource-update.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/error-dialog.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/filter-dialog.js","../node_modules/@syncfusion/ej2-pivotview/src/common/base/pivot-common.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/renderer/dialog-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/renderer/tree-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/renderer/axis-table-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/pivot-button.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/renderer/axis-field-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/renderer/renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/base/field-list.js","../node_modules/@syncfusion/ej2-pivotview/src/common/calculatedfield/calculated-field.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/field-list.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/common.js","../node_modules/@syncfusion/ej2-pivotview/src/common/grouping-bar/axis-field-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/common/grouping-bar/grouping-bar.js","../node_modules/@syncfusion/ej2-pivotview/src/common/conditionalformatting/conditional-formatting.js","../pivotview.ts","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/enum.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/classes.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/items.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/default-locale.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/toolbar-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/dropdown-buttons.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/service-locator.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/renderer-factory.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar-action.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/keyboard.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/color-picker.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-quick-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/popup-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/quick-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/count.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/markdown-selection.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/markdown-toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/execute-command-callback.js","../node_modules/@syncfusion/ej2-richtexteditor/src/common/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/lists.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/formats.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/md-selection-formats.js","../node_modules/@syncfusion/ej2-richtexteditor/src/common/config.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/undo.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/link.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/clearformat.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/base/markdown-parser.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/markdown-formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/markdown-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/markdown-editor.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/selection/selection.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/dom-node.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/lists.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/formats.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/insert-methods.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/nodecutter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/link.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/alignments.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/indents.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/image.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/table.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/isformatted.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-commands.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/undo.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/editor-manager.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/html-formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/content-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/iframe-content-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-editor.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/render.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/link-module.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/image-module.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/view-source.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/table-module.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/interface.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/toolbar-settings.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/iframe-settings.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/inline-mode.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/full-screen.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/rich-text-editor.js","../richtexteditor.ts","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/constant.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/css-constant.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/scroll.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/touch.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/keyboard.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/data.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/timezone/timezone.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/event-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/crud.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/form-validator.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/quick-popups.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/event-tooltip.js","../node_modules/@syncfusion/ej2-schedule/src/recurrence-editor/recurrence-editor.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/event-window.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/renderer.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/work-hours.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/time-scale.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/quick-info-templates.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/header-rows.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/field-options.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/fields.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/event-settings.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/group.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/resources.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/resource.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/schedule.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/action-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/resize.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/drag.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/view-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/work-cells.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/month.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/day.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/week.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/work-week.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/month.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/agenda-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/agenda.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/month-agenda.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/timeline-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-header-row.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-month.js","../schedule.ts","../node_modules/@syncfusion/ej2-treemap/src/treemap/model/theme.js","../node_modules/@syncfusion/ej2-splitbuttons/src/button-group/button-group.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/model/constants.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/model/base.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/layout/render-panel.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/utils/export.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/treemap.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/layout/legend.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/user-interaction/highlight-selection.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/user-interaction/tooltip.js","../treemap.ts"],"sourcesContent":["var instances = 'ej2_instances';\nvar uid = 0;\n/**\n * Create Instance from constructor function with desired parameters.\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @return {any}\n * @private\n */\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n * @param {Function} handler - callback function to be triggered.\n * @return {Function}\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @return {any}\n * @private\n */\nexport function getValue(nameSpace, obj) {\n /* tslint:disable no-any */\n var value = obj;\n var splits = nameSpace.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 var deepmerge = 'deepMerge';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (!isNullOrUndefined(temrObj[deepmerge]) && (temrObj[deepmerge].indexOf(key) !== -1) &&\n (isObject(tempProp[key]) || Array.isArray(tempProp[key]))) {\n extend(temrObj[key], temrObj[key], tempProp[key], true);\n }\n else {\n temrObj[key] = tempProp[key];\n }\n }\n }\n}\n/**\n * Extend the two object with newer one.\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @return {Object}\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied || {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n if (deep && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n result[key] = extend({}, clone, copy, deep);\n }\n else {\n clone = src ? src : [];\n result[key] = extend([], clone, copy, deep);\n }\n }\n else {\n result[key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n * @param {Object} value - To check the object is null or undefined\n * @return {boolean}\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n * @param {Object} value - To check the object is undefined\n * @return {boolean}\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n * @param {string} definedName - To concatenate the unique id to provided name\n * @return {string}\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @return {Function}\n * @private\n */\nexport function debounce(eventFunction, delay) {\n var out;\n // tslint:disable-next-line\n return function () {\n var _this = this;\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n// Added since lint ignored after added '//tslint:disable-next-line' \n/* tslint:disable:no-any */\n/**\n * To convert the object to string for query url\n * @param {Object} data\n * @returns string\n * @private\n */\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n * @param {T[]} value- Specifies the T type array to be checked.\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n * @param{Element} - Specifies the child element to compare with parent.\n * @param{Element} - Specifies the parent element.\n * @return boolean\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n * @param{string} - Specifies the error message to be thrown.\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n * @param{Element} element - Specifies the print content element.\n * @param{Window} printWindow - Specifies the print window.\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('link, style'));\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[i].outerHTML;\n }\n printWindow.document.write(' ' + reference + '' + div.innerHTML +\n '' + '');\n printWindow.document.close();\n printWindow.focus();\n // tslint:disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n * @param {number|string} value\n * @return {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result === 'auto' || result.indexOf('%') !== -1 || result.indexOf('px') !== -1) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n * @param {string | HTMLElement} element\n * @param {any} component\n * @return {Object} inst\n * @private\n */\n// tslint:disable-next-line\nexport function getInstance(element, component) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n for (var _i = 0, _a = elem[instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n * @param {string | HTMLElement} element\n * @param {Object} instance\n * @return {void}\n * @private\n */\nexport function addInstance(element, instance) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n elem[instances].push(instance);\n }\n else {\n elem[instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n * @return {any}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function uniqueID() {\n // tslint:disable-next-line:no-any\n if ((typeof window) === 'undefined') {\n return;\n }\n // tslint:disable-next-line:no-any\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[i];\n }\n return ret;\n}\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined } from './util';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n * @param tagName - Name of the tag, id and class names.\n * @param properties - Object to set properties in the element.\n * @param properties.id - To set the id to the created element.\n * @param properties.className - To add classes to the element.\n * @param properties.innerHTML - To set the innerHTML to element.\n * @param properties.styles - To set the some custom styles to element.\n * @param properties.attrs - To set the attributes to element.\n * @private\n */\nexport function createElement(tagName, properties) {\n //tslint:disable-next-line\n var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n if (ele.className !== '') {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n ele.classList.remove(className);\n }\n }\n }\n return elements;\n}\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n * @param {Element|Node} element - An element the need to check visibility\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function prepend(fromElements, toElement) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function append(fromElements, toElement) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.appendChild(docFrag);\n return fromElements;\n}\n/**\n * The function used to remove the element from the\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @private\n */\nexport function detach(element) {\n var parentNode = element.parentNode;\n return parentNode.removeChild(element);\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @private\n */\nexport function remove(element) {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {{[key:string]:string}} attributes - JSON Object that is going to as attributes.\n * @private\n */\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, attributes[key]);\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function select(selector, context) {\n if (context === void 0) { context = document; }\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function selectAll(selector, context) {\n if (context === void 0) { context = document; }\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * Returns single closest parent element based on class selector.\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n * @param {Element|Node} element - An element that need to get siblings.\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal = element.getAttribute(property);\n if (isNullOrUndefined(attrVal)) {\n element.setAttribute(property, value.toString());\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @return {void}\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n // tslint:disable-next-line:no-any\n element.style[key] = attrs[key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @return {void}\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {void}\n * @private\n */\nexport function matches(element, selector) {\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[curKey];\n}\n/**\n * Returns object array\n * @param {ClassObject} instance\n * @param {string} curKey\n * @param {Object[]} defaultValue\n * @param type\n * @param {boolean} isSetter\n * @returns {Object[]}\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue.length;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[i], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[i], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[i], true]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[curKey] = defaultValue;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Set the properties for the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[curKey] !== newValue) {\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n */\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (this.properties.hasOwnProperty(curKey)) {\n return this.properties[curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Method used to create property. General syntax below.\n * @param {T} defaultValue? - Specifies the default value of property.\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n * @param {T} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Complex({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n * @param {Function} defaultType - Specifies the default value of property.\n * @param {Function} type - Specifies the class factory type of complex object.\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n * @param {T[]} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n * @param {T[]} defaultType - Specifies the default type of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n * @param {Function} defaultValue? - Specifies the default value of property.\n * @param {boolean} isComplex? - Specifies the whether it is complex object.\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n /* tslint:disable no-any */\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n target.propList[propertyType + 'Names'].push(key);\n /* tslint:enable no-any */\n}\n/**\n * Returns an object containing the builder properties\n * @param {Function} component\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n * @param {any} component -specifies the target component for which builder to be created.\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n * @param {Object} context\n * @param {string} prefix\n * @private\n */\nfunction getParentContext(context, prefix) {\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n * @param {MouseEvent} e\n * @param {rippleArgs} eventArgs\n * @returns {void}\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean}\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n * @private\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberParser = function (options) {\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date}\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number}\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData);\n };\n /**\n * Returns the First Day of the Week\n * @returns {number}\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void}\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n * @param {Object[]} obj Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void}\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void}\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n /* tslint:disable no-any */\n var numObject = IntlBase.getDependables(cldrData, locale, true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale)[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the default date CLDR object.\n * @ignore\n * @private\n */\nexport function getDefaultDateObject() {\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 var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORD, function (strs) {\n strs = strs.trim();\n return addNameSpace(strs, !(QUOTES.test(strs)) && (localKeys.indexOf(strs) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(',', nameSpace + '.'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys)) +\n '+\"';\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n //handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition \n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else {\n // evaluate normal expression\n cnt = '\"+' + addNameSpace(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '+\"';\n }\n return cnt;\n });\n}\nfunction addNameSpace(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nvar HAS_ROW = /^[\\n\\r.]+\\ containerWidth) {\n if (overLeft > 0 && overRight <= 0) {\n position.left = containerRight - elemData.width;\n }\n else if (overRight > 0 && overLeft <= 0) {\n position.left = containerLeft;\n }\n else {\n position.left = overLeft > overRight ? (containerRight - elemData.width) : containerLeft;\n }\n }\n else if (overLeft > 0) {\n position.left += overLeft;\n }\n else if (overRight > 0) {\n position.left -= overRight;\n }\n }\n if (axis.Y) {\n var containerHeight = targetContainer ? getTargetContainerHeight() : getViewPortHeight();\n var containerTop = ContainerTop();\n var containerBottom = ContainerBottom();\n var overTop = containerTop - position.top;\n var overBottom = position.top + elemData.height - containerBottom;\n if (elemData.height > containerHeight) {\n if (overTop > 0 && overBottom <= 0) {\n position.top = containerBottom - elemData.height;\n }\n else if (overBottom > 0 && overTop <= 0) {\n position.top = containerTop;\n }\n else {\n position.top = overTop > overBottom ? (containerBottom - elemData.height) : containerTop;\n }\n }\n else if (overTop > 0) {\n position.top += overTop;\n }\n else if (overBottom > 0) {\n position.top -= overBottom;\n }\n }\n return position;\n}\nexport function isCollide(element, viewPortElement, x, y) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n var elemOffset = calculatePosition(element, 'left', 'top');\n if (x) {\n elemOffset.left = x;\n }\n if (y) {\n elemOffset.top = y;\n }\n var data = [];\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n var elementRect = element.getBoundingClientRect();\n var top = elemOffset.top;\n var left = elemOffset.left;\n var right = elemOffset.left + elementRect.width;\n var bottom = elemOffset.top + elementRect.height;\n var topData = '';\n var leftData = '';\n var yAxis = topCollideCheck(top, bottom);\n var xAxis = leftCollideCheck(left, right);\n if (yAxis.topSide) {\n data.push('top');\n }\n if (xAxis.rightSide) {\n data.push('right');\n }\n if (xAxis.leftSide) {\n data.push('left');\n }\n if (yAxis.bottomSide) {\n data.push('bottom');\n }\n return data;\n}\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement, axis, fixedParent) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: true, Y: true }; }\n if (!target || !element || !positionX || !positionY || (!axis.X && !axis.Y)) {\n return;\n }\n var tEdge = { TL: null,\n TR: null,\n BL: null,\n BR: null };\n var eEdge = {\n TL: null,\n TR: null,\n BL: null,\n BR: null\n };\n var elementRect = element.getBoundingClientRect();\n var pos = {\n posX: positionX, posY: positionY, offsetX: offsetX, offsetY: offsetY, position: { left: 0, top: 0 }\n };\n targetContainer = viewPortElement;\n parentDocument = target.ownerDocument;\n updateElementData(target, tEdge, pos, fixedParent, elementRect);\n setPosition(eEdge, pos, elementRect);\n if (axis.X) {\n leftFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n if (axis.Y && tEdge.TL.top > -1) {\n topFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n setPopup(element, pos, elementRect);\n}\nfunction setPopup(element, pos, elementRect) {\n var left = 0;\n var top = 0;\n if (element.offsetParent != null\n && (getComputedStyle(element.offsetParent).position === 'absolute' ||\n getComputedStyle(element.offsetParent).position === 'relative')) {\n var data = calculatePosition(element.offsetParent, 'left', 'top', false, elementRect);\n left = data.left;\n top = data.top;\n }\n element.style.top = (pos.position.top + pos.offsetY - (top)) + 'px';\n element.style.left = (pos.position.left + pos.offsetX - (left)) + 'px';\n}\nfunction updateElementData(target, edge, pos, fixedParent, elementRect) {\n pos.position = calculatePosition(target, pos.posX, pos.posY, fixedParent, elementRect);\n edge.TL = calculatePosition(target, 'left', 'top', fixedParent, elementRect);\n edge.TR = calculatePosition(target, 'right', 'top', fixedParent, elementRect);\n edge.BR = calculatePosition(target, 'left', 'bottom', fixedParent, elementRect);\n edge.BL = calculatePosition(target, 'right', 'bottom', fixedParent, elementRect);\n}\nfunction setPosition(eStatus, pos, elementRect) {\n eStatus.TL = { top: pos.position.top + pos.offsetY, left: pos.position.left + pos.offsetX };\n eStatus.TR = { top: eStatus.TL.top, left: eStatus.TL.left + elementRect.width };\n eStatus.BL = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left };\n eStatus.BR = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left + elementRect.width };\n}\nfunction leftCollideCheck(left, right) {\n var leftSide = false;\n var rightSide = false;\n if (((left - getBodyScrollLeft()) < ContainerLeft())) {\n leftSide = true;\n }\n if (right > ContainerRight()) {\n rightSide = true;\n }\n return { leftSide: leftSide, rightSide: rightSide };\n}\nfunction leftFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = leftCollideCheck(edge.TL.left, edge.TR.left);\n if ((tEdge.TL.left - getBodyScrollLeft()) <= ContainerLeft()) {\n collideSide.leftSide = false;\n }\n if (tEdge.TR.left >= ContainerRight()) {\n collideSide.rightSide = false;\n }\n if ((collideSide.leftSide && !collideSide.rightSide) || (!collideSide.leftSide && collideSide.rightSide)) {\n if (pos.posX === 'right') {\n pos.posX = 'left';\n }\n else {\n pos.posX = 'right';\n }\n pos.offsetX = pos.offsetX + elementRect.width;\n pos.offsetX = -1 * pos.offsetX;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n leftFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = topCollideCheck(edge.TL.top, edge.BL.top);\n if ((tEdge.TL.top - getBodyScrollTop()) <= ContainerTop()) {\n collideSide.topSide = false;\n }\n if (tEdge.BL.top >= ContainerBottom()) {\n collideSide.bottomSide = false;\n }\n if ((collideSide.topSide && !collideSide.bottomSide) || (!collideSide.topSide && collideSide.bottomSide)) {\n if (pos.posY === 'top') {\n pos.posY = 'bottom';\n }\n else {\n pos.posY = 'top';\n }\n pos.offsetY = pos.offsetY + elementRect.height;\n pos.offsetY = -1 * pos.offsetY;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false, elementRect);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n topFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topCollideCheck(top, bottom) {\n var topSide = false;\n var bottomSide = false;\n if ((top - getBodyScrollTop()) < ContainerTop()) {\n topSide = true;\n }\n if (bottom > ContainerBottom()) {\n bottomSide = true;\n }\n return { topSide: topSide, bottomSide: bottomSide };\n}\nfunction getTargetContainerWidth() {\n return targetContainer.getBoundingClientRect().width;\n}\nfunction getTargetContainerHeight() {\n return targetContainer.getBoundingClientRect().height;\n}\nfunction getTargetContainerLeft() {\n return targetContainer.getBoundingClientRect().left;\n}\nfunction getTargetContainerTop() {\n return targetContainer.getBoundingClientRect().top;\n}\nfunction ContainerTop() {\n if (targetContainer) {\n return getTargetContainerTop();\n }\n return 0;\n}\nfunction ContainerLeft() {\n if (targetContainer) {\n return getTargetContainerLeft();\n }\n return 0;\n}\nfunction ContainerRight() {\n if (targetContainer) {\n return (getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth());\n }\n return (getBodyScrollLeft() + getViewPortWidth());\n}\nfunction ContainerBottom() {\n if (targetContainer) {\n return (getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight());\n }\n return (getBodyScrollTop() + getViewPortHeight());\n}\nfunction getBodyScrollTop() {\n // if(targetContainer)\n // return targetContainer.scrollTop;\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\nfunction getBodyScrollLeft() {\n // if(targetContainer)\n // return targetContainer.scrollLeft;\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\nfunction getViewPortHeight() {\n return window.innerHeight;\n}\nfunction getViewPortWidth() {\n return window.innerWidth;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { setStyleAttribute, addClass, removeClass, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { calculatePosition, calculateRelativeBasedPosition } from '../common/position';\nimport { Animation, Property, Event, Component } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { flip, fit, isCollide } from '../common/collision';\n/**\n * Specifies the offset position values.\n */\nvar PositionData = /** @class */ (function (_super) {\n __extends(PositionData, _super);\n function PositionData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('left')\n ], PositionData.prototype, \"X\", void 0);\n __decorate([\n Property('top')\n ], PositionData.prototype, \"Y\", void 0);\n return PositionData;\n}(ChildProperty));\nexport { PositionData };\n// don't use space in classNames\nvar CLASSNAMES = {\n ROOT: 'e-popup',\n RTL: 'e-rtl',\n OPEN: 'e-popup-open',\n CLOSE: 'e-popup-close'\n};\n/**\n * Represents the Popup Component\n * ```html\n *
\n *
Popup Content
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup(element, options) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Popup.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'zIndex':\n setStyleAttribute(this.element, { 'zIndex': newProp.zIndex });\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'position':\n case 'relateTo':\n this.refreshPosition();\n break;\n case 'offsetX':\n var x = newProp.offsetX - oldProp.offsetX;\n this.element.style.left = (parseInt(this.element.style.left, 10) + (x)).toString() + 'px';\n break;\n case 'offsetY':\n var y = newProp.offsetY - oldProp.offsetY;\n this.element.style.top = (parseInt(this.element.style.top, 10) + (y)).toString() + 'px';\n break;\n case 'content':\n this.setContent();\n break;\n case 'actionOnScroll':\n if (newProp.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n else {\n this.unwireScrollEvents();\n }\n break;\n }\n }\n };\n /**\n * gets the Component module name.\n * @private\n */\n Popup.prototype.getModuleName = function () {\n return 'popup';\n };\n /**\n * gets the persisted state properties of the Component.\n */\n Popup.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the control.\n */\n Popup.prototype.destroy = function () {\n this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL);\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Popup.prototype.render = function () {\n this.element.classList.add(CLASSNAMES.ROOT);\n var styles = {};\n if (this.zIndex !== 1000) {\n styles.zIndex = this.zIndex;\n }\n if (this.width !== 'auto') {\n styles.width = formatUnit(this.width);\n }\n if (this.height !== 'auto') {\n styles.height = formatUnit(this.height);\n }\n setStyleAttribute(this.element, styles);\n this.fixedParent = false;\n this.setEnableRtl();\n this.setContent();\n this.wireEvents();\n };\n Popup.prototype.wireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n }\n if (this.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n };\n Popup.prototype.wireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollRefresh, this);\n }\n }\n };\n Popup.prototype.unwireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n }\n if (this.actionOnScroll !== 'none') {\n this.unwireScrollEvents();\n }\n };\n Popup.prototype.unwireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollRefresh);\n }\n }\n };\n Popup.prototype.getRelateToElement = function () {\n var relateToElement = this.relateTo === '' || isNullOrUndefined(this.relateTo) ?\n document.body : this.relateTo;\n this.setProperties({ relateTo: relateToElement }, true);\n return ((typeof this.relateTo) === 'string') ?\n document.querySelector(this.relateTo) : this.relateTo;\n };\n Popup.prototype.scrollRefresh = function (e) {\n if (this.actionOnScroll === 'reposition') {\n if (!(this.element.offsetParent === e.target ||\n (this.element.offsetParent && this.element.offsetParent.tagName === 'BODY' &&\n e.target.parentElement == null))) {\n this.refreshPosition();\n }\n }\n else if (this.actionOnScroll === 'hide') {\n this.hide();\n }\n if (this.actionOnScroll !== 'none') {\n if (this.getRelateToElement()) {\n var targetVisible = this.isElementOnViewport(this.getRelateToElement(), e.target);\n if (!targetVisible && !this.targetInvisibleStatus) {\n this.trigger('targetExitViewport');\n this.targetInvisibleStatus = true;\n }\n else if (targetVisible) {\n this.targetInvisibleStatus = false;\n }\n }\n }\n };\n /**\n * This method is to get the element visibility on viewport when scroll\n * the page. This method will returns true even though 1 px of element\n * part is in visible.\n */\n Popup.prototype.isElementOnViewport = function (relateToElement, scrollElement) {\n var scrollParents = this.getScrollableParent(relateToElement);\n for (var parent_3 = 0; parent_3 < scrollParents.length; parent_3++) {\n if (this.isElementVisible(relateToElement, scrollParents[parent_3])) {\n continue;\n }\n else {\n return false;\n }\n }\n return true;\n };\n Popup.prototype.isElementVisible = function (relateToElement, scrollElement) {\n var rect = this.checkGetBoundingClientRect(relateToElement);\n if (!rect.height || !rect.width) {\n return false;\n }\n if (!isNullOrUndefined(this.checkGetBoundingClientRect(scrollElement))) {\n var parent_4 = scrollElement.getBoundingClientRect();\n return !(rect.bottom < parent_4.top) &&\n (!(rect.bottom > parent_4.bottom) &&\n (!(rect.right > parent_4.right) &&\n !(rect.left < parent_4.left)));\n }\n else {\n var win = window;\n var windowView = {\n top: win.scrollY,\n left: win.scrollX,\n right: win.scrollX + win.outerWidth,\n bottom: win.scrollY + win.outerHeight\n };\n var off = calculatePosition(relateToElement);\n var ele = {\n top: off.top,\n left: off.left,\n right: off.left + rect.width,\n bottom: off.top + rect.height\n };\n var elementView = {\n top: windowView.bottom - ele.top,\n left: windowView.right - ele.left,\n bottom: ele.bottom - windowView.top,\n right: ele.right - windowView.left\n };\n return elementView.top > 0\n && elementView.left > 0\n && elementView.right > 0\n && elementView.bottom > 0;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Popup.prototype.preRender = function () {\n //There is no event handler\n };\n Popup.prototype.setEnableRtl = function () {\n this.reposition();\n this.enableRtl ? this.element.classList.add(CLASSNAMES.RTL) : this.element.classList.remove(CLASSNAMES.RTL);\n };\n Popup.prototype.setContent = function () {\n if (!isNullOrUndefined(this.content)) {\n this.element.innerHTML = '';\n if (typeof (this.content) === 'string') {\n this.element.textContent = this.content;\n }\n else {\n this.element.appendChild(this.content);\n }\n }\n };\n Popup.prototype.orientationOnChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.refreshPosition();\n }, 200);\n };\n /**\n * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n */\n Popup.prototype.refreshPosition = function (target, collision) {\n if (!isNullOrUndefined(target)) {\n this.checkFixedParent(target);\n }\n this.reposition();\n if (!collision) {\n this.checkCollision();\n }\n };\n Popup.prototype.reposition = function () {\n var pos;\n var 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 if (!isNullOrUndefined(pos)) {\n this.element.style.left = pos.left + 'px';\n this.element.style.top = pos.top + 'px';\n }\n };\n Popup.prototype.checkGetBoundingClientRect = function (ele) {\n var eleRect;\n try {\n eleRect = ele.getBoundingClientRect();\n return eleRect;\n }\n catch (error) {\n return null;\n }\n };\n Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY) {\n var eleRect = this.checkGetBoundingClientRect(ele);\n var anchorRect = this.checkGetBoundingClientRect(anchorEle);\n if (isNullOrUndefined(eleRect) || isNullOrUndefined(anchorRect)) {\n return null;\n }\n var anchor = anchorEle;\n var anchorPos = { left: 0, top: 0 };\n if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n anchorPos = calculatePosition(anchorEle);\n }\n else {\n 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 if (isNullOrUndefined(this.viewPortElement)) {\n var data = fit(this.element, this.viewPortElement, param);\n this.element.style.left = data.left + 'px';\n this.element.style.top = data.top + 'px';\n }\n else {\n var elementRect = this.checkGetBoundingClientRect(this.element);\n var viewPortRect = this.checkGetBoundingClientRect(this.viewPortElement);\n if (isNullOrUndefined(elementRect) || isNullOrUndefined(viewPortRect)) {\n return null;\n }\n if (param && param.Y === true) {\n if (viewPortRect.top > elementRect.top) {\n this.element.style.top = '0px';\n }\n else if (viewPortRect.bottom < elementRect.bottom) {\n this.element.style.top = parseInt(this.element.style.top, 10) - (elementRect.bottom - viewPortRect.bottom) + 'px';\n }\n }\n if (param && param.X === true) {\n if (viewPortRect.right < elementRect.right) {\n this.element.style.left = parseInt(this.element.style.left, 10) - (elementRect.right - viewPortRect.right) + 'px';\n }\n else if (viewPortRect.left > elementRect.left) {\n this.element.style.left = parseInt(this.element.style.left, 10) + (viewPortRect.left - elementRect.left) + 'px';\n }\n }\n }\n }\n };\n Popup.prototype.checkCollision = function () {\n var horz = this.collision.X;\n var vert = this.collision.Y;\n if (horz === 'none' && vert === 'none') {\n return;\n }\n if (horz === 'flip' && vert === 'flip') {\n this.callFlip({ X: true, Y: true });\n }\n else if (horz === 'fit' && vert === 'fit') {\n this.callFit({ X: true, Y: true });\n }\n else {\n if (horz === 'flip') {\n this.callFlip({ X: true, Y: false });\n }\n else if (vert === 'flip') {\n this.callFlip({ Y: true, X: false });\n }\n if (horz === 'fit') {\n this.callFit({ X: true, Y: false });\n }\n else if (vert === 'fit') {\n this.callFit({ X: false, Y: true });\n }\n }\n };\n /**\n * Shows the popup element from screen.\n * @param { AnimationModel | Function } collisionOrAnimationOptions? - To pass animation options or collision function.\n * @param { Function } collision? - To pass the collision function.\n * @param { HTMLElement } relativeElement? - To calculate the zIndex value dynamically.\n */\n Popup.prototype.show = function (animationOptions, relativeElement) {\n var _this = this;\n if (this.zIndex === 1000 || !isNullOrUndefined(relativeElement)) {\n var zIndexElement = (isNullOrUndefined(relativeElement)) ? this.element : relativeElement;\n this.zIndex = getZindexPartial(zIndexElement);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n }\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.showAnimation;\n if (this.collision.X !== 'none' || this.collision.Y !== 'none') {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.checkCollision();\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n }\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.begin = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.CLOSE);\n addClass([_this.element], CLASSNAMES.OPEN);\n }\n };\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n _this.trigger('open');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.trigger('open');\n }\n };\n /**\n * Hides the popup element from screen.\n * @param { AnimationModel } animationOptions? - To give the animation options.\n */\n Popup.prototype.hide = function (animationOptions) {\n var _this = this;\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.hideAnimation;\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.OPEN);\n addClass([_this.element], CLASSNAMES.CLOSE);\n _this.trigger('close');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n this.trigger('close');\n }\n };\n /**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n */\n Popup.prototype.getScrollableParent = function (element) {\n this.checkFixedParent(element);\n return getScrollableParent(element, this.fixedParent);\n };\n Popup.prototype.checkFixedParent = function (element) {\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (parentStyle.position === 'fixed' && this.element.offsetParent && this.element.offsetParent.tagName === 'BODY') {\n this.element.style.position = 'fixed';\n this.fixedParent = true;\n }\n parent = parent.parentElement;\n if (isNullOrUndefined(this.element.offsetParent) && parentStyle.position === 'fixed'\n && this.element.style.position === 'fixed') {\n this.fixedParent = true;\n }\n }\n };\n __decorate([\n Property('auto')\n ], Popup.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Popup.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"content\", void 0);\n __decorate([\n Property('container')\n ], Popup.prototype, \"targetType\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"viewPortElement\", void 0);\n __decorate([\n Property({ X: 'none', Y: 'none' })\n ], Popup.prototype, \"collision\", void 0);\n __decorate([\n Property('')\n ], Popup.prototype, \"relateTo\", void 0);\n __decorate([\n Complex({}, PositionData)\n ], Popup.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetY\", void 0);\n __decorate([\n Property(1000)\n ], Popup.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Popup.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('reposition')\n ], Popup.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"showAnimation\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"hideAnimation\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"targetExitViewport\", void 0);\n Popup = __decorate([\n NotifyPropertyChanges\n ], Popup);\n return Popup;\n}(Component));\nexport { Popup };\n/**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n * @private\n */\nexport function getScrollableParent(element, fixedParent) {\n var eleStyle = getComputedStyle(element);\n var scrollParents = [];\n var overflowRegex = /(auto|scroll)/;\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (!(eleStyle.position === 'absolute' && parentStyle.position === 'static')\n && overflowRegex.test(parentStyle.overflow + parentStyle.overflowY + parentStyle.overflowX)) {\n scrollParents.push(parent);\n }\n parent = parent.parentElement;\n }\n if (!fixedParent) {\n scrollParents.push(document);\n }\n return scrollParents;\n}\n/**\n * Gets the maximum z-index of the given element.\n * @param { HTMLElement } element - Specify the element to get the maximum z-index of it.\n * @private\n */\nexport function getZindexPartial(element) {\n // upto body traversal\n var parent = element.parentElement;\n var parentZindex = [];\n while (parent) {\n if (parent.tagName !== 'BODY') {\n var index = document.defaultView.getComputedStyle(parent, null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(parent, null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n parentZindex.push(index);\n }\n parent = parent.parentElement;\n }\n else {\n break;\n }\n }\n //Body direct children element traversal\n var childrenZindex = [];\n for (var i = 0; i < document.body.children.length; i++) {\n if (!element.isEqualNode(document.body.children[i])) {\n var index = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n childrenZindex.push(index);\n }\n }\n }\n childrenZindex.push('999');\n var siblingsZindex = [];\n if (!isNullOrUndefined(element.parentElement) && element.parentElement.tagName !== 'BODY') {\n var childNodes = [].slice.call(element.parentElement.children);\n for (var i = 0; i < childNodes.length; i++) {\n var index = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n siblingsZindex.push(index);\n }\n }\n }\n var finalValue = parentZindex.concat(childrenZindex, siblingsZindex);\n return Math.max.apply(Math, finalValue) + 1;\n}\n/**\n * Gets the maximum z-index of the page.\n * @param { HTMLElement } tagName - Specify the tagName to get the maximum z-index of it.\n * @private\n */\nexport function getMaxZindex(tagName) {\n if (tagName === void 0) { tagName = ['*']; }\n var maxZindex = [];\n for (var i = 0; i < tagName.length; i++) {\n var elements = document.getElementsByTagName(tagName[i]);\n for (var i_1 = 0; i_1 < elements.length; i_1++) {\n var index = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n maxZindex.push(index);\n }\n }\n }\n return Math.max.apply(Math, maxZindex) + 1;\n}\n","import { isNullOrUndefined, classList, createElement } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar spinTemplate = null;\nvar spinCSSClass = null;\nvar DEFT_MAT_WIDTH = 30;\nvar DEFT_FAB_WIDTH = 30;\nvar DEFT_BOOT_WIDTH = 30;\nvar CLS_SHOWSPIN = 'e-spin-show';\nvar CLS_HIDESPIN = 'e-spin-hide';\nvar CLS_MATERIALSPIN = 'e-spin-material';\nvar CLS_FABRICSPIN = 'e-spin-fabric';\nvar CLS_BOOTSPIN = 'e-spin-bootstrap';\nvar CLS_HIGHCONTRASTSPIN = 'e-spin-high-contrast';\nvar CLS_SPINWRAP = 'e-spinner-pane';\nvar CLS_SPININWRAP = 'e-spinner-inner';\nvar CLS_SPINCIRCLE = 'e-path-circle';\nvar CLS_SPINARC = 'e-path-arc';\nvar CLS_SPINLABEL = 'e-spin-label';\nvar CLS_SPINTEMPLATE = 'e-spin-template';\n/**\n * Create a spinner for the specified target element.\n * ```\n * E.g : createSpinner({ target: targetElement, width: '34px', label: 'Loading..' });\n * ```\n * @param args\n * @private\n */\nexport function createSpinner(args, internalCreateElement) {\n var radius;\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = create_spinner_container(args.target, makeElement);\n if (!isNullOrUndefined(args.cssClass)) {\n container.wrap.classList.add(args.cssClass);\n }\n if (!isNullOrUndefined(args.template) || !isNullOrUndefined(spinTemplate)) {\n var template = !isNullOrUndefined(args.template) ? args.template : spinTemplate;\n container.wrap.classList.add(CLS_SPINTEMPLATE);\n replaceContent(container.wrap, template, spinCSSClass);\n }\n else {\n var theme = !isNullOrUndefined(args.type) ? args.type : getTheme(container.wrap);\n var width = !isNullOrUndefined(args.width) ? args.width : undefined;\n radius = calculateRadius(width, theme);\n setTheme(theme, container.wrap, radius, makeElement);\n if (!isNullOrUndefined(args.label)) {\n createLabel(container.inner_wrap, args.label, makeElement);\n }\n }\n container.wrap.classList.add(CLS_HIDESPIN);\n container = null;\n}\nfunction createLabel(container, label, makeElement) {\n var labelEle = makeElement('div', {});\n labelEle.classList.add(CLS_SPINLABEL);\n labelEle.textContent = label;\n container.appendChild(labelEle);\n return labelEle;\n}\nfunction createMaterialSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Material', radius: radius };\n create_material_element(container, uniqueID, makeElement);\n mat_calculate_attributes(radius, container);\n}\nfunction startMatAnimate(container, uniqueID, radius) {\n var globalObject = {};\n var timeOutVar = 0;\n globalTimeOut[uniqueID].timeOut = 0;\n globalObject[uniqueID] = globalVariables(uniqueID, radius, 0, 0);\n var spinnerInfo = { uniqueID: uniqueID, container: container, globalInfo: globalObject, timeOutVar: timeOutVar };\n animateMaterial(spinnerInfo);\n}\nfunction createFabricSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Fabric', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FABRICSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_FABRICSPIN);\n}\nfunction createHighContrastSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'HighContrast', radius: radius };\n create_fabric_element(container, uniqueID, CLS_HIGHCONTRASTSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_HIGHCONTRASTSPIN);\n}\nfunction getTheme(container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n}\nfunction setTheme(theme, container, radius, makeElement) {\n var innerContainer = container.querySelector('.' + CLS_SPININWRAP);\n var svg = innerContainer.querySelector('svg');\n if (!isNullOrUndefined(svg)) {\n innerContainer.removeChild(svg);\n }\n switch (theme) {\n case 'Material':\n createMaterialSpinner(innerContainer, radius, makeElement);\n break;\n case 'Fabric':\n createFabricSpinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap':\n createBootstrapSpinner(innerContainer, radius, makeElement);\n break;\n case 'HighContrast':\n createHighContrastSpinner(innerContainer, radius, makeElement);\n break;\n }\n}\nfunction createBootstrapSpinner(innerContainer, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap', radius: radius };\n create_bootstrap_element(innerContainer, uniqueID, makeElement);\n boot_calculate_attributes(innerContainer, radius);\n}\nfunction create_bootstrap_element(innerContainer, uniqueID, makeElement) {\n var svgBoot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n var viewBoxValue = 64;\n var trans = 32;\n var defaultRadius = 2;\n svgBoot.setAttribute('id', uniqueID);\n svgBoot.setAttribute('class', CLS_BOOTSPIN);\n svgBoot.setAttribute('viewBox', '0 0 ' + viewBoxValue + ' ' + viewBoxValue);\n innerContainer.insertBefore(svgBoot, innerContainer.firstChild);\n for (var item = 0; item <= 7; item++) {\n var bootCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n bootCircle.setAttribute('class', CLS_SPINCIRCLE + '_' + item);\n bootCircle.setAttribute('r', defaultRadius + '');\n bootCircle.setAttribute('transform', 'translate(' + trans + ',' + trans + ')');\n svgBoot.appendChild(bootCircle);\n }\n}\nfunction boot_calculate_attributes(innerContainer, radius) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n svg.style.width = svg.style.height = radius + 'px';\n var x = 0;\n var y = 0;\n var rad = 24;\n var startArc = 90;\n for (var item = 0; item <= 7; item++) {\n var start = defineArcPoints(x, y, rad, startArc);\n var circleEle = svg.querySelector('.' + CLS_SPINCIRCLE + '_' + item);\n circleEle.setAttribute('cx', start.x + '');\n circleEle.setAttribute('cy', start.y + '');\n startArc = startArc >= 360 ? 0 : startArc;\n startArc = startArc + 45;\n }\n}\nfunction generateSeries(begin, stop) {\n var series = [];\n var start = begin;\n var end = stop;\n var increment = false;\n var count = 1;\n formSeries(start);\n function formSeries(i) {\n series.push(i);\n if (i !== end || count === 1) {\n if (i <= start && i > 1 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n else if (i === 1) {\n i = 7;\n i = parseFloat((i + 0.2).toFixed(2));\n increment = true;\n }\n else if (i < 8 && increment) {\n i = parseFloat((i + 0.2).toFixed(2));\n if (i === 8) {\n increment = false;\n }\n }\n else if (i <= 8 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n ++count;\n formSeries(i);\n }\n }\n return series;\n}\nfunction animateBootstrap(innerContainer) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n var id = svg.getAttribute('id');\n for (var i = 1; i <= 8; i++) {\n var circleEle = (innerContainer.getElementsByClassName('e-path-circle_' +\n (i === 8 ? 0 : i))[0]);\n rotation(circleEle, i, i, generateSeries(i, i), id);\n }\n function rotation(circle, start, end, series, id) {\n var count = 0;\n boot_animate(start);\n function boot_animate(radius) {\n if (globalTimeOut[id].isAnimate) {\n ++count;\n circle.setAttribute('r', radius + '');\n if (count >= series.length) {\n count = 0;\n }\n globalTimeOut[id].timeOut = setTimeout(boot_animate.bind(null, series[count]), 18);\n }\n }\n }\n}\nfunction replaceContent(container, template, cssClass) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var inner = container.querySelector('.e-spinner-inner');\n inner.innerHTML = template;\n}\nfunction calculateRadius(width, theme) {\n var defaultSize = theme === 'Material' ? DEFT_MAT_WIDTH : theme === 'Fabric' ? DEFT_FAB_WIDTH : DEFT_BOOT_WIDTH;\n width = width ? parseFloat(width + '') : defaultSize;\n return theme === 'Bootstrap' ? width : width / 2;\n}\nfunction globalVariables(id, radius, count, previousId) {\n return {\n radius: radius,\n count: count,\n previousId: previousId\n };\n}\nfunction random_generator() {\n var random = '';\n var combine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n for (var i = 0; i < 5; i++) {\n random += combine.charAt(Math.floor(Math.random() * combine.length));\n }\n return random;\n}\nfunction create_fabric_element(innerCon, uniqueID, themeClass, makeElement) {\n var svgFabric = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgFabric.setAttribute('id', uniqueID);\n svgFabric.setAttribute('class', themeClass);\n var fabricCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n var fabricCircleArc = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCircleArc.setAttribute('class', CLS_SPINARC);\n innerCon.insertBefore(svgFabric, innerCon.firstChild);\n svgFabric.appendChild(fabricCirclePath);\n svgFabric.appendChild(fabricCircleArc);\n}\nfunction create_material_element(innerContainer, uniqueID, makeElement) {\n var svgMaterial = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgMaterial.setAttribute('class', CLS_MATERIALSPIN);\n svgMaterial.setAttribute('id', uniqueID);\n var matCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n matCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n innerContainer.insertBefore(svgMaterial, innerContainer.firstChild);\n svgMaterial.appendChild(matCirclePath);\n}\nfunction create_spinner_container(target, makeElement) {\n var spinnerContainer = makeElement('div', {});\n spinnerContainer.classList.add(CLS_SPINWRAP);\n var spinnerInnerContainer = makeElement('div', {});\n spinnerInnerContainer.classList.add(CLS_SPININWRAP);\n target.appendChild(spinnerContainer);\n spinnerContainer.appendChild(spinnerInnerContainer);\n return { wrap: spinnerContainer, inner_wrap: spinnerInnerContainer };\n}\nfunction animateMaterial(spinnerInfo) {\n var start = 1;\n var end = 149;\n var duration = 1333;\n var max = 75;\n createCircle(start, end, easeAnimation, duration, spinnerInfo.globalInfo[spinnerInfo.uniqueID].count, max, spinnerInfo);\n spinnerInfo.globalInfo[spinnerInfo.uniqueID].count = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].count % 4;\n}\nfunction createCircle(start, end, easing, duration, count, max, spinnerInfo) {\n var id = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId;\n var startTime = new Date().getTime();\n var change = end - start;\n var diameter = getSize((spinnerInfo.globalInfo[spinnerInfo.uniqueID].radius * 2) + '');\n var strokeSize = getStrokeSize(diameter);\n var rotate = -90 * (spinnerInfo.globalInfo[spinnerInfo.uniqueID].count || 0);\n mat_animation(spinnerInfo);\n function mat_animation(spinnerInfo) {\n var currentTime = Math.max(0, Math.min(new Date().getTime() - startTime, duration));\n updatePath(easing(currentTime, start, change, duration), spinnerInfo.container);\n if (id === spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId && currentTime < duration) {\n globalTimeOut[spinnerInfo.uniqueID].timeOut = setTimeout(mat_animation.bind(null, spinnerInfo), 1);\n }\n else {\n animateMaterial(spinnerInfo);\n }\n }\n function updatePath(value, container) {\n if ((!isNullOrUndefined(container.querySelector('svg.e-spin-material')))\n && (!isNullOrUndefined(container.querySelector('svg.e-spin-material').querySelector('path.e-path-circle')))) {\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, value, max) + '');\n path.setAttribute('transform', 'rotate(' + (rotate) + ' ' + diameter / 2 + ' ' + diameter / 2 + ')');\n }\n }\n}\nfunction mat_calculate_attributes(radius, container) {\n var diameter = radius * 2;\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n var strokeSize = getStrokeSize(diameter);\n var transformOrigin = (diameter / 2) + 'px';\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.width = svg.style.height = diameter + 'px';\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n path.setAttribute('stroke-width', strokeSize + '');\n path.setAttribute('d', drawArc(diameter, strokeSize));\n path.setAttribute('stroke-dasharray', ((diameter - strokeSize) * Math.PI * 0.75) + '');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, 1, 75) + '');\n}\nfunction getSize(value) {\n var parsed = parseFloat(value);\n return parsed;\n}\nfunction drawArc(diameter, strokeSize) {\n var radius = diameter / 2;\n var offset = strokeSize / 2;\n return 'M' + radius + ',' + offset\n + 'A' + (radius - offset) + ',' + (radius - offset) + ' 0 1 1 ' + offset + ',' + radius;\n}\nfunction getStrokeSize(diameter) {\n return 10 / 100 * diameter;\n}\nfunction getDashOffset(diameter, strokeSize, value, max) {\n return (diameter - strokeSize) * Math.PI * ((3 * (max) / 100) - (value / 100));\n}\nfunction easeAnimation(current, start, change, duration) {\n var timestamp = (current /= duration) * current;\n var timecount = timestamp * current;\n return start + change * (6 * timecount * timestamp + -15 * timestamp * timestamp + 10 * timecount);\n}\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n var centerX = radius;\n var centerY = radius;\n var diameter = radius * 2;\n var startArc = 315;\n var endArc = 45;\n var svg = innerConainer.querySelector('.' + trgClass);\n var circle = svg.querySelector('.e-path-circle');\n var path = svg.querySelector('.e-path-arc');\n var transformOrigin = (diameter / 2) + 'px';\n circle.setAttribute('d', defineCircle(centerX, centerY, radius));\n path.setAttribute('d', defineArc(centerX, centerY, radius, startArc, endArc));\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n svg.style.width = svg.style.height = diameter + 'px';\n}\nfunction defineArcPoints(centerX, centerY, radius, angle) {\n var radians = (angle - 90) * Math.PI / 180.0;\n return {\n x: centerX + (radius * Math.cos(radians)),\n y: centerY + (radius * Math.sin(radians))\n };\n}\nfunction defineArc(x, y, radius, startArc, endArc) {\n var start = defineArcPoints(x, y, radius, endArc);\n var end = defineArcPoints(x, y, radius, startArc);\n var d = [\n 'M', start.x, start.y,\n 'A', radius, radius, 0, 0, 0, end.x, end.y\n ].join(' ');\n return d;\n}\nfunction defineCircle(x, y, radius) {\n var d = [\n 'M', x, y,\n 'm', -radius, 0,\n 'a', radius, radius, 0, 1, 0, radius * 2, 0,\n 'a', radius, radius, 0, 1, 0, -radius * 2, 0,\n ].join(' ');\n return d;\n}\n/**\n * Function to show the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function showSpinner(container) {\n showHideSpinner(container, false);\n container = null;\n}\nfunction showHideSpinner(container, isHide) {\n var spinnerWrap = container.classList.contains(CLS_SPINWRAP) ? container :\n container.querySelector('.' + CLS_SPINWRAP);\n var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n var spinCheck;\n spinCheck = isHide ? !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_HIDESPIN) :\n !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_SHOWSPIN);\n if (spinCheck) {\n var svgEle = spinnerWrap.querySelector('svg');\n if (isNullOrUndefined(svgEle)) {\n return;\n }\n var id = svgEle.getAttribute('id');\n globalTimeOut[id].isAnimate = !isHide;\n switch (globalTimeOut[id].type) {\n case 'Material':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : startMatAnimate(inner, id, globalTimeOut[id].radius);\n break;\n case 'Bootstrap':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : animateBootstrap(inner);\n break;\n }\n }\n isHide ? classList(spinnerWrap, [CLS_HIDESPIN], [CLS_SHOWSPIN]) : classList(spinnerWrap, [CLS_SHOWSPIN], [CLS_HIDESPIN]);\n container = null;\n}\n/**\n * Function to hide the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function hideSpinner(container) {\n showHideSpinner(container, true);\n container = null;\n}\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : setSpinner({ cssClass: 'custom-css'; type: 'Material' });\n * ```\n * @param args\n * @private\n */\nexport function setSpinner(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.template !== undefined) {\n spinTemplate = args.template;\n if (args.template !== undefined) {\n spinCSSClass = args.cssClass;\n }\n }\n var container = document.querySelectorAll('.' + CLS_SPINWRAP);\n for (var index = 0; index < container.length; index++) {\n ensureTemplate(args.template, container[index], args.type, args.cssClass, makeElement);\n }\n}\nfunction ensureTemplate(template, container, theme, cssClass, makeEle) {\n if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n replaceTheme(container, theme, cssClass, makeEle);\n if (container.classList.contains(CLS_SHOWSPIN)) {\n container.classList.remove(CLS_SHOWSPIN);\n showSpinner(container);\n }\n else {\n container.classList.remove(CLS_HIDESPIN);\n hideSpinner(container);\n }\n }\n else {\n spinTemplate = template;\n if (!isNullOrUndefined(cssClass)) {\n spinCSSClass = cssClass;\n }\n }\n}\nfunction replaceTheme(container, theme, cssClass, makeEle) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var svgElement = container.querySelector('svg');\n var radius = theme === 'Bootstrap' ? parseFloat(svgElement.style.height) : parseFloat(svgElement.style.height) / 2;\n var classNames = svgElement.getAttribute('class');\n var svgClassList = classNames.split(/\\s/);\n if (svgClassList.indexOf('e-spin-material') >= 0) {\n var id = svgElement.getAttribute('id');\n clearTimeout(globalTimeOut[id].timeOut);\n }\n setTheme(theme, container, radius, makeEle);\n}\n","/**\n * MaskedTextBox base module\n */\nimport { EventHandler, isNullOrUndefined, merge, attributes, addClass, removeClass, Browser, extend } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nvar ERROR = 'e-error';\nvar INPUTGROUP = 'e-input-group';\nvar FLOATINPUT = 'e-float-input';\nvar UTILMASK = 'e-utility-mask';\nvar TOPLABEL = 'e-label-top';\nvar BOTTOMLABEL = 'e-label-bottom';\n/**\n * @hidden\n * Built-in masking elements collection.\n */\nexport var regularExpressions = {\n '0': '[0-9]',\n '9': '[0-9 ]',\n '#': '[0-9 +-]',\n 'L': '[A-Za-z]',\n '?': '[A-Za-z ]',\n '&': '[^\\x7f ]+',\n 'C': '[^\\x7f]+',\n 'A': '[A-Za-z0-9]',\n 'a': '[A-Za-z0-9 ]',\n};\n/**\n * @hidden\n * Generate required masking elements to the MaskedTextBox from user mask input.\n */\nexport function createMask() {\n attributes(this.element, {\n 'role': 'textbox', 'autocomplete': 'off', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': ''\n });\n if (this.mask) {\n var splitMask = this.mask.split(']');\n for (var i = 0; i < splitMask.length; i++) {\n if (splitMask[i][splitMask[i].length - 1] === '\\\\') {\n splitMask[i] = splitMask[i] + ']';\n var splitInnerMask = splitMask[i].split('[');\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j][splitInnerMask[j].length - 1] === '\\\\') {\n splitInnerMask[j] = splitInnerMask[j] + '[';\n }\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n else {\n var splitInnerMask = splitMask[i].split('[');\n if (splitInnerMask.length > 1) {\n var chkSpace = false;\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j] === '\\\\') {\n this.customRegExpCollec.push('[');\n this.hiddenMask += splitInnerMask[j] + '[';\n }\n else if (splitInnerMask[j] === '') {\n chkSpace = true;\n }\n else if ((splitInnerMask[j] !== '' && chkSpace) || j === splitInnerMask.length - 1) {\n this.customRegExpCollec.push('[' + splitInnerMask[j] + ']');\n this.hiddenMask += this.promptChar;\n chkSpace = false;\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[0]);\n }\n }\n }\n this.escapeMaskValue = this.hiddenMask;\n this.promptMask = this.hiddenMask.replace(/[09?LCAa#&]/g, this.promptChar);\n if (!isNullOrUndefined(this.customCharacters)) {\n for (var i = 0; i < this.promptMask.length; i++) {\n if (!isNullOrUndefined(this.customCharacters[this.promptMask[i]])) {\n this.promptMask = this.promptMask.replace(new RegExp(this.promptMask[i], 'g'), this.promptChar);\n }\n }\n }\n var escapeNumber = 0;\n if (this.hiddenMask.match(new RegExp(/\\\\/))) {\n for (var i = 0; i < this.hiddenMask.length; i++) {\n var j = 0;\n if (i >= 2) {\n j = i;\n }\n escapeNumber = this.hiddenMask.length - this.promptMask.length;\n j = j - escapeNumber;\n if ((i > 0 && this.hiddenMask[i - 1] !== '\\\\') && (this.hiddenMask[i] === '>' ||\n this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|')) {\n this.promptMask = this.promptMask.substring(0, j) +\n this.promptMask.substring((i + 1) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) +\n this.escapeMaskValue.substring((i + 1) - escapeNumber, this.escapeMaskValue.length);\n }\n if (this.hiddenMask[i] === '\\\\') {\n this.promptMask = this.promptMask.substring(0, j) + this.hiddenMask[i + 1] +\n this.promptMask.substring((i + 2) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) + this.escapeMaskValue[i + 1] +\n this.escapeMaskValue.substring((i + 2) - escapeNumber, this.escapeMaskValue.length);\n }\n }\n }\n else {\n this.promptMask = this.promptMask.replace(/[>|<]/g, '');\n this.escapeMaskValue = this.hiddenMask.replace(/[>|<]/g, '');\n }\n attributes(this.element, { 'aria-invalid': 'false' });\n }\n}\n/**\n * @hidden\n * Apply mask ability with masking elements to the MaskedTextBox.\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * @hidden\n * To wire required events to the MaskedTextBox.\n */\nexport function wireEvents() {\n EventHandler.add(this.element, 'keydown', maskInputKeyDownHandler, this);\n EventHandler.add(this.element, 'keypress', maskInputKeyPressHandler, this);\n EventHandler.add(this.element, 'keyup', maskInputKeyUpHandler, this);\n EventHandler.add(this.element, 'input', maskInputHandler, this);\n EventHandler.add(this.element, 'focus', maskInputFocusHandler, this);\n EventHandler.add(this.element, 'blur', maskInputBlurHandler, this);\n EventHandler.add(this.element, 'paste', maskInputPasteHandler, this);\n EventHandler.add(this.element, 'cut', maskInputCutHandler, this);\n EventHandler.add(this.element, 'drop', maskInputDropHandler, this);\n if (this.enabled) {\n bindClearEvent.call(this);\n }\n}\n/**\n * @hidden\n * To unwire events attached to the MaskedTextBox.\n */\nexport function unwireEvents() {\n EventHandler.remove(this.element, 'keydown', maskInputKeyDownHandler);\n EventHandler.remove(this.element, 'keypress', maskInputKeyPressHandler);\n EventHandler.remove(this.element, 'keyup', maskInputKeyUpHandler);\n EventHandler.remove(this.element, 'input', maskInputHandler);\n EventHandler.remove(this.element, 'focus', maskInputFocusHandler);\n EventHandler.remove(this.element, 'blur', maskInputBlurHandler);\n EventHandler.remove(this.element, 'paste', maskInputPasteHandler);\n EventHandler.remove(this.element, 'cut', maskInputCutHandler);\n}\n/**\n * @hidden\n * To bind required events to the MaskedTextBox clearButton.\n */\nexport function bindClearEvent() {\n if (this.showClearButton) {\n EventHandler.add(this.inputObj.clearButton, 'mousedown touchstart', resetHandler, this);\n }\n}\nfunction resetHandler(e) {\n e.preventDefault();\n if (!this.inputObj.clearButton.classList.contains('e-clear-icon-hide')) {\n clear.call(this, e);\n }\n}\nfunction clear(event) {\n var value = this.element.value;\n setElementValue.call(this, this.promptMask);\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n triggerMaskChangeEvent.call(this, event, value);\n this.element.setSelectionRange(0, 0);\n}\n/**\n * @hidden\n * To get masked value from the MaskedTextBox.\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * @hidden\n * To extract raw value from the MaskedTextBox.\n */\nexport function strippedValue(element, maskValues) {\n var value = '';\n var k = 0;\n var checkMask = false;\n var maskValue = (!isNullOrUndefined(maskValues)) ? maskValues : (!isNullOrUndefined(element) &&\n !isNullOrUndefined(this)) ? element.value : maskValues;\n if (maskValue !== this.promptMask) {\n for (var i = 0; i < this.customRegExpCollec.length; i++) {\n if (checkMask) {\n checkMask = false;\n }\n if (this.customRegExpCollec[k] === '>' || this.customRegExpCollec[k] === '<' ||\n this.customRegExpCollec[k] === '|' || this.customRegExpCollec[k] === '\\\\') {\n --i;\n checkMask = true;\n }\n if (!checkMask) {\n if ((maskValue[i] !== this.promptChar) && (!isNullOrUndefined(this.customRegExpCollec[k]) &&\n ((!isNullOrUndefined(this.regExpCollec[this.customRegExpCollec[k]])) ||\n (this.customRegExpCollec[k].length > 2 && this.customRegExpCollec[k][0] === '[' &&\n this.customRegExpCollec[k][this.customRegExpCollec[k].length - 1] === ']') ||\n (!isNullOrUndefined(this.customCharacters) &&\n (!isNullOrUndefined(this.customCharacters[this.customRegExpCollec[k]]))))) && (maskValue !== '')) {\n value += maskValue[i];\n }\n }\n ++k;\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n value = maskValue;\n }\n return value;\n}\nfunction pushIntoRegExpCollec(value) {\n for (var k = 0; k < value.length; k++) {\n this.hiddenMask += value[k];\n if (value[k] !== '\\\\') {\n this.customRegExpCollec.push(value[k]);\n }\n }\n}\nexport function maskInputFocusHandler(event) {\n var _this = this;\n if (this.promptMask.length > 0) {\n this.focusEventArgs = { selectionStart: 0, selectionEnd: this.promptMask.length };\n }\n else {\n this.focusEventArgs = { selectionStart: 0, selectionEnd: this.element.value.length };\n }\n var eventArgs = {};\n merge(eventArgs, this.focusEventArgs);\n this.trigger('focus', eventArgs);\n this.focusEventArgs = eventArgs;\n if (this.mask) {\n this.isFocus = true;\n if (this.element.value === '') {\n setElementValue.call(this, this.promptMask);\n }\n else {\n setElementValue.call(this, this.element.value);\n }\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(this.focusEventArgs.selectionStart, this.focusEventArgs.selectionEnd);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 450 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(_this.focusEventArgs.selectionStart, _this.focusEventArgs.selectionEnd);\n }, delay);\n }\n }\n}\nexport function maskInputBlurHandler(event) {\n if (this.mask) {\n this.isFocus = false;\n if (this.placeholder && this.element.value === this.promptMask && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.floatLabelType === 'Auto' && !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL)) {\n removeClass([labelElement], TOPLABEL);\n }\n }\n }\n}\nfunction maskInputPasteHandler(event) {\n var _this = this;\n if (this.mask) {\n var sIndex_1 = this.element.selectionStart;\n var eIndex_1 = this.element.selectionEnd;\n var oldValue_1 = this.element.value;\n setElementValue.call(this, '');\n this._callPasteHandler = true;\n setTimeout(function () {\n var value = _this.element.value.replace(/ /g, '');\n if (_this.redoCollec.length > 0 && _this.redoCollec[0].value === _this.element.value) {\n value = strippedValue.call(_this, _this.element);\n }\n setElementValue.call(_this, oldValue_1);\n _this.element.selectionStart = sIndex_1;\n _this.element.selectionEnd = eIndex_1;\n var i = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i], false, null);\n ++i;\n } while (i < value.length);\n _this.maskKeyPress = false;\n _this._callPasteHandler = false;\n if (_this.element.value === oldValue_1) {\n var i_1 = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i_1], false, null);\n ++i_1;\n } while (i_1 < value.length);\n _this.maskKeyPress = false;\n }\n else {\n triggerMaskChangeEvent.call(_this, event, oldValue_1);\n }\n }, 1);\n }\n}\nfunction maskInputCutHandler(event) {\n var _this = this;\n if (this.mask) {\n var preValue_1 = this.element.value;\n var sIndex_2 = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd });\n var value_1 = this.element.value.substring(0, sIndex_2) + this.promptMask.substring(sIndex_2, eIndex) +\n this.element.value.substring(eIndex);\n setTimeout(function () {\n setElementValue.call(_this, value_1);\n _this.element.selectionStart = _this.element.selectionEnd = sIndex_2;\n if (_this.element.value !== preValue_1) {\n triggerMaskChangeEvent.call(_this, event, null);\n }\n }, 0);\n }\n}\nexport function maskInputDropHandler(event) {\n event.preventDefault();\n}\nfunction maskInputHandler(event) {\n var eventArgs = { ctrlKey: false, keyCode: 229 };\n // tslint:disable-next-line\n extend(event, eventArgs);\n if (this.mask) {\n if (this.element.value === '') {\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (!this._callPasteHandler) {\n removeMaskInputValues.call(this, event);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var value = this.element.value.substring(startIndex - addedValues, startIndex);\n this.maskKeyPress = false;\n var i = 0;\n do {\n validateValue.call(this, value[i], event.ctrlKey, event);\n ++i;\n } while (i < value.length);\n if (this.element.value !== this.preEleVal) {\n triggerMaskChangeEvent.call(this, event, null);\n }\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (val === '') {\n setElementValue.call(this, this.promptMask);\n this.element.setSelectionRange(0, 0);\n }\n }\n}\nfunction maskInputKeyDownHandler(event) {\n if (this.mask) {\n var value = this;\n if (event.keyCode !== 229) {\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n event.preventDefault();\n }\n removeMaskInputValues.call(this, event);\n }\n var startValue = this.element.value;\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n var collec = void 0;\n if (event.keyCode === 90 && this.undoCollec.length > 0 && startValue !== this.undoCollec[this.undoCollec.length - 1].value) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.undoCollec.splice(this.undoCollec.length - 1, 1);\n }\n else if (event.keyCode === 89 && this.redoCollec.length > 0 && startValue !== this.redoCollec[0].value) {\n collec = this.redoCollec[0];\n this.undoCollec.push({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.redoCollec.splice(0, 1);\n }\n }\n }\n}\nexport function mobileRemoveFunction() {\n var collec;\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n collec = this.redoCollec[0];\n setElementValue.call(this, collec.value);\n if ((collec.startIndex - sIndex) === 1) {\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n }\n else {\n this.element.selectionStart = sIndex + 1;\n this.element.selectionEnd = eIndex + 1;\n }\n }\n else {\n setElementValue.call(this, this.promptMask);\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n }\n}\nfunction autoFillMaskInputValues(isRemove, oldEventVal, event) {\n if (event.type === 'input') {\n isRemove = false;\n oldEventVal = this.element.value;\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, oldEventVal);\n }\n return isRemove;\n}\nfunction removeMaskInputValues(event) {\n var isRemove = false;\n var oldEventVal;\n var isDeleted = false;\n if (this.element.value.length < this.promptMask.length) {\n isRemove = true;\n oldEventVal = this.element.value;\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n mobileRemoveFunction.call(this);\n }\n if (this.element.value.length >= this.promptMask.length && event.type === 'input') {\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n }\n var initStartIndex = this.element.selectionStart;\n var initEndIndex = this.element.selectionEnd;\n var startIndex = this.element.selectionStart;\n var endIndex = this.element.selectionEnd;\n var maskValue = this.hiddenMask.replace(/[>|\\\\<]/g, '');\n var curMask = maskValue[startIndex - 1];\n var parentElement = this.element.parentNode;\n if (isRemove || event.keyCode === 8 || event.keyCode === 46) {\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: endIndex });\n var multipleDel = false;\n var preValue = this.element.value;\n if (startIndex > 0 || ((event.keyCode === 8 || event.keyCode === 46) && startIndex < this.element.value.length\n && ((this.element.selectionEnd - startIndex) !== this.element.value.length))) {\n var index = startIndex;\n if (startIndex !== endIndex) {\n startIndex = endIndex;\n if (event.keyCode === 46) {\n multipleDel = true;\n }\n }\n else if (event.keyCode === 46) {\n ++index;\n }\n else {\n --index;\n }\n for (var k = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? k > index : k < index; (event.keyCode === 8 || isRemove || multipleDel) ? k-- : k++) {\n for (var i = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? i > 0 : i < this.element.value.length; (event.keyCode === 8 || isRemove || multipleDel) ? i-- : i++) {\n var sIndex = void 0;\n if (((event.keyCode === 8 || multipleDel) && ((initStartIndex !== initEndIndex && initStartIndex !== startIndex) ||\n (initStartIndex === initEndIndex))) || isRemove) {\n curMask = maskValue[i - 1];\n sIndex = startIndex - 1;\n }\n else {\n curMask = maskValue[i];\n sIndex = startIndex;\n ++startIndex;\n }\n var oldValue = this.element.value[sIndex];\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (!isNullOrUndefined(this.customCharacters)\n && isNullOrUndefined(this.customCharacters[curMask]))\n && ((this.hiddenMask[sIndex] !== this.promptChar && this.customRegExpCollec[sIndex][0] !== '['\n && this.customRegExpCollec[sIndex][this.customRegExpCollec[sIndex].length - 1] !== ']')))\n || (this.promptMask[sIndex] !== this.promptChar && isNullOrUndefined(this.customCharacters))) {\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n ++this.element.selectionStart;\n }\n }\n else {\n var value = this.element.value;\n var prompt_1 = this.promptChar;\n var elementValue = value.substring(0, sIndex) + prompt_1 + value.substring(startIndex, value.length);\n setElementValue.call(this, elementValue);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n isDeleted = true;\n }\n startIndex = this.element.selectionStart;\n if ((!isDeleted && event.keyCode === 8) || multipleDel || (!isDeleted && !(event.keyCode === 46))) {\n sIndex = startIndex - 1;\n }\n else {\n sIndex = startIndex;\n isDeleted = false;\n }\n oldValue = this.element.value[sIndex];\n if (((initStartIndex !== initEndIndex) && (this.element.selectionStart === initStartIndex))\n || (this.promptMask[sIndex] === this.promptChar) || ((oldValue !== this.promptMask[sIndex]) &&\n (this.promptMask[sIndex] !== this.promptChar) && !isNullOrUndefined(this.customCharacters))) {\n break;\n }\n }\n }\n }\n if (this.element.selectionStart === 0 && (this.element.selectionEnd === this.element.value.length)) {\n setElementValue.call(this, this.promptMask);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = startIndex;\n }\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n if (this.element.value !== preValue) {\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n}\nfunction maskInputKeyPressHandler(event) {\n if (this.mask) {\n var oldValue = this.element.value;\n if ((!event.ctrlKey) || (event.ctrlKey && event.code !== 'KeyA' && event.code !== 'KeyY'\n && event.code !== 'KeyZ' && event.code !== 'KeyX' && event.code !== 'KeyC' && event.code !== 'KeyV')) {\n this.maskKeyPress = true;\n var key = event.key;\n if (key === 'Spacebar') {\n key = String.fromCharCode(event.keyCode);\n }\n if (!key) {\n this.isIosInvalid = true;\n validateValue.call(this, String.fromCharCode(event.keyCode), event.ctrlKey, event);\n event.preventDefault();\n this.isIosInvalid = false;\n }\n else if (key && key.length === 1) {\n validateValue.call(this, key, event.ctrlKey, event);\n event.preventDefault();\n }\n }\n if (this.element.value !== oldValue) {\n triggerMaskChangeEvent.call(this, event, oldValue);\n }\n }\n}\nfunction triggerMaskChangeEvent(event, oldValue) {\n if (!isNullOrUndefined(this.changeEventArgs) && !this.isInitial) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.element.value, maskedValue: this.element.value, isInteraction: false };\n if (this.mask) {\n this.changeEventArgs.value = strippedValue.call(this, this.element);\n }\n if (!isNullOrUndefined(event)) {\n this.changeEventArgs.isInteraction = true;\n this.changeEventArgs.event = event;\n }\n merge(eventArgs, this.changeEventArgs);\n this.trigger('change', eventArgs);\n }\n this.preEleVal = this.element.value;\n 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 if (this.element.selectionStart === 0 && this.element.selectionEnd === 0) {\n // tslint:disable-next-line\n var temp_1 = this.element;\n setTimeout(function () {\n temp_1.setSelectionRange(0, 0);\n }, 0);\n }\n}\nfunction mobileSwipeCheck(key) {\n if (key.length > 1 && ((this.promptMask.length + key.length) < this.element.value.length)) {\n var elementValue = this.redoCollec[0].value.substring(0, this.redoCollec[0].startIndex) + key +\n this.redoCollec[0].value.substring(this.redoCollec[0].startIndex, this.redoCollec[0].value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = this.redoCollec[0].startIndex + key.length;\n }\n this.element.selectionStart = this.element.selectionStart - key.length;\n this.element.selectionEnd = this.element.selectionEnd - key.length;\n}\nfunction mobileValidation(key) {\n if (!this.maskKeyPress) {\n mobileSwipeCheck.call(this, key);\n }\n}\nfunction validateValue(key, isCtrlKey, event) {\n mobileValidation.call(this, key);\n if (isNullOrUndefined(this) || isNullOrUndefined(key)) {\n return;\n }\n var startIndex = this.element.selectionStart;\n var initStartIndex = startIndex;\n var endIndex = this.element.selectionEnd;\n var curMask;\n var allowText = false;\n var value = this.element.value;\n var eventOldVal;\n var prevSupport = false;\n var isEqualVal = false;\n for (var k = 0; k < key.length; k++) {\n var keyValue = key[k];\n startIndex = this.element.selectionStart;\n endIndex = this.element.selectionEnd;\n if (!this.maskKeyPress && initStartIndex === startIndex) {\n startIndex = startIndex + k;\n }\n if ((!this.maskKeyPress || startIndex < this.promptMask.length)) {\n for (var i = startIndex; i < this.promptMask.length; i++) {\n var maskValue = this.escapeMaskValue;\n curMask = maskValue[startIndex];\n if (this.hiddenMask[startIndex] === '\\\\' && this.hiddenMask[startIndex + 1] === key) {\n isEqualVal = true;\n }\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (isNullOrUndefined(this.customCharacters)\n || (!isNullOrUndefined(this.customCharacters) && isNullOrUndefined(this.customCharacters[curMask])))\n && ((this.hiddenMask[startIndex] !== this.promptChar && this.customRegExpCollec[startIndex][0] !== '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] !== ']')))\n || ((this.promptMask[startIndex] !== this.promptChar) && isNullOrUndefined(this.customCharacters))\n || (this.promptChar === curMask && this.escapeMaskValue === this.mask)) {\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n startIndex = this.element.selectionStart;\n curMask = this.hiddenMask[startIndex];\n }\n }\n if (!isNullOrUndefined(this.customCharacters) && !isNullOrUndefined(this.customCharacters[curMask])) {\n var customValStr = this.customCharacters[curMask];\n var customValArr = customValStr.split(',');\n for (var i = 0; i < customValArr.length; i++) {\n if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\n }\n else if (!isNullOrUndefined(this.regExpCollec[curMask]) && keyValue.match(new RegExp(this.regExpCollec[curMask]))\n && this.promptMask[startIndex] === this.promptChar) {\n allowText = true;\n }\n else if (this.promptMask[startIndex] === this.promptChar && this.customRegExpCollec[startIndex][0] === '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] === ']'\n && keyValue.match(new RegExp(this.customRegExpCollec[startIndex]))) {\n allowText = true;\n }\n if ((!this.maskKeyPress || startIndex < this.hiddenMask.length) && allowText) {\n if (k === 0) {\n if (this.maskKeyPress) {\n this.undoCollec.push({ value: value, startIndex: startIndex, endIndex: startIndex });\n }\n else {\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n eventOldVal = this.redoCollec[0].value;\n setElementValue.call(this, eventOldVal);\n this.undoCollec.push(this.redoCollec[0]);\n }\n else {\n this.undoCollec.push({ value: this.promptMask, startIndex: startIndex, endIndex: startIndex });\n eventOldVal = this.promptMask;\n setElementValue.call(this, eventOldVal);\n }\n this.element.selectionStart = sIndex;\n this.element.selectionEnd = eIndex;\n }\n }\n startIndex = this.element.selectionStart;\n applySupportedValues.call(this, event, startIndex, keyValue, eventOldVal, isEqualVal);\n prevSupport = true;\n if (k === key.length - 1) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n allowText = false;\n }\n else {\n startIndex = this.element.selectionStart;\n preventUnsupportedValues.call(this, event, startIndex, initStartIndex, key, isCtrlKey, prevSupport);\n }\n if (k === key.length - 1 && !allowText) {\n if (!Browser.isAndroid || (Browser.isAndroid && startIndex < this.promptMask.length)) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n }\n }\n else {\n if (key.length === 1 && !isCtrlKey && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n }\n }\n}\nfunction applySupportedValues(event, startIndex, keyValue, eventOldVal, isEqualVal) {\n if (this.hiddenMask.length > this.promptMask.length) {\n keyValue = changeToLowerUpperCase.call(this, keyValue, this.element.value);\n }\n if (!isEqualVal) {\n var value = this.element.value;\n var elementValue = value.substring(0, startIndex) + keyValue + value.substring(startIndex + 1, value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n }\n}\nfunction preventUnsupportedValues(event, sIdx, idx, key, ctrl, chkSupport) {\n if (!this.maskKeyPress) {\n var eventOldVal = void 0;\n var value = this.element.value;\n if (sIdx >= this.promptMask.length) {\n setElementValue.call(this, value.substring(0, sIdx));\n }\n else {\n if (idx === sIdx) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx + 1, value.length));\n }\n else {\n if (this.promptMask.length === this.element.value.length) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx, value.length));\n }\n else {\n setElementValue.call(this, value.substring(0, idx) + value.substring(idx + 1, value.length));\n }\n }\n this.element.selectionStart = this.element.selectionEnd = (chkSupport ||\n this.element.value[idx] !== this.promptChar) ? sIdx : idx;\n }\n eventOldVal = this.element.value;\n addMaskErrorClass.call(this);\n }\n if (key.length === 1 && !ctrl && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n}\nfunction addMaskErrorClass() {\n var _this = this;\n var parentElement = this.element.parentNode;\n var timer = 200;\n if (parentElement.classList.contains(INPUTGROUP) || parentElement.classList.contains(FLOATINPUT)) {\n addClass([parentElement], ERROR);\n }\n else {\n addClass([this.element], ERROR);\n }\n if (this.isIosInvalid === true) {\n timer = 400;\n }\n attributes(this.element, { 'aria-invalid': 'true' });\n setTimeout(function () {\n if (!_this.maskKeyPress) {\n removeMaskError.call(_this);\n }\n }, timer);\n}\nfunction removeMaskError() {\n var parentElement = this.element.parentNode;\n removeClass([parentElement], ERROR);\n removeClass([this.element], ERROR);\n attributes(this.element, { 'aria-invalid': 'false' });\n}\n/**\n * @hidden\n * Validates user input using masking elements '<' , '>' and '|'.\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var j = 0;\n var curVal = value;\n var caseCount = 0;\n for (i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === '\\\\') {\n promptMask = curVal.substring(0, i) + '\\\\' + curVal.substring(i, curVal.length);\n }\n if (this.hiddenMask[i] === '>' || this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|') {\n if (this.hiddenMask[i] !== curVal[i]) {\n promptMask = curVal.substring(0, i) + this.hiddenMask[i] + curVal.substring(i, curVal.length);\n }\n ++caseCount;\n }\n if (promptMask) {\n if (((promptMask[i] === this.promptChar) && (i > this.element.selectionStart)) ||\n (this.element.value.indexOf(this.promptChar) < 0 && (this.element.selectionStart + caseCount) === i)) {\n caseCount = 0;\n break;\n }\n curVal = promptMask;\n }\n }\n while (i >= 0 && promptMask) {\n if (i === 0 || promptMask[i - 1] !== '\\\\') {\n var val = this.element.value;\n if (promptMask[i] === '>') {\n key = key.toUpperCase();\n break;\n }\n else if (promptMask[i] === '<') {\n key = key.toLowerCase();\n break;\n }\n else if (promptMask[i] === '|') {\n break;\n }\n }\n --i;\n }\n return key;\n}\n/**\n * @hidden\n * To set updated values in the MaskedTextBox.\n */\nexport function setMaskValue(val) {\n if (this.mask && val !== undefined && (this.prevValue === undefined || this.prevValue !== val)) {\n this.maskKeyPress = true;\n 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 var newVal = strippedValue.call(this, this.element);\n this.prevValue = newVal;\n this.value = newVal;\n triggerMaskChangeEvent.call(this, null, null);\n this.maskKeyPress = false;\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.element.value === this.promptMask && this.floatLabelType === 'Auto' && this.placeholder &&\n !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL) && !this.isFocus) {\n removeClass([labelElement], TOPLABEL);\n addClass([labelElement], BOTTOMLABEL);\n setElementValue.call(this, '');\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n}\n/**\n * @hidden\n * To set updated values in the input element.\n */\nexport function setElementValue(val, element) {\n if (!this.isFocus && this.floatLabelType === 'Auto' && this.placeholder && isNullOrUndefined(this.value)) {\n val = '';\n }\n var value = strippedValue.call(this, (element ? element : this.element), val);\n if (value === null || value === '') {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, false);\n if (this.showClearButton) {\n this.inputObj.clearButton.classList.add('e-clear-icon-hide');\n }\n }\n else {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n }\n}\n/**\n * @hidden\n * Provide mask support to input textbox through utility method.\n */\nexport function maskInput(args) {\n var inputEle = getMaskInput(args);\n applyMask.call(inputEle);\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (args.mask) {\n unwireEvents.call(inputEle);\n wireEvents.call(inputEle);\n }\n}\nfunction getMaskInput(args) {\n addClass([args.element], UTILMASK);\n var inputEle = {\n element: args.element,\n mask: args.mask,\n promptMask: '',\n hiddenMask: '',\n escapeMaskValue: '',\n promptChar: args.promptChar ? (args.promptChar.length > 1) ? args.promptChar = args.promptChar[0]\n : args.promptChar : '_',\n value: args.value ? args.value : null,\n regExpCollec: regularExpressions,\n customRegExpCollec: [],\n customCharacters: args.customCharacters,\n undoCollec: [],\n redoCollec: [],\n maskKeyPress: false,\n prevValue: ''\n };\n createMask.call(inputEle);\n return inputEle;\n}\n/**\n * @hidden\n * Gets raw value of the textbox which has been masked through utility method.\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * @hidden\n * Gets masked value of the textbox which has been masked through utility method.\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var value = '';\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * @hidden\n * Arguments to perform undo and redo functionalities.\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\nvar maskUndo = new MaskUndo();\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { extend, merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper'\n};\n/**\n * Base List Generator\n */\nexport var ListBase;\n(function (ListBase) {\n /**\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right'\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n * @param {{[key:string]:Object}[]|string[]} dataSource - Specifies an array of JSON or String data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, options, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(createElement, dataSource, isSingleLevel, options);\n }\n else {\n return createListFromJson(createElement, dataSource, options, ariaAttributes.level, isSingleLevel);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListFromArray(createElement, dataSource, isSingleLevel, options) {\n var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options);\n return generateUL(createElement, subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListItemFromArray(createElement, dataSource, isSingleLevel, options) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(createElement, dataSource[i], undefined, null, null, options);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n // tslint:disable-next-line:max-func-body-length\n function createListItemFromJson(createElement, dataSource, options, level, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData.id;\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n if (isSingleLevel === true) {\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n li.setAttribute('title', fieldData[fields.tooltip]);\n }\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])) {\n var attr = { src: fieldData[fields.imageUrl] };\n merge(attr, fieldData[fields.imageAttributes]);\n prepend([createElement('img', { className: cssClass.image, attrs: attr })], li.firstElementChild);\n }\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) &&\n !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n prepend([createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] })], li.firstElementChild);\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createListFromJson(createElement, dataSource, options, level, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(createElement, dataSource, options, level, isSingleLevel);\n return generateUL(createElement, li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} li - An element to find next or previous after this element.\n * @param {boolean} isPrevious? - Specify when the need get previous element from array.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]|NodeList} elementArray - An element array to find index of given li.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n * @param {{[key:string]:Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder='None'} sortOrder- Specifies final result sort order.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var cusQuery = new Query().group(curFields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[curFields.text] = ds[j].key;\n grpItem[hdr] = true;\n grpItem.id = 'group-list-item-' + (ds[j].key ?\n ds[j].key.toString().trim() : 'undefined');\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query=new Query()} query - Pass if any existing query.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // tslint:disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n json[fields.id] = generateId();\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(createElement, template, dataSource, fields, options) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var compiledString = compile(template);\n var liCollection = [];\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], curFields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n var value = fieldData[curFields.value];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], curFields);\n value = fieldData[curFields.value];\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n li.innerText = fieldData[curFields.text];\n }\n else {\n append(compiledString(curItem), li);\n li.setAttribute('data-value', value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, headerItems) {\n var compiledString = compile(groupTemplate);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var category = curFields.groupBy;\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n var headerData = {};\n headerData[category] = header.textContent;\n header.innerHTML = '';\n append(compiledString(headerData), header);\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n function processSubChild(createElement, fieldData, fields, ds, options, element, level) {\n // Get SubList \n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(createElement, subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(createElement, item, fieldData, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n if (!isNullOrUndefined(value)) {\n li.setAttribute('data-value', value);\n }\n li.setAttribute('role', 'option');\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length) {\n append(innerElements, li);\n }\n if (dataSource && fieldData.hasOwnProperty(fields.url) && fieldData[fields.url]) {\n li.appendChild(anchorTag(createElement, dataSource, fields, text));\n }\n else {\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n function getModuleClass(moduleName) {\n var moduleClass;\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper'\n };\n }\n function anchorTag(createElement, dataSource, fields, text) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n }\n var anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n /* tslint:disable:align */\n function generateLI(createElement, item, fieldData, fields, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n text = fieldData[fields.text] || '';\n uID = fieldData[fields.id];\n grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n ? true : false;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n !isNullOrUndefined(uID) ? li.setAttribute('data-uid', uID) : li.setAttribute('data-uid', generateId());\n if (grpLI && options && options.groupTemplate) {\n var compiledString = compile(options.groupTemplate);\n append(compiledString(item), li);\n }\n else if (!grpLI && options && options.template) {\n var compiledString = compile(options.template);\n append(compiledString(item), li);\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && fieldData.hasOwnProperty(fields.url) && fieldData[fields.url]) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text));\n }\n else {\n innerDiv.appendChild(createElement('span', {\n className: cssClass.text, innerHTML: text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n }));\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n * @param {string} className? - Specifies class name that need to be added in UL element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n * @param {liElement} liElement - Specifies LI element.\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', {\n className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className)\n })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n * @param {{[key:string]:Object}|string[]|string} dataSource - Specifies an JSON or String data.\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n || !isNullOrUndefined(dataItem.isHeader)) {\n return dataItem;\n }\n else {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n var dataField = fields[field];\n var value = !isNullOrUndefined(dataField) &&\n typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n if (!isNullOrUndefined(value)) {\n fieldData[dataField] = value;\n }\n }\n }\n return fieldData;\n}\n","/**\n * 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.chartSubTitleFont = {\n size: '11px',\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/** @private */\nexport function getScrollbarThemeColor(theme) {\n var scrollStyle;\n switch (theme) {\n case 'Highcontrast':\n scrollStyle = {\n backRect: '#333',\n thumb: '#bfbfbf',\n circle: '#fff',\n circleHover: '#685708',\n arrow: '#333',\n grip: '#333',\n arrowHover: '#fff',\n backRectBorder: '#969696',\n };\n break;\n case 'Bootstrap':\n scrollStyle = {\n backRect: '#f5f5f5',\n thumb: '#e6e6e6',\n circle: '#fff',\n circleHover: '#eee',\n arrow: '#8c8c8c',\n grip: '#8c8c8c'\n };\n break;\n case 'Fabric':\n scrollStyle = {\n backRect: '#f8f8f8',\n thumb: '#eaeaea',\n circle: '#fff',\n circleHover: '#eaeaea',\n arrow: '#a6a6a6',\n grip: '#a6a6a6'\n };\n break;\n default:\n scrollStyle = {\n backRect: '#f5f5f5',\n thumb: '#e0e0e0',\n circle: '#fff',\n circleHover: '#eee',\n arrow: '#9e9e9e',\n grip: '#9e9e9e'\n };\n break;\n }\n return scrollStyle;\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, Browser } 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';\nimport { VisibleLabels } from '../../chart/axis/axis';\nimport { axisLabelRender } from '../model/constants';\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 && !chart.redraw) {\n chart.element.appendChild(chart.svgObject);\n }\n chart.svgObject.appendChild(htmlObject);\n box = htmlObject.getBoundingClientRect();\n remove(htmlObject);\n if (!chart.delayRedraw && !chart.redraw) {\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 if (!id) {\n return null;\n }\n var element = typeof id === 'string' ? getElement(id) : 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 logWithIn(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 */\nexport function withInRange(previousPoint, currentPoint, nextPoint, series) {\n var mX2 = logWithIn(currentPoint.xValue, series.xAxis);\n var mX1 = previousPoint ? logWithIn(previousPoint.xValue, series.xAxis) : mX2;\n var mX3 = nextPoint ? 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 var scrollBarHeight = axis.zoomingScrollBar && axis.zoomingScrollBar.svgObject ? axis.scrollBarHeight : 0;\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 - scrollBarHeight, rect.y + rx) :\n new ChartLocation(axis.rect.x - scrollBarHeight, (rect.y + rect.height - rx));\n x = (rect.x + (opposedPosition ? (rect.width + margin + scrollBarHeight) : -(size.width + margin + margin + scrollBarHeight)));\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 + scrollBarHeight)) :\n new ChartLocation(rect.x + rx, (rect.y + rect.height + scrollBarHeight));\n x = (rect.x + (i ? (rect.width - size.width - margin) : 0));\n y = (opposedPosition ? (rect.y - size.height - 10 - scrollBarHeight) : (rect.y + rect.height + margin + scrollBarHeight));\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 var seriesMin;\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 seriesMin = (axis.valueType === 'DateTime' && series.xMin === series.xMax) ? (series.xMin - 2592000000) : series.xMin;\n minVal = xValues[0] - (!isNullOrUndefined(seriesMin) ?\n seriesMin : 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 after legend click a path\n * @param element element to be animated\n * @param direction current direction of the path\n * @param previousDirection previous direction of the path\n */\nexport function pathAnimation(element, direction, redraw, previousDirection) {\n if (!redraw || (!previousDirection && !element)) {\n return null;\n }\n var startDirections = previousDirection || element.getAttribute('d');\n var splitDirections = startDirections.split(/(?=[LMCZAQ])/);\n var endDirections = direction.split(/(?=[LMCZAQ])/);\n var currentDireciton;\n var startPath = [];\n var endPath = [];\n var c;\n var end;\n element.setAttribute('d', startDirections);\n new Animation({}).animate(createElement('div'), {\n duration: 300,\n progress: function (args) {\n currentDireciton = '';\n splitDirections.map(function (directions, index) {\n startPath = directions.split(' ');\n endPath = endDirections[index].split(' ');\n if (startPath[0] === 'Z') {\n currentDireciton += 'Z' + ' ';\n }\n else {\n currentDireciton += startPath[0] + ' ' +\n linear(args.timeStamp, +startPath[1], (+endPath[1] - +startPath[1]), args.duration) + ' ' +\n linear(args.timeStamp, +startPath[2], (+endPath[2] - +startPath[2]), args.duration) + ' ';\n }\n if (startPath[0] === 'C' || startPath[0] === 'Q') {\n c = 3;\n end = startPath[0] === 'Q' ? 4 : 6;\n while (c < end) {\n currentDireciton += linear(args.timeStamp, +startPath[c], (+endPath[c] - +startPath[c]), args.duration) + ' ' +\n linear(args.timeStamp, +startPath[++c], (+endPath[c] - +startPath[c]), args.duration) + ' ';\n ++c;\n }\n }\n if (startPath[0] === 'A') {\n currentDireciton += 0 + ' ' + 0 + ' ' + 1 + ' ' +\n linear(args.timeStamp, +startPath[6], (+endPath[6] - +startPath[6]), args.duration) + ' ' +\n linear(args.timeStamp, +startPath[7], (+endPath[7] - +startPath[7]), args.duration) + ' ';\n }\n });\n element.setAttribute('d', currentDireciton);\n },\n end: function () {\n element.setAttribute('d', direction);\n }\n });\n}\n/**\n * To append the clip rect element\n * @param redraw\n * @param options\n * @param renderer\n * @param clipPath\n */\nexport function appendClipElement(redraw, options, renderer, clipPath) {\n if (clipPath === void 0) { clipPath = 'drawClipPath'; }\n var clipElement = redrawElement(redraw, options.id, options, renderer);\n if (clipElement) {\n var def = renderer.createDefs();\n def.appendChild(clipElement);\n return def;\n }\n else {\n return renderer[clipPath](options);\n }\n}\n/**\n * Triggers the event.\n * @return {void}\n * @private\n */\nexport function triggerLabelRender(chart, tempInterval, text, labelStyle, axis) {\n var argsData;\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: text, value: tempInterval, labelStyle: labelStyle\n };\n chart.trigger(axisLabelRender, argsData);\n if (!argsData.cancel) {\n var text_1 = (axis.enableTrim) ? textTrim(axis.maximumLabelWidth, argsData.text, axis.labelStyle) : argsData.text;\n axis.visibleLabels.push(new VisibleLabels(text_1, argsData.value, argsData.labelStyle, argsData.text));\n }\n}\n/**\n * The function used to find whether the range is set.\n * @return {boolean}\n * @private\n */\nexport function setRange(axis) {\n return (axis.minimum != null && axis.maximum != null);\n}\n/**\n * Calculate desired interval for the axis.\n * @return {void}\n * @private\n */\nexport function getActualDesiredIntervalsCount(availableSize, axis) {\n var size = axis.orientation === 'Horizontal' ? availableSize.width : availableSize.height;\n if (isNullOrUndefined(axis.desiredIntervals)) {\n var desiredIntervalsCount = (axis.orientation === 'Horizontal' ? 0.533 : 1) * axis.maximumLabels;\n desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n return desiredIntervalsCount;\n }\n else {\n return axis.desiredIntervals;\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 = Array.prototype.slice.call(templateFn({ chart: chart, series: series, point: point }));\n var len = templateElement.length;\n for (var i = 0; i < len; i++) {\n childElement.appendChild(templateElement[i]);\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, redraw) {\n if (redraw === void 0) { redraw = false; }\n var bounds;\n document.body.appendChild(element);\n bounds = element.getBoundingClientRect();\n if (redraw) {\n if (typeof element.remove === 'function') {\n element.remove();\n }\n else {\n element.parentNode.removeChild(element);\n }\n }\n else {\n removeElement(element.id);\n }\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, redraw, animate, x, y) {\n if (redraw === void 0) { redraw = false; }\n if (animate === void 0) { animate = false; }\n if (x === void 0) { x = 'x'; }\n if (y === void 0) { y = 'y'; }\n if (child && child.hasChildNodes() && parent) {\n appendChildElement(parent, child, redraw, animate, x, y);\n }\n else {\n return null;\n }\n}\n/**\n * Method to append child element\n * @param parent\n * @param childElement\n * @param isReplace\n */\nexport function appendChildElement(parent, childElement, redraw, isAnimate, x, y, start, direction) {\n if (isAnimate === void 0) { isAnimate = false; }\n if (x === void 0) { x = 'x'; }\n if (y === void 0) { y = 'y'; }\n var existChild = parent.querySelector('#' + childElement.id);\n var element = (existChild || getElement(childElement.id));\n var child = childElement;\n if (redraw && isAnimate && element) {\n start = start || (element.tagName === 'DIV' ?\n new ChartLocation(+(element.style[x].split('px')[0]), +(element.style[y].split('px')[0])) :\n new ChartLocation(+element.getAttribute(x), +element.getAttribute(y)));\n if (direction && direction !== 'undefined') {\n pathAnimation(childElement, childElement.getAttribute('d'), redraw, direction);\n }\n else {\n var end = child.tagName === 'DIV' ?\n new ChartLocation(+(child.style[x].split('px')[0]), +(child.style[y].split('px')[0])) :\n new ChartLocation(+child.getAttribute(x), +child.getAttribute(y));\n animateRedrawElement(child, 300, start, end, x, y);\n }\n }\n if (existChild) {\n parent.replaceChild(child, element);\n }\n else {\n parent.appendChild(child);\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 document.body.appendChild(createElement('text', { id: 'chartmeasuretext' }));\n element = document.getElementById('chartmeasuretext');\n element.style.color = color;\n color = window.getComputedStyle(element).color;\n if (typeof element.remove === 'function') {\n element.remove();\n }\n else {\n element.parentNode.removeChild(element);\n }\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 'Pareto':\n case 'StackingColumn':\n case 'StackingColumn100':\n case 'RangeColumn':\n case 'Histogram':\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 redrawElement(redraw, id, options, renderer) {\n if (!redraw) {\n return null;\n }\n var element = getElement(id);\n if (element && options) {\n renderer.setElementAttributes(options, element.tagName === 'clipPath' ? element.childNodes[0] : element);\n }\n return element;\n}\n/** @private */\nexport function animateRedrawElement(element, duration, start, end, x, y) {\n if (x === void 0) { x = 'x'; }\n if (y === void 0) { y = 'y'; }\n var isDiv = element.tagName === 'DIV';\n var setStyle = function (xValue, yValue) {\n if (isDiv) {\n element.style[x] = xValue + 'px';\n element.style[y] = yValue + 'px';\n }\n else {\n element.setAttribute(x, xValue + '');\n element.setAttribute(y, yValue + '');\n }\n };\n setStyle(start.x, start.y);\n new Animation({}).animate(createElement('div'), {\n duration: duration,\n progress: function (args) {\n setStyle(linear(args.timeStamp, start.x, end.x - start.x, args.duration), linear(args.timeStamp, start.y, end.y - start.y, args.duration));\n },\n end: function () {\n setStyle(end.x, end.y);\n }\n });\n}\n/** @private */\nexport function textElement(options, font, color, parent, isMinus, redraw, isAnimate) {\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 appendChildElement(parent, htmlObject, redraw, isAnimate);\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 var height = 450;\n var marginHeight;\n if (chart.getModuleName() === 'rangeNavigator') {\n var range = chart;\n var tooltipSpace = range.tooltip.enable ? 35 : 0;\n var periodHeight = range.periodSelectorSettings.periods.length ?\n range.periodSelectorSettings.height : 0;\n marginHeight = range.margin.top + range.margin.bottom + tooltipSpace;\n var labelSize = measureText('tempString', range.labelStyle).height;\n var labelPadding = 15;\n height = (chart.series.length ? (Browser.isDevice ? 80 : 120) : ((range.enableGrouping ? (40 + labelPadding + labelSize) : 40)\n + marginHeight)) + periodHeight;\n if (range.disableRangeSelector) {\n height = periodHeight;\n }\n }\n chart.availableSize = new Size(stringToNumber(chart.width, containerWidth) || containerWidth || 600, stringToNumber(chart.height, containerHeight) || containerHeight || height);\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(rect, titleStyle) {\n var positionX;\n if (titleStyle.textAlignment === 'Near') {\n positionX = rect.x;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionX = rect.x + rect.width / 2;\n }\n else {\n positionX = rect.x + rect.width;\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","/**\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 * 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","/** @private */\nexport function getTooltipThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n tooltipFill: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696'\n };\n break;\n default:\n style = {\n tooltipFill: 'rgba(0, 8, 22, 0.75)',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff'\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 { createElement, remove, SvgRenderer, merge } 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 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/** @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 */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\nvar Side = /** @class */ (function () {\n function Side(bottom, right) {\n this.isRight = right;\n this.isBottom = bottom;\n }\n return Side;\n}());\nexport { Side };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\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 */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n var 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 path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nexport function textElement(options, font, color, parent) {\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 : options.text[0];\n htmlObject = renderer.createText(renderOptions, text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nvar TooltipLocation = /** @class */ (function () {\n function TooltipLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return TooltipLocation;\n}());\nexport { TooltipLocation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, appendChildElement } 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 /** @private */\n this.isExplode = false;\n /** @private */\n this.isClubbed = false;\n /** @private */\n this.isSliced = false;\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.clubbedPoints = [];\n /** @private */\n _this.sumOfPoints = 0;\n /** @private */\n _this.isRectSeries = true;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n /** @private */\n _this.category = 'Series';\n return _this;\n }\n /** @private To refresh the Datamanager for series */\n AccumulationSeries.prototype.refreshDataManager = function (accumulation, render) {\n var _this = this;\n var dateSource = this.dataSource || accumulation.dataSource;\n if (isNullOrUndefined(this.query)) {\n this.dataManagerSuccess({ result: dateSource, count: dateSource.length }, accumulation, render);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, accumulation, render); });\n };\n /**\n * To get points on dataManager is success\n * @private\n */\n AccumulationSeries.prototype.dataManagerSuccess = function (e, accumulation, render) {\n var argsData = {\n name: seriesRender, series: this, data: e.result,\n };\n accumulation.trigger(seriesRender, argsData);\n this.resultData = e.result !== '' ? e.result : [];\n this.getPoints(this.resultData, accumulation);\n if (++accumulation.seriesCounts === accumulation.visibleSeries.length && render) {\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.clubbedPoints = [];\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, i)) {\n if (isNullOrUndefined(point.y)) {\n point.visible = false;\n }\n this.pushPoints(point, colors);\n }\n else {\n point.index = this.clubbedPoints.length;\n point.isExplode = true;\n this.clubbedPoints.push(point);\n point.isSliced = true;\n }\n }\n this.lastGroupTo = this.groupTo;\n if (this.sumOfClub > 0) {\n var clubPoint_1 = this.generateClubPoint();\n this.pushPoints(clubPoint_1, colors);\n var pointsLength_1 = this.points.length - 1;\n this.clubbedPoints.map(function (point) {\n point.index += pointsLength_1;\n point.color = clubPoint_1.color;\n });\n }\n if (this.clubbedPoints.length && this.explode && this.type === 'Pie'\n && (this.explodeAll || this.points[this.points.length - 1].index === this.explodeIndex)) {\n this.points.splice(this.points.length - 1, 1);\n this.points = this.points.concat(this.clubbedPoints);\n }\n };\n /**\n * Generate club point\n */\n AccumulationSeries.prototype.generateClubPoint = function () {\n var clubPoint = new AccPoints();\n clubPoint.isClubbed = true;\n clubPoint.x = 'Others';\n clubPoint.y = this.sumOfClub;\n clubPoint.text = clubPoint.originalText = clubPoint.x + ': ' + this.sumOfClub;\n return clubPoint;\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.isExplode = this.explodeAll || (point.index === this.explodeIndex);\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, index) {\n if (!isNullOrUndefined(clubValue)) {\n if (this.groupMode === 'Value' && Math.abs(point.y) <= clubValue) {\n this.sumOfClub += Math.abs(point.y);\n return true;\n }\n else if (this.groupMode === 'Point' && index >= clubValue) {\n this.sumOfClub += Math.abs(point.y);\n return true;\n }\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.percentage = (+(point.y / this.sumOfPoints * 100).toFixed(2));\n point.color = getValue(this.pointColorMapping, data[i]);\n point.text = point.originalText = getValue(this.dataLabel.name || '', data[i]);\n point.tooltip = getValue(this.tooltipMappingName || '', 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, redraw) {\n var seriesGroup = redraw ? getElement(accumulation.element.id + '_Series_' + this.index) :\n accumulation.renderer.createGroup({ id: accumulation.element.id + '_Series_' + this.index });\n this.renderPoints(accumulation, seriesGroup, redraw);\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, redraw);\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, redraw) {\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 option = new PathOption(pointId + point.index, point.color, argsData.border.width || 1, argsData.border.color || point.color, this.opacity, '', '');\n accumulation[(firstToLowerCase(this.type) + 'SeriesModule')].\n renderPoint(point, this, accumulation, option, seriesGroup, redraw);\n }\n appendChildElement(accumulation.getSeriesElement(), seriesGroup, redraw);\n };\n /**\n * Method render the datalabel elements for accumulation chart.\n */\n AccumulationSeries.prototype.renderDataLabel = function (accumulation, datalabelGroup, redraw) {\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, redraw);\n }\n }\n if (this.dataLabel.template !== null && element.childElementCount) {\n appendChildElement(getElement(accumulation.element.id + '_Secondary_Element'), element, redraw);\n }\n appendChildElement(accumulation.getSeriesElement(), datalabelGroup, redraw);\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 default:\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, \"tooltipMappingName\", 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 Property('Value')\n ], AccumulationSeries.prototype, \"groupMode\", 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(null)\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})();\nimport { SvgRenderer, createElement, remove } from '@syncfusion/ej2-base';\n/**\n * Sparkline control helper file\n */\n/**\n * sparkline internal use of `Size` type\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 sparkline\n */\nexport function calculateSize(sparkline) {\n var containerWidth = sparkline.element.clientWidth;\n var containerHeight = sparkline.element.clientHeight;\n sparkline.availableSize = new Size(stringToNumber(sparkline.width, containerWidth) || containerWidth || 100, stringToNumber(sparkline.height, containerHeight) || containerHeight || (sparkline.isDevice ?\n Math.min(window.innerWidth, window.innerHeight) : 50));\n}\n/**\n * Method to create svg for sparkline.\n */\nexport function createSvg(sparkline) {\n sparkline.renderer = new SvgRenderer(sparkline.element.id);\n calculateSize(sparkline);\n sparkline.svgObject = sparkline.renderer.createSvg({\n id: sparkline.element.id + '_svg',\n width: sparkline.availableSize.width,\n height: sparkline.availableSize.height\n });\n}\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 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.fill = fill;\n this.opacity = opacity;\n this['stroke-width'] = width;\n this.stroke = color;\n this.d = d;\n this['stroke-dasharray'] = dashArray;\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, tl, tr, bl, br) {\n if (tl === void 0) { tl = 0; }\n if (tr === void 0) { tr = 0; }\n if (bl === void 0) { bl = 0; }\n if (br === void 0) { br = 0; }\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.rect = rect;\n _this.topLeft = tl;\n _this.topRight = tr;\n _this.bottomLeft = bl;\n _this.bottomRight = br;\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 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(sparkline, options, element) {\n return appendShape(sparkline.renderer.drawCircle(options), element);\n}\n/**\n * To get rounded rect path direction\n */\nexport function calculateRoundedRectPath(r, topLeft, topRight, bottomLeft, bottomRight) {\n return 'M' + ' ' + r.x + ' ' + (topLeft + r.y) +\n ' Q ' + r.x + ' ' + r.y + ' ' + (r.x + topLeft) + ' ' +\n r.y + ' ' + 'L' + ' ' + (r.x + r.width - topRight) + ' ' + r.y +\n ' Q ' + (r.x + r.width) + ' ' + r.y + ' ' +\n (r.x + r.width) + ' ' + (r.y + topRight) + ' ' + 'L ' +\n (r.x + r.width) + ' ' + (r.y + r.height - bottomRight)\n + ' Q ' + (r.x + r.width) + ' ' + (r.y + r.height) + ' ' + (r.x + r.width - bottomRight) + ' ' +\n (r.y + r.height) + ' ' + 'L ' + (r.x + bottomLeft) + ' ' + (r.y + r.height) + ' Q ' + r.x + ' ' +\n (r.y + r.height) + ' ' + r.x + ' ' + (r.y + r.height - bottomLeft) + ' ' + 'L' + ' ' + r.x + ' ' +\n (topLeft + r.y) + ' ' + 'Z';\n}\n/**\n * Internal rendering of Rectangle\n * @private\n */\nexport function drawRectangle(sparkline, options, element) {\n options.d = calculateRoundedRectPath(options.rect, options.topLeft, options.topRight, options.bottomLeft, options.bottomRight);\n return appendShape(sparkline.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Path\n * @private\n */\nexport function drawPath(sparkline, options, element) {\n return appendShape(sparkline.renderer.drawPath(options), element);\n}\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {SparklineFontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('sparklinesmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'sparklinesmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\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.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\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, baseLine, transform) {\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 rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent) {\n var textOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'fill': color,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'text-anchor': options.anchor,\n 'dominant-baseline': options.baseLine\n };\n var renderer = new SvgRenderer('');\n var htmlObject = renderer.createText(textOptions, options.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 parent.appendChild(htmlObject);\n return htmlObject;\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 * To find the element by id\n */\nexport function getIdElement(id) {\n return document.getElementById(id);\n}\n/**\n * To find point within the bounds.\n */\nexport function withInBounds(x, y, bounds) {\n return (x >= bounds.x && x <= bounds.x + bounds.width && y >= bounds.y && y <= bounds.y + bounds.height);\n}\n","/**\n * Methods for calculating coefficient.\n */\n/** @private */\nexport function rangeValueToCoefficient(value, range, inversed) {\n var result = (value - range.min) / (range.delta);\n return inversed ? (1 - result) : result;\n}\n/** @private */\nexport function getXLocation(x, range, size, inversed) {\n x = rangeValueToCoefficient(x, range, inversed);\n return x * size;\n}\n/** @private */\nexport function getRangeValueXByPoint(value, size, range, inversed) {\n var actualValue = !inversed ? value / size : (1 - (value / size));\n return actualValue * (range.delta) + range.min;\n}\n/** @private */\nexport function getExactData(points, start, end) {\n var selectedData = [];\n points.map(function (point) {\n if (point.xValue >= start && point.xValue <= end) {\n selectedData.push({\n 'x': point.x,\n 'y': point.y\n });\n }\n });\n return selectedData;\n}\n/** @private */\nexport function getNearestValue(values, point) {\n return values.reduce(function (prev, curr) {\n return (Math.abs(curr - point) < Math.abs(prev - point) ? curr : prev);\n });\n}\n/** @private */\nvar DataPoint = /** @class */ (function () {\n function DataPoint(x, y, xValue, yValue, visible) {\n if (visible === void 0) { visible = true; }\n this.x = x;\n this.y = y;\n this.xValue = xValue;\n this.visible = visible;\n }\n return DataPoint;\n}());\nexport { DataPoint };\n","import { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n *\n */\nexport var RangeNavigatorTheme;\n(function (RangeNavigatorTheme) {\n /** @private */\n RangeNavigatorTheme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n RangeNavigatorTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n})(RangeNavigatorTheme || (RangeNavigatorTheme = {}));\n/** @private */\nexport function getRangeThemeColor(theme, range) {\n var thumbSize = range.navigatorStyleSettings.thumb;\n var thumbWidth = isNullOrUndefined(thumbSize.width) ? (Browser.isDevice ? 15 : 20) : thumbSize.width;\n var thumbHeight = isNullOrUndefined(thumbSize.height) ? (Browser.isDevice ? 15 : 20) : thumbSize.height;\n var style = {\n gridLineColor: '#E0E0E0',\n axisLineColor: '#000000',\n labelFontColor: '#686868',\n unselectedRectColor: range.series.length ? 'rgba(255, 255, 255, 0.6)' : '#EEEEEE',\n thumpLineColor: 'rgba(189, 189, 189, 1)',\n thumbBackground: 'rgba(250, 250, 250, 1)',\n gripColor: '#757575',\n background: '#FFFFFF',\n thumbHoverColor: '#EEEEEE',\n selectedRegionColor: range.series.length ? 'transparent' : '#FF4081',\n tooltipBackground: 'rgb(0, 8, 22)',\n tooltipFontColor: '#dbdbdb',\n thumbWidth: thumbWidth,\n thumbHeight: thumbHeight\n };\n switch (theme) {\n case 'Fabric':\n style.selectedRegionColor = range.series.length ? 'transparent' : '#007897';\n break;\n case 'Bootstrap':\n style.selectedRegionColor = range.series.length ? 'transparent' : '#428BCA';\n break;\n case 'Highcontrast':\n style = {\n gridLineColor: '#bdbdbd',\n axisLineColor: '#969696',\n labelFontColor: '#ffffff',\n unselectedRectColor: range.series.length ? 'rgba(255, 255, 255, 0.3)' : '#EEEEEE',\n thumpLineColor: '#ffffff',\n thumbBackground: '#262626',\n gripColor: '#ffffff',\n background: '#000000',\n thumbHoverColor: '#BFBFBF',\n selectedRegionColor: range.series.length ? 'transparent' : '#FFD939',\n tooltipBackground: '#ffffff',\n tooltipFontColor: '#000000',\n thumbWidth: thumbWidth,\n thumbHeight: thumbHeight\n };\n break;\n default:\n style.selectedRegionColor = range.series.length ? 'transparent' : '#FF4081';\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 { createElement, SvgRenderer, compile as templateComplier, remove } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { SmithchartSize } from '../../smithchart/utils/utils';\nexport function createSvg(smithchart) {\n smithchart.renderer = new SvgRenderer(smithchart.element.id);\n calculateSize(smithchart);\n smithchart.svgObject = smithchart.renderer.createSvg({\n id: smithchart.element.id + '_svg',\n width: smithchart.availableSize.width,\n height: smithchart.availableSize.height\n });\n}\nexport function getElement(id) {\n return document.getElementById(id);\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 * Function to compile the template function for maps.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(templateString) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(templateString).length) {\n templateFn = templateComplier(document.querySelector(templateString).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(templateString);\n }\n return templateFn;\n}\nexport function convertElementFromLabel(element, labelId, data, index, smithchart) {\n var labelEle = element[0];\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}\nexport function _getEpsilonValue() {\n var e = 1.0;\n while ((1.0 + 0.5 * e) !== 1.0) {\n e *= 0.5;\n }\n return e;\n}\n/**\n * Method to calculate the width and height of the smithchart\n */\nexport function calculateSize(smithchart) {\n var containerWidth = smithchart.element.clientWidth;\n var containerHeight = smithchart.element.clientHeight;\n smithchart.availableSize = new SmithchartSize(stringToNumber(smithchart.width, containerWidth) || containerWidth || 600, stringToNumber(smithchart.height, containerHeight) || containerHeight || 450);\n}\n/**\n * Animation for template\n * @private\n */\nexport function templateAnimate(smithchart, element, delay, duration, name) {\n var opacity = 0;\n var delta;\n var value;\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n name: name,\n progress: function (args) {\n delta = ((args.timeStamp - args.delay) / args.duration);\n value = opacity + (delta * 1);\n args.element.style.opacity = value.toString();\n },\n end: function (args) {\n var opacity = 1;\n args.element.style.opacity = opacity.toString();\n smithchart.trigger('animationComplete', event);\n },\n });\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 * 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) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\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 };\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('smithchartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'smithchartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.left = '0';\n htmlObject.style.top = '-100';\n htmlObject.style.whiteSpace = 'nowrap';\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 // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new SmithchartSize(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) {\n this.id = id;\n this.x = x;\n this.y = y;\n this.anchor = anchor;\n this.text = text;\n }\n return TextOption;\n}());\nexport { TextOption };\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 * 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}\nexport function reverselinear(currentTime, startValue, endValue, duration) {\n return -startValue * Math.sin(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/** @private */\nexport function getAnimationFunction(effect) {\n var functionName;\n switch (effect) {\n case 'Linear':\n functionName = linear;\n break;\n case 'Reverse':\n functionName = reverselinear;\n break;\n }\n return functionName;\n}\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent) {\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 'opacity': font.opacity\n };\n var text = options.text;\n var renderer = new SvgRenderer('');\n var height;\n var htmlObject = renderer.createText(renderOptions, text);\n parent.appendChild(htmlObject);\n return htmlObject;\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 get the rounded path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getRoundedPathArc(center, actualStart, actualEnd, oldStart, oldEnd, radius, startWidth, endWidth) {\n actualEnd -= isCompleteAngle(actualStart, actualEnd) ? 0.0001 : 0;\n var degree = getDegree(actualStart, actualEnd);\n var startRadius = radius - startWidth;\n var endRadius = radius - endWidth;\n var arcRadius = radius - ((startWidth + endWidth) / 2);\n return getRoundedPath(getLocationFromAngle(actualStart, radius, center), getLocationFromAngle(actualEnd, radius, center), getLocationFromAngle(oldEnd, radius, center), getLocationFromAngle(oldEnd, endRadius, center), getLocationFromAngle(oldStart, radius, center), getLocationFromAngle(oldStart, startRadius, center), getLocationFromAngle(actualStart, startRadius, center), getLocationFromAngle(actualEnd, endRadius, center), radius, arcRadius, arcRadius, (degree < 180) ? 0 : 1);\n}\n/**\n * Function to get the rounded range path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getRoundedPath(start, end, outerOldEnd, innerOldEnd, outerOldStart, innerOldStart, 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 ' C ' + outerOldEnd.x + ' ' + outerOldEnd.y + ' ' + innerOldEnd.x + ' ' +\n innerOldEnd.y + ' ' + innerEnd.x + ' ' + innerEnd.y +\n ' A ' + endRadius + ' ' + startRadius + ' 0 ' +\n clockWise + ' 0 ' + innerStart.x + ' ' + innerStart.y +\n ' C ' + innerOldStart.x + ' ' + innerOldStart.y + ' ' + outerOldStart.x + ' ' +\n outerOldStart.y + ' ' + start.x + ' ' + start.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 * These utility methods help to process the data and to convert it to desired dimensions\n */\n/** @private */\nexport function processPathData(data) {\n var collection = [];\n var j;\n var arrayCollection = parsePathData(data);\n if (arrayCollection.length > 0) {\n for (var i = 0; i < arrayCollection.length; i++) {\n var ob = arrayCollection[i];\n var char = '';\n char = ob[0];\n switch (char.toLowerCase()) {\n case 'm':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, x: ob[j], y: ob[j + 1] });\n j = j + 1;\n if (char === 'm') {\n char = 'l';\n }\n else if (char === 'M') {\n char = 'L';\n }\n }\n break;\n case 'l':\n case 't':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, x: ob[j], y: ob[j + 1] });\n j = j + 1;\n }\n break;\n case 'h':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, x: ob[j] });\n }\n break;\n case 'v':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, y: ob[j] });\n }\n break;\n case 'z':\n collection.push({ command: char });\n break;\n case 'c':\n for (j = 1; j < ob.length; j++) {\n collection.push({\n command: char, x1: ob[j], y1: ob[j + 1], x2: ob[j + 2], y2: ob[j + 3], x: ob[j + 4], y: ob[j + 5]\n });\n j = j + 5;\n }\n break;\n case 's':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, x2: ob[j], y2: ob[j + 1], x: ob[j + 2], y: ob[j + 3] });\n j = j + 3;\n }\n break;\n case 'q':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, x1: ob[j], y1: ob[j + 1], x: ob[j + 2], y: ob[j + 3] });\n j = j + 3;\n }\n break;\n case 'a':\n for (j = 1; j < ob.length; j++) {\n collection.push({\n command: char, r1: ob[j], r2: ob[j + 1], angle: ob[j + 2], largeArc: ob[j + 3],\n sweep: ob[j + 4], x: ob[j + 5], y: ob[j + 6]\n });\n j = j + 6;\n }\n break;\n }\n }\n }\n return collection;\n}\n/** @private */\nexport function parsePathData(data) {\n var tokenizer = /([a-z]+)|([+-]?(?:\\d+\\.?\\d*|\\.\\d+))/gi;\n var current = [];\n var commands = [];\n var match = {};\n tokenizer.lastIndex = 0;\n var isExponential = false;\n match = tokenizer.exec(data);\n while (match) {\n if (match[1] === 'e') {\n var s1 = '';\n isExponential = true;\n }\n else if (match[1]) {\n if (match[1].toLowerCase() === 'zm') {\n if (current.length) {\n commands.push(current);\n }\n commands.push(['Z']);\n current = [match[1].substring(1, 2)];\n }\n else {\n if (current.length) {\n commands.push(current);\n }\n current = [match[1]];\n }\n isExponential = false;\n }\n else {\n if (!current.length) {\n current = [];\n }\n if (!isExponential) {\n current.push(Number(match[2]));\n }\n isExponential = false;\n }\n match = tokenizer.exec(data);\n }\n if (current.length) {\n commands.push(current);\n }\n return commands;\n}\n/**\n * Used to find the path for rounded rect\n */\nexport function getRectanglePath(cornerRadius, height, width) {\n var x = 0;\n var y = 0;\n var path = '';\n var points = [{ x: x + cornerRadius, y: y }, { x: x + width - cornerRadius, y: y },\n { x: x + width, y: y + cornerRadius }, { x: x + width, y: y + height - cornerRadius },\n { x: x + width - cornerRadius, y: y + height }, { x: x + cornerRadius, y: y + height },\n { x: x, y: y + height - cornerRadius }, { x: x, y: y + cornerRadius }\n ];\n var corners = [{ x: x + width, y: y }, { x: x + width, y: y + height }, { x: x, y: y + height }, { x: x, y: y }];\n var corner = 0;\n var point2;\n var next;\n path = 'M' + points[0].x + ' ' + points[0].y;\n var i;\n for (i = 0; i < points.length; i = i + 2) {\n point2 = points[i + 1];\n path += 'L' + point2.x + ' ' + point2.y;\n next = points[i + 2] || points[0];\n path += 'Q' + corners[corner].x + ' ' + corners[corner].y + ' ' + next.x + ' ' + next.y;\n corner++;\n }\n return path;\n}\n/**\n * Used to find the path for polygon shapes\n */\nexport function getPolygonPath(collection) {\n var path = '';\n var seg;\n path = 'M' + collection[0].x + ' ' + collection[0].y;\n var i;\n for (i = 1; i < collection.length; i++) {\n seg = collection[i];\n path += 'L' + seg.x + ' ' + seg.y;\n }\n path += 'Z';\n return path;\n}\n/** @private */\nexport function pathSegmentCollection(collection) {\n var x0;\n var y0;\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n var initx;\n var inity;\n var segments = [];\n for (x = 0, y = 0, i = 0, length = collection.length; i < length; ++i) {\n var obj = collection[i];\n var seg = obj;\n var char = '';\n char = seg.command;\n if ('y1' in seg) {\n y1 = seg.y1;\n }\n if ('y2' in seg) {\n y2 = seg.y2;\n }\n if ('x1' in seg) {\n x1 = seg.x1;\n }\n if ('x2' in seg) {\n x2 = seg.x2;\n }\n if ('x' in seg) {\n x = seg.x;\n }\n if ('y' in seg) {\n y = seg.y;\n }\n var prev = segments[segments.length - 1];\n switch (char) {\n case 'M':\n segments.push({ command: 'M', x: x, y: y });\n break;\n case 'L':\n segments.push({ command: 'L', x0: x0, y0: y0, x: x, y: y });\n break;\n case 'H':\n segments.push({ command: 'L', x0: x0, y0: y0, x: x, y: y0 });\n break;\n case 'V':\n segments.push({ command: 'L', x0: x0, y0: y0, x: x0, y: y });\n break;\n case 'C':\n segments.push({ command: 'C', x0: x0, y0: y0, x1: x1, y1: y1, x2: x2, y2: y2, x: x, y: y });\n break;\n case 'S':\n if (prev) {\n var ctrl = void 0;\n if (prev.command === 'C' || prev.command === 'S') {\n ctrl = { x: prev.x2, y: prev.y2 };\n }\n else {\n ctrl = { x: x0, y: y0 };\n }\n var cpt2 = { x: 2 * x0 - ctrl.x, y: 2 * y0 - ctrl.y };\n segments.push({ command: 'C', x0: x0, y0: y0, x1: cpt2.x, y1: cpt2.y, x2: x2, y2: y2, x: x, y: y });\n }\n break;\n case 'Q':\n //ctx.quadraticCurveTo(x1, y1, x, y);\n segments.push({ command: 'Q', x0: x0, y0: y0, x1: x1, y1: y1, x: x, y: y });\n break;\n case 'T':\n if (prev) {\n var ctrl = void 0;\n if (prev.command === 'Q') {\n ctrl = { x: prev.x1, y: prev.y1 };\n }\n else {\n ctrl = { x: x0, y: y0 };\n }\n var cpt2 = { x: 2 * x0 - ctrl.x, y: 2 * y0 - ctrl.y };\n segments.push({ command: 'Q', x0: x0, y0: y0, x1: cpt2.x, y1: cpt2.y, x: x, y: y });\n }\n break;\n case 'A':\n var newSeg = seg;\n newSeg.command = 'A';\n segments.push(newSeg);\n break;\n case 'Z':\n case 'z':\n segments.push({ command: 'Z' });\n x = x0;\n y = y0;\n break;\n }\n if (char === 'M' || char === 'm') {\n initx = x;\n inity = y;\n }\n x0 = x;\n y0 = y;\n }\n return segments;\n}\n/** @private */\nexport function transformPath(arr, sX, sY, s, bX, bY, iX, iY) {\n var x0;\n var y0;\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n var newSeg;\n for (x = 0, y = 0, i = 0, length = arr.length; i < length; ++i) {\n var obj = arr[i];\n var seg = obj;\n var char = seg.command;\n if ('x' in seg) {\n x = seg.x;\n }\n if ('y' in seg) {\n y = seg.y;\n }\n if ('y1' in seg) {\n y1 = seg.y1;\n }\n if ('y2' in seg) {\n y2 = seg.y2;\n }\n if ('x1' in seg) {\n x1 = seg.x1;\n }\n if ('x2' in seg) {\n x2 = seg.x2;\n }\n if (s) {\n if (x !== undefined) {\n x = scalePathData(x, sX, bX, iX);\n }\n if (y !== undefined) {\n y = scalePathData(y, sY, bY, iY);\n }\n if (x1 !== undefined) {\n x1 = scalePathData(x1, sX, bX, iX);\n }\n if (y1 !== undefined) {\n y1 = scalePathData(y1, sY, bY, iY);\n }\n if (x2 !== undefined) {\n x2 = scalePathData(x2, sX, bX, iX);\n }\n if (y2 !== undefined) {\n y2 = scalePathData(y2, sY, bY, iY);\n }\n }\n else {\n if (x !== undefined) {\n x = Number((x + sX).toFixed(2));\n }\n if (y !== undefined) {\n y = Number((y + sY).toFixed(2));\n }\n if (x1 !== undefined) {\n x1 = Number((x1 + sX).toFixed(2));\n }\n if (y1 !== undefined) {\n y1 = Number((y1 + sY).toFixed(2));\n }\n if (x2 !== undefined) {\n x2 = Number((x2 + sX).toFixed(2));\n }\n if (y2 !== undefined) {\n y2 = Number((y2 + sY).toFixed(2));\n }\n }\n var scaledPath = { x: x, y: y, x1: x1, y1: y1, x2: x2, y2: y2, r1: seg.r1, r2: seg.r2 };\n newSeg = updatedSegment(seg, char, scaledPath, s, sX, sY);\n if (newSeg) {\n arr[i] = newSeg;\n }\n // Record the start of a subpath\n if (char === 'M' || char === 'm') {\n x0 = x;\n y0 = y;\n }\n }\n var pathData = getPathString(arr);\n return pathData;\n}\n/** @private */\nexport function updatedSegment(segment, char, obj, isScale, sX, sY) {\n switch (char) {\n case 'M':\n segment.x = obj.x;\n segment.y = obj.y;\n break;\n case 'L':\n segment.x = obj.x;\n segment.y = obj.y;\n break;\n case 'H':\n segment.x = obj.x;\n break;\n case 'V':\n segment.y = obj.y;\n break;\n case 'C':\n segment.x = obj.x;\n segment.y = obj.y;\n segment.x1 = obj.x1;\n segment.y1 = obj.y1;\n segment.x2 = obj.x2;\n segment.y2 = obj.y2;\n break;\n case 'S':\n segment.x = obj.x;\n segment.y = obj.y;\n segment.x2 = obj.x2;\n segment.y2 = obj.y2;\n break;\n case 'Q':\n segment.x = obj.x;\n segment.y = obj.y;\n segment.x1 = obj.x1;\n segment.y1 = obj.y1;\n break;\n case 'T':\n segment.x = obj.x;\n segment.y = obj.y;\n break;\n case 'A':\n var r1 = obj.r1;\n var r2 = obj.r2;\n if (isScale) {\n obj.r1 = r1 = (r1 * sX);\n obj.r2 = r2 = (r2 * sY);\n }\n segment.x = obj.x;\n segment.y = obj.y;\n segment.r1 = obj.r1;\n segment.r2 = obj.r2;\n break;\n case 'z':\n case 'Z':\n segment = { command: 'Z' };\n break;\n }\n return segment;\n}\n/** @private */\nexport function scalePathData(val, scaleFactor, oldOffset, newOffset) {\n if (val !== oldOffset) {\n if (newOffset !== oldOffset) {\n val = (((val * scaleFactor) - (Number(oldOffset) * scaleFactor - Number(oldOffset)))\n + (newOffset - Number(oldOffset)));\n }\n else {\n val = ((Number(val) * scaleFactor) - (Number(oldOffset) * scaleFactor - Number(oldOffset)));\n }\n }\n else {\n if (newOffset !== oldOffset) {\n val = newOffset;\n }\n }\n return Number(val.toFixed(2));\n}\n/** @private */\nexport function splitArrayCollection(arrayCollection) {\n var x0;\n var y0;\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n for (x = 0, y = 0, i = 0, length = arrayCollection.length; i < length; ++i) {\n var path = arrayCollection[i];\n var seg = path;\n var char = seg.command;\n if (/[MLHVCSQTA]/.test(char)) {\n if ('x' in seg) {\n seg.x = x = seg.x;\n }\n if ('y' in seg) {\n seg.y = y = seg.y;\n }\n }\n else {\n if ('x1' in seg) {\n seg.x1 = x1 = x + seg.x1;\n }\n if ('x2' in seg) {\n seg.x2 = x2 = x + seg.x2;\n }\n if ('y1' in seg) {\n seg.y1 = y1 = y + seg.y1;\n }\n if ('y2' in seg) {\n seg.y2 = y2 = y + seg.y2;\n }\n if ('x' in seg) {\n seg.x = x += seg.x;\n }\n if ('y' in seg) {\n seg.y = y += seg.y;\n }\n var newSeg = void 0;\n switch (char) {\n case 'm':\n case 'M':\n newSeg = { command: 'M', x: x, y: y };\n break;\n case 'l':\n case 'L':\n newSeg = { command: 'L', x: x, y: y };\n break;\n case 'h':\n case 'H':\n newSeg = { command: 'H', x: x };\n break;\n case 'v':\n case 'V':\n newSeg = { command: 'V', y: y };\n break;\n case 'c':\n case 'C':\n newSeg = { command: 'C', x: x, y: y, x1: x1, y1: y1, x2: x2, y2: y2 };\n break;\n case 's':\n case 'S':\n newSeg = { command: 'S', x: x, y: y, x2: x2, y2: y2 };\n break;\n case 'q':\n case 'Q':\n newSeg = { command: 'Q', x: x, y: y, x1: x1, y1: y1 };\n break;\n case 't':\n case 'T':\n newSeg = { command: 'T', x: x, y: y };\n break;\n case 'a':\n case 'A':\n newSeg = { command: 'A', x: x, y: y };\n newSeg.r1 = seg.r1;\n newSeg.r2 = seg.r2;\n newSeg.angle = seg.angle;\n newSeg.largeArc = seg.largeArc;\n newSeg.sweep = seg.sweep;\n break;\n case 'z':\n case 'Z':\n newSeg = { command: 'Z' };\n x = x0;\n y = y0;\n newSeg = arrayCollection[i];\n break;\n }\n if (newSeg) {\n arrayCollection[i] = newSeg;\n }\n }\n if (char === 'M' || char === 'm') {\n x0 = x;\n y0 = y;\n }\n }\n return arrayCollection;\n}\n/** @private */\nexport function getPathString(arrayCollection) {\n var getNewString = '';\n var i;\n for (i = 0; i < arrayCollection.length; i++) {\n if (i === 0) {\n getNewString += getString(arrayCollection[i]);\n }\n else {\n getNewString += ' ' + getString(arrayCollection[i]);\n }\n }\n return getNewString;\n}\n/** @private */\nexport function getString(obj) {\n var string = '';\n switch (obj.command) {\n case 'Z':\n case 'z':\n string = obj.command;\n break;\n case 'M':\n case 'm':\n case 'L':\n case 'l':\n string = obj.command + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'C':\n case 'c':\n string = obj.command + ' ' + obj.x1 + ' ' + obj.y1 + ' ' + obj.x2 + ' ' + obj.y2 + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'Q':\n case 'q':\n string = obj.command + ' ' + obj.x1 + ' ' + obj.y1 + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'A':\n case 'a':\n var cmd = obj.command;\n var ang = obj.angle;\n var l = (obj.largeArc ? '1' : '0');\n var s = (obj.sweep ? '1' : '0');\n string = cmd + ' ' + obj.r1 + ' ' + obj.r2 + ' ' + ang + ' ' + l + ' ' + s + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'H':\n case 'h':\n string = obj.command + ' ' + obj.x;\n break;\n case 'V':\n case 'v':\n string = obj.command + ' ' + obj.y;\n break;\n case 'S':\n case 's':\n string = obj.command + ' ' + obj.x2 + ' ' + obj.y2 + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'T':\n case 't':\n string = obj.command + ' ' + obj.x + ' ' + obj.y;\n }\n return string;\n}\n","/**\n * Matrix module is used to transform points based on offsets, angle\n */\n/** @private */\nexport var MatrixTypes;\n(function (MatrixTypes) {\n MatrixTypes[MatrixTypes[\"Identity\"] = 0] = \"Identity\";\n MatrixTypes[MatrixTypes[\"Translation\"] = 1] = \"Translation\";\n MatrixTypes[MatrixTypes[\"Scaling\"] = 2] = \"Scaling\";\n MatrixTypes[MatrixTypes[\"Unknown\"] = 4] = \"Unknown\";\n})(MatrixTypes || (MatrixTypes = {}));\n/** @private */\nvar Matrix = /** @class */ (function () {\n function Matrix(m11, m12, m21, m22, offsetX, offsetY, type) {\n this.m11 = m11;\n this.m12 = m12;\n this.m21 = m21;\n this.m22 = m22;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n // if (type === undefined) {\n // this.type = MatrixTypes.Unknown;\n // } else {\n // this.type = type;\n // }\n this.type = type;\n }\n return Matrix;\n}());\nexport { Matrix };\n/** @private */\nexport function identityMatrix() {\n return new Matrix(1, 0, 0, 1, 0, 0, MatrixTypes.Identity);\n}\n/** @private */\nexport function transformPointByMatrix(matrix, point) {\n var pt = multiplyPoint(matrix, point.x, point.y);\n return { x: Math.round(pt.x * 100) / 100, y: Math.round(pt.y * 100) / 100 };\n}\n/** @private */\nexport function transformPointsByMatrix(matrix, points) {\n var transformedPoints = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n transformedPoints.push(transformPointByMatrix(matrix, point));\n }\n return transformedPoints;\n}\n/** @private */\nexport function rotateMatrix(matrix, angle, centerX, centerY) {\n angle %= 360.0;\n multiplyMatrix(matrix, createRotationRadians(angle * 0.017453292519943295, centerX ? centerX : 0, centerY ? centerY : 0));\n}\n/** @private */\nexport function scaleMatrix(matrix, scaleX, scaleY, centerX, centerY) {\n if (centerX === void 0) { centerX = 0; }\n if (centerY === void 0) { centerY = 0; }\n multiplyMatrix(matrix, createScaling(scaleX, scaleY, centerX, centerY));\n}\n/** @private */\nexport function translateMatrix(matrix, offsetX, offsetY) {\n if (matrix.type & MatrixTypes.Identity) {\n matrix.type = MatrixTypes.Translation;\n setMatrix(matrix, 1.0, 0.0, 0.0, 1.0, offsetX, offsetY);\n return;\n }\n if (matrix.type & MatrixTypes.Unknown) {\n matrix.offsetX += offsetX;\n matrix.offsetY += offsetY;\n return;\n }\n matrix.offsetX += offsetX;\n matrix.offsetY += offsetY;\n matrix.type |= MatrixTypes.Translation;\n}\n/** @private */\nfunction createScaling(scaleX, scaleY, centerX, centerY) {\n var result = identityMatrix();\n result.type = !(centerX || centerY) ? MatrixTypes.Scaling : MatrixTypes.Scaling | MatrixTypes.Translation;\n setMatrix(result, scaleX, 0.0, 0.0, scaleY, centerX - scaleX * centerX, centerY - scaleY * centerY);\n return result;\n}\n/** @private */\nfunction createRotationRadians(angle, centerX, centerY) {\n var result = identityMatrix();\n var num = Math.sin(angle);\n var num2 = Math.cos(angle);\n var offsetX = centerX * (1.0 - num2) + centerY * num;\n var offsetY = centerY * (1.0 - num2) - centerX * num;\n result.type = MatrixTypes.Unknown;\n setMatrix(result, num2, num, -num, num2, offsetX, offsetY);\n return result;\n}\n/** @private */\nfunction multiplyPoint(matrix, x, y) {\n switch (matrix.type) {\n case MatrixTypes.Identity: break;\n case MatrixTypes.Translation:\n x += matrix.offsetX;\n y += matrix.offsetY;\n break;\n case MatrixTypes.Scaling:\n x *= matrix.m11;\n y *= matrix.m22;\n break;\n case MatrixTypes.Translation | MatrixTypes.Scaling:\n x *= matrix.m11;\n x += matrix.offsetX;\n y *= matrix.m22;\n y += matrix.offsetY;\n break;\n default:\n var num = y * matrix.m21 + matrix.offsetX;\n var num2 = x * matrix.m12 + matrix.offsetY;\n x *= matrix.m11;\n x += num;\n y *= matrix.m22;\n y += num2;\n break;\n }\n return { x: x, y: y };\n}\n/** @private */\nexport function multiplyMatrix(matrix1, matrix2) {\n var type = matrix1.type;\n var type2 = matrix2.type;\n if (type2 === MatrixTypes.Identity) {\n return;\n }\n if (type === MatrixTypes.Identity) {\n assignMatrix(matrix1, matrix2);\n matrix1.type = matrix2.type;\n return;\n }\n if (type2 === MatrixTypes.Translation) {\n matrix1.offsetX += matrix2.offsetX;\n matrix1.offsetY += matrix2.offsetY;\n if (type !== MatrixTypes.Unknown) {\n matrix1.type |= MatrixTypes.Translation;\n }\n return;\n }\n if (type !== MatrixTypes.Translation) {\n var num = type << 4 | type2;\n switch (num) {\n case 34:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n return;\n case 35:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n matrix1.offsetX = matrix2.offsetX;\n matrix1.offsetY = matrix2.offsetY;\n matrix1.type = (MatrixTypes.Translation | MatrixTypes.Scaling);\n return;\n case 36: break;\n default:\n {\n switch (num) {\n case 50:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n matrix1.offsetX *= matrix2.m11;\n matrix1.offsetY *= matrix2.m22;\n return;\n case 51:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n matrix1.offsetX = matrix2.m11 * matrix1.offsetX + matrix2.offsetX;\n matrix1.offsetY = matrix2.m22 * matrix1.offsetY + matrix2.offsetY;\n return;\n case 52: break;\n default:\n switch (num) {\n case 66:\n case 67:\n case 68: break;\n default: return;\n }\n break;\n }\n break;\n }\n }\n var result = identityMatrix();\n var m11New = matrix1.m11 * matrix2.m11 + matrix1.m12 * matrix2.m21;\n var m12New = matrix1.m11 * matrix2.m12 + matrix1.m12 * matrix2.m22;\n var m21New = matrix1.m21 * matrix2.m11 + matrix1.m22 * matrix2.m21;\n var m22New = matrix1.m21 * matrix2.m12 + matrix1.m22 * matrix2.m22;\n var offsetX_1 = matrix1.offsetX * matrix2.m11 + matrix1.offsetY * matrix2.m21 + matrix2.offsetX;\n var offsetY_1 = matrix1.offsetX * matrix2.m12 + matrix1.offsetY * matrix2.m22 + matrix2.offsetY;\n setMatrix(result, m11New, m12New, m21New, m22New, offsetX_1, offsetY_1);\n if (result.m21 || result.m12) {\n result.type = MatrixTypes.Unknown;\n }\n else {\n if (result.m11 && result.m11 !== 1.0 || result.m22 && result.m22 !== 1.0) {\n result.type = MatrixTypes.Scaling;\n }\n if (result.offsetX || result.offsetY) {\n result.type |= MatrixTypes.Translation;\n }\n if ((result.type & (MatrixTypes.Translation | MatrixTypes.Scaling)) === MatrixTypes.Identity) {\n result.type = MatrixTypes.Identity;\n }\n result.type = MatrixTypes.Scaling | MatrixTypes.Translation;\n }\n assignMatrix(matrix1, result);\n matrix1.type = result.type;\n return;\n }\n var offsetX = matrix1.offsetX;\n var offsetY = matrix1.offsetY;\n matrix1.offsetX = offsetX * matrix2.m11 + offsetY * matrix2.m21 + matrix2.offsetX;\n matrix1.offsetY = offsetX * matrix2.m12 + offsetY * matrix2.m22 + matrix2.offsetY;\n if (type2 === MatrixTypes.Unknown) {\n matrix1.type = MatrixTypes.Unknown;\n return;\n }\n matrix1.type = (MatrixTypes.Translation | MatrixTypes.Scaling);\n}\n/** @private */\nfunction setMatrix(mat, m11, m12, m21, m22, x, y) {\n mat.m11 = m11;\n mat.m12 = m12;\n mat.m21 = m21;\n mat.m22 = m22;\n mat.offsetX = x;\n mat.offsetY = y;\n}\n/** @private */\nfunction assignMatrix(matrix1, matrix2) {\n matrix1.m11 = matrix2.m11;\n matrix1.m12 = matrix2.m12;\n matrix1.m21 = matrix2.m21;\n matrix1.m22 = matrix2.m22;\n matrix1.offsetX = matrix2.offsetX;\n matrix1.offsetY = matrix2.offsetY;\n matrix1.type = matrix2.type;\n}\n","/**\n * BasicShapeDictionary defines the shape of the built-in basic shapes\n */\n/** @private */\nexport function getBasicShape(shape) {\n return basicShapes[shape.toString()];\n}\nvar basicShapes = {\n //Rectangle,\n 'Rectangle': 'M0,0 L50,0 L50,50 L0,50 z',\n //Ellipse,\n 'Ellipse': 'M80.5,12.5 C80.5,19.127417 62.59139,24.5 40.5,24.5 C18.40861,24.5 0.5,19.127417 0.5,12.5' +\n 'C0.5,5.872583 18.40861,0.5 40.5,0.5 C62.59139,0.5 80.5,5.872583 80.5,12.5 z',\n //Hexagon,\n 'Hexagon': 'M30,0 L60,0 L90,30 L60,60 L30,60 L0,30 L30,0 z',\n //Parallelogram,\n 'Parallelogram': 'M30,0 L60,0 L45,30 L15,30 z',\n //Triangle,\n 'Triangle': 'M45,0 L90,45 L0,45 L45,0 z',\n //Plus,\n 'Plus': 'M696.6084,158.2656 L674.8074,158.2656 L674.8074,136.4656 L658.4084,136.4656 L658.4084,158.2656 L636.6084,158.2656' +\n 'L636.6084,174.6646 L658.4084,174.6646 L658.4084,196.4656 L674.8074,196.4656 L674.8074,174.6646 L696.6084,174.6646' +\n 'L696.6084,158.2656 z',\n //Star,\n 'Star': 'M540.3643,137.9336 L546.7973,159.7016 L570.3633,159.7296 L550.7723,171.9366 L558.9053,194.9966 L540.3643,179.4996' +\n 'L521.8223,194.9966 L529.9553,171.9366 L510.3633,159.7296 L533.9313,159.7016 L540.3643,137.9336 z',\n //Pentagon,\n 'Pentagon': 'M30,0 L60,30 L50,70 L10,70 L0,30 L30,0 z',\n //Heptagon,\n 'Heptagon': 'M223.7783,195.7134 L207.1303,174.8364 L213.0713,148.8034 L237.1303,137.2174 L261.1883,148.8034 L267.1303,174.8364' +\n 'L250.4813,195.7134 L223.7783,195.7134 z',\n //Octagon,\n 'Octagon': 'M98.7319,196.4653 L81.1579,178.8923 L81.1579,154.0393 L98.7319,136.4653 L123.5849,136.4653' +\n 'L141.1579,154.0393 L141.1579,178.8923 L123.5849,196.4653 L98.7319,196.4653 z',\n //Trapezoid,\n 'Trapezoid': 'M127.2842,291.4492 L95.0322,291.4492 L81.1582,256.3152 L141.1582,256.3152 L127.2842,291.4492 z',\n //Decagon,\n 'Decagon': 'M657.3379,302.4141 L642.3369,291.5161 L636.6089,273.8821 L642.3369,256.2481 L657.3379,245.3511 L675.8789,245.3511' +\n 'L690.8789,256.2481 L696.6089,273.8821' +\n 'L690.8789,291.5161 L675.8789,302.4141 L657.3379,302.4141 z',\n //RightTriangle,\n 'RightTriangle': 'M836.293,292.9238 L776.293,292.9238 L776.293,254.8408 L836.293,292.9238 z',\n //Cylinder,\n 'Cylinder': 'M 542.802,362.009C 542.802,368.452 525.341,373.676 503.802,373.676C 482.263,373.676 464.802,368.452 464.802,362.009' +\n 'L 464.802,466.484C 464.802,472.928 482.263,478.151 503.802,478.151' +\n 'C 525.341,478.151 542.802,472.928 542.802,466.484L 542.802,362.016C 542.802,368.459 525.341,373.534 503.802,373.534' +\n 'C 482.263,373.534 464.802,368.31 464.802,361.867' +\n 'L 464.802,362.016C 464.802,355.572 482.263,350.349 503.802,350.349C 525.341,350.349 542.802,355.572 542.802,362.016',\n //Diamond,\n 'Diamond': 'M397.784,287.875 L369.5,316.159 L341.216,287.875 L369.5,259.591 L397.784,287.875 z'\n};\n","/**\n * ShapeDictionary defines the shape of the default nodes and ports\n */\n/** @private */\nexport function getPortShape(shape) {\n return portShapes[shape.toString()];\n}\n/** @private */\nexport function getDecoratorShape(shape, decorator) {\n if (shape === 'Custom') {\n return decorator.pathData;\n }\n return decoratorShapes[shape];\n}\n/**\n * @private\n * @param icon\n * sets the path data for different icon shapes\n */\nexport function getIconShape(icon) {\n var data;\n switch (icon.shape) {\n case 'Minus':\n data = 'M0,50 L100,50';\n break;\n case 'Plus':\n data = 'M0,-50 L0,50 M-50,0 L50,0';\n break;\n case 'ArrowUp':\n data = 'M0,100 L50,0 L100,100 Z';\n break;\n case 'ArrowDown':\n data = 'M0,0 L50,100 L100,0 Z';\n break;\n case 'Path':\n data = icon.pathData;\n break;\n }\n return data;\n}\nvar portShapes = {\n 'X': 'M14,14 L106,106 M106,14 L14,106',\n 'Circle': 'M0,50 A50,50,0 1 1 100,50 A50,50,0 1 1 0,50 Z',\n 'Square': 'M0,0 L10,0 L10,10 L0,10 z',\n};\nvar decoratorShapes = {\n 'OpenArrow': 'M15.9,23 L5,16 L15.9,9 L17,10.7 L8.7,16 L17,21.3Z',\n 'Square': 'M0,0 L10,0 L10,10 L0,10 z',\n 'Fletch': 'M14.8,10c0,0-3.5,6,0.2,12c0,0-2.5-6-10.9-6C4.1,16,11.3,16,14.8,10z',\n 'OpenFetch': 'M6,17c-0.6,0-1-0.4-1-1s0.4-1,1-1c10.9,0,11-5,11-5' +\n 'c0-0.6,0.4-1,1-1s1,0.4,1,1C19,10.3,18.9,17,6,17C6,17,6,17,6,17z ' +\n 'M18,23c-0.5,0-1-0.4-1-1c0-0.2-0.3-5-11-5c-0.6,0-1-0.5-1-1s0.4-1,1-1c0,0,0,0,0,0' +\n 'c12.9,0,13,6.7,13,7 C19,22.6,18.6,23,18,23z',\n 'IndentedArrow': 'M17,10c0,0-4.5,5.5,0,12L5,16L17,10z',\n 'OutdentedArrow': 'M14.6,10c0,0,5.4,6,0,12L5,16L14.6,10z',\n 'DoubleArrow': 'M19,10 L19,22 L13,16Z M12,10 L12,22 L6,16Z',\n 'Arrow': 'M15,10 L15,22 L5,16Z',\n 'Diamond': 'M12,23l-7-7l7-7l6.9,7L12,23z',\n 'Circle': 'M0,50 A50,50,0 1 1 100,50 A50,50,0 1 1 0,50 Z'\n};\n","/**\n * FlowShapeDictionary defines the shape of the built-in flow shapes\n */\n/** @private */\nexport function getFlowShape(shape) {\n return flowShapes[shape.toString()];\n}\nvar flowShapes = {\n // Process,\n 'Process': 'M419.511,76.687L359.511,76.687L359.511,43.086L419.511,43.086z',\n // Decision,\n 'Decision': 'M 253.005,115.687L 200.567,146.071L 148.097,115.687L 200.534,85.304L 253.005,115.687 Z',\n // Document,\n 'Document': 'M 60 31.9 c 0 0 -11 -7.7 -30 0 s -30 0 -30 0 V 0 h 60 V 31.9 Z',\n // PreDefinedProcess,\n 'PreDefinedProcess': 'M 0,0 L 50,0 L 50,50 L 0,50 Z M 8.334,0 L 8.334,50 M 41.667,0 L 41.667,50',\n // Terminator,\n 'Terminator': 'M 269.711,29.33C 269.71,44.061 257.77,56 243.04,56L 158.058,56C 143.33,56 131.39,44.061 131.39,29.33L 131.39,29.33' +\n 'C 131.391,14.6057 143.33,2.669 158.058,2.669L 243.044,2.669C 257.772,2.669 269.711,14.6057 269.711,29.333 Z',\n // PaperTap,\n 'PaperTap': 'M0.0009,17.2042 L0.0009,47.165 C0.001,47.165 14.403,53.5455 25.00,47.165 C35.599,40.7852 44.403,43.5087 50.00,47.165' +\n 'L50.001,17.2042 M50.001,32.7987 L50.001,2.8405 C50.001,2.8405 35.599,-3.5427 25.001,2.8405' +\n 'C14.403,9.2237 5.599,6.494 0.0009,2.8405 L0.0009,32.7987',\n // DirectData,\n 'DirectData': 'M 132.62 0 L 17.38 0 C 7.78 0 0 13.43 0 30 C 0 46.57 7.78 60 17.38 60 L 132.62 60 M 132.62 0' +\n 'C 123.02 0 115.24 13.43 115.24 30 C 115.24 46.57 123.02 60 132.62 60 C 142.22 60 150 46.57 150 30 C 150 13.43 142.22 0 132.62 0 z ',\n // SequentialData,\n 'SequentialData': 'M0.0029,24.999 C0.0029,11.1922 10.433,0.0021 23.295,0.0021 C36.159,0.00216 46.585,11.1922 46.585,24.999' +\n 'C46.585,38.8057 36.159,49.9979 23.295,49.9979 C10.433,49.9979 0.0029,38.8057 0.0029,24.999 z M23.294,49.999 L50.002,49.999',\n // Sort,\n 'Sort': 'M50.001,24.9971 L25.001,49.9971 L0.00097,24.9971 L25.001,-0.00286865 L50.001,24.9971 z' +\n ' M0.000976562,24.9971 L50.001,24.9971',\n // MultiDocument,\n 'MultiDocument': 'M43.6826,40 C44.8746,40.6183 45.8586,41.3502 46.8366,42.1122 L46.8366,4.74487 L3.09857,4.74487 L3.09857,10.9544' +\n ' M46.837,35.143 C48.027,35.765 49.025,36.604 50.003,37.369 L50.003,0.002 L6.264,0.002 L6.264,4.744 M43.682,47.113 L43.682,10.765' +\n ' L0.0025,10.7652 L0.0025,47.1132 C0.0025,47.1132 12.5846,53.6101 21.8426,47.1132 C31.1006,40.6163 38.792,43.393 43.6826,47.1132 z',\n // Collate,\n 'Collate': 'M50.001,0.0028 L25.001,25.0029 L0.00097,0.0028 L50.001,0.002 z M0.0009,50.002 L25.001,25.002' +\n 'L50.001,50.002 L0.0009,50.0029 z',\n // SummingJunction,\n 'SummingJunction': 'M7.3252,42.6768 L42.6772,7.3247 M42.6768,42.6768 L7.3248,7.3247 M0.0009,25.001 ' +\n 'C0.0009,11.193 11.197,0.0009 25.001,0.0009' +\n ' C38.809,0.0009 50.001,11.193 50.001,25.001 C50.001,38.809 38.809,50.001 25.001,50.001 C11.197,50.00 0.0009,38.809 0.0009,25.00 z',\n // Or,\n 'Or': 'M 0 50 L 100 50 M 50 100 L 50 0.0 M 0 50 C 0 22.384 22.392 0 50 0 C 77.616 0 100 22.384 100 50' +\n ' C 100 77.616 77.616 100 50 100 C 22.392 100 0 77.616 0 50 Z',\n // InternalStorage,\n 'InternalStorage': 'M 0 3.81946A 2.5,3.81946 0 0,1 2.5,0L 47.5 0A 2.5,3.81946 0 0,1 50,3.81946' +\n 'L 50 45.836A 2.5,3.819446 0 0,1 47.5,49.652778' +\n 'L 2.5 49.652778A 2.5,3.819446 0 0,1 0,45.8336L 0 3.819446ZM 0 11.45834L 50 11.4583334M 12.5 0L 12.5 49.652778',\n // Extract,\n 'Extract': 'M0,35 L30,0 L60,35 Z',\n // ManualOperation,\n 'ManualOperation': 'M46.4,28.8 L14.8,28.8 L0,0 L60,0 Z',\n // Merge,\n 'Merge': 'M60,0 L30,35 L0,0 Z',\n // OffPageReference,\n 'OffPageReference': 'M60,33.3 L30.1,39 L0,33.3 L0,0 L60,0 Z',\n // SequentialAccessStorage,\n 'SequentialAccessStorage': 'M 60 30 C 60 13.4 46.6 0 30 0 S 0 13.4 0 30 s 13.4 30 30 30 h 28.6 v -6.5 h -9.9' +\n 'C 55.5 48 60 39.5 60 30 Z',\n // Annotation,\n 'Annotation': 'M49.9984,50.0029 L-0.00271199,50.0029 L-0.00271199,0.00286865 L49.9984,0.00286865',\n // Annotation2,\n 'Annotation2': 'M49.9977,50.0029 L25.416,50.0029 L25.416,0.00286865 L49.9977,0.00286865 M25.4166,25.0029 L-0.00227869,25.0029',\n // Data,\n 'Data': 'M 10 0 L 40 0 L 30 40 L 0 40 Z',\n // Card,\n 'Card': 'M275,60 L400,60 L400,110 L260,110 L260,75 Z',\n // Delay,\n 'Delay': 'M0,0 L12.029,0 C14.212999,0 16,1.7869979 16,3.9709952 C16,6.1549926 14.212999,7.9409904 12.029,7.9409904 L0,7.9409904 z',\n // Preparation,\n 'Preparation': 'M 1048.17 572 C 1051.06 568.86 1055.17 567.05 1059.5 567 L 1094.51 567'\n + ' C 1098.84 567.05 1102.95 568.86 1105.84 572' +\n ' L 1126.43 595 C 1127.01 596.28 1127.01 597.72 1126.43 599 L 1105.84 622 C 1102.95 625.14 1098.84 626.95 1094.51 627' +\n ' L 1059.5 627 C 1055.17 626.95 1051.06 625.14 1048.17 622 L 1027.58 599 C 1027 597.72 1027 596.28 1027.58 595 L 1048.17 572 Z',\n // Display,\n 'Display': 'M47.8809,19.2914 L32.7968,-0.00594145 L11.3902,-0.00594145 C7.93166,-0.00594145 0.00124586,11.187 0.00124586,24.9968' +\n 'C0.00124586,38.8032 7.93166,49.9962 11.3902,49.9962 L32.7968,49.99 L47.615,31.038 C47.615,31.0388 52.798,24.9968 47.880,19.2914 z',\n // ManualInput,\n 'ManualInput': 'M 912 732 L 1006.85 707 C 1008.2 707 1009.5 707.53 1010.46 708.46 C 1011.41 709.4 1011.95 710.67 1011.95 712' +\n ' L 1011.95 762C 1012 764.41 1010.28 766.52 1007.87 767 L 917.1 767 C 915.75 767 914.45 766.47 913.49 765.54' +\n ' C 912.54 764.6 912 763.33 912 762 L 912 732 Z',\n // LoopLimit,\n 'LoopLimit': 'M 8 9 L 27 9 L 33 15 L 33 26 C 33 27 33 27 32 27 L 4 27 C 3 27 2 27 2 26 L 2 15 L 8 9 Z',\n // StoredData\n 'StoredData': 'M 5.55 0L 50 0A 1.5,30 0 0,1 50,0A 5.555,25 0 0,0 50,50A 1.5,30 0 0,1 50,50L 5.555 50A 5.55,25 0 0,1 5.555,0Z',\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 } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Defines the tooltip that should be shown when the mouse hovers over node.\n * An object that defines the description, appearance and alignments of tooltip\n */\nvar DiagramTooltip = /** @class */ (function (_super) {\n __extends(DiagramTooltip, _super);\n function DiagramTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], DiagramTooltip.prototype, \"content\", void 0);\n __decorate([\n Property('TopLeft')\n ], DiagramTooltip.prototype, \"position\", void 0);\n __decorate([\n Property('Mouse')\n ], DiagramTooltip.prototype, \"relativeMode\", void 0);\n __decorate([\n Property(true)\n ], DiagramTooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property('auto')\n ], DiagramTooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], DiagramTooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], DiagramTooltip.prototype, \"animation\", void 0);\n return DiagramTooltip;\n}(ChildProperty));\nexport { DiagramTooltip };\n/**\n * @private\n * defines the Tooltip.\n * @param diagram\n */\nexport function initTooltip(diagram) {\n var tooltipOption = new Tooltip;\n tooltipOption = updateTooltipContent(diagram.tooltip, tooltipOption);\n var tooltip = new Tooltip(tooltipOption);\n tooltip.beforeCollision = beforeCollision;\n tooltip.beforeOpen = beforeOpen;\n tooltip.cssClass = 'e-diagram-tooltip';\n tooltip.opensOn = 'custom';\n tooltip.appendTo('#' + diagram.element.id);\n tooltip.close();\n return tooltip;\n}\nfunction beforeOpen(args) {\n if ((this.content === '' || this.content === undefined)) {\n args.element.style.display = 'none';\n }\n}\nfunction beforeCollision(args) {\n if ((args.collidedPosition && args.collidedPosition !== this.position)) {\n args.element.style.display = 'none';\n }\n}\n/**\n * @private\n * updates the contents of the tooltip.\n * @param diagram\n * @param node\n */\nexport function updateTooltip(diagram, node) {\n var tooltip;\n var tooltipObject = diagram.tooltipObject;\n tooltip = node ? node.tooltip : diagram.tooltip;\n updateTooltipContent(tooltip, tooltipObject);\n return tooltipObject;\n}\nfunction updateTooltipContent(tooltip, tooltipObject) {\n if (tooltip.content) {\n tooltipObject.content = tooltip.content;\n tooltipObject.position = tooltip.position;\n tooltipObject.showTipPointer = tooltip.showTipPointer;\n tooltipObject.width = tooltip.width;\n tooltipObject.height = tooltip.height;\n if (!tooltip.animation) {\n tooltipObject.animation = { close: { effect: 'None' } };\n }\n else {\n tooltipObject.animation = tooltip.animation;\n }\n }\n else {\n tooltipObject.close();\n }\n return tooltipObject;\n}\n","import { Point } from './../primitives/point';\nimport { getPoints, intersect3 } from './diagram-util';\nimport { NoOfSegments } from '../enum/enum';\nimport { StraightSegment, BezierSegment, OrthogonalSegment } from './../objects/connector';\nimport { PathElement } from './../core/elements/path-element';\nimport { cornersPointsBeforeRotation, rotatePoint } from './base-util';\n/**\n * Connector modules are used to dock and update the connectors\n */\n/** @private */\nexport function findConnectorPoints(element, layoutOrientation) {\n var intermeditatePoints;\n var sourcePoint;\n if (element.type === 'Straight' || !element.sourceWrapper) {\n sourcePoint = getSourcePoint(element);\n }\n else {\n sourcePoint = element.sourceWrapper.corners.center;\n }\n intermeditatePoints = terminateConnection(element, sourcePoint, element.targetPoint, layoutOrientation);\n setLineEndPoint(element, intermeditatePoints[0], false);\n setLineEndPoint(element, intermeditatePoints[intermeditatePoints.length - 1], true);\n return intermeditatePoints;\n}\nfunction getSourcePoint(element) {\n var srcPoint;\n if (element.sourcePortWrapper) {\n var srcPort = element.sourcePortWrapper;\n var srcNode = element.sourceWrapper;\n var pt = { x: srcPort.offsetX, y: srcPort.offsetY };\n var direction = getPortDirection(pt, cornersPointsBeforeRotation(srcNode), srcNode.bounds, false);\n srcPoint = pt;\n }\n else if (element.sourceID && element.sourceWrapper) {\n if (element.targetWrapper) {\n var sPoint = element.sourceWrapper.corners.center;\n var tPoint = element.targetWrapper.corners.center;\n srcPoint = getIntersection(element, element.sourceWrapper, sPoint, tPoint, false);\n }\n else {\n srcPoint = element.sourcePoint;\n }\n }\n else {\n srcPoint = element.sourcePoint;\n }\n return srcPoint;\n}\nfunction getDirection(source, target, layoutOrientation) {\n if (layoutOrientation === 'LeftToRight') {\n source.direction = source.direction ? source.direction : 'Right';\n target.direction = target.direction ? target.direction : 'Left';\n }\n else if (layoutOrientation === 'RightToLeft') {\n source.direction = source.direction ? source.direction : 'Left';\n target.direction = target.direction ? target.direction : 'Right';\n }\n else if (layoutOrientation === 'TopToBottom') {\n source.direction = source.direction ? source.direction : 'Bottom';\n target.direction = target.direction ? target.direction : 'Top';\n }\n else if (layoutOrientation === 'BottomToTop') {\n source.direction = source.direction ? source.direction : 'Top';\n target.direction = target.direction ? target.direction : 'Bottom';\n }\n}\nfunction terminateConnection(element, srcPoint, tarPoint, layoutOrientation) {\n var sourceNode = element.sourceWrapper;\n var targetNode = element.targetWrapper;\n var sourcePort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var srcCorner;\n var tarCorner;\n var intermeditatePoints = [];\n var segPoint;\n var srcDir;\n var tarDir;\n var minSpace = 13;\n var sourceMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var targetMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var source = { corners: srcCorner, point: srcPoint, direction: srcDir, margin: sourceMargin };\n var target = { corners: tarCorner, point: tarPoint, direction: tarDir, margin: targetMargin };\n var sourceCorners;\n var targetCorners;\n if (sourceNode !== undefined && targetNode !== undefined) {\n sourceCorners = cornersPointsBeforeRotation(sourceNode);\n targetCorners = cornersPointsBeforeRotation(targetNode);\n source.corners = sourceNode.corners;\n target.corners = targetNode.corners;\n }\n if (sourcePort !== undefined) {\n var port = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n source.direction = getPortDirection(port, sourceCorners, sourceNode.bounds, false);\n }\n if (targetPort !== undefined) {\n var tarPortPt = { x: targetPort.offsetX, y: targetPort.offsetY };\n target.direction = getPortDirection(tarPortPt, targetCorners, targetNode.bounds, false);\n }\n if (sourceNode !== undefined && targetNode !== undefined) {\n if (source.direction === undefined || target.direction === undefined) {\n if (layoutOrientation) {\n getDirection(source, target, layoutOrientation);\n }\n else {\n if (source.corners.top > target.corners.bottom &&\n Math.abs(source.corners.top - target.corners.bottom) >\n (source.margin.top + source.margin.bottom)) {\n source.direction = source.direction ? source.direction : 'Top';\n target.direction = target.direction ? target.direction : 'Bottom';\n }\n else if (source.corners.bottom < target.corners.top &&\n Math.abs(source.corners.bottom - target.corners.top) >\n (source.margin.bottom + source.margin.top)) {\n source.direction = source.direction ? source.direction : 'Bottom';\n target.direction = target.direction ? target.direction : 'Top';\n }\n else if ((source.corners.right < target.corners.left &&\n Math.abs(source.corners.right - target.corners.left) >\n (source.margin.right + source.margin.left)) ||\n ((source.corners.right + minSpace < target.corners.left) ||\n (target.corners.right >= source.corners.left - minSpace && source.corners.left > target.corners.left))) {\n source.direction = source.direction ? source.direction : 'Right';\n target.direction = target.direction ? target.direction : 'Left';\n }\n else if ((source.corners.left > target.corners.right &&\n Math.abs(source.corners.left - target.corners.right) > (source.margin.left + source.margin.right)) ||\n ((target.corners.right + minSpace < source.corners.left ||\n (source.corners.right >= target.corners.left - minSpace\n && source.corners.left < target.corners.left)))) {\n source.direction = source.direction ? source.direction : 'Left';\n target.direction = target.direction ? target.direction : 'Right';\n }\n else {\n if (sourceNode.id !== targetNode.id && (!sourceCorners.equals(sourceCorners, targetCorners)) &&\n targetCorners.containsPoint(sourceCorners.topCenter, source.margin.top)) {\n source.direction = source.direction ? source.direction : 'Bottom';\n target.direction = target.direction ? target.direction : 'Top';\n }\n else {\n source.direction = source.direction ? source.direction : 'Top';\n target.direction = target.direction ? target.direction : 'Bottom';\n }\n }\n }\n }\n return defaultOrthoConnection(element, source.direction, target.direction, source.point, target.point);\n }\n //It will be called only when there is only one end node\n checkLastSegmentasTerminal(element);\n if (element.sourceWrapper || element.targetWrapper) {\n connectToOneEnd(element, source, target);\n }\n if (element.type === 'Straight' || element.type === 'Bezier') {\n intermeditatePoints = intermeditatePointsForStraight(element, source, target);\n }\n else {\n if (element.type === 'Orthogonal' && element.segments && element.segments.length > 0 &&\n element.segments[0].length !== null &&\n element.segments[0].direction !== null) {\n intermeditatePoints = findPointToPointOrtho(element, source, target, sourceNode, targetNode, sourcePort, targetPort);\n }\n else {\n var extra = void 0;\n if (!source.direction) {\n source.direction = (target.direction) ? ((element.targetPortWrapper !== undefined) ? target.direction : getOppositeDirection(target.direction)) :\n Point.direction(source.point, target.point);\n }\n else {\n extra = adjustSegmentLength(sourceNode.bounds, source, 20);\n }\n element.segments[0].points = intermeditatePoints = orthoConnection3Segment(element, source, target, extra);\n }\n }\n return intermeditatePoints;\n}\nfunction updateSegmentPoints(source, segment) {\n var segPoint;\n var angle;\n var extra;\n source.direction = segment.direction;\n segment.points = [];\n segment.points.push(source.point);\n extra = (segment.direction === 'Left' || segment.direction === 'Top') ? -(segment.length) : segment.length;\n angle = (segment.direction === 'Left' || segment.direction === 'Right') ? 0 : 90;\n segPoint = addLineSegment(source.point, extra, angle);\n segment.points.push(segPoint);\n return segPoint;\n}\nfunction pointToPoint(element, source, target) {\n var point;\n var direction;\n var portdirection;\n source.corners = (element.sourceWrapper) ? element.sourceWrapper.corners : undefined;\n if (element.sourcePortWrapper) {\n var port = { x: element.sourcePortWrapper.offsetX, y: element.sourcePortWrapper.offsetY };\n portdirection = getPortDirection(port, cornersPointsBeforeRotation(element.sourceWrapper), element.sourceWrapper.bounds, false);\n if (source.corners && (source.direction === 'Bottom' || source.direction === 'Top')) {\n if (target.point.x > source.corners.left && target.point.x < source.corners.right) {\n direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n }\n }\n else if (source.corners && (source.direction === 'Left' || source.direction === 'Right')) {\n if (target.point.y > source.corners.top && target.point.y < source.corners.bottom) {\n direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n }\n }\n }\n if (element.sourcePortWrapper && portdirection === getOppositeDirection(direction)) {\n var length_1;\n if ((portdirection === 'Left' || portdirection === 'Right') && (source.point.y >= source.corners.top\n && source.point.y <= source.corners.center.y) &&\n (target.point.y >= source.corners.top && target.point.y <= source.corners.center.y)) {\n source.direction = 'Top';\n length_1 = source.point.y - source.corners.top + 20;\n }\n else if ((portdirection === 'Left' || portdirection === 'Right') && (source.point.y > source.corners.center.y\n && source.point.y <= source.corners.bottom) &&\n (target.point.y > source.corners.center.y && target.point.y <= source.corners.bottom)) {\n source.direction = 'Bottom';\n length_1 = source.corners.bottom - source.point.y + 20;\n }\n else if ((portdirection === 'Top' || portdirection === 'Bottom') && (source.point.x >= source.corners.left\n && source.point.x <= source.corners.center.x) &&\n (target.point.x >= source.corners.left && target.point.x <= source.corners.center.x)) {\n source.direction = 'Left';\n length_1 = source.point.x - source.corners.left + 20;\n }\n else if ((portdirection === 'Top' || portdirection === 'Bottom') && (source.point.x <= source.corners.right\n && source.point.x > source.corners.center.x) &&\n (target.point.x <= source.corners.right && target.point.x < source.corners.center.x)) {\n source.direction = 'Right';\n length_1 = source.corners.right - source.point.x + 20;\n }\n if (source.direction && length_1) {\n point = orthoConnection3Segment(element, source, target, length_1, true);\n }\n }\n else {\n source.direction = (direction) ? direction : findSourceDirection(source.direction, source.point, target.point);\n point = orthoConnection2Segment(source, target);\n }\n return point;\n}\nfunction pointToNode(element, source, target) {\n var point;\n target.corners = element.targetWrapper.corners;\n findDirection(element.targetWrapper, source, target, element);\n var direction = findSourceDirection(target.direction, source.point, target.point);\n if (source.direction === target.direction && (source.direction === 'Left' || source.direction === 'Right')) {\n source.direction = direction;\n point = orthoConnection3Segment(element, source, target, element.targetWrapper.width / 2 + 20);\n var source1 = source;\n source1.point = point[1];\n findDirection(element.targetWrapper, source, target, element);\n point = orthoConnection3Segment(element, source, target);\n }\n else {\n source.direction = direction;\n point = orthoConnection2Segment(source, target);\n }\n return point;\n}\nfunction addPoints(element, source, target) {\n var refPoint;\n target.corners = element.targetWrapper.corners;\n var direction;\n var length;\n if (source.direction !== 'Left' && source.direction !== 'Right') {\n if (target.corners.center.y === source.point.y &&\n (!(target.corners.left <= source.point.x && source.point.x <= target.corners.right))) {\n direction = 'Top';\n length = target.corners.height / 2 + 20;\n }\n else if ((target.corners.center.y === source.point.y &&\n element.segments[element.segments.length - 2].direction === 'Bottom') ||\n (target.corners.center.y > source.point.y && source.point.y >= target.corners.top)) {\n direction = 'Top';\n length = (source.point.y - target.corners.top) + 20;\n }\n else if ((target.corners.center.y === source.point.y &&\n element.segments[element.segments.length - 2].direction === 'Top') ||\n (target.corners.center.y < source.point.y && source.point.y <= target.corners.bottom)) {\n direction = 'Bottom';\n length = (target.corners.bottom - source.point.y) + 20;\n }\n else if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n source.corners.top <= source.point.y && source.point.y <= source.corners.bottom) {\n direction = source.direction;\n length = (source.point.y > target.point.y) ? (source.point.y - source.corners.top + 20) :\n (source.corners.bottom - source.point.y + 20);\n }\n }\n else {\n if (target.corners.center.x === source.point.x &&\n (!(target.corners.top < source.point.y && source.point.y <= target.corners.bottom))) {\n direction = 'Left';\n length = target.corners.width / 2 + 20;\n }\n else if ((target.corners.center.x === source.point.x &&\n element.segments[element.segments.length - 2].direction === 'Right')\n || (target.corners.center.x > source.point.x && source.point.x >= target.corners.left)) {\n direction = 'Left';\n length = (source.point.x - target.corners.left) + 20;\n }\n else if ((target.corners.center.x === source.point.x &&\n element.segments[element.segments.length - 2].direction === 'Left') ||\n (target.corners.center.x <= source.point.x && source.point.x <= target.corners.right)) {\n direction = 'Right';\n length = (target.corners.right - source.point.x) + 20;\n }\n else if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n source.corners.left <= source.point.x && source.point.x <= source.corners.right) {\n direction = source.direction;\n length = (source.point.x > target.point.x) ? (source.point.x - source.corners.left + 20) :\n (source.corners.right - source.point.x + 20);\n }\n }\n var extra = (direction === 'Left' || direction === 'Top') ? -(length) : length;\n var angle = (direction === 'Left' || direction === 'Right') ? 0 : 90;\n refPoint = source.point;\n source.point = addLineSegment(source.point, extra, angle);\n source.direction = Point.direction(source.point, target.point);\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n (source.corners.center.x === target.corners.center.x || source.corners.center.y === target.corners.center.y)) {\n source.direction = target.direction;\n }\n var point = orthoConnection3Segment(element, source, target);\n point.splice(0, 0, refPoint);\n return point;\n}\nfunction findSegmentDirection(element, source, target, portDir) {\n var update = false;\n switch (target.direction) {\n case 'Left':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined && (portDir === 'Right' &&\n source.point.x > target.point.x && source.point.y >= source.corners.top &&\n source.point.y <= source.corners.bottom)\n || (((portDir === 'Bottom' && source.point.y > target.point.y) ||\n (portDir === 'Top' && source.point.y < target.point.y)) &&\n source.point.x >= source.corners.left && source.point.x <= source.corners.right)) {\n source.direction = (portDir === 'Right') ? ((source.point.y > target.point.y) ? 'Top' : 'Bottom') :\n (source.point.x < target.point.x ? 'Right' : 'Left');\n update = true;\n }\n else if (source.point.x > target.point.x && (source.point.y > target.point.y || source.point.y < target.point.y)\n && (!(target.corners.top > source.point.y && target.corners.bottom < source.point.y))) {\n source.direction = 'Left';\n }\n else if ((source.point.x < target.point.x && source.point.y > target.point.y) ||\n (source.point.x > target.point.x && (source.point.y <= target.point.y)\n && ((target.corners.top < source.point.y && target.corners.center.y >= source.point.y)))) {\n source.direction = 'Top';\n }\n else if ((source.point.x < target.point.x && source.point.y < target.point.y) ||\n (source.point.x > target.point.x && (source.point.y > target.point.y)\n && ((target.corners.bottom < source.point.y && target.corners.center.y > source.point.y)))) {\n source.direction = 'Bottom';\n }\n else if (source.point.y === target.point.y && source.point.x < target.point.x) {\n source.direction = 'Right';\n }\n break;\n case 'Right':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n ((portDir === 'Bottom' && source.point.y > target.point.y) ||\n (portDir === 'Top' && source.point.y < target.point.y)) && source.point.x > target.point.x &&\n (source.point.x >= source.corners.left && source.point.x <= source.corners.right)) {\n source.direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n update = true;\n }\n else if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n portDir === 'Left' && source.point.x < target.point.x && (source.point.y >= source.corners.top &&\n source.point.y <= source.corners.bottom)) {\n source.direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n update = true;\n }\n else if (source.point.x < target.point.x && target.corners.top <= source.point.y\n && target.corners.bottom >= source.point.y && source.point.y === target.point.y) {\n source.direction = 'Top';\n }\n else if (source.point.y > target.point.y && source.point.x > target.point.x) {\n source.direction = 'Top';\n }\n else if (source.point.y < target.point.y && source.point.x > target.point.x) {\n source.direction = 'Bottom';\n }\n else if (source.point.x < target.point.x && (source.point.y > target.point.y ||\n source.point.y < target.point.y)) {\n source.direction = 'Right';\n }\n else if (source.point.y === target.point.y && source.point.x > target.point.x) {\n source.direction = 'Left';\n }\n break;\n case 'Top':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined && (portDir === 'Bottom' &&\n source.point.y > target.point.y && source.point.x >= source.corners.left &&\n source.point.x <= source.corners.right) || (((portDir === 'Right' && source.point.x > target.point.x) ||\n (portDir === 'Left' && target.point.y > source.point.y && target.point.x > source.point.x)) &&\n (source.point.y >= source.corners.top && source.point.y <= source.corners.bottom))) {\n source.direction = (portDir === 'Bottom') ? ((source.point.x > target.point.x) ? 'Left' : 'Right') :\n (source.point.y < target.point.y) ? 'Bottom' : 'Top';\n update = true;\n }\n else if (source.point.x === target.point.x && source.point.y < target.point.y) {\n source.direction = 'Bottom';\n }\n else if (source.point.y > target.point.y && source.point.x > target.corners.left &&\n source.point.x < target.corners.right) {\n source.direction = 'Left';\n }\n else if (source.point.y >= target.point.y) {\n source.direction = 'Top';\n }\n else if (source.point.y < target.point.y && source.point.x > target.point.x) {\n source.direction = 'Left';\n }\n else if (source.point.y < target.point.y && source.point.x < target.point.x) {\n source.direction = 'Right';\n }\n break;\n case 'Bottom':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined && ((((portDir === 'Right') ||\n (portDir === 'Left' && target.point.x > source.point.x)) && (source.point.y > target.point.y) &&\n source.point.y >= source.corners.top && source.point.y <= source.corners.bottom) ||\n (((portDir === 'Top' && source.point.y < target.point.y)) &&\n (source.point.x >= source.corners.left && source.point.x <= source.corners.right)))) {\n if (portDir === 'Right' || portDir === 'Left') {\n source.direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n }\n else {\n source.direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n }\n update = true;\n }\n else if (source.point.y < target.point.y && source.point.x > target.corners.left &&\n target.corners.right > source.point.x) {\n if (source.point.y < target.point.y && source.point.x > target.corners.left &&\n target.corners.center.x >= source.point.x) {\n source.direction = 'Left';\n }\n else if (source.point.y < target.point.y && source.point.x < target.corners.right &&\n target.corners.center.x < source.point.x) {\n source.direction = 'Right';\n }\n }\n else if (source.point.y > target.point.y && source.point.x > target.point.x) {\n source.direction = 'Left';\n }\n else if (source.point.y > target.point.y && source.point.x < target.point.x) {\n source.direction = 'Right';\n }\n else if (source.point.y <= target.point.y && (source.point.x > target.point.x || target.point.x > source.point.x)) {\n source.direction = 'Bottom';\n }\n break;\n }\n return update;\n}\nfunction pointToPort(element, source, target) {\n var point;\n target.corners = element.targetWrapper.corners;\n var portdirection;\n var length;\n if (element.sourcePortWrapper !== undefined) {\n var port = { x: element.sourcePortWrapper.offsetX, y: element.sourcePortWrapper.offsetY };\n portdirection = getPortDirection(port, cornersPointsBeforeRotation(element.sourceWrapper), element.sourceWrapper.bounds, false);\n }\n var update = findSegmentDirection(element, source, target, portdirection);\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n target.direction === getOppositeDirection(portdirection) &&\n ((((target.direction === 'Left' && source.point.x > target.point.x) || (target.direction === 'Right' &&\n source.point.x < target.point.x)) && source.point.y >= source.corners.top &&\n source.point.y <= source.corners.bottom) || (target.direction === 'Bottom' && source.point.y < target.point.y &&\n (source.point.x >= source.corners.left && source.point.x <= source.corners.right)))) {\n point = addPoints(element, source, target);\n }\n else if (source.direction === target.direction) {\n point = orthoConnection3Segment(element, source, target);\n }\n else if ((((target.direction === 'Left' && source.point.x > target.point.x) ||\n (target.direction === 'Right' && source.point.x < target.point.x)) && (source.direction === 'Top' || source.direction === 'Bottom')\n && ((source.point.y <= target.point.y) &&\n ((target.corners.top <= source.point.y && target.corners.bottom >= source.point.y)))) ||\n ((target.direction === 'Top' && source.point.y > target.point.y) ||\n (target.direction === 'Bottom' && source.point.y < target.point.y) &&\n ((target.corners.left <= source.point.x && target.corners.right >= source.point.x)))) {\n point = addPoints(element, source, target);\n }\n else {\n if (element.sourceWrapper !== undefined && element.targetWrapper !== undefined && element.targetPortWrapper !== undefined &&\n ((source.direction === 'Left' || source.direction === 'Right') &&\n (source.point.y >= source.corners.top && source.point.y <= source.corners.bottom)\n && (target.direction === 'Top' || target.direction === 'Bottom') &&\n (target.corners.center.x === source.corners.center.x))) {\n source.direction = (target.direction === 'Top') ? 'Bottom' : 'Top';\n length = (target.direction === 'Top') ? (source.corners.bottom - source.point.y + 20) :\n (source.point.y - source.corners.top + 20);\n point = orthoConnection3Segment(element, source, target, length);\n }\n else if (element.sourceWrapper !== undefined && element.targetWrapper !== undefined && element.targetPortWrapper !== undefined &&\n ((source.direction === 'Top' || source.direction === 'Bottom') &&\n (source.point.x >= source.corners.left && source.point.x <= source.corners.right) &&\n (target.direction === 'Left' || target.direction === 'Right') && (target.corners.center.y === source.corners.center.y))) {\n source.direction = (target.direction === 'Left') ? 'Right' : 'Left';\n length = (target.direction === 'Left') ? (source.corners.right - source.point.x + 20) :\n (source.point.x - source.corners.left + 20);\n point = orthoConnection3Segment(element, source, target, length);\n }\n else if (update) {\n if (source.direction === 'Left' || source.direction === 'Right') {\n length = (source.direction === 'Left') ? (source.point.x - source.corners.left + 20) :\n (source.corners.right - source.point.x + 20);\n }\n else {\n length = (source.direction === 'Top') ? (source.point.y - source.corners.top + 20) :\n (source.corners.bottom - source.point.y + 20);\n }\n point = orthoConnection3Segment(element, source, target, length);\n }\n else {\n point = orthoConnection2Segment(source, target);\n }\n }\n return point;\n}\nfunction findPointToPointOrtho(element, source, target, sourceNode, targetNode, sourcePort, targetPort) {\n var j;\n var point;\n var intermeditatePoints = [];\n var direction;\n var port;\n var seg;\n checkLastSegmentasTerminal(element);\n var removeSegment;\n if (element.segments.length > 0) {\n for (var i = 0; i < element.segments.length; i++) {\n var seg_1 = element.segments[i];\n if (i === 0 && element.sourcePortWrapper !== undefined) {\n port = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n direction = getPortDirection(port, cornersPointsBeforeRotation(sourceNode), sourceNode.bounds, false);\n if (seg_1.direction === getOppositeDirection(direction)) {\n seg_1.direction = direction;\n }\n }\n if (i > 0 && element.segments[i - 1].direction === seg_1.direction) {\n i = checkConsectiveSegmentAsSame(element, i, source);\n }\n else {\n var lastSegment = element.segments[i - 1];\n source.point = (seg_1.direction) ? updateSegmentPoints(source, seg_1) :\n lastSegment.points[lastSegment.points.length - 1];\n }\n if (i === element.segments.length - 1) {\n if (!targetPort && !targetNode) {\n point = pointToPoint(element, source, target);\n }\n else if (element.targetWrapper && element.targetPortWrapper === undefined) {\n checkSourcePointInTarget(element, source);\n point = pointToNode(element, source, target);\n }\n else {\n point = pointToPort(element, source, target);\n }\n checkPreviousSegment(point, element, source);\n seg_1.points = [];\n if (point.length >= 2) {\n for (j = 0; j < point.length; j++) {\n seg_1.points.push(point[j]);\n }\n }\n else {\n removeSegment = i;\n }\n }\n if (sourcePort && i === 0) {\n var sourcePoint = checkPortdirection(element, sourcePort, sourceNode);\n if (sourcePoint) {\n source.point = sourcePoint;\n }\n }\n }\n if (removeSegment !== undefined) {\n if (removeSegment === element.segments.length - 1) {\n element.segments[removeSegment - 1].direction = null;\n element.segments[removeSegment - 1].length = null;\n }\n element.segments.splice(removeSegment, 1);\n }\n intermeditatePoints = returnIntermeditatePoints(element, intermeditatePoints);\n }\n return intermeditatePoints;\n}\nfunction checkPortdirection(element, sourcePort, sourceNode) {\n var port = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n var point;\n var bounds = cornersPointsBeforeRotation(sourceNode);\n var direction = getPortDirection(port, bounds, sourceNode.bounds, false);\n var seg = element.segments[0];\n if (seg.direction !== direction) {\n pointsFromNodeToPoint(seg, direction, bounds, seg.points[0], seg.points[seg.points.length - 1], false);\n point = seg.points[seg.points.length - 1];\n seg.direction = Point.direction(seg.points[seg.points.length - 2], seg.points[seg.points.length - 1]);\n }\n return point;\n}\nfunction checkPreviousSegment(tPoints, connector, source) {\n var actualSegment = connector.segments[connector.segments.length - 2];\n var actualLastPoint = actualSegment.points[actualSegment.points.length - 1];\n var direction;\n if (((actualSegment.direction === 'Top' || actualSegment.direction === 'Bottom') && (actualLastPoint.x === tPoints[1].x)) ||\n ((actualSegment.direction === 'Left' || actualSegment.direction === 'Right') && (actualLastPoint.y === tPoints[1].y))) {\n actualSegment.points[actualSegment.points.length - 1] = tPoints[1];\n direction = Point.direction(actualSegment.points[0], actualSegment.points[actualSegment.points.length - 1]);\n if (connector.sourceWrapper !== undefined && connector.sourcePortWrapper === undefined &&\n direction === getOppositeDirection(actualSegment.direction)) {\n if (actualSegment.direction === 'Left' || actualSegment.direction === 'Right') {\n actualSegment.points[0].x = (actualSegment.direction === 'Right') ?\n actualSegment.points[0].x - connector.sourceWrapper.corners.width :\n actualSegment.points[0].x + connector.sourceWrapper.corners.width;\n }\n else {\n actualSegment.points[0].y = (actualSegment.direction === 'Bottom') ?\n actualSegment.points[0].y - connector.sourceWrapper.corners.height :\n actualSegment.points[0].y + connector.sourceWrapper.corners.height;\n }\n }\n actualSegment.direction = direction;\n actualSegment.length = Point.distancePoints(actualSegment.points[0], actualSegment.points[actualSegment.points.length - 1]);\n tPoints.splice(0, 1);\n }\n}\nfunction connectToOneEnd(element, source, target) {\n var sourcePort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var node = element.sourceWrapper;\n var fixedPoint = source.point;\n var nodeMargin = { left: 0, right: 0, top: 0, bottom: 0 };\n var nodeConnectingPoint = { x: 0, y: 0 };\n var refPoint;\n var nodeDirection = 'Top';\n if (!node) {\n node = element.targetWrapper;\n nodeMargin = target.margin;\n }\n else {\n fixedPoint = target.point;\n nodeMargin = source.margin;\n }\n if (element.type === 'Orthogonal') {\n if ((element.segments && element.segments.length > 0) && element.sourceWrapper &&\n element.segments[0].direction) {\n source.direction = element.segments[0].direction;\n nodeConnectingPoint = findPoint(node.corners, source.direction);\n refPoint = findPoint(node.corners, getOppositeDirection(source.direction));\n nodeConnectingPoint = getIntersection(element, node, nodeConnectingPoint, refPoint, false);\n }\n else {\n var source_1 = { corners: null, direction: null, point: fixedPoint, margin: nodeMargin };\n var target_1 = { corners: null, direction: null, point: null, margin: null };\n findDirection(node, source_1, target_1, element);\n nodeConnectingPoint = target_1.point;\n nodeDirection = target_1.direction;\n }\n }\n else {\n var segmentPoint = void 0;\n if (element.segments && element.segments.length > 1) {\n if (node === element.sourceWrapper) {\n segmentPoint = element.segments[0].point;\n }\n else {\n segmentPoint = element.segments[element.segments.length - 2].point;\n }\n }\n nodeConnectingPoint = getIntersection(element, node, node.bounds.center, (element.segments && element.segments.length > 1) ? segmentPoint : fixedPoint, node === element.targetWrapper);\n }\n if (node === element.sourceWrapper) {\n source.direction = source.direction || nodeDirection;\n source.point = nodeConnectingPoint;\n if (element.sourcePortWrapper) {\n source.point = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n }\n }\n else {\n target.direction = target.direction || nodeDirection;\n target.point = nodeConnectingPoint;\n if (element.targetPortWrapper) {\n target.point = { x: targetPort.offsetX, y: targetPort.offsetY };\n }\n }\n}\nfunction checkSourceAndTargetIntersect(sourceWrapper, targetWrapper) {\n var sourceSegment = createSegmentsCollection(sourceWrapper);\n var targetSegment = createSegmentsCollection(targetWrapper);\n for (var i = 0; i < sourceSegment.length - 1; i++) {\n var srcSegment = sourceSegment[i];\n for (var j = 0; j < targetSegment.length - 1; j++) {\n var tarSegmet = targetSegment[j];\n if (intersect3(srcSegment, tarSegmet).enabled) {\n return true;\n }\n }\n }\n return false;\n}\nfunction createSegmentsCollection(sourceWrapper) {\n var segments = [];\n var points = getPoints(sourceWrapper, sourceWrapper.corners);\n points.push(points[0]);\n for (var i = 0; i < points.length - 1; i++) {\n segments.push(createLineSegment(points[i], points[i + 1]));\n }\n return segments;\n}\nfunction createLineSegment(sPt, tPt) {\n var line = { x1: sPt.x, y1: sPt.y, x2: tPt.x, y2: tPt.y };\n return line;\n}\n/** @private */\nexport function swapBounds(object, bounds, outerBounds) {\n var rectBounds;\n var rotateAngle = object.rotateAngle + object.parentTransform;\n if (rotateAngle) {\n if (rotateAngle < 45) {\n return bounds;\n }\n else if (rotateAngle <= 135) {\n rectBounds = {\n width: bounds.width, height: bounds.height,\n topLeft: bounds.bottomLeft, topCenter: bounds.middleLeft, topRight: bounds.topLeft,\n middleLeft: bounds.bottomCenter, center: outerBounds.center, middleRight: bounds.topCenter,\n bottomLeft: bounds.bottomRight, bottomCenter: bounds.middleRight, bottomRight: bounds.topRight,\n left: outerBounds.left, right: outerBounds.right, top: outerBounds.top, bottom: outerBounds.bottom\n };\n }\n else if (rotateAngle <= 225) {\n rectBounds = {\n width: bounds.width, height: bounds.height,\n topLeft: bounds.bottomLeft, topCenter: bounds.bottomCenter, topRight: bounds.bottomRight,\n middleLeft: bounds.middleRight, center: outerBounds.center, middleRight: bounds.middleLeft,\n bottomLeft: bounds.topLeft, bottomCenter: bounds.topCenter, bottomRight: bounds.topRight,\n left: outerBounds.left, right: outerBounds.right, top: outerBounds.top,\n bottom: outerBounds.bottom\n };\n }\n else if (rotateAngle <= 315) {\n rectBounds = {\n width: bounds.width, height: bounds.height,\n topLeft: bounds.topRight, topCenter: bounds.middleRight, topRight: bounds.bottomRight,\n middleLeft: bounds.topCenter, center: outerBounds.center, middleRight: bounds.bottomCenter,\n bottomLeft: bounds.topLeft, bottomCenter: bounds.middleLeft, bottomRight: bounds.bottomLeft,\n left: outerBounds.left, right: outerBounds.right, top: outerBounds.top, bottom: outerBounds.bottom\n };\n }\n else {\n return bounds;\n }\n return rectBounds;\n }\n return bounds;\n}\n/* tslint:disable */\nfunction defaultOrthoConnection(ele, srcDir, tarDir, sPt, tPt) {\n var sourceEle = ele.sourceWrapper;\n var targetEle = ele.targetWrapper;\n var srcPort = ele.sourcePortWrapper;\n var tarPort = ele.targetPortWrapper;\n var intermeditatePoints = [];\n var refPoint;\n var seg;\n var srcCor = sourceEle.corners;\n var tarCor = targetEle.corners;\n var point = tarCor.center;\n var i;\n var sourceMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var targetMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var source = { corners: srcCor, point: sPt, direction: srcDir, margin: sourceMargin };\n var target = { corners: tarCor, point: tPt, direction: tarDir, margin: targetMargin };\n var srcBounds = swapBounds(sourceEle, srcCor, ele.sourceWrapper.bounds);\n var tarBounds = swapBounds(targetEle, tarCor, ele.targetWrapper.bounds);\n var isInterSect = false;\n if (ele.sourceWrapper && ele.targetWrapper) {\n isInterSect = checkSourceAndTargetIntersect(ele.sourceWrapper, ele.targetWrapper);\n }\n if (srcPort !== undefined) {\n source.point = { x: srcPort.offsetX, y: srcPort.offsetY };\n switch (source.direction) {\n case 'Bottom':\n case 'Top':\n source.point.y = source.point.y;\n break;\n case 'Left':\n case 'Right':\n source.point.x = source.point.x;\n break;\n }\n }\n else {\n if (ele.type === 'Orthogonal') {\n if (ele.segments && ele.segments.length > 0 && ele.segments[0].direction) {\n source.direction = ele.segments[0].direction;\n }\n source.point = findPoint(srcBounds, source.direction);\n refPoint = findPoint(srcBounds, getOppositeDirection(source.direction));\n source.point = getIntersection(ele, sourceEle, source.point, refPoint, false);\n }\n else {\n source.point = sourceEle.corners.center;\n }\n }\n if (tarPort !== undefined) {\n target.point = {\n x: tarPort.offsetX,\n y: tarPort.offsetY\n };\n switch (target.direction) {\n case 'Bottom':\n case 'Top':\n target.point.y = target.point.y;\n break;\n case 'Left':\n case 'Right':\n target.point.x = target.point.x;\n break;\n }\n }\n else {\n if (ele.type === 'Orthogonal') {\n target.point = findPoint(tarBounds, target.direction);\n refPoint = findPoint(tarBounds, getOppositeDirection(target.direction));\n target.point = getIntersection(ele, targetEle, target.point, refPoint, true);\n }\n else {\n target.point = targetEle.corners.center;\n }\n }\n if (ele.type !== 'Orthogonal') {\n var segment = void 0;\n var first = void 0;\n checkLastSegmentasTerminal(ele);\n if (ele.sourcePortWrapper === undefined) {\n source.point = source.corners.center;\n if (ele.segments && ele.segments.length > 0) {\n first = ele.segments[0];\n segment = (!Point.isEmptyPoint(first.point)) ? first : undefined;\n }\n var tarPoint = (segment !== undefined) ? segment.point : target.point;\n if (ele.type === 'Bezier' && ele.segments.length > 0 &&\n ele.segments[0].vector1.angle && ele.segments[0].vector1.distance) {\n var value = Math.max(source.corners.width, source.corners.height);\n tarPoint = Point.transform(source.point, ele.segments[0].vector1.angle, value / 2);\n }\n source.point = isInterSect ? ele.sourceWrapper.bounds.center : getIntersection(ele, sourceEle, source.point, tarPoint, false);\n }\n if (ele.targetPortWrapper === undefined) {\n target.point = target.corners.center;\n if (ele.segments && ele.segments.length > 1) {\n first = ele.segments[ele.segments.length - 2];\n segment = (!Point.isEmptyPoint(first.point)) ? first : undefined;\n }\n var srcPoint = (segment) ? segment.point : source.point;\n if (ele.type === 'Bezier' && ele.segments.length > 0 &&\n ele.segments[ele.segments.length - 1].vector2.angle &&\n ele.segments[ele.segments.length - 1].vector2.distance) {\n var value = Math.max(source.corners.width, source.corners.height);\n srcPoint = Point.transform(target.point, ele.segments[0].vector2.angle, value / 2);\n }\n target.point = isInterSect ? ele.targetWrapper.bounds.center : getIntersection(ele, targetEle, srcPoint, target.point, true);\n }\n intermeditatePoints = intermeditatePointsForStraight(ele, source, target);\n }\n else {\n if (ele.type === 'Orthogonal' && (ele.segments && ele.segments.length > 0) &&\n ele.segments[0].direction !== null) {\n intermeditatePoints = findIntermeditatePoints(ele, source, target, srcPort, tarPort, sourceEle, targetEle);\n }\n else {\n if (!ele.segments[0]) {\n var segment = new OrthogonalSegment(ele, 'segments', { type: 'Orthogonal' }, true);\n ele.segments.push(segment);\n }\n ele.segments[0].points = intermeditatePoints = findOrthoSegments(ele, source, target);\n }\n }\n return intermeditatePoints;\n}\n/* tslint:enable */\nfunction intermeditatePointsForStraight(element, source, target) {\n var intermeditatePoints = [];\n if (element.segments && element.segments.length > 0) {\n var i = void 0;\n var segPoint = [];\n var srcPoint = source.point;\n for (i = 0; i < element.segments.length; i++) {\n var seg = element.segments[i];\n segPoint = [];\n segPoint.push(srcPoint);\n if (i !== element.segments.length - 1) {\n segPoint.push(seg.point);\n srcPoint = seg.point;\n }\n else {\n segPoint.push(target.point);\n }\n element.segments[i].points = segPoint;\n if (element.segments.length > 1 && Point.equals(seg.points[0], seg.points[1])) {\n (element.segments).splice(i, 1);\n }\n if (seg) {\n for (var j = 0; j < seg.points.length; j++) {\n if (j > 0 || i === 0) {\n intermeditatePoints.push(seg.points[j]);\n }\n }\n }\n }\n }\n return intermeditatePoints;\n}\nfunction findSourceDirection(dir, srcPoint, tarPoint) {\n var direction = (dir === 'Top' || dir === 'Bottom') ?\n ((tarPoint.x > srcPoint.x) ? 'Right' : 'Left') :\n ((tarPoint.y > srcPoint.y) ? 'Bottom' : 'Top');\n return direction;\n}\nfunction checkLastSegmentasTerminal(ele) {\n if (ele.type === 'Straight' || ele.type === 'Bezier') {\n if ((ele.segments.length === 0 || (ele.segments.length > 0 &&\n (!Point.isEmptyPoint(ele.segments[ele.segments.length - 1].point))))) {\n var segment = void 0;\n segment = (ele.type === 'Bezier') ? new BezierSegment(ele, 'segments', { type: 'Bezier' }, true) :\n new StraightSegment(ele, 'segments', { type: 'Straight' }, true);\n (ele.segments).push(segment);\n }\n }\n else {\n if (ele.segments.length === 0 || ele.segments[ele.segments.length - 1].direction) {\n var segment = new OrthogonalSegment(ele, 'segments', { type: 'Orthogonal' }, true);\n ele.segments.push(segment);\n }\n }\n}\nfunction checkConsectiveSegmentAsSame(ele, i, source) {\n var seg = ele.segments[i];\n var extra = (seg.direction === 'Left' || seg.direction === 'Top') ? -(seg.length) : seg.length;\n var angle = (seg.direction === 'Left' || seg.direction === 'Right') ? 0 : 90;\n var segPoint = addLineSegment(source.point, extra, angle);\n ele.segments[i - 1].length += seg.length;\n ele.segments[i - 1].points[1] = source.point = segPoint;\n ele.segments.splice(i, 1);\n i--;\n return i;\n}\nfunction nodeOrPortToNode(ele, source, target) {\n var point;\n var portdirection;\n if (ele.sourcePortWrapper) {\n var port = { x: ele.sourcePortWrapper.offsetX, y: ele.sourcePortWrapper.offsetY };\n portdirection = getPortDirection(port, cornersPointsBeforeRotation(ele.sourceWrapper), ele.sourceWrapper.bounds, false);\n }\n findDirection(ele.targetWrapper, source, target, ele);\n var direction = findSourceDirection(target.direction, source.point, target.point);\n if (ele.sourcePortWrapper !== undefined && source.direction === target.direction &&\n ((source.direction === 'Top' || source.direction === 'Bottom') && (source.corners.center.x === target.corners.center.x)\n || (source.direction === 'Left' || source.direction === 'Right') && (source.corners.center.y === target.corners.center.y))) {\n source.direction = direction;\n point = (direction === 'Top' || direction === 'Bottom') ?\n orthoConnection3Segment(ele, source, target, ele.sourceWrapper.height / 2 + 20) :\n orthoConnection3Segment(ele, source, target, ele.sourceWrapper.width / 2 + 20);\n var source1 = source;\n source1.point = point[1];\n if (direction === 'Left' || direction === 'Right') {\n target.direction = direction;\n target.point = (direction === 'Left') ? target.corners.middleLeft : target.corners.middleRight;\n }\n else {\n findDirection(ele.targetWrapper, source, target, ele);\n }\n point = orthoConnection3Segment(ele, source, target);\n }\n else if (target.point.x >= source.corners.left && target.point.x <= source.corners.right &&\n source.point.y >= source.corners.top && source.point.y <= source.corners.bottom) {\n source.direction = (target.point.y > source.point.y) ? 'Bottom' : 'Top';\n var length_2 = (source.direction === 'Top') ? (source.point.y - source.corners.top + 20) :\n (source.corners.bottom - source.point.y + 20);\n point = orthoConnection3Segment(ele, source, target, length_2);\n }\n else if (ele.sourcePortWrapper && portdirection === getOppositeDirection(direction)) {\n var length_3;\n if ((portdirection === 'Left' || portdirection === 'Right') && (source.point.y >= source.corners.top\n && source.point.y <= source.corners.bottom)) {\n source.direction = (target.point.y > source.point.y) ? 'Bottom' : 'Top';\n length_3 = source.corners.height / 2 + 20;\n }\n else if ((portdirection === 'Top' || portdirection === 'Bottom') && (source.point.x >= source.corners.left\n && source.point.x <= source.corners.right)) {\n source.direction = (target.point.x > source.point.x) ? 'Right' : 'Left';\n length_3 = source.corners.width / 2 + 20;\n }\n if (source.direction && length_3) {\n point = orthoConnection3Segment(ele, source, target, length_3, true);\n }\n else {\n source.direction = direction;\n point = orthoConnection2Segment(source, target);\n }\n }\n else if (ele.sourcePortWrapper && portdirection === target.direction && (portdirection === 'Top' || portdirection === 'Bottom') &&\n (source.corners.center.x === target.corners.center.x)) {\n source.direction = (target.point.y > source.point.y) ? 'Bottom' : 'Top';\n var len = (source.direction === 'Bottom') ? (source.corners.bottom - source.point.y + 20) :\n (source.point.y - source.corners.top + 20);\n point = orthoConnection3Segment(ele, source, target, len);\n }\n else {\n source.direction = direction;\n point = orthoConnection2Segment(source, target);\n }\n return point;\n}\nfunction checkSourcePointInTarget(ele, source) {\n if (ele.targetWrapper !== undefined && ele.targetPortWrapper === undefined) {\n if (cornersPointsBeforeRotation(ele.targetWrapper).containsPoint(source.point)) {\n var target = ele.targetWrapper;\n var segment = ele.segments[ele.segments.length - 2];\n var lastPoint = segment.points[segment.points.length - 1];\n var direction = getOppositeDirection(segment.direction);\n if (direction === 'Bottom') {\n if (lastPoint.y < target.corners.bottom) {\n segment.points[segment.points.length - 1].y = target.corners.bottom + 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n else if (direction === 'Top') {\n if (lastPoint.y > target.corners.top) {\n segment.points[segment.points.length - 1].y = target.corners.top - 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n else if (direction === 'Left') {\n if (lastPoint.x > target.corners.left) {\n segment.points[segment.points.length - 1].x = target.corners.left - 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n else if (direction === 'Right') {\n if (lastPoint.x < target.corners.right) {\n segment.points[segment.points.length - 1].x = target.corners.right + 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n source.point = segment.points[segment.points.length - 1];\n }\n }\n}\nfunction findIntermeditatePoints(ele, source, target, srcPort, tarPort, sourceEle, targetEle) {\n var point;\n var intermeditatePoints = [];\n var seg;\n var j;\n var removeSegment;\n checkLastSegmentasTerminal(ele);\n for (var i = 0; i < ele.segments.length; i++) {\n seg = ele.segments[i];\n if (srcPort && source.direction === getOppositeDirection(seg.direction)) {\n seg.direction = source.direction;\n }\n if (i > 0 && ele.segments[i - 1].direction === seg.direction) {\n i = checkConsectiveSegmentAsSame(ele, i, source);\n }\n else {\n if (seg.direction) {\n source.point = updateSegmentPoints(source, ele.segments[i]);\n }\n else {\n var segment = ele.segments[i - 1];\n source.point = segment.points[segment.points.length - 1];\n }\n }\n if (i === ele.segments.length - 1) {\n checkSourcePointInTarget(ele, source);\n if (tarPort === undefined) {\n point = nodeOrPortToNode(ele, source, target);\n }\n else {\n point = pointToPort(ele, source, target);\n }\n checkPreviousSegment(point, ele, source);\n seg.points = [];\n if (point.length >= 2) {\n for (j = 0; j < point.length; j++) {\n seg.points.push(point[j]);\n }\n }\n else {\n removeSegment = i;\n }\n }\n if (removeSegment !== undefined) {\n if (removeSegment === ele.segments.length - 1) {\n ele.segments[removeSegment - 1].direction = null;\n ele.segments[removeSegment - 1].length = null;\n }\n ele.segments.splice(removeSegment, 1);\n }\n if (srcPort && i === 0) {\n var sourcePoint = checkPortdirection(ele, srcPort, sourceEle);\n if (sourcePoint) {\n source.point = sourcePoint;\n }\n }\n }\n return returnIntermeditatePoints(ele, intermeditatePoints);\n}\nfunction returnIntermeditatePoints(element, intermeditatePoints) {\n for (var i = 0; i < element.segments.length; i++) {\n var seg = element.segments[i];\n for (var j = 0; j < seg.points.length; j++) {\n if (j > 0 || i === 0) {\n intermeditatePoints.push(seg.points[j]);\n }\n }\n }\n return intermeditatePoints;\n}\nfunction findDirection(node, source, target, ele) {\n var nodeDirection;\n var nodeConnectingPoint = { x: 0, y: 0 };\n var nodeCorners = swapBounds(node, node.corners, node.bounds);\n var nodeMargin = source.margin;\n var fixedPoint = source.point;\n if (nodeCorners.bottomCenter.y + nodeMargin.bottom < fixedPoint.y) {\n nodeDirection = 'Bottom';\n nodeConnectingPoint = nodeCorners.bottomCenter;\n }\n else if (nodeCorners.topCenter.y - nodeMargin.top > fixedPoint.y) {\n nodeDirection = 'Top';\n nodeConnectingPoint = nodeCorners.topCenter;\n }\n else if (nodeCorners.middleLeft.x - nodeMargin.left > fixedPoint.x) {\n nodeDirection = 'Left';\n nodeConnectingPoint = nodeCorners.middleLeft;\n }\n else if (nodeCorners.middleRight.x + nodeMargin.right < fixedPoint.x) {\n nodeDirection = 'Right';\n nodeConnectingPoint = nodeCorners.middleRight;\n }\n else {\n var top_1 = Math.abs(fixedPoint.y - nodeCorners.topCenter.y);\n var right = Math.abs(fixedPoint.x - nodeCorners.middleRight.x);\n var bottom = Math.abs(fixedPoint.y - nodeCorners.bottomCenter.y);\n var left = Math.abs(fixedPoint.x - nodeCorners.middleLeft.x);\n var shortes = Number.MAX_VALUE;\n shortes = top_1;\n nodeDirection = 'Top';\n nodeConnectingPoint = nodeCorners.topCenter;\n if (shortes > right) {\n shortes = right;\n nodeDirection = 'Right';\n nodeConnectingPoint = nodeCorners.middleRight;\n }\n if (shortes > bottom) {\n shortes = bottom;\n nodeDirection = 'Bottom';\n nodeConnectingPoint = nodeCorners.bottomCenter;\n }\n if (shortes > left) {\n //shortes = left;\n nodeDirection = 'Left';\n nodeConnectingPoint = nodeCorners.middleLeft;\n }\n }\n target.point = nodeConnectingPoint;\n target.direction = nodeDirection;\n var refPoint = findPoint(nodeCorners, getOppositeDirection(target.direction));\n target.point = getIntersection(ele, node, target.point, refPoint, node === ele.targetWrapper);\n}\nfunction findOrthoSegments(ele, source, target, extra) {\n var swap = false;\n var intermeditatePoints = [];\n var seg;\n swap = getSwapping(source.direction, target.direction);\n if (swap) {\n swapPoints(source, target);\n }\n if (source.direction === 'Right' && target.direction === 'Left') {\n seg = getRightToLeftSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Right' && target.direction === 'Right') {\n seg = getRightToRightSegmentCount(ele, source, target);\n }\n else if (source.direction === 'Right' && target.direction === 'Top') {\n seg = getRightToTopSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Right' && target.direction === 'Bottom') {\n seg = getRightToBottomSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Bottom' && target.direction === 'Top') {\n seg = getBottomToTopSegmentCount(source, target);\n }\n else if (source.direction === 'Bottom' && target.direction === 'Bottom') {\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n seg = getBottomToBottomSegmentCount(ele, source, target);\n }\n else if (source.direction === 'Bottom' && target.direction === 'Left') {\n seg = getBottomToLeftSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Left' && target.direction === 'Left') {\n seg = getLeftToLeftSegmentCount(ele, source, target);\n }\n else if (source.direction === 'Left' && target.direction === 'Top') {\n seg = getLeftToTopSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Top' && target.direction === 'Top') {\n seg = getTopToTopSegmentCount(ele, source, target);\n }\n if (swap) {\n swapPoints(source, target);\n }\n intermeditatePoints = addOrthoSegments(ele, seg, source, target, extra);\n return intermeditatePoints;\n}\n/** @private */\nexport function findAngle(s, e) {\n var r = { x: e.x, y: s.y };\n var sr = Point.findLength(s, r);\n var re = Point.findLength(r, e);\n var es = Point.findLength(e, s);\n var ang = Math.asin(re / es);\n ang = ang * 180 / Math.PI;\n if (s.x < e.x) {\n if (s.y > e.y) {\n ang = 360 - ang;\n }\n }\n else {\n if (s.y < e.y) {\n ang = 180 - ang;\n }\n else {\n ang = 180 + ang;\n }\n }\n return ang;\n}\n/** @private */\nexport function findPoint(cor, direction) {\n var point;\n switch (direction) {\n case 'Left':\n point = cor.middleLeft;\n break;\n case 'Top':\n point = cor.topCenter;\n break;\n case 'Right':\n point = cor.middleRight;\n break;\n case 'Bottom':\n point = cor.bottomCenter;\n break;\n }\n return point;\n}\nfunction pointsFromNodeToPoint(seg, direction, bounds, point, endPoint, isTarget) {\n var minSpace = 13;\n var x;\n var points = [];\n var y;\n points.push(point);\n var straight;\n straight = (point.y === endPoint.y && (direction === 'Left' && endPoint.x < point.x ||\n direction === 'Right' && endPoint.x > point.x)) ||\n (point.x === endPoint.x && (direction === 'Top' && endPoint.y < point.y ||\n direction === 'Bottom' && endPoint.y > point.y));\n if (!straight) {\n if (direction === 'Top' || direction === 'Bottom') {\n if (direction === 'Top' && endPoint.y < point.y && endPoint.y > point.y - minSpace ||\n direction === 'Bottom' && endPoint.y > point.y && endPoint.y < point.y + minSpace) {\n y = direction === 'Top' ? bounds.top - minSpace : bounds.bottom + minSpace;\n points.push({ x: point.x, y: y });\n points.push({ x: point.x + (endPoint.x - point.x) / 2, y: y });\n points.push({ x: point.x + (endPoint.x - point.x) / 2, y: endPoint.y });\n }\n else if (Math.abs(point.x - endPoint.x) > minSpace &&\n (direction === 'Top' && endPoint.y < point.y || direction === 'Bottom' && endPoint.y > point.y)) {\n //twosegments\n points.push({ x: point.x, y: endPoint.y });\n }\n else {\n y = direction === 'Top' ? bounds.top - minSpace : bounds.bottom + minSpace;\n x = (endPoint.x < point.x) ? bounds.left - minSpace : bounds.right + minSpace;\n points.push({ x: point.x, y: y });\n points.push({ x: endPoint.x, y: y });\n }\n }\n else {\n if (direction === 'Left' && endPoint.x < point.x && endPoint.x > point.x - minSpace || direction === 'right' &&\n endPoint.x > point.x && endPoint.x < point.x + minSpace) {\n x = direction === 'Left' ? bounds.left - minSpace : bounds.right + minSpace;\n points.push({ x: x, y: point.y });\n points.push({ x: x, y: point.y + (endPoint.y - point.y) / 2 });\n points.push({ x: endPoint.x, y: point.y + (endPoint.y - point.y) / 2 });\n }\n else if (Math.abs(point.y - endPoint.y) > minSpace &&\n (direction === 'Left' && endPoint.x < point.x || direction === 'Right' && endPoint.x > point.x)) {\n points.push({ x: endPoint.x, y: point.y });\n //twosegments\n }\n else {\n x = direction === 'Left' ? bounds.left - minSpace : bounds.right + minSpace;\n points.push({ x: x, y: point.y });\n points.push({ x: x, y: endPoint.y });\n }\n }\n if (isTarget) {\n points.push(seg.points[0]);\n points.reverse();\n }\n seg.points = points;\n }\n}\nfunction addLineSegment(point, extra, angle) {\n var segEnd = Point.transform(point, angle, extra);\n return segEnd;\n}\n/** @private */\nexport function getIntersection(ele, bounds, sPt, tPt, isTar) {\n sPt = { x: sPt.x, y: sPt.y };\n tPt = { x: tPt.x, y: tPt.y };\n var angle = Point.findAngle(tPt, sPt);\n var child;\n var intersection;\n var wrapper = isTar ? ele.targetWrapper : ele.sourceWrapper;\n var segmentPoints;\n var point = isTar || ele.type === 'Orthogonal' ? sPt : tPt;\n var sourcePoint = Point.transform(sPt, angle, Math.max(wrapper.actualSize.height / 2, wrapper.actualSize.width / 2));\n child = wrapper;\n var sPt1 = rotatePoint(-wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY, sPt);\n var tPt1 = rotatePoint(-wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY, tPt);\n if (ele.type === 'Orthogonal') {\n var constValue = 5;\n if (sPt1.x === tPt1.x) {\n if (sPt1.y < tPt1.y) {\n sPt1.y -= constValue;\n }\n else {\n sPt1.y += constValue;\n }\n }\n if (sPt1.y === tPt1.y) {\n if (sPt1.x < tPt1.x) {\n sPt1.x -= constValue;\n }\n else {\n sPt1.x += constValue;\n }\n }\n sPt = rotatePoint(wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY, sPt1);\n }\n else {\n var angle_1 = isTar ? Point.findAngle(sPt, tPt) : Point.findAngle(tPt, sPt);\n if (isTar) {\n var angle_2 = Point.findAngle(sPt, tPt);\n tPt = Point.transform({ x: tPt.x, y: tPt.y }, angle_2, Math.max(wrapper.actualSize.width, wrapper.actualSize.height));\n }\n else {\n var angle_3 = Point.findAngle(tPt, sPt);\n sPt = Point.transform({ x: sPt.x, y: sPt.y }, angle_3, Math.max(wrapper.actualSize.width, wrapper.actualSize.height));\n }\n }\n if (wrapper instanceof PathElement && wrapper.data) {\n segmentPoints = child.getPoints();\n if (((child.data.split('m').length - 1) + (child.data.split('M').length - 1)) === 1) {\n segmentPoints[segmentPoints.length] = segmentPoints[0];\n }\n }\n else {\n segmentPoints = getPoints(wrapper, wrapper.corners);\n segmentPoints[segmentPoints.length] = segmentPoints[0];\n }\n var length = segmentPoints.length;\n var thisSegment = { x1: sPt.x, y1: sPt.y, x2: tPt.x, y2: tPt.y };\n return getIntersectionPoints(thisSegment, segmentPoints, true, point) || sPt;\n}\nfunction setLineEndPoint(element, point, isTarget) {\n point.x = Math.round(point.x * 100) / 100;\n point.y = Math.round(point.y * 100) / 100;\n if (isTarget) {\n element.targetPoint = point;\n }\n else {\n element.sourcePoint = point;\n }\n return point;\n}\n/** @private */\nexport function getIntersectionPoints(thisSegment, pts, minimal, point) {\n var length = pts.length;\n var min;\n var segment = {\n x1: pts[0].x, y1: pts[0].y, x2: pts[1].x,\n y2: pts[1].y\n };\n var intersection = intersectSegment(thisSegment, segment);\n if (intersection) {\n // if (!minimal) { return intersection; } //commented because minimal is always true\n min = Point.distancePoints(intersection, point);\n }\n if (isNaN(min) || min > 0) {\n for (var i = 1; i < length - 1; i++) {\n segment = {\n x1: pts[i].x, y1: pts[i].y,\n x2: pts[i + 1].x, y2: pts[i + 1].y\n };\n var intersect = intersectSegment(thisSegment, segment);\n if (intersect) {\n // if (!minimal) { return intersect; }//commented because minimal is always true\n var dist = Point.distancePoints(intersect, point);\n if (isNaN(min) || min > dist) {\n min = dist;\n intersection = intersect;\n }\n if (min >= 0 && min <= 1) {\n break;\n }\n }\n }\n }\n return intersection;\n}\nfunction intersectSegment(segment1, segment2) {\n var x1 = segment1.x1;\n var y1 = segment1.y1;\n var x2 = segment1.x2;\n var y2 = segment1.y2;\n var x3 = segment2.x1;\n var y3 = segment2.y1;\n var x4 = segment2.x2;\n var y4 = segment2.y2;\n var a1;\n var a2;\n var b1;\n var b2;\n var c1;\n var c2;\n var x;\n var y;\n var r1;\n var r2;\n var r3;\n var r4;\n var denom;\n var offset;\n var num;\n a1 = y2 - y1;\n b1 = x1 - x2;\n c1 = (x2 * y1) - (x1 * y2);\n r3 = ((a1 * x3) + (b1 * y3) + c1);\n r4 = ((a1 * x4) + (b1 * y4) + c1);\n if ((r3 !== 0) && (r4 !== 0) && sameSign(r3, r4)) {\n return null;\n }\n a2 = y4 - y3;\n b2 = x3 - x4;\n c2 = (x4 * y3) - (x3 * y4);\n r1 = (a2 * x1) + (b2 * y1) + c2;\n r2 = (a2 * x2) + (b2 * y2) + c2;\n if ((r1 !== 0) && (r2 !== 0) && (sameSign(r1, r2))) {\n return null;\n }\n denom = (a1 * b2) - (a2 * b1);\n if (denom === 0) {\n return null;\n }\n if (denom < 0) {\n offset = -denom / 2;\n }\n else {\n offset = denom / 2;\n }\n offset = 0;\n num = (b1 * c2) - (b2 * c1);\n if (num < 0) {\n x = (num - offset) / denom;\n }\n else {\n x = (num + offset) / denom;\n }\n num = (a2 * c1) - (a1 * c2);\n if (num < 0) {\n y = (num - offset) / denom;\n }\n else {\n y = (num + offset) / denom;\n }\n return { x: x, y: y };\n}\nfunction sameSign(a, b) {\n return ((a * b) >= 0);\n}\nfunction getRightToLeftSegmentCount(element, source, target, swap) {\n var srcPort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var pts;\n var diffY = Math.round(Math.abs(source.point.y - target.point.y));\n var diffX = Math.round(Math.abs(source.point.x - target.point.x));\n var right = { x: Math.max(source.point.x, source.corners.right), y: source.point.y };\n var left = { x: Math.min(target.point.x, target.corners.left), y: target.point.y };\n var margin = 10;\n if (swap) {\n var point = void 0;\n point = left;\n left = right;\n right = point;\n }\n if (!(source.corners.bottom + margin < target.corners.top - margin ||\n source.corners.top - margin > target.corners.bottom + margin)) {\n margin = 0;\n }\n source.margin = { left: margin, right: margin, top: margin, bottom: margin };\n target.margin = { left: margin, right: margin, top: margin, bottom: margin };\n if (diffY === 0 && (source.corners.right < target.corners.left\n || (swap && source.corners.right < target.corners.left))) {\n pts = NoOfSegments.One;\n }\n else if (source.point.x + source.margin.right < target.point.x - target.margin.left) {\n pts = NoOfSegments.Three;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (cornersPointsBeforeRotation(element.sourceWrapper).containsPoint(left) ||\n cornersPointsBeforeRotation(element.targetWrapper).containsPoint(right))) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottom <= target.corners.top) {\n pts = NoOfSegments.Five;\n }\n else if (source.corners.top >= target.corners.top) {\n pts = NoOfSegments.Five;\n }\n else if ((srcPort !== undefined && srcPort.offsetY <= target.corners.top) ||\n (srcPort === undefined && source.corners.right <= target.corners.top)) {\n pts = NoOfSegments.Five;\n }\n else if ((srcPort !== undefined && srcPort.offsetY >= target.corners.bottom) ||\n (srcPort === undefined && source.corners.right >= target.corners.bottom)) {\n pts = NoOfSegments.Five;\n }\n else {\n pts = NoOfSegments.Five;\n }\n return pts;\n}\nfunction getRightToRightSegmentCount(element, sourceObj, targetObj) {\n var sourcePort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var pts;\n var diffX = sourceObj.point.x - targetObj.point.x;\n var diffY = sourceObj.point.y - targetObj.point.y;\n targetObj.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n sourceObj.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n if (sourceObj.corners.right >= targetObj.corners.right) {\n if ((sourcePort !== undefined && (sourcePort.offsetY < targetObj.corners.top ||\n sourcePort.offsetY > targetObj.corners.bottom)) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y < targetObj.corners.top)) {\n pts = NoOfSegments.Three;\n }\n else if ((sourcePort !== undefined && sourcePort.offsetY > targetObj.corners.bottom + targetObj.margin.bottom\n && sourceObj.corners.top > targetObj.corners.bottom) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y > targetObj.corners.bottom)) {\n pts = NoOfSegments.Three;\n }\n else if ((sourcePort !== undefined && sourcePort.offsetY < targetObj.corners.top\n && sourceObj.corners.bottom > targetObj.corners.top) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y > targetObj.corners.bottom)) {\n pts = NoOfSegments.Three;\n }\n else if (sourceObj.corners.right < targetObj.corners.left ||\n targetObj.corners.right < sourceObj.corners.left) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((tarPort !== undefined && sourceObj.corners.bottom < tarPort.offsetY) ||\n (tarPort === undefined && sourceObj.corners.bottom < targetObj.corners.middleRight.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && sourceObj.corners.top > tarPort.offsetY) ||\n (tarPort === undefined && sourceObj.corners.top > targetObj.corners.middleRight.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && ((sourcePort !== undefined && sourcePort.offsetX < targetObj.corners.left &&\n sourcePort.offsetX !== tarPort.offsetX && sourcePort.offsetY !== tarPort.offsetY &&\n (Math.abs(sourceObj.corners.right - targetObj.corners.left) <= 20)) ||\n (sourcePort === undefined && sourceObj.corners.right < targetObj.corners.left &&\n sourceObj.corners.center.x !== targetObj.corners.center.x && sourceObj.corners.center.y !== targetObj.corners.center.y)))) {\n pts = NoOfSegments.Three;\n }\n else if (sourceObj.corners.right < targetObj.corners.left) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction getRightToTopSegmentCount(element, source, target, swap) {\n var tarPort = element.targetPortWrapper;\n var srcPort = element.sourcePortWrapper;\n var right = { x: Math.max(source.point.x, source.corners.right), y: source.point.y };\n var top = { x: target.point.x, y: Math.min(target.point.y, target.corners.top) };\n var pts;\n target.margin = { left: 5, right: 5, top: 5, bottom: 5 };\n source.margin = { top: 5, bottom: 5, left: 5, right: 5 };\n if (swap) {\n var port = void 0;\n port = srcPort;\n srcPort = tarPort;\n tarPort = port;\n }\n if ((srcPort !== undefined && srcPort.offsetY < target.corners.top - target.margin.top) ||\n (srcPort === undefined && source.corners.bottom < target.corners.top - target.margin.top)) {\n if (source.corners.bottom < target.corners.top) {\n if ((tarPort !== undefined && source.corners.right + source.margin.right < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.right + source.margin.right < target.corners.topCenter.x)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.left > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.left > target.corners.topCenter.x)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (srcPort !== undefined && Math.abs(source.corners.right - target.corners.left) <= 25 &&\n Math.abs(srcPort.offsetY - target.corners.top) <= 25) {\n pts = NoOfSegments.Two;\n }\n else if (tarPort !== undefined && Math.abs(tarPort.offsetX - source.corners.topCenter.x) >= 25 &&\n source.corners.middleRight.y < tarPort.offsetY) {\n pts = NoOfSegments.Two;\n }\n else if (source.corners.right < target.corners.left) {\n pts = NoOfSegments.Four;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (cornersPointsBeforeRotation(element.sourceWrapper).containsPoint(top) ||\n cornersPointsBeforeRotation(element.targetWrapper).containsPoint(right))) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getRightToBottomSegmentCount(element, source, target, swap) {\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n var pts;\n var srcPort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var right = { x: Math.max(source.point.x, source.corners.right), y: source.point.y };\n var bottom = { x: target.point.x, y: Math.max(target.point.y, target.corners.bottom) };\n if (swap) {\n var port = void 0;\n port = srcPort;\n srcPort = tarPort;\n tarPort = port;\n }\n if ((srcPort !== undefined && srcPort.offsetY > target.corners.bottom + target.margin.bottom) ||\n (srcPort === undefined && source.corners.middleRight.y > target.corners.bottom + target.margin.bottom)) {\n if (source.corners.top > target.corners.bottom) {\n if ((tarPort !== undefined && source.corners.right + source.margin.right < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.right + source.margin.right < target.corners.bottomCenter.x)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.left > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.left > target.corners.bottomCenter.x)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (srcPort !== undefined &&\n Math.abs(source.corners.right - target.corners.left) <= 25 &&\n Math.abs(srcPort.offsetY - target.corners.bottom) <= 25) {\n pts = NoOfSegments.Two;\n }\n else if (source.corners.right < target.corners.left) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getBottomToTopSegmentCount(source, target) {\n var pts;\n var diffX = source.point.x - target.point.x;\n var diffY = source.point.y - target.point.y;\n var bottom = { x: source.point.x, y: Math.max(source.point.y, source.corners.bottom) };\n var top = { x: target.point.x, y: Math.min(target.point.y, target.corners.top) };\n var margin = 10;\n if (!(source.corners.right + margin < target.corners.left - margin ||\n source.corners.left - margin > target.corners.right + margin)) {\n margin = 0;\n }\n source.margin = { left: margin, right: margin, top: margin, bottom: margin };\n target.margin = { left: margin, right: margin, top: margin, bottom: margin };\n if (diffX === 0 && source.corners.bottom < target.corners.top) {\n pts = NoOfSegments.One;\n }\n else if (source.corners.bottom + source.margin.bottom < target.corners.top - target.margin.top) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.right + source.margin.right < target.corners.left - target.margin.left) {\n pts = NoOfSegments.Five;\n }\n else if (source.corners.left - source.margin.left > target.corners.right + target.margin.right) {\n pts = NoOfSegments.Five;\n }\n else {\n pts = NoOfSegments.Five;\n }\n return pts;\n}\nfunction getBottomToLeftSegmentCount(element, source, target, swap) {\n var srcPort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var bottom = { x: source.point.x, y: Math.max(source.point.y, source.corners.bottom) };\n var left = { x: Math.min(target.point.x, target.corners.left), y: target.point.y };\n var pts;\n if (swap) {\n var port = void 0;\n port = srcPort;\n srcPort = tarPort;\n tarPort = port;\n }\n if ((srcPort !== undefined && srcPort.offsetX < target.corners.left - target.margin.left) ||\n (srcPort === undefined && source.corners.bottomCenter.x < target.corners.bottomLeft.x - target.margin.left)) {\n if (source.corners.right < target.corners.left) {\n if ((tarPort !== undefined && source.corners.bottom + source.margin.bottom < tarPort.offsetY) ||\n (tarPort === undefined && source.corners.bottom + source.margin.bottom < target.corners.middleLeft.y)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.top > tarPort.offsetY) ||\n (tarPort === undefined && source.corners.top > target.corners.middleLeft.y)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (tarPort !== undefined &&\n Math.abs(source.corners.right - target.corners.left) <= 25 &&\n Math.abs(tarPort.offsetY - source.corners.bottom) <= 25) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getBottomToBottomSegmentCount(element, source, target) {\n var srcPort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var difX = Math.round(Math.abs(source.point.x - target.point.x));\n var diffY = Math.round(Math.abs(target.point.y - target.point.y));\n var pts;\n if (source.corners.bottom < target.corners.bottom) {\n if ((srcPort !== undefined && srcPort.offsetX < target.corners.left - target.margin.left) ||\n (srcPort === undefined && source.corners.bottomCenter.x < target.corners.left - target.margin.left)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetX > target.corners.right + target.margin.right) ||\n (srcPort === undefined && source.corners.bottomCenter.x > target.corners.right + target.margin.right)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottom < target.corners.top) {\n pts = NoOfSegments.Five;\n }\n else if (difX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((tarPort !== undefined && source.corners.left > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.left > target.corners.left)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && source.corners.right < tarPort.offsetX) ||\n (tarPort === undefined &&\n source.corners.right < target.corners.right)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.top > target.corners.bottom) {\n pts = NoOfSegments.Five;\n }\n else if (difX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction getLeftToTopSegmentCount(element, source, target, swap) {\n var pts;\n var sourcePort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var left = { x: Math.min(source.point.x, source.corners.left), y: source.point.y };\n var top = { x: target.point.x, y: Math.min(target.point.y, target.corners.top) };\n if (swap) {\n var port = void 0;\n port = sourcePort;\n sourcePort = tarPort;\n tarPort = port;\n }\n if ((sourcePort !== undefined && sourcePort.offsetY < target.corners.top - target.margin.top) ||\n (sourcePort === undefined && (source.corners.bottom < target.corners.top - target.margin.top ||\n source.corners.middleLeft.y < target.corners.top - target.margin.top))) {\n if (source.corners.bottom < target.corners.top) {\n if ((tarPort !== undefined && source.corners.left - source.margin.left > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.left - source.margin.left > target.corners.topCenter.x)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.right < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.right < target.corners.topCenter.x)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (sourcePort !== undefined &&\n Math.abs(source.corners.left - target.corners.right) <= 25 &&\n Math.abs(sourcePort.offsetY - target.corners.top) <= 25) {\n pts = NoOfSegments.Two;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (cornersPointsBeforeRotation(element.sourceWrapper).containsPoint(top) ||\n cornersPointsBeforeRotation(element.targetWrapper).containsPoint(left))) {\n pts = NoOfSegments.Two;\n }\n else if (source.corners.left > target.corners.right) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getLeftToLeftSegmentCount(element, source, target) {\n var srcPort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n var diffX = Math.round(Math.abs(source.point.x - target.point.x));\n var diffY = Math.round(Math.abs(source.point.y - target.point.y));\n var pts;\n if (source.corners.left < target.corners.left) {\n if ((targetPort !== undefined && source.corners.bottom + source.margin.bottom < targetPort.offsetY) ||\n (targetPort === undefined && source.corners.bottom + source.margin.bottom < target.corners.middleLeft.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((targetPort !== undefined && source.corners.top - source.margin.top > targetPort.offsetY) ||\n (targetPort === undefined && source.corners.top - source.margin.top > target.corners.middleLeft.y)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.right < target.corners.left ||\n target.corners.right < source.corners.left) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((srcPort !== undefined && srcPort.offsetY < target.corners.top - target.margin.top) ||\n (srcPort === undefined && source.corners.middleLeft.y < target.corners.top)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetY > target.corners.bottom + target.margin.bottom) ||\n (srcPort === undefined && source.corners.middleLeft.y > target.corners.bottom + target.margin.bottom)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.left > target.corners.right) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction getTopToTopSegmentCount(element, source, target) {\n var srcPort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var diffX = Math.round(Math.abs(source.point.x - target.point.x));\n var diffY = Math.round(Math.abs(source.point.y - target.point.y));\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n var pts;\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n if (source.corners.top < target.corners.top) {\n if ((targetPort !== undefined && source.corners.left > targetPort.offsetX) ||\n (targetPort === undefined && source.corners.left > target.corners.left)) {\n pts = NoOfSegments.Three;\n }\n else if ((targetPort !== undefined && source.corners.right < targetPort.offsetX) ||\n (targetPort === undefined && source.corners.right < target.corners.right)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottom < target.corners.top) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((srcPort !== undefined && srcPort.offsetX > target.corners.right) ||\n (srcPort === undefined && source.corners.left > target.corners.right)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetX < target.corners.left) ||\n (srcPort === undefined && source.corners.bottomRight.x < target.corners.left)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.top > target.corners.bottom) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction addOrthoSegments(element, seg, source, target, segLength) {\n var src = element.sourceWrapper;\n var tar = element.targetWrapper;\n var tarPort = element.targetPortWrapper;\n var intermeditatePoints;\n var srcCorner = src.corners;\n var tarCorner = tar.corners;\n var extra = 20;\n if (source.direction !== target.direction || seg === NoOfSegments.Five) {\n if (source.direction === getOppositeDirection(target.direction) || seg === NoOfSegments.Three) {\n switch (source.direction) {\n case 'Left':\n if (srcCorner.middleLeft.x > tarCorner.middleRight.x) {\n extra = Math.min(extra, (srcCorner.middleLeft.x - tarCorner.middleRight.x) / 2);\n }\n break;\n case 'Right':\n if (srcCorner.middleRight.x < tarCorner.middleLeft.x) {\n extra = Math.min(extra, (tarCorner.middleLeft.x - srcCorner.middleRight.x) / 2);\n }\n break;\n case 'Top':\n if (srcCorner.topCenter.y > tarCorner.bottomCenter.y) {\n extra = Math.min(extra, (srcCorner.topCenter.y - tarCorner.bottomCenter.y) / 2);\n }\n break;\n case 'Bottom':\n if (srcCorner.bottomCenter.y < tarCorner.topCenter.y) {\n extra = Math.min(extra, (tarCorner.topCenter.y - srcCorner.bottomCenter.y) / 2);\n }\n break;\n }\n }\n }\n extra = adjustSegmentLength(srcCorner, source, extra);\n if (segLength) {\n extra = Math.max(extra, segLength);\n }\n if (seg === NoOfSegments.One) {\n intermeditatePoints = [source.point, target.point];\n }\n if (seg === NoOfSegments.Two) {\n intermeditatePoints = orthoConnection2Segment(source, target);\n }\n if (seg === NoOfSegments.Three) {\n intermeditatePoints = orthoConnection3Segment(element, source, target, extra);\n }\n if (seg === NoOfSegments.Four) {\n var prevDir = undefined;\n intermeditatePoints = orthoConnection4Segment(source, target, prevDir, intermeditatePoints, extra);\n }\n if (seg === NoOfSegments.Five) {\n intermeditatePoints = orthoConnection5Segment(source, target, extra);\n }\n return intermeditatePoints;\n}\nfunction adjustSegmentLength(bounds, source, extra) {\n switch (source.direction) {\n case 'Left':\n if (source.point.x > bounds.left) {\n extra = (source.point.x - bounds.left) > extra ? ((source.point.x - bounds.left) + extra) : extra;\n }\n break;\n case 'Right':\n if (source.point.x < bounds.right) {\n extra = (bounds.right - source.point.x) > extra ? ((bounds.right - source.point.x) + extra) : extra;\n }\n break;\n case 'Top':\n if (source.point.y > bounds.top) {\n extra = (source.point.y - bounds.top) > extra ? ((source.point.y - bounds.top) + extra) : extra;\n }\n break;\n case 'Bottom':\n if (source.point.y < bounds.bottom) {\n extra = (bounds.bottom - source.point.y) > extra ? ((bounds.bottom - source.point.y) + extra) : extra;\n }\n break;\n }\n return extra;\n}\n/** @private */\nexport function orthoConnection2Segment(source, target) {\n var intermeditatePoints;\n switch (source.direction) {\n case 'Left':\n case 'Right':\n var point1 = { x: target.point.x, y: source.point.y };\n intermeditatePoints = (Point.equals(source.point, point1) || Point.equals(target.point, point1)) ?\n [source.point, target.point] : [source.point, point1, target.point];\n break;\n case 'Top':\n case 'Bottom':\n var point2 = { x: source.point.x, y: target.point.y };\n intermeditatePoints = (Point.equals(source.point, point2) || Point.equals(target.point, point2)) ?\n [source.point, target.point] : [source.point, point2, target.point];\n break;\n }\n return intermeditatePoints;\n}\nfunction orthoConnection3Segment(element, source, target, extra, allow) {\n if (!extra) {\n extra = 20;\n }\n var srcPort = element.sourcePortWrapper;\n var intermeditatePoints;\n var segmentValue;\n var next;\n var diffx = target.point.x - source.point.x;\n var diffy = target.point.y - source.point.y;\n var temp;\n if (!allow && (Math.abs(diffx) < 0.001 || Math.abs(diffy) < 0.001)) {\n if (target.direction === undefined) {\n intermeditatePoints = [source.point, target.point];\n return intermeditatePoints;\n }\n }\n if (element.targetWrapper === undefined && Math.abs(diffx) <= 31 && Math.abs(diffy) <= 31) {\n if ((source.direction === 'Left' || source.direction === 'Right')) {\n if (Math.abs(diffy) < 12) {\n source.direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n }\n }\n else {\n if (Math.abs(diffx) < 12) {\n source.direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n }\n }\n if (Math.abs(diffx) > 12 || Math.abs(diffy) > 12) {\n return orthoConnection2Segment(source, target);\n }\n else {\n extra += 5;\n }\n }\n if (source.direction === 'Left' || source.direction === 'Right') {\n if (source.direction === 'Right') {\n if (target.direction !== undefined && target.direction === 'Right') {\n extra = Math.max(source.point.x, target.point.x) - source.point.x + extra;\n }\n if (source.point.x > target.point.x && srcPort === undefined) {\n extra = -extra;\n }\n }\n else {\n if (target.direction !== undefined && target.direction === 'Left') {\n extra = source.point.x - Math.min(source.point.x, target.point.x) + extra;\n }\n if (source.point.x > target.point.x || srcPort !== undefined || source.direction === 'Left') {\n extra = -extra;\n }\n }\n temp = target.point.y - source.point.y;\n segmentValue = addLineSegment(source.point, extra, 0);\n temp = target.point.y - segmentValue.y;\n if (temp !== 0) {\n next = addLineSegment(segmentValue, target.point.y - segmentValue.y, 90);\n }\n }\n else if (source.direction === 'Top' || source.direction === 'Bottom') {\n if (source.direction === 'Bottom') {\n if (target.direction !== undefined && target.direction === 'Bottom') {\n extra = Math.max(source.point.y, target.point.y) - source.point.y + extra;\n }\n }\n else {\n if (target.direction !== undefined && target.direction === 'Top') {\n extra = source.point.y - Math.min(source.point.y, target.point.y) + extra;\n }\n if (source.point.y > target.point.y || (srcPort !== undefined) || source.direction === 'Top') {\n extra = -extra;\n }\n }\n temp = target.point.x - source.point.x;\n if (source.direction === 'Top') {\n segmentValue = addLineSegment(source.point, extra, 90);\n }\n else {\n segmentValue = addLineSegment(source.point, extra, 90);\n }\n temp = target.point.x - segmentValue.x;\n if (temp !== 0) {\n next = addLineSegment(segmentValue, target.point.x - segmentValue.x, 0);\n }\n }\n if (temp === 0) {\n return intermeditatePoints = [\n source.point,\n target.point\n ];\n }\n intermeditatePoints = [\n source.point,\n segmentValue,\n next,\n target.point\n ];\n return intermeditatePoints;\n}\nfunction orthoConnection5Segment(source, target, extra) {\n if (extra === void 0) { extra = 20; }\n var intermeditatePoints;\n var length = extra;\n var sLeft = source.corners.left - source.margin.left;\n var sRight = source.corners.right + source.margin.right;\n var sBottom = source.corners.bottom + source.margin.bottom;\n var sTop = source.corners.top - source.margin.top;\n var tLeft = target.corners.left - target.margin.left;\n var tRight = target.corners.right + target.margin.right;\n var tBottom = target.corners.bottom + target.margin.bottom;\n var tTop = target.corners.top - target.margin.top;\n var segmentValue;\n switch (source.direction) {\n case 'Left':\n if ((sTop > tTop && sTop < tBottom || sBottom < tBottom && sBottom > tTop) &&\n sLeft > tLeft && sLeft <= tRight && extra >= 20) {\n length = source.point.x - target.corners.left + length;\n }\n segmentValue = addLineSegment(source.point, length, 180);\n break;\n case 'Top':\n if ((sLeft > tLeft && sLeft < tRight || sRight < tRight && sRight > tLeft) &&\n sTop > tTop && sTop <= tBottom && extra >= 20) {\n length = source.point.y - target.corners.top + length;\n }\n segmentValue = addLineSegment(source.point, length, 270);\n break;\n case 'Right':\n if ((sTop > tTop && sTop < tBottom || sBottom < tBottom && sBottom > tTop) &&\n sRight < tRight && sRight >= tLeft && extra >= 20) {\n length = target.corners.right - source.point.x + length;\n }\n segmentValue = addLineSegment(source.point, length, 0);\n break;\n case 'Bottom':\n if ((sLeft > tLeft && sLeft < tRight || sRight < tRight && sRight > tLeft) &&\n sBottom < tBottom && sBottom >= tTop && extra >= 20) {\n length = target.corners.bottom - source.point.y + length;\n }\n segmentValue = addLineSegment(source.point, length, 90);\n break;\n }\n intermeditatePoints = [\n source.point,\n segmentValue\n ];\n if (source.direction === 'Top' || source.direction === 'Bottom') {\n var prevDir = source.direction;\n source.direction = segmentValue.x > target.point.x ? 'Left' : 'Right';\n source.point = segmentValue;\n intermeditatePoints = orthoConnection4Segment(source, target, prevDir, intermeditatePoints);\n }\n else {\n var prevDir = source.direction;\n source.direction = segmentValue.y > target.point.y ? 'Top' : 'Bottom';\n source.point = segmentValue;\n intermeditatePoints = orthoConnection4Segment(source, target, prevDir, intermeditatePoints);\n }\n return intermeditatePoints;\n}\nfunction orthoConnection4Segment(source, target, prevDir, interPt, e) {\n if (e === void 0) { e = 20; }\n var segmentValue;\n if (prevDir === undefined) {\n source.margin = { left: 2, right: 2, top: 2, bottom: 2 };\n target.margin = { left: 0, right: 5, top: 0, bottom: 5 };\n }\n else {\n if (source.direction === 'Bottom') {\n if (target.corners.top > source.corners.bottom && target.corners.top - source.corners.bottom < 20) {\n e = (target.corners.top - source.corners.bottom) / 2;\n }\n }\n else if (source.direction === 'Top') {\n if (target.corners.bottom < source.corners.top && source.corners.top - target.corners.bottom < 20) {\n e = (source.corners.top - target.corners.bottom) / 2;\n }\n }\n else if (source.direction === 'Right') {\n if (target.corners.left > source.corners.right && target.corners.left - source.corners.right < 20) {\n e = (target.corners.left - source.corners.right) / 2;\n }\n }\n else if (source.direction === 'Left') {\n if (target.corners.right < source.corners.left && source.corners.left - target.corners.right < 20) {\n e = (source.corners.left - target.corners.right) / 2;\n }\n }\n }\n switch (source.direction) {\n case 'Left':\n e = getLeftLength(source, target, prevDir, e);\n segmentValue = addLineSegment(source.point, e, 180);\n break;\n case 'Right':\n e = getRightLength(source, target, e, prevDir);\n segmentValue = addLineSegment(source.point, e, 0);\n break;\n case 'Top':\n e = getTopLength(source, target, prevDir, e);\n segmentValue = addLineSegment(source.point, e, 270);\n break;\n case 'Bottom':\n e = getBottomLength(source, target, e, prevDir);\n segmentValue = addLineSegment(source.point, e, 90);\n }\n if (interPt !== undefined) {\n interPt.push(segmentValue);\n }\n else {\n interPt = [\n source.point,\n segmentValue\n ];\n }\n if (source.direction === 'Top' || source.direction === 'Bottom') {\n getOrtho3Seg(segmentValue, 'horizontal', source, target, interPt);\n }\n else if (source.direction === 'Right' || source.direction === 'Left') {\n getOrtho3Seg(segmentValue, 'vertical', source, target, interPt);\n }\n return interPt;\n}\nfunction getOrtho3Seg(sPt, orientation, src, tar, points) {\n var point1;\n var point2;\n var point3;\n if (orientation === 'horizontal') {\n src.margin = { left: 0, right: 10, top: 0, bottom: 10 };\n tar.margin = { left: 0, right: 10, top: 0, bottom: 10 };\n }\n else if (orientation === 'vertical') {\n src.margin = { left: 10, right: 0, top: 10, bottom: 0 };\n tar.margin = { left: 10, right: 0, top: 10, bottom: 0 };\n }\n var extra = 20;\n if (orientation === 'horizontal') {\n switch (tar.direction) {\n case 'Left':\n if (src.corners.right + src.margin.right < tar.corners.left - tar.margin.left &&\n (tar.corners.left - src.corners.right > extra || (src.corners.top - src.margin.top <= tar.point.y &&\n src.corners.bottom + src.margin.bottom >= tar.point.y))) {\n var gap = Math.min(Math.abs(tar.corners.left - src.corners.right) / 2, 20);\n extra = src.corners.right - sPt.x + gap;\n }\n else {\n if ((src.direction === 'Top' && sPt.y > tar.point.y) || (src.direction === 'Bottom' && sPt.y < tar.point.y)) {\n extra = Math.min(tar.corners.left, sPt.x) - sPt.x - 20;\n }\n else if (sPt.x >= src.corners.left - src.margin.left && sPt.x <= src.corners.right + src.margin.right) {\n extra = Math.min(tar.corners.left, src.corners.left) - sPt.x - 20;\n }\n else {\n extra = tar.corners.left - sPt.x - 20;\n }\n }\n break;\n case 'Right':\n if (src.corners.left - src.margin.left > tar.corners.right + tar.margin.right &&\n (src.corners.left - tar.corners.right > extra || (src.corners.top - src.margin.top <= tar.point.y &&\n src.corners.bottom + src.margin.bottom >= tar.point.y))) {\n var gap = Math.min(Math.abs(src.corners.left - tar.corners.right) / 2, 20);\n extra = src.corners.left - sPt.x - gap;\n }\n else {\n if ((src.direction === 'Top' && sPt.y > tar.point.y) || (src.direction === 'Bottom' && sPt.y < tar.point.y)) {\n extra = Math.max(tar.corners.right, sPt.x) - sPt.x + 20;\n }\n else if (sPt.x >= src.corners.left - src.margin.left && sPt.x <= src.corners.right + src.margin.right) {\n extra = Math.max(tar.corners.right, src.corners.right) - sPt.x + 20;\n }\n else {\n extra = tar.corners.right - sPt.x + 20;\n }\n }\n break;\n }\n point1 = addLineSegment(sPt, extra, 0);\n point2 = addLineSegment(point1, tar.point.y - sPt.y, 90);\n point3 = tar.point;\n }\n else if (orientation === 'vertical') {\n switch (tar.direction) {\n case 'Top':\n if (src.corners.bottom + src.margin.bottom < tar.corners.top - tar.margin.top &&\n (tar.corners.top - src.corners.bottom > extra || (src.corners.left - src.margin.left <= tar.point.x &&\n src.corners.right + src.margin.right >= tar.point.x))) {\n var gap = Math.min(Math.abs(tar.corners.top - src.corners.bottom) / 2, 20);\n extra = src.corners.bottom - sPt.y + gap;\n }\n else {\n if ((src.direction === 'Left' && sPt.x > tar.point.x) || (src.direction === 'Right' && sPt.x < tar.point.x)) {\n extra = Math.min(tar.corners.top, sPt.y) - sPt.y - 20;\n }\n else if (sPt.y >= src.corners.top - src.margin.top && sPt.y <= src.corners.bottom + src.margin.bottom) {\n extra = Math.min(tar.corners.top, src.corners.top) - sPt.y - 20;\n }\n else {\n extra = tar.corners.top - sPt.y - 20;\n }\n }\n break;\n case 'Bottom':\n if (src.corners.top - src.margin.top > tar.corners.bottom + tar.margin.bottom &&\n (src.corners.top - tar.corners.bottom > extra || (src.corners.left - src.margin.left <= tar.point.x &&\n src.corners.right + src.margin.right >= tar.point.x))) {\n var gap = Math.min(Math.abs(src.corners.top - tar.corners.bottom) / 2, 20);\n extra = src.corners.top - sPt.y - gap;\n }\n else {\n if ((src.direction === 'Left' && sPt.x > tar.point.x) || (src.direction === 'Right' && sPt.x < tar.point.x)) {\n extra = Math.max(tar.corners.bottom, sPt.y) - sPt.y + 20;\n }\n else if (sPt.y >= src.corners.top - src.margin.top && sPt.y <= src.corners.bottom + src.margin.bottom) {\n extra = Math.max(tar.corners.bottom, src.corners.bottom) - sPt.y + 20;\n }\n else {\n extra = tar.corners.bottom - sPt.y + 20;\n }\n }\n break;\n }\n point1 = addLineSegment(sPt, extra, 90);\n point2 = addLineSegment(point1, tar.point.x - sPt.x, 0);\n point3 = tar.point;\n }\n points.push(point1);\n points.push(point2);\n points.push(point3);\n}\nfunction getTopLength(source, target, preDir, length) {\n if (source.corners.top - source.margin.top > target.corners.top + target.margin.top &&\n source.corners.top - source.margin.top <= target.corners.bottom + target.margin.bottom) {\n if (target.direction === 'Right' && source.point.x < target.point.x) {\n length += source.corners.top - target.corners.top;\n }\n else if (target.direction === 'Left' && source.point.x > target.point.x) {\n length += source.corners.top - target.corners.top;\n }\n length += source.point.y - source.corners.top;\n }\n else {\n if ((preDir !== undefined && preDir !== 'Left') && target.direction === 'Right' && source.point.x < target.point.x) {\n length += Math.abs(source.point.y - target.corners.bottom);\n }\n else if ((preDir !== undefined && preDir !== 'Right') && target.direction === 'Left'\n && target.point.x < source.point.x) {\n length += Math.abs(source.point.y - target.corners.bottom);\n }\n else {\n length += source.point.y - source.corners.top;\n }\n }\n return length;\n}\nfunction getLeftLength(source, target, prevDir, segLength) {\n if (source.corners.left - source.margin.left > target.corners.left - target.margin.left &&\n source.corners.left - source.margin.left <= target.corners.right + target.margin.right) {\n if (target.direction === 'Bottom' && source.point.y < target.point.y) {\n segLength += source.corners.left - target.corners.left;\n }\n else if (target.direction === 'Top' && source.point.y > target.point.y) {\n segLength += source.corners.left - target.corners.left;\n }\n segLength += source.point.x - source.corners.left;\n }\n else {\n if ((prevDir !== undefined && prevDir !== 'Top') && target.direction === 'Bottom' && source.point.y < target.point.y) {\n segLength += Math.abs(source.point.x - target.corners.right);\n }\n else if ((prevDir !== undefined && prevDir !== 'Bottom') &&\n target.direction === 'Top' && target.point.y < source.point.y) {\n segLength += Math.abs(source.point.x - target.corners.right);\n }\n else {\n segLength += source.point.x - source.corners.left;\n }\n }\n return segLength;\n}\nfunction getRightLength(source, target, length, prevDir) {\n if (source.corners.right + source.margin.right < target.corners.right + target.margin.right &&\n source.corners.right + source.margin.right >= target.corners.left - target.margin.left) {\n if (target.direction === 'Bottom' && source.point.y < target.point.y) {\n length += target.corners.right - source.corners.right;\n }\n else if (target.direction === 'Top' && source.point.y > target.point.y) {\n length += target.corners.right - source.corners.right;\n }\n length += source.corners.right - source.point.x;\n }\n else {\n if ((prevDir !== undefined && prevDir !== 'Top') && target.direction === 'Bottom' && source.point.y < target.point.y) {\n length += Math.abs(source.point.x - target.corners.right);\n }\n else if ((prevDir !== undefined && prevDir !== 'Bottom') && target.direction === 'Top' && target.point.y < source.point.y) {\n length += Math.abs(source.point.x - target.corners.right);\n }\n else {\n length += source.corners.right - source.point.x;\n }\n }\n return length;\n}\nfunction getBottomLength(source, target, segLength, prevDir) {\n if (source.corners.bottom + source.margin.bottom < target.corners.bottom + target.margin.bottom &&\n source.corners.bottom + source.margin.bottom >= target.corners.top - target.margin.top) {\n if (target.direction === 'Right' && source.point.x < target.point.x) {\n segLength += target.corners.bottom - source.corners.bottom;\n }\n else if (target.direction === 'Left' && source.point.x > target.point.x) {\n segLength += target.corners.bottom - source.corners.bottom;\n }\n segLength += source.corners.bottom - source.point.y;\n }\n else {\n if ((prevDir !== undefined && prevDir !== 'Left') &&\n target.direction === 'Right' && source.point.x < target.point.x) {\n segLength += Math.abs(source.point.y - target.corners.bottom);\n }\n else if ((prevDir !== undefined && prevDir !== 'Right') &&\n target.direction === 'Left' && target.point.x < source.point.x) {\n segLength += Math.abs(source.point.y - target.corners.bottom);\n }\n else {\n segLength += source.corners.bottom - source.point.y;\n }\n }\n return segLength;\n}\nfunction getSwapping(srcDir, tarDir) {\n var swap = false;\n switch (srcDir) {\n case 'Left':\n switch (tarDir) {\n case 'Right':\n case 'Bottom':\n swap = true;\n break;\n }\n break;\n case 'Top':\n switch (tarDir) {\n case 'Left':\n case 'Right':\n case 'Bottom':\n swap = true;\n break;\n }\n break;\n case 'Bottom':\n switch (tarDir) {\n case 'Right':\n swap = true;\n break;\n }\n break;\n }\n return swap;\n}\nfunction swapPoints(source, target) {\n var direction = source.direction;\n source.direction = target.direction;\n target.direction = direction;\n var point = source.point;\n source.point = target.point;\n target.point = point;\n var corner = source.corners;\n source.corners = target.corners;\n target.corners = corner;\n}\nexport function getPortDirection(point, corner, bounds, closeEdge) {\n var direction;\n var boundsValue = corner === undefined ? bounds : corner;\n var one = boundsValue.topLeft;\n var two = boundsValue.topRight;\n var three = boundsValue.bottomRight;\n var four = boundsValue.bottomLeft;\n var center = boundsValue.center;\n var angle = findAngle(center, point);\n var fourty5 = findAngle(center, three);\n var one35 = findAngle(center, four);\n var two25 = findAngle(center, one);\n var three15 = findAngle(center, two);\n if (angle > two25 && angle < three15) {\n direction = 'Top';\n // if (bounds.width < bounds.height && closeEdge) {\n // let height: number = (bounds.height - bounds.width) / 2;\n // let width: number = bounds.width;\n // if (Math.abs(point.x - one.x) < Math.abs(point.x - two.x)) {\n // direction = checkCloseEdge(direction, new Rect(one.x, one.y, width, height), point, 'Left');\n // } else {\n // direction = checkCloseEdge(direction, new Rect(two.x - bounds.width, two.y, width, height), point, 'Right');\n // }\n // }\n }\n else if (angle >= fourty5 && angle < one35) {\n direction = 'Bottom';\n // if (bounds.width < bounds.height && closeEdge) {\n // let height: number = (bounds.height - bounds.width) / 2;\n // let width: number = bounds.width;\n // if (Math.abs(point.x - four.x) < Math.abs(point.x - three.x)) {\n // direction = checkCloseEdge(direction, new Rect(four.x, four.y - height, width, height), point, 'Left');\n // } else {\n // let value: Rect = new Rect(three.x - bounds.width, three.y - bounds.height / 4, bounds.width, bounds.height / 4);\n // direction = checkCloseEdge(direction, value, point, 'Right');\n // }\n // }\n }\n else if (angle >= one35 && angle <= two25) {\n direction = 'Left';\n // if (bounds.width > bounds.height && closeEdge) {\n // let width: number = (bounds.width - bounds.height) / 2;\n // let height: number = bounds.height;\n // if (Math.abs(point.y - one.y) < Math.abs(point.y - four.y)) {\n // direction = checkCloseEdge(direction, new Rect(one.x, one.y, width, height), point, 'Top');\n // } else {\n // direction = checkCloseEdge(direction, new Rect(four.x, four.y - height, width, height), point, 'Bottom');\n // }\n // }\n }\n else if (angle >= three15 || angle < fourty5) {\n direction = 'Right';\n // if (bounds.width > bounds.height && closeEdge) {\n // let width: number = (bounds.width - bounds.height) / 2;\n // let height: number = bounds.height;\n // if (Math.abs(point.y - two.y) < Math.abs(point.y - three.y)) {\n // direction = checkCloseEdge(direction, new Rect(two.x - width, two.y, width, height), point, 'Top');\n // } else {\n // direction = checkCloseEdge(direction, \n //new Rect(three.x - width, three.y - height, width, height), point, 'Bottom');\n // }\n // }\n }\n else {\n direction = 'Right';\n }\n return direction;\n}\n// function checkCloseEdge(direction: string, threshold: Rect, port: PointModel, nearest: string): string {\n// if (threshold) {\n// switch (direction) {\n// case 'Bottom':\n// case 'Top':\n// let left: number = Math.abs(threshold.left - port.x);\n// let right: number = Math.abs(threshold.right - port.x);\n// let ver: number = direction === 'Top' ? Math.abs(threshold.top - port.y) : Math.abs(threshold.bottom - port.y);\n// if (left < right) {\n// if (left < ver) {\n// return 'Left';\n// }\n// } else {\n// if (right < ver) {\n// return 'Right';\n// }\n// }\n// break;\n// case 'Left':\n// case 'Right':\n// let top: number = Math.abs(threshold.top - port.y);\n// let bottom: number = Math.abs(threshold.bottom - port.y);\n// let hor: number = direction === 'Left' ? Math.abs(threshold.left - port.x) : Math.abs(threshold.right - port.x);\n// if (top < bottom) {\n// if (top < hor) {\n// return 'Top';\n// }\n// } else {\n// if (bottom < hor) {\n// return 'Bottom';\n// }\n// }\n// break;\n// }\n// }\n//Meant for dock port\n// return direction;\n// }\n/** @private */\nexport function getOuterBounds(obj) {\n var outerBounds;\n outerBounds = obj.wrapper.children[0].bounds;\n if (obj.sourceDecorator.shape !== 'None') {\n outerBounds.uniteRect(obj.wrapper.children[1].bounds);\n }\n if (obj.targetDecorator.shape !== 'None') {\n outerBounds.uniteRect(obj.wrapper.children[2].bounds);\n }\n return outerBounds;\n}\nexport function getOppositeDirection(direction) {\n switch (direction) {\n case 'Top':\n return 'Bottom';\n case 'Bottom':\n return 'Top';\n case 'Left':\n return 'Right';\n case 'Right':\n return 'Left';\n }\n return 'auto';\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};\n/// \nimport { Property, Complex, Collection, ChildProperty, ComplexFactory, CollectionFactory } from '@syncfusion/ej2-base';\nimport { ShapeStyle, StrokeStyle } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { TextElement } from '../core/elements/text-element';\nimport { Transform, ConnectorConstraints } from '../enum/enum';\nimport { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { findAngle, findConnectorPoints, getOuterBounds } from '../utility/connector';\nimport { getAnnotationPosition, alignLabelOnSegments, updateConnector } from '../utility/diagram-util';\nimport { randomId, getFunction } from './../utility/base-util';\nimport { PathElement } from '../core/elements/path-element';\nimport { PathAnnotation } from './annotation';\nimport { Canvas } from '../core/containers/canvas';\nimport { getDecoratorShape } from './dictionary/common';\nimport { NodeBase } from './node-base';\nimport { DiagramTooltip } from './tooltip';\nimport { identityMatrix, rotateMatrix, scaleMatrix, transformPointsByMatrix } from '../primitives/matrix';\nvar getConnectorType = function (obj) {\n switch (obj.type) {\n case 'Bpmn':\n return BpmnFlow;\n default:\n return ConnectorShape;\n }\n};\nvar getSegmentType = function (obj) {\n switch (obj.type) {\n case 'Straight':\n return StraightSegment;\n case 'Bezier':\n return BezierSegment;\n case 'Orthogonal':\n return OrthogonalSegment;\n default:\n return StraightSegment;\n }\n};\n/**\n * Decorators are used to decorate the end points of the connector with some predefined path geometry\n */\nvar Decorator = /** @class */ (function (_super) {\n __extends(Decorator, _super);\n function Decorator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Decorator.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], Decorator.prototype, \"height\", void 0);\n __decorate([\n Property('Arrow')\n ], Decorator.prototype, \"shape\", void 0);\n __decorate([\n Complex({ fill: 'black', strokeColor: 'black', strokeWidth: 1 }, ShapeStyle)\n ], Decorator.prototype, \"style\", void 0);\n __decorate([\n Complex({ x: 0, y: 0.5 }, Point)\n ], Decorator.prototype, \"pivot\", void 0);\n __decorate([\n Property('')\n ], Decorator.prototype, \"pathData\", void 0);\n return Decorator;\n}(ChildProperty));\nexport { Decorator };\n/**\n * Describes the length and angle between the control point and the start point of bezier segment\n */\nvar Vector = /** @class */ (function (_super) {\n __extends(Vector, _super);\n function Vector() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Vector.prototype, \"angle\", void 0);\n __decorate([\n Property(0)\n ], Vector.prototype, \"distance\", void 0);\n return Vector;\n}(ChildProperty));\nexport { Vector };\n/**\n * Sets the type of the connector\n */\nvar ConnectorShape = /** @class */ (function (_super) {\n __extends(ConnectorShape, _super);\n function ConnectorShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], ConnectorShape.prototype, \"type\", void 0);\n return ConnectorShape;\n}(ChildProperty));\nexport { ConnectorShape };\n/**\n * Sets the type of the flow in a BPMN Process\n */\nvar BpmnFlow = /** @class */ (function (_super) {\n __extends(BpmnFlow, _super);\n function BpmnFlow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Sequence')\n ], BpmnFlow.prototype, \"flow\", void 0);\n __decorate([\n Property('Normal')\n ], BpmnFlow.prototype, \"sequence\", void 0);\n __decorate([\n Property('Default')\n ], BpmnFlow.prototype, \"message\", void 0);\n __decorate([\n Property('Default')\n ], BpmnFlow.prototype, \"association\", void 0);\n return BpmnFlow;\n}(ConnectorShape));\nexport { BpmnFlow };\n/**\n * Defines the behavior of connector segments\n */\nvar ConnectorSegment = /** @class */ (function (_super) {\n __extends(ConnectorSegment, _super);\n // tslint:disable-next-line:no-any\n function ConnectorSegment(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n _this.points = [];\n return _this;\n }\n __decorate([\n Property('Straight')\n ], ConnectorSegment.prototype, \"type\", void 0);\n return ConnectorSegment;\n}(ChildProperty));\nexport { ConnectorSegment };\n/**\n * Defines the behavior of straight segments\n */\nvar StraightSegment = /** @class */ (function (_super) {\n __extends(StraightSegment, _super);\n function StraightSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], StraightSegment.prototype, \"point\", void 0);\n return StraightSegment;\n}(ConnectorSegment));\nexport { StraightSegment };\n/**\n * Defines the behavior of bezier segments\n */\nvar BezierSegment = /** @class */ (function (_super) {\n __extends(BezierSegment, _super);\n function BezierSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], BezierSegment.prototype, \"point1\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], BezierSegment.prototype, \"point2\", void 0);\n __decorate([\n Complex({ angle: 0, distance: 0 }, Vector)\n ], BezierSegment.prototype, \"vector1\", void 0);\n __decorate([\n Complex({ angle: 0, distance: 0 }, Vector)\n ], BezierSegment.prototype, \"vector2\", void 0);\n return BezierSegment;\n}(StraightSegment));\nexport { BezierSegment };\n/**\n * Defines the behavior of orthogonal segments\n */\nvar OrthogonalSegment = /** @class */ (function (_super) {\n __extends(OrthogonalSegment, _super);\n function OrthogonalSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], OrthogonalSegment.prototype, \"length\", void 0);\n __decorate([\n Property(null)\n ], OrthogonalSegment.prototype, \"direction\", void 0);\n return OrthogonalSegment;\n}(ConnectorSegment));\nexport { OrthogonalSegment };\n/**\n * Get the direction of the control points while the bezier is connected to the node\n */\nexport function getDirection(bounds, points, excludeBounds) {\n var center = bounds.center;\n var direction;\n var part = excludeBounds ? 45 : (180 / (2 + 2 / (bounds.height / bounds.width)));\n var fourty5 = part;\n var one35 = (180 - part);\n var two25 = one35 + (2 * part);\n var three15 = 360 - part;\n var angle = findAngle(points, center);\n if (angle > fourty5 && angle < one35) {\n return direction = 'top';\n }\n else if (angle > one35 && angle < two25) {\n return direction = 'right';\n }\n else if (angle > two25 && angle < three15) {\n return direction = 'bottom';\n }\n else {\n return direction = 'left';\n }\n}\nexport function isEmptyVector(element) {\n if (!element.distance && !element.angle) {\n return true;\n }\n return false;\n}\n/**\n * Get the bezier points if control points are not given.\n */\nexport function getBezierPoints(sourcePoint, targetPoint, direction) {\n var distance = 60;\n var value = { x: 0, y: 0 };\n if (!direction) {\n if (Math.abs(targetPoint.x - sourcePoint.x) > Math.abs(targetPoint.y - sourcePoint.y)) {\n direction = sourcePoint.x < targetPoint.x ? 'right' : 'left';\n }\n else {\n direction = sourcePoint.y < targetPoint.y ? 'bottom' : 'top';\n }\n }\n switch (direction) {\n case 'bottom':\n case 'top':\n distance = Math.min(Math.abs(sourcePoint.y - targetPoint.y) * 0.45, distance);\n value = { x: sourcePoint.x, y: sourcePoint.y + (direction === 'bottom' ? distance : -distance) };\n break;\n case 'right':\n case 'left':\n distance = Math.min(Math.abs(sourcePoint.x - targetPoint.x) * 0.45, distance);\n value = { x: sourcePoint.x + (direction === 'right' ? distance : -distance), y: sourcePoint.y };\n break;\n }\n return value;\n}\n/**\n * Get the bezier curve bounds.\n */\nexport function getBezierBounds(startPoint, controlPoint1, controlPoint2, endPoint, connector) {\n var minx = 0;\n var miny = 0;\n var maxx = 0;\n var maxy = 0;\n var tolerancevalue = 3;\n var max = Number((connector.distance(controlPoint1, startPoint) +\n connector.distance(controlPoint2, controlPoint1) +\n connector.distance(endPoint, controlPoint2)) / tolerancevalue);\n if (max !== 0) {\n for (var i = 0; i <= max; i++) {\n var t = i / max;\n var x = (1 - t) * (1 - t) * (1 - t) * startPoint.x +\n 3 * t * (1 - t) * (1 - t) * controlPoint1.x +\n 3 * t * t * (1 - t) * controlPoint2.x +\n t * t * t * endPoint.x;\n var y = (1 - t) * (1 - t) * (1 - t) * startPoint.y +\n 3 * t * (1 - t) * (1 - t) * controlPoint1.y +\n 3 * t * t * (1 - t) * controlPoint2.y +\n t * t * t * endPoint.y;\n if (i === 0) {\n minx = maxx = x;\n miny = maxy = y;\n }\n else {\n minx = Math.min(x, minx);\n miny = Math.min(y, miny);\n maxx = Math.max(x, maxx);\n maxy = Math.max(y, maxy);\n }\n }\n }\n return {\n x: minx, y: miny, width: maxx - minx, height: maxy - miny,\n left: minx, top: miny, right: (minx + (maxx - minx)), bottom: (miny + (maxy - miny)),\n center: { x: (minx + (maxx - minx)) / 2, y: (miny + (maxy - miny)) / 2 },\n };\n}\n/**\n * Get the intermediate bezier curve for point over connector\n */\nexport function bezierPoints(connector, startPoint, point1, point2, endPoint, i, max) {\n var pt = { x: 0, y: 0 };\n var t = i / max;\n var x = (1 - t) * (1 - t) * (1 - t) * startPoint.x +\n 3 * t * (1 - t) * (1 - t) * point1.x +\n 3 * t * t * (1 - t) * point2.x +\n t * t * t * endPoint.x;\n pt.x = x;\n var y = (1 - t) * (1 - t) * (1 - t) * startPoint.y +\n 3 * t * (1 - t) * (1 - t) * point1.y +\n 3 * t * t * (1 - t) * point2.y +\n t * t * t * endPoint.y;\n pt.y = y;\n return pt;\n}\n/**\n * Connectors are used to create links between nodes\n */\nvar Connector = /** @class */ (function (_super) {\n __extends(Connector, _super);\n // tslint:disable-next-line:no-any\n function Connector(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n /** @private */\n _this.parentId = '';\n /** @private */\n _this.bridges = [];\n return _this;\n }\n /** @private */\n // tslint:disable-next-line:no-any\n Connector.prototype.init = function (diagram) {\n if (!this.id) {\n this.id = randomId();\n }\n var bpmnElement;\n var container = new Canvas();\n var segment = new PathElement();\n segment.id = this.id + '_path';\n var srcDecorator = new PathElement();\n var targetDecorator = new PathElement();\n segment = this.getSegmentElement(this, segment);\n var bounds;\n var points = [];\n points = this.getConnectorPoints(this.type);\n points = this.clipDecorators(this, points);\n bounds = Rect.toBounds(points);\n container.width = bounds.width;\n container.height = bounds.height;\n container.offsetX = bounds.x + container.pivot.x * bounds.width;\n container.offsetY = bounds.y + container.pivot.y * bounds.height;\n switch (this.shape.type) {\n case 'Bpmn':\n switch (this.shape.flow) {\n case 'Sequence':\n bpmnElement = this.getBpmnSequenceFlow();\n break;\n case 'Association':\n bpmnElement = new PathElement();\n bpmnElement.visible = false;\n this.getBpmnAssociationFlow();\n break;\n case 'Message':\n bpmnElement = this.getBpmnMessageFlow();\n segment = this.getSegmentElement(this, segment);\n this.updateShapePosition(this, bpmnElement);\n break;\n }\n break;\n }\n var anglePoints = this.intermediatePoints;\n if (this.type === 'Bezier') {\n var firstSegment = this.segments[0];\n var lastSegment = this.segments[this.segments.length - 1];\n anglePoints = [!Point.isEmptyPoint(lastSegment.point2) ? lastSegment.point2 : lastSegment.bezierPoint2,\n !Point.isEmptyPoint(firstSegment.point1) ? firstSegment.point1 : firstSegment.bezierPoint1];\n }\n var accessContent = 'getDescription';\n var getDescription = diagram[accessContent];\n var strokeWidth = this.sourceWrapper ? this.sourceWrapper.style.strokeWidth / 2 / 2 : 0;\n srcDecorator = this.getDecoratorElement(points[0], anglePoints[1], this.sourceDecorator, true, getDescription);\n targetDecorator = this.getDecoratorElement(points[points.length - 1], anglePoints[anglePoints.length - 2], this.targetDecorator, false, getDescription);\n srcDecorator.id = this.id + '_srcDec';\n targetDecorator.id = this.id + '_tarDec';\n segment.style = this.style;\n /* tslint:disable:no-string-literal */\n segment.style['fill'] = 'transparent';\n if (getDescription !== undefined) {\n // tslint:disable-next-line:no-any\n var wrapperContent = getDescription(this, diagram);\n segment.description = wrapperContent ? wrapperContent : this.id;\n }\n container.style.strokeColor = 'transparent';\n container.style.fill = 'transparent';\n container.style.strokeWidth = 0;\n container.children = [segment, srcDecorator, targetDecorator];\n container.id = this.id;\n if (bpmnElement !== undefined) {\n container.children.push(bpmnElement);\n }\n container.offsetX = segment.offsetX;\n container.offsetY = segment.offsetY;\n container.width = segment.width;\n container.height = segment.height;\n for (var i = 0; this.annotations !== undefined, i < this.annotations.length; i++) {\n container.children.push(this.getAnnotationElement(this.annotations[i], this.intermediatePoints, bounds, getDescription));\n }\n this.wrapper = container;\n return container;\n };\n Connector.prototype.getBpmnSequenceFlow = function () {\n var segment = new PathElement();\n var pathseq = new PathElement();\n var pathseqData;\n if ((this.shape.sequence) === 'Normal' && this.type !== 'Bezier') {\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n }\n if ((this.shape.sequence) === 'Default') {\n segment = this.getSegmentElement(this, segment);\n var anglePoints = this.intermediatePoints;\n for (var j = 0; j < anglePoints.length - 1; j++) {\n length = length + this.distance(anglePoints[j], anglePoints[j + 1]);\n pathseqData = this.findPath(anglePoints[j], anglePoints[j + 1]);\n pathseq.data = pathseqData[0];\n pathseq.id = this.id + '_' + (this.shape.sequence);\n pathseq.offsetX = pathseqData[1].x;\n pathseq.offsetY = pathseqData[1].y;\n pathseq.rotateAngle = 45;\n pathseq.transform = Transform.Self;\n }\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n }\n if ((this.shape.sequence) === 'Conditional') {\n this.targetDecorator.shape = 'Arrow';\n this.sourceDecorator.shape = 'Diamond';\n this.sourceDecorator.style.fill = 'white';\n this.targetDecorator.style.fill = 'black';\n this.sourceDecorator.width = 20;\n this.sourceDecorator.height = 10;\n }\n return pathseq;\n };\n Connector.prototype.getBpmnAssociationFlow = function () {\n if ((this.shape.association) === 'Default') {\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n }\n if ((this.shape.association) === 'Directional') {\n this.style.strokeDashArray = '2 2';\n this.targetDecorator.style.fill = 'black';\n this.targetDecorator.shape = 'Arrow';\n }\n if ((this.shape.association) === 'BiDirectional') {\n this.style.strokeDashArray = '2 2';\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n this.sourceDecorator.shape = 'Arrow';\n this.sourceDecorator.style.fill = 'white';\n this.sourceDecorator.width = 5;\n this.sourceDecorator.height = 10;\n }\n };\n Connector.prototype.getBpmnMessageFlow = function () {\n var segmentMessage = new PathElement();\n this.style.strokeDashArray = '4 4';\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.width = 5;\n this.targetDecorator.height = 10;\n this.sourceDecorator.shape = 'Circle';\n if (((this.shape.message) === 'InitiatingMessage') ||\n ((this.shape.message) === 'NonInitiatingMessage')) {\n segmentMessage.id = this.id + '_' + (this.shape.message);\n segmentMessage.width = 25;\n segmentMessage.height = 15;\n segmentMessage.data = 'M0,0 L19.8,12.8 L40,0 L0, 0 L0, 25.5 L40, 25.5 L 40, 0';\n segmentMessage.horizontalAlignment = 'Center';\n segmentMessage.verticalAlignment = 'Center';\n segmentMessage.transform = Transform.Self;\n segmentMessage.style.fill = (this.shape.message) === 'NonInitiatingMessage' ? 'lightgrey' : 'white';\n }\n return segmentMessage;\n };\n /** @private */\n Connector.prototype.distance = function (pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n };\n Connector.prototype.findPath = function (sourcePt, targetPt) {\n var beginningpoint = { x: sourcePt.x, y: sourcePt.y };\n var distance = this.distance(sourcePt, targetPt);\n distance = Math.min(30, distance / 2);\n var angle = findAngle(sourcePt, targetPt);\n var transferpoint = Point.transform({ x: beginningpoint.x, y: beginningpoint.y }, angle, distance);\n var startpoint1 = Point.transform({ x: transferpoint.x, y: transferpoint.y }, angle, -12);\n var endpoint1 = Point.transform({ x: startpoint1.x, y: startpoint1.y }, angle, 12 * 2);\n var path = 'M' + startpoint1.x + ' ' + startpoint1.y + ' L' + endpoint1.x + ' ' + endpoint1.y;\n return [path, transferpoint];\n };\n /** @private */\n Connector.prototype.getAnnotationElement = function (annotation, points, bounds, getDescription) {\n annotation.id = annotation.id || randomId();\n var textele = new TextElement();\n textele.constraints = annotation.constraints;\n textele.visible = annotation.visibility;\n textele.rotateAngle = annotation.rotateAngle;\n textele.horizontalAlignment = annotation.horizontalAlignment;\n textele.verticalAlignment = annotation.verticalAlignment;\n textele.width = annotation.width;\n textele.height = annotation.height;\n if (bounds.width !== undefined) {\n textele.width = (annotation.width || bounds.width) - annotation.margin.left - annotation.margin.right;\n }\n textele.margin = annotation.margin;\n textele.id = this.id + '_' + annotation.id;\n if (bounds.width === 0) {\n bounds.width = this.style.strokeWidth;\n }\n if (bounds.height === 0) {\n bounds.height = this.style.strokeWidth;\n }\n textele.content = annotation.content;\n textele.style = annotation.style;\n // tslint:disable-next-line:no-any\n var wrapperContent;\n var description = getFunction(getDescription);\n if (description) {\n wrapperContent = description(annotation, this);\n }\n textele.description = wrapperContent ? wrapperContent : textele.id;\n this.updateAnnotation(annotation, points, bounds, textele);\n textele.style.textOverflow = 'Wrap';\n return textele;\n };\n /** @private */\n Connector.prototype.updateAnnotation = function (annotation, points, bounds, textElement) {\n var getPointloop;\n var newPoint;\n var align;\n var hAlign;\n var vAlign;\n var offsetPoint;\n var pivotPoint = { x: 0, y: 0 };\n textElement.refreshTextElement();\n textElement.width = (annotation.width || bounds.width);\n getPointloop = getAnnotationPosition(points, annotation, bounds);\n newPoint = getPointloop.point;\n if (annotation.segmentAngle) {\n textElement.rotateAngle = annotation.rotateAngle + getPointloop.angle;\n textElement.rotateAngle = (textElement.rotateAngle + 360) % 360;\n }\n if (bounds.width === 0) {\n bounds.width = this.style.strokeWidth;\n }\n if (bounds.height === 0) {\n bounds.height = this.style.strokeWidth;\n }\n offsetPoint = { x: ((newPoint.x - bounds.x) / bounds.width), y: ((newPoint.y - bounds.y) / bounds.height) };\n pivotPoint.x = bounds.width * offsetPoint.x;\n pivotPoint.y = bounds.height * offsetPoint.y;\n align = alignLabelOnSegments(annotation, getPointloop.angle, points);\n hAlign = align.hAlign;\n vAlign = align.vAlign;\n var horizor;\n var verzor;\n if (hAlign === 'left') {\n horizor = 'Left';\n pivotPoint.x += annotation.displacement.x;\n }\n else if (hAlign === 'right') {\n horizor = 'Right';\n pivotPoint.x -= annotation.displacement.x;\n }\n else if (hAlign === 'center') {\n horizor = 'Center';\n }\n if (vAlign === 'top') {\n verzor = 'Top';\n pivotPoint.y += annotation.displacement.y;\n }\n else if (vAlign === 'bottom') {\n verzor = 'Bottom';\n pivotPoint.y -= annotation.displacement.y;\n }\n else if (vAlign === 'center') {\n verzor = 'Center';\n }\n textElement.horizontalAlignment = horizor;\n textElement.verticalAlignment = verzor;\n textElement.setOffsetWithRespectToBounds(pivotPoint.x, pivotPoint.y, 'Absolute');\n textElement.relativeMode = 'Point';\n };\n /** @private */\n Connector.prototype.getConnectorPoints = function (type, points, layoutOrientation) {\n var width = Math.abs(this.sourcePoint.x - this.targetPoint.x);\n var height = Math.abs(this.sourcePoint.y - this.targetPoint.y);\n points = findConnectorPoints(this, layoutOrientation);\n var newPoints = points.slice(0);\n if (newPoints && newPoints.length > 0) {\n this.sourcePoint = newPoints[0];\n this.targetPoint = newPoints[newPoints.length - 1];\n }\n return newPoints;\n };\n /** @private */\n Connector.prototype.clipDecorator = function (connector, points, isSource) {\n var point = { x: 0, y: 0 };\n var start = { x: 0, y: 0 };\n var end = { x: 0, y: 0 };\n var length = points.length;\n start = !isSource ? points[length - 1] : points[0];\n end = !isSource ? points[length - 2] : points[1];\n var len = Point.distancePoints(start, end);\n len = (len === 0) ? 1 : len;\n var width = connector.style.strokeWidth - 1;\n point.x = (Math.round(start.x + width * (end.x - start.x) / len));\n point.y = (Math.round(start.y + width * (end.y - start.y) / len));\n var strokeWidth = 1;\n var node = isSource ? connector.sourceWrapper : connector.targetWrapper;\n if (node) {\n strokeWidth = node.style.strokeWidth;\n }\n if ((isSource && connector.sourceDecorator.shape !== 'None') ||\n (!isSource && connector.targetDecorator.shape !== 'None')) {\n point = Point.adjustPoint(point, end, true, (strokeWidth / 2));\n }\n return point;\n };\n /** @private */\n Connector.prototype.clipDecorators = function (connector, pts) {\n if (connector.sourceDecorator.shape !== 'None') {\n pts[0] = this.clipDecorator(connector, pts, true);\n }\n if (connector.targetDecorator.shape !== 'None') {\n pts[pts.length - 1] = this.clipDecorator(connector, pts, false);\n }\n return pts;\n };\n /** @private */\n Connector.prototype.updateSegmentElement = function (connector, points, element) {\n var segmentPath;\n var bounds = new Rect();\n var point;\n segmentPath = this.getSegmentPath(connector, points);\n if (connector.type === 'Bezier') {\n if (this.segments.length > 0) {\n for (var i = 0; i < this.segments.length; i++) {\n var segment = this.segments[i];\n var connectorSegment = connector.segments[i];\n var point1 = !Point.isEmptyPoint(segment.point1) ? connectorSegment.point1 : connectorSegment.bezierPoint1;\n var point2 = !Point.isEmptyPoint(segment.point2) ? connectorSegment.point2 : connectorSegment.bezierPoint2;\n bounds.uniteRect(getBezierBounds(segment.points[0], point1, point2, segment.points[1], connector));\n }\n }\n }\n else {\n bounds = Rect.toBounds(points);\n }\n element.width = bounds.width;\n element.height = bounds.height;\n element.offsetX = bounds.x + element.width / 2;\n element.offsetY = bounds.y + element.height / 2;\n element.data = segmentPath;\n if (connector.wrapper) {\n connector.wrapper.offsetX = element.offsetX;\n connector.wrapper.offsetY = element.offsetY;\n connector.wrapper.width = bounds.width;\n connector.wrapper.height = bounds.height;\n }\n return element;\n };\n /** @private */\n Connector.prototype.getSegmentElement = function (connector, segmentElement) {\n var bounds;\n var segmentPath;\n var points = [];\n points = this.getConnectorPoints(connector.type);\n this.intermediatePoints = points;\n segmentElement.staticSize = true;\n segmentElement = this.updateSegmentElement(connector, points, segmentElement);\n return segmentElement;\n };\n /** @private */\n Connector.prototype.getDecoratorElement = function (offsetPoint, adjacentPoint, decorator, isSource, getDescription) {\n var decEle = new PathElement();\n var getPath;\n var angle;\n decEle.transform = Transform.Self;\n this.updateDecoratorElement(decEle, offsetPoint, adjacentPoint, decorator);\n if (getDescription !== undefined) {\n // tslint:disable-next-line:no-any\n var wrapperContent = getDescription(decorator, this);\n decEle.description = wrapperContent ? wrapperContent :\n ('Specifies the ' + isSource ? 'source' : 'target' + 'port element of the connector');\n }\n return decEle;\n };\n Connector.prototype.bridgePath = function (connector, path, pointIndex) {\n var pathData = path;\n if (connector.bridges.length > 0) {\n if (connector.type === 'Straight') {\n for (var n = 0; n < connector.bridges.length; n++) {\n var bridge = connector.bridges[n];\n if (!bridge.rendered) {\n pathData += ' L' + bridge.startPoint.x + ' ' + bridge.startPoint.y;\n pathData += bridge.path;\n bridge.rendered = true;\n }\n }\n }\n else if (connector.type === 'Orthogonal') {\n for (var n = 0; n < connector.bridges.length; n++) {\n var bridge = connector.bridges[n];\n if (bridge.segmentPointIndex === pointIndex) {\n if (!bridge.rendered) {\n if (bridge.segmentPointIndex === pointIndex) {\n pathData += ' L' + bridge.startPoint.x + ' ' + bridge.startPoint.y;\n pathData += bridge.path;\n bridge.rendered = true;\n }\n }\n }\n }\n }\n }\n return pathData;\n };\n /** @private */\n Connector.prototype.updateDecoratorElement = function (element, pt, adjacentPoint, decorator) {\n var getPath;\n var angle;\n element.offsetX = pt.x;\n element.offsetY = pt.y;\n angle = Point.findAngle(pt, adjacentPoint);\n getPath = getDecoratorShape(decorator.shape, decorator);\n var size = new Size(decorator.width, decorator.height);\n element.pivot.x = decorator.pivot.x;\n element.pivot.y = decorator.pivot.y;\n element.style = decorator.style;\n element.rotateAngle = angle;\n element.data = getPath;\n element.width = size.width;\n element.height = size.height;\n };\n /** @private */\n Connector.prototype.getSegmentPath = function (connector, points) {\n var path = '';\n var getPt;\n var end;\n var st;\n var pts = [];\n var j = 0;\n while (j < points.length) {\n pts.push({ x: points[j].x, y: points[j].y });\n j++;\n }\n for (var m = 0; m < connector.bridges.length; m++) {\n var bridge = connector.bridges[m];\n bridge.rendered = false;\n }\n pts = this.clipDecorators(connector, pts);\n if (this.cornerRadius > 0 && this.type !== 'Bezier') {\n for (var j_1 = 0; j_1 < pts.length - 1; j_1++) {\n getPt = pts[j_1];\n if (j_1 === 0) {\n path = 'M' + getPt.x + ' ' + getPt.y;\n }\n var segLength = Point.distancePoints(pts[j_1], pts[j_1 + 1]);\n if (segLength > 0) {\n if (j_1 < pts.length - 2) {\n if (segLength < this.cornerRadius * 2) {\n end = Point.adjustPoint(pts[j_1], pts[j_1 + 1], false, segLength / 2);\n }\n else {\n end = Point.adjustPoint(pts[j_1], pts[j_1 + 1], false, this.cornerRadius);\n }\n }\n else {\n end = pts[j_1 + 1];\n }\n if (j_1 > 0) {\n if (segLength < this.cornerRadius * 2) {\n st = Point.adjustPoint(pts[j_1], pts[j_1 + 1], true, segLength / 2);\n if (j_1 < pts.length - 2) {\n end = null;\n }\n }\n else {\n st = Point.adjustPoint(pts[j_1], pts[j_1 + 1], true, this.cornerRadius);\n }\n }\n if (st) {\n path += 'Q' + getPt.x + ' ' + getPt.y + ' ' + st.x + ' ' + st.y;\n }\n if (end) {\n if (connector.bridges.length > 0) {\n path = this.bridgePath(connector, path, j_1);\n if (connector.type === 'Orthogonal') {\n path = this.bridgePath(connector, path, j_1 + 1);\n }\n }\n path += ' L' + end.x + ' ' + end.y;\n }\n }\n }\n }\n else {\n if (this.type === 'Bezier') {\n var direction = void 0;\n var segments = this.segments;\n for (var j_2 = 0; j_2 < segments.length; j_2++) {\n if (pts.length > 2) {\n segments[j_2].bezierPoint1 = { x: 0, y: 0 };\n segments[j_2].bezierPoint2 = { x: 0, y: 0 };\n }\n if (Point.isEmptyPoint(segments[j_2].point1) && !segments[j_2].vector1.angle && !segments[j_2].vector1.distance) {\n if ((connector.sourceID || this.sourcePortID) && this.sourceWrapper) {\n direction = getDirection(this.sourceWrapper.bounds, pts[j_2], true);\n }\n segments[j_2].bezierPoint1 = getBezierPoints(pts[j_2], pts[j_2 + 1], direction);\n }\n else if (segments[j_2].vector1.angle || segments[j_2].vector1.distance) {\n segments[j_2].bezierPoint1 = Point.transform(pts[j_2], segments[j_2].vector1.angle, segments[j_2].vector1.distance);\n }\n else {\n segments[j_2].bezierPoint1 = {\n x: segments[j_2].point1.x || segments[j_2].bezierPoint1.x,\n y: segments[j_2].point1.y || segments[j_2].bezierPoint1.y\n };\n }\n if (Point.isEmptyPoint(segments[j_2].point2) && !segments[j_2].vector2.angle && !segments[j_2].vector2.distance) {\n if ((connector.targetID || this.targetPortID) && this.targetWrapper) {\n direction = getDirection(this.targetWrapper.bounds, pts[j_2 + 1], true);\n }\n segments[j_2].bezierPoint2 = getBezierPoints(pts[j_2 + 1], pts[j_2], direction);\n }\n else if (segments[j_2].vector2.angle || segments[j_2].vector2.distance) {\n segments[j_2].bezierPoint2 = Point.transform(pts[j_2 + 1], segments[j_2].vector2.angle, segments[j_2].vector2.distance);\n }\n else {\n segments[j_2].bezierPoint2 = {\n x: segments[j_2].point2.x || segments[j_2].bezierPoint2.x,\n y: segments[j_2].point2.y || segments[j_2].bezierPoint2.y\n };\n }\n }\n pts.splice(1, 0, { x: segments[0].bezierPoint1.x, y: segments[0].bezierPoint1.y });\n pts.splice(pts.length - 1, 0, {\n x: segments[segments.length - 1].bezierPoint2.x, y: segments[segments.length - 1].bezierPoint2.y\n });\n pts = this.clipDecorators(connector, pts);\n for (var j_3 = 0; j_3 < segments.length; j_3++) {\n if (j_3 === 0) {\n path = 'M' + pts[0].x + ' ' + pts[0].y;\n }\n var lastPoint = (j_3 === segments.length - 1) ? pts[pts.length - 1].x + ' ' + pts[pts.length - 1].y :\n segments[j_3].points[segments[j_3].points.length - 1].x + ' ' + segments[j_3].points[segments[j_3].points.length - 1].y;\n path += 'C' +\n segments[j_3].bezierPoint1.x + ' ' + segments[j_3].bezierPoint1.y + ' ' + segments[j_3].bezierPoint2.x + ' '\n + segments[j_3].bezierPoint2.y + ' ' + lastPoint;\n }\n }\n else {\n for (var k = 0; k < pts.length; k++) {\n getPt = pts[k];\n if (k === 0) {\n path = 'M' + getPt.x + ' ' + getPt.y;\n }\n if (k > 0) {\n path = this.bridgePath(connector, path, k);\n path += ' ' + 'L' + getPt.x + ' ' + getPt.y;\n }\n }\n }\n }\n return path;\n };\n /** @private */\n Connector.prototype.updateShapeElement = function (connector) {\n var element;\n switch (connector.shape.type) {\n case 'Bpmn':\n if (connector.wrapper.children[3] instanceof PathElement) {\n element = connector.wrapper.children[3];\n }\n if (connector.shape.flow === 'Message') {\n this.updateShapePosition(connector, element);\n }\n break;\n }\n };\n /** @private */\n Connector.prototype.updateShapePosition = function (connector, element) {\n var segmentOffset = 0.5;\n var angle;\n var pt;\n var length = 0;\n var anglePoints = this.intermediatePoints;\n for (var i = 0; i < anglePoints.length - 1; i++) {\n length = length + this.distance(anglePoints[i], anglePoints[i + 1]);\n var offsetLength = length * segmentOffset;\n if (length >= offsetLength) {\n angle = findAngle(anglePoints[i], anglePoints[i + 1]);\n pt = Point.transform(anglePoints[i], angle, offsetLength);\n }\n }\n element.offsetX = pt.x;\n element.offsetY = pt.y;\n };\n /** @hidden */\n Connector.prototype.scale = function (sw, sh, width, height, refObject) {\n var tx = 0;\n var ty = 0;\n if (this.wrapper && this.wrapper.outerBounds) {\n var outerBounds = getOuterBounds(this);\n var connWidth = (this.wrapper.bounds.width || this.style.strokeWidth || 1) - 2;\n var connHeight = (this.wrapper.bounds.height || this.style.strokeWidth || 1) - 2;\n tx = (outerBounds.width - connWidth);\n ty = (outerBounds.height - connHeight);\n sw = (width - (Math.max(tx, ty))) / connWidth;\n sh = (height - (Math.max(tx, ty))) / connHeight;\n tx = ty = Math.min(tx, ty);\n }\n sw = sh = Math.min(sw, sh);\n var matrix = identityMatrix();\n refObject = refObject || this.wrapper;\n rotateMatrix(matrix, -refObject.rotateAngle, refObject.offsetX, refObject.offsetY);\n scaleMatrix(matrix, sw, sh, refObject.offsetX, refObject.offsetY);\n rotateMatrix(matrix, refObject.rotateAngle, refObject.offsetX, refObject.offsetY);\n var points = transformPointsByMatrix(matrix, this.intermediatePoints);\n this.sourcePoint = points[0];\n this.targetPoint = points[points.length - 1];\n points = this.intermediatePoints = findConnectorPoints(this);\n updateConnector(this, points);\n return { x: tx, y: ty };\n };\n __decorate([\n ComplexFactory(getConnectorType)\n ], Connector.prototype, \"shape\", void 0);\n __decorate([\n Property(ConnectorConstraints.Default)\n ], Connector.prototype, \"constraints\", void 0);\n __decorate([\n Property(10)\n ], Connector.prototype, \"bridgeSpace\", void 0);\n __decorate([\n Collection([], PathAnnotation)\n ], Connector.prototype, \"annotations\", void 0);\n __decorate([\n Complex({}, Point)\n ], Connector.prototype, \"sourcePoint\", void 0);\n __decorate([\n Complex({}, Point)\n ], Connector.prototype, \"targetPoint\", void 0);\n __decorate([\n CollectionFactory(getSegmentType)\n ], Connector.prototype, \"segments\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"sourceID\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"targetID\", void 0);\n __decorate([\n Property(10)\n ], Connector.prototype, \"hitPadding\", void 0);\n __decorate([\n Property('Straight')\n ], Connector.prototype, \"type\", void 0);\n __decorate([\n Property(0)\n ], Connector.prototype, \"cornerRadius\", void 0);\n __decorate([\n Complex({ shape: 'None' }, Decorator)\n ], Connector.prototype, \"sourceDecorator\", void 0);\n __decorate([\n Complex({ shape: 'Arrow' }, Decorator)\n ], Connector.prototype, \"targetDecorator\", void 0);\n __decorate([\n Complex({}, DiagramTooltip)\n ], Connector.prototype, \"tooltip\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"sourcePortID\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"targetPortID\", void 0);\n __decorate([\n Complex({ strokeWidth: 1, strokeColor: 'black' }, StrokeStyle)\n ], Connector.prototype, \"style\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"wrapper\", void 0);\n return Connector;\n}(NodeBase));\nexport { Connector };\n","import { Node } from './../objects/node';\nimport { NodeConstraints, ConnectorConstraints, DiagramConstraints, DiagramTools, DiagramAction } from '../enum/enum';\nimport { AnnotationConstraints, PortConstraints } from '../enum/enum';\nimport { Connector } from './../objects/connector';\nimport { Selector } from './../interaction/selector';\nimport { ShapeAnnotation, PathAnnotation } from '../objects/annotation';\n/**\n * constraints-util module contains the common constraints\n */\n/** @private */\nexport function canSelect(node) {\n if (node) {\n var state = 0;\n if ((node instanceof ShapeAnnotation) || (node instanceof PathAnnotation)) {\n state = node.constraints & AnnotationConstraints.Select;\n }\n else if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.Select;\n }\n else {\n state = node.constraints & NodeConstraints.Select;\n }\n return state;\n }\n return 1;\n}\n/** @private */\nexport function canMove(node) {\n if (node) {\n var state = 0;\n if ((node instanceof ShapeAnnotation) || (node instanceof PathAnnotation)) {\n state = node.constraints & AnnotationConstraints.Drag;\n }\n else if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.Drag;\n }\n else if (node instanceof Selector) {\n state = 1;\n }\n else {\n state = node.constraints & NodeConstraints.Drag;\n }\n return state;\n }\n return 1;\n}\n/** @private */\nexport function canEnablePointerEvents(node, diagram) {\n var state = 0;\n if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.PointerEvents;\n }\n else {\n state = node.constraints & NodeConstraints.PointerEvents;\n }\n return state;\n}\n/** @private */\nexport function canDelete(node) {\n var state = 0;\n if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.Delete;\n }\n else {\n state = node.constraints & NodeConstraints.Delete;\n }\n return state;\n}\n/** @private */\nexport function canBridge(connector, diagram) {\n var state = 0;\n if (connector.constraints & ConnectorConstraints.Bridging) {\n state = connector.constraints & ConnectorConstraints.Bridging;\n }\n else if (connector.constraints & ConnectorConstraints.InheritBridging) {\n state = diagram.constraints & DiagramConstraints.Bridging;\n }\n else {\n state = 0;\n }\n return state;\n}\n/** @private */\nexport function canDragSourceEnd(connector) {\n return connector.constraints & ConnectorConstraints.DragSourceEnd;\n}\n/** @private */\nexport function canDragTargetEnd(connector) {\n return connector.constraints & ConnectorConstraints.DragTargetEnd;\n}\n/** @private */\nexport function canDragSegmentThumb(connector) {\n return connector.constraints & ConnectorConstraints.DragSegmentThumb;\n}\n/** @private */\nexport function canRotate(node) {\n if ((node instanceof ShapeAnnotation) || (node instanceof PathAnnotation)) {\n return node.constraints & AnnotationConstraints.Rotate;\n }\n else {\n return node.constraints & NodeConstraints.Rotate;\n }\n}\n/** @private */\nexport function canShadow(node) {\n return node.constraints & NodeConstraints.Shadow;\n}\n/** @private */\nexport function canInConnect(node) {\n if ((node instanceof Node) && (node.constraints & NodeConstraints.InConnect)) {\n return node.constraints & NodeConstraints.InConnect;\n }\n return 0;\n}\n/** @private */\nexport function canOutConnect(node) {\n if ((node instanceof Node) && (node.constraints & NodeConstraints.OutConnect)) {\n return node.constraints & NodeConstraints.OutConnect;\n }\n return 0;\n}\n/** @private */\nexport function canResize(node, direction) {\n var returnValue = 0;\n if (node instanceof ShapeAnnotation || node instanceof PathAnnotation) {\n returnValue = node.constraints & AnnotationConstraints.Resize;\n }\n else if (node) {\n if (direction === 'SouthEast') {\n returnValue = node.constraints & NodeConstraints.ResizeSouthEast;\n }\n else if (direction === 'East') {\n returnValue = node.constraints & NodeConstraints.ResizeEast;\n }\n else if (direction === 'NorthEast') {\n returnValue = node.constraints & NodeConstraints.ResizeNorthEast;\n }\n else if (direction === 'South') {\n returnValue = node.constraints & NodeConstraints.ResizeSouth;\n }\n else if (direction === 'North') {\n returnValue = node.constraints & NodeConstraints.ResizeNorth;\n }\n else if (direction === 'SouthWest') {\n returnValue = node.constraints & NodeConstraints.ResizeSouthWest;\n }\n else if (direction === 'West') {\n returnValue = node.constraints & NodeConstraints.ResizeWest;\n }\n else if (direction === 'NorthWest') {\n returnValue = node.constraints & NodeConstraints.ResizeNorthWest;\n }\n }\n return returnValue;\n}\n/** @private */\nexport function canAllowDrop(node) {\n var state = 0;\n if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.AllowDrop;\n }\n else {\n state = node.constraints & NodeConstraints.AllowDrop;\n }\n return state;\n}\n/** @private */\nexport function canEnableToolTip(node, diagram) {\n var state = 0;\n if (node instanceof Connector) {\n if (node.constraints & ConnectorConstraints.Tooltip) {\n state = node.constraints & ConnectorConstraints.Tooltip;\n }\n else if (node.constraints & ConnectorConstraints.InheritTooltip) {\n state = diagram.constraints & DiagramConstraints.Tooltip;\n }\n }\n else {\n if (node.constraints & NodeConstraints.Tooltip) {\n state = node.constraints & NodeConstraints.Tooltip;\n }\n else if (node.constraints & NodeConstraints.InheritTooltip) {\n state = diagram.constraints & DiagramConstraints.Tooltip;\n }\n }\n return state;\n}\n/** @private */\nexport function canSingleSelect(model) {\n return model.tool & DiagramTools.SingleSelect;\n}\n/** @private */\nexport function canMultiSelect(model) {\n return model.tool & DiagramTools.MultipleSelect;\n}\n/** @private */\nexport function canZoomPan(model) {\n return model.tool & DiagramTools.ZoomPan;\n}\n/** @private */\nexport function canContinuousDraw(model) {\n return model.tool & DiagramTools.ContinuousDraw;\n}\n/** @private */\nexport function canDrawOnce(model) {\n return model.tool & DiagramTools.DrawOnce;\n}\n/** @private */\nexport function defaultTool(model) {\n return (model.tool & DiagramTools.SingleSelect) || (model.tool & DiagramTools.MultipleSelect);\n}\n/** @private */\nexport function canZoom(model) {\n return model.constraints & DiagramConstraints.Zoom;\n}\n/** @private */\nexport function canPan(model) {\n return model.constraints & DiagramConstraints.Pan;\n}\n/** @private */\nexport function canUserInteract(model) {\n return model.constraints & DiagramConstraints.UserInteraction;\n}\n/** @private */\nexport function canApiInteract(model) {\n return model.constraints & DiagramConstraints.ApiUpdate;\n}\n/** @private */\nexport function canPanX(model) {\n return ((model.constraints & DiagramConstraints.PanX));\n}\n/** @private */\nexport function canPanY(model) {\n return ((model.constraints & DiagramConstraints.PanY));\n}\n/** @private */\nexport function canZoomTextEdit(diagram) {\n return ((diagram.constraints & DiagramConstraints.ZoomTextEdit));\n}\n/** @private */\nexport function canPageEditable(model) {\n return canApiInteract(model) || (model.diagramActions & DiagramAction.ToolAction);\n}\n/** @private */\nexport function enableReadOnly(annotation, node) {\n var enumValue = 0;\n enumValue = (node instanceof Connector) ? ConnectorConstraints.ReadOnly : NodeConstraints.ReadOnly;\n if (node.shape.type === 'Text') {\n return node.constraints & NodeConstraints.ReadOnly;\n }\n else if (node.constraints & enumValue) {\n if (annotation.constraints & AnnotationConstraints.InheritReadOnly) {\n return 1;\n }\n else {\n return 0;\n }\n }\n else if (annotation.constraints & AnnotationConstraints.ReadOnly) {\n return 1;\n }\n return 0;\n}\n/** @private */\nexport function canDraw(port, diagram) {\n return port.constraints & PortConstraints.Draw;\n}\n/** @private */\nexport function canDrag(port, diagram) {\n return port.constraints & PortConstraints.Drag;\n}\n","import { createHtmlElement, removeElement } from '../utility/dom-util';\nimport { Ruler } from '../../ruler/index';\nimport { Size } from '../primitives/size';\nimport { getFunction } from '../utility/base-util';\n/**\n * defines the helper methods for the ruler\n */\n/**\n * @private\n */\nexport function renderOverlapElement(diagram) {\n var rulerSize = getRulerSize(diagram);\n var attributes = {\n 'id': diagram.element.id + '_overlapRuler',\n style: 'height:' + rulerSize.height + 'px;width:' + rulerSize.width + 'px;position:absolute;left:0;top:0',\n class: 'e-ruler-overlap'\n };\n var overlap = createHtmlElement('div', attributes);\n diagram.element.insertBefore(overlap, diagram.element.firstChild);\n}\n/**\n * @private\n */\nexport function renderRuler(diagram, isHorizontal) {\n var div = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n var rulerSize = getRulerSize(diagram);\n var rulerGeometry = getRulerGeometry(diagram);\n var margin = isHorizontal ? ('margin-left:' + rulerSize.width + 'px;') : ('margin-top:' + rulerSize.height + 'px;');\n if (!div) {\n var style = 'height:' + (isHorizontal ? rulerSize.height : (rulerGeometry.height + 100)) + 'px;overflow:hidden;width:' +\n (isHorizontal ? (rulerGeometry.width + 100) : rulerSize.width) + 'px;position:absolute;font-size:11px;' + margin;\n var attributes = {\n 'id': diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'),\n style: style\n };\n div = createHtmlElement('div', attributes);\n }\n diagram.element.insertBefore(div, diagram.element.firstChild);\n var diagramRuler = isHorizontal ? diagram.rulerSettings.horizontalRuler : diagram.rulerSettings.verticalRuler;\n var ruler = new Ruler(diagramRuler);\n ruler.orientation = isHorizontal ? 'Horizontal' : 'Vertical';\n ruler.length = (isHorizontal ? rulerGeometry.width : rulerGeometry.height) + diagramRuler.segmentWidth;\n ruler.appendTo('#' + diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n isHorizontal ? diagram.hRuler = ruler : diagram.vRuler = ruler;\n var rulerObj = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n isHorizontal ? diagram.hRuler.element = rulerObj : diagram.vRuler.element = rulerObj;\n}\n/**\n * @private\n */\nexport function updateRuler(diagram) {\n var hOffset = -diagram.scroller.horizontalOffset;\n var vOffset = -diagram.scroller.verticalOffset;\n if (diagram && diagram.rulerSettings.showRulers) {\n diagram.hRuler.length = 0;\n diagram.vRuler.length = 0;\n if (hOffset !== undefined && diagram.hRuler.element) {\n updateRulerDimension(diagram, diagram.hRuler, hOffset, true);\n }\n if (vOffset !== undefined && diagram.vRuler.element) {\n updateRulerDimension(diagram, diagram.vRuler, vOffset, false);\n }\n }\n else {\n removeRulerElements(diagram);\n }\n}\n/**\n * @private\n */\nexport function removeRulerElements(diagram) {\n removeElement(diagram.element.id + '_hRuler');\n removeElement(diagram.element.id + '_vRuler');\n removeElement(diagram.element.id + '_overlapRuler');\n}\n/** @private */\nexport function getRulerSize(diagram) {\n var top = 0;\n var left = 0;\n if (diagram.rulerSettings.showRulers) {\n top = diagram.rulerSettings.horizontalRuler.thickness;\n left = diagram.rulerSettings.verticalRuler.thickness;\n }\n return new Size(left, top);\n}\n/** @private */\nexport function getRulerGeometry(diagram) {\n var rulerSize = getRulerSize(diagram);\n var height = diagram.scroller.viewPortHeight;\n var width = diagram.scroller.viewPortWidth;\n if (width < diagram.element.clientWidth - rulerSize.width) {\n width = diagram.element.clientWidth - rulerSize.width;\n }\n if (height < diagram.element.clientHeight - rulerSize.height) {\n height = diagram.element.clientHeight - rulerSize.height;\n }\n if (diagram.hRuler && diagram.hRuler.length) {\n width = diagram.hRuler.length;\n }\n if (diagram.vRuler && diagram.vRuler.length) {\n height = diagram.vRuler.length;\n }\n return new Size(width, height);\n}\n/**\n * @private\n */\nexport function removeRulerMarkers() {\n var markers = document.getElementsByClassName('e-d-ruler-marker');\n var marker;\n var i;\n if (markers && markers.length > 0) {\n for (i = markers.length - 1; i >= 0; i--) {\n marker = markers[i];\n if (marker) {\n marker.parentNode.removeChild(marker);\n }\n }\n }\n}\nexport function drawRulerMarkers(diagram, currentPoint) {\n if (diagram.rulerSettings.showRulers) {\n diagram.hRuler.drawRulerMarker(diagram.hRuler.element, currentPoint, diagram.scroller.horizontalOffset);\n diagram.vRuler.drawRulerMarker(diagram.vRuler.element, currentPoint, diagram.scroller.verticalOffset);\n }\n}\nfunction updateRulerDimension(diagram, ruler, offset, isHorizontal) {\n var rulerSize = getRulerSize(diagram);\n var rulerGeometry = getRulerGeometry(diagram);\n var diagramRuler = isHorizontal ? diagram.rulerSettings.horizontalRuler : diagram.rulerSettings.verticalRuler;\n updateRulerDiv(diagram, rulerGeometry, isHorizontal);\n updateRulerSpace(diagram, rulerGeometry, isHorizontal);\n ruler.offset = offset;\n ruler.scale = diagram.scroller.currentZoom;\n ruler.length = rulerGeometry.width + 100;\n ruler.arrangeTick = getFunction(diagramRuler.arrangeTick);\n ruler.dataBind();\n var rulerObj = isHorizontal ? diagram.hRuler.element : diagram.vRuler.element;\n if (isHorizontal) {\n rulerObj.style.marginLeft = (rulerSize.width - ruler.hRulerOffset) + 'px';\n }\n else {\n rulerObj.style.marginTop = (rulerSize.height - ruler.vRulerOffset) + 'px';\n }\n}\nfunction updateRulerSpace(diagram, rulerGeometry, isHorizontal) {\n var div = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler_ruler_space' : '_vRuler_ruler_space'));\n var ruler = isHorizontal ? diagram.hRuler : diagram.vRuler;\n if (div && diagram && rulerGeometry) {\n div.style.width = (isHorizontal ? (rulerGeometry.width + (ruler.segmentWidth * 2)) : ruler.thickness) + 'px';\n div.style.height = (isHorizontal ? ruler.thickness : (rulerGeometry.height + (ruler.segmentWidth * 2))) + 'px';\n }\n}\nfunction updateRulerDiv(diagram, rulerGeometry, isHorizontal) {\n var div = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n var ruler = isHorizontal ? diagram.hRuler : diagram.vRuler;\n if (div && diagram && rulerGeometry) {\n div.style.width = (isHorizontal ? (rulerGeometry.width + ruler.segmentWidth) : ruler.thickness) + 'px';\n div.style.height = (isHorizontal ? ruler.thickness : (rulerGeometry.height + ruler.segmentWidth)) + 'px';\n div = document.getElementById(diagram.element.id + '_overlapRuler');\n if (div) {\n isHorizontal ? (div.style.height = ruler.thickness + 'px') : (div.style.width = ruler.thickness + 'px');\n }\n }\n}\n","import { Size } from './../primitives/size';\nimport { Rect } from './../primitives/rect';\nimport { identityMatrix, rotateMatrix, transformPointByMatrix, scaleMatrix } from './../primitives/matrix';\nimport { DiagramElement } from './../core/elements/diagram-element';\nimport { Container } from './../core/containers/container';\nimport { StrokeStyle } from './../core/appearance';\nimport { Point } from './../primitives/point';\nimport { ConnectorConstraints, NodeConstraints } from './../enum/enum';\nimport { SelectorConstraints, ThumbsConstraints } from './../enum/enum';\nimport { PathElement } from './../core/elements/path-element';\nimport { DiagramNativeElement } from './../core/elements/native-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { ImageElement } from '../core/elements/image-element';\nimport { Node } from './../objects/node';\nimport { Connector, bezierPoints } from './../objects/connector';\nimport { getBasicShape } from './../objects/dictionary/basic-shapes';\nimport { getFlowShape } from './../objects/dictionary/flow-shapes';\nimport { Diagram } from './../diagram';\nimport { getContent, removeElement, hasClass, getDiagramElement } from './dom-util';\nimport { getBounds, cloneObject, rotatePoint, getFunction } from './base-util';\nimport { getPolygonPath } from './../utility/path-util';\nimport { DiagramHtmlElement } from '../core/elements/html-element';\nimport { getRulerSize } from '../ruler/ruler';\nimport { canResize } from './constraints-util';\n/** @private */\nexport function completeRegion(region, selectedObjects) {\n var collection = [];\n for (var i = 0; i < selectedObjects.length; i++) {\n var obj = selectedObjects[i];\n if (region.containsRect(obj.wrapper.bounds)) {\n collection.push(obj);\n }\n }\n return collection;\n}\n/**\n * @private\n */\nexport function findObjectType(drawingObject) {\n var type;\n if (drawingObject) {\n if (drawingObject.type) {\n type = 'Connector';\n }\n else if (drawingObject.shape && !drawingObject.type) {\n type = 'Node';\n }\n }\n return type;\n}\n/** @private */\nexport function findNearestPoint(reference, start, end) {\n var shortestPoint;\n var shortest = Point.findLength(start, reference);\n var shortest1 = Point.findLength(end, reference);\n if (shortest > shortest1) {\n shortestPoint = end;\n }\n else {\n shortestPoint = start;\n }\n var angleBWStAndEnd = Point.findAngle(start, end);\n var angleBWStAndRef = Point.findAngle(shortestPoint, reference);\n var r = Point.findLength(shortestPoint, reference);\n var vaAngle = angleBWStAndRef + ((angleBWStAndEnd - angleBWStAndRef) * 2);\n return {\n x: (shortestPoint.x + r * Math.cos(vaAngle * Math.PI / 180)),\n y: (shortestPoint.y + r * Math.sin(vaAngle * Math.PI / 180))\n };\n}\nfunction pointsForBezier(connector) {\n var points = [];\n if (connector.type === 'Bezier') {\n var k = 0;\n for (var i = 0; i < connector.segments.length; i++) {\n var tolerance = 1.5;\n var segment = connector.segments[i];\n var pt = { x: 0, y: 0 };\n var point1 = !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1;\n var point2 = !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2;\n var max = Number((connector.distance(point1, segment.points[0]) +\n connector.distance(point2, point1) +\n connector.distance(segment.points[1], point2)) / tolerance);\n for (var j = 0; j < max - 1; j = j + 10) {\n points[k] =\n bezierPoints(connector, segment.points[0], !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1, !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2, segment.points[1], j, max);\n k++;\n }\n }\n }\n return points;\n}\nexport function isDiagramChild(htmlLayer) {\n var element = htmlLayer.parentElement;\n do {\n if (hasClass(element, 'e-diagram')) {\n return true;\n }\n element = element.parentElement;\n } while (element);\n return false;\n}\nexport function groupHasType(node, type, nameTable) {\n var contains = false;\n if (node && node.children && node.children.length > 0) {\n var child = void 0;\n var i = 0;\n for (; i < node.children.length; i++) {\n child = nameTable[node.children[i]];\n if (child.shape.type === type) {\n return true;\n }\n return groupHasType(child, type, nameTable);\n }\n }\n return contains;\n}\n/** @private */\nexport function isPointOverConnector(connector, reference) {\n var intermediatePoints;\n intermediatePoints = connector.type === 'Bezier' ? pointsForBezier(connector) :\n connector.intermediatePoints;\n for (var i = 0; i < intermediatePoints.length - 1; i++) {\n var start = intermediatePoints[i];\n var end = intermediatePoints[i + 1];\n var rect = Rect.toBounds([start, end]);\n rect.Inflate(connector.hitPadding);\n if (rect.containsPoint(reference)) {\n var intersectinPt = findNearestPoint(reference, start, end);\n var segment1 = { x1: start.x, x2: end.x, y1: start.y, y2: end.y };\n var segment2 = { x1: reference.x, x2: intersectinPt.x, y1: reference.y, y2: intersectinPt.y };\n var intersectDetails = intersect3(segment1, segment2);\n if (intersectDetails.enabled) {\n var distance = Point.findLength(reference, intersectDetails.intersectPt);\n if (Math.abs(distance) < connector.hitPadding) {\n return true;\n }\n }\n else {\n var rect_1 = Rect.toBounds([reference, reference]);\n rect_1.Inflate(3);\n if (rect_1.containsPoint(start) || rect_1.containsPoint(end)) {\n return true;\n }\n }\n if (Point.equals(reference, intersectinPt)) {\n return true;\n }\n }\n }\n if (connector.annotations.length > 0) {\n var container = connector.wrapper.children;\n for (var i = 3; i < container.length; i++) {\n var textElement = container[i];\n if (textElement.bounds.containsPoint(reference)) {\n return true;\n }\n }\n }\n return false;\n}\n/** @private */\nexport function intersect3(lineUtil1, lineUtil2) {\n var point = { x: 0, y: 0 };\n var l1 = lineUtil1;\n var l2 = lineUtil2;\n var d = (l2.y2 - l2.y1) * (l1.x2 - l1.x1) - (l2.x2 - l2.x1) * (l1.y2 - l1.y1);\n var na = (l2.x2 - l2.x1) * (l1.y1 - l2.y1) - (l2.y2 - l2.y1) * (l1.x1 - l2.x1);\n var nb = (l1.x2 - l1.x1) * (l1.y1 - l2.y1) - (l1.y2 - l1.y1) * (l1.x1 - l2.x1);\n if (d === 0) {\n return { enabled: false, intersectPt: point };\n }\n var ua = na / d;\n var ub = nb / d;\n if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n point.x = l1.x1 + (ua * (l1.x2 - l1.x1));\n point.y = l1.y1 + (ua * (l1.y2 - l1.y1));\n return { enabled: true, intersectPt: point };\n }\n return { enabled: false, intersectPt: point };\n}\n/** @private */\nexport function getPoints(element, corners) {\n var line = [];\n line.push(corners.topLeft);\n line.push(corners.topRight);\n line.push(corners.bottomRight);\n line.push(corners.bottomLeft);\n return line;\n}\n/**\n * @private\n * sets the offset of the tooltip.\n * @param diagram\n * @param mousePosition\n * @param node\n */\nexport function getTooltipOffset(diagram, mousePosition, node) {\n var offset;\n var inheritTooltip = (node instanceof Node) ? (node.constraints & NodeConstraints.InheritTooltip)\n : (node.constraints & ConnectorConstraints.InheritTooltip);\n var objectTooltip = (node instanceof Node) ? (node.constraints & NodeConstraints.Tooltip)\n : (node.constraints & ConnectorConstraints.Tooltip);\n var isMouseBased = ((!inheritTooltip && objectTooltip ? node.tooltip.relativeMode\n : diagram.tooltip.relativeMode) === 'Mouse') ? true : false;\n offset = tooltipOffset(node, mousePosition, diagram, isMouseBased);\n var rulerSize = getRulerSize(diagram);\n return { x: offset.x + rulerSize.width, y: offset.y + rulerSize.height };\n}\nfunction tooltipOffset(node, mousePosition, diagram, isMouseBased) {\n var point = {};\n var scale = diagram.scroller.transform.scale;\n var element = document.getElementById(diagram.element.id);\n var bounds = node.wrapper.bounds;\n var rect = element.getBoundingClientRect();\n var horizontalOffset = diagram.scroller.horizontalOffset;\n var verticalOffset = diagram.scroller.verticalOffset;\n switch (diagram.tooltipObject.position) {\n case 'BottomCenter':\n point = offsetPoint(mousePosition, bounds.bottomCenter, diagram, isMouseBased, (rect.width / 2), rect.height);\n break;\n case 'BottomLeft':\n case 'LeftBottom':\n point = offsetPoint(mousePosition, bounds.bottomLeft, diagram, isMouseBased, 0, rect.height);\n break;\n case 'BottomRight':\n case 'RightBottom':\n point = offsetPoint(mousePosition, bounds.bottomRight, diagram, isMouseBased, rect.width, rect.height);\n break;\n case 'LeftCenter':\n point = offsetPoint(mousePosition, bounds.middleLeft, diagram, isMouseBased, 0, (rect.height / 2));\n break;\n case 'LeftTop':\n case 'TopLeft':\n point = offsetPoint(mousePosition, bounds.topLeft, diagram, isMouseBased, 0, 0);\n break;\n case 'RightCenter':\n point = offsetPoint(mousePosition, bounds.middleRight, diagram, isMouseBased, rect.width, (rect.height / 2));\n break;\n case 'RightTop':\n case 'TopRight':\n point = offsetPoint(mousePosition, bounds.topRight, diagram, isMouseBased, rect.width, 0);\n break;\n case 'TopCenter':\n point = offsetPoint(mousePosition, bounds.topCenter, diagram, isMouseBased, (rect.width / 2), 0);\n break;\n }\n return point;\n}\nfunction offsetPoint(mousePosition, bound, diagram, isMouseBased, x, y) {\n var point = {};\n var scale = diagram.scroller.transform.scale;\n var horizontalOffset = diagram.scroller.horizontalOffset;\n var verticalOffset = diagram.scroller.verticalOffset;\n point.x = (isMouseBased ? mousePosition.x : bound.x) * scale + horizontalOffset - x;\n point.y = (isMouseBased ? mousePosition.y : bound.y) * scale + verticalOffset - y;\n return point;\n}\n/** @private */\nexport function sort(objects) {\n var i = 0;\n var j = 0;\n var temp;\n for (i = 0; i < objects.length; i++) {\n var b = getBounds(objects[i].wrapper);\n for (j = i; j < objects.length; j++) {\n var bounds = getBounds(objects[j].wrapper);\n if (b.center.x > bounds.center.x) {\n temp = objects[i];\n objects[i] = objects[j];\n objects[j] = temp;\n }\n }\n }\n return objects;\n}\n/** @private */\nexport function getAnnotationPosition(pts, annotation, bound) {\n var angle;\n var getloop;\n var point;\n getloop = getOffsetOfConnector(pts, annotation, bound);\n angle = Point.findAngle(pts[getloop.index], pts[getloop.index + 1]);\n var alignednumber = getAlignedPosition(annotation);\n point = Point.transform(getloop.point, angle + 45, alignednumber);\n getloop.point = point;\n getloop.angle = angle;\n return getloop;\n}\n/** @private */\nexport function getOffsetOfConnector(points, annotation, bounds) {\n var length = 0;\n var offset = annotation.offset;\n var point;\n var angle;\n var offsetLength;\n var lengths = [];\n var prevLength;\n var kCount;\n for (var j = 0; j < points.length - 1; j++) {\n length += Point.distancePoints(points[j], points[j + 1]);\n lengths.push(length);\n }\n offsetLength = offset * length;\n for (var k = 0; k < lengths.length; k++) {\n if (lengths[k] >= offsetLength) {\n angle = Point.findAngle(points[k], points[k + 1]);\n point = Point.transform(points[k], angle, offsetLength - (prevLength || 0));\n kCount = k;\n return { point: point, index: kCount };\n }\n prevLength = lengths[k];\n }\n return { point: point, index: kCount };\n}\n/** @private */\nexport function getAlignedPosition(annotation) {\n var cnst = annotation.content === undefined ? 10 : 0;\n var state = 0;\n switch (annotation.alignment) {\n case 'Center':\n state = 0;\n break;\n case 'Before':\n state = -((0) / 2 + cnst);\n break;\n case 'After':\n state = ((0) / 2 + cnst);\n break;\n }\n return state;\n}\n/** @private */\nexport function alignLabelOnSegments(obj, ang, pts) {\n var angle = ang % 360;\n ang %= 360;\n var fourty5 = 45;\n var one35 = 135;\n var two25 = 225;\n var three15 = 315;\n var vAlign;\n var hAlign;\n switch (obj.alignment) {\n case 'Before':\n if (ang >= fourty5 && ang <= one35) {\n hAlign = 'right';\n vAlign = obj.offset === 0.5 ? 'center' : 'top';\n }\n else if (ang >= two25 && ang <= three15) {\n hAlign = 'left';\n vAlign = obj.offset === 0.5 ? 'center' : 'bottom';\n }\n else if (ang > fourty5 && ang < two25) {\n vAlign = 'top';\n hAlign = obj.offset === 0.5 ? 'center' : 'right';\n }\n else {\n vAlign = 'bottom';\n hAlign = (obj.offset === 0.5) ? 'center' : 'left';\n }\n break;\n case 'After':\n if (ang >= fourty5 && ang <= one35) {\n hAlign = 'left';\n vAlign = obj.offset === 0.5 ? 'center' : 'top';\n }\n else if (ang >= two25 && ang <= three15) {\n hAlign = 'right';\n vAlign = obj.offset === 0.5 ? 'center' : 'bottom';\n }\n else if (ang > fourty5 && ang < two25) {\n vAlign = 'bottom';\n hAlign = obj.offset === 0.5 ? 'center' : 'right';\n }\n else {\n vAlign = 'top';\n hAlign = obj.offset === 0.5 ? 'center' : 'left';\n }\n break;\n case 'Center':\n hAlign = 'center';\n vAlign = 'center';\n break;\n }\n if (obj.offset === 0 || obj.offset === 1) {\n var direction = void 0;\n direction = getBezierDirection(pts[0], pts[1]);\n switch (direction) {\n case 'left':\n hAlign = obj.offset === 0 ? 'right' : 'left';\n break;\n case 'right':\n hAlign = obj.offset === 0 ? 'left' : 'right';\n break;\n case 'bottom':\n vAlign = obj.offset === 0 ? 'top' : 'bottom';\n break;\n case 'top':\n vAlign = obj.offset === 0 ? 'bottom' : 'top';\n break;\n }\n }\n return { hAlign: hAlign, vAlign: vAlign };\n}\n/** @private */\nexport function getBezierDirection(src, tar) {\n if (Math.abs(tar.x - src.x) > Math.abs(tar.y - src.y)) {\n return src.x < tar.x ? 'right' : 'left';\n }\n else {\n return src.y < tar.y ? 'bottom' : 'top';\n }\n}\n/** @private */\nexport function serialize(model) {\n var clonedObject = cloneObject(model, model.getCustomProperty);\n clonedObject.selectedItems.nodes = [];\n clonedObject.selectedItems.connectors = [];\n clonedObject.selectedItems.wrapper = null;\n return JSON.stringify(clonedObject);\n}\n/** @private */\nexport function deserialize(model, diagram) {\n diagram.clear();\n diagram.protectPropertyChange(true);\n var map = diagram.dataSourceSettings.doBinding;\n var nodeTemp = diagram.setNodeTemplate;\n var getDescription = diagram.getDescription;\n var getCustomProperty = diagram.getCustomProperty;\n var commands = {};\n for (var _i = 0, _a = diagram.commandManager.commands; _i < _a.length; _i++) {\n var command = _a[_i];\n commands[command.name] = { execute: command.execute, canExecute: command.canExecute };\n }\n var arrangeTickHorizontal = diagram.rulerSettings.horizontalRuler.arrangeTick;\n var arrangeTickVertical = diagram.rulerSettings.verticalRuler.arrangeTick;\n var getLayoutInfo = diagram.layout.getLayoutInfo;\n var getBranch = diagram.layout.getBranch;\n var nodeDefaults = diagram.getNodeDefaults;\n var connectorDefaults = diagram.getConnectorDefaults;\n var dataObj = JSON.parse(model);\n diagram.contextMenuSettings = dataObj.contextMenuSettings;\n diagram.constraints = dataObj.constraints;\n diagram.tool = dataObj.tool;\n diagram.bridgeDirection = dataObj.bridgeDirection;\n diagram.pageSettings = dataObj.pageSettings;\n diagram.drawingObject = dataObj.drawingObject;\n diagram.tooltip = dataObj.tooltip;\n diagram.addInfo = dataObj.addInfo;\n diagram.getDescription = getDescription;\n diagram.scrollSettings = dataObj.scrollSettings;\n diagram.commandManager = dataObj.commandManager;\n diagram.layers = dataObj.layers;\n diagram.rulerSettings.horizontalRuler.arrangeTick = arrangeTickHorizontal;\n diagram.rulerSettings.verticalRuler.arrangeTick = arrangeTickVertical;\n for (var _b = 0, _c = diagram.commandManager.commands; _b < _c.length; _b++) {\n var cmd = _c[_b];\n if (commands[cmd.name]) {\n cmd.execute = commands[cmd.name].execute;\n cmd.canExecute = commands[cmd.name].canExecute;\n }\n }\n diagram.backgroundColor = dataObj.backgroundColor;\n diagram.basicElements = dataObj.basicElements;\n diagram.connectors = dataObj.connectors;\n diagram.dataSourceSettings = dataObj.dataSourceSettings;\n diagram.dataSourceSettings.doBinding = map;\n diagram.height = dataObj.height;\n diagram.setNodeTemplate = nodeTemp;\n diagram.getConnectorDefaults = connectorDefaults;\n diagram.getNodeDefaults = nodeDefaults;\n diagram.getCustomProperty = getCustomProperty;\n diagram.mode = dataObj.mode;\n diagram.nodes = dataObj.nodes;\n diagram.rulerSettings = dataObj.rulerSettings;\n diagram.snapSettings = dataObj.snapSettings;\n diagram.width = dataObj.width;\n diagram.layout = dataObj.layout;\n diagram.layout.getLayoutInfo = getFunction(getLayoutInfo);\n diagram.layout.getBranch = getFunction(getBranch);\n diagram.diagramActions = 0;\n diagram.isLoading = true;\n diagram.protectPropertyChange(false);\n var key = 'refresh';\n var component;\n for (var i = 0; i < diagram.views.length; i++) {\n component = diagram.views[diagram.views[i]];\n component.refresh();\n if (component instanceof Diagram) {\n diagram.element.classList.add('e-diagram');\n }\n }\n dataObj.selectedItems.nodes = [];\n dataObj.selectedItems.connectors = [];\n diagram.selectedItems = dataObj.selectedItems;\n return dataObj;\n}\n/** @private */\nexport function updateStyle(changedObject, target) {\n //since text style model is the super set of shape style model, we used text style model\n var style = target.style;\n var textElement = target;\n for (var _i = 0, _a = Object.keys(changedObject); _i < _a.length; _i++) {\n var key = _a[_i];\n switch (key) {\n case 'fill':\n style.fill = changedObject.fill;\n if (style instanceof StrokeStyle) {\n /* tslint:disable:no-string-literal */\n style['fill'] = 'transparent';\n }\n break;\n case 'textOverflow':\n style.textOverflow = changedObject.textOverflow;\n break;\n case 'opacity':\n style.opacity = changedObject.opacity;\n break;\n case 'strokeColor':\n style.strokeColor = changedObject.strokeColor;\n break;\n case 'strokeDashArray':\n style.strokeDashArray = changedObject.strokeDashArray;\n break;\n case 'strokeWidth':\n style.strokeWidth = changedObject.strokeWidth;\n break;\n case 'bold':\n style.bold = changedObject.bold;\n break;\n case 'color':\n style.color = changedObject.color;\n break;\n case 'textWrapping':\n style.textWrapping = changedObject.textWrapping;\n break;\n case 'fontFamily':\n style.fontFamily = changedObject.fontFamily;\n break;\n case 'fontSize':\n style.fontSize = changedObject.fontSize;\n break;\n case 'italic':\n style.italic = changedObject.italic;\n break;\n case 'textAlign':\n style.textAlign = changedObject.textAlign;\n break;\n case 'whiteSpace':\n style.whiteSpace = changedObject.whiteSpace;\n break;\n case 'textDecoration':\n style.textDecoration = changedObject.textDecoration;\n break;\n case 'gradient':\n style.gradient = changedObject.gradient;\n break;\n }\n }\n if (target instanceof TextElement) {\n textElement.refreshTextElement();\n }\n}\n/** @private */\nexport function updateHyperlink(changedObject, target, actualAnnotation) {\n var textElement = target;\n var hyperlink = textElement.hyperlink;\n for (var _i = 0, _a = Object.keys(changedObject); _i < _a.length; _i++) {\n var key = _a[_i];\n switch (key) {\n case 'color':\n textElement.style.color = hyperlink.color = changedObject.color;\n break;\n case 'content':\n textElement.content = hyperlink.content = changedObject.content || hyperlink.link;\n break;\n case 'link':\n var labelStyle = actualAnnotation.style;\n textElement.style.color = changedObject.link ? hyperlink.color : labelStyle.color;\n textElement.style.textDecoration = changedObject.link ? hyperlink.textDecoration : actualAnnotation.style.textDecoration;\n textElement.content = changedObject.link ? hyperlink.content || changedObject.link : actualAnnotation.content;\n hyperlink.link = changedObject.link;\n break;\n case 'textDecoration':\n textElement.style.textDecoration = hyperlink.textDecoration = changedObject.textDecoration;\n break;\n }\n }\n}\nexport function updateShapeContent(content, actualObject, diagram) {\n content.width = actualObject.width;\n content.height = actualObject.height;\n content.minHeight = actualObject.minHeight;\n content.maxHeight = actualObject.maxHeight;\n content.minWidth = actualObject.minWidth;\n content.maxWidth = actualObject.maxWidth;\n content.horizontalAlignment = actualObject.wrapper.children[0].horizontalAlignment;\n content.verticalAlignment = actualObject.wrapper.children[0].verticalAlignment;\n content.relativeMode = actualObject.wrapper.children[0].relativeMode;\n content.visible = actualObject.wrapper.children[0].visible;\n if (actualObject.shape instanceof Text) {\n content.margin = actualObject.shape.margin;\n }\n content.id = actualObject.wrapper.children[0].id;\n content.style = actualObject.style;\n var view;\n for (var _i = 0, _a = diagram.views; _i < _a.length; _i++) {\n var elementId = _a[_i];\n removeElement(actualObject.id + '_groupElement', elementId);\n removeElement(actualObject.id + '_content_groupElement', elementId);\n removeElement(actualObject.id + '_content_html_element', elementId);\n }\n actualObject.wrapper.children.splice(0, 1);\n actualObject.wrapper.children.splice(0, 0, content);\n}\n/** @private */\nexport function updateShape(node, actualObject, oldObject, diagram) {\n var content = new DiagramElement();\n var i;\n var textStyle;\n var nodeStyle;\n switch (node.shape.type) {\n case 'Path':\n var pathContent = new PathElement();\n pathContent.data = actualObject.shape.data;\n content = pathContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Image':\n var imageContent = new ImageElement();\n imageContent.source = actualObject.shape.source;\n imageContent.imageAlign = actualObject.shape.align;\n imageContent.imageScale = actualObject.shape.scale;\n content = imageContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Text':\n //issue\n var textContent = new TextElement();\n // (textContent as TextElement).content = (node.shape as TextModel).content;\n content = textContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Basic':\n var element = void 0;\n element = actualObject.shape.shape === 'Rectangle' ? new DiagramElement() : new PathElement();\n if (actualObject.shape.shape === 'Polygon') {\n element.data = getPolygonPath(actualObject.shape.points);\n }\n else {\n element.data = getBasicShape(actualObject.shape.shape);\n }\n updateShapeContent(content, actualObject, diagram);\n if (actualObject.shape.shape === 'Rectangle') {\n element.cornerRadius = actualObject.shape.cornerRadius;\n }\n content = element;\n break;\n case 'Flow':\n var flowShapeElement = new PathElement();\n flowShapeElement.data = getFlowShape(actualObject.shape.shape);\n content = flowShapeElement;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Native':\n var nativeContent = new DiagramNativeElement(node.id, diagram.element.id);\n nativeContent.content = actualObject.shape.content;\n nativeContent.scale = actualObject.shape.scale;\n content = nativeContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'HTML':\n var htmlContent = new DiagramHtmlElement(node.id, diagram.element.id);\n htmlContent.content = actualObject.shape.content;\n content = htmlContent;\n updateShapeContent(content, actualObject, diagram);\n }\n if (node.shape.type === undefined || node.shape.type === oldObject.shape.type) {\n updateContent(node, actualObject, diagram);\n }\n else {\n content.width = actualObject.wrapper.children[0].width;\n content.height = actualObject.wrapper.children[0].height;\n if (actualObject.shape instanceof Text) {\n content.margin = actualObject.shape.margin;\n }\n content.style = actualObject.style;\n actualObject.wrapper.children[0] = content;\n }\n}\n/** @private */\nexport function updateContent(newValues, actualObject, diagram) {\n if (Object.keys(newValues.shape).length > 0) {\n if (actualObject.shape.type === 'Path' && newValues.shape.data !== undefined) {\n actualObject.wrapper.children[0].data = newValues.shape.data;\n }\n else if (actualObject.shape.type === 'Text' && newValues.shape.content !== undefined) {\n actualObject.wrapper.children[0].content = newValues.shape.content;\n }\n else if (actualObject.shape.type === 'Image' && newValues.shape.source !== undefined) {\n actualObject.wrapper.children[0].source = newValues.shape.source;\n }\n else if (actualObject.shape.type === 'Native') {\n var nativeElement = void 0;\n for (var i = 0; i < diagram.views.length; i++) {\n nativeElement = getDiagramElement(actualObject.wrapper.children[0].id + '_groupElement', diagram.views[i]);\n if (newValues.shape.content !== undefined && nativeElement) {\n nativeElement.removeChild(nativeElement.children[0]);\n actualObject.wrapper.children[0].content = newValues.shape.content;\n nativeElement.appendChild(getContent(actualObject.wrapper.children[0], false));\n }\n }\n actualObject.wrapper.children[0].scale = newValues.shape.scale ?\n newValues.shape.scale : actualObject.wrapper.children[0].scale;\n }\n else if (actualObject.shape.type === 'HTML') {\n var htmlElement = void 0;\n for (var i = 0; i < diagram.views.length; i++) {\n htmlElement = getDiagramElement(actualObject.wrapper.children[0].id + '_html_element', diagram.views[i]);\n if (htmlElement) {\n htmlElement.removeChild(htmlElement.children[0]);\n actualObject.wrapper.children[0].content = newValues.shape.content;\n htmlElement.appendChild(getContent(actualObject.wrapper.children[0], true));\n }\n }\n }\n else if (actualObject.shape.type === 'Flow' && newValues.shape.shape !== undefined) {\n actualObject.shape.shape = newValues.shape.shape;\n var shapes = actualObject.shape.shape;\n var flowshapedata = getFlowShape(shapes.toString());\n actualObject.wrapper.children[0].data = flowshapedata;\n }\n else if (newValues.shape.cornerRadius !== undefined) {\n actualObject.wrapper.children[0].cornerRadius = newValues.shape.cornerRadius;\n }\n else if (newValues.shape.shape !== undefined) {\n actualObject.shape.shape = newValues.shape.shape;\n var shapes = actualObject.shape.shape;\n var basicShapeData = getBasicShape(shapes.toString());\n actualObject.wrapper.children[0].data = basicShapeData;\n }\n }\n}\n/** @private */\nexport function removeItem(array, item) {\n var index = array.indexOf(item);\n if (index >= 0) {\n array.splice(index, 1);\n }\n}\n/** @private */\nexport function updateConnector(connector, points) {\n var srcPoint;\n var anglePoint;\n var srcDecorator;\n var tarDecorator;\n var targetPoint;\n connector.intermediatePoints = points;\n connector.updateSegmentElement(connector, points, connector.wrapper.children[0]);\n srcPoint = connector.sourcePoint;\n srcDecorator = connector.sourceDecorator;\n if (connector.type === 'Bezier') {\n var firstSegment = connector.segments[0];\n var lastSegment = connector.segments[connector.segments.length - 1];\n anglePoint = [!Point.isEmptyPoint(lastSegment.point2) ? lastSegment.point2 : lastSegment.bezierPoint2,\n !Point.isEmptyPoint(firstSegment.point1) ? firstSegment.point1 : firstSegment.bezierPoint1];\n }\n else {\n anglePoint = connector.intermediatePoints;\n }\n points = connector.clipDecorators(connector, points);\n var element = connector.wrapper.children[1];\n connector.updateDecoratorElement(element, points[0], anglePoint[1], srcDecorator);\n targetPoint = connector.targetPoint;\n tarDecorator = connector.targetDecorator;\n element = connector.wrapper.children[2];\n connector.updateDecoratorElement(element, points[points.length - 1], anglePoint[anglePoint.length - 2], tarDecorator);\n connector.updateShapeElement(connector);\n}\n/** @private */\nexport function getUserHandlePosition(selectorItem, handle, transform) {\n var wrapper = selectorItem.wrapper;\n var positionPoints;\n var bounds = wrapper.bounds;\n var offset = handle.offset;\n var size = handle.size / transform.scale;\n var margin = handle.margin;\n var point;\n var left = wrapper.offsetX - wrapper.actualSize.width * wrapper.pivot.x;\n var top = wrapper.offsetY - wrapper.actualSize.height * wrapper.pivot.y;\n point = { x: 0, y: 0 };\n if (selectorItem.nodes.length > 0) {\n switch (handle.side) {\n case 'Top':\n point.x += left + bounds.width * offset;\n point.y += top - size;\n break;\n case 'Bottom':\n point.x += left + offset * bounds.width;\n point.y += top + wrapper.actualSize.height + size;\n break;\n case 'Left':\n point.x += left - size;\n point.y += top + offset * bounds.height;\n break;\n case 'Right':\n point.x += left + wrapper.actualSize.width + size;\n point.y += top + offset * bounds.height;\n break;\n }\n point.x += (margin.left - margin.right) +\n (size / 2) * (handle.horizontalAlignment === 'Center' ? 0 : (handle.horizontalAlignment === 'Right' ? -1 : 1));\n point.y += (margin.top - margin.bottom) +\n (size / 2) * (handle.verticalAlignment === 'Center' ? 0 : (handle.verticalAlignment === 'Top' ? -1 : 1));\n }\n else if (selectorItem.connectors.length > 0) {\n var connector = selectorItem.connectors[0];\n var annotation = { offset: offset };\n var connectorOffset = getOffsetOfConnector(connector.intermediatePoints, annotation, bounds);\n var index = connectorOffset.index;\n point = connectorOffset.point;\n var getPointloop = getAnnotationPosition(connector.intermediatePoints, annotation, bounds);\n var points = connector.intermediatePoints;\n var offsetLength = void 0;\n var angle = getPointloop.angle;\n var matrix = identityMatrix();\n rotateMatrix(matrix, -angle, connector.intermediatePoints[index].x, connector.intermediatePoints[index].y);\n point = transformPointByMatrix(matrix, point);\n point.x += (margin.left - margin.right) +\n (size / 2) * (handle.horizontalAlignment === 'Center' ? 0 : (handle.horizontalAlignment === 'Right' ? -1 : 1));\n point.y += (margin.top - margin.bottom) +\n (size / 2) * (handle.verticalAlignment === 'Center' ? 0 : (handle.verticalAlignment === 'Top' ? -1 : 1));\n matrix = identityMatrix();\n rotateMatrix(matrix, angle, connector.intermediatePoints[index].x, connector.intermediatePoints[index].y);\n point = transformPointByMatrix(matrix, point);\n }\n if (wrapper.rotateAngle !== 0 || wrapper.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, wrapper.rotateAngle + wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY);\n point = transformPointByMatrix(matrix, point);\n }\n return point;\n}\n/** @private */\nexport function canResizeCorner(selectorConstraints, action, thumbsConstraints, selectedItems) {\n if (selectedItems.annotation) {\n if (canResize(selectedItems.annotation)) {\n return true;\n }\n }\n else if ((SelectorConstraints[action] & selectorConstraints) && (ThumbsConstraints[action] & thumbsConstraints)) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function canShowCorner(selectorConstraints, action) {\n if (SelectorConstraints[action] & selectorConstraints) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function checkPortRestriction(port, portVisibility) {\n return port.visibility & portVisibility;\n}\n/** @private */\nexport function findAnnotation(node, id) {\n var annotation;\n if (node.shape.type === 'Text') {\n annotation = (node.shape);\n }\n else {\n var annotationId = id.split('_');\n id = annotationId[annotationId.length - 1];\n for (var i = 0; i < node.annotations.length; i++) {\n if (id === node.annotations[i].id) {\n annotation = node.annotations[i];\n }\n }\n }\n return annotation;\n}\n/** @private */\nexport function findPort(node, id) {\n var port;\n var portId = id.split('_');\n id = portId[portId.length - 1];\n for (var i = 0; i < node.ports.length; i++) {\n if (id === node.ports[i].id) {\n return node.ports[i];\n }\n }\n return port;\n}\n/** @private */\nexport function findObjectIndex(node, id, annotation) {\n var index;\n var collection = (annotation) ? node.annotations : node.ports;\n for (var i = 0; i < collection.length; i++) {\n if (collection[i].id === id) {\n return (i).toString();\n }\n }\n return null;\n}\n/** @private */\nexport function getObjectFromCollection(obj, id) {\n var i;\n for (i = 0; i < obj.length; i++) {\n if (id === obj[i].id) {\n return true;\n }\n }\n return false;\n}\n/** @private */\nexport function scaleElement(element, sw, sh, refObject) {\n if (element.width !== undefined && element.height !== undefined) {\n element.width *= sw;\n element.height *= sh;\n }\n if (element instanceof Container) {\n var matrix = identityMatrix();\n var width = refObject.width || refObject.actualSize.width;\n var height = refObject.height || refObject.actualSize.height;\n if (width !== undefined && height !== undefined) {\n var x = refObject.offsetX - width * refObject.pivot.x;\n var y = refObject.offsetY - height * refObject.pivot.y;\n var refPoint = {\n x: x + width * refObject.pivot.x,\n y: y + height * refObject.pivot.y\n };\n refPoint = rotatePoint(refObject.rotateAngle, refObject.offsetX, refObject.offsetY, refPoint);\n rotateMatrix(matrix, -refObject.rotateAngle, refPoint.x, refPoint.y);\n scaleMatrix(matrix, sw, sh, refPoint.x, refPoint.y);\n rotateMatrix(matrix, refObject.rotateAngle, refPoint.x, refPoint.y);\n for (var _i = 0, _a = element.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.width !== undefined && child.height !== undefined) {\n var newPosition = transformPointByMatrix(matrix, { x: child.offsetX, y: child.offsetY });\n child.offsetX = newPosition.x;\n child.offsetY = newPosition.y;\n scaleElement(child, sw, sh, refObject);\n }\n }\n }\n }\n}\nexport function arrangeChild(obj, x, y, nameTable, drop, diagram) {\n var child = obj.children;\n var node;\n for (var i = 0; i < child.length; i++) {\n node = nameTable[child[i]];\n if (node) {\n if (node.children) {\n this.arrangeChild(node, x, y, nameTable, drop, diagram);\n }\n else {\n node.offsetX -= x;\n node.offsetY -= y;\n if (!drop) {\n var content = void 0;\n var container = void 0;\n nameTable[node.id] = node;\n container = node.initContainer();\n if (!container.children) {\n container.children = [];\n }\n content = node.init(diagram);\n container.children.push(content);\n container.measure(new Size(node.width, node.height));\n container.arrange(container.desiredSize);\n }\n }\n }\n }\n}\n/** @private */\nexport function insertObject(obj, key, collection) {\n if (collection.length === 0) {\n collection.push(obj);\n }\n else if (collection.length === 1) {\n if (collection[0][key] > obj[key]) {\n collection.splice(0, 0, obj);\n }\n else {\n collection.push(obj);\n }\n }\n else if (collection.length > 1) {\n var low = 0;\n var high = collection.length - 1;\n var mid = Math.floor((low + high) / 2);\n while (mid !== low) {\n if (collection[mid][key] < obj[key]) {\n low = mid;\n mid = Math.floor((low + high) / 2);\n }\n else if (collection[mid][key] > obj[key]) {\n high = mid;\n mid = Math.floor((low + high) / 2);\n }\n }\n if (collection[high][key] < obj[key]) {\n collection.push(obj);\n }\n else if (collection[low][key] > obj[key]) {\n collection.splice(low, 0, obj);\n }\n else if ((collection[low][key] < obj[key]) && collection[high][key] > obj[key]) {\n collection.splice(high, 0, obj);\n }\n }\n}\n/** @private */\nexport function getElement(element) {\n var diagramElement = document.getElementById(element.diagramId);\n var instance = 'ej2_instances';\n var node = {};\n var nodes = diagramElement[instance][0].nodes;\n if (nodes === undefined) {\n nodes = getPaletteSymbols(diagramElement[instance][0]);\n }\n var length = 'length';\n for (var i = 0; nodes && i < nodes[length]; i++) {\n if (nodes[i].id === element.nodeId) {\n return nodes[i];\n }\n }\n var enterObject = diagramElement[instance][0].enterObject;\n if (enterObject && (enterObject['id'] === element.nodeId || enterObject['children'])) {\n if (enterObject['children'] && groupHasType(enterObject, 'HTML', diagramElement[instance][0].enterTable)) {\n return diagramElement[instance][0].enterTable[element.nodeId];\n }\n else {\n return enterObject;\n }\n }\n return null;\n}\n/** @private */\nfunction getPaletteSymbols(symbolPalette) {\n var nodes = [];\n for (var i = 0; i < symbolPalette.palettes.length; i++) {\n var symbols = symbolPalette.palettes[i].symbols;\n for (var j = 0; j < symbols.length; j++) {\n if (symbols[j] instanceof Node) {\n nodes.push(symbols[j]);\n }\n }\n }\n return nodes;\n}\n/** @private */\nexport function getPoint(x, y, w, h, angle, offsetX, offsetY, cornerPoint) {\n var pivot = { x: 0, y: 0 };\n var trans = identityMatrix();\n rotateMatrix(trans, angle, offsetX, offsetY);\n switch (cornerPoint.x) {\n case 0:\n switch (cornerPoint.y) {\n case 0:\n pivot = transformPointByMatrix(trans, ({ x: x, y: y }));\n break;\n case 0.5:\n pivot = transformPointByMatrix(trans, ({ x: x, y: y + h / 2 }));\n break;\n case 1:\n pivot = transformPointByMatrix(trans, ({ x: x, y: y + h }));\n break;\n }\n break;\n case 0.5:\n switch (cornerPoint.y) {\n case 0:\n pivot = transformPointByMatrix(trans, ({ x: x + w / 2, y: y }));\n break;\n case 0.5:\n pivot = transformPointByMatrix(trans, ({ x: x + w / 2, y: y + h / 2 }));\n break;\n case 1:\n pivot = transformPointByMatrix(trans, ({ x: x + w / 2, y: y + h }));\n break;\n }\n break;\n case 1:\n switch (cornerPoint.y) {\n case 0:\n pivot = transformPointByMatrix(trans, ({ x: x + w, y: y }));\n break;\n case 0.5:\n pivot = transformPointByMatrix(trans, ({ x: x + w, y: y + h / 2 }));\n break;\n case 1:\n pivot = transformPointByMatrix(trans, ({ x: x + w, y: y + h }));\n break;\n }\n break;\n }\n return { x: pivot.x, y: pivot.y };\n}\n/**\n * Get the object as Node | Connector\n * @param obj\n */\nexport var getObjectType = function (obj) {\n if (obj) {\n if (obj.sourceID !== undefined || obj.sourcePoint !== undefined ||\n obj.targetID !== undefined || obj.targetPoint !== undefined ||\n obj.type !== undefined) {\n obj = Connector;\n }\n else {\n obj = Node;\n }\n }\n return obj;\n};\n","import { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { processPathData, splitArrayCollection, transformPath } from './path-util';\nimport { whiteSpaceToString, wordBreakToString, textAlignToString, bBoxText } from './base-util';\nimport { identityMatrix, transformPointByMatrix, rotateMatrix } from '../primitives/matrix';\nimport { compile, createElement, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from './diagram-util';\n/**\n * Defines the functionalities that need to access DOM\n */\n/** @private */\nexport function findSegmentPoints(element) {\n var pts = [];\n var sample;\n var sampleLength;\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var svg = window[measureElement].children[2];\n var pathNode = getChildNode(svg)[0];\n pathNode.setAttributeNS(null, 'd', element.data);\n var pathBounds = element.absoluteBounds; // || pathNode.getBBox();\n var pathData = updatePath(element, pathBounds, element);\n pathNode.setAttributeNS(null, 'd', pathData);\n var pathLength = pathNode.getTotalLength();\n for (sampleLength = 0; sampleLength <= pathLength; sampleLength += 10) {\n sample = pathNode.getPointAtLength(sampleLength);\n pts.push({ x: sample.x, y: sample.y });\n }\n window[measureElement].style.visibility = 'hidden';\n return pts;\n}\nexport function getChildNode(node) {\n var child;\n var collection = [];\n if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n for (var i = 0; i < node.childNodes.length; i++) {\n child = node.childNodes[i];\n if (child.nodeType === 1) {\n collection.push(child);\n }\n }\n }\n else {\n collection = node.children;\n }\n return collection;\n}\nexport function translatePoints(element, points) {\n var translatedPts = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n var pt1 = {\n x: element.offsetX - element.actualSize.width * element.pivot.x + point.x,\n y: element.offsetY - element.actualSize.height * element.pivot.y + point.y\n };\n var matrix = void 0;\n var angle = element.rotateAngle + element.parentTransform;\n if (angle) {\n matrix = identityMatrix();\n rotateMatrix(matrix, angle, element.offsetX, element.offsetY);\n }\n if (matrix) {\n pt1 = transformPointByMatrix(matrix, pt1);\n }\n translatedPts.push(pt1);\n }\n return translatedPts;\n}\n/** @private */\nexport function measurePath(data) {\n if (data) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var svg = window[measureElement].children[2];\n var element = getChildNode(svg)[0];\n element.setAttribute('d', data);\n var bounds = element.getBBox();\n var svgBounds = new Rect(bounds.x, bounds.y, bounds.width, bounds.height);\n window[measureElement].style.visibility = 'hidden';\n return svgBounds;\n }\n return new Rect(0, 0, 0, 0);\n}\nfunction getTextOptions(element, maxWidth) {\n var options = {\n fill: element.style.fill, stroke: element.style.strokeColor, angle: element.rotateAngle + element.parentTransform,\n pivotX: element.pivot.x, pivotY: element.pivot.y, strokeWidth: element.style.strokeWidth,\n dashArray: element.style.strokeDashArray, opacity: element.style.opacity, shadow: element.shadow,\n gradient: element.style.gradient, visible: element.visible, id: element.id, description: element.description,\n width: maxWidth || element.actualSize.width, height: element.actualSize.height,\n x: element.offsetX - element.actualSize.width * element.pivot.x + 0.5,\n y: element.offsetY - element.actualSize.height * element.pivot.y + 0.5\n };\n options.fontSize = element.style.fontSize;\n options.fontFamily = element.style.fontFamily;\n options.textOverflow = element.style.textOverflow;\n options.textDecoration = element.style.textDecoration;\n options.doWrap = element.doWrap;\n options.whiteSpace = whiteSpaceToString(element.style.whiteSpace, element.style.textWrapping);\n options.content = element.content;\n options.textWrapping = element.style.textWrapping;\n options.breakWord = wordBreakToString(element.style.textWrapping);\n options.textAlign = textAlignToString(element.style.textAlign);\n options.color = element.style.color;\n options.italic = element.style.italic;\n options.bold = element.style.bold;\n options.dashArray = '';\n options.strokeWidth = 0;\n options.fill = '';\n return options;\n}\nfunction wrapSvgText(text, textValue) {\n var childNodes = [];\n var k = 0;\n var txtValue;\n var bounds1;\n var content = textValue || text.content;\n if (text.whiteSpace !== 'nowrap' && text.whiteSpace !== 'pre') {\n if (text.breakWord === 'breakall') {\n txtValue = '';\n txtValue += content[0];\n for (k = 0; k < content.length; k++) {\n bounds1 = bBoxText(txtValue, text);\n if (bounds1 >= text.width && txtValue.length > 0) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: bounds1 };\n txtValue = '';\n }\n else {\n txtValue = txtValue + (content[k + 1] || '');\n if (txtValue.indexOf('\\n') > -1) {\n txtValue = txtValue.replace('\\n', '');\n }\n var width = bBoxText(txtValue, text);\n if (Math.ceil(width) + 2 >= text.width && txtValue.length > 0) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: width };\n txtValue = '';\n }\n if (k === content.length - 1 && txtValue.length > 0) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: width };\n txtValue = '';\n }\n }\n }\n }\n else {\n childNodes = wordWrapping(text, textValue);\n }\n }\n else {\n childNodes[childNodes.length] = { text: content, x: 0, dy: 0, width: bBoxText(content, text) };\n }\n return childNodes;\n}\nfunction wordWrapping(text, textValue) {\n var childNodes = [];\n var txtValue = '';\n var j = 0;\n var i = 0;\n var wrap = text.whiteSpace !== 'nowrap' ? true : false;\n var content = textValue || text.content;\n var eachLine = content.split('\\n');\n var txt;\n var words;\n var newText;\n var existingWidth;\n var existingText;\n for (j = 0; j < eachLine.length; j++) {\n txt = '';\n words = text.textWrapping !== 'NoWrap' ? eachLine[j].split(' ') : eachLine;\n for (i = 0; i < words.length; i++) {\n txtValue += (((i !== 0 || words.length === 1) && wrap && txtValue.length > 0) ? ' ' : '') + words[i];\n newText = txtValue + (words[i + 1] || '');\n var width = bBoxText(newText, text);\n if (Math.floor(width) > text.width - 2 && txtValue.length > 0) {\n childNodes[childNodes.length] = {\n text: txtValue, x: 0, dy: 0,\n width: newText === txtValue ? width : (txtValue === existingText) ? existingWidth : bBoxText(txtValue, text)\n };\n txtValue = '';\n }\n else {\n if (i === words.length - 1) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: width };\n txtValue = '';\n }\n }\n existingText = newText;\n existingWidth = width;\n }\n }\n return childNodes;\n}\nfunction wrapSvgTextAlign(text, childNodes) {\n var wrapBounds = { x: 0, width: 0 };\n var k = 0;\n var txtWidth;\n var width;\n for (k = 0; k < childNodes.length; k++) {\n txtWidth = childNodes[k].width;\n width = txtWidth;\n if (text.textAlign === 'left') {\n txtWidth = 0;\n }\n else if (text.textAlign === 'center') {\n if (txtWidth > text.width && (text.textOverflow === 'Ellipsis' || text.textOverflow === 'Clip')) {\n txtWidth = 0;\n }\n else {\n txtWidth = -txtWidth / 2;\n }\n }\n else if (text.textAlign === 'right') {\n txtWidth = -txtWidth;\n }\n else {\n txtWidth = childNodes.length > 1 ? 0 : -txtWidth / 2;\n }\n childNodes[k].dy = text.fontSize * 1.2;\n childNodes[k].x = txtWidth;\n if (!wrapBounds) {\n wrapBounds = {\n x: txtWidth,\n width: width\n };\n }\n else {\n wrapBounds.x = Math.min(wrapBounds.x, txtWidth);\n wrapBounds.width = Math.max(wrapBounds.width, width);\n }\n }\n return wrapBounds;\n}\nexport function measureHtmlText(style, content, width, height, maxWidth) {\n var bounds = new Size();\n var text = createHtmlElement('span', { 'style': 'display:inline-block; line-height: normal' });\n if (style.bold) {\n text.style.fontWeight = 'bold';\n }\n if (style.italic) {\n text.style.fontStyle = 'italic';\n }\n if (width !== undefined) {\n text.style.width = width.toString() + 'px';\n }\n if (height !== undefined) {\n text.style.height = height.toString() + 'px';\n }\n if (maxWidth !== undefined) {\n text.style.maxWidth = maxWidth.toString() + 'px';\n }\n text.style.fontFamily = style.fontFamily;\n text.style.fontSize = style.fontSize + 'px';\n text.style.color = style.color;\n text.textContent = content;\n text.style.whiteSpace = whiteSpaceToString(style.whiteSpace, style.textWrapping);\n if (maxWidth !== undefined) {\n text.style.wordBreak = 'break-word';\n }\n else {\n text.style.wordBreak = wordBreakToString(style.textWrapping);\n }\n document.body.appendChild(text);\n bounds.width = text.offsetWidth;\n bounds.height = text.offsetHeight;\n document.body.removeChild(text);\n return bounds;\n}\n/** @private */\nexport function measureText(text, style, content, maxWidth, textValue) {\n var bounds = new Size(0, 0);\n var childNodes;\n var wrapBounds;\n var options = getTextOptions(text, maxWidth);\n text.childNodes = childNodes = wrapSvgText(options, textValue);\n text.wrapBounds = wrapBounds = wrapSvgTextAlign(options, childNodes);\n bounds.width = wrapBounds.width;\n bounds.height = childNodes.length * text.style.fontSize;\n return bounds;\n}\n/** @private */\nexport function measureImage(source, contentSize) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var imageElement = window[measureElement].children[1];\n imageElement.setAttribute('src', source);\n var bounds = imageElement.getBoundingClientRect();\n var width = bounds.width;\n var height = bounds.height;\n contentSize = new Size(width, height);\n window[measureElement].style.visibility = 'hidden';\n return contentSize;\n}\n/** @private */\nexport function measureNativeContent(nativeContent) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var nativeSVG = window[measureElement].children[2];\n nativeSVG.appendChild(nativeContent);\n var bounds = nativeContent.getBoundingClientRect();\n var svgBounds = nativeSVG.getBoundingClientRect();\n var rect = bounds;\n rect.x = bounds.left - svgBounds.left;\n rect.y = bounds.top - svgBounds.top;\n nativeSVG.removeChild(nativeContent);\n window[measureElement].style.visibility = 'hidden';\n return rect;\n}\n/**\n * @private\n */\nexport function measureNativeSvg(nativeContent) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var nativeSVG = window[measureElement].children[2];\n nativeSVG.appendChild(nativeContent);\n var svgBounds = nativeSVG.getBoundingClientRect();\n nativeSVG.removeChild(nativeContent);\n window[measureElement].style.visibility = 'hidden';\n return svgBounds;\n}\n/** @private */\nexport function updatePath(element, bounds, child) {\n var initX = 0;\n var initY = 0;\n var scaleX = 0;\n var scaleY = 0;\n var isScale = false;\n var bBox;\n var isInit;\n var isResizing = true;\n var newPathString = '';\n var arrayCollection = [];\n bBox = bounds;\n if (initX !== bBox.x || initY !== bBox.y) {\n scaleX = initX - Number(bBox.x);\n scaleY = initY - Number(bBox.y);\n }\n if (element.actualSize.width !== bBox.width || element.actualSize.height !== bBox.height) {\n scaleX = element.actualSize.width / Number(bBox.width ? bBox.width : 1);\n scaleY = element.actualSize.height / Number(bBox.height ? bBox.height : 1);\n isScale = true;\n }\n arrayCollection = processPathData(element.data);\n arrayCollection = splitArrayCollection(arrayCollection);\n newPathString = transformPath(arrayCollection, scaleX, scaleY, isScale, bBox.x, bBox.y, initX, initY);\n isScale = false;\n return newPathString;\n}\n/** @private */\nexport function getDiagramLayerSvg(diagramId) {\n var diagramLayerSvg;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-diagram-layer');\n diagramLayerSvg = elementcoll[0];\n return diagramLayerSvg;\n}\n/** @private */\nexport function getDiagramElement(elementId, contentId) {\n var diagramElement;\n var element;\n if (contentId) {\n element = document.getElementById(contentId);\n }\n diagramElement = (element) ? element.querySelector('#' + elementId) : document.getElementById(elementId);\n return diagramElement;\n}\n/**\n * @private\n */\nexport function getAdornerLayerSvg(diagramId) {\n var adornerLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-adorner-layer');\n adornerLayerSvg = elementcoll[0];\n return adornerLayerSvg;\n}\n/** @private */\nexport function getSelectorElement(diagramId) {\n var adornerLayer = null;\n var adornerSvg = getAdornerLayerSvg(diagramId);\n adornerLayer = adornerSvg.getElementById(diagramId + '_SelectorElement');\n return adornerLayer;\n}\n/**\n * @private\n */\nexport function getAdornerLayer(diagramId) {\n var adornerLayer = null;\n var diagramAdornerSvg = getAdornerLayerSvg(diagramId);\n adornerLayer = diagramAdornerSvg.getElementById(diagramId + '_diagramAdorner');\n return adornerLayer;\n}\n// /** @private */\n// export function getDiagramLayer(diagramId: string): SVGElement {\n// let diagramLayer: SVGElement;\n// let diagramLayerSvg: SVGSVGElement = getDiagramLayerSvg(diagramId);\n// diagramLayer = diagramLayerSvg.getElementById(diagramId + '_diagramLayer') as SVGElement;\n// return diagramLayer;\n// }\n/** @private */\nexport function getPortLayerSvg(diagramId) {\n var adornerLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-ports-expand-layer');\n adornerLayerSvg = elementcoll[0];\n return adornerLayerSvg;\n}\n/** @private */\nexport function getNativeLayerSvg(diagramId) {\n var nativeLayerSvg;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-native-layer');\n nativeLayerSvg = elementcoll[0];\n return nativeLayerSvg;\n}\n/** @private */\nexport function getGridLayerSvg(diagramId) {\n var gridLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-grid-layer');\n gridLayerSvg = elementcoll[0];\n return gridLayerSvg;\n}\n/** @private */\nexport function getBackgroundLayerSvg(diagramId) {\n var gridLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll = diagramElement.getElementsByClassName('e-background-layer');\n return elementcoll[0].parentNode;\n}\n/** @private */\nexport function getBackgroundImageLayer(diagramId) {\n var imageLayer = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-background-image-layer');\n imageLayer = elementcoll[0];\n return imageLayer;\n}\n/** @private */\nexport function getBackgroundLayer(diagramId) {\n var imageLayer = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-background-layer');\n imageLayer = elementcoll[0];\n return imageLayer;\n}\n/** @private */\nexport function getGridLayer(diagramId) {\n var expandCollapse = null;\n var diagramGridSvg = getGridLayerSvg(diagramId);\n expandCollapse = diagramGridSvg.getElementById(diagramId + '_gridline');\n return expandCollapse;\n}\n// /** @private */\n// export function getExpandCollapseLayer(diagramId: string): SVGElement {\n// let expandCollapse: SVGElement = null;\n// let diagramPortSvg: SVGSVGElement = getPortLayerSvg(diagramId);\n// expandCollapse = diagramPortSvg.getElementById(diagramId + '_diagramExpander') as SVGElement;\n// return expandCollapse;\n// }\n// /** @private */\n// export function getPortsLayer(diagramId: string): SVGElement {\n// let expandCollapse: SVGElement = null;\n// let diagramPortSvg: SVGSVGElement = getPortLayerSvg(diagramId);\n// expandCollapse = diagramPortSvg.getElementById(diagramId + '_diagramPorts') as SVGElement;\n// return expandCollapse;\n// }\n/** @private */\nexport function getNativeLayer(diagramId) {\n var nativeLayer = null;\n var nativeLayerSvg = getNativeLayerSvg(diagramId);\n nativeLayer = nativeLayerSvg.getElementById(diagramId + '_nativeLayer');\n return nativeLayer;\n}\n/** @private */\nexport function getHTMLLayer(diagramId) {\n var htmlLayer = null;\n var element = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = element.getElementsByClassName('e-html-layer');\n htmlLayer = elementcoll[0];\n return htmlLayer;\n}\n/** @private */\nexport function createHtmlElement(elementType, attribute) {\n var element = createElement(elementType);\n setAttributeHtml(element, attribute);\n return element;\n}\n/** @private */\nexport function createSvgElement(elementType, attribute) {\n var element = document.createElementNS('http://www.w3.org/2000/svg', elementType);\n setAttributeSvg(element, attribute);\n return element;\n}\n/** @hidden */\nexport function parentsUntil(elem, selector, isID) {\n var parent = elem;\n while (parent) {\n if (isID ? parent.id === selector : hasClass(parent, selector)) {\n break;\n }\n parent = parent.parentNode;\n }\n return parent;\n}\nexport function hasClass(element, className) {\n var eClassName = (typeof element.className === 'object') ? element.className.animVal : element.className;\n return ((' ' + eClassName + ' ').indexOf(' ' + className + ' ') > -1) ? true : false;\n}\n/** @hidden */\nexport function getScrollerWidth() {\n var outer = createHtmlElement('div', { 'style': 'visibility:hidden; width: 100px' });\n document.body.appendChild(outer);\n var widthNoScroll = outer.getBoundingClientRect().width;\n // force scrollbars\n outer.style.overflow = 'scroll';\n // add innerdiv\n var inner = createHtmlElement('div', { 'style': 'width:100%' });\n outer.appendChild(inner);\n var widthWithScroll = inner.getBoundingClientRect().width;\n // remove divs\n outer.parentNode.removeChild(outer);\n return widthNoScroll - widthWithScroll;\n}\n/**\n * Handles the touch pointer.\n * @return {boolean}\n * @private\n */\nexport function addTouchPointer(touchList, e, 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 return touchList;\n}\n/**\n * removes the element from dom\n * @param elementId\n */\nexport function removeElement(elementId, contentId) {\n var div = getDiagramElement(elementId, contentId);\n if (div) {\n div.parentNode.removeChild(div);\n }\n}\nexport function getContent(element, isHtml) {\n var div;\n if (isHtml) {\n var attr = { 'style': 'height: 100%; width: 100%' };\n div = createHtmlElement('div', attr);\n }\n else {\n div = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n }\n var node = getElement(element);\n var item;\n if (typeof element.content === 'string') {\n var compiledString = void 0;\n compiledString = compile(element.content);\n for (var _i = 0, _a = compiledString(node); _i < _a.length; _i++) {\n item = _a[_i];\n div.appendChild(item);\n }\n }\n else {\n div.appendChild(element.content);\n }\n return isHtml ? div.cloneNode(true) : div.cloneNode(true);\n}\n/** @private */\nexport function setAttributeSvg(svg, attributes) {\n var keys = Object.keys(attributes);\n for (var i = 0; i < keys.length; i++) {\n svg.setAttribute(keys[i], attributes[keys[i]]);\n }\n}\n/** @private */\nexport function setAttributeHtml(element, attributes) {\n var keys = Object.keys(attributes);\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], attributes[keys[i]]);\n }\n}\n/** @private */\nexport function createMeasureElements() {\n var measureElement = 'measureElement';\n if (!window[measureElement]) {\n var divElement = createHtmlElement('div', {\n id: 'measureElement',\n style: 'visibility:hidden ; height: 0px ; width: 0px'\n });\n var text = createHtmlElement('span', { 'style': 'display:inline-block ; line-height: normal' });\n divElement.appendChild(text);\n var imageElement = void 0;\n imageElement = createHtmlElement('img', {});\n divElement.appendChild(imageElement);\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('xlink', 'http://www.w3.org/1999/xlink');\n divElement.appendChild(svg);\n var element = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n svg.appendChild(element);\n var data = document.createTextNode('');\n var tSpan = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n svg.appendChild(tSpan);\n window[measureElement] = divElement;\n window[measureElement].usageCount = 1;\n document.body.appendChild(divElement);\n }\n else {\n window[measureElement].usageCount += 1;\n }\n}\n","import { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { identityMatrix, transformPointByMatrix, rotateMatrix } from '../primitives/matrix';\nimport { getValue } from '@syncfusion/ej2-base';\nimport { getChildNode } from './dom-util';\n/**\n * Implements the basic functionalities\n */\n/** @private */\nexport function randomId() {\n var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz';\n var id = '';\n var num;\n for (var i = 0; i < 5; i++) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var count = new Uint16Array(1);\n // tslint:disable-next-line:no-any\n var intCrypto = window.msCrypto || window.crypto;\n num = intCrypto.getRandomValues(count)[0] % (chars.length - 1);\n }\n else {\n num = Math.floor(Math.random() * chars.length);\n }\n if (i === 0 && num < 10) {\n i--;\n continue;\n }\n id += chars.substring(num, num + 1);\n }\n return id;\n}\n/** @private */\nexport function cornersPointsBeforeRotation(ele) {\n var bounds = new Rect();\n var top = ele.offsetY - ele.actualSize.height * ele.pivot.y;\n var bottom = ele.offsetY + ele.actualSize.height * (1 - ele.pivot.y);\n var left = ele.offsetX - ele.actualSize.width * ele.pivot.x;\n var right = ele.offsetX + ele.actualSize.width * (1 - ele.pivot.x);\n var topLeft = { x: left, y: top };\n var topCenter = { x: (left + right) / 2, y: top };\n var topRight = { x: right, y: top };\n var middleLeft = { x: left, y: (top + bottom) / 2 };\n var middleRight = { x: right, y: (top + bottom) / 2 };\n var bottomLeft = { x: left, y: bottom };\n var bottomCenter = { x: (left + right) / 2, y: bottom };\n var bottomRight = { x: right, y: bottom };\n bounds = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n return bounds;\n}\n/** @private */\nexport function getBounds(element) {\n var bounds = new Rect();\n var corners;\n corners = cornersPointsBeforeRotation(element);\n var middleLeft = corners.middleLeft;\n var topCenter = corners.topCenter;\n var bottomCenter = corners.bottomCenter;\n var middleRight = corners.middleRight;\n var topLeft = corners.topLeft;\n var topRight = corners.topRight;\n var bottomLeft = corners.bottomLeft;\n var bottomRight = corners.bottomRight;\n element.corners = {\n topLeft: topLeft, topCenter: topCenter, topRight: topRight, middleLeft: middleLeft,\n middleRight: middleRight, bottomLeft: bottomLeft, bottomCenter: bottomCenter, bottomRight: bottomRight\n };\n if (element.rotateAngle !== 0 || element.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, element.rotateAngle + element.parentTransform, element.offsetX, element.offsetY);\n element.corners.topLeft = topLeft = transformPointByMatrix(matrix, topLeft);\n element.corners.topCenter = topCenter = transformPointByMatrix(matrix, topCenter);\n element.corners.topRight = topRight = transformPointByMatrix(matrix, topRight);\n element.corners.middleLeft = middleLeft = transformPointByMatrix(matrix, middleLeft);\n element.corners.middleRight = middleRight = transformPointByMatrix(matrix, middleRight);\n element.corners.bottomLeft = bottomLeft = transformPointByMatrix(matrix, bottomLeft);\n element.corners.bottomCenter = bottomCenter = transformPointByMatrix(matrix, bottomCenter);\n element.corners.bottomRight = bottomRight = transformPointByMatrix(matrix, bottomRight);\n //Set corners based on rotate angle\n }\n bounds = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n element.corners.left = bounds.left;\n element.corners.right = bounds.right;\n element.corners.top = bounds.top;\n element.corners.bottom = bounds.bottom;\n element.corners.center = bounds.center;\n element.corners.width = bounds.width;\n element.corners.height = bounds.height;\n return bounds;\n}\n/** @private */\nexport function cloneObject(obj, additionalProp, key) {\n var newObject = {};\n var keys = 'properties';\n var prop = 'propName';\n if (obj) {\n key = obj[prop];\n var sourceObject = obj[keys] || obj;\n var properties = [];\n properties = properties.concat(Object.keys(sourceObject));\n var customProperties = [];\n if (key) {\n var propAdditional = getFunction(additionalProp);\n if (propAdditional) {\n customProperties = propAdditional(key);\n }\n else {\n customProperties = [];\n }\n properties = properties.concat(customProperties);\n }\n var internalProp = getInternalProperties(key);\n properties = properties.concat(internalProp);\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var property = properties_1[_i];\n if (property !== 'wrapper') {\n var constructorId = 'constructor';\n var name_1 = 'name';\n var isEventEmmitter = obj[property] && obj.hasOwnProperty('observers') ? true : false;\n if (!isEventEmmitter) {\n if (obj[property] instanceof Array) {\n newObject[property] = cloneArray((internalProp.indexOf(property) === -1 && obj[keys]) ? obj[keys][property] : obj[property], additionalProp, property);\n }\n else if (obj[property] instanceof Array === false && obj[property] instanceof HTMLElement) {\n newObject[property] = obj[property].cloneNode(true).innerHtml;\n }\n else if (obj[property] instanceof Array === false && obj[property] instanceof Object) {\n newObject[property] = cloneObject((internalProp.indexOf(property) === -1 && obj[keys]) ? obj[keys][property] : obj[property]);\n }\n else {\n newObject[property] = obj[property];\n }\n }\n }\n else {\n if (obj[property]) {\n newObject[property] = {\n actualSize: {\n width: obj[property].actualSize.width, height: obj[property].actualSize.height\n }, offsetX: obj[property].offsetX, offsetY: obj[property].offsetY\n };\n }\n }\n }\n }\n return newObject;\n}\n/** @private */\nexport function getInternalProperties(propName) {\n switch (propName) {\n case 'nodes':\n return ['inEdges', 'outEdges', 'parentId', 'processId', 'nodeId'];\n case 'connectors':\n return ['parentId'];\n case 'annotation':\n return ['nodeId'];\n case 'annotations':\n return ['nodeId'];\n }\n return [];\n}\n/** @private */\nexport function cloneArray(sourceArray, additionalProp, key) {\n var clonedArray;\n if (sourceArray) {\n clonedArray = [];\n for (var i = 0; i < sourceArray.length; i++) {\n if (sourceArray[i] instanceof Array) {\n clonedArray.push(sourceArray[i]);\n }\n else if (sourceArray[i] instanceof Object) {\n clonedArray.push(cloneObject(sourceArray[i], additionalProp, key));\n }\n else {\n clonedArray.push(sourceArray[i]);\n }\n }\n }\n return clonedArray;\n}\n/** @private */\nexport function extendObject(options, childObject) {\n var properties = 'properties';\n if (options) {\n if (!childObject) {\n childObject = { properties: {} };\n }\n var target = childObject;\n for (var _i = 0, _a = Object.keys(options); _i < _a.length; _i++) {\n var property = _a[_i];\n if (options[property] instanceof Array) {\n var extendeArray = extendArray(options[property], childObject[properties][property]);\n if (!childObject[properties][property] || !childObject[properties][property].length) {\n childObject[property] = extendeArray;\n }\n }\n else if (options[property] instanceof Array === false && options[property] instanceof HTMLElement) {\n childObject[property] = options[property].cloneNode(true).innerHtml;\n }\n else if (options[property] instanceof Array === false && options[property] instanceof Object) {\n var extendedObject = extendObject(options[property], childObject[properties][property]);\n if (extendedObject[properties] && !Object.keys(extendedObject[properties]).length) {\n delete extendedObject[properties];\n }\n childObject[property] = extendedObject;\n }\n else {\n childObject[property] = childObject[properties][property] !== undefined ?\n childObject[property] : options[property];\n }\n }\n }\n return childObject;\n}\n/** @private */\nexport function extendArray(sourceArray, childArray) {\n var clonedArray = [];\n var reset = false;\n if (!childArray) {\n childArray = [];\n }\n if (!childArray.length) {\n reset = true;\n }\n for (var i = 0; i < sourceArray.length; i++) {\n if (sourceArray[i] instanceof Array) {\n var extendedArray = extendArray(sourceArray[i], childArray[i]);\n if (reset) {\n clonedArray.push(extendArray);\n }\n }\n else if (sourceArray[i] instanceof Object) {\n var extendedObject = extendObject(sourceArray[i], childArray[i]);\n if (reset) {\n clonedArray.push(extendedObject);\n }\n }\n else {\n clonedArray.push(sourceArray[i]);\n }\n }\n return clonedArray;\n}\n/** @private */\nexport function textAlignToString(value) {\n var state = '';\n switch (value) {\n case 'Center':\n state = 'center';\n break;\n case 'Left':\n state = 'left';\n break;\n case 'Right':\n state = 'right';\n break;\n }\n return state;\n}\n/** @private */\nexport function wordBreakToString(value) {\n var state = '';\n switch (value) {\n case 'Wrap':\n state = 'breakall';\n break;\n case 'NoWrap':\n state = 'keepall';\n break;\n case 'WrapWithOverflow':\n state = 'normal';\n break;\n case 'LineThrough':\n state = 'line-through';\n break;\n }\n return state;\n}\nexport function bBoxText(textContent, options) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var svg = window[measureElement].children[2];\n var text = getChildNode(svg)[1];\n text.textContent = textContent;\n text.setAttribute('style', 'font-size:' + options.fontSize + 'px; font-family:'\n + options.fontFamily + ';font-weight:' + (options.bold ? 'bold' : 'normal'));\n var bBox = text.getBBox().width;\n window[measureElement].style.visibility = 'hidden';\n return bBox;\n}\n/** @private */\nexport function middleElement(i, j) {\n var m = 0;\n m = (i + j) / 2;\n return m;\n}\n/** @private */\nexport function overFlow(text, options) {\n var i = 0;\n var j = 0;\n var middle = 0;\n var bounds = 0;\n var temp = '';\n j = text.length;\n var t = 0;\n do {\n if (bounds > 0) {\n i = middle;\n }\n middle = Math.floor(middleElement(i, j));\n temp += text.substr(i, middle);\n bounds = bBoxText(temp, options);\n } while (bounds <= options.width);\n temp = temp.substr(0, i);\n for (t = i; t < j; t++) {\n temp += text[t];\n bounds = bBoxText(temp, options);\n if (bounds >= options.width) {\n text = text.substr(0, temp.length - 1);\n break;\n }\n }\n if (options.textOverflow === 'Ellipsis') {\n text = text.substr(0, text.length - 3);\n text += '...';\n }\n else {\n text = text.substr(0, text.length);\n }\n return text;\n}\n/** @private */\nexport function whiteSpaceToString(value, wrap) {\n if (wrap === 'NoWrap' && value === 'PreserveAll') {\n return 'pre';\n }\n var state = '';\n switch (value) {\n case 'CollapseAll':\n state = 'nowrap';\n break;\n case 'CollapseSpace':\n state = 'pre-line';\n break;\n case 'PreserveAll':\n state = 'pre-wrap';\n break;\n }\n return state;\n}\n/** @private */\nexport function rotateSize(size, angle) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, 0, 0);\n var topLeft = transformPointByMatrix(matrix, { x: 0, y: 0 });\n var topRight = transformPointByMatrix(matrix, { x: size.width, y: 0 });\n var bottomLeft = transformPointByMatrix(matrix, { x: 0, y: size.height });\n var bottomRight = transformPointByMatrix(matrix, { x: size.width, y: size.height });\n var minX = Math.min(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);\n var minY = Math.min(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);\n var maxX = Math.max(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);\n var maxY = Math.max(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);\n return new Size(maxX - minX, maxY - minY);\n}\n/** @private */\nexport function rotatePoint(angle, pivotX, pivotY, point) {\n if (angle !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, pivotX, pivotY);\n return transformPointByMatrix(matrix, point);\n }\n return point;\n}\n/** @private */\nexport function getOffset(topLeft, obj) {\n var offX = topLeft.x + obj.desiredSize.width * obj.pivot.x;\n var offY = topLeft.y + obj.desiredSize.height * obj.pivot.y;\n return {\n x: offX, y: offY\n };\n}\n/**\n * Get function\n */\nexport function getFunction(value) {\n if (value !== undefined) {\n if (typeof value === 'string') {\n value = getValue(value, window);\n }\n }\n return value;\n}\n","import { Connector } from '../objects/connector';\nimport { Node } from '../objects/node';\nimport { Rect } from '../primitives/rect';\nimport { identityMatrix, transformPointByMatrix, rotateMatrix } from '../primitives/matrix';\nimport { getUserHandlePosition, checkPortRestriction } from '../utility/diagram-util';\nimport { canMove, canDragSourceEnd, canDragTargetEnd, canContinuousDraw, canDragSegmentThumb } from '../utility/constraints-util';\nimport { canZoomPan, defaultTool, canDrawOnce, canDrag, canDraw, canSelect, canRotate } from '../utility/constraints-util';\nimport { canShowCorner, canResizeCorner } from '../utility/diagram-util';\nimport { Point } from '../primitives/point';\nimport { TextElement } from '../core/elements/text-element';\nimport { PortConstraints, DiagramTools, PortVisibility, ThumbsConstraints } from '../enum/enum';\nimport { Selector } from './selector';\nimport { PointPort } from './../objects/port';\nimport { ShapeAnnotation, PathAnnotation } from '../objects/annotation';\n/**\n * Finds the action to be taken for the object under mouse\n *\n */\n/** @private */\nexport function findToolToActivate(obj, wrapper, position, diagram, touchStart, touchMove, target) {\n var conn = diagram.selectedItems.connectors[0];\n if (touchMove && touchMove.length > 1 && touchStart && touchStart.length > 1) {\n return 'PinchZoom';\n }\n if (diagram.currentSymbol) {\n return 'Drag';\n }\n var eventHandler = 'eventHandler';\n if (diagram[eventHandler].action === 'PortDraw') {\n diagram.tool &= ~DiagramTools.DrawOnce;\n }\n //Drawing Tools\n if ((canDrawOnce(diagram) || canContinuousDraw(diagram)) && diagram.drawingObject) {\n return 'Draw';\n }\n if (hasSelection(diagram)) {\n var handle = diagram.selectedItems;\n if (handle.wrapper && canShowCorner(handle.constraints, 'UserHandle')) {\n for (var _i = 0, _a = handle.userHandles; _i < _a.length; _i++) {\n var obj_1 = _a[_i];\n if (obj_1.visible) {\n var paddedBounds = getUserHandlePosition(handle, obj_1, diagram.scroller.transform);\n if (contains(position, paddedBounds, obj_1.size / 2)) {\n return obj_1.name;\n }\n }\n }\n }\n }\n //Panning\n if (canZoomPan(diagram) && !obj) {\n return 'Pan';\n }\n if (hasSelection(diagram)) {\n var element = (diagram.selectedItems.annotation) ?\n diagram.selectedItems.wrapper.children[0] : diagram.selectedItems.wrapper;\n var selectorBnds = element.bounds;\n var handle = diagram.selectedItems;\n var paddedBounds = new Rect(selectorBnds.x, selectorBnds.y, selectorBnds.width, selectorBnds.height);\n if (hasSingleConnection(diagram) && !diagram.selectedItems.annotation) {\n var conn_1 = diagram.selectedItems.connectors[0];\n var sourcePaddingValue = 10 / diagram.scrollSettings.currentZoom;\n var targetPaddingValue = 10 / diagram.scrollSettings.currentZoom;\n if (canShowCorner(handle.constraints, 'ResizeAll')) {\n if ((canShowCorner(handle.constraints, 'ConnectorSourceThumb'))\n && canDragSourceEnd(conn_1) && contains(position, conn_1.sourcePoint, sourcePaddingValue)) {\n return 'ConnectorSourceEnd';\n }\n if ((canShowCorner(handle.constraints, 'ConnectorTargetThumb'))\n && canDragTargetEnd(conn_1) && contains(position, conn_1.targetPoint, targetPaddingValue)) {\n return 'ConnectorTargetEnd';\n }\n var action = checkForConnectorSegment(conn_1, handle, position, diagram);\n if (action) {\n return action;\n }\n }\n }\n else {\n var ten = 10 / diagram.scroller.currentZoom;\n var matrix = identityMatrix();\n rotateMatrix(matrix, element.rotateAngle + element.parentTransform, element.offsetX, element.offsetY);\n //check for resizing tool\n var x = element.offsetX - element.pivot.x * element.actualSize.width;\n var y = element.offsetY - element.pivot.y * element.actualSize.height;\n var rotateThumb = {\n x: x + ((element.pivot.x === 0.5 ? element.pivot.x * 2 : element.pivot.x) * element.actualSize.width / 2),\n y: y - 30 / diagram.scroller.currentZoom\n };\n rotateThumb = transformPointByMatrix(matrix, rotateThumb);\n var labelSelection = diagram.selectedItems.annotation ? true : false;\n var labelRotate = (labelSelection && (canRotate(diagram.selectedItems.annotation))) ? true : false;\n if (canShowCorner(handle.constraints, 'Rotate') && contains(position, rotateThumb, ten) &&\n (diagram.selectedItems.thumbsConstraints & ThumbsConstraints.Rotate)) {\n if (labelSelection && labelRotate) {\n return 'LabelRotate';\n }\n else if (!labelSelection) {\n return 'Rotate';\n }\n }\n paddedBounds.Inflate(ten);\n if (paddedBounds.containsPoint(position)) {\n var action = checkForResizeHandles(diagram, element, position, matrix, x, y);\n if (action) {\n return action;\n }\n }\n }\n }\n if (target instanceof PointPort && (!canZoomPan(diagram))) {\n var action = findPortToolToActivate(diagram, target);\n if (action !== 'None') {\n return action;\n }\n }\n if ((target instanceof ShapeAnnotation || target instanceof PathAnnotation) && (!canZoomPan(diagram) && (canSelect(target)))) {\n if (isSelected(diagram, target, undefined, wrapper) && canMove(target)) {\n return 'LabelDrag';\n }\n return 'LabelSelect';\n }\n if (obj !== null) {\n if (obj instanceof Node || obj instanceof Connector) {\n if (wrapper && wrapper.id) {\n var id = wrapper.id.split(obj.id)[1];\n if (id && id.match('^_icon')) {\n return 'LayoutAnimation';\n }\n }\n if (canMove(obj) && wrapper instanceof TextElement && wrapper.hyperlink.link) {\n return 'Hyperlink';\n }\n if (canMove(obj) && isSelected(diagram, obj, false) && diagram.selectedItems.annotation === undefined) {\n if ((obj instanceof Connector && !(contains(position, obj.sourcePoint, obj.hitPadding) ||\n contains(position, obj.targetPoint, obj.hitPadding))) ||\n !(obj instanceof Connector)) {\n return 'Drag';\n }\n }\n else if (obj && canZoomPan(diagram) && !defaultTool(diagram)) {\n return 'Pan';\n }\n else {\n return 'Select';\n }\n }\n else {\n return 'Select';\n }\n }\n return 'Select';\n}\nfunction checkForConnectorSegment(conn, handle, position, diagram) {\n var targetPaddingValue = 10 / diagram.scrollSettings.currentZoom;\n var sourcePaddingValue = 10 / diagram.scrollSettings.currentZoom;\n if (conn.type === 'Bezier') {\n for (var i = 0; i < conn.segments.length; i++) {\n var segment = (conn.segments)[i];\n if (contains(position, !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1, sourcePaddingValue)) {\n return 'BezierSourceThumb';\n }\n if (contains(position, !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2, targetPaddingValue)) {\n return 'BezierTargetThumb';\n }\n }\n }\n if (diagram.connectorEditingToolModule && canDragSegmentThumb(conn)) {\n if (conn.type === 'Straight' || conn.type === 'Bezier') {\n for (var i = 0; i < conn.segments.length; i++) {\n var segment = void 0;\n segment = (conn.segments)[i];\n if (contains(position, segment.point, 10)) {\n return 'SegmentEnd';\n }\n }\n }\n else {\n for (var i = 0; i < conn.segments.length; i++) {\n var segment = void 0;\n var segPoint = { x: 0, y: 0 };\n segment = (conn.segments)[i];\n for (var j = 0; j < segment.points.length - 1; j++) {\n var length_1 = Point.distancePoints(segment.points[j], segment.points[j + 1]);\n if (length_1 >= 50) {\n segPoint.x = ((segment.points[j].x + segment.points[j + 1].x) / 2);\n segPoint.y = ((segment.points[j].y + segment.points[j + 1].y) / 2);\n if (contains(position, segPoint, 30)) {\n return 'OrthoThumb';\n }\n }\n }\n }\n }\n }\n return null;\n}\n/** @private */\nexport function findPortToolToActivate(diagram, target, touchStart, touchMove) {\n if (canDrag(target, diagram) && (checkPortRestriction(target, PortVisibility.Hover)\n || (checkPortRestriction(target, PortVisibility.Visible)))) {\n if ((target.constraints & PortConstraints.Drag)) {\n return 'PortDrag';\n }\n }\n else if (canDraw(target, diagram) && (checkPortRestriction(target, PortVisibility.Hover)\n || (checkPortRestriction(target, PortVisibility.Visible)))) {\n if (target.constraints & PortConstraints.Draw) {\n diagram.drawingObject = {};\n var connector = { type: 'Orthogonal', sourcePortID: target.id };\n diagram.drawingObject = connector;\n diagram.tool |= DiagramTools.DrawOnce;\n diagram.currentDrawingObject = connector;\n return 'PortDraw';\n }\n }\n return 'None';\n}\nfunction checkForResizeHandles(diagram, element, position, matrix, x, y) {\n var forty = 40 / diagram.scroller.currentZoom;\n var ten = 10 / diagram.scroller.currentZoom;\n var selectedItems = diagram.selectedItems;\n var labelSelection = (selectedItems.annotation) ? true : false;\n if (element.actualSize.width >= forty && element.actualSize.height >= forty) {\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouthEast', selectedItems.thumbsConstraints, selectedItems) && contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y + element.actualSize.height }), ten)) {\n return (labelSelection) ? 'LabelResizeSouthEast' : 'ResizeSouthEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouthWest', selectedItems.thumbsConstraints, selectedItems) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y + element.actualSize.height }), ten)) {\n return (labelSelection) ? 'LabelResizeSouthWest' : 'ResizeSouthWest';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorthEast', selectedItems.thumbsConstraints, selectedItems) &&\n contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y }), ten)) {\n return (labelSelection) ? 'LabelResizeNorthEast' : 'ResizeNorthEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorthWest', selectedItems.thumbsConstraints, selectedItems) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y }), ten)) {\n return (labelSelection) ? 'LabelResizeNorthWest' : 'ResizeNorthWest';\n }\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeEast', selectedItems.thumbsConstraints, selectedItems) && contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y + element.actualSize.height / 2 }), ten)) {\n return (labelSelection) ? 'LabelResizeEast' : 'ResizeEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeWest', selectedItems.thumbsConstraints, selectedItems) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y + element.actualSize.height / 2 }), ten)) {\n return (labelSelection) ? 'LabelResizeWest' : 'ResizeWest';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouth', selectedItems.thumbsConstraints, selectedItems) && contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width / 2, y: y + element.actualSize.height }), ten)) {\n return (labelSelection) ? 'LabelResizeSouth' : 'ResizeSouth';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorth', selectedItems.thumbsConstraints, selectedItems) &&\n contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width / 2, y: y }), ten)) {\n return (labelSelection) ? 'LabelResizeNorth' : 'ResizeNorth';\n }\n return null;\n}\n/** @private */\nexport function contains(mousePosition, corner, padding) {\n if (mousePosition.x >= corner.x - padding && mousePosition.x <= corner.x + padding) {\n if (mousePosition.y >= corner.y - padding && mousePosition.y <= corner.y + padding) {\n return true;\n }\n }\n return false;\n}\n/** @private */\nexport function hasSelection(diagram) {\n if (diagram.selectedItems.nodes.length > 0 || diagram.selectedItems.connectors.length > 0) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function hasSingleConnection(diagram) {\n if (diagram.selectedItems.connectors.length === 1 && !diagram.selectedItems.nodes.length) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function isSelected(diagram, element, firstLevel, wrapper) {\n if (firstLevel === void 0) { firstLevel = true; }\n if (element instanceof Selector) {\n return true;\n }\n if (element instanceof Node) {\n while (element) {\n if (diagram.selectedItems.nodes.indexOf(element) !== -1 && diagram.selectedItems.annotation === undefined) {\n return true;\n }\n if (!firstLevel) {\n element = diagram.nameTable[element.parentId];\n }\n else {\n break;\n }\n }\n }\n else if (element instanceof Connector) {\n if (diagram.selectedItems.connectors.indexOf(element) !== -1 && diagram.selectedItems.annotation === undefined) {\n return true;\n }\n }\n else if (element instanceof ShapeAnnotation || element instanceof PathAnnotation) {\n if (diagram.selectedItems.annotation && diagram.selectedItems.wrapper.children[0].id === wrapper.id) {\n return true;\n }\n }\n return false;\n}\n/** @private */\nexport function getCursor(cursor, angle) {\n //to avoid angles less than 0 & angles greater than 360\n angle += 360;\n angle %= 360;\n if (cursor.indexOf('Resize') === -1) {\n return cursors[cursor];\n }\n else {\n var dir = cursors[cursor];\n if ((angle >= 0 && angle < 25) || (angle >= 160 && angle <= 205) || (angle >= 340 && angle <= 360)) {\n return dir;\n }\n else if ((angle >= 25 && angle <= 70) || (angle >= 205 && angle <= 250)) {\n if (dir === 'n-resize' || dir === 's-resize') {\n return 'ne-resize';\n }\n else if (dir === 'nw-resize' || dir === 'se-resize') {\n return 'n-resize';\n }\n else if (dir === 'e-resize' || dir === 'w-resize') {\n return 'nw-resize';\n }\n else {\n return 'e-resize';\n }\n }\n else if ((angle >= 70 && angle <= 115) || (angle >= 250 && angle <= 295)) {\n if (dir === 'n-resize' || dir === 's-resize') {\n return 'e-resize';\n }\n else if (dir === 'nw-resize' || dir === 'se-resize') {\n return 'ne-resize';\n }\n else if (dir === 'e-resize' || dir === 'w-resize') {\n return 'n-resize';\n }\n else {\n return 'nw-resize';\n }\n }\n else if ((angle >= 115 && angle <= 155) || (angle >= 295 && angle <= 340)) {\n if (dir === 'n-resize' || dir === 's-resize') {\n return 'nw-resize';\n }\n else if (dir === 'nw-resize' || dir === 'se-resize') {\n return 'e-resize';\n }\n else if (dir === 'e-resize' || dir === 'w-resize') {\n return 'ne-resize';\n }\n }\n else {\n return 'n-resize';\n }\n }\n return cursors[cursor];\n}\nvar cursors = {\n 'None': 'default',\n 'Rotate': 'crosshair',\n 'Select': 'default',\n 'Drag': 'move',\n 'ResizeWest': 'w-resize',\n 'ResizeEast': 'e-resize',\n 'ResizeSouth': 's-resize',\n 'ResizeNorth': 'n-resize',\n 'Draw': 'crosshair',\n 'PortDraw': 'crosshair',\n 'ResizeNorthEast': 'ne-resize',\n 'ResizeNorthWest': 'nw-resize',\n 'ResizeSouthEast': 'se-resize',\n 'ResizeSouthWest': 'sw-resize',\n 'ConnectorSourceEnd': 'move',\n 'ConnectorTargetEnd': 'move',\n 'BezierSourceThumb': 'move',\n 'BezierTargetThumb': 'move',\n 'OrthoThumb': 'move',\n 'SegmentEnd': 'move',\n 'Pan': 'pointer',\n 'Hyperlink': 'pointer',\n 'PortDrag': 'pointer',\n 'LabelSelect': 'pointer',\n 'LabelDrag': 'move',\n 'LabelRotate': 'crosshair',\n 'LabelResizeWest': 'w-resize',\n 'LabelResizeEast': 'e-resize',\n 'LabelResizeSouth': 's-resize',\n 'LabelResizeNorth': 'n-resize',\n 'LabelResizeNorthEast': 'ne-resize',\n 'LabelResizeNorthWest': 'nw-resize',\n 'LabelResizeSouthEast': 'se-resize',\n 'LabelResizeSouthWest': 'sw-resize',\n};\n","import { Node } from './../objects/node';\nimport { DiagramElement } from './../core/elements/diagram-element';\nimport { Canvas } from './../core/containers/canvas';\nimport { Container } from './../core/containers/container';\nimport { PathElement } from './../core/elements/path-element';\nimport { TextElement } from './../core/elements/text-element';\nimport { updateStyle } from './../../diagram/utility/diagram-util';\nimport { randomId, cloneObject } from './../utility/base-util';\nimport { Connector } from './../objects/connector';\nimport { BpmnAnnotation } from './../objects/node';\nimport { Transform, DiagramAction } from '../enum/enum';\nimport { findAngle, getIntersectionPoints, getPortDirection } from '../utility/connector';\nimport { Point } from '../primitives/point';\nimport { NodeConstraints, ConnectorConstraints } from '../enum/enum';\nimport { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { getDiagramElement } from '../utility/dom-util';\n/**\n * BPMN Diagrams contains the BPMN functionalities\n */\nvar BpmnDiagrams = /** @class */ (function () {\n //End size region\n /**\n * Constructor for the BpmnDiagrams module\n * @private\n */\n function BpmnDiagrams() {\n //Code conversion for Bpmn Shapes\n //Start Region\n this.annotationObjects = {};\n //constructs the BpmnDiagrams module\n }\n Object.defineProperty(BpmnDiagrams.prototype, \"textAnnotationConnectors\", {\n get: function () {\n var connectors = [];\n for (var _i = 0, _a = Object.keys(this.annotationObjects); _i < _a.length; _i++) {\n var key = _a[_i];\n var entry = this.annotationObjects[key];\n for (var _b = 0, _c = Object.keys(entry); _b < _c.length; _b++) {\n var annotation = _c[_b];\n var key_1 = 'connector';\n connectors.push(entry[annotation][key_1]);\n }\n }\n return connectors;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n BpmnDiagrams.prototype.getTextAnnotationConn = function (obj) {\n var connectors = [];\n if (obj.shape.type === 'Bpmn' && obj.shape.annotations.length !== 0) {\n var entry = this.annotationObjects[obj.id];\n for (var _i = 0, _a = Object.keys(entry); _i < _a.length; _i++) {\n var annotation = _a[_i];\n var key = 'connector';\n connectors.push(entry[annotation][key]);\n }\n }\n return connectors;\n };\n BpmnDiagrams.prototype.getSize = function (node, content) {\n var size = new Size(node.width, node.height);\n if (size.width === undefined || size.height === undefined) {\n if (!(content instanceof PathElement)) {\n size.width = size.width || 50;\n size.height = size.height || 50;\n }\n if (content.actualSize.width && content.actualSize.height) {\n return content.actualSize;\n }\n else {\n content.measure(new Size());\n size.width = size.width || content.desiredSize.width;\n size.height = size.height || content.desiredSize.height;\n }\n if (node.maxWidth !== undefined) {\n size.width = Math.min(size.width, node.maxWidth);\n }\n if (node.maxHeight !== undefined) {\n size.height = Math.min(size.height, node.maxHeight);\n }\n if (node.minWidth !== undefined) {\n size.width = Math.max(size.width, node.minWidth);\n }\n if (node.minHeight !== undefined) {\n size.height = Math.max(size.height, node.minHeight);\n }\n }\n return size;\n };\n /** @private */\n BpmnDiagrams.prototype.initBPMNContent = function (content, node, diagram) {\n var shape = node.shape;\n if (shape.shape === 'Event') {\n content = this.getBPMNEventShape(node, shape.event);\n }\n if (shape.shape === 'Gateway') {\n content = this.getBPMNGatewayShape(node);\n }\n if (shape.shape === 'DataObject') {\n content = this.getBPMNDataObjectShape(node);\n }\n if (shape.shape === 'Message' || shape.shape === 'DataSource') {\n content = this.getBPMNShapes(node);\n }\n // if (shape.shape === 'Group') {\n // content = this.getBPMNGroup(node, diagram);\n // content.style.strokeDashArray = '2 2 6 2';\n // content.horizontalAlignment = 'Center';\n // content.verticalAlignment = 'Center';\n // }\n if (shape.shape === 'Activity') {\n content = this.getBPMNActivityShape(node);\n }\n if (shape.shape === 'TextAnnotation') {\n content = this.renderBPMNTextAnnotation(diagram, node, content);\n }\n var annotations = {};\n if (shape.annotations.length > 0) {\n for (var i = 0; i < shape.annotations.length && shape.annotations[i].text; i++) {\n content.children.push(this.getBPMNTextAnnotation(node, diagram, shape.annotations[i], content));\n }\n content.style.strokeDashArray = '2 2 6 2';\n }\n return content;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNShapes = function (node) {\n var bpmnShape = new PathElement();\n //set style\n this.setStyle(bpmnShape, node);\n if ((node.constraints & NodeConstraints.Shadow) !== 0) {\n bpmnShape.shadow = node.shadow;\n }\n var bpmnShapeData = getBpmnShapePathData(node.shape.shape);\n bpmnShape.data = bpmnShapeData;\n bpmnShape.id = node.id + '_' + node.shape.shape;\n if (node.width !== undefined && node.height !== undefined) {\n bpmnShape.width = node.width;\n bpmnShape.height = node.height;\n }\n return bpmnShape;\n };\n /** @private */\n // public getBPMNGroup(node: Node, diagram: Diagram): Container {\n // let group: Container = new Container();\n // group.id = node.id + '_group';\n // //group.style.strokeDashArray = '2 2 6 2';\n // if (!group.children) { group.children = []; }\n // let grp: BpmnGroup = ((node.shape as BpmnShape).group as BpmnGroup);\n // if ((node.shape as BpmnShape).group as BpmnGroup) {\n // for (let i: number = 0; i < grp.children.length; i++) {\n // let b: Node | Connector = diagram.nameTable[grp.children[i]];\n // group.children.push(b.wrapper);\n // }\n // }\n // return group;\n // }\n /** @private */\n BpmnDiagrams.prototype.getBPMNGatewayShape = function (node) {\n var gatewayshape = new Canvas();\n //childNode0\n var gatewayNode = new PathElement();\n gatewayNode.id = node.id + '_0_gateway';\n gatewayNode.offsetX = node.offsetX;\n gatewayNode.offsetY = node.offsetY;\n gatewayNode.data = 'M 40 20 L 20 40 L 0 20 L 20 0 L 40 20 Z';\n this.setStyle(gatewayNode, node);\n //childNode1\n var gatewayTypeNode = new PathElement();\n gatewayTypeNode.id = node.id + '_1_gatewayType';\n //set style - opacity\n gatewayTypeNode.style.opacity = node.style.opacity;\n gatewayTypeNode.horizontalAlignment = 'Center';\n gatewayTypeNode.verticalAlignment = 'Center';\n gatewayTypeNode.relativeMode = 'Object';\n var shapeType = node.shape.gateway;\n var gatewayTypeNodeShapeData;\n gatewayTypeNodeShapeData = getBpmnGatewayShapePathData(shapeType.type);\n if (shapeType.type === 'EventBased' || shapeType.type === 'ExclusiveEventBased' || shapeType.type === 'ParallelEventBased') {\n gatewayTypeNode.style.fill = 'white';\n }\n else {\n gatewayTypeNode.style.fill = 'black';\n }\n gatewayTypeNode.data = gatewayTypeNodeShapeData;\n // append child and set style\n gatewayshape.style.fill = 'transparent';\n gatewayshape.style.strokeColor = 'transparent';\n gatewayshape.style.strokeWidth = 0;\n gatewayshape.children = [gatewayNode, gatewayTypeNode];\n var size = this.getSize(node, gatewayNode);\n this.setSizeForBPMNGateway(node.shape.gateway, gatewayshape, size.width, size.height);\n return gatewayshape;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNDataObjectShape = function (node) {\n var dataObjectshape = new Canvas();\n var shape = node.shape.dataObject;\n //childNode0\n var dataobjNode = new PathElement();\n dataobjNode.id = node.id + '_0_dataobj';\n dataobjNode.data = 'M29.904,5 L7.853,5 L7.853,45 L42.147,45 L42.147,17.242,L29.932,5,L29.932,17.242,L42.147,17.242';\n var size = this.getSize(node, dataobjNode);\n dataobjNode.width = size.width;\n dataobjNode.height = size.height;\n this.setStyle(dataobjNode, node);\n //childNode1\n var dataobjTypeNode = new PathElement();\n dataobjTypeNode.id = node.id + '_1_type';\n dataobjTypeNode.width = 25;\n dataobjTypeNode.height = 20;\n dataobjTypeNode.margin.left = 5;\n dataobjTypeNode.margin.top = 5;\n dataobjTypeNode.data = 'M 3 9.4 l 6 0 v 2.4 l 3.6 -4 L 9 4 v 2.5 H 3 V 9.4 Z';\n //set style - opacity\n dataobjTypeNode.style.opacity = node.style.opacity;\n //childNode2\n var dataobjCollectionNode = new PathElement();\n dataobjCollectionNode.id = node.id + '_2_collection';\n dataobjCollectionNode.width = 7.5;\n dataobjCollectionNode.height = 15;\n dataobjCollectionNode.style.fill = 'black';\n dataobjCollectionNode.visible = true;\n dataobjCollectionNode.horizontalAlignment = 'Center';\n dataobjCollectionNode.verticalAlignment = 'Bottom';\n dataobjCollectionNode.relativeMode = 'Object';\n //set style - opacity\n dataobjCollectionNode.style.opacity = node.style.opacity;\n dataobjCollectionNode.data = 'M 0 0 L 0.1 0 L 0.1 2 L 0 2 Z M 0.4 0 L 0.6 0 L 0.6 2 L0.4 2 Z M 0.9 0 L 1 0 L 1 2 L 0.9 2 Z';\n switch (shape.type) {\n case 'None':\n dataobjTypeNode.visible = false;\n break;\n case 'Input':\n dataobjTypeNode.style.fill = 'white';\n break;\n case 'Output':\n dataobjTypeNode.style.fill = 'black';\n break;\n }\n if (shape.collection === false) {\n dataobjCollectionNode.visible = false;\n }\n //append child and set style\n dataObjectshape.style.fill = 'transparent';\n dataObjectshape.style.strokeColor = 'transparent';\n dataObjectshape.style.strokeWidth = 0;\n dataObjectshape.children = [dataobjNode, dataobjTypeNode, dataobjCollectionNode];\n return dataObjectshape;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNTaskShape = function (node) {\n var shape = node.shape.activity;\n var task = shape.task;\n var taskShapes = new Canvas();\n //childNode0\n var taskNode = new DiagramElement();\n taskNode.cornerRadius = 10;\n var size = this.getSize(node, taskNode);\n taskNode.id = node.id + '_0_task';\n taskNode.width = size.width;\n taskNode.height = size.height;\n this.setStyle(taskNode, node);\n // if task as call \n if ((task.call !== undefined) && task.call === true) {\n taskNode.style.strokeWidth = 4;\n }\n taskShapes.width = size.width;\n taskShapes.height = size.height;\n var childCount = this.getTaskChildCount(node);\n var x;\n var childSpace = childCount * 12;\n var area = size.width / 2 - childSpace;\n if (childCount === 1) {\n x = area + 8;\n }\n else {\n x = area + (childCount - 1) * 8;\n }\n //childNode1\n var taskTypeNode = new PathElement();\n var taskTypeNodeData;\n if (task.type === 'Receive' || task.type === 'Send') {\n taskTypeNode.width = 18;\n taskTypeNode.height = 16;\n }\n else {\n taskTypeNode.width = 20;\n taskTypeNode.height = 20;\n }\n taskTypeNode.id = node.id + '_1_tasktType';\n taskTypeNode.margin.left = 5;\n taskTypeNode.margin.top = 5;\n taskTypeNodeData = getBpmnTaskShapePathData(task.type);\n taskTypeNode.data = taskTypeNodeData;\n taskTypeNode.style.fill = 'transparent';\n taskTypeNode.style.opacity = node.style.opacity;\n // append child and set style\n taskShapes.style.fill = 'transparent';\n taskShapes.style.strokeColor = 'transparent';\n taskShapes.style.strokeWidth = 0;\n taskShapes.children = [taskNode, taskTypeNode];\n // if task as loop\n var loopType = task.loop;\n var taskLoopNode = new PathElement();\n var childNode2data;\n childNode2data = getBpmnLoopShapePathData(loopType);\n taskLoopNode.data = childNode2data;\n taskLoopNode.style.fill = 'black';\n if (loopType !== 'None') {\n taskLoopNode.visible = true;\n }\n else {\n taskLoopNode.visible = false;\n }\n if (childCount === 1) {\n x = area + 9;\n }\n taskLoopNode.margin.left = x;\n if (taskLoopNode.visible === true) {\n x += 12 + 8;\n }\n taskLoopNode.width = 12;\n taskLoopNode.height = 12;\n taskLoopNode.margin.bottom = 5;\n taskLoopNode.id = node.id + '_2_loop';\n taskLoopNode.horizontalAlignment = 'Left';\n taskLoopNode.verticalAlignment = 'Bottom';\n taskLoopNode.setOffsetWithRespectToBounds(0, 1, 'Fraction');\n taskLoopNode.relativeMode = 'Point';\n taskLoopNode.style.fill = 'transparent';\n taskTypeNode.style.opacity = node.style.opacity;\n taskShapes.children.push(taskLoopNode);\n //if task as compensation\n var taskCompNode = new PathElement();\n taskCompNode = this.getBPMNCompensationShape(node, taskCompNode);\n if (task.compensation === true) {\n taskCompNode.visible = true;\n }\n else {\n taskCompNode.visible = false;\n }\n if (childCount === 1) {\n x = area + 9;\n }\n taskCompNode.margin.left = x - 3;\n x += 12 + 6;\n taskShapes.children.push(taskCompNode);\n return taskShapes;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNEventShape = function (node, subEvent, sub, id) {\n var eventshape = new Canvas();\n var event;\n var trigger;\n var width;\n var height;\n id = id || node.id;\n var pathdata = 'M164.1884,84.6909000000001C156.2414,84.6909000000001,149.7764,78.2259000000001,149.7764,70.2769000000001' +\n 'C149.7764,62.3279000000001,156.2414,55.8629000000001,164.1884,55.8629000000001C172.1354,55.8629000000001,178.6024,' +\n '62.3279000000001,178.6024,70.2769000000001C178.6024,78.2259000000001,172.1354,84.6909000000001,164.1884,84.6909000000001';\n var shapeEvent = node.shape.event;\n if (node.shape.shape === 'Event') {\n event = shapeEvent.event;\n trigger = shapeEvent.trigger;\n }\n width = subEvent.width;\n height = subEvent.height;\n if (sub) {\n width = width || 20;\n height = height || 20;\n }\n else if (subEvent.width === undefined || subEvent.height === undefined) {\n var pathElement = new PathElement();\n pathElement.data = pathdata;\n var size = this.getSize(node, pathElement);\n width = size.width;\n height = size.height;\n }\n var shapeActivity = node.shape.activity;\n if (node.shape.shape === 'Activity') {\n var subProcess = shapeActivity.subProcess;\n event = subEvent.event;\n trigger = subEvent.trigger;\n }\n //childNode0\n var innerEvtNode = new PathElement();\n innerEvtNode.data = pathdata;\n innerEvtNode.id = id + '_0_event';\n innerEvtNode.width = width;\n innerEvtNode.height = height;\n innerEvtNode.horizontalAlignment = 'Center';\n innerEvtNode.verticalAlignment = 'Center';\n innerEvtNode.relativeMode = 'Object';\n this.setStyle(innerEvtNode, node);\n //childNode1\n var outerEvtNode = new PathElement();\n outerEvtNode.data = pathdata;\n outerEvtNode.id = id + '_1_event';\n outerEvtNode.style.gradient = node.style.gradient;\n outerEvtNode.horizontalAlignment = 'Center';\n outerEvtNode.verticalAlignment = 'Center';\n outerEvtNode.relativeMode = 'Object';\n // set style opacity & strokeColor\n outerEvtNode.style.strokeColor = node.style.strokeColor;\n outerEvtNode.style.opacity = node.style.opacity;\n //childNode2\n var triggerNode = new PathElement();\n var triggerNodeData = getBpmnTriggerShapePathData(trigger);\n triggerNode.data = triggerNodeData;\n triggerNode.id = id + '_2_trigger';\n triggerNode.horizontalAlignment = 'Center';\n triggerNode.verticalAlignment = 'Center';\n triggerNode.relativeMode = 'Object';\n // set style opacity & strokeColor\n triggerNode.style.strokeColor = node.style.strokeColor;\n triggerNode.style.opacity = node.style.opacity;\n switch (event) {\n case 'Start':\n outerEvtNode.visible = false;\n break;\n case 'NonInterruptingStart':\n innerEvtNode.style.strokeDashArray = '2 3';\n outerEvtNode.visible = false;\n break;\n case 'Intermediate':\n innerEvtNode.style.fill = 'white';\n innerEvtNode.style.gradient = null;\n break;\n case 'NonInterruptingIntermediate':\n innerEvtNode.style.fill = 'white';\n innerEvtNode.style.gradient = null;\n innerEvtNode.style.strokeDashArray = '2 3';\n outerEvtNode.style.strokeDashArray = '2 3';\n break;\n case 'ThrowingIntermediate':\n case 'End':\n innerEvtNode.style.fill = event !== 'End' ? 'white' : 'black';\n innerEvtNode.style.gradient = null;\n triggerNode.style.fill = 'black';\n triggerNode.style.strokeColor = node.style.fill;\n break;\n }\n //append child and set style\n eventshape.style.fill = 'transparent';\n eventshape.style.strokeColor = 'transparent';\n eventshape.style.strokeWidth = 0;\n eventshape.children = [innerEvtNode, outerEvtNode, triggerNode];\n this.setSizeForBPMNEvents(shapeEvent, eventshape, width, height);\n return eventshape;\n };\n BpmnDiagrams.prototype.setEventVisibility = function (node, canvas) {\n var event = node.shape.event.event;\n var innerEvtNode = canvas[0];\n var outerEvtNode = canvas[1];\n var triggerNode = canvas[2];\n switch (event) {\n case 'Start':\n outerEvtNode.visible = false;\n break;\n case 'NonInterruptingStart':\n innerEvtNode.style.strokeDashArray = '2 3';\n outerEvtNode.visible = false;\n break;\n }\n };\n BpmnDiagrams.prototype.setSubProcessVisibility = function (node) {\n var subProcess = node.shape.activity.subProcess;\n var eventLength = subProcess.events.length;\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 2 : 0;\n var elementWrapper = node.wrapper.children[0].children[0];\n if (subProcess.adhoc === false) {\n elementWrapper.children[3 + index + eventLength].visible = false;\n }\n if (subProcess.compensation === false) {\n elementWrapper.children[4 + index + eventLength].visible = false;\n }\n if (eventLength > 0) {\n for (var i = 0; i < eventLength; i++) {\n this.setEventVisibility(node, elementWrapper.children[2 + i].children);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNSubProcessShape = function (node) {\n var subProcessShapes = new Canvas();\n var loopType;\n var events;\n var event;\n var subprocessAdhoc = new PathElement();\n var subProcessEventsShapes = new Canvas();\n var subProcessLoopShapes = new PathElement();\n var shape = node.shape.activity;\n var subProcess = shape.subProcess;\n var subChildCount = this.getSubprocessChildCount(node);\n var x;\n var subprocessNode = new DiagramElement();\n subprocessNode.id = node.id + '_0_Subprocess';\n subprocessNode.style.fill = 'transparent';\n subprocessNode.cornerRadius = 10;\n var size = this.getSize(node, subprocessNode);\n subprocessNode.width = size.width;\n subprocessNode.height = size.height;\n subProcessShapes.children = [subprocessNode];\n if (shape.subProcess.type === 'Transaction') {\n this.getBPMNSubProcessTransaction(node, node.shape, subProcessShapes);\n }\n var iconSpace = 4;\n var subChildSpace = 12;\n var childSpace = subChildCount * subChildSpace;\n var area = size.width / 2;\n if (subChildCount === 1) {\n x = area - (subChildSpace * 0.5);\n }\n else {\n x = area - (childSpace / 2) - ((subChildCount - 1) * iconSpace) / 2;\n }\n //set style\n this.setStyle(subprocessNode, node);\n if ((node.constraints & NodeConstraints.Shadow) !== 0) {\n subProcessShapes.shadow = node.shadow;\n }\n var collapsedShape = new PathElement();\n collapsedShape.id = node.id + '_0_collapsed';\n collapsedShape.width = 12;\n collapsedShape.height = 12;\n collapsedShape.style.fill = 'black';\n collapsedShape.margin.bottom = 5;\n collapsedShape.horizontalAlignment = 'Left';\n collapsedShape.verticalAlignment = 'Bottom';\n collapsedShape.setOffsetWithRespectToBounds(0, 1, 'Fraction');\n collapsedShape.relativeMode = 'Point';\n collapsedShape.data = getBpmnShapePathData('collapsedShape');\n collapsedShape.margin.left = x;\n if (subProcess.collapsed === true && !subProcess.processes) {\n collapsedShape.visible = true;\n }\n else {\n collapsedShape.visible = false;\n }\n if (collapsedShape.visible === true) {\n x += 12 + 6;\n }\n subProcessShapes.children.push(collapsedShape);\n if (subProcess.type === 'Event') {\n subprocessNode.style.strokeWidth = 1;\n subprocessNode.style.strokeDashArray = '2 2';\n events = subProcess.events;\n for (var i = 0; i < events.length; i++) {\n event = events[i];\n this.getBPMNSubEvent(event, node, subProcessShapes);\n }\n }\n // set loop for subprocess\n subProcessLoopShapes = this.getBPMNSubProcessLoopShape(node);\n if (subChildCount === 1) {\n x = area + 8;\n }\n subProcessLoopShapes.margin.left = x;\n if (subProcessLoopShapes.visible === true) {\n x += subChildSpace + iconSpace;\n }\n subProcessShapes.children.push(subProcessLoopShapes);\n // set boundary for subprocess\n subprocessNode.id = node.id + '_boundary';\n if (subProcess.boundary === 'Default') {\n subprocessNode.style.strokeWidth = 1;\n subprocessNode.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Call') {\n subprocessNode.style.strokeWidth = 4;\n subprocessNode.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Event') {\n subprocessNode.style.strokeWidth = 1;\n subprocessNode.style.strokeDashArray = '2 2';\n }\n //set adhoc for subprocess\n subprocessAdhoc = this.getBPMNAdhocShape(node, subprocessAdhoc, subProcess);\n if (subChildCount === 1) {\n x = area + 8;\n }\n subprocessAdhoc.margin.left = x;\n if (subprocessAdhoc.visible === true) {\n x += subChildSpace + iconSpace;\n }\n subProcessShapes.children.push(subprocessAdhoc);\n //set compensation for subprocess\n var subprocessComp = new PathElement();\n if (subProcess.compensation === true) {\n subprocessComp.visible = true;\n }\n else {\n subprocessComp.visible = false;\n }\n subprocessComp = this.getBPMNCompensationShape(node, subprocessComp);\n if (subChildCount === 1) {\n x = area + 8;\n }\n subprocessComp.margin.left = x;\n if (subprocessComp.visible === true) {\n x += subChildSpace + iconSpace;\n }\n subProcessShapes.children.push(subprocessComp);\n //set style for subprocess\n subProcessShapes.style.strokeColor = 'transparent';\n subProcessShapes.style.strokeWidth = 0;\n subProcessShapes.style.fill = 'transparent';\n return subProcessShapes;\n };\n BpmnDiagrams.prototype.getBPMNSubEvent = function (event, node, container, id) {\n container.children = container.children || [];\n var eventContainer;\n eventContainer = this.getBPMNEventShape(node, event, true, id);\n this.getBPMNSubprocessEvent(node, eventContainer, event);\n eventContainer.id = id || (node.id + '_subprocessEvents');\n eventContainer.width = event.width || 20;\n eventContainer.height = event.height || 20;\n // set offset for subevents\n eventContainer.setOffsetWithRespectToBounds(event.offset.x, event.offset.y, 'Fraction');\n eventContainer.relativeMode = 'Point';\n //set margin for subevents\n eventContainer.margin = event.margin;\n //set alignment for subevents\n eventContainer.horizontalAlignment = event.horizontalAlignment;\n eventContainer.verticalAlignment = event.verticalAlignment;\n // set style for subevent\n eventContainer.style.fill = 'transparent';\n eventContainer.style.strokeColor = 'transparent';\n eventContainer.style.strokeWidth = 0;\n container.children.push(eventContainer);\n };\n BpmnDiagrams.prototype.getBPMNSubProcessTransaction = function (node, shape, container) {\n var shapeWidth = container.children[0].width;\n var shapeHeight = container.children[0].height;\n var innerRect = new DiagramElement();\n innerRect.margin = { left: 3, right: 0, top: 3, bottom: 0 };\n innerRect.id = node.id + '_0_Subprocess_innnerRect';\n innerRect.cornerRadius = 10;\n innerRect.width = shapeWidth - 6;\n innerRect.height = shapeHeight - 6;\n container.children.push(innerRect);\n var transactionEvents = new Canvas();\n transactionEvents.id = node.id + '_transaction_events';\n transactionEvents.style.gradient = node.style.gradient;\n var transaction = shape.activity.subProcess.transaction;\n this.getBPMNSubEvent(transaction.success, node, transactionEvents, node.id + '_success');\n this.getBPMNSubEvent(transaction.cancel, node, transactionEvents, node.id + '_cancel');\n this.getBPMNSubEvent(transaction.failure, node, transactionEvents, node.id + '_failure');\n this.updateDiagramContainerVisibility(transactionEvents.children[0], transaction.success.visible);\n this.updateDiagramContainerVisibility(transactionEvents.children[1], transaction.cancel.visible);\n this.updateDiagramContainerVisibility(transactionEvents.children[2], transaction.failure.visible);\n transactionEvents.float = true;\n transactionEvents.width = shapeWidth;\n transactionEvents.height = shapeHeight;\n transactionEvents.style.fill = transactionEvents.style.strokeColor = 'transparent';\n container.children.push(transactionEvents);\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNSubProcessLoopShape = function (node) {\n var shape = node.shape.activity;\n var loopType;\n var subprocessLoop = new PathElement();\n var subprocessLoopData;\n var subProcess = shape.subProcess;\n loopType = subProcess.loop;\n subprocessLoopData = getBpmnLoopShapePathData(loopType);\n if (loopType !== 'None') {\n subprocessLoop.visible = true;\n }\n else {\n subprocessLoop.visible = false;\n }\n subprocessLoop.id = node.id + '_loop';\n subprocessLoop.data = subprocessLoopData;\n subprocessLoop.style.fill = 'black';\n subprocessLoop.width = 12;\n subprocessLoop.height = 12;\n subprocessLoop.horizontalAlignment = 'Left';\n subprocessLoop.verticalAlignment = 'Bottom';\n subprocessLoop.setOffsetWithRespectToBounds(0, 1, 'Fraction');\n subprocessLoop.relativeMode = 'Point';\n subprocessLoop.margin.bottom = 5;\n subprocessLoop.style.fill = 'transparent';\n return subprocessLoop;\n };\n /** @private */\n BpmnDiagrams.prototype.drag = function (obj, tx, ty, diagram) {\n var node = diagram.nameTable[(obj).processId];\n if (obj.margin.top + ty >= 0) {\n diagram.nodePropertyChange(obj, {}, { margin: { top: obj.margin.top + ty } });\n }\n if (obj.margin.left + tx >= 0) {\n diagram.nodePropertyChange(obj, {}, { margin: { left: obj.margin.left + tx } });\n }\n var diffX = 0;\n var diffY = 0;\n var bound = this.getChildrenBound(node, obj.id, diagram);\n this.updateSubProcessess(bound, obj, diagram);\n node.wrapper.measure(new Size(undefined, undefined));\n node.wrapper.arrange(node.wrapper.desiredSize);\n diagram.refreshCanvasLayers();\n diagram.updateSelector();\n this.updateDocks(obj, diagram);\n };\n /** @private */\n BpmnDiagrams.prototype.dropBPMNchild = function (target, source, diagram) {\n if (source && source.shape.type === 'Bpmn' && source.shape.shape !== 'TextAnnotation') {\n var subProcess = diagram.nameTable[target.id].shape.activity.subProcess;\n if (diagram.currentSymbol && target.shape.type === 'Bpmn' && !subProcess.collapsed) {\n source.processId = target.id;\n return;\n }\n subProcess.processes = subProcess.processes || [];\n if (subProcess.processes && subProcess.processes.indexOf(source.id) === -1 && !subProcess.collapsed) {\n subProcess.processes.push(source.id);\n var redoElement = cloneObject(source);\n var sources = diagram.nameTable[source.id].wrapper;\n var targetWrapper = diagram.nameTable[target.id].wrapper;\n sources.margin.top = (sources.offsetY - (sources.actualSize.height / 2))\n - (target.offsetY - (target.actualSize.height / 2));\n sources.margin.left = (sources.offsetX - (sources.actualSize.width / 2))\n - (target.offsetX - (target.actualSize.width / 2));\n sources.margin.top = (sources.margin.top < 0) ? 0 : sources.margin.top;\n sources.margin.left = (sources.margin.left < 0) ? 0 : sources.margin.left;\n diagram.nameTable[source.id].processId = target.id;\n targetWrapper.children.push(diagram.nameTable[source.id].wrapper);\n var bound = this.getChildrenBound(target, source.id, diagram);\n this.updateSubProcessess(bound, source, diagram);\n targetWrapper.measure(new Size(undefined, undefined));\n targetWrapper.arrange(targetWrapper.desiredSize);\n diagram.refreshCanvasLayers();\n diagram.updateSelector();\n var edges = [];\n edges = edges.concat(source.outEdges, source.inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n if (diagram.bpmnModule.textAnnotationConnectors.indexOf(diagram.nameTable[edges[i]]) === -1) {\n diagram.remove(diagram.nameTable[edges[i]]);\n }\n }\n var obj = cloneObject(source);\n var entry = {\n type: 'PositionChanged', undoObject: { nodes: [redoElement] },\n redoObject: { nodes: [obj] }, category: 'Internal'\n };\n diagram.addHistoryEntry(entry);\n if (diagram.mode === 'SVG') {\n if (source.zIndex < target.zIndex) {\n diagram.updateProcesses(source);\n }\n }\n this.updateDocks(source, diagram);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateDocks = function (obj, diagram) {\n if (obj.shape.type === 'Bpmn' && obj.shape.activity.subProcess.processes &&\n !obj.shape.activity.subProcess.collapsed) {\n var processTable = obj.shape.activity.subProcess.processes;\n for (var _i = 0, processTable_1 = processTable; _i < processTable_1.length; _i++) {\n var i = processTable_1[_i];\n var actualObject = diagram.nameTable[i];\n if (actualObject) {\n diagram.updateConnectorEdges(actualObject);\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n if (actualObject.shape.activity.subProcess.processes\n && actualObject.shape.activity.subProcess.processes.length) {\n this.updateDocks(actualObject, diagram);\n }\n }\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.removeBpmnProcesses = function (currentObj, diagram) {\n var element = diagram.nameTable[currentObj.processId];\n if (currentObj.shape.type === 'Bpmn' && currentObj.shape.activity.subProcess.processes &&\n currentObj.shape.activity.subProcess.processes.length > 0) {\n var processes = currentObj.shape.activity.subProcess.processes;\n for (var j = processes.length - 1; j >= 0; j--) {\n diagram.remove(diagram.nameTable[processes[j]]);\n }\n }\n if (element) {\n diagram.removeDependentConnector(currentObj);\n var processes = element.shape.activity.subProcess.processes;\n this.removeChildFromBPMN(element.wrapper, currentObj.id);\n var processIndex = processes.indexOf(currentObj.id);\n processes.splice(processIndex, 1);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.removeChildFromBPMN = function (wrapper, name) {\n for (var _i = 0, _a = wrapper.children; _i < _a.length; _i++) {\n var i = _a[_i];\n if (i.id === name) {\n wrapper.children.splice(wrapper.children.indexOf(i), 1);\n }\n else if (i.children) {\n this.removeChildFromBPMN(i, name);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.removeProcess = function (id, diagram) {\n var node = diagram.nameTable[id];\n if (node) {\n var parent_1 = diagram.nameTable[node.processId];\n if (parent_1 && parent_1.shape.type === 'Bpmn') {\n var processes = parent_1.shape.activity.subProcess.processes;\n diagram.removeDependentConnector(node);\n this.removeChildFromBPMN(parent_1.wrapper, id);\n var processIndex = processes.indexOf(id);\n processes.splice(processIndex, 1);\n node.processId = '';\n diagram.refreshDiagramLayer();\n diagram.updateSelector();\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.addProcess = function (process, parentId, diagram) {\n var id;\n process.id = process.id || randomId();\n id = process.id;\n var node = diagram.nameTable[id];\n if (!node) {\n diagram.add(process);\n }\n process.processId = parentId;\n var parentNode = diagram.nameTable[parentId];\n var subProcess = parentNode.shape.activity.subProcess;\n if (node && parentNode && parentNode.shape.type === 'Bpmn' && node.shape.type === 'Bpmn' &&\n subProcess.processes) {\n node.processId = parentId;\n var processes = parentNode.shape.activity.subProcess.processes;\n if (processes.indexOf(id) < 0) {\n processes.push(id);\n }\n parentNode.wrapper.children.push(node.wrapper);\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n diagram.bpmnModule.updateDocks(parentNode, diagram);\n diagram.refreshDiagramLayer();\n if (diagram.mode === 'SVG' && (node.shape && node.shape.activity\n && !node.shape.activity.subProcess.processes)) {\n var child = getDiagramElement(parentId + '_groupElement');\n child.appendChild(getDiagramElement(process.id + '_groupElement'));\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getChildrenBound = function (node, excludeChild, diagram) {\n var processes = node.shape.activity.subProcess.processes;\n var bound;\n if (processes && processes.length) {\n for (var _i = 0, processes_1 = processes; _i < processes_1.length; _i++) {\n var i = processes_1[_i];\n if (excludeChild !== i) {\n if (!bound) {\n bound = diagram.nameTable[i].wrapper.bounds;\n }\n else {\n bound = diagram.nameTable[i].wrapper.bounds.uniteRect(bound);\n }\n }\n }\n }\n return bound || diagram.nameTable[excludeChild].wrapper.bounds;\n };\n /** @private */\n BpmnDiagrams.prototype.updateSubProcessess = function (bound, obj, diagram) {\n var diffX;\n var diffY;\n var node = diagram.nameTable[obj.processId];\n var right;\n var bottom;\n var pivot = { x: 0.5, y: 0.5 };\n if ((node.wrapper.bounds.left + obj.margin.left + obj.width) > (node.wrapper.bounds.right)) {\n right = true;\n }\n if ((node.wrapper.bounds.top + obj.margin.top + obj.height) > (node.wrapper.bounds.bottom)) {\n bottom = true;\n }\n if (right) {\n pivot.x = 0;\n }\n if (bottom) {\n pivot.y = 0;\n }\n var actualSize = node.wrapper.actualSize;\n if (right) {\n diffX = (obj.wrapper.margin.left + obj.wrapper.bounds.width) / actualSize.width;\n }\n if (bottom) {\n diffY = (obj.wrapper.margin.top + obj.wrapper.bounds.height) / actualSize.height;\n }\n if (diffX > 0 || diffY > 0) {\n diagram.commandHandler.scale(diagram.nameTable[obj.processId], diffX || 1, diffY || 1, pivot);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNCompensationShape = function (node, compensationNode) {\n compensationNode.id = node.id + '_0_compensation';\n compensationNode.width = 12;\n compensationNode.height = 12;\n compensationNode.margin.bottom = 5;\n compensationNode.style.fill = 'transparent';\n compensationNode.horizontalAlignment = 'Left';\n compensationNode.verticalAlignment = 'Bottom';\n compensationNode.relativeMode = 'Object';\n compensationNode.data = 'M 22.462 18.754 l -6.79 3.92 l 6.79 3.92 V 22.89 l 6.415 3.705 v -7.841 l -6.415 3.705 V 18.754 Z' +\n ' M 28.331 19.701 v 5.947 l -5.149 -2.973 L 28.331 19.701 Z M 21.916 25.647 l -5.15 -2.973 l 5.15 -2.973 V 25.647 Z' +\n ' M 22.275 12.674 c -5.513 0 -9.999 4.486 -9.999 9.999 c 0 5.514 4.486 10.001 9.999 10.001' +\n ' c 5.514 0 9.999 -4.486 9.999 -10.001 C 32.274 17.16 27.789 12.674 22.275 12.674 Z M 22.275 32.127 ' +\n ' c -5.212 0 -9.453 -4.241 -9.453 -9.454 c 0 -5.212 4.241 -9.453 9.453 -9.453 c 5.212 0 9.453 4.241 9.453 9.453' +\n ' C 31.728 27.887 27.487 32.127 22.275 32.127 Z';\n return compensationNode;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNActivityShape = function (node) {\n var eventshape = new Canvas();\n var content;\n var shape = node.shape.activity;\n var task = shape.activity;\n var subProcess = shape.subProcess;\n var activityType = shape.activity;\n if (task === 'Task') {\n content = this.getBPMNTaskShape(node);\n }\n if (task === 'SubProcess' && subProcess) {\n content = this.getBPMNSubProcessShape(node);\n }\n eventshape.children = [content];\n eventshape.style.fill = 'transparent';\n eventshape.style.strokeColor = 'transparent';\n eventshape.style.strokeWidth = 0;\n return eventshape;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNSubprocessEvent = function (node, subProcessEventsShapes, events) {\n var annotations;\n var ports;\n if (events.annotations.length !== 0) {\n for (var i = 0; i < events.annotations.length; i++) {\n var annot = events.annotations[i];\n annotations = node.initAnnotationWrapper(annot);\n annotations.width = events.width;\n annotations.height = events.height;\n subProcessEventsShapes.children.push(annotations);\n }\n }\n if (events.ports.length !== 0) {\n for (var i = 0; i < events.ports.length; i++) {\n var port = events.ports[i];\n ports = node.initPortWrapper(port);\n subProcessEventsShapes.children.push(ports);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNAdhocShape = function (node, adhocNode, subProcess) {\n adhocNode.id = node.id + '_0_adhoc';\n adhocNode.width = 12;\n adhocNode.height = 8;\n adhocNode.style.fill = 'black';\n adhocNode.margin.bottom = 5;\n adhocNode.horizontalAlignment = 'Left';\n adhocNode.verticalAlignment = 'Bottom';\n adhocNode.relativeMode = 'Object';\n adhocNode.data = 'M 49.832 76.811 v -2.906 c 0 0 0.466 -1.469 1.931 -1.5 c 1.465 -0.031 2.331 1.219 2.897 1.688 ' +\n 's 1.06 0.75 1.526 0.75 c 0.466 0 1.548 -0.521 1.682 -1.208 s 0.083 3.083 0.083 3.083 s -0.76 0.969 -1.859 0.969 ' +\n 'c -1.066 0 -1.865 -0.625 -2.464 -1.438 s -1.359 -0.998 -2.064 -0.906 C 50.598 75.467 49.832 76.811 49.832 76.811 Z';\n if (subProcess && subProcess.adhoc === true) {\n adhocNode.visible = true;\n }\n else {\n adhocNode.visible = false;\n }\n return adhocNode;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNTextAnnotation = function (node, diagram, annotation, content) {\n annotation.id = annotation.id || randomId();\n annotation.nodeId = node.id;\n var annotationContainer = new Canvas();\n var annotationPath = new PathElement();\n var textElement = new TextElement();\n var margin = 10;\n annotationPath.id = node.id + '_' + annotation.id + '_path';\n annotationPath.width = annotation.width;\n annotationPath.height = annotation.height;\n annotationPath.relativeMode = 'Object';\n textElement.id = node.id + '_' + annotation.id + '_text';\n textElement.content = annotation.text;\n var style = node.style;\n textElement.style = {\n fontSize: style.fontSize, italic: style.italic, gradient: null, opacity: style.opacity,\n bold: style.bold, textWrapping: style.textWrapping, color: style.color, fill: 'white',\n fontFamily: style.fontFamily, whiteSpace: style.whiteSpace, textOverflow: 'Wrap',\n strokeColor: 'none', strokeWidth: 0,\n strokeDashArray: style.strokeDashArray, textAlign: style.textAlign, textDecoration: style.textDecoration\n };\n textElement.horizontalAlignment = 'Center';\n textElement.verticalAlignment = 'Center';\n textElement.relativeMode = 'Object';\n textElement.margin = { left: 5, right: 5, top: 5, bottom: 5 };\n annotationContainer.offsetX = node.offsetX + annotation.length *\n Math.cos(annotation.angle * (Math.PI / 180));\n annotationContainer.offsetY = node.offsetY + annotation.length *\n Math.sin(annotation.angle * (Math.PI / 180));\n annotationContainer.float = true;\n annotationContainer.transform = Transform.Self;\n annotationContainer.id = node.id + '_textannotation_' + annotation.id;\n annotationContainer.style.strokeColor = 'transparent';\n annotationContainer.margin = { left: margin, right: margin, top: margin, bottom: margin };\n annotationContainer.relativeMode = 'Object';\n annotationContainer.rotateAngle = 0;\n annotationContainer.children = [annotationPath, textElement];\n var annotationNode = new Node(node.shape, 'annotations', { id: annotationContainer.id, shape: { type: 'Bpmn', shape: 'TextAnnotation' } }, true);\n annotationNode.ports = [\n {\n id: annotationPath.id + '_port', shape: 'Square',\n offset: { x: 0, y: 0.5 },\n }\n ];\n annotationNode.offsetX = annotationContainer.offsetX;\n annotationNode.offsetY = annotationContainer.offsetY;\n annotationNode.text = annotation.text;\n annotationNode.angle = annotation.angle;\n annotationNode.length = annotation.length;\n annotationNode.width = annotation.width;\n annotationNode.height = annotation.height;\n annotationNode.wrapper = annotationContainer;\n annotationContainer.children.push(annotationNode.initPortWrapper(annotationNode.ports[0]));\n var bounds = new Rect(0, 0, 0, 0);\n var width = node.width || node.minWidth || 0;\n var height = node.height || node.minHeight || 0;\n if (width !== undefined && height !== undefined) {\n bounds = new Rect(node.offsetX - width / 2, node.offsetY - height / 2, width, height);\n }\n this.setAnnotationPath(bounds, annotationContainer, { x: annotationNode.offsetX, y: annotationNode.offsetY }, annotationNode, annotation.length, annotation.angle);\n var connector = {\n id: node.id + '_' + annotation.id + '_connector',\n constraints: ConnectorConstraints.Default & ~(ConnectorConstraints.DragTargetEnd | ConnectorConstraints.Drag),\n sourceID: node.id, targetID: annotationContainer.id,\n targetDecorator: { shape: 'None' }\n };\n var annotationConnector = new Connector(node.shape, 'annotations', connector, true);\n annotationConnector.targetPortID = annotationNode.ports[0].id;\n annotationConnector.init(diagram);\n annotationConnector.wrapper.float = false;\n annotationConnector.wrapper.transform = Transform.Self;\n content.children.push(annotationConnector.wrapper);\n annotationConnector.zIndex = 10000;\n var entry = this.annotationObjects[node.id];\n if (!entry) {\n entry = {};\n }\n if (!entry[annotation.id]) {\n entry[annotation.id] = {};\n }\n var nodeKey = 'node';\n var connKey = 'connector';\n entry[annotation.id][nodeKey] = annotationNode;\n entry[annotation.id][connKey] = annotationConnector;\n this.annotationObjects[node.id] = entry;\n diagram.initObject(annotationNode, undefined, false);\n annotationNode.zIndex = 10000;\n return annotationContainer;\n };\n /** @private */\n BpmnDiagrams.prototype.renderBPMNTextAnnotation = function (diagram, annotation, content) {\n annotation.id = annotation.id || randomId();\n var annotationsContainer = new Canvas();\n var annotationPath = new PathElement();\n var textObject = new TextElement();\n var margin = 10;\n annotationPath.id = '_' + annotation.id + '_path';\n annotationPath.width = annotation.width;\n annotationPath.height = annotation.height;\n annotationPath.relativeMode = 'Object';\n textObject.id = annotation.id + '_text';\n textObject.content = annotation.shape.annotation.text;\n var textStyle = annotation.style;\n textObject.style = {\n fontSize: textStyle.fontSize, italic: textStyle.italic, gradient: null, opacity: textStyle.opacity,\n bold: textStyle.bold, textWrapping: textStyle.textWrapping, color: textStyle.color, fill: 'white',\n fontFamily: textStyle.fontFamily, whiteSpace: textStyle.whiteSpace, textOverflow: 'Wrap',\n strokeColor: 'none', strokeWidth: 0,\n strokeDashArray: textStyle.strokeDashArray, textAlign: textStyle.textAlign, textDecoration: textStyle.textDecoration\n };\n textObject.horizontalAlignment = 'Left';\n textObject.verticalAlignment = 'Center';\n textObject.relativeMode = 'Object';\n textObject.margin = { left: 5, right: 5, top: 5, bottom: 5 };\n annotationsContainer.offsetX = annotation.offsetX + annotation.shape.annotation.length *\n Math.cos(annotation.shape.annotation.angle * (Math.PI / 180));\n annotationsContainer.offsetY = annotation.offsetY + annotation.shape.annotation.length *\n Math.sin(annotation.shape.annotation.angle * (Math.PI / 180));\n annotationsContainer.float = true;\n // annotationContainer.transform = Transform.Self;\n annotationsContainer.id = annotation.id + '_textannotation_' + annotation.id;\n annotationsContainer.style.strokeColor = 'transparent';\n annotationsContainer.margin = { left: margin, right: margin, top: margin, bottom: margin };\n annotationsContainer.relativeMode = 'Object';\n annotationsContainer.rotateAngle = 0;\n annotationsContainer.children = [annotationPath, textObject];\n var annotationObject = new Node(annotation.shape, 'annotations', { id: annotationsContainer.id, shape: { type: 'Bpmn', shape: 'TextAnnotation' } }, true);\n annotationObject.ports = [\n {\n id: annotationPath.id + '_port', shape: 'Square',\n offset: { x: 0, y: 0.5 },\n }\n ];\n annotationObject.offsetX = annotationsContainer.offsetX;\n annotationObject.offsetY = annotationsContainer.offsetY;\n if (annotationObject.shape && annotationObject.shape.annotation) {\n annotationObject.text = annotation.shape.annotation.text;\n annotationObject.angle = annotation.shape.annotation.angle;\n annotationObject.length = annotation.shape.annotation.length;\n }\n annotationObject.width = annotation.width;\n annotationObject.height = annotation.height;\n annotationObject.wrapper = annotationsContainer;\n annotationsContainer.children.push(annotationObject.initPortWrapper(annotationObject.ports[0]));\n var bounds = new Rect(0, 0, 0, 0);\n var width = annotation.width || 0;\n var height = annotation.height || 0;\n if (width !== undefined && height !== undefined) {\n bounds = new Rect(annotation.offsetX - width / 2, annotation.offsetY - height / 2, width, height);\n }\n this.setAnnotationPath(bounds, annotationsContainer, { x: annotationObject.offsetX, y: annotationObject.offsetY }, annotationObject, annotation.length, annotation.angle);\n return annotationsContainer;\n };\n /** @private */\n BpmnDiagrams.prototype.getTextAnnotationWrapper = function (node, id) {\n if (node && node.shape.type === 'Bpmn') {\n var shape = node.shape;\n if (shape.shape === 'TextAnnotation') {\n return node.wrapper.children[1];\n }\n else if (this.annotationObjects[node.id] && this.annotationObjects[node.id][id]) {\n var annotationNode = this.annotationObjects[node.id][id].node;\n return this.getTextAnnotationWrapper(annotationNode, id);\n }\n }\n return null;\n };\n /** @private */\n BpmnDiagrams.prototype.addAnnotation = function (node, annotation, diagram) {\n var bpmnShapeContent = node.wrapper.children[0];\n var shape = node.shape;\n annotation.nodeId = node.id;\n var annotationObj = new BpmnAnnotation(shape, 'annotations', annotation, true);\n shape.annotations.push(annotationObj);\n bpmnShapeContent.children.push(this.getBPMNTextAnnotation(node, diagram, annotation, bpmnShapeContent));\n node.wrapper.measure(new Size());\n node.wrapper.arrange(node.wrapper.desiredSize);\n return this.annotationObjects[node.id][annotation.id].connector;\n };\n BpmnDiagrams.prototype.clearAnnotations = function (obj, diagram) {\n var bpmnShape = obj.shape;\n if (bpmnShape.annotations.length) {\n for (var _i = 0, _a = bpmnShape.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n this.removeAnnotationObjects(obj, annotation, diagram);\n }\n }\n delete this.annotationObjects[obj.id];\n };\n /** @private */\n BpmnDiagrams.prototype.checkAndRemoveAnnotations = function (node, diagram) {\n //remove connector path\n //remove annotation node wrapper\n //remove from a quad\n if (node.shape.type === 'Bpmn') {\n if (node.shape.shape === 'TextAnnotation') {\n var id = node.id.split('_');\n var annotationId = id[id.length - 1];\n var nodeId = id[id.length - 3] || id[0];\n var parentNode = diagram.nameTable[nodeId];\n var bpmnShape = parentNode.shape;\n for (var _i = 0, _a = bpmnShape.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n if (annotation.id === annotationId) {\n var index = bpmnShape.annotations.indexOf(annotation);\n if (index !== -1) {\n diagram.removeDependentConnector(node);\n this.removeAnnotationObjects(parentNode, annotation, diagram);\n return true;\n }\n }\n }\n }\n else if (node.shape.annotations && node.shape.annotations.length) {\n this.clearAnnotations(node, diagram);\n }\n }\n return false;\n };\n BpmnDiagrams.prototype.removeAnnotationObjects = function (parentNode, annotation, diagram) {\n var bpmnShape = parentNode.shape;\n var index = bpmnShape.annotations.indexOf(annotation);\n if (index !== -1) {\n if (!(diagram.diagramActions & DiagramAction.UndoRedo) && !(diagram.diagramActions & DiagramAction.Group)) {\n var entry_1 = {\n type: 'CollectionChanged', changeType: 'Remove', undoObject: cloneObject(annotation),\n redoObject: cloneObject(annotation), category: 'Internal'\n };\n diagram.addHistoryEntry(entry_1);\n }\n bpmnShape.annotations.splice(index, 1);\n var entry = this.annotationObjects[parentNode.id];\n if (entry && entry[annotation.id]) {\n var annotationNode = entry[annotation.id].node;\n var annotationConnector = entry[annotation.id].connector;\n diagram.removeElements(annotationNode);\n diagram.removeElements(annotationConnector);\n var nodeContent = parentNode.wrapper.children[0];\n index = nodeContent.children.indexOf(annotationNode.wrapper);\n nodeContent.children.splice(index, 1);\n index = nodeContent.children.indexOf(annotationConnector.wrapper);\n nodeContent.children.splice(index, 1);\n diagram.removeFromAQuad(annotationNode);\n diagram.removeFromAQuad(annotationConnector);\n delete diagram.nameTable[annotationNode.id];\n delete diagram.nameTable[annotationConnector.id];\n delete entry[annotation.id];\n }\n }\n };\n BpmnDiagrams.prototype.setAnnotationPath = function (parentBounds, wrapper, position, node, length, angle) {\n var rotateAngle = this.getAnnotationPathAngle(position, parentBounds);\n var data = '';\n var pathElement = wrapper.children[0];\n var portElement = wrapper.children[2];\n var textElement = wrapper.children[1];\n pathElement.horizontalAlignment = 'Stretch';\n pathElement.verticalAlignment = 'Stretch';\n textElement.margin.left = textElement.margin.right = 5;\n textElement.margin.top = textElement.margin.bottom = 5;\n var point;\n var segment;\n if (rotateAngle === 0) {\n data = 'M10,20 L0,20 L0,0 L10,0';\n pathElement.width = 10;\n pathElement.horizontalAlignment = 'Left';\n portElement.setOffsetWithRespectToBounds(0, 0.5, 'Fraction');\n textElement.margin.top = textElement.margin.bottom = 10;\n point = parentBounds.middleRight;\n segment = {\n x1: parentBounds.right, y1: parentBounds.top,\n x2: parentBounds.right, y2: parentBounds.bottom\n };\n }\n else if (rotateAngle === 180) {\n data = 'M0,0 L10,0 L10,20 L0,20';\n pathElement.width = 10;\n pathElement.horizontalAlignment = 'Right';\n portElement.setOffsetWithRespectToBounds(1, 0.5, 'Fraction');\n textElement.margin.top = textElement.margin.bottom = 10;\n point = parentBounds.middleLeft;\n segment = {\n x1: parentBounds.left, y1: parentBounds.top,\n x2: parentBounds.left, y2: parentBounds.bottom\n };\n }\n else if (rotateAngle === 90) {\n data = 'M20,10 L20,0 L0,0 L0,10';\n pathElement.height = 10;\n pathElement.verticalAlignment = 'Top';\n portElement.setOffsetWithRespectToBounds(0.5, 0, 'Fraction');\n textElement.margin.left = textElement.margin.right = 10;\n point = parentBounds.bottomCenter;\n segment = {\n x1: parentBounds.right, y1: parentBounds.bottom,\n x2: parentBounds.left, y2: parentBounds.bottom\n };\n }\n else {\n data = 'M0,0 L0,10 L20,10 L20,0';\n pathElement.height = 10;\n pathElement.verticalAlignment = 'Bottom';\n portElement.setOffsetWithRespectToBounds(0.5, 1, 'Fraction');\n textElement.margin.left = textElement.margin.right = 10;\n point = parentBounds.topCenter;\n segment = {\n x1: parentBounds.right, y1: parentBounds.top,\n x2: parentBounds.left, y2: parentBounds.top,\n };\n }\n var center = parentBounds.center;\n var endPoint = Point.transform(position, angle, Math.max(parentBounds.width, parentBounds.height));\n point = getIntersectionPoints(segment, [center, endPoint], false, center);\n pathElement.data = data;\n if (length !== undefined && angle !== undefined) {\n point = Point.transform(point, angle, length);\n wrapper.offsetX = node.offsetX = point.x;\n wrapper.offsetY = node.offsetY = point.y;\n }\n };\n BpmnDiagrams.prototype.isBpmnTextAnnotation = function (activeLabel, diagram) {\n if (this.annotationObjects) {\n var parentNodeId = activeLabel.parentId;\n var annotationId = activeLabel.id;\n var parentNode = diagram.nameTable[parentNodeId];\n if (parentNode && parentNode.shape.type === 'Bpmn' && this.annotationObjects[parentNodeId] &&\n this.annotationObjects[parentNodeId][annotationId]) {\n return parentNode;\n }\n return null;\n }\n return null;\n };\n /** @private */\n BpmnDiagrams.prototype.updateTextAnnotationContent = function (parentNode, activeLabel, text, diagram) {\n var parentNodeId = activeLabel.parentId;\n var annotationId = activeLabel.id;\n if (this.annotationObjects[parentNodeId] && this.annotationObjects[parentNodeId][annotationId]) {\n for (var _i = 0, _a = parentNode.shape.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n if (annotation.id === annotationId) {\n annotation.text = text;\n var wrapper = this.annotationObjects[parentNodeId][annotationId].node.wrapper.children[1];\n wrapper.content = text;\n wrapper.visible = true;\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n }\n }\n }\n };\n BpmnDiagrams.prototype.updateQuad = function (actualObject, diagram) {\n var annotation = actualObject.shape.annotations;\n var annotationNode;\n if (annotation && annotation.length > 0) {\n for (var i = 0; i < annotation.length; i++) {\n annotationNode = this.annotationObjects[actualObject.id][annotation[i].id].node;\n diagram.updateQuad(annotationNode);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateTextAnnotationProp = function (actualObject, oldObject, diagram) {\n if (actualObject.shape.type === 'Bpmn') {\n var annotation = actualObject.shape.annotations;\n if (annotation && annotation.length > 0) {\n for (var i = 0; i < actualObject.wrapper.children[0].children.length; i++) {\n for (var j = 0; j < annotation.length; j++) {\n var annotationId = actualObject.wrapper.children[0].children[i].id.split('_');\n var id = annotationId[annotationId.length - 1];\n if (id === annotation[j].id) {\n var annotationNode = this.annotationObjects[actualObject.id][annotation[j].id].node;\n var connector = this.annotationObjects[actualObject.id][annotation[j].id].connector;\n var direction = getPortDirection(connector.targetPoint, actualObject.wrapper.bounds, actualObject.wrapper.bounds, false);\n var position = connector.sourcePoint;\n position = {\n x: connector.sourcePoint.x + actualObject.offsetX - (oldObject.offsetX),\n y: connector.sourcePoint.y + actualObject.offsetY - (oldObject.offsetY)\n };\n position = Point.transform(position, annotation[j].angle, annotation[j].length);\n actualObject.wrapper.children[0].children[i].offsetX =\n annotationNode.offsetX = position.x;\n actualObject.wrapper.children[0].children[i].offsetY =\n annotationNode.offsetY = position.y;\n diagram.updateQuad(annotationNode);\n }\n }\n }\n }\n }\n };\n // /** @private */\n // public findInteractableObject(obj: ConnectorModel, diagram: Diagram): NodeModel | ConnectorModel {\n // if (obj.targetID) {\n // let targetNode: NodeModel = diagram.nameTable[obj.targetID];\n // if (targetNode.shape.type === 'Bpmn' && (targetNode.shape as BpmnShape).shape === 'TextAnnotation') {\n // return targetNode;\n // }\n // }\n // return obj;\n // }\n /** @private */\n BpmnDiagrams.prototype.getSubprocessChildCount = function (node) {\n var count = 0;\n var shape = node.shape.activity;\n var loopType;\n var subProcess = shape.subProcess;\n loopType = subProcess.loop;\n if (loopType !== undefined && loopType !== 'None') {\n count++;\n }\n if ((subProcess.compensation !== undefined) &&\n subProcess.compensation === true) {\n count++;\n }\n if ((subProcess.collapsed !== undefined) &&\n subProcess.collapsed === true) {\n count++;\n }\n if ((subProcess.adhoc !== undefined) &&\n subProcess.adhoc === true) {\n count++;\n }\n return count;\n };\n /** @private */\n BpmnDiagrams.prototype.getTaskChildCount = function (node) {\n var count = 0;\n var shape = node.shape.activity;\n var task = shape.task;\n var loopType;\n if ((task.compensation !== undefined) &&\n task.compensation === true) {\n count++;\n }\n if ((task.loop !== undefined) &&\n task.loop !== 'None') {\n count++;\n }\n return count;\n };\n /** @private */\n BpmnDiagrams.prototype.setStyle = function (child, node) {\n //set style\n child.style.fill = node.style.fill;\n child.style.strokeColor = node.style.strokeColor;\n child.style.strokeWidth = node.style.strokeWidth;\n child.style.strokeDashArray = node.style.strokeDashArray;\n child.style.opacity = node.style.opacity;\n child.style.gradient = node.style.gradient;\n if ((node.constraints & NodeConstraints.Shadow) !== 0) {\n child.shadow = node.shadow;\n }\n };\n //End code conversion region\n //Update BPMN Shapes on NodePropertyChange\n //Start region\n /** @private */\n BpmnDiagrams.prototype.updateBPMN = function (changedProp, oldObject, actualObject, diagram) {\n var newShape = changedProp.shape || {};\n var elementWrapper = actualObject.wrapper.children[0];\n var actualShape = actualObject.shape.shape;\n var sizeChanged = changedProp.width !== undefined || changedProp.height !== undefined;\n if (newShape.shape === 'Gateway' && newShape.gateway) {\n actualObject.wrapper.children[0] = this.getBPMNGatewayShape(actualObject);\n }\n else if (newShape.shape === 'DataObject' && newShape.dataObject) {\n actualObject.wrapper.children[0] = this.getBPMNDataObjectShape(actualObject);\n }\n else if (newShape.shape === 'Activity' && newShape.activity) {\n actualObject.wrapper.children[0] = this.getBPMNActivityShape(actualObject);\n }\n else if (newShape.shape === 'Event' && newShape.event) {\n var shapeEvent = newShape.event;\n actualObject.wrapper.children[0] = this.getBPMNEventShape(actualObject, shapeEvent);\n }\n else if (newShape.shape === 'Message' || newShape.shape === 'DataSource') {\n actualObject.wrapper.children[0] = this.getBPMNShapes(actualObject);\n //} \n // else if (newShape.shape === 'Group') {\n // actualObject.wrapper.children[0] = this.getBPMNGroup(actualObject, diagram);\n }\n else if (newShape.gateway !== undefined || (actualShape === 'Gateway' && sizeChanged)) {\n this.updateBPMNGateway(actualObject, changedProp);\n }\n else if (newShape.dataObject !== undefined || (actualShape === 'DataObject' && sizeChanged)) {\n this.updateBPMNDataObject(actualObject, changedProp, oldObject);\n }\n else if (newShape.activity !== undefined || (actualShape === 'Activity' && sizeChanged)) {\n this.updateBPMNActivity(actualObject, changedProp, oldObject, diagram);\n }\n else if (newShape.event !== undefined || (actualShape === 'Event' && sizeChanged)) {\n this.updateBPMNEvent(actualObject, changedProp, oldObject);\n }\n if (changedProp.style) {\n updateStyle(changedProp.style, elementWrapper instanceof Container ? (actualObject.shape.shape === 'Activity') ?\n elementWrapper.children[0].children[0] :\n elementWrapper.children[0] : elementWrapper);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNGateway = function (node, changedProp) {\n var bpmnShape = node.shape;\n var elementWrapper = node.wrapper.children[0];\n if (bpmnShape) {\n updateStyle(node.style, elementWrapper.children[0]);\n var bpmnshapeGatewaydata = getBpmnGatewayShapePathData(bpmnShape.gateway.type);\n elementWrapper.children[1].data = bpmnshapeGatewaydata;\n }\n if (changedProp.width !== undefined || changedProp.height !== undefined) {\n this.setSizeForBPMNGateway(node.shape.gateway, elementWrapper, changedProp.width || node.width, changedProp.height || node.height);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNDataObject = function (node, newObject, oldObject) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n if (bpmnShape) {\n var elementWrapperChild1 = elementWrapper.children[1];\n var elementWrapperChild2 = elementWrapper.children[2];\n if (newObject.style !== undefined) {\n updateStyle(newObject.style, elementWrapper.children[0]);\n elementWrapperChild1.style.opacity = node.style.opacity;\n elementWrapperChild2.style.opacity = node.style.opacity;\n }\n if (bpmnShape.dataObject) {\n switch (bpmnShape.dataObject.type) {\n case 'None':\n elementWrapperChild1.visible = false;\n break;\n case 'Input':\n elementWrapperChild1.style.fill = 'white';\n break;\n case 'Output':\n elementWrapperChild1.style.fill = 'black';\n break;\n }\n if (oldObject.shape.dataObject.type === 'None') {\n elementWrapperChild1.visible = true;\n }\n if (newObject.shape.dataObject.collection !== undefined) {\n elementWrapperChild2.visible = bpmnShape.dataObject.collection;\n }\n }\n }\n if (newObject.width !== undefined || newObject.height !== undefined) {\n this.setSizeForBPMNDataObjects(node.shape.dataObject, elementWrapper, newObject.width || node.width, newObject.height || node.height);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getEvent = function (node, oldObject, event, child0, child1, child2) {\n switch (event) {\n case 'Start':\n child1.visible = false;\n child0.style.strokeDashArray = '';\n child2.style.fill = 'white';\n child2.style.strokeColor = 'black';\n child0.style.fill = 'white';\n break;\n case 'NonInterruptingStart':\n child0.style.strokeDashArray = '2 3';\n child2.style.fill = 'white';\n child0.style.fill = 'white';\n child2.style.strokeColor = 'black';\n child1.visible = false;\n break;\n case 'Intermediate':\n child0.style.strokeDashArray = '';\n child0.style.fill = 'white';\n child1.style.strokeDashArray = '';\n child0.style.gradient = null;\n child2.style.fill = 'white';\n child2.style.strokeColor = 'black';\n this.updateEventVisibility(oldObject, child1);\n break;\n case 'NonInterruptingIntermediate':\n child0.style.fill = 'white';\n child0.style.gradient = null;\n child2.style.fill = 'white';\n child2.style.strokeColor = 'black';\n child0.style.strokeDashArray = '2 3';\n child1.style.strokeDashArray = '2 3';\n this.updateEventVisibility(oldObject, child1);\n break;\n case 'ThrowingIntermediate':\n case 'End':\n child0.style.fill = event !== 'End' ? 'white' : 'black';\n child0.style.strokeDashArray = '';\n child1.style.strokeDashArray = '';\n child0.style.gradient = null;\n child2.style.fill = 'black';\n this.updateEventVisibility(oldObject, child1);\n child2.style.strokeColor = node.style.fill;\n break;\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateEventVisibility = function (oldObject, child1) {\n if (oldObject.shape.activity && oldObject.shape.activity.subProcess &&\n oldObject.shape.activity.subProcess.events &&\n oldObject.shape.activity.subProcess.events[0] !== undefined &&\n oldObject.shape.activity.subProcess.events[0].event !== undefined) {\n if (oldObject.shape.activity.subProcess.events[0].event === 'NonInterruptingStart' ||\n oldObject.shape.activity.subProcess.events[0].event === 'Start') {\n child1.visible = true;\n }\n }\n else if (oldObject.shape.event !== undefined) {\n if (oldObject.shape.event.event === 'NonInterruptingStart' ||\n oldObject.shape.event.event === 'Start') {\n child1.visible = true;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNEvent = function (node, newObject, oldObject) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n if (bpmnShape) {\n var elementWrapperChild0 = elementWrapper.children[0];\n var elementWrapperChild1 = elementWrapper.children[1];\n var elementWrapperChild2 = elementWrapper.children[2];\n var event_1;\n var trigger = void 0;\n if (newObject.style !== undefined) {\n updateStyle(node.style, elementWrapper.children[0]);\n if (newObject.style.opacity !== undefined || newObject.style.strokeColor !== undefined) {\n elementWrapperChild1.style.opacity = node.style.opacity;\n elementWrapperChild1.style.strokeColor = node.style.strokeColor;\n }\n }\n event_1 = bpmnShape.event.event;\n trigger = bpmnShape.event.trigger;\n if (event_1 !== undefined) {\n this.getEvent(node, oldObject, event_1, elementWrapperChild0, elementWrapperChild1, elementWrapperChild2);\n }\n if (trigger !== undefined) {\n this.updateBPMNEventTrigger(node, newObject);\n }\n }\n if (newObject.width !== undefined || newObject.height !== undefined) {\n this.setSizeForBPMNEvents(node.shape.event, elementWrapper, newObject.width || node.width, newObject.height || node.height);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNEventTrigger = function (node, newObject) {\n var bpmnShape = node.shape;\n var elementWrapper = node.wrapper.children[0].children[2];\n if (newObject.style &&\n (newObject.style.strokeColor !== undefined || newObject.style.opacity !== undefined)) {\n updateStyle(node.style, elementWrapper);\n }\n var bpmnshapeTriggerdata = getBpmnTriggerShapePathData(bpmnShape.event.trigger);\n elementWrapper.data = bpmnshapeTriggerdata;\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivity = function (node, newObject, oldObject, diagram) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n var size = this.getSize(node, elementWrapper.children[0].children[0]);\n if (bpmnShape) {\n var oldProp = oldObject.shape.activity.activity;\n var actualObjectProp = node.shape.activity.activity;\n if ((oldProp === 'SubProcess' || oldProp === 'Task') && (actualObjectProp === 'SubProcess' || actualObjectProp === 'Task')) {\n diagram.removeElements(node);\n node.wrapper.children[0] = this.getBPMNActivityShape(node);\n }\n else {\n if (actualObjectProp === 'Task' && bpmnShape.activity.task !== undefined) {\n this.updateBPMNActivityTask(node, newObject);\n var subChildCount = this.getTaskChildCount(node);\n var x = void 0;\n var childSpace = subChildCount * 12;\n var area = size.width / 2 - childSpace;\n if (subChildCount === 1) {\n x = area + 8;\n }\n else {\n x = area + (subChildCount - 1) * 8;\n }\n if (bpmnShape.activity.task.loop !== undefined) {\n this.updateBPMNActivityTaskLoop(node, newObject, x, subChildCount, area, 2);\n }\n }\n if (actualObjectProp === 'SubProcess' && bpmnShape.activity.subProcess !== undefined) {\n this.updateBPMNActivitySubProcess(node, newObject, oldObject, diagram);\n }\n }\n this.setSizeForBPMNActivity(node.shape.activity, elementWrapper, newObject.width || size.width, newObject.height || size.height, node);\n }\n if (newObject.width !== undefined || newObject.height !== undefined) {\n this.setSizeForBPMNActivity(node.shape.activity, elementWrapper, newObject.width || size.width, newObject.height || size.height, node);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivityTask = function (node, newObject) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0].children[0];\n var task = bpmnShape.activity.task;\n if (task.type === 'Receive' || task.type === 'Send') {\n elementWrapper.children[1].height = 14;\n }\n else {\n elementWrapper.children[1].height = 20;\n }\n if (task.type !== undefined) {\n var bpmnshapeTaskdata = getBpmnTaskShapePathData(task.type);\n elementWrapper.children[1].data = bpmnshapeTaskdata;\n }\n if (bpmnShape.activity.task.call !== undefined) {\n if (bpmnShape.activity.task.call !== false) {\n elementWrapper.children[0].style.strokeWidth = 4;\n }\n else {\n elementWrapper.children[0].style.strokeWidth = 1;\n }\n }\n if (bpmnShape.activity.task.compensation !== undefined) {\n if (bpmnShape.activity.task.compensation === true) {\n elementWrapper.children[3].visible = true;\n }\n else {\n elementWrapper.children[3].visible = false;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivityTaskLoop = function (node, newObject, x, subChildCount, area, start) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0].children[0];\n var activity = bpmnShape.activity;\n var loop;\n var index = 0;\n var bpmnshapeLoopdata;\n if (activity.subProcess !== undefined) {\n var subProcess = activity.subProcess;\n index = (activity.subProcess.type === 'Transaction') ? 2 : 0;\n loop = subProcess.loop;\n bpmnshapeLoopdata = getBpmnLoopShapePathData(loop);\n elementWrapper.children[2 + index].data = bpmnshapeLoopdata;\n elementWrapper.children[2 + index].visible = (loop === 'None') ? false : true;\n }\n else if (activity.task !== undefined && activity.task.loop !== undefined) {\n bpmnshapeLoopdata = getBpmnLoopShapePathData(activity.task.loop);\n elementWrapper.children[2].data = bpmnshapeLoopdata;\n elementWrapper.children[2].visible = (activity.task.loop === 'None') ? false : true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, start + index);\n };\n /** @private */\n BpmnDiagrams.prototype.updateChildMargin = function (elementWrapper, subChildCount, area, x, start) {\n if (subChildCount === 1) {\n for (var i = start; i < elementWrapper.children.length; i++) {\n if (i !== 2 && elementWrapper.children[i].visible === true) {\n elementWrapper.children[i].margin.left = x;\n x = area + 8;\n }\n }\n }\n else {\n x = area + (subChildCount - 1) * 8;\n for (var i = start; i < elementWrapper.children.length; i++) {\n if (i !== 2 && elementWrapper.children[i].visible === true) {\n elementWrapper.children[i].margin.left = x;\n x += 12 + 8;\n }\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivitySubProcess = function (node, newObject, oldObject, diagram) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n var size = this.getSize(node, elementWrapper.children[0].children[0]);\n var subProcess = bpmnShape.activity.subProcess;\n var subChildCount = this.getSubprocessChildCount(node);\n var x;\n var childSpace = subChildCount * 12;\n var area = size.width / 2 - childSpace;\n if (subChildCount === 1) {\n x = area + 8;\n }\n else {\n x = area + (subChildCount - 1) * 8;\n }\n updateStyle(node.style, elementWrapper.children[0].children[0]);\n if (subProcess.events !== undefined) {\n this.updateBPMNSubProcessEvent(node, newObject, oldObject, diagram);\n }\n if (subProcess.adhoc !== undefined) {\n this.updateBPMNSubProcessAdhoc(node, oldObject, subProcess, x, subChildCount, area);\n }\n if (subProcess.boundary !== undefined) {\n this.updateBPMNSubProcessBoundary(node, subProcess);\n }\n if (subProcess.collapsed !== undefined) {\n this.updateBPMNSubProcessCollapsed(node, oldObject, subProcess, x, subChildCount, area, diagram);\n }\n if (subProcess.compensation !== undefined) {\n this.updateBPMNSubProcessCompensation(node, oldObject, subProcess, x, subChildCount, area);\n }\n if (subProcess.loop !== undefined) {\n this.updateBPMNSubProcessLoop(node, oldObject, subProcess, x, subChildCount, area);\n }\n if (subProcess.transaction !== undefined) {\n this.updateBPMNSubProcessTransaction(node, newObject, oldObject, diagram);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessEvent = function (node, newObject, oldObject, diagram) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n var nodeContent = elementWrapper.children[0];\n var index;\n var j = 0;\n var elementWrapperChildLen = elementWrapper.children[0].children.length;\n var subProcess = bpmnShape.activity.subProcess;\n var events;\n var start = 2;\n for (var _i = 0, _a = Object.keys(subProcess.events); _i < _a.length; _i++) {\n var key = _a[_i];\n var eventIndex = Number(key);\n var eventWrapper = nodeContent.children[eventIndex + start];\n var actualEvent = node.shape.activity.subProcess.events[eventIndex];\n this.updateBPMNSubEvent(node, subProcess.events[eventIndex], actualEvent, eventWrapper, newObject, oldObject, diagram);\n }\n };\n BpmnDiagrams.prototype.updateBPMNSubEvent = function (node, newEvent, actualEvent, eventWrapper, newObject, oldObject, diagram) {\n var elementWrapper = node.wrapper.children[0];\n var bpmnShape = newObject.shape;\n var child0 = eventWrapper.children[0];\n var child1 = eventWrapper.children[1];\n var child2 = eventWrapper.children[2];\n var eventType;\n var trigger;\n if (newObject.style) {\n if (newObject.style.strokeColor !== undefined || newObject.style.opacity !== undefined) {\n elementWrapper.children[0].children[1].style.strokeColor = newObject.style.strokeColor;\n elementWrapper.children[0].children[1].style.opacity = newObject.style.opacity;\n }\n }\n if (bpmnShape.activity.subProcess !== undefined) {\n eventType = newEvent.event;\n trigger = newEvent.trigger;\n }\n if (eventType !== undefined) {\n this.getEvent(newObject, oldObject, eventType, child0, child1, child2);\n }\n if (trigger !== undefined) {\n if (newObject.style) {\n updateStyle(newObject.style, elementWrapper.children[0]);\n }\n var bpmnshapeTriggerdata = getBpmnTriggerShapePathData(trigger);\n eventWrapper.children[2].data = bpmnshapeTriggerdata;\n }\n if (newEvent.height !== undefined || newEvent.width !== undefined) {\n this.getEventSize(newEvent, eventWrapper);\n }\n if (newEvent.id !== undefined) {\n eventWrapper.id = newEvent.id;\n }\n if (newEvent.margin !== undefined) {\n eventWrapper.margin = newEvent.margin;\n }\n if (newEvent.horizontalAlignment !== undefined) {\n eventWrapper.horizontalAlignment = newEvent.horizontalAlignment;\n }\n if (newEvent.verticalAlignment !== undefined) {\n eventWrapper.verticalAlignment = newEvent.verticalAlignment;\n }\n if (newEvent.offset !== undefined) {\n eventWrapper.setOffsetWithRespectToBounds(actualEvent.offset.x, actualEvent.offset.y, 'Fraction');\n eventWrapper.relativeMode = 'Point';\n }\n if (newEvent.annotations !== undefined) {\n var annotations = void 0;\n var annotation = elementWrapper.children[0].children[2];\n if (eventWrapper.children[3] && eventWrapper.children.length > 3) {\n annotations = eventWrapper.children[3];\n diagram.updateAnnotation(newEvent.annotations[0], annotations, annotation);\n }\n }\n if (newEvent.ports !== undefined) {\n var ports = void 0;\n var port = elementWrapper.children[0].children[2];\n if (eventWrapper.children[4] && eventWrapper.children.length > 4) {\n ports = eventWrapper.children[4];\n diagram.updatePort(newEvent.ports[0], ports, port);\n }\n }\n if (newEvent.visible !== undefined) {\n this.updateDiagramContainerVisibility(eventWrapper, newEvent.visible);\n }\n };\n BpmnDiagrams.prototype.updateBPMNSubProcessTransaction = function (node, newObject, oldObject, diagram) {\n var transaction = newObject.shape.activity.subProcess.transaction;\n var eventContainer = node.wrapper.children[0].children[0].children[2];\n var actualEvent;\n if (transaction.success !== undefined) {\n actualEvent = node.shape.activity.subProcess.transaction.success;\n this.updateBPMNSubEvent(node, transaction.success, actualEvent, eventContainer.children[0], newObject, oldObject, diagram);\n }\n if (transaction.cancel !== undefined) {\n actualEvent = node.shape.activity.subProcess.transaction.cancel;\n this.updateBPMNSubEvent(node, transaction.cancel, actualEvent, eventContainer.children[1], newObject, oldObject, diagram);\n }\n if (transaction.failure !== undefined) {\n actualEvent = node.shape.activity.subProcess.transaction.failure;\n this.updateBPMNSubEvent(node, transaction.failure, actualEvent, eventContainer.children[2], newObject, oldObject, diagram);\n }\n for (var _i = 0, _a = node.outEdges; _i < _a.length; _i++) {\n var edge = _a[_i];\n var connector = diagram.nameTable[edge];\n switch (connector.sourcePortID) {\n case 'success':\n if (transaction.success && transaction.success.visible !== undefined) {\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: 'success' });\n }\n break;\n case 'cancel':\n if (transaction.cancel && transaction.cancel.visible !== undefined) {\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: 'cancel' });\n }\n break;\n case 'failure':\n if (transaction.failure && transaction.failure.visible !== undefined) {\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: 'failure' });\n }\n break;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getEventSize = function (events, wrapperChild) {\n if (events.height !== undefined) {\n wrapperChild.height = events.height;\n wrapperChild.children[0].height = events.height;\n wrapperChild.children[1].height = events.height * 0.85;\n wrapperChild.children[2].height = events.height * 0.54;\n }\n if (events.width !== undefined) {\n wrapperChild.width = events.width;\n wrapperChild.children[0].width = events.width;\n wrapperChild.children[1].width = events.width * 0.85;\n wrapperChild.children[2].width = events.width * 0.54;\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessAdhoc = function (node, oldObject, subProcess, x, subChildCount, area) {\n var shape = node.shape;\n var elementWrapper = node.wrapper.children[0].children[0];\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 2 : 0;\n if (subProcess.adhoc === false) {\n elementWrapper.children[3 + index].visible = false;\n }\n else {\n elementWrapper.children[3 + index].visible = true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, 3 + index);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessBoundary = function (node, subProcess) {\n var shape = node.shape;\n var elementWrapper = (node.wrapper.children[0].children[0].children[0]);\n if (subProcess.boundary === 'Default') {\n elementWrapper.style.strokeWidth = 1;\n elementWrapper.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Call') {\n elementWrapper.style.strokeWidth = 4;\n elementWrapper.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Event') {\n elementWrapper.style.strokeWidth = 1;\n elementWrapper.style.strokeDashArray = '2 2';\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateElementVisibility = function (node, visible, diagram) {\n if (node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length > 0) {\n var processes = node.shape.activity.subProcess.processes;\n for (var j = processes.length - 1; j >= 0; j--) {\n var currentNode = diagram.nameTable[processes[j]];\n currentNode.visible = visible;\n diagram.updateElementVisibility(currentNode.wrapper, currentNode, visible);\n if (visible) {\n if (currentNode.shape.shape === 'Event') {\n this.setEventVisibility(currentNode, currentNode.wrapper.children[0].children);\n }\n if (currentNode.shape.activity.activity === 'SubProcess') {\n this.setSubProcessVisibility(currentNode);\n }\n }\n var connectors = currentNode.inEdges.concat(currentNode.outEdges);\n for (var i = connectors.length - 1; i >= 0; i--) {\n var connector = diagram.nameTable[connectors[i]];\n connector.visible = visible;\n diagram.updateElementVisibility(connector.wrapper, connector, visible);\n }\n }\n }\n if (visible) {\n if (node.shape.shape === 'Event') {\n this.setEventVisibility(node, node.wrapper.children[0].children);\n }\n if (node.shape.activity.activity === 'SubProcess') {\n this.setSubProcessVisibility(node);\n }\n if (node.shape.activity.activity === 'Task' &&\n node.shape.shape === 'Activity' && node.shape.activity.subProcess.loop === 'None') {\n node.wrapper.children[0].children[0].children[3].visible = false;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessCollapsed = function (node, oldObject, subProcess, x, subChildCount, area, diagram) {\n var eventLength = node.shape.activity.subProcess.events.length;\n var elementWrapper = node.wrapper.children[0].children[0];\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 3 : 1;\n if (subProcess.collapsed === false) {\n this.updateElementVisibility(node, true, diagram);\n elementWrapper.children[index + eventLength].visible = false;\n }\n else {\n this.updateElementVisibility(node, false, diagram);\n elementWrapper.children[index + eventLength].visible = true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, 3 + eventLength);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessCompensation = function (node, oldObject, subProcess, x, subChildCount, area) {\n var elementWrapper = node.wrapper.children[0].children[0];\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 2 : 0;\n if (subProcess.compensation === false) {\n elementWrapper.children[4 + index].visible = false;\n }\n else {\n elementWrapper.children[4 + index].visible = true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, 4 + index);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessLoop = function (node, oldObject, subProcess, x, subChildCount, area) {\n this.updateBPMNActivityTaskLoop(node, node, x, subChildCount, area, 1);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNConnector = function (actualObject, oldObject, connection, diagram) {\n var flowType = connection.shape;\n if (flowType.sequence !== undefined) {\n actualObject = this.getSequence(actualObject, oldObject, connection, diagram);\n }\n if (flowType.association !== undefined) {\n actualObject = this.getAssociation(actualObject, oldObject, connection, diagram);\n }\n if (flowType.message !== undefined) {\n actualObject = this.getMessage(actualObject, oldObject, connection, diagram);\n }\n return actualObject;\n };\n /** @private */\n BpmnDiagrams.prototype.getSequence = function (actualObject, oldObject, connection, diagram) {\n if ((connection.shape.sequence) === 'Normal') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight',\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } }\n });\n actualObject.wrapper.children[3].visible = false;\n }\n if ((connection.shape.sequence) === 'Default') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight',\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'None' }\n });\n var segment = new PathElement();\n var pathseq = new PathElement();\n var pathseqData = void 0;\n segment = actualObject.getSegmentElement(actualObject, segment);\n var anglePoints = actualObject.intermediatePoints;\n for (var j = 0; j < anglePoints.length - 1; j++) {\n length = length + actualObject.distance(anglePoints[j], anglePoints[j + 1]);\n pathseqData = actualObject.findPath(anglePoints[j], anglePoints[j + 1]);\n }\n actualObject.wrapper.children[3].data = pathseqData[0];\n actualObject.wrapper.children[3].id = actualObject.id + '_' + (connection.shape.sequence);\n actualObject.wrapper.children[3].offsetX = pathseqData[1].x;\n actualObject.wrapper.children[3].offsetY = pathseqData[1].y;\n actualObject.wrapper.children[3].rotateAngle = 45;\n actualObject.wrapper.children[3].transform = Transform.Self;\n }\n if ((connection.shape.sequence) === 'Conditional') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight',\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'Diamond', width: 20, height: 10, style: { fill: 'white' } }\n });\n actualObject.wrapper.children[3].visible = false;\n }\n return actualObject;\n };\n /** @private */\n BpmnDiagrams.prototype.getAssociation = function (actualObject, oldObject, connection, diagram) {\n if ((connection.shape.association) === 'Default') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight', style: { strokeDashArray: 'None' },\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'None' }\n });\n }\n if ((connection.shape.association) === 'Directional') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight', style: { strokeDashArray: '2 2' },\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'None' }\n });\n }\n if ((connection.shape.association) === 'BiDirectional') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight', style: { strokeDashArray: '2 2' },\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'Arrow', width: 5, height: 10, style: { fill: 'white' } }\n });\n }\n return actualObject;\n };\n /** @private */\n BpmnDiagrams.prototype.getMessage = function (actualObject, oldObject, connection, diagram) {\n var segmentOffset = 0.5;\n var angle;\n var pt;\n if ((oldObject.shape.message) === 'Default') {\n if ((connection.shape.message) !== undefined) {\n if (((connection.shape.message) === 'InitiatingMessage') ||\n ((connection.shape.message) === 'NonInitiatingMessage')) {\n var segment = new PathElement();\n segment = actualObject.getSegmentElement(actualObject, segment);\n var anglePoints = actualObject.intermediatePoints;\n for (var j = 0; j < anglePoints.length - 1; j++) {\n length = length + actualObject.distance(anglePoints[j], anglePoints[j + 1]);\n var offLength = length * segmentOffset;\n if (length >= offLength) {\n angle = findAngle(anglePoints[j], anglePoints[j + 1]);\n pt = Point.transform(anglePoints[j], angle, offLength);\n }\n }\n }\n actualObject.wrapper.children[3].id = actualObject.id + '_' + (connection.shape.message);\n actualObject.wrapper.children[3].width = 25;\n actualObject.wrapper.children[3].height = 15;\n actualObject.wrapper.children[3].data = 'M0,0 L19.8,12.8 L40,0 L0, 0 L0, 25.5 L40, 25.5 L 40, 0';\n actualObject.wrapper.children[3].horizontalAlignment = 'Center';\n actualObject.wrapper.children[3].verticalAlignment = 'Center';\n actualObject.wrapper.children[3].transform = Transform.Self;\n actualObject.wrapper.children[3].style.fill = (connection.shape.message) === 'NonInitiatingMessage' ?\n 'lightgrey' : 'white';\n actualObject.wrapper.children[3].offsetX = pt.x;\n actualObject.wrapper.children[3].offsetY = pt.y;\n }\n }\n else if ((oldObject.shape.message) !== 'NonInitiatingMessage' ||\n (oldObject.shape.message) !== 'InitiatingMessage') {\n if ((connection.shape.message) !== 'Default') {\n actualObject.wrapper.children[3].style.fill = (connection.shape.message) === 'NonInitiatingMessage' ?\n 'lightgrey' : 'white';\n }\n else {\n actualObject.wrapper.children[3].visible = false;\n }\n }\n return actualObject;\n };\n //End update Region\n //size updation\n BpmnDiagrams.prototype.setSizeForBPMNEvents = function (event, wrapper, width, height) {\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n //child node 1 - event node\n var eventNode = wrapper.children[1];\n eventNode.width = width * 0.85;\n eventNode.height = height * 0.85;\n var triggerNode = wrapper.children[2];\n if (event.trigger === 'Message') {\n triggerNode.width = width * 0.54;\n triggerNode.height = height * 0.4;\n }\n else {\n triggerNode.width = width * 0.5;\n triggerNode.height = height * 0.5;\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateAnnotationDrag = function (node, diagram, tx, ty) {\n var checkAnnotation = node.id.split('_');\n if (checkAnnotation[1] === 'textannotation') {\n var parentNode = void 0;\n for (var j = 0; j < node.inEdges.length; j++) {\n var connector = diagram.nameTable[node.inEdges[j]];\n if (connector) {\n parentNode = diagram.nameTable[connector.sourceID];\n }\n var start = { x: node.offsetX + tx, y: node.offsetY + ty };\n var end = connector.sourcePoint;\n var length_1 = Point.findLength(start, end);\n var angle = Point.findAngle(end, start);\n if (parentNode.shape.annotations) {\n for (var x = 0; x < (parentNode.shape.annotations).length; x++) {\n if ((parentNode.shape.annotations)[x].id === checkAnnotation[checkAnnotation.length - 1]) {\n (parentNode.shape.annotations[x]).length = length_1;\n (parentNode.shape.annotations[x]).angle = angle;\n this.setAnnotationPath(parentNode.wrapper.bounds, node.wrapper, start, node);\n return false;\n }\n }\n }\n }\n }\n if (node.processId) {\n this.drag(node, tx, ty, diagram);\n return true;\n }\n return false;\n };\n BpmnDiagrams.prototype.getAnnotationPathAngle = function (point, bounds) {\n var direction = getPortDirection(point, bounds, bounds, false);\n var rotateAngle = 0;\n switch (direction) {\n case 'Right':\n rotateAngle = 0;\n break;\n case 'Left':\n rotateAngle = 180;\n break;\n case 'Bottom':\n rotateAngle = 90;\n break;\n case 'Top':\n rotateAngle = 270;\n break;\n }\n return rotateAngle;\n };\n BpmnDiagrams.prototype.setSizeForBPMNGateway = function (event, wrapper, width, height) {\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n wrapper.children[1].width = width * 0.45;\n wrapper.children[1].height = height * 0.45;\n };\n BpmnDiagrams.prototype.setSizeForBPMNDataObjects = function (event, wrapper, width, height) {\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n };\n BpmnDiagrams.prototype.setSizeForBPMNActivity = function (activity, wrapper, width, height, node) {\n //child node 1 - event node\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n wrapper.children[0].children[0].width = width;\n wrapper.children[0].children[0].height = height;\n if (activity.subProcess.type === 'Transaction') {\n wrapper.children[0].children[1].width = Math.max(width - 6, 1);\n wrapper.children[0].children[1].height = Math.max(height - 6, 1);\n wrapper.children[0].children[2].width = width;\n wrapper.children[0].children[2].height = height;\n }\n var taskNode = new DiagramElement();\n var x;\n var size = this.getSize(node, taskNode);\n var childCount;\n var iconSpace = 4;\n if (activity.activity === 'Task') {\n childCount = this.getTaskChildCount(node);\n }\n else {\n childCount = this.getSubprocessChildCount(node);\n }\n var childSpace = childCount * 12;\n var area = (width || size.width) / 2;\n if (childCount === 1) {\n x = area - 6;\n }\n else {\n x = area - (childSpace / 2) - ((childCount - 1) * iconSpace) / 2;\n }\n for (var i = 0; i < wrapper.children[0].children.length; i++) {\n if (wrapper.children[0].children[i].visible &&\n (wrapper.children[0].children[i].id.indexOf('_loop') > -1 ||\n wrapper.children[0].children[i].id.indexOf('_0_compensation') > -1 ||\n wrapper.children[0].children[i].id.indexOf('_0_adhoc') > -1 ||\n wrapper.children[0].children[i].id.indexOf('_0_collapsed') > -1)) {\n wrapper.children[0].children[i].margin.left = x;\n x += wrapper.children[0].children[i].actualSize.width + iconSpace;\n }\n }\n };\n BpmnDiagrams.prototype.updateDiagramContainerVisibility = function (element, visible) {\n if (element instanceof Container) {\n for (var i = 0; i < element.children.length; i++) {\n this.updateDiagramContainerVisibility(element.children[i], visible);\n }\n }\n element.visible = visible;\n };\n /**\n * To destroy the BpmnDiagrams module\n * @return {void}\n * @private\n */\n BpmnDiagrams.prototype.destroy = function () {\n /**\n * Destroys the BpmnDiagrams module\n */\n };\n /**\n * Get module name.\n */\n BpmnDiagrams.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Bpmn';\n };\n return BpmnDiagrams;\n}());\nexport { BpmnDiagrams };\nexport function getBpmnShapePathData(shape) {\n return bpmnShapes[shape.toString()];\n}\nexport function getBpmnTriggerShapePathData(shape) {\n return bpmnTriggerShapes[shape.toString()];\n}\nexport function getBpmnGatewayShapePathData(shape) {\n return bpmnGatewayShapes[shape.toString()];\n}\nexport function getBpmnTaskShapePathData(shape) {\n return bpmnTaskShapes[shape.toString()];\n}\nexport function getBpmnLoopShapePathData(shape) {\n return bpmnLoopShapes[shape.toString()];\n}\nvar bpmnShapes = {\n 'Event': 'M80.5,12.5 C80.5,19.127417 62.59139,24.5 40.5,24.5 C18.40861,24.5 0.5,19.127417 0.5,12.5' +\n 'C0.5,5.872583 18.40861,0.5 40.5,0.5 C62.59139,0.5 80.5,5.872583 80.5,12.5 z',\n 'Message': 'M0,0L19.8,12.8L40,0L0,0L0,25.5L40,25.5L40,0z',\n 'DataSource': 'M 0 10.6 c 0 5.9 16.8 10.6 37.5 10.6 S 75 16.4 75 10.6 v 0 v 68.9 v -0.1 C 75 85.3 58.2 90 37.5 90 ' +\n 'S 0 85.3 0 79.4 l 0 0.1 V 56 V 40.6 L 0 10.6 C 0 4.7 16.8 0 37.5 0 S 75 4.7 75 10.6 S 58.2 21.2 37.5 21.2' +\n 'S 0 16.5 0 10.6 l 0 6.7 v -0.2 c 0 5.9 16.8 10.6 37.5 10.6 S 75 22.9 75 17.1 v 6.8 v -0.1 ' +\n 'c 0 5.9 -16.8 10.6 -37.5 10.6 S 0 29.6 0 23.8',\n 'SubProcess': 'M100,100 h200 a20,20 0 0 1 20,20 v200 a20,20 0 0 1 -20,20 h-200 ' +\n 'a20,20 0 0 1 -20,-20 v-200 a20,20 0 0 1 20,-20 z',\n 'collapsedShape': 'M 8.13789 15 H 0 V 0 H 8.13789 V 15 Z M 0.625991 13.75 H 7.51189 V 1.25 H 0.625991 V 13.75 Z ' +\n 'M 2.18095 7.03125 L 5.95631 7.03125 L 5.95631 7.46875 L 2.18095 7.46875 Z M 3.8342 3.73 ' +\n 'L 4.30369 3.73 L 4.30369 11.2687 L 3.8342 11.2687 Z',\n};\nvar bpmnTriggerShapes = {\n // 'None': '',\n 'Message': 'M0,0 L19.8,12.8 L40,0 L0, 0 L0, 25.5 L40, 25.5 L 40, 0',\n 'Timer': 'M40,20c0,8.654-5.496,16.024-13.189,18.81' +\n 'C24.685,39.58,22.392,40,20,40C8.954,40,0,31.046,0,20S8.954,0,20,0S40,8.954,40,20z M20,0 L20,2.583 L20,5.283 M10.027,2.681' +\n 'L11.659,5.507 L12.669,7.257 M2.731,9.989 L6.014,11.885 L7.307,12.631 M0.067,19.967 L2.667,19.967 L5.35,19.967' +\n 'M2.748,29.939 L5.731,28.217 L7.323,27.298 M10.056,37.236 L11.292,35.095 L12.698,32.66 M20.033,39.9 L20.033,36.417 L20.033,34.617' +\n 'M30.006,37.219 L28.893,35.292 L27.364,32.643 M37.302,29.911 L34.608,28.355 L32.727,27.269' +\n 'M39.967,19.933 L37.417,19.933 L34.683,19.933 M37.286,9.961 L34.583,11.521 L32.71,12.602 M29.977,2.664 L28.653,4.957 L27.336,' +\n '7.24 M22.104,8.5 L19.688,20 L24.75,20 L31.604,20 L24.75,20 L19.688,20z',\n 'Error': 'M 23.77 18.527 l -7.107 27.396 l 8.507 -17.247 L 36.94 40.073 l 6.394 -25.997 l -8.497 15.754 L 23.77 18.527 Z',\n 'Escalation': 'M 30.001 8.098 L 11.842 43.543 l 18.159 -18.882 l 18.162 18.882 L 30.001 8.098 Z ',\n 'Cancel': 'M 3.5 16 L 0 12.6 L 4.6 8 L 0 3.5 L 3.4 0 L 8 4.6 l 4.5 -4.5 L 16 3.5 L 11.5 8 l 4.5 4.5 l -3.4 3.5 L 8 11.4 L 3.5 16 Z',\n 'Compensation': 'M 25.7086 0 L 0 25 L 25.7086 50 V 26.3752 L 50 50 V 0 L 25.7086 23.6248 V 0 Z ',\n 'Conditional': 'M 0 0 H 16 V 16 H 0 z M 1.14 3.2 H 14.85 M 1.14 6.4 H 14.85 M 1.14 9.6 H 14.85 M 1.14 12.8 H 14.85',\n 'Link': 'M 32.014 19.258 v 5.992 H 9.373 v 9.504 h 22.641 v 5.988 L 50.622 30 L 32.014 19.258 Z',\n 'Signal': 'M 50 50 H 0 L 25.0025 0 L 50 50 Z',\n 'Terminate': 'M 25 50 C 11.21 50 0 38.79 0 25 C 0 11.21 11.21 0 25 0 C 38.78 0 50 11.21 50 25 C 50 38.79 38.78 50 25 50',\n 'Multiple': 'M 17.784 48.889 H 42.21 l 7.548 -23.23 L 29.997 11.303 L 10.236 25.658 L 17.784 48.889 Z',\n 'Parallel': 'M 27.276 49.986 h 5.58 v -17.15 h 17.146 V 27.17 h -17.15 l 0.004 -17.15 h -5.58 l -0.004 17.15 ' +\n 'H 9.994 v 5.666 h 17.278 L 27.276 49.986 Z',\n};\nvar bpmnGatewayShapes = {\n 'None': '',\n //exclusive\n 'Exclusive': 'M 11.196 29.009 l 6.36 -9.712 l -5.764 -8.899 h 4.393 l 3.732 5.979 l 3.656 -5.979 h 4.354 l -5.789 9.039' +\n 'l 6.36 9.572 h -4.532 l -4.126 -6.437 l -4.139 6.437 H 11.196 Z',\n //inclusive\n 'Inclusive': 'M 20.323 31.333 c -6.625 0 -12.015 -5.39 -12.015 -12.015 s 5.39 -12.015 12.015 -12.015 ' +\n 's 12.016 5.39 12.016 12.015 S 26.948 31.333 20.323 31.333 Z M 20.323 9.303 c -5.522 0 -10.015 4.493 -10.015 10.015 ' +\n 's 4.492 10.015 10.015 10.015 s 10.016 -4.493 10.016 -10.015 S 25.846 9.303 20.323 9.303 Z',\n //parallel\n 'Parallel': 'M 18.394 29.542 v -8.833 H 9.626 v -3.691 h 8.768 V 8.251 h 3.734 v 8.767 h 8.768 v 3.691 h -8.768 v 8.833 H 18.394 Z',\n //complex\n 'Complex': 'M29.198,19.063L23.089,19.063L27.794,14.358L26.38,12.944L21.223,18.101L21.223,10.443L19.223,10.443L19.223,17.976' +\n 'L14.022,12.776L12.608,14.19L17.48,19.063L10.365,19.063L10.365,21.063L18.261,21.063L12.392,26.932L13.806,28.346' +\n 'L19.223,22.929L19.223,30.225L21.223,30.225L21.223,22.805L25.925,27.507L27.339,26.093L22.309,21.063L29.198,21.063z',\n //eventbased\n 'EventBased': 'M 20.322 29.874 c -5.444 0 -9.873 -4.43 -9.873 -9.874 s 4.429 -9.874 9.873 -9.874 s 9.874 4.429 9.874 9.874 ' +\n 'S 25.767 29.874 20.322 29.874 Z M 20.322 32.891 c -7.107 0 -12.89 -5.783 -12.89 -12.891 c 0 -7.107 5.782 -12.89 12.89 -12.89 ' +\n 'c 7.108 0 12.891 5.783 12.891 12.89 C 33.213 27.108 27.431 32.891 20.322 32.891 Z M 24.191 25.386 ' +\n 'h -7.984 l -2.469 -7.595 l 6.461 -4.693 l 6.461 4.693 L 24.191 25.386 Z',\n //exclusive event based\n 'ExclusiveEventBased': 'M 30 15 C 30 23.28 23.28 30 15 30 S 0 23.28 0 15 S 6.72 0 15 0 S 30 6.72 30 15 z M 15 5 ' +\n 'L 5 12.5 L 8 22.5 H 22 L 25 12.5 z',\n //parallel event based\n 'ParallelEventBased': 'M 35 17.5 C 35 27.16 27.16 35 17.5 35 S 0 27.16 0 17.5 S 7.84 0 17.5 0 S 35 7.84 35 17.5 z M 14.58 5.83 ' +\n 'V 14.58 H 5.83 V 20.42 H 14.58 V 29.17 H 20.42 V 20.42 H 29.17 V 14.58 H 20.42 V 5.83 z',\n};\nvar bpmnTaskShapes = {\n 'None': '',\n 'Service': 'M 32.699 20.187 v -4.005 h -3.32 c -0.125 -0.43 -0.292 -0.83 -0.488 -1.21 l 2.373 -2.375 ' +\n 'l -2.833 -2.83 l -2.333 2.333 c -0.44 -0.253 -0.9 -0.448 -1.387 -0.595 v -3.32 h -4.003 v 3.32 c -0.46 0.137 -0.89' +\n '0.322 -1.3 0.537 l -2.285 -2.275 l -2.833 2.83 l 2.285 2.278 c -0.235 0.42 -0.41 0.847 -0.547 1.307 h -3.33 v 4.005 h 3.33 ' +\n 'c 0.148 0.488 0.343 0.955 0.588 1.395 l -2.325 2.325 l 2.822 2.832 l 2.373 -2.382 c 0.392 0.205 0.792 0.37 1.212 0.497 v 3.33 ' +\n 'h 4.003 v -3.33 c 0.46 -0.138 0.89 -0.323 1.3 -0.547 l 2.43 2.432 l 2.822 -2.832 l -2.42 -2.422 c 0.222 -0.41 0.4 -0.85 0.535' +\n '-1.297 H 32.699 Z M 22.699 21.987 c -2.1 0 -3.803 -1.703 -3.803 -3.803 c 0 -2.1 1.703 -3.803 3.803 -3.803 c 2.1 0 3.803 ' +\n '1.703 3.803 3.803 C 26.502 20.285 24.8 21.987 22.699 21.987 Z',\n 'Receive': 'M 12.217 12.134 v 13.334 h 20 V 12.134 H 12.217 Z M 30.44 13.007 l -8.223 5.35 l -8.223 -5.35 H 30.44 Z M 13.09' +\n ' 24.594 V 13.459 l 9.127 5.94 l 9.127 -5.94 v 11.135 H 13.09 Z',\n 'Send': 'M 45.7256 3.16055 L 25 23.4017 L 4.27442 3.16055 H 45.7256 Z M 47.8963 46.8413 H 2.10375 V 4.80813' +\n ' L 25 27.1709 L 47.8963 4.80813 V 46.8413 Z',\n 'InstantiatingReceive': 'M 16.306 17.39 v 8.79 h 13.198 v -8.79 H 16.306 Z M 28.375 17.946 l -5.47 3.558 l -5.47 -3.558 ' +\n 'H 28.375 Z M 28.948 25.625 H 16.861 v -7.389 l 6.043 3.931 l 6.043 -3.931 V 25.625 Z M 22.905 11.785' +\n 'c -5.514 0 -9.999 4.486 -9.999 10 c 0 5.514 4.485 10 9.999 10 s 9.999 -4.486 9.999 -10 ' +\n 'C 32.904 16.272 28.419 11.785 22.905 11.785 Z M 22.905 31.239 c -5.212 0 -9.453 -4.241 -9.453 -9.454' +\n 'c 0 -5.212 4.241 -9.453 9.453 -9.453 s 9.452 4.241 9.452 9.453 C 32.357 26.998 28.117 31.239 22.905 31.239 Z',\n 'Manual': 'M 13.183 15.325 h 2.911 c 0.105 0 0.207 -0.043 0.281 -0.117 c 0.078 -0.074 0.117 -0.176 0.117 -0.281' +\n 'c 0 -0.753 0.718 -1.362 1.596 -1.362 h 2.579 c -0.117 0.227 -0.191 0.48 -0.195 0.757 c 0 0.433 0.168 0.851 0.46 1.144 ' +\n 'c 0.008 0.004 0.015 0.011 0.019 0.015 c -0.289 0.285 -0.475 0.691 -0.479 1.148 c 0 0.433 0.168 0.846 0.46 1.139 ' +\n 'c 0.011 0.012 0.023 0.02 0.035 0.032 c -0.301 0.281 -0.491 0.694 -0.495 1.155 c 0 0.432 0.168 0.847 0.46 1.143' +\n 'c 0.265 0.266 0.612 0.414 0.975 0.414 h 0.839 c 0.027 0.004 0.051 0.012 0.074 0.012 h 8.443 ' +\n 'c 0.352 0 0.636 0.344 0.636 0.761 c 0 0.414 -0.285 0.753 -0.636 0.753 h -6.687 c -0.019 0 -0.035 -0.008 -0.051 -0.008' +\n 'h -2.27 c -0.121 -0.835 -0.667 -1.187 -1.795 -1.187 h -2.158 c -0.223 0 -0.402 0.18 -0.402 0.403' +\n 'c 0 0.219 0.179 0.398 0.402 0.398 h 2.158 c 0.972 0 1.019 0.203 1.019 0.784 c 0 0.219 0.179 0.399 0.402 0.399 ' +\n 'c 0.008 0 0.016 -0.004 0.027 -0.004 c 0.028 0.004 0.055 0.016 0.082 0.016 h 2.56 c 0.34 0.015 0.616 0.343 0.616 0.752' +\n 'c 0 0.418 -0.285 0.757 -0.636 0.761 h -0.004 h -6.442 c -0.878 0 -1.595 -0.639 -1.595 -1.427 v -0.683 ' +\n 'c 0 -0.109 -0.043 -0.211 -0.114 -0.285 c -0.078 -0.074 -0.179 -0.117 -0.285 -0.117 h -0.004 l -2.989 0.027 ' +\n 'c -0.223 0 -0.398 0.184 -0.398 0.402 c 0 0.219 0.179 0.395 0.398 0.395 h 0.004 l 2.591 -0.02 v 0.282 ' +\n 'c 0 1.229 1.073 2.223 2.391 2.223 h 3.895 c 0.004 0 0.007 0.004 0.011 0.004 h 2.536 c 0.792 0 1.436 -0.698 1.436 -1.561 ' +\n 'c 0 -0.273 -0.07 -0.53 -0.188 -0.752 h 5.49 c 0.792 0 1.436 -0.695 1.436 -1.553 c 0 -0.858 -0.644 -1.557 -1.436 -1.557' +\n 'h -3.566 c 0.121 -0.226 0.199 -0.487 0.199 -0.768 c 0 -0.468 -0.195 -0.882 -0.495 -1.167' +\n 'c 0.301 -0.285 0.495 -0.698 0.495 -1.163 c 0 -0.456 -0.191 -0.866 -0.483 -1.152 c 0.293 -0.285 0.483 -0.694 0.483 -1.151' +\n 'c 0 -0.858 -0.647 -1.557 -1.439 -1.557 h -8.373 c -1.167 0 -2.142 0.757 -2.352 1.76 l -2.548 -0.004 ' +\n 'c -0.219 0 -0.399 0.18 -0.399 0.403 C 12.784 15.145 12.964 15.325 13.183 15.325 L 13.183 15.325 Z M 21.907 19.707 ' +\n 'c -0.191 0 -0.328 -0.094 -0.41 -0.176 c -0.144 -0.145 -0.226 -0.355 -0.226 -0.577 c 0.003 -0.418 0.289 -0.753 0.643 -0.753 ' +\n 'h 4.468 c 0.008 0 0.015 -0.004 0.027 -0.008 h 0.051 c 0.351 0 0.636 0.344 0.636 0.761 c 0 0.414 -0.286 0.753 -0.636 0.753 ' +\n 'H 21.907 Z M 27.097 16.629 c 0 0.414 -0.286 0.753 -0.64 0.753 h -4.464 c -0.004 0 -0.004 0 -0.004 0 h -0.082' +\n 'c -0.191 0 -0.328 -0.098 -0.414 -0.18 c -0.14 -0.145 -0.222 -0.352 -0.222 -0.573 c 0 -0.413 0.285 -0.749 0.631 -0.753' +\n 'h 3.434 c 0 0 0 0 0.004 0 h 1.116 c 0.008 0 0.012 -0.004 0.02 -0.004 C 26.819 15.887 27.097 16.215 27.097 16.629' +\n 'L 27.097 16.629 Z M 27.097 14.322 c 0 0.41 -0.278 0.737 -0.62 0.749 c -0.008 0 -0.012 0 -0.016 0 h -3.637 ' +\n 'c -0.008 0 -0.015 0.004 -0.023 0.004 h -0.886 c -0.004 0 -0.008 0 -0.012 0 c -0.187 0 -0.324 -0.094 -0.406 -0.176' +\n 'c -0.144 -0.144 -0.226 -0.355 -0.226 -0.577 c 0.003 -0.414 0.293 -0.753 0.643 -0.753 h 4.468 ' +\n 'c 0.008 0 0.015 -0.004 0.027 -0.004 h 0.051 C 26.811 13.565 27.097 13.905 27.097 14.322 L 27.097 14.322 Z M 27.097 14.322',\n 'BusinessRule': 'M 32.844 13.245 h -0.089 v 0 H 13.764 v -0.015 h -1.009 v 16.989 h 0.095 v 0.011 h 19.716 v -0.011 h 0.278 ' +\n 'V 13.245 Z M 31.844 14.229 v 4.185 h -18.08 v -4.185 H 31.844 Z M 18.168 25.306 v 3.938 h -4.404 v -3.938 H 18.168 Z ' +\n 'M 13.764 24.322 v -4.923 h 4.404 v 4.923 H 13.764 Z M 19.177 25.306 h 12.667 v 3.938 H 19.177 V 25.306 Z M 19.177 24.322' +\n 'v -4.923 h 12.667 v 4.923 H 19.177 Z',\n 'User': 'M 21.762 21.935 c 2.584 0 4.687 -2.561 4.687 -5.703 c 0 -3.147 -2.103 -5.703 -4.687 -5.703 c -1.279 0 -2.475 0.61' +\n '-3.363 1.721 c -0.855 1.071 -1.327 2.484 -1.324 3.983 C 17.075 19.374 19.178 21.935 21.762 21.935 L 21.762 21.935 Z' +\n 'M 21.762 11.779 c 1.894 0 3.436 1.995 3.436 4.452 c 0 2.453 -1.541 4.452 -3.436 4.452 c -1.895 0 -3.44 -1.999 -3.44 -4.452' +\n 'C 18.323 13.774 19.864 11.779 21.762 11.779 L 21.762 11.779 Z M 25.699 21.309 c -0.348 0 -0.626 0.277 -0.626 0.626 ' +\n 'c 0 0.344 0.277 0.622 0.626 0.622 c 2.136 0 3.875 1.74 3.875 3.879 c 0 0.272 -0.227 0.498 -0.501 0.498 H 14.447 c -0.274 0 ' +\n '-0.497 -0.223 -0.497 -0.498 c 0 -2.139 1.736 -3.879 3.872 -3.879 c 0.344 0 0.625 -0.277 0.625 -0.622 c 0 -0.348 -0.28 -0.626' +\n '-0.625 -0.626 c -2.826 0 -5.124 2.297 -5.124 5.126 c 0 0.965 0.784 1.749 1.748 1.749 h 14.626 c 0.964 0 1.748 -0.784' +\n '1.748 -1.749 C 30.822 23.606 28.524 21.309 25.699 21.309 L 25.699 21.309 Z M 22.217 9.832 c 0.448 -0.263 0.924 -0.396 ' +\n '1.419 -0.396 c 1.895 0 3.436 1.995 3.436 4.452 c 0 0.439 -0.048 0.873 -0.143 1.284 c -0.08 0.336 0.128 0.672 0.464 0.751 ' +\n 'c 0.048 0.012 0.098 0.019 0.143 0.019 c 0.284 0 0.541 -0.195 0.608 -0.483 c 0.119 -0.506 0.18 -1.034 0.18 -1.571' +\n 'c 0 -3.147 -2.102 -5.703 -4.687 -5.703 c -0.711 0 -1.419 0.198 -2.054 0.573 c -0.296 0.174 -0.397 0.559 -0.219 0.855' +\n 'C 21.536 9.911 21.921 10.009 22.217 9.832 L 22.217 9.832 Z M 27.697 18.81 c -0.345 0 -0.626 0.277 -0.626 0.622 ' +\n 'c 0 0.348 0.281 0.626 0.626 0.626 c 2.137 0 3.75 1.782 3.75 3.918 c 0 0.07 -0.013 0.141 -0.043 0.205 c -0.14 0.314 0.003' +\n '0.684 0.318 0.823 c 0.082 0.037 0.167 0.055 0.253 0.055 c 0.241 0 0.466 -0.141 0.57 -0.373 c 0.101 -0.226 0.153 -0.464 0.153' +\n '-0.714 C 32.699 21.15 30.523 18.81 27.697 18.81 L 27.697 18.81 Z M 27.697 18.81',\n 'Script': 'M 22.453 15.04 c 0 0 -1.194 -3.741 2.548 -3.774 c 0 0 2.497 0.126 1.766 4.321 c -0.008 0.043 -0.015 0.086 -0.024 0.13' +\n 'c -0.806 4.323 -2.516 8.42 -3.193 10.581 h 3.904 c 0 0 0.983 4.581 -2.549 4.968 H 13.292 c 0 0 -3.097 -1.42 -1.517 -5.323 l ' +\n '3 -10.839 H 11.84 c 0 0 -1.129 -2.902 1.709 -3.806 l 11.425 -0.032 l -0.73 0.355 l -1.193 1.726 L 22.453 15.04 Z M 22.409 ' +\n '12.597 c 0 0 -0.242 0.483 -0.278 0.98 h -9.098 c 0 0 -0.06 -0.871 0.714 -1.041 L 22.409 12.597 Z M 26.341 27.734' +\n 'c 0 0 -0.13 2.678 -2.226 1.871 c 0 0 -0.823 -0.565 -0.758 -1.855 L 26.341 27.734 Z M 22.905 15.008 c 0 0 0.653 -0.258 0.709' +\n '-1.501 c 0 0 0.145 -1.144 1.483 -0.693 c 0 0 0.808 0.355 0.259 2.404 c 0 0 -2.226 8.5 -3.032 10.339 c 0 0 -1.064 2.646 ' +\n '0.096 4.226 h -8.581 c 0 0 -1.806 -0.452 -0.741 -3.613 c 0 0 2.935 -9.549 3.193 -11.162 L 22.905 15.008 Z',\n};\nvar bpmnLoopShapes = {\n 'None': '',\n 'Standard': 'M 52.002 73.379 c -2.494 -2.536 -6.55 -2.534 -9.043 0 c -1.208 1.228 -1.874 2.861 -1.874 4.598 ' +\n 'c 0 1.225 0.337 2.395 0.957 3.411 l -1.167 1.186 l 2.071 0.458 l 2.071 0.458 l -0.45 -2.106 l -0.45 -2.106 l -1.292 1.314' +\n 'c -1.119 -2.065 -0.842 -4.709 0.877 -6.458 c 2.084 -2.119 5.475 -2.117 7.557 0 c 2.083 2.119 2.083 5.565 0 7.685' +\n 'c -0.976 0.992 -2.272 1.557 -3.65 1.59 l 0.025 1.068 c 1.65 -0.041 3.2 -0.716 4.368 -1.903 ' +\n 'c 1.208 -1.228 1.874 -2.861 1.874 -4.597 C 53.875 76.24 53.209 74.607 52.002 73.379 Z',\n 'ParallelMultiInstance': 'M 51.5,69.5 L52.5,69.5 L52.5,84.5 L51.5 84.5 Z M 46.5,69.5 L47.5,69.5 L47.5,84.5 L46.5 84.5 Z' +\n ' M 41.5,69.5 L42.5,69.5 L42.5,84.5 L41.5 84.5 Z ',\n 'SequenceMultiInstance': 'M 40.375,71.5 L 55.375,71.5 L 55.375,72.5 L 40.375,72.5 Z M 40.375,76.5 L 55.375,76.5 ' +\n 'L 55.375,77.5 L 40.375,77.5 Z M 40.375,76.5 L 55.375,76.5 L 55.375,77.5 L 40.375,77.5 Z M 40.375,81.5 L 55.375,81.5' +\n 'L 55.375,82.5 L 40.375,82.5 Z'\n};\n","import { Rect } from '../primitives/rect';\nimport { cloneObject } from '../utility/base-util';\nvar GraphForceNode = /** @class */ (function () {\n function GraphForceNode(gnNode) {\n /**\n * @private\n */\n this.velocityX = 0;\n /**\n * @private\n */\n this.velocityY = 0;\n /**\n * @private\n */\n this.nodes = [];\n this.graphNode = gnNode;\n var nNode = this.graphNode;\n var bounds = getGraphBounds(nNode);\n this.location = bounds.center;\n this.nodes = [];\n if (!gnNode.treeInfo.parents) {\n gnNode.treeInfo.parents = [];\n }\n if (!gnNode.treeInfo.children) {\n gnNode.treeInfo.children = [];\n }\n this.nodes = (gnNode.treeInfo.parents).concat(gnNode.treeInfo.children);\n }\n /**\n * @private\n */\n GraphForceNode.prototype.applyChanges = function () {\n this.graphNode.treeInfo.center = this.location;\n };\n return GraphForceNode;\n}());\nexport { GraphForceNode };\n/**\n * SymmetricalLayout\n */\nvar SymmetricLayout = /** @class */ (function () {\n function SymmetricLayout() {\n this.cdCOEF = 0.442;\n this.cfMAXVELOCITY = 50;\n this.cnMAXITERACTION = 1000;\n this.cnSPRINGLENGTH = 100;\n this.mszMaxForceVelocity = { width: this.cfMAXVELOCITY, height: this.cfMAXVELOCITY };\n /**\n * @private\n */\n this.springLength = 0;\n /**\n * @private\n */\n this.springFactor = this.cdCOEF;\n /**\n * @private\n */\n this.maxIteration = this.cnMAXITERACTION;\n this.springLength = this.cnSPRINGLENGTH;\n }\n /**\n * @private\n */\n SymmetricLayout.prototype.destroy = function () {\n /**\n * Destroys symmetricLayout\n */\n };\n SymmetricLayout.prototype.getModuleName = function () {\n return 'SymmetricalLayout';\n };\n SymmetricLayout.prototype.doGraphLayout = function (graphLayoutManager) {\n var graph = this.selectedNode;\n graph.treeInfo.Bounds = graphLayoutManager.getModelBounds(graphLayoutManager.nodes);\n var lstGraphNodes = graph.treeInfo.GraphNodes;\n var lstNodes = this.convertGraphNodes(lstGraphNodes);\n var count = lstNodes.length;\n count = Math.min(this.maxIteration, count * count * count);\n this.preLayoutNodes(lstNodes, graph.treeInfo.Bounds);\n for (var i = 0, nLenght = count; i < nLenght; i++) {\n this.makeSymmetricLayout(lstNodes);\n this.appendForces(lstNodes);\n }\n this.resetGraphPosition(lstNodes, graph);\n };\n SymmetricLayout.prototype.preLayoutNodes = function (lstNodes, rcBounds) {\n var fMaxSize = Math.max(rcBounds ? rcBounds.width : 25, rcBounds ? rcBounds.height : 25);\n var ptCenter = { x: fMaxSize / 2, y: fMaxSize / 2 };\n var dRotateAngle = 2 * Math.PI / lstNodes.length;\n var dAngle = dRotateAngle;\n for (var i = 0; i < lstNodes.length; i++) {\n var gnNode = lstNodes[i];\n var forceNode = this.getForceNode(gnNode);\n forceNode.location = {\n x: ptCenter.x + fMaxSize * Number((Math.cos(dAngle)).toFixed(2)),\n y: ptCenter.y + fMaxSize * Number(Math.sin(dAngle).toFixed(2))\n };\n dAngle -= dRotateAngle;\n }\n };\n /**\n * @private\n */\n SymmetricLayout.prototype.doLayout = function (graphLayoutManager) {\n this.selectedNode = graphLayoutManager.selectedNode;\n this.doGraphLayout(graphLayoutManager);\n };\n SymmetricLayout.prototype.makeSymmetricLayout = function (lstNodes) {\n var forceNode;\n var force;\n for (var k = 0; k < lstNodes.length; k++) {\n var gnNode = lstNodes[k];\n forceNode = this.getForceNode(gnNode);\n var nodes = forceNode.nodes;\n for (var l = 0; l < nodes.length; l++) {\n var gnChild = nodes[l];\n if (collectionContains(gnChild.id, lstNodes)) {\n this.calcNodesForce(forceNode, this.getForceNode(gnChild));\n }\n }\n for (var i = 0, length_1 = nodes.length; i < length_1; i++) {\n if (length_1 < 2) {\n break;\n }\n var vtx1 = this.getForceNode(nodes[i]);\n var vtx2 = (i + 1 >= length_1) ? this.getForceNode(nodes[0]) : this.getForceNode((nodes[i + 1]));\n var angle = (360 / nodes.length / 2) * Math.PI / 180;\n var normalDistance = 2 * this.springLength * Math.sin(angle);\n this.calcRelatesForce(vtx1, vtx2, normalDistance);\n }\n for (var s = 0; s < lstNodes.length; s++) {\n var gnChild = lstNodes[s];\n if (!collectionContains(gnChild.id, nodes) && gnChild.id !== gnNode.id) {\n force = this.getForceNode(gnChild);\n this.updateNeigbour(forceNode, force);\n }\n }\n }\n };\n SymmetricLayout.prototype.appendForces = function (lstNodes) {\n var gfnNode = null;\n for (var k = 0; k < lstNodes.length; k++) {\n var gnNode = lstNodes[k];\n gfnNode = this.getForceNode(gnNode);\n var ptPoint = gfnNode.location;\n ptPoint.x += Math.min(gfnNode.velocityX, this.mszMaxForceVelocity.width);\n ptPoint.y += Math.min(gfnNode.velocityY, this.mszMaxForceVelocity.height);\n gfnNode.velocityX = 0;\n gfnNode.velocityY = 0;\n gfnNode.location = ptPoint;\n }\n };\n SymmetricLayout.prototype.resetGraphPosition = function (lstNodes, graph) {\n var szMin = { width: Number.MAX_VALUE, height: Number.MAX_VALUE };\n var gfnNode = null;\n var gnNode;\n for (var k = 0; k < lstNodes.length; k++) {\n gnNode = lstNodes[k];\n gfnNode = this.getForceNode(gnNode);\n var ptLocation = {\n x: gfnNode.location.x - gnNode.actualSize.width / 2,\n y: gfnNode.location.y - gnNode.actualSize.height / 2\n };\n szMin.width = Math.min(szMin.width, ptLocation.x);\n szMin.height = Math.min(szMin.height, ptLocation.y);\n }\n for (var k = 0; k < lstNodes.length; k++) {\n gnNode = lstNodes[k];\n gfnNode = this.getForceNode(gnNode);\n var ptLocation = gfnNode.location;\n ptLocation.x -= szMin.width - (graph.treeInfo.location ? graph.treeInfo.location.x : 0);\n ptLocation.y -= szMin.height - (graph.treeInfo.location ? graph.treeInfo.location.y : 0);\n gfnNode.location = ptLocation;\n gfnNode.applyChanges();\n }\n };\n SymmetricLayout.prototype.convertGraphNodes = function (lstNodes) {\n var lstToReturn = [];\n var keys = Object.keys(lstNodes);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var k = keys_1[_i];\n if (lstNodes[k]) {\n var gnNode = lstNodes[k];\n var forceNode = new GraphForceNode(gnNode);\n gnNode.treeInfo.tag = forceNode;\n lstToReturn.push(gnNode);\n }\n }\n return lstToReturn;\n };\n /**\n * @private\n */\n SymmetricLayout.prototype.getForceNode = function (gnNode) {\n return gnNode.treeInfo.tag;\n };\n SymmetricLayout.prototype.updateNeigbour = function (vtSource, vtTarget) {\n if (vtTarget == null || vtSource == null) {\n return;\n }\n var distance = this.pointDistance(vtSource.location, vtTarget.location);\n var angle = this.lineAngle(vtSource.location, vtTarget.location);\n var normalDistance = (this.springLength * 0.9);\n if (distance < normalDistance) {\n this.calcForce(distance, normalDistance, angle, vtTarget);\n }\n };\n SymmetricLayout.prototype.lineAngle = function (pt1, pt2) {\n var radians = 0;\n var vx = pt2.x - pt1.x;\n var vy = pt2.y - pt1.y;\n if (vx === 0) {\n if (vy <= 0) {\n radians = (3.0 * Math.PI) / 2.0;\n }\n else {\n radians = Math.PI / 2.0;\n }\n }\n else if (vy === 0) {\n if (vx < 0) {\n radians = Math.PI;\n }\n else {\n radians = 0;\n }\n }\n else {\n radians = Math.atan(vy / vx);\n if (vx < 0 && vy > 0) {\n radians = Math.PI + radians;\n }\n else if (vx < 0 && vy < 0) {\n radians = Math.PI + radians;\n }\n else if (vx > 0 && vy < 0) {\n radians = 2.0 * Math.PI + radians;\n }\n }\n return radians;\n };\n SymmetricLayout.prototype.pointDistance = function (pt1, pt2) {\n var d = 0;\n var dx = pt2.x - pt1.x;\n var dy = pt2.y - pt1.y;\n var t = (dx * dx) + (dy * dy);\n if (t > 0) {\n d = Math.sqrt(t);\n }\n return d;\n };\n SymmetricLayout.prototype.calcRelatesForce = function (vtSource, vtTarget, normalDistance) {\n var distance = this.pointDistance(vtSource.location, vtTarget.location);\n var angle = this.lineAngle(vtSource.location, vtTarget.location);\n if (distance < normalDistance) {\n this.calcForce(distance, normalDistance, angle, vtTarget);\n }\n };\n /**\n * @private\n */\n SymmetricLayout.prototype.updateLayout = function (nodeCollection, connectors, symmetricLayout, nameTable, layout, viewPort) {\n var layoutManager = new GraphLayoutManager();\n layoutManager.updateLayout(nodeCollection, connectors, symmetricLayout, nameTable, layout, viewPort);\n };\n SymmetricLayout.prototype.calcNodesForce = function (vtSource, vtTarget) {\n var distance = this.pointDistance(vtSource.location, vtTarget.location);\n var angle = this.lineAngle(vtSource.location, vtTarget.location);\n if (distance > this.springLength || distance < this.springLength) {\n this.calcForce(distance, this.springLength, angle, vtTarget);\n }\n };\n SymmetricLayout.prototype.calcForce = function (distance, minDist, angle, vtTarget) {\n var count = vtTarget.nodes.length;\n var length = distance - minDist;\n var factor = this.springFactor / (count * count) * Math.sqrt(count);\n if (length !== 0) {\n var fVelocity = length * factor;\n var fOffset = fVelocity;\n var offsetX = Math.cos(angle) * fOffset;\n var offsetY = Math.sin(angle) * fOffset;\n vtTarget.velocityX -= offsetX;\n vtTarget.velocityY -= offsetY;\n }\n };\n return SymmetricLayout;\n}());\nexport { SymmetricLayout };\nvar GraphLayoutManager = /** @class */ (function () {\n function GraphLayoutManager() {\n this.visitedStack = [];\n this.cycleEdgesCollection = [];\n this.graphObjects = [];\n this.passedNodes = [];\n }\n /**\n * @private\n */\n GraphLayoutManager.prototype.updateLayout = function (nodeCollection, connectors, symmetricLayout, nameTable, layout, viewPort) {\n this.nameTable = nameTable;\n this.nodes = nodeCollection;\n this.connectors = connectors;\n var selectionList = nodeCollection;\n if (selectionList.length > 0) {\n this.mhelperSelectedNode = cloneObject(selectionList[0]);\n }\n for (var _i = 0, nodeCollection_1 = nodeCollection; _i < nodeCollection_1.length; _i++) {\n var node = nodeCollection_1[_i];\n var nodeGraphObject = void 0;\n nodeGraphObject = node;\n nodeGraphObject.treeInfo = {};\n nodeGraphObject.treeInfo.graphType = 'Node';\n this.graphObjects.push(nodeGraphObject);\n }\n for (var _a = 0, connectors_1 = connectors; _a < connectors_1.length; _a++) {\n var connector = connectors_1[_a];\n var connectorGraphObject = void 0;\n connectorGraphObject = connector;\n connectorGraphObject.treeInfo = {};\n connectorGraphObject.treeInfo.graphType = 'Connector';\n this.graphObjects.push(connectorGraphObject);\n }\n this.updateLayout1(this.graphObjects, symmetricLayout);\n var modelBounds = this.getModelBounds(selectionList);\n for (var i = 0; i < selectionList.length; i++) {\n var node = selectionList[i];\n var trnsX = (viewPort.x - modelBounds.width) / 2;\n var margin = layout.margin || {};\n var marginX = void 0;\n var marginY = void 0;\n margin.left = margin.left || 0;\n margin.right = margin.right || 0;\n margin.top = margin.top || 0;\n margin.bottom = margin.bottom || 0;\n if (layout.margin.left) {\n margin.left = layout.margin.left;\n }\n if (layout.margin.top) {\n margin.top = layout.margin.top;\n }\n var dx = (node.treeInfo.tag.location.x - (node.offsetX - (node.actualSize.width / 2)) -\n modelBounds.x + trnsX + margin.left);\n var dy = (node.treeInfo.tag.location.y - (node.offsetY - (node.actualSize.height / 2)) - modelBounds.y + margin.top);\n node.offsetX += dx;\n node.offsetY += dy;\n delete node.treeInfo;\n }\n return true;\n };\n /**\n * @private\n */\n GraphLayoutManager.prototype.getModelBounds = function (lNodes) {\n lNodes = lNodes.slice();\n var rect = null;\n var rect1 = null;\n var node;\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n var bounds = getGraphBounds(node);\n rect = new Rect(node.treeInfo.tag ? node.treeInfo.tag.location.x : bounds.x, node.treeInfo.tag ? node.treeInfo.tag.location.y : bounds.y, node.actualSize.width, node.actualSize.height);\n if (rect1) {\n rect1 = rect1.uniteRect(rect);\n }\n else {\n rect1 = rect;\n }\n }\n return rect1;\n };\n GraphLayoutManager.prototype.updateLayout1 = function (nodesToLayout, symmetricLayout) {\n this.detectCyclesInGraph(nodesToLayout);\n var nodesCount = nodesToLayout.length;\n if (nodesCount > 0) {\n var cycleConnColln = [];\n var nodes = [];\n var nodeSymbols = [];\n for (var s = 0; s < nodesToLayout.length; s++) {\n var nd = nodesToLayout[s];\n if (nd.treeInfo.isCycleEdge === undefined) {\n nd.treeInfo.isCycleEdge = false;\n }\n if (nd.treeInfo.graphType === 'Connector' && !nd.treeInfo.isCycleEdge) {\n nodes.push(nd);\n }\n else if (nd.treeInfo.graphType === 'Connector') {\n cycleConnColln.push(nd);\n }\n else {\n nodeSymbols.push(nd);\n }\n }\n nodes = nodes.concat(nodeSymbols);\n nodes = cycleConnColln.concat(nodes);\n while (nodesCount > this.dictionaryLength(this.passedNodes)) {\n this.getNodesToPosition(nodes);\n if (this.selectedNode == null) {\n continue;\n }\n symmetricLayout.doLayout(this);\n this.selectedNode = null;\n this.visitedStack = [];\n for (var _i = 0, _a = this.cycleEdgesCollection; _i < _a.length; _i++) {\n var connector = _a[_i];\n connector.treeInfo.isCycleEdge = false;\n }\n }\n this.passedNodes = null;\n this.selectedNode = null;\n }\n return false;\n };\n GraphLayoutManager.prototype.getNodesToPosition = function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n if (!collectionContains(node.id, this.passedNodes)) {\n if (node) {\n this.selectNodes(node);\n }\n break;\n }\n }\n };\n GraphLayoutManager.prototype.selectNodes = function (node) {\n var nodeGraph = node;\n if (node.treeInfo.graphType === 'Connector') {\n this.exploreGraphEdge(node);\n }\n else if (nodeGraph != null) {\n if (this.addNode(node, 'passed')) {\n this.addNode(node, 'selected');\n if (this.isConnectedToAnotherNode(nodeGraph)) {\n this.selectedNode = { treeInfo: {} };\n this.selectedNode.treeInfo.LeftMargin = 10;\n this.selectedNode.treeInfo.TopMargin = 10;\n this.selectConnectedNodes(nodeGraph);\n }\n else {\n this.selectedNode = node;\n }\n }\n }\n };\n GraphLayoutManager.prototype.selectConnectedNodes = function (nodeGraph) {\n var graph = this.selectedNode;\n if (!graph.treeInfo.GraphNodes) {\n graph.treeInfo.GraphNodes = {};\n }\n var node = nodeGraph;\n if (node != null && this.addNode(node, 'passed')) {\n var nodeName = node.id;\n if (!this.dictionaryContains(graph.treeInfo.GraphNodes, node)) {\n var gnNode = this.addGraphNode(node);\n this.getConnectedRelatives(gnNode);\n this.exploreRelatives(nodeGraph);\n }\n else {\n var graphNode = graph.treeInfo.GraphNodes[nodeName];\n if (graphNode.treeInfo.Added) {\n graphNode.treeInfo.Added = false;\n this.getConnectedRelatives(graphNode);\n this.exploreRelatives(nodeGraph);\n }\n }\n }\n };\n GraphLayoutManager.prototype.exploreRelatives = function (nodeGraph) {\n this.exploreRelatives1(nodeGraph, 'Parents');\n this.exploreRelatives1(nodeGraph, 'Children');\n };\n GraphLayoutManager.prototype.exploreRelatives1 = function (nodeGraph, relativesToExplore) {\n var edges = [];\n if (relativesToExplore === 'Parents') {\n edges = nodeGraph.inEdges;\n }\n else if (relativesToExplore === 'Children') {\n edges = nodeGraph.outEdges;\n }\n for (var i = 0; i < edges.length; i++) {\n var edge = this.nameTable[edges[i]];\n if (this.addNode(edge, 'passed')) {\n var fromNode = this.nameTable[edge.sourceID];\n var toNode = this.nameTable[edge.targetID];\n if (relativesToExplore === 'Parents' && fromNode != null &&\n collectionContains(fromNode.id, this.nodes)) {\n this.selectConnectedNodes(this.nameTable[edge.sourceID]);\n }\n else if (relativesToExplore === 'Children' && toNode != null &&\n collectionContains(toNode.id, this.nodes)) {\n this.selectConnectedNodes(this.nameTable[edge.targetID]);\n }\n }\n }\n };\n GraphLayoutManager.prototype.getConnectedRelatives = function (graphNode) {\n this.getConnectedParents(graphNode);\n this.getConnectedChildren(graphNode);\n };\n GraphLayoutManager.prototype.dictionaryContains = function (obj, keyObj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] === keyObj.id) {\n return true;\n }\n }\n return false;\n };\n GraphLayoutManager.prototype.dictionaryLength = function (obj) {\n var keys = Object.keys(obj);\n return keys.length;\n };\n GraphLayoutManager.prototype.getConnectedChildren = function (graphNode) {\n var graph = this.selectedNode;\n var nodeGraph = graphNode;\n for (var s = 0; s < nodeGraph.outEdges.length; s++) {\n var edge = this.nameTable[nodeGraph.outEdges[s]];\n if (!edge.treeInfo.isCycleEdge) {\n var node = this.nameTable[edge.targetID];\n if (collectionContains(node.id, this.nodes) && node != null && node.visible) {\n var gnNodeChildren = void 0;\n if (!this.dictionaryContains(graph.treeInfo.GraphNodes, node)) {\n gnNodeChildren = this.addGraphNode(node);\n gnNodeChildren.treeInfo.Added = true;\n }\n else {\n gnNodeChildren = graph.treeInfo.GraphNodes[node.id];\n }\n if (!graphNode.treeInfo.children) {\n graphNode.treeInfo.children = [];\n }\n if (!gnNodeChildren.treeInfo.parents) {\n gnNodeChildren.treeInfo.parents = [];\n }\n this.setNode(gnNodeChildren.treeInfo.parents, graphNode);\n if (this.findNode(graphNode.treeInfo.children, gnNodeChildren.id) < 0) {\n graphNode.treeInfo.children.push(gnNodeChildren);\n }\n }\n }\n }\n };\n GraphLayoutManager.prototype.getConnectedParents = function (graphNode) {\n var graph = this.selectedNode;\n var nodeGraph = graphNode;\n for (var s = 0; s < nodeGraph.inEdges.length; s++) {\n var edge = this.nameTable[nodeGraph.inEdges[s]];\n if (!edge.treeInfo.isCycleEdge) {\n var node = this.nameTable[edge.sourceID];\n if (collectionContains(node.id, this.nodes) && node != null && node.visible) {\n var gnNode = void 0;\n if (!this.dictionaryContains(graph.treeInfo.GraphNodes, node)) {\n gnNode = this.addGraphNode(node);\n gnNode.treeInfo.Added = true;\n }\n else {\n gnNode = graph.treeInfo.GraphNodes[node.id];\n }\n if (!graphNode.treeInfo.parents) {\n graphNode.treeInfo.parents = [];\n }\n if (!gnNode.treeInfo.children) {\n gnNode.treeInfo.children = [];\n }\n this.setNode(gnNode.treeInfo.children, graphNode);\n if (this.findNode(graphNode.treeInfo.parents, gnNode.id) < 0) {\n graphNode.treeInfo.parents.push(gnNode);\n }\n }\n }\n }\n };\n GraphLayoutManager.prototype.setNode = function (list, node) {\n var nIndex = this.findNode(list, node.id);\n if (nIndex >= 0 && nIndex < list.length) {\n list[nIndex] = node;\n }\n else {\n list.push(node);\n }\n };\n GraphLayoutManager.prototype.findNode = function (list, fullName) {\n var nIndex = -1;\n if (list != null && fullName !== '') {\n for (var i = 0, nLength = list.length; i < nLength; i++) {\n var gnNode = list[i];\n if (typeof (gnNode) === 'string' && gnNode === fullName) {\n nIndex = i;\n break;\n }\n else if (gnNode != null && gnNode.id === fullName) {\n nIndex = i;\n break;\n }\n }\n }\n return nIndex;\n };\n GraphLayoutManager.prototype.addGraphNode = function (node) {\n var graph = this.selectedNode;\n if (!graph.treeInfo.GraphNodes) {\n graph.treeInfo.GraphNodes = {};\n }\n var gnNode = node;\n if (graph != null) {\n graph.treeInfo.GraphNodes[gnNode.id] = gnNode;\n var nodeHelper = this.mhelperSelectedNode;\n if (nodeHelper != null && node.id === nodeHelper.id) {\n this.mhelperSelectedNode = gnNode;\n }\n }\n return gnNode;\n };\n GraphLayoutManager.prototype.isConnectedToAnotherNode = function (gnNode) {\n var bFoundConnectedNode = false;\n var edges = (gnNode.inEdges).concat(gnNode.outEdges);\n if (edges.length > 0) {\n if ((gnNode.inEdges != null) && (gnNode.inEdges.length > 0)) {\n bFoundConnectedNode = this.searchEdgeCollection(gnNode.inEdges, 'FromNode');\n }\n if ((!bFoundConnectedNode) && (gnNode.outEdges != null) && (gnNode.outEdges.length > 0)) {\n bFoundConnectedNode = this.searchEdgeCollection(gnNode.outEdges, 'ToNode');\n }\n }\n return bFoundConnectedNode;\n };\n GraphLayoutManager.prototype.searchEdgeCollection = function (edgesToSearchThrough, connectionDirection) {\n var bFoundConnectedNode = false;\n for (var i = 0; i < edgesToSearchThrough.length - 1; i++) {\n var edge = this.nameTable[edgesToSearchThrough[i]];\n if (!this.addNode(edge, 'passed')) {\n continue;\n }\n if (!edge.treeInfo.isCycleEdge && ((connectionDirection === 'FromNode' && this.nameTable[edge.sourceID] != null)\n || (connectionDirection === 'ToNode' && this.nameTable[edge.targetID] != null))) {\n bFoundConnectedNode = true;\n break;\n }\n }\n return bFoundConnectedNode;\n };\n GraphLayoutManager.prototype.exploreGraphEdge = function (node) {\n var nodeLink = node;\n if (nodeLink != null && !nodeLink.treeInfo.isCycleEdge && this.addNode(node, 'passed')) {\n this.addNode(node, 'selected');\n var fromNode = this.nameTable[nodeLink.sourceID];\n var toNode = this.nameTable[nodeLink.targetID];\n if (fromNode != null) {\n this.selectNodes(fromNode);\n }\n else if (toNode != null) {\n this.selectNodes(toNode);\n }\n else {\n this.selectedNode = node;\n }\n }\n };\n GraphLayoutManager.prototype.addNode = function (nodeToAdd, collectionToAdd) {\n var bResult = true;\n var node = nodeToAdd;\n if (collectionToAdd === 'passed' || !node.visible) {\n if (!this.dictionaryContains(this.passedNodes, node)) {\n this.passedNodes[node.id] = node;\n }\n }\n if (!node.visible) {\n return false;\n }\n return bResult;\n };\n GraphLayoutManager.prototype.detectCyclesInGraph = function (nodes) {\n var vertex = [];\n var currentStack = [];\n for (var k = 0; k < nodes.length; k++) {\n if (!(nodes[k].treeInfo.graphType === 'Connector')) {\n vertex.push(nodes[k]);\n }\n }\n if (vertex.length > 0) {\n currentStack.push(vertex[0]);\n this.visitedStack.push(vertex[0]);\n while (currentStack.length > 0) {\n var top_1 = currentStack[currentStack.length - 1];\n var childNodes = this.getUnVisitedChildNodes(top_1);\n if (childNodes.length > 0) {\n var child = childNodes[0];\n var currentEdge = childNodes[childNodes.length - 1];\n if (collectionContains(child.id, this.visitedStack)) {\n currentEdge.treeInfo.isCycleEdge = true;\n this.cycleEdgesCollection.push(currentEdge);\n }\n else {\n currentStack.push(child);\n this.visitedStack.splice(0, 0, child);\n }\n }\n else {\n currentStack.pop();\n }\n }\n }\n };\n GraphLayoutManager.prototype.getUnVisitedChildNodes = function (top) {\n var childNodes = [];\n if (top.outEdges.length > 0) {\n for (var i = 0; i < top.outEdges.length; i++) {\n var con = this.nameTable[top.outEdges[i]];\n if (!collectionContains(con.id, this.visitedStack)) {\n var toNode = this.nameTable[con.targetID];\n if (toNode != null) {\n childNodes.push(toNode);\n }\n childNodes.push(con);\n this.visitedStack.splice(0, 0, con);\n return childNodes;\n }\n }\n return childNodes;\n }\n return childNodes;\n };\n return GraphLayoutManager;\n}());\nexport { GraphLayoutManager };\nfunction getGraphBounds(node) {\n var x = node.offsetX - node.actualSize.width * node.pivot.x;\n var y = node.offsetY - node.actualSize.height * node.pivot.y;\n return new Rect(x, y, node.actualSize.width, node.actualSize.height);\n}\nfunction collectionContains(id, coll) {\n for (var i = 0; i < coll.length; i++) {\n if (coll[i].id === id) {\n return true;\n }\n }\n return false;\n}\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} element - Specifies an li element.\n * @param {string} query - Specifies the string to be highlighted.\n * @param {boolean} ignoreCase - Specifies the ignoreCase option.\n * @param {HightLightType} type - Specifies the type of highlight.\n */\nexport function highlightSearch(element, query, ignoreCase, type) {\n if (query === '') {\n return;\n }\n else {\n var ignoreRegex = ignoreCase ? 'gim' : 'gm';\n query = /^[a-zA-Z0-9- ]*$/.test(query) ? query : query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n var replaceQuery = type === 'StartsWith' ? '^(' + query + ')' : type === 'EndsWith' ? '(' + query + ')$' : '(' + query + ')';\n findTextNode(element, new RegExp(replaceQuery, ignoreRegex));\n }\n}\nfunction findTextNode(element, pattern) {\n for (var index = 0; element.childNodes && (index < element.childNodes.length); index++) {\n if (element.childNodes[index].nodeType === 3) {\n element.innerHTML = element.innerHTML.replace(pattern, '$1');\n break;\n }\n else {\n findTextNode(element.childNodes[index], pattern);\n }\n }\n}\n/**\n * Function helps to remove highlighted element based on your data.\n * @param {HTMLElement} content - Specifies an content element.\n */\nexport function revertHighlightSearch(content) {\n var contentElement = content.querySelectorAll('.e-highlight');\n for (var i = contentElement.length - 1; i >= 0; i--) {\n var parent_1 = contentElement[i].parentNode;\n var text = document.createTextNode(contentElement[i].textContent);\n parent_1.replaceChild(text, contentElement[i]);\n }\n}\n","/**\n * FloatLable Moduel\n * Specifies whether to display the floating label above the input element.\n */\nimport { removeClass, addClass, detach } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nvar FLOATLINE = 'e-float-line';\nvar FLOATTEXT = 'e-float-text';\nvar LABELTOP = 'e-label-top';\nvar LABELBOTTOM = 'e-label-bottom';\n/**\n * Function to create Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param element - the given html element.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function createFloatLabel(overAllWrapper, searchWrapper, element, inputElement, value, floatLabelType, placeholder) {\n var floatLinelement;\n var floatLabelElement;\n floatLinelement = createElement('span', { className: FLOATLINE });\n floatLabelElement = createElement('label', { className: FLOATTEXT });\n if (!isNullOrUndefined(element.id) && element.id !== '') {\n floatLabelElement.id = 'label_' + element.id.replace(/ /g, '_');\n attributes(element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(inputElement.placeholder) && inputElement.placeholder !== '') {\n floatLabelElement.innerHTML = inputElement.placeholder;\n inputElement.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n floatLabelElement.innerHTML = placeholder;\n }\n searchWrapper.appendChild(floatLinelement);\n searchWrapper.appendChild(floatLabelElement);\n overAllWrapper.classList.add('e-float-input');\n updateFloatLabelState(value, floatLabelElement);\n if (floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(LABELBOTTOM)) {\n removeClass([floatLabelElement], LABELBOTTOM);\n }\n addClass([floatLabelElement], LABELTOP);\n }\n}\n/**\n * Function to update status of the Float Label element.\n * @param value - Value of the MultiSelect.\n * @param label - float label element.\n */\nexport function updateFloatLabelState(value, label) {\n if (value && value.length > 0) {\n addClass([label], LABELTOP);\n removeClass([label], LABELBOTTOM);\n }\n else {\n removeClass([label], LABELTOP);\n addClass([label], LABELBOTTOM);\n }\n}\n/**\n * Function to remove Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param searchWrapper - search wrapper of multiselect.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function removeFloating(overAllWrapper, componentWrapper, searchWrapper, inputElement, value, floatLabelType, placeholder) {\n var placeholderElement = componentWrapper.querySelector('.' + FLOATTEXT);\n var floatLine = componentWrapper.querySelector('.' + FLOATLINE);\n var placeholderText;\n if (!isNullOrUndefined(placeholderElement)) {\n placeholderText = placeholderElement.innerText;\n detach(searchWrapper.querySelector('.' + FLOATTEXT));\n setPlaceHolder(value, inputElement, placeholderText);\n if (!isNullOrUndefined(floatLine)) {\n detach(searchWrapper.querySelector('.' + FLOATLINE));\n }\n }\n else {\n placeholderText = (placeholder !== null) ? placeholder : '';\n setPlaceHolder(value, inputElement, placeholderText);\n }\n overAllWrapper.classList.remove('e-float-input');\n}\n/**\n * Function to set the placeholder to the element.\n * @param value - Value of the MultiSelect.\n * @param inputElement - specify the input wrapper.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function setPlaceHolder(value, inputElement, placeholder) {\n if (value && value.length) {\n inputElement.placeholder = '';\n }\n else {\n inputElement.placeholder = placeholder;\n }\n}\n/**\n * Function for focusing the Float Element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n */\nexport function floatLabelFocus(overAllWrapper, componentWrapper) {\n overAllWrapper.classList.add('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (!isNullOrUndefined(label)) {\n addClass([label], LABELTOP);\n if (label.classList.contains(LABELBOTTOM)) {\n removeClass([label], LABELBOTTOM);\n }\n }\n}\n/**\n * Function to focus the Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function floatLabelBlur(overAllWrapper, componentWrapper, value, floatLabelType, placeholder) {\n overAllWrapper.classList.remove('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (value && value.length <= 0 && floatLabelType === 'Auto' && !isNullOrUndefined(label)) {\n if (label.classList.contains(LABELTOP)) {\n removeClass([label], LABELTOP);\n }\n addClass([label], LABELBOTTOM);\n }\n}\n","import { ChildProperty, compile as baseTemplateComplier, setValue, Internationalization } from '@syncfusion/ej2-base';\nimport { extend as baseExtend, isNullOrUndefined, getValue, classList } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, addClass, attributes, remove, createElement, removeClass } from '@syncfusion/ej2-base';\nimport { 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 DataUtil.getObject(field, data);\n}\n/**\n * The function used to update Dom using requestAnimationFrame.\n * @param {Function} fn - Function that contains the actual action\n * @return {Promise}\n * @hidden\n */\nexport function getUpdateUsingRaf(updateFunction, callBack) {\n requestAnimationFrame(function () {\n try {\n callBack(null, updateFunction());\n }\n catch (e) {\n callBack(e);\n }\n });\n}\n/**\n * @hidden\n */\nexport function iterateArrayOrObject(collection, predicate) {\n var result = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n var pred = predicate(collection[i], i);\n if (!isNullOrUndefined(pred)) {\n result.push(pred);\n }\n }\n return result;\n}\n/** @hidden */\nexport function iterateExtend(array) {\n var obj = [];\n for (var i = 0; i < array.length; i++) {\n obj.push(baseExtend({}, getActualProperties(array[i]), {}, true));\n }\n return obj;\n}\n/** @hidden */\nexport function templateCompiler(template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return baseTemplateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return baseTemplateComplier(template);\n }\n }\n return undefined;\n}\n/** @hidden */\nexport function setStyleAndAttributes(node, customAttributes) {\n var copyAttr = {};\n var literals = ['style', 'class'];\n //Dont touch the original object - make a copy\n baseExtend(copyAttr, customAttributes, {});\n if ('style' in copyAttr) {\n setStyleAttribute(node, copyAttr[literals[0]]);\n delete copyAttr[literals[0]];\n }\n if ('class' in copyAttr) {\n addClass([node], copyAttr[literals[1]]);\n delete copyAttr[literals[1]];\n }\n attributes(node, copyAttr);\n}\n/** @hidden */\nexport function extend(copied, first, second, exclude) {\n var moved = baseExtend(copied, first, second);\n Object.keys(moved).forEach(function (value, index) {\n if (exclude.indexOf(value) !== -1) {\n delete moved[value];\n }\n });\n return moved;\n}\n/** @hidden */\nexport function prepareColumns(columns, autoWidth) {\n for (var c = 0, len = columns.length; c < len; c++) {\n var column = void 0;\n if (typeof columns[c] === 'string') {\n column = new Column({ field: columns[c] });\n }\n else if (!(columns[c] instanceof Column)) {\n if (!columns[c].columns) {\n column = new Column(columns[c]);\n }\n else {\n 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 (column.field in data || data instanceof Array) ? DataUtil.aggregates[type.toLowerCase()](data, column.field) : null;\n}\n/** @hidden */\nvar scrollWidth = null;\n/** @hidden */\nexport function getScrollBarWidth() {\n if (scrollWidth !== null) {\n return scrollWidth;\n }\n var divNode = document.createElement('div');\n var value = 0;\n divNode.style.cssText = 'width:100px;height: 100px;overflow: scroll;position: absolute;top: -9999px;';\n document.body.appendChild(divNode);\n value = (divNode.offsetWidth - divNode.clientWidth) | 0;\n document.body.removeChild(divNode);\n return scrollWidth = value;\n}\n/** @hidden */\nvar rowHeight;\n/** @hidden */\nexport function getRowHeight(element) {\n if (rowHeight !== undefined) {\n return rowHeight;\n }\n var table = createElement('table', { className: 'e-table', styles: 'visibility: hidden' });\n table.innerHTML = 'A';\n element.appendChild(table);\n var rect = table.querySelector('td').getBoundingClientRect();\n element.removeChild(table);\n rowHeight = Math.ceil(rect.height);\n return rowHeight;\n}\n/** @hidden */\nexport function isComplexField(field) {\n return field.split('.').length > 1;\n}\n/** @hidden */\nexport function getComplexFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/\\./g, '_');\n}\n/** @hidden */\nexport function setComplexFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/_/g, '.');\n}\n/** @hidden */\nexport function isEditable(col, type, elem) {\n var row = parentsUntil(elem, 'e-row');\n var isOldRow = !row ? true : row && !row.classList.contains('e-insertedrow');\n if (type === 'beginEdit' && isOldRow) {\n if (col.isIdentity || col.isPrimaryKey || !col.allowEditing) {\n return false;\n }\n return true;\n }\n else if (type === 'add' && col.isIdentity && col.isPrimaryKey) {\n return false;\n }\n else {\n if (isOldRow && !col.allowEditing && !col.isIdentity && !col.isPrimaryKey) {\n return false;\n }\n return true;\n }\n}\n/** @hidden */\nexport function isActionPrevent(inst) {\n var dlg = inst.element.querySelector('#' + inst.element.id + 'EditConfirm');\n return inst.editSettings.mode === 'Batch' &&\n (inst.element.querySelectorAll('.e-updatedtd').length) && inst.editSettings.showConfirmDialog &&\n (dlg ? dlg.classList.contains('e-popup-close') : true);\n}\n/** @hidden */\nexport function wrap(elem, action) {\n var clName = 'e-wrap';\n elem = elem instanceof Array ? elem : [elem];\n for (var i = 0; i < elem.length; i++) {\n action ? elem[i].classList.add(clName) : elem[i].classList.remove(clName);\n }\n}\n/** @hidden */\nexport function setFormatter(serviceLocator, column) {\n var fmtr = serviceLocator.getService('valueFormatter');\n switch (column.type) {\n case 'date':\n column.setFormatter(fmtr.getFormatFunction({ type: 'date', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'date', skeleton: column.format }));\n break;\n case 'datetime':\n column.setFormatter(fmtr.getFormatFunction({ type: 'dateTime', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'dateTime', skeleton: column.format }));\n break;\n case 'number':\n column.setFormatter(fmtr.getFormatFunction({ format: column.format }));\n column.setParser(fmtr.getParserFunction({ format: column.format }));\n break;\n }\n}\n/** @hidden */\nexport function addRemoveActiveClasses(cells, add) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n classList(cells[i], args.slice(), []);\n cells[i].setAttribute('aria-selected', 'true');\n }\n else {\n classList(cells[i], [], args.slice());\n cells[i].removeAttribute('aria-selected');\n }\n }\n}\n/** @hidden */\nexport function distinctStringValues(result) {\n var temp = {};\n var res = [];\n for (var i = 0; i < result.length; i++) {\n if (!(result[i] in temp)) {\n res.push(result[i].toString());\n temp[result[i]] = 1;\n }\n }\n return res;\n}\n/** @hidden */\nexport function getFilterMenuPostion(target, dialogObj, grid) {\n var elementVisible = dialogObj.element.style.display;\n dialogObj.element.style.display = 'block';\n var dlgWidth = dialogObj.width;\n var newpos;\n if (!grid.enableRtl) {\n newpos = calculateRelativeBasedPosition(target, dialogObj.element);\n dialogObj.element.style.display = elementVisible;\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 5 + 'px';\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) - 16 + 'px'; // right calculation\n }\n else {\n dialogObj.element.style.left = leftPos + -4 + 'px';\n }\n }\n else {\n newpos = calculatePosition(target, 'left', 'bottom');\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 35 + 'px';\n dialogObj.element.style.display = elementVisible;\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) + -16 + 'px';\n }\n else {\n dialogObj.element.style.left = leftPos - 16 + 'px';\n }\n }\n}\n/** @hidden */\nexport function getZIndexCalcualtion(args, dialogObj) {\n args.popup.element.style.zIndex = (dialogObj.zIndex + 1).toString();\n}\n/** @hidden */\nexport function toogleCheckbox(elem) {\n var span = elem.querySelector('.e-frame');\n span.classList.contains('e-check') ? classList(span, ['e-uncheck'], ['e-check']) :\n classList(span, ['e-check'], ['e-uncheck']);\n}\n/** @hidden */\nexport function createCboxWithWrap(uid, elem, className) {\n var div = createElement('div', { className: className });\n div.appendChild(elem);\n div.setAttribute('uid', uid);\n return div;\n}\n/** @hidden */\nexport function removeAddCboxClasses(elem, checked) {\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n if (checked) {\n elem.classList.add('e-check');\n }\n else {\n elem.classList.add('e-uncheck');\n }\n}\n/**\n * Refresh the Row model's foreign data.\n * @param row - Grid Row model object.\n * @param columns - Foreign columns array.\n * @param data - Updated Row data.\n * @hidden\n */\nexport function refreshForeignData(row, columns, data) {\n columns.forEach(function (col) {\n setValue(col.field, getForeignData(col, data), row.foreignKeyData);\n });\n row.cells.forEach(function (cell) {\n if (cell.isForeignKey) {\n setValue('foreignKeyData', getValue(cell.column.field, row.foreignKeyData), cell);\n }\n });\n}\n/**\n * Get the foreign data for the corresponding cell value.\n * @param column - Foreign Key column\n * @param data - Row data.\n * @param lValue - cell value.\n * @param foreignData - foreign data source.\n * @hidden\n */\nexport function getForeignData(column, data, lValue, foreignKeyData) {\n var fField = column.foreignKeyField;\n var key = (lValue || valueAccessor(column.field, data, column));\n key = isNullOrUndefined(key) ? '' : key;\n var query = new Query();\n var fdata = foreignKeyData || (column.dataSource instanceof DataManager) && column.dataSource.dataSource.json.length ?\n column.dataSource.dataSource.json : column.columnData;\n if (key.getDay) {\n query.where(getDatePredicate({ field: fField, operator: 'equal', value: key, matchCase: false }));\n }\n else {\n query.where(fField, '==', key, false);\n }\n return new DataManager(fdata).executeLocal(query);\n}\n/**\n * To use to get the column's object by the foreign key value.\n * @param foreignKeyValue - Defines ForeignKeyValue.\n * @param columns - Array of column object.\n * @hidden\n */\nexport function getColumnByForeignKeyValue(foreignKeyValue, columns) {\n var column;\n return columns.some(function (col) {\n column = col;\n return col.foreignKeyValue === foreignKeyValue;\n }) && column;\n}\n/**\n * @hidden\n * @param filterObject - Defines predicate model object\n */\nexport function getDatePredicate(filterObject, type) {\n var datePredicate;\n var prevDate;\n var nextDate;\n var prevObj = baseExtend({}, getActualProperties(filterObject));\n var nextObj = baseExtend({}, getActualProperties(filterObject));\n var value = new Date(filterObject.value);\n if (filterObject.operator === 'equal' || filterObject.operator === 'notequal') {\n if (type === 'datetime') {\n prevDate = new Date(value.setSeconds(value.getSeconds() - 1));\n nextDate = new Date(value.setSeconds(value.getSeconds() + 2));\n filterObject.value = new Date(value.setSeconds(nextDate.getSeconds() - 1));\n }\n else {\n prevDate = new Date(value.setHours(0) - 1);\n nextDate = new Date(value.setHours(24));\n }\n prevObj.value = prevDate;\n nextObj.value = nextDate;\n if (filterObject.operator === 'equal') {\n prevObj.operator = 'greaterthan';\n nextObj.operator = 'lessthan';\n }\n else if (filterObject.operator === 'notequal') {\n prevObj.operator = 'lessthanorequal';\n nextObj.operator = 'greaterthanorequal';\n }\n var predicateSt = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n var predicateEnd = new Predicate(nextObj.field, nextObj.operator, nextObj.value, false);\n datePredicate = filterObject.operator === 'equal' ? predicateSt.and(predicateEnd) : predicateSt.or(predicateEnd);\n }\n else {\n if (typeof (prevObj.value) === 'string') {\n prevObj.value = new Date(prevObj.value);\n }\n var predicates = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n datePredicate = predicates;\n }\n if (filterObject.setProperties) {\n filterObject.setProperties({ ejpredicate: datePredicate }, true);\n }\n else {\n filterObject.ejpredicate = datePredicate;\n }\n return datePredicate;\n}\n/**\n * @hidden\n */\nexport function renderMovable(ele, frzCols) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < frzCols; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = frzCols, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n}\nexport function getObject(field, object) {\n if (field === void 0) { field = ''; }\n if (field) {\n var value = object;\n var splits = field.split('.');\n for (var i = 0; i < splits.length && !isNullOrUndefined(value); i++) {\n value = value[splits[i]];\n }\n return value;\n }\n}\nexport function getCustomDateFormat(format, colType) {\n var intl = new Internationalization();\n var formatvalue;\n var formatter = 'format';\n var type = 'type';\n if (colType === 'date') {\n formatvalue = typeof (format) === 'object' ?\n intl.getDatePattern({ type: format[type] ? format[type] : 'date', format: format[formatter] }, false) :\n intl.getDatePattern({ type: 'date', skeleton: format }, false);\n }\n else {\n formatvalue = typeof (format) === 'object' ?\n intl.getDatePattern({ type: format[type] ? format[type] : 'dateTime', format: format[formatter] }, false) :\n intl.getDatePattern({ type: 'dateTime', skeleton: format }, false);\n }\n return formatvalue;\n}\n","/**\n * 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","import { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { uiUpdate, initialEnd, dataReady, modelChanged, refreshAggregates, refreshFooterRenderer, groupAggregates } from '../base/constant';\nimport { FooterRenderer } from '../renderer/footer-renderer';\nimport { SummaryCellRenderer } from '../renderer/summary-cell-renderer';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\n/**\n * Summary Action controller.\n */\nvar Aggregate = /** @class */ (function () {\n function Aggregate(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n Aggregate.prototype.getModuleName = function () {\n return 'aggregate';\n };\n Aggregate.prototype.initiateRender = function () {\n var _this = this;\n var cellFac = this.locator.getService('cellRendererFactory');\n var instance = new SummaryCellRenderer(this.parent, this.locator);\n [CellType.Summary, CellType.CaptionSummary, CellType.GroupSummary].forEach(function (type) {\n return cellFac.addCellRenderer(type, instance);\n });\n this.footerRenderer = new FooterRenderer(this.parent, this.locator);\n this.footerRenderer.renderPanel();\n this.footerRenderer.renderTable();\n this.locator.register('footerRenderer', this.footerRenderer);\n var fn = function () {\n _this.prepareSummaryInfo();\n _this.parent.off(dataReady, fn);\n };\n this.parent.on(dataReady, fn, this);\n this.parent.on(dataReady, this.footerRenderer.refresh, this.footerRenderer);\n };\n Aggregate.prototype.prepareSummaryInfo = function () {\n var _this = this;\n summaryIterator(this.parent.aggregates, function (column) {\n var dataColumn = _this.parent.getColumnByField(column.field) || {};\n var type = dataColumn.type;\n column.setPropertiesSilent({ format: _this.getFormatFromType(column.format, type) });\n column.setFormatter(_this.parent.locale);\n column.setPropertiesSilent({ columnName: column.columnName || column.field });\n });\n };\n Aggregate.prototype.getFormatFromType = function (format, type) {\n if (isNullOrUndefined(type) || typeof format !== 'string') {\n return format;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: format };\n break;\n case 'date':\n obj = { type: type, skeleton: format };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: format };\n break;\n }\n return obj;\n };\n Aggregate.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (isNullOrUndefined(this.footerRenderer)) {\n this.initiateRender();\n }\n this.prepareSummaryInfo();\n this.footerRenderer.refresh();\n var cModel = new CaptionSummaryModelGenerator(this.parent);\n var gModel = new GroupSummaryModelGenerator(this.parent);\n if (gModel.getData().length !== 0 || !cModel.isEmpty()) {\n this.parent.notify(modelChanged, {});\n }\n };\n Aggregate.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initialEnd, this.initiateRender, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n this.parent.on(refreshAggregates, this.refresh, this);\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.footerRenderer.removeEventListener();\n this.parent.off(initialEnd, this.initiateRender);\n this.parent.off(dataReady, this.footerRenderer.refresh);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n this.parent.off(refreshAggregates, this.refresh);\n };\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n remove(this.parent.element.querySelector('.e-gridfooter'));\n };\n Aggregate.prototype.refresh = function (data) {\n var editedData = data instanceof Array ? data : [data];\n this.parent.notify(refreshFooterRenderer, editedData);\n if (this.parent.groupSettings.columns.length > 0) {\n this.parent.notify(groupAggregates, editedData);\n }\n };\n return Aggregate;\n}());\nexport { Aggregate };\n/**\n * @private\n */\nexport function summaryIterator(aggregates, callback) {\n aggregates.forEach(function (row) {\n row.columns.forEach(function (column) {\n callback(column, row);\n });\n });\n}\n","import { extend } from '@syncfusion/ej2-base';\nimport { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { isEditable, getComplexFieldID, getObject, getCustomDateFormat } from '../base/util';\n/**\n * `DatePickerEditCell` is used to handle datepicker cell type editing.\n * @hidden\n */\nvar DatePickerEditCell = /** @class */ (function () {\n function DatePickerEditCell(parent) {\n this.parent = parent;\n }\n DatePickerEditCell.prototype.create = function (args) {\n /* tslint:disable-next-line:no-any */\n var complexFieldName = getComplexFieldID(args.column.field);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName, type: 'text', 'e-mappinguid': args.column.uid\n }\n });\n };\n DatePickerEditCell.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n DatePickerEditCell.prototype.write = function (args) {\n if (args.column.editType === 'datepickeredit') {\n this.obj = new DatePicker(extend(dateanddatetimerender(args, this.parent.editSettings.mode, this.parent.enableRtl), args.column.edit.params));\n }\n else if (args.column.editType === 'datetimepickeredit') {\n this.obj = new DateTimePicker(extend(dateanddatetimerender(args, this.parent.editSettings.mode, this.parent.enableRtl), args.column.edit.params));\n }\n this.obj.appendTo(args.element);\n };\n DatePickerEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return DatePickerEditCell;\n}());\nexport { DatePickerEditCell };\nfunction dateanddatetimerender(args, mode, rtl) {\n var isInline = mode !== 'Dialog';\n var format = getCustomDateFormat(args.column.format, args.column.type);\n var value = getObject(args.column.field, args.rowData);\n value = value ? new Date(value) : null;\n return {\n floatLabelType: isInline ? 'Never' : 'Always',\n value: value,\n format: format,\n placeholder: isInline ?\n '' : args.column.headerText, enableRtl: rtl,\n enabled: isEditable(args.column, args.type, args.element),\n };\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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, remove, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { RgbColor } from '../utils/colorMapping';\n/**\n * Helper method for heatmap\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 * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('heatmapmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'heatmapmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.fontSize = (font.size).indexOf('px') !== -1 ? font.size : font.size + 'px';\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/** @private */\nvar TextElement = /** @class */ (function () {\n function TextElement(fontModel, fontColor) {\n this['font-size'] = fontModel.size;\n this['font-style'] = fontModel.fontStyle;\n this['font-family'] = fontModel.fontFamily;\n this['font-weight'] = fontModel.fontWeight;\n this.fill = fontColor ? fontColor : '';\n }\n return TextElement;\n}());\nexport { TextElement };\nexport function titlePositionX(width, leftPadding, rightPadding, titleStyle) {\n var positionX;\n if (titleStyle.textAlignment === 'Near') {\n positionX = leftPadding;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionX = leftPadding + width / 2;\n }\n else {\n positionX = width + leftPadding;\n }\n return positionX;\n}\n/**\n * Internal class size for height and width\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/** @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) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color ? color : '';\n _this['stroke-width'] = parseFloat(width.toString());\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/**\n * Class to define currentRect private property.\n * @private\n */\nvar CurrentRect = /** @class */ (function () {\n function CurrentRect(x, y, width, height, value, id) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.value = value;\n this.id = id;\n }\n return CurrentRect;\n}());\nexport { CurrentRect };\n/**\n * Class to define property to draw rectangle.\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, borderColor, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, borderColor, 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/**\n * Class to define property to draw circle.\n * @private\n */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, borderColor, cx, cy, r) {\n var _this = _super.call(this, id, fill, border.width, borderColor, opacity) || this;\n _this.cx = cx ? cx : 0;\n _this.cy = cy ? cy : 0;\n _this.r = r ? r : 0;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/**\n * Helper Class to define property to draw rectangle.\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 * Class to define property to draw text.\n * @private\n */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, basic, element, fontColor) {\n var _this = _super.call(this, element, fontColor) || this;\n _this.transform = '';\n _this['dominant-baseline'] = 'auto';\n _this.labelRotation = 0;\n _this.baseline = 'auto';\n _this.id = id;\n _this.x = basic.x;\n _this.y = basic.y;\n _this['text-anchor'] = basic['text-anchor'];\n _this.text = basic.text;\n _this.transform = basic.transform;\n _this.labelRotation = basic.labelRotation;\n _this['dominant-baseline'] = basic['dominant-baseline'];\n _this.baseline = basic.baseline;\n _this.dy = basic.dy;\n return _this;\n }\n return TextOption;\n}(TextElement));\nexport { TextOption };\n/**\n * Helper Class to define property to draw text.\n * @private\n */\nvar TextBasic = /** @class */ (function () {\n function TextBasic(x, y, anchor, text, labelRotation, transform, baseLine, dy) {\n this.transform = '';\n this['dominant-baseline'] = 'auto';\n this.labelRotation = 0;\n this.baseline = 'auto';\n this.x = x ? x : 0;\n this.y = y ? y : 0;\n this['text-anchor'] = anchor ? anchor : '';\n this.text = text ? text : '';\n this.transform = transform ? transform : '';\n this.labelRotation = labelRotation;\n this['dominant-baseline'] = baseLine ? baseLine : '';\n this.baseline = baseLine ? baseLine : '';\n this.dy = dy ? dy : '';\n }\n return TextBasic;\n}());\nexport { TextBasic };\n/**\n * Class to define property to draw line.\n * @private\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 * Class to define property to draw line.\n * @private\n */\nvar LineOption = /** @class */ (function (_super) {\n __extends(LineOption, _super);\n function LineOption(id, line, stroke, strokewidth, opacity, dasharray) {\n var _this = _super.call(this, id, null, strokewidth, stroke, opacity, dasharray, null) || 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 * Properties required to render path.\n * @private\n */\nvar PathAttributes = /** @class */ (function (_super) {\n __extends(PathAttributes, _super);\n function PathAttributes(id, path, fill, border, borderWidth, opacity, borderColor) {\n var _this = _super.call(this, id, fill, borderWidth, borderColor, opacity, null) || this;\n _this.d = path.d;\n _this.x = path.x;\n _this.y = path.y;\n return _this;\n }\n return PathAttributes;\n}(PathOption));\nexport { PathAttributes };\n/**\n * Helper Class to define property to path.\n * @private\n */\nvar Path = /** @class */ (function () {\n function Path(d, innerR, x, y, x1, y1, cx, cy, start, end, radius, counterClockWise) {\n this.d = d;\n this.innerR = innerR;\n this.cx = cx;\n this.cy = cy;\n this.x = x;\n this.y = y;\n this.x1 = x1;\n this.y1 = y1;\n this.start = start;\n this.end = end;\n this.radius = radius;\n this.counterClockWise = counterClockWise;\n }\n return Path;\n}());\nexport { Path };\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 titlePositionY(heatmapSize, topPadding, bottomPadding, titleStyle) {\n var positionY;\n if (titleStyle.textAlignment === 'Near') {\n positionY = heatmapSize.height - bottomPadding;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionY = heatmapSize.height / 2;\n }\n else {\n positionY = topPadding;\n }\n return positionY;\n}\n/** @private */\nexport function rotateTextSize(font, text, angle) {\n var renderer = new SvgRenderer('heatmapMeasureRotateText');\n var svgObject = renderer.createSvg({ id: 'heatmapMeasureRotateText_svg', width: 100, height: 100 });\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 svgObject.appendChild(htmlObject);\n document.body.appendChild(svgObject);\n box = htmlObject.getBoundingClientRect();\n remove(svgObject);\n return new Size((box.right - box.left), (box.bottom - box.top));\n}\n/**\n * Class to draw SVG and Canvas Rectangle & Text.\n * @private\n */\nvar DrawSvgCanvas = /** @class */ (function () {\n function DrawSvgCanvas(heatmap) {\n this.heatMap = heatmap;\n }\n //Svg & Canvas Rectangle Part\n DrawSvgCanvas.prototype.drawRectangle = function (properties, parentElement, isFromSeries) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.drawRectangle(properties));\n }\n else {\n this.drawCanvasRectangle(this.heatMap.canvasRenderer, properties, isFromSeries);\n }\n };\n //Svg & Canvas Bubble Part\n DrawSvgCanvas.prototype.drawCircle = function (properties, parentElement) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.drawCircle(properties));\n }\n else {\n this.drawCanvasCircle(this.heatMap.canvasRenderer, properties);\n }\n };\n //Svg & Canvas Pie Part\n DrawSvgCanvas.prototype.drawPath = function (properties, options, parentElement) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.drawPath(properties));\n }\n else {\n this.drawCanvasPath(this.heatMap.canvasRenderer, properties, options);\n }\n };\n //Svg & Canvas Text Part\n DrawSvgCanvas.prototype.createText = function (properties, parentElement, text) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.createText(properties, text));\n }\n else {\n this.canvasDrawText(properties, text);\n }\n };\n //Draw the wrapped text for both SVG & canvas\n DrawSvgCanvas.prototype.createWrapText = function (options, font, parentElement) {\n var renderOptions = {};\n var htmlObject;\n var tspanElement;\n var text;\n var height;\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': options.fill,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options['text-anchor'],\n 'transform': options.transform,\n 'dominant-baseline': options['dominant-baseline']\n };\n text = options.text[0];\n if (!this.heatMap.enableCanvasRendering) {\n htmlObject = this.heatMap.renderer.createText(renderOptions, text);\n }\n else {\n this.heatMap.canvasRenderer.drawText(options, text);\n }\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 if (!this.heatMap.enableCanvasRendering) {\n tspanElement = this.heatMap.renderer.createTSpan({\n 'x': options.x, 'id': options.id + i,\n 'y': (options.y) + (i * height)\n }, options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n else {\n options.id = options.id + i;\n options.y += height;\n this.heatMap.canvasRenderer.drawText(options, options.text[i]);\n }\n }\n }\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(htmlObject);\n }\n };\n DrawSvgCanvas.prototype.drawLine = function (properties, parentElement) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.drawLine(properties));\n }\n else {\n this.heatMap.canvasRenderer.drawLine(properties);\n }\n };\n //Canvas Text Part\n DrawSvgCanvas.prototype.canvasDrawText = function (options, label, translateX, translateY) {\n var ctx = this.heatMap.canvasRenderer.ctx;\n if (!translateX) {\n translateX = options.x;\n }\n if (!translateY) {\n translateY = options.y;\n }\n var fontWeight = this.getOptionValue(options, 'font-weight');\n if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n fontWeight = 'normal';\n }\n var fontFamily = this.getOptionValue(options, 'font-family');\n var fontSize = (options['font-size'].toString()).indexOf('px') === -1 ? options['font-size'] + 'px' : options['font-size'];\n var anchor = this.getOptionValue(options, 'text-anchor');\n var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n if (anchor === 'middle') {\n anchor = 'center';\n }\n ctx.save();\n ctx.fillStyle = options.fill;\n ctx.font = font;\n ctx.textAlign = anchor;\n if (options.baseline) {\n ctx.textBaseline = options.baseline;\n }\n ctx.translate(translateX, translateY);\n ctx.rotate(options.labelRotation * Math.PI / 180);\n ctx.fillText(label, options.x - translateX, options.y - translateY);\n ctx.restore();\n };\n // method to get the attributes value\n /* tslint:disable */\n DrawSvgCanvas.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n DrawSvgCanvas.prototype.setAttributes = function (canvas, options) {\n canvas.ctx.lineWidth = options['stroke-width'];\n var dashArray = options['stroke-dasharray'];\n if (!isNullOrUndefined(dashArray)) {\n var dashArrayString = dashArray.split(',');\n canvas.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n }\n canvas.ctx.strokeStyle = options['stroke'];\n };\n ;\n DrawSvgCanvas.prototype.drawCanvasRectangle = function (canvas, options, isFromSeries) {\n var canvasCtx = canvas.ctx;\n var cornerRadius = options.rx;\n canvas.ctx.save();\n canvas.ctx.beginPath();\n canvas.ctx.globalAlpha = options['opacity'];\n this.setAttributes(canvas, options);\n this.drawCornerRadius(canvas, options);\n if ((options['stroke-width'] && options['stroke-width'] != 0) || isFromSeries) {\n canvas.ctx.stroke();\n }\n canvas.ctx.restore();\n canvas.ctx = canvasCtx;\n };\n ;\n // To draw the corner of a rectangle\n DrawSvgCanvas.prototype.drawCornerRadius = function (canvas, 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 canvas.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 canvas.ctx.beginPath();\n canvas.ctx.moveTo(x + width - cornerRadius, y);\n canvas.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n canvas.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n canvas.ctx.arcTo(x, y + height, x, y, cornerRadius);\n canvas.ctx.arcTo(x, y, x + width, y, cornerRadius);\n canvas.ctx.closePath();\n canvas.ctx.fill();\n };\n ;\n DrawSvgCanvas.prototype.drawCanvasCircle = function (canvas, options) {\n canvas.ctx.save();\n canvas.ctx.beginPath();\n canvas.ctx.arc(options.cx, options.cy, options.r, 0, 2 * Math.PI);\n canvas.ctx.fillStyle = options.fill;\n canvas.ctx.globalAlpha = options.opacity;\n canvas.ctx.fill();\n this.setAttributes(canvas, options);\n if (options['stroke-width'] && options['stroke-width'] !== 0) {\n canvas.ctx.stroke();\n }\n canvas.ctx.restore();\n };\n ;\n DrawSvgCanvas.prototype.drawCanvasPath = function (canvas, properties, options) {\n var path = properties.d;\n var dataSplit = path.split(' ');\n var borderWidth = this.getOptionValue(options, 'stroke-width');\n canvas.ctx.save();\n canvas.ctx.beginPath();\n canvas.ctx.globalAlpha = properties.opacity;\n canvas.ctx.fillStyle = properties.fill;\n this.setAttributes(canvas, properties);\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 canvas.ctx.moveTo(x1, y1);\n break;\n case 'L':\n canvas.ctx.lineTo(x1, y1);\n break;\n case 'A':\n case 'a':\n canvas.ctx.arc(options.x, options.y, options.radius, (options.start * 0.0174533), (options.end * 0.0174533), false);\n i = dataSplit[i] === 'a' ? i + 13 : i + 5;\n break;\n case 'Z':\n canvas.ctx.closePath();\n break;\n }\n }\n canvas.ctx.fill();\n if (properties['stroke-width'] && properties['stroke-width'] !== 0) {\n canvas.ctx.stroke();\n }\n canvas.ctx.restore();\n };\n ;\n return DrawSvgCanvas;\n}());\nexport { DrawSvgCanvas };\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(textNone(width, title, style));\n break;\n }\n return titleCollection;\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 */\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 index = textLength - 1; index >= 0; --index) {\n label = text.substring(0, index) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth) {\n return label;\n }\n }\n }\n return label;\n}\n/** @private */\nexport function textNone(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 */\nvar Gradient = /** @class */ (function () {\n function Gradient(x, x1, x2, y1, y2) {\n this.id = x;\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n }\n return Gradient;\n}());\nexport { Gradient };\nvar GradientColor = /** @class */ (function () {\n function GradientColor(color, colorStop) {\n this.color = color;\n this.colorStop = colorStop;\n }\n return GradientColor;\n}());\nexport { GradientColor };\n/** @private */\nexport function showTooltip(text, x, y, areaWidth, id, element, isTouch) {\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 x = x < 0 ? 5 : 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 removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function increaseDateTimeInterval(value, interval, intervalType, increment) {\n var result = new Date(value);\n interval = Math.ceil(interval * increment);\n switch (intervalType) {\n case 'Years':\n result.setFullYear(result.getFullYear() + interval);\n break;\n case 'Months':\n result.setMonth(result.getMonth() + interval);\n break;\n case 'Days':\n result.setDate(result.getDate() + interval);\n break;\n case 'Hours':\n result.setHours(result.getHours() + interval);\n break;\n case 'Minutes':\n result.setMinutes(result.getMinutes() + interval);\n break;\n }\n return result;\n}\n/* private */\nvar CanvasTooltip = /** @class */ (function () {\n function CanvasTooltip(text, rect) {\n this.region = new Rect(0, 0, 0, 0);\n this.text = text;\n this.region = rect;\n }\n return CanvasTooltip;\n}());\nexport { CanvasTooltip };\n/* private*/\n/* Method to get the tool tip text in canvas based on region. */\nexport function getTooltipText(tooltipCollection, xPosition, yPosition) {\n var length = tooltipCollection.length;\n var tooltip;\n var region;\n var text;\n for (var i = 0; i < length; i++) {\n tooltip = tooltipCollection[i];\n region = tooltip.region;\n if (xPosition >= region.x && xPosition <= (region.x + region.width) && yPosition >= region.y && yPosition <= (region.y + region.height)) {\n text = tooltip.text;\n break;\n }\n }\n return text;\n}\n/**\n * @private\n */\nvar PaletterColor = /** @class */ (function () {\n function PaletterColor() {\n }\n return PaletterColor;\n}());\nexport { PaletterColor };\n/**\n * @private\n */\nvar GradientPointer = /** @class */ (function () {\n function GradientPointer(pathX1, pathY1, pathX2, pathY2, pathX3, pathY3) {\n this.pathX1 = pathX1;\n this.pathY1 = pathY1;\n this.pathX2 = pathX2;\n this.pathY2 = pathY2;\n this.pathX3 = pathX3;\n this.pathY3 = pathY3;\n }\n return GradientPointer;\n}());\nexport { GradientPointer };\n/**\n * Class to define currentRect private property.\n * @private\n */\nvar CurrentLegendRect = /** @class */ (function () {\n function CurrentLegendRect(x, y, width, height, label, id) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.label = label;\n this.id = id;\n }\n return CurrentLegendRect;\n}());\nexport { CurrentLegendRect };\n/** @private */\nexport function colorNameToHex(color) {\n var element;\n color = color === 'transparent' ? 'white' : color;\n element = document.getElementById('heatmapmeasuretext');\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 RgbColor(parseInt(isRGBValue[3], 10), parseInt(isRGBValue[4], 10), parseInt(isRGBValue[5], 10)));\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 RgbColor(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n new RgbColor(255, 255, 255);\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, isNullOrUndefined } 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}\nexport function textFormatter(format, data, gauge) {\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(formatValue(data[key], gauge).toString());\n }\n return format;\n}\nexport function formatValue(value, gauge) {\n var formatValue;\n var formatFunction;\n if (gauge.format && !isNaN(Number(value))) {\n formatFunction = gauge.intl.getNumberFormat({ format: gauge.format, useGrouping: gauge.useGroupingSeparator });\n formatValue = formatFunction(Number(value));\n }\n else {\n formatValue = value;\n }\n return formatValue ? formatValue : '';\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 */\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}\nexport function getMousePosition(pageX, pageY, element) {\n var elementRect = element.getBoundingClientRect();\n var pageXOffset = element.ownerDocument.defaultView.pageXOffset;\n var pageYOffset = element.ownerDocument.defaultView.pageYOffset;\n var clientTop = element.ownerDocument.documentElement.clientTop;\n var clientLeft = element.ownerDocument.documentElement.clientLeft;\n var positionX = elementRect.left + pageXOffset - clientLeft;\n var positionY = elementRect.top + pageYOffset - clientTop;\n return new MapLocation((pageX - positionX), (pageY - positionY));\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 */\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 = (parseInt(size1[0], 10) * 2).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 'color: #000000; ' +\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}\n/**\n * To get shape data file using Ajax.\n */\nvar MapAjax = /** @class */ (function () {\n function MapAjax(options, type, async, contentType, sendData) {\n this.dataOptions = options;\n this.type = type || 'GET';\n this.async = async || true;\n this.contentType = contentType;\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 * Exports util methods used by RichTextEditor.\n */\nimport { isNullOrUndefined as isNOU, addClass, removeClass, selectAll } from '@syncfusion/ej2-base';\nimport * as classes from '../base/classes';\nimport * as model from '../models/items';\nimport { toolsLocale } from '../models/default-locale';\nvar undoRedoItems = ['Undo', 'Redo'];\nexport function getIndex(val, items) {\n var index = -1;\n items.some(function (item, i) {\n if (typeof item === 'string' && val === item.toLocaleLowerCase()) {\n index = i;\n return true;\n }\n return false;\n });\n return index;\n}\nexport function hasClass(element, className) {\n var hasClass = false;\n if (element.classList.contains(className)) {\n hasClass = true;\n }\n return hasClass;\n}\nexport function getDropDownValue(items, value, type, returnType) {\n var data;\n var result;\n for (var k = 0; k < items.length; k++) {\n if (type === 'value' && items[k].value.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'text' && items[k].text.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'subCommand' && items[k].subCommand.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n }\n if (!isNOU(data)) {\n switch (returnType) {\n case 'text':\n result = data.text;\n break;\n case 'value':\n result = data.value;\n break;\n case 'iconCss':\n result = data.iconCss;\n break;\n }\n }\n return result;\n}\nexport function isIDevice() {\n var result = false;\n var iosDevices = ['iphone', 'ipad', 'ipod'];\n for (var i = 0; i < iosDevices.length; i++) {\n if (navigator.platform.toLocaleLowerCase().indexOf(iosDevices[i]) > -1) {\n result = true;\n break;\n }\n }\n return result;\n}\nexport function getFormattedFontSize(value) {\n if (isNOU(value)) {\n return '';\n }\n var result = value.split('pt');\n return result[0] + ' pt';\n}\nexport function pageYOffset(e, parentElement, isIFrame) {\n var y = 0;\n if (isIFrame) {\n y = window.pageYOffset + parentElement.getBoundingClientRect().top + e.clientY;\n }\n else {\n y = e.pageY;\n }\n return y;\n}\nexport function getTooltipText(item, serviceLocator) {\n var i10n = serviceLocator.getService('rteLocale');\n var itemLocale = toolsLocale[item];\n var tooltipText = i10n.getConstant(itemLocale);\n return tooltipText;\n}\nexport function setToolbarStatus(e, isPopToolbar) {\n var dropDown = e.dropDownModule;\n var data = e.args;\n var keys = Object.keys(e.args);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n for (var j = 0; j < e.tbItems.length; j++) {\n var item = e.tbItems[j].subCommand;\n var itemStr = item && item.toLocaleLowerCase();\n if (item && (itemStr === key) || (item === 'UL' && key === 'unorderedlist') || (item === 'OL' && key === 'orderedlist')) {\n if (typeof data[key] === 'boolean') {\n if (data[key] === true) {\n addClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n else {\n removeClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n }\n else if ((typeof data[key] === 'string' || data[key] === null) &&\n getIndex(key, e.parent.toolbarSettings.items) > -1) {\n var value = ((data[key]) ? data[key] : '');\n var result = '';\n switch (key) {\n case 'formats':\n if (isNOU(dropDown.formatDropDown) || isPopToolbar) {\n return;\n }\n var formatItems = e.parent.format.types;\n result = getDropDownValue(formatItems, value, 'subCommand', 'text');\n dropDown.formatDropDown.content = ('' +\n ''\n + (isNOU(result) ? 'Paragraph' : result) +\n '');\n dropDown.formatDropDown.dataBind();\n break;\n case 'alignments':\n if (isNOU(dropDown.alignDropDown)) {\n return;\n }\n var alignItems = model.alignmentItems;\n result = getDropDownValue(alignItems, value, 'subCommand', 'iconCss');\n dropDown.alignDropDown.iconCss = isNOU(result) ? 'e-icons e-justify-left' : result;\n dropDown.alignDropDown.dataBind();\n break;\n case 'fontname':\n if (isNOU(dropDown.fontNameDropDown) || isPopToolbar) {\n return;\n }\n var fontNameItems = e.parent.fontFamily.items;\n result = getDropDownValue(fontNameItems, value, 'value', 'text');\n var name_1 = (isNOU(result) ? 'Segoe UI' : result);\n e.tbElements[j].title = name_1;\n dropDown.fontNameDropDown.content = ('' +\n ''\n + name_1 + '');\n dropDown.fontNameDropDown.dataBind();\n break;\n case 'fontsize':\n if (isNOU(dropDown.fontSizeDropDown)) {\n return;\n }\n var fontSizeItems = e.parent.fontSize.items;\n result = getDropDownValue(fontSizeItems, value, 'value', 'value');\n dropDown.fontSizeDropDown.content = ('' +\n ''\n + (isNOU(result) ? '10 pt' : getFormattedFontSize(result)) +\n '');\n dropDown.fontSizeDropDown.dataBind();\n break;\n }\n }\n }\n }\n }\n}\nexport function getCollection(items) {\n if (typeof items === 'object') {\n return items;\n }\n else {\n return [items];\n }\n}\nexport function getTBarItemsIndex(items, toolbarItems) {\n var itemsIndex = [];\n for (var i = 0; i < items.length; i++) {\n for (var j = 0; j < toolbarItems.length; j++) {\n if (toolbarItems[j].type === 'Separator') {\n continue;\n }\n else {\n if (items[i] === 'OrderedList' && toolbarItems[j].subCommand === 'OL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'UnorderedList' && toolbarItems[j].subCommand === 'UL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === toolbarItems[j].subCommand) {\n itemsIndex.push(j);\n break;\n }\n }\n }\n }\n return itemsIndex;\n}\nexport function updateUndoRedoStatus(baseToolbar, undoRedoStatus) {\n var i = 0;\n var trgItems = getTBarItemsIndex(getCollection(undoRedoItems), baseToolbar.toolbarObj.items);\n var tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n var keys = Object.keys(undoRedoStatus);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n var target = tbItems[trgItems[i]];\n if (target) {\n baseToolbar.toolbarObj.enableItems(target, undoRedoStatus[key]);\n }\n i++;\n }\n}\n/**\n * To dispatch the event manually\n */\nexport function dispatchEvent(element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n}\n","export function setAttributes(htmlAttributes, rte, isFrame) {\n var target;\n if (isFrame) {\n var iFrame = rte.contentModule.getDocument();\n target = iFrame.querySelector('body');\n }\n else {\n target = rte.element;\n }\n if (Object.keys(htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n target.classList.add(htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && htmlAttributes[htmlAttr] === 'disabled') {\n rte.enabled = false;\n rte.setEnable();\n }\n else if (htmlAttr === 'readonly' && htmlAttributes[htmlAttr] === 'readonly') {\n rte.readonly = true;\n rte.setReadOnly();\n }\n else if (htmlAttr === 'style') {\n target.setAttribute('style', htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'placeholder') {\n rte.placeholder = htmlAttributes[htmlAttr];\n rte.setPlaceHolder();\n }\n else {\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n rte.valueContainer.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n else {\n target.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n}\n","import { createElement } from '@syncfusion/ej2-base';\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}\nexport function getDateFromString(date) {\n return date.indexOf('Date') !== -1 ? new Date(parseInt(date.match(/\\d+/g).toString(), 10)) :\n date.indexOf('T') !== -1 ? new Date(date) : new Date(date.replace(/-/g, '/'));\n}\n/** @hidden */\nvar scrollWidth = null;\n/** @hidden */\nexport function getScrollBarWidth() {\n if (scrollWidth !== null) {\n return scrollWidth;\n }\n var divNode = 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}\nexport function findIndexInData(data, property, value) {\n for (var i = 0, length_1 = data.length; i < length_1; i++) {\n if (data[i][property] === value) {\n return i;\n }\n }\n return -1;\n}\nexport function getOuterHeight(element) {\n var style = getComputedStyle(element);\n return element.offsetHeight + (parseInt(style.marginTop, 10) || 0) + (parseInt(style.marginBottom, 10) || 0);\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 }\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(new Date(viewDate.getTime()).setHours(0, 0, 0));\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 var currentMonthDate = new Date(tempDate.getTime());\n while (currentMonthDate.getMonth() === month) {\n monthCollection.push([currentMonthDate.getTime()]);\n currentMonthDate.setDate(currentMonthDate.getDate() + (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 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 TIMES = 'summaryTimes';\nvar ON = 'summaryOn';\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","import { createElement, SvgRenderer, compile, merge, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Create the class for 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 };\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 * 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 of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function () {\n function RectOption(id, fill, border, opacity, rect, dashArray) {\n this.y = rect.y;\n this.x = rect.x;\n this.height = rect.height;\n this.width = rect.width;\n this.id = id;\n this.fill = fill;\n this.opacity = opacity;\n this.stroke = border.color;\n this['stroke-width'] = border.width;\n this['stroke-dasharray'] = dashArray;\n }\n return RectOption;\n}());\nexport { RectOption };\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 * 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 measureObject = document.getElementById('treeMapMeasureText');\n if (measureObject === null) {\n measureObject = createElement('text', { id: 'treeMapMeasureText' });\n document.body.appendChild(measureObject);\n }\n measureObject.innerHTML = text;\n measureObject.style.position = 'absolute';\n measureObject.style.fontSize = font.size;\n measureObject.style.fontWeight = font.fontWeight;\n measureObject.style.fontStyle = font.fontStyle;\n measureObject.style.fontFamily = font.fontFamily;\n measureObject.style.visibility = 'hidden';\n measureObject.style.top = '-100';\n measureObject.style.left = '0';\n measureObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n measureObject.style.lineHeight = 'normal';\n return new Size(measureObject.clientWidth, measureObject.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.text = text;\n this.transform = transform;\n this.anchor = anchor;\n this.x = x;\n this.y = y;\n this.baseLine = baseLine;\n }\n return TextOption;\n}());\nexport { TextOption };\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 * Map internal class for Point\n */\nvar Location = /** @class */ (function () {\n function Location(x, y) {\n this.x = x;\n this.y = y;\n }\n return Location;\n}());\nexport { Location };\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 Location(x, y);\n}\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 '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 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color\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) + (i * height)\n }, options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/* tslint:disable:no-string-literal */\nexport function itemsToOrder(a, b) {\n return a['weight'] === b['weight'] ? 0 : a['weight'] < b['weight'] ? 1 : -1;\n}\nexport function isContainsData(source, pathName, processData, treemap) {\n var isExist = false;\n var name = '';\n var path;\n var leaf = treemap.leafItemSettings;\n for (var i = 0; i < source.length; i++) {\n path = treemap.levels[i] ? treemap.levels[i].groupPath : leaf.labelPath ? leaf.labelPath : treemap.weightValuePath;\n if (source[i] === processData[path]) {\n name += (processData[path]) + (i === source.length - 1 ? '' : '_');\n if (name === pathName) {\n isExist = true;\n break;\n }\n }\n }\n return isExist;\n}\nexport function findChildren(data) {\n var children;\n if (data) {\n var keys = Object.keys(data);\n children = new Object();\n for (var i = 0; i < keys.length; i++) {\n if (data[keys[i]] instanceof Array) {\n children['values'] = data[keys[i]];\n children['key'] = keys[i];\n break;\n }\n }\n }\n return children;\n}\nexport function findHightLightItems(data, items, mode, treeMap) {\n if (mode === 'Child') {\n items.push(data['levelOrderName']);\n var children = findChildren(data)['values'];\n if (children && children.length > 0) {\n for (var i = 0; i < children.length; i++) {\n if (items.indexOf(children[i]['levelOrderName']) === -1) {\n items.push(children[i]['levelOrderName']);\n }\n }\n for (var j = 0; j < children.length; j++) {\n findHightLightItems(children[j], items, mode, treeMap);\n }\n }\n }\n else if (mode === 'Parent') {\n if (typeof data['levelOrderName'] === 'string' && items.indexOf(data['levelOrderName']) === -1) {\n items.push(data['levelOrderName']);\n findHightLightItems(data['parent'], items, mode, treeMap);\n }\n }\n else if (mode === 'All') {\n var parentName = data['levelOrderName'].split('_')[0];\n var currentItem = void 0;\n for (var i = 0; i < treeMap.layout.renderItems.length; i++) {\n currentItem = treeMap.layout.renderItems[i];\n if ((currentItem['levelOrderName']).indexOf(parentName) > -1 && items.indexOf(currentItem['levelOrderName']) === -1) {\n items.push(currentItem['levelOrderName']);\n }\n }\n }\n else {\n items.push(data['levelOrderName']);\n }\n return items;\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 = compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = compile(template);\n }\n return templateFn;\n}\n/**\n * @private\n */\nexport function convertElement(element, labelId, data) {\n var childElement = createElement('div', {\n id: labelId,\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 keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n templateHtml = templateHtml.replace(new RegExp('{{:' + keys[i] + '}}', 'g'), data[keys[i].toString()]);\n }\n childElement.innerHTML = templateHtml;\n return childElement;\n}\nexport function findLabelLocation(rect, position, labelSize, type, treemap) {\n var location = new Location(0, 0);\n var padding = 5;\n var paddings = 2;\n var elementRect = treemap.element.getBoundingClientRect();\n var x = (type === 'Template') ? treemap.areaRect.x : 0;\n var y = (type === 'Template') ? treemap.areaRect.y : 0;\n location.x = (Math.abs(x - ((position.indexOf('Left') > -1) ? rect.x + padding : !(position.indexOf('Right') > -1) ?\n rect.x + ((rect.width / 2) - (labelSize.width / 2)) : (rect.x + rect.width) - labelSize.width))) - paddings;\n location.y = Math.abs(y - ((position.indexOf('Top') > -1) ? (type === 'Template' ? rect.y : rect.y + labelSize.height) :\n !(position.indexOf('Bottom') > -1) ? type === 'Template' ? (rect.y + ((rect.height / 2) - (labelSize.height / 2))) :\n (rect.y + (rect.height / 2) + labelSize.height / 4) : (rect.y + rect.height) - labelSize.height));\n return location;\n}\nexport function measureElement(element, parentElement) {\n var size = new Size(0, 0);\n parentElement.appendChild(element);\n size.height = element.offsetHeight;\n size.width = element.offsetWidth;\n document.getElementById(element.id).remove();\n return size;\n}\nexport function getArea(rect) {\n return (rect.width - rect.x) * (rect.height - rect.y);\n}\nexport function getShortestEdge(input) {\n var container = convertToContainer(input);\n var width = container.width;\n var height = container.height;\n var result = Math.min(width, height);\n return result;\n}\nexport function convertToContainer(rect) {\n var x = rect.x;\n var y = rect.y;\n var width = rect.width;\n var height = rect.height;\n return {\n x: x,\n y: y,\n width: width - x,\n height: height - y\n };\n}\nexport function convertToRect(container) {\n var xOffset = container.x;\n var yOffset = container.y;\n var width = container.width;\n var height = container.height;\n return {\n x: xOffset,\n y: yOffset,\n width: xOffset + width,\n height: yOffset + height,\n };\n}\nexport function getMousePosition(pageX, pageY, element) {\n var elementRect = element.getBoundingClientRect();\n var pageXOffset = element.ownerDocument.defaultView.pageXOffset;\n var pageYOffset = element.ownerDocument.defaultView.pageYOffset;\n var clientTop = element.ownerDocument.documentElement.clientTop;\n var clientLeft = element.ownerDocument.documentElement.clientLeft;\n var positionX = elementRect.left + pageXOffset - clientLeft;\n var positionY = elementRect.top + pageYOffset - clientTop;\n return new Location((pageX - positionX), (pageY - positionY));\n}\nexport function colorMap(colorMapping, equalValue, value, weightValuePath) {\n var fill;\n var paths = [];\n var opacity;\n if (isNullOrUndefined(equalValue) && (isNullOrUndefined(value) && isNaN(value))) {\n return null;\n }\n for (var i = 0; i < colorMapping.length; i++) {\n var color = null;\n if (colorMapping[i].from && colorMapping[i].to && colorMapping[i].value) {\n if ((value >= colorMapping[i].from && colorMapping[i].to >= value) && (colorMapping[i].value === equalValue)) {\n color = colorMapping[i].color;\n }\n }\n else if ((colorMapping[i].from && colorMapping[i].to) || (colorMapping[i].value)) {\n colorMapping[i].value = !isNullOrUndefined(colorMapping[i].value) ? colorMapping[i].value.toString() : colorMapping[i].value;\n if ((value >= colorMapping[i].from && colorMapping[i].to >= value) || (colorMapping[i].value === equalValue)) {\n color = colorMapping[i].color;\n }\n }\n if (colorMapping[i].minOpacity && colorMapping[i].maxOpacity && color) {\n opacity = deSaturationColor(weightValuePath, colorMapping[i], color, value);\n }\n fill = color;\n opacity = (colorMapping[i].minOpacity) ? opacity : '1';\n paths.push(fill);\n }\n for (var j = paths.length - 1; j >= 0; j--) {\n fill = paths[j];\n j = (fill) ? -1 : j;\n }\n return { fill: fill, opacity: opacity };\n}\nexport function deSaturationColor(weightValuePath, colorMapping, color, rangeValue) {\n var opacity = 0;\n if ((rangeValue >= colorMapping.from && rangeValue <= colorMapping.to)) {\n var ratio = (rangeValue - colorMapping.from) / (colorMapping.to - colorMapping.from);\n opacity = (ratio * (colorMapping.maxOpacity - colorMapping.minOpacity)) + colorMapping.minOpacity;\n }\n return opacity.toString();\n}\nexport function wordWrap(maximumWidth, dataLabel, font) {\n var textCollection = dataLabel.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}\nexport function textWrap(maxWidth, label, font) {\n var text = label;\n var resultText = [];\n var currentLength = 0;\n var totalWidth = measureText(label, font).width;\n var totalLength = label.length;\n if (maxWidth >= totalWidth) {\n resultText.push(label);\n return resultText;\n }\n else {\n for (var i = label.length; i > currentLength; i--) {\n var sliceString = label.slice(currentLength, i);\n totalWidth = measureText(sliceString, font).width;\n if (totalWidth <= maxWidth) {\n resultText.push(sliceString);\n currentLength += sliceString.length;\n if (totalLength === currentLength) {\n return resultText;\n }\n i = totalLength + 1;\n }\n }\n }\n return resultText;\n}\n/**\n * hide function\n */\nexport function hide(maxWidth, maxHeight, text, font) {\n var hideText = text;\n var textSize = measureText(text, font);\n hideText = (textSize.width > maxWidth || textSize.height > maxHeight) ? ' ' : text;\n return hideText;\n}\nexport function orderByArea(a, b) {\n if (a['itemArea'] === b['itemArea']) {\n return 0;\n }\n else if (a['itemArea'] < b['itemArea']) {\n return 1;\n }\n return -1;\n}\nexport function removeClassNames(elements, type, treemap) {\n var opacity;\n var process = true;\n var element;\n var stroke;\n var strokeWidth;\n var fill;\n var options = {};\n for (var j = 0; j < elements.length; j++) {\n element = elements[j].childNodes[0];\n options = treemap.layout.renderItems[element.id.split('_')[6]]['options'];\n applyOptions(element, options);\n elements[j].classList.remove(type);\n j -= 1;\n }\n}\nexport function applyOptions(element, options) {\n element.setAttribute('opacity', options['opacity']);\n element.setAttribute('fill', options['fill']);\n element.setAttribute('stroke', options['border']['color']);\n element.setAttribute('stroke-width', options['border']['width']);\n}\nexport function textFormatter(format, data, treemap) {\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(formatValue(data[key], treemap).toString());\n }\n return format;\n}\nexport function formatValue(value, treemap) {\n var formatValue;\n var formatFunction;\n if (treemap.format && !isNaN(Number(value))) {\n formatFunction = treemap.intl.getNumberFormat({ format: treemap.format, useGrouping: treemap.useGroupingSeparator });\n formatValue = formatFunction(Number(value));\n }\n else {\n formatValue = value;\n }\n return formatValue ? formatValue : '';\n}\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 */\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('treeMapMeasureText');\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 drawSymbol(location, shape, size, url, options, label) {\n var functionName = 'Path';\n var svgRenderer = new SvgRenderer('');\n var temp = renderLegendShape(location, size, shape, options, url);\n var htmlElement = svgRenderer['draw' + temp.functionName](temp.renderOption);\n htmlElement.setAttribute('aria-label', label);\n return htmlElement;\n}\n/** @private */\nexport function renderLegendShape(location, size, shape, options, url) {\n var renderPath;\n var functionName = 'Path';\n var shapeWidth = size.width;\n var shapeHeight = size.height;\n var shapeX = location.x;\n var shapeY = location.y;\n var x = location.x + (-shapeWidth / 2);\n var y = location.y + (-shapeHeight / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': shapeWidth / 2, 'ry': shapeHeight / 2, 'cx': shapeX, 'cy': shapeY });\n break;\n case 'VerticalLine':\n renderPath = 'M' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' + 'L' + ' ' + shapeX + ' '\n + (shapeY + (-shapeHeight / 2));\n merge(options, { 'd': renderPath });\n break;\n case 'Diamond':\n renderPath = 'M' + ' ' + x + ' ' + shapeY + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + shapeY + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + shapeY + ' z';\n merge(options, { 'd': renderPath });\n break;\n case 'Rectangle':\n renderPath = 'M' + ' ' + x + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (shapeY + (-shapeHeight / 2)) + ' z';\n merge(options, { 'd': renderPath });\n break;\n case 'Triangle':\n renderPath = 'M' + ' ' + x + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (shapeY + (shapeHeight / 2)) + ' z';\n merge(options, { 'd': renderPath });\n break;\n case 'InvertedTriangle':\n renderPath = 'M' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY - (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX - (shapeWidth / 2)) + ' ' + (shapeY - (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY - (shapeHeight / 2)) + ' z';\n merge(options, { 'd': renderPath });\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 = (shapeWidth / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (shapeWidth / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n renderPath = 'M' + ' ' + (shapeX + xValue) + ' ' + (shapeY + yValue) + ' ';\n }\n else {\n renderPath = renderPath.concat('L' + ' ' + (shapeX + xValue) + ' ' + (shapeY + yValue) + ' ');\n }\n }\n renderPath = renderPath.concat('Z');\n merge(options, { 'd': renderPath });\n break;\n case 'Star':\n renderPath = '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': renderPath });\n break;\n case 'Cross':\n renderPath = 'M' + ' ' + x + ' ' + shapeY + ' ' + 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + shapeY + ' ' +\n 'M' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' + 'L' + ' ' + shapeX + ' ' +\n (shapeY + (-shapeHeight / 2));\n merge(options, { 'd': renderPath });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': shapeHeight, 'width': shapeWidth, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\nexport function isParentItem(data, item) {\n var isParentItem = false;\n for (var j = 0; j < data.length; j++) {\n if (item['levelOrderName'] === data[j]['levelOrderName']) {\n isParentItem = true;\n break;\n }\n }\n return isParentItem;\n}\n/**\n * Ajax support for treemap\n */\nvar TreeMapAjax = /** @class */ (function () {\n function TreeMapAjax(options, type, async, contentType, sendData) {\n this.dataOptions = options;\n this.type = type || 'GET';\n this.async = async || true;\n this.contentType = contentType;\n this.sendData = sendData;\n }\n return TreeMapAjax;\n}());\nexport { TreeMapAjax };\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, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n * @private\n * @default true\n */\n this.emitError = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n }\n /**\n * Send the request to server.\n * @param {any} data - To send the user data\n * @return {Promise}\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false\n };\n var promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n if (!isNullOrUndefined(_this.onLoad)) {\n _this.httpRequest.onload = _this.onLoad;\n }\n if (!isNullOrUndefined(_this.onProgress)) {\n _this.httpRequest.onprogress = _this.onProgress;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onAbort)) {\n _this.httpRequest.onabort = _this.onAbort;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onError)) {\n _this.httpRequest.onerror = _this.onError;\n }\n //** Upload Events **/\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onUploadProgress)) {\n _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n }\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n _this.beforeSend(eventArgs);\n }\n if (!eventArgs.cancel) {\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n }\n });\n return promise;\n };\n Ajax.prototype.successHandler = function (data) {\n if (this.onSuccess) {\n this.onSuccess(data, this);\n }\n return data;\n };\n Ajax.prototype.failureHandler = function (reason) {\n if (this.onFailure) {\n this.onFailure(this.httpRequest);\n }\n return reason;\n };\n Ajax.prototype.stateChange = function (resolve, reject) {\n var data = this.httpRequest.responseText;\n if (this.dataType && this.dataType.toLowerCase() === 'json') {\n if (data === '') {\n data = undefined;\n }\n else {\n try {\n data = JSON.parse(data);\n }\n catch (error) {\n // no exception handle\n }\n }\n }\n if (this.httpRequest.readyState === 4) {\n //success range should be 200 to 299\n if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n if (this.emitError) {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n }\n else {\n resolve();\n }\n }\n }\n };\n /**\n * To get the response header from XMLHttpRequest\n * @param {string} key Key to search in the response header\n * @returns {string}\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders;\n var header;\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { debounce, extend } from './util';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * @private\n * ```html\n *
\n * \n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} debounce - Specifies at what interval given event listener should be triggered.\n * @return {Function}\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[i],\n listener: listener,\n debounce: debounceListener\n });\n element.addEventListener(event[i], debounceListener);\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[j] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[j], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n * @param {any} element - Specifies the target html element to clear the events\n * @return {void}\n */\n EventHandler.clearEvents = function (element) {\n var eventData;\n var copyData;\n eventData = EventHandler.addOrGetEventData(element);\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[i].name, copyData[i].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n var fn = null;\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","import { isNullOrUndefined, getValue } from './util';\nvar Observer = /** @class */ (function () {\n function Observer(context) {\n this.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n ;\n /**\n * To attach handler for given property in current context.\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {\n this.boundedEvents[property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n * @param {string} eventName - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n 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 };\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n for (i = 0; i < elem.ej2_instances.length; i++) {\n instance = elem.ej2_instances[i];\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n return undefined;\n}\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ \\/]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ \\/]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ \\/]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ \\/]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ \\/]([\\w.]+)/i,\n SAFARI: /(safari)[ \\/]([\\w.]+)/i,\n WEBKIT: /(webkit)[ \\/]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n if (!!Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n * @param {string} event - type of event triggered.\n * @returns {Boolean}\n */\n Browser.getEvent = function (event) {\n // tslint:disable-next-line:no-any\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n },\n cancel: {\n isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n }\n };\n return (Browser.isPointer ? events[event].isPointer :\n (Browser.isTouch ? events[event].isTouch + (!Browser.isDevice ? ' ' + events[event].isDevice : '')\n : events[event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * To get the value based on provided key and regX\n * @param {string} key\n * @param {RegExp} regX\n * @returns {Object}\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = window.browserDetails;\n if ('undefined' === typeof browserDetails[key]) {\n return browserDetails[key] = regX.test(Browser.userAgent);\n }\n return browserDetails[key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties \n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n * @returns BrowserInfo\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return window.browserDetails.isTouch = ('ontouchstart' in window);\n }\n return window.browserDetails.isTouch;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isPointer\", {\n /**\n * Property is to get whether the browser has Pointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchCancelEvent\", {\n /**\n * Property is to cancel the touch end event.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchCancelEvent)) {\n return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n }\n return window.browserDetails.touchCancelEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\n/**\n * Date base common constants and function for date parser and formatter.\n */\nexport var IntlBase;\n(function (IntlBase) {\n // tslint:disable-next-line:max-line-length\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n var defaultFirstDay = 'sun';\n var firstDayMapper = {\n 'sun': 0,\n 'mon': 1,\n 'tue': 2,\n 'wed': 3,\n 'thu': 4,\n 'fri': 5,\n 'sat': 6\n };\n IntlBase.formatRegex = /(^[ncpae]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.currencyFormatRegex = /(^[ca]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n \"days\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"narrow\": {\n \"sun\": \"S\",\n \"mon\": \"M\",\n \"tue\": \"T\",\n \"wed\": \"W\",\n \"thu\": \"T\",\n \"fri\": \"F\",\n \"sat\": \"S\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n }\n },\n \"dayPeriods\": {\n \"format\": {\n \"wide\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n \"1-alt-variant\": \"Common Era\"\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': \"{1} 'at' {0}\",\n 'long': \"{1} 'at' {0}\",\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y',\n },\n }\n }\n },\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 function getWeekData(culture, cldr) {\n var firstDay = defaultFirstDay;\n var mapper = getValue('supplemental.weekData.firstDay', cldr);\n var iCulture = culture;\n if ((/en-/).test(iCulture)) {\n iCulture = iCulture.slice(3);\n }\n iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n if (mapper) {\n firstDay = mapper[iCulture] || defaultFirstDay;\n }\n return firstDayMapper[firstDay];\n }\n IntlBase.getWeekData = getWeekData;\n})(IntlBase || (IntlBase = {}));\n","/**\n * To import utils\n */\nimport { isNullOrUndefined } from './util';\n/**\n * @private\n */\nvar CanvasRenderer = /** @class */ (function () {\n /* End-Properties */\n function CanvasRenderer(rootID) {\n this.rootId = rootID;\n }\n // method to get the attributes value\n /* tslint:disable */\n CanvasRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n /* tslint:enable */\n /**\n * To create a Html5 canvas element\n * @param {BaseAttibutes} options - Options to create canvas\n * @return {HTMLCanvasElement}\n */\n CanvasRenderer.prototype.createCanvas = function (options) {\n var canvasObj = document.createElement('canvas');\n canvasObj.setAttribute('id', this.rootId + '_canvas');\n this.ctx = canvasObj.getContext('2d');\n this.canvasObj = canvasObj;\n this.setCanvasSize(options.width, options.height);\n return this.canvasObj;\n };\n /**\n * To set the width and height for the Html5 canvas element\n * @param {number} width - width of the canvas\n * @param {number} height - height of the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.setCanvasSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width)) {\n this.canvasObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.canvasObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height)) {\n this.canvasObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.canvasObj.setAttribute('height', this.height.toString());\n }\n };\n // To set the values to the attributes\n CanvasRenderer.prototype.setAttributes = function (options) {\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n var dashArray = this.getOptionValue(options, 'stroke-dasharray');\n if (!isNullOrUndefined(dashArray)) {\n var dashArrayString = dashArray.split(',');\n this.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n }\n this.ctx.strokeStyle = this.getOptionValue(options, 'stroke');\n };\n /**\n * To draw a line\n * @param {LineAttributes} options - required options to draw a line on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawLine = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.moveTo(options.x1, options.y1);\n this.ctx.lineTo(options.x2, options.y2);\n this.ctx.stroke();\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a rectangle\n * @param {RectAttributes} options - required options to draw a rectangle on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawRectangle = function (options) {\n var canvasCtx = this.ctx;\n var cornerRadius = options.rx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.globalAlpha = this.getOptionValue(options, 'opacity');\n this.setAttributes(options);\n this.ctx.rect(options.x, options.y, options.width, options.height);\n if (cornerRadius !== null && cornerRadius >= 0) {\n this.drawCornerRadius(options);\n }\n else {\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n this.ctx.fillRect(options.x, options.y, options.width, options.height);\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n // To draw the corner of a rectangle\n CanvasRenderer.prototype.drawCornerRadius = function (options) {\n var cornerRadius = options.rx;\n var x = options.x;\n var y = options.y;\n var width = options.width;\n var height = options.height;\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n if (width < 2 * cornerRadius) {\n cornerRadius = width / 2;\n }\n if (height < 2 * cornerRadius) {\n cornerRadius = height / 2;\n }\n this.ctx.beginPath();\n this.ctx.moveTo(x + width - cornerRadius, y);\n this.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n this.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n this.ctx.arcTo(x, y + height, x, y, cornerRadius);\n this.ctx.arcTo(x, y, x + width, y, cornerRadius);\n this.ctx.closePath();\n this.ctx.fill();\n this.ctx.stroke();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a path on the canvas\n * @param {PathAttributes} options - options needed to draw path\n * @param {Int32Array} canvasTranslate - Array of numbers to translate the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawPath = function (options, canvasTranslate) {\n var path = options.d;\n var dataSplit = path.split(' ');\n var borderWidth = this.getOptionValue(options, 'stroke-width');\n var canvasCtx = this.ctx;\n var flag = true;\n this.ctx.save();\n this.ctx.beginPath();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.globalAlpha = options.opacity ? options.opacity : this.getOptionValue(options, 'fill-opacity');\n this.setAttributes(options);\n for (var i = 0; i < dataSplit.length; i = i + 3) {\n var x1 = parseFloat(dataSplit[i + 1]);\n var y1 = parseFloat(dataSplit[i + 2]);\n switch (dataSplit[i]) {\n case 'M':\n if (!options.innerR && !options.cx) {\n this.ctx.moveTo(x1, y1);\n }\n break;\n case 'L':\n if (!options.innerR) {\n this.ctx.lineTo(x1, y1);\n }\n break;\n case 'C':\n var c1 = parseFloat(dataSplit[i + 3]);\n var c2 = parseFloat(dataSplit[i + 4]);\n var c3 = parseFloat(dataSplit[i + 5]);\n var c4 = parseFloat(dataSplit[i + 6]);\n this.ctx.bezierCurveTo(x1, y1, c1, c2, c3, c4);\n i = i + 4;\n break;\n case 'A':\n if (!options.innerR) {\n if (options.cx) {\n this.ctx.arc(options.cx, options.cy, options.radius, 0, 2 * Math.PI, options.counterClockWise);\n }\n else {\n this.ctx.moveTo(options.x, options.y);\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.lineTo(options.x, options.y);\n }\n }\n else if (flag) {\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.arc(options.x, options.y, options.innerR, options.end, options.start, !options.counterClockWise);\n flag = false;\n }\n i = i + 5;\n break;\n case 'z':\n this.ctx.closePath();\n break;\n }\n }\n if (options.fill !== 'none' && options.fill !== undefined) {\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n }\n if (borderWidth > 0) {\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a text\n * @param {TextAttributes} options - options required to draw text\n * @param {string} label - Specifies the text which has to be drawn on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawText = function (options, label) {\n var fontWeight = this.getOptionValue(options, 'font-weight');\n if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n fontWeight = 'normal';\n }\n var fontSize = this.getOptionValue(options, 'font-size');\n var fontFamily = this.getOptionValue(options, 'font-family');\n var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n var anchor = this.getOptionValue(options, 'text-anchor');\n var opacity = options.opacity !== undefined ? options.opacity : 1;\n if (anchor === 'middle') {\n anchor = 'center';\n }\n this.ctx.save();\n this.ctx.fillStyle = options.fill;\n this.ctx.font = font;\n this.ctx.textAlign = anchor;\n this.ctx.globalAlpha = opacity;\n if (options.baseline) {\n this.ctx.textBaseline = options.baseline;\n }\n var txtlngth = 0;\n this.ctx.translate(options.x + (txtlngth / 2), options.y);\n this.ctx.rotate(options.labelRotation * Math.PI / 180);\n this.ctx.fillText(label, 0, 0);\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw circle on the canvas\n * @param {CircleAttributes} options - required options to draw the circle\n * @return {void}\n */\n CanvasRenderer.prototype.drawCircle = function (options) {\n var canvasCtx = this.ctx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.arc(options.cx, options.cy, options.r, 0, 2 * Math.PI);\n this.ctx.fillStyle = options.fill;\n this.ctx.globalAlpha = options.opacity;\n this.ctx.fill();\n this.setAttributes(options);\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw polyline\n * @param {PolylineAttributes} options - options needed to draw polyline\n * @return {void}\n */\n CanvasRenderer.prototype.drawPolyline = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n var points = options.points.split(' ');\n for (var i = 0; i < points.length - 1; i++) {\n var point = points[i].split(',');\n var x = parseFloat(point[0]);\n var y = parseFloat(point[1]);\n if (i === 0) {\n this.ctx.moveTo(x, y);\n }\n else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an ellipse on the canvas\n * @param {EllipseAttributes} options - options needed to draw ellipse\n * @return {void}\n */\n CanvasRenderer.prototype.drawEllipse = function (options) {\n var canvasCtx = this.ctx;\n var circumference = Math.max(options.rx, options.ry);\n var scaleX = options.rx / circumference;\n var scaleY = options.ry / circumference;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.translate(options.cx, options.cy);\n this.ctx.save();\n this.ctx.scale(scaleX, scaleY);\n this.ctx.arc(0, 0, circumference, 0, 2 * Math.PI, false);\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n this.ctx.restore();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an image\n * @param {ImageAttributes} options - options required to draw an image on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawImage = function (options) {\n this.ctx.save();\n var imageObj = new Image();\n if (!isNullOrUndefined(options.href)) {\n imageObj.src = options.href;\n this.ctx.drawImage(imageObj, options.x, options.y, options.width, options.height);\n }\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To create a linear gradient\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\n */\n CanvasRenderer.prototype.createLinearGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createLinearGradient(0, 0, 0, this.canvasObj.height);\n }\n var color = this.setGradientValues(colors, myGradient);\n return color;\n };\n /**\n * To create a radial gradient\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\n */\n CanvasRenderer.prototype.createRadialGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createRadialGradient(0, 0, 0, 0, 0, this.canvasObj.height);\n }\n var colorName = this.setGradientValues(colors, myGradient);\n return colorName;\n };\n // To set the gradient values\n CanvasRenderer.prototype.setGradientValues = function (colors, myGradient) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n for (var i = 0; i <= colors.length - 1; i++) {\n var color = colors[i].color;\n var newColorStop = (colors[i].colorStop).slice(0, -1);\n var stopColor = parseInt(newColorStop, 10) / 100;\n myGradient.addColorStop(stopColor, color);\n }\n colorName = myGradient.toString();\n }\n else {\n colorName = colors[0].color.toString();\n }\n this.dataUrl = this.canvasObj.toDataURL();\n return colorName;\n };\n /**\n * To set the attributes to the element\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {HTMLElement} element - The element to which the attributes need to be set\n * @return {HTMLElement}\n */\n CanvasRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n var values = Object.keys(options).map(function (key) { return options[key]; });\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], values[i]);\n }\n return element;\n };\n /**\n * To update the values of the canvas element attributes\n * @param {SVGCanvasAttributes} options - Specifies the colors required to create gradient\n * @return {void}\n */\n CanvasRenderer.prototype.updateCanvasAttributes = function (options) {\n this.setElementAttributes(options, this.canvasObj);\n var ctx = this.ctx;\n if (!isNullOrUndefined(this.dataUrl)) {\n var img_1 = new Image;\n img_1.onload = function () {\n ctx.drawImage(img_1, 0, 0);\n };\n img_1.src = this.dataUrl;\n }\n };\n return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n ;\n /**\n * Inject required modules in component library\n * @return {void}\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[i];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n * @return {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n * @param {ModuleDeclaration[]} moduleList\n * @returns {void}\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n * @param {string} name\n * @returns {string}\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n * @param {string} modName\n * @returns {boolean}\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","import { getValue, setValue, merge } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.setProperties(defaultValue, true);\n this.isParentArray = isArray;\n }\n /**\n * Updates the property changes\n * @param {boolean} val\n * @param {string} propName\n * @returns {void}\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n * @param {Object} prop\n * @param {boolean} muteOnChange\n * {void}\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n * @param {string} key\n * @param {Object} newValue\n * @param {Object} oldValue\n * @returns {void}\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue } from '../util';\nvar latnRegex = /^[0-9]*$/;\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object}\n */\n ParserBase.getMainObject = function (obj, cName) {\n return getValue('main.' + cName, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object}\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object}\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n /* tslint:disable no-any */\n if (!res.hasOwnProperty(prop[key])) {\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp}\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n }).join('|');\n return new RegExp(regexStr, 'g');\n };\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n * @param {string} val\n * @returns {string}\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[i] + '|';\n }\n else {\n ret += val[i];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string}\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n * @param {Object} obj\n * @returns {NumericObject}\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n ret.numberParseRegex = new RegExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n * @param {Object} curObj\n * @param {Object} numberSystem\n * @param {boolean} isNumber\n * @returns {NumberMapper}\n */\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n","import { isUndefined, throwError, isNullOrUndefined, extend } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits',\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} object- Specifies the global cldr data collection.\n * @return Function.\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, true);\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode);\n /* tslint:disable no-any */\n dOptions.percentSymbol = dOptions.numberMapper.numberSymbols[percentSign];\n dOptions.minusSymbol = dOptions.numberMapper.numberSymbols[minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n * @param {string} pattern\n * @returns {GroupDetails}\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n * @param {number} val1\n * @param {number} val2\n * @param {boolean} checkbothExist\n * @param {boolean} isFraction\n * @returns {boolean}\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n * @param {number} val\n * @param {string} text\n * @param {boolean} isFraction\n * @returns {void}\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n * @param {number} value\n * @param {base.GenericFormatOptions} fOptions\n * @param {CommonOptions} dOptions\n * @returns {string}\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n * @param {string} val\n * @param {number} level1\n * @param {string} sep\n * @param {string} decimalSymbol\n * @param {number} level2\n * @returns {string}\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n * @param {string} value\n * @param {number} min\n * @returns {string}\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","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';\nimport { createElement } from './dom';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n _this.needsID = false;\n /**\n * This is a instance method to create an element.\n * @private\n */\n _this.createElement = createElement;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n _this.detectFunction = new Function('args', 'var prop = Object.keys(args); if(prop.length){this[prop[0]] = args[prop[0]];}');\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n ;\n /**\n * Destroys the sub modules while destroying the widget\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n }\n this.localObserver.destroy();\n 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 var numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[i];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n var charKey = datePartMatcher[char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c':\n // tslint:disable-next-line\n var weekObject = parser.reverseObject(dependable.dateObject[base.days][standalone][base.monthIndex[len]]);\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n // tslint:disable-next-line\n parseOptions[charKey] = parser.reverseObject(dependable.dateObject[month][standalone][base.monthIndex[len]]);\n /* tslint:disable no-any */\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n parseOptions[charKey] = parser.reverseObject(getValue('dayPeriods.format.wide', dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[charKey] = parser.reverseObject(getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n var iString = str.replace(/\\'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n parseOptions.parserRegex = new RegExp('^' + regexString + '$');\n }\n }\n }\n return function (value) {\n var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n return null;\n }\n 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.abort) {\n if (!isNullOrUndefined(closest(evt.target, this.abort))) {\n return;\n }\n }\n if (this.preventDefault && !isUndefined(evt.changedTouches)) {\n evt.preventDefault();\n }\n this.element.setAttribute('aria-grabbed', 'true');\n var intCoord = this.getCoordinates(evt);\n this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n if (!this.clone) {\n var pos = this.element.getBoundingClientRect();\n this.relativeXPosition = intCoord.pageX - pos.left;\n this.relativeYPosition = intCoord.pageY - pos.top;\n }\n 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 if (isChangeTouch) {\n evt.preventDefault();\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10),\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt);\n var x = this.initialPosition.x - intCordinate.pageX;\n var y = this.initialPosition.y - intCordinate.pageY;\n var distance = Math.sqrt((x * x) + (y * y));\n if (distance >= this.distance) {\n var ele = this.getHelperElement(evt);\n if (!ele || isNullOrUndefined(ele)) {\n return;\n }\n var dragTargetElement = this.helperElement = ele;\n this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n if (this.dragStart) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStart', { event: evt, element: element, target: curTarget });\n }\n if (this.dragArea) {\n this.setDragArea();\n }\n else {\n this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n this.borderWidth = { top: 0, left: 0 };\n }\n pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n if (this.clone && !this.enableTailMode) {\n this.diffX = this.position.left - this.offset.left;\n this.diffY = this.position.top - this.offset.top;\n }\n var posValue = this.getProcessedPositionValue({\n top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px'\n });\n setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n }\n }\n };\n Draggable.prototype.elementInViewport = function (el) {\n this.top = el.offsetTop;\n this.left = el.offsetLeft;\n this.width = el.offsetWidth;\n this.height = el.offsetHeight;\n while (el.offsetParent) {\n el = el.offsetParent;\n this.top += el.offsetTop;\n this.left += el.offsetLeft;\n }\n return (this.top >= window.pageYOffset &&\n this.left >= window.pageXOffset &&\n (this.top + this.height) <= (window.pageYOffset + window.innerHeight) &&\n (this.left + this.width) <= (window.pageXOffset + window.innerWidth));\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.queryPositionInfo) {\n return this.queryPositionInfo(value);\n }\n return value;\n };\n Draggable.prototype.calculateParentPosition = function (ele) {\n if (isNullOrUndefined(ele)) {\n return { left: 0, top: 0 };\n }\n var rect = ele.getBoundingClientRect();\n var style = getComputedStyle(ele);\n return {\n left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n };\n };\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt);\n var docHeight = this.getDocumentWidthHeight('Height');\n if (docHeight < this.position.top) {\n this.position.top = docHeight;\n }\n var docWidth = this.getDocumentWidthHeight('Width');\n if (docWidth < this.position.left) {\n this.position.left = docWidth;\n }\n if (this.drag) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n /* tslint:disable no-any */\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intOver(evt, eleObj.target);\n this.hoverObject = eleObj;\n }\n else if (this.hoverObject) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\n }\n var helperElement = this.droppables[this.scope].helper;\n this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n var tLeft = this.parentClientRect.left;\n var tTop = this.parentClientRect.top;\n var intCoord = this.getCoordinates(evt);\n var pagex = intCoord.pageX;\n var pagey = intCoord.pageY;\n var dLeft = this.position.left - this.diffX;\n var dTop = this.position.top - this.diffY;\n if (this.dragArea) {\n var styles = getComputedStyle(helperElement);\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > dLeft) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right < dLeft + helperWidth) {\n left = this.dragLimit.right - helperWidth;\n }\n else {\n left = dLeft;\n }\n }\n if (this.pageY !== pagey || this.skipDistanceCheck) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n if (this.dragLimit.top > dTop) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom < dTop + helperHeight) {\n top = this.dragLimit.bottom - helperHeight;\n }\n else {\n top = dTop;\n }\n }\n }\n else {\n left = dLeft;\n top = dTop;\n }\n var iTop = tTop + this.borderWidth.top;\n var iLeft = tLeft + this.borderWidth.left;\n var dragValue = this.getProcessedPositionValue({ top: (top - iTop) + 'px', left: (left - iLeft) + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll) {\n this.helperElement.scrollIntoView();\n }\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n Draggable.prototype.getDragPosition = function (dragValue) {\n var temp = extend({}, dragValue);\n if (this.axis) {\n if (this.axis === 'x') {\n delete temp.top;\n }\n else if (this.axis === 'y') {\n delete temp.left;\n }\n }\n return temp;\n };\n Draggable.prototype.getDocumentWidthHeight = function (str) {\n var docBody = document.body;\n var docEle = document.documentElement;\n var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n return returnValue;\n };\n Draggable.prototype.intDragStop = function (evt) {\n 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 __decorate([\n Property(false)\n ], Draggable.prototype, \"enableAutoScroll\", void 0);\n Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n var Draggable_1;\n}(Base));\nexport { Draggable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, Collection, L10n, Browser, Complex, compile, createElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, detach, attributes, prepend, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, append } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { Draggable } from '@syncfusion/ej2-base';\nimport { Popup, PositionData, getZindexPartial } from '../popup/popup';\nimport { Button } from '@syncfusion/ej2-buttons';\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 * Configures the animation properties for both open and close the dialog.\n */\nvar AnimationSettings = /** @class */ (function (_super) {\n __extends(AnimationSettings, _super);\n function AnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Fade')\n ], AnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], AnimationSettings.prototype, \"delay\", void 0);\n return AnimationSettings;\n}(ChildProperty));\nexport { AnimationSettings };\nvar ROOT = 'e-dialog';\nvar RTL = 'e-rtl';\nvar DLG_HEADER_CONTENT = 'e-dlg-header-content';\nvar DLG_HEADER = 'e-dlg-header';\nvar DLG_FOOTER_CONTENT = 'e-footer-content';\nvar MODAL_DLG = 'e-dlg-modal';\nvar DLG_CONTENT = 'e-dlg-content';\nvar DLG_CLOSE_ICON = 'e-icon-dlg-close';\nvar DLG_OVERLAY = 'e-dlg-overlay';\nvar DLG_CONTAINER = 'e-dlg-container';\nvar SCROLL_DISABLED = 'e-scroll-disabled';\nvar DLG_PRIMARY_BUTTON = 'e-primary';\nvar ICON = 'e-icons';\nvar POPUP_ROOT = 'e-popup';\nvar DEVICE = 'e-device';\nvar FULLSCREEN = 'e-dlg-fullscreen';\nvar DLG_CLOSE_ICON_BTN = 'e-dlg-closeicon-btn';\nvar DLG_HIDE = 'e-popup-close';\nvar DLG_SHOW = 'e-popup-open';\nvar DLG_UTIL_DEFAULT_TITLE = 'Information';\nvar DLG_UTIL_ROOT = 'e-scroll-disabled';\nvar DLG_UTIL_ALERT = 'e-alert-dialog';\nvar DLG_UTIL_CONFIRM = 'e-confirm-dialog';\n/**\n * Represents the dialog component that displays the information and get input from the user.\n * Two types of dialog components are `Modal and Modeless (non-modal)` depending on its interaction with parent application.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Dialog = /** @class */ (function (_super) {\n __extends(Dialog, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Dialog(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n if (this.width === '100%') {\n this.element.style.width = '';\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Dialog.prototype.preRender = function () {\n var _this = this;\n this.headerContent = null;\n var classArray = [];\n for (var j = 0; j < this.element.classList.length; j++) {\n if (!isNullOrUndefined(this.element.classList[j].match('e-control')) ||\n !isNullOrUndefined(this.element.classList[j].match(ROOT))) {\n classArray.push(this.element.classList[j]);\n }\n }\n removeClass([this.element], classArray);\n this.clonedEle = this.element.cloneNode(true);\n this.closeIconClickEventHandler = function (event) {\n _this.hide(event);\n };\n this.dlgOverlayClickEventHandler = function (event) {\n _this.trigger('overlayClick', event);\n };\n var localeText = { close: 'Close' };\n this.l10n = new L10n('dialog', localeText, this.locale);\n if (isNullOrUndefined(this.target)) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.target = document.body;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n ;\n /* istanbul ignore next */\n Dialog.prototype.keyDown = function (event) {\n var _this = this;\n if (event.keyCode === 9) {\n if (this.isModal) {\n var buttonObj = void 0;\n if (!isNullOrUndefined(this.btnObj)) {\n buttonObj = this.btnObj[this.btnObj.length - 1];\n }\n if (!isNullOrUndefined(buttonObj) && document.activeElement === buttonObj.element && !event.shiftKey) {\n event.preventDefault();\n this.focusableElements(this.element).focus();\n }\n if (document.activeElement === this.focusableElements(this.element) && event.shiftKey) {\n event.preventDefault();\n if (!isNullOrUndefined(buttonObj)) {\n buttonObj.element.focus();\n }\n }\n }\n }\n var element = document.activeElement;\n var isTagName = (['input', 'textarea'].indexOf(element.tagName.toLowerCase()) > -1);\n var isContentEdit = false;\n if (!isTagName) {\n isContentEdit = element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') === 'true';\n }\n if (event.keyCode === 27 && this.closeOnEscape) {\n this.hide(event);\n }\n if ((event.keyCode === 13 && !event.ctrlKey && element.tagName.toLowerCase() !== 'textarea' &&\n isTagName && !isNullOrUndefined(this.primaryButtonEle)) ||\n (event.keyCode === 13 && event.ctrlKey && (element.tagName.toLowerCase() === 'textarea' ||\n isContentEdit)) && !isNullOrUndefined(this.primaryButtonEle)) {\n var buttonIndex_1;\n var firstPrimary = this.buttons.some(function (data, index) {\n buttonIndex_1 = index;\n var buttonModel = data.buttonModel;\n return !isNullOrUndefined(buttonModel) && buttonModel.isPrimary === true;\n });\n if (firstPrimary && typeof (this.buttons[buttonIndex_1].click) === 'function') {\n setTimeout(function () {\n _this.buttons[buttonIndex_1].click.call(_this, event);\n });\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.initialize = function () {\n if (!isNullOrUndefined(this.target)) {\n this.targetEle = ((typeof this.target) === 'string') ?\n document.querySelector(this.target) : this.target;\n }\n addClass([this.element], ROOT);\n if (Browser.isDevice) {\n addClass([this.element], DEVICE);\n }\n this.setCSSClass();\n this.setMaxHeight();\n };\n /**\n * Initialize the rendering\n * @private\n */\n Dialog.prototype.initRender = function () {\n var _this = this;\n this.initialRender = true;\n attributes(this.element, { role: 'dialog' });\n if (this.zIndex === 1000) {\n this.setzIndex(this.element, false);\n this.calculatezIndex = true;\n }\n else {\n this.calculatezIndex = false;\n }\n this.setTargetContent();\n if (this.header !== '' && !isNullOrUndefined(this.header)) {\n this.setHeader();\n }\n if (this.showCloseIcon) {\n this.renderCloseIcon();\n }\n this.setContent();\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setFooterTemplate();\n }\n else if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n this.setButton();\n }\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n attributes(this.element, { 'aria-modal': (this.isModal ? 'true' : 'false') });\n if (this.isModal) {\n this.setIsModal();\n }\n if (!isNullOrUndefined(this.targetEle)) {\n this.isModal ? this.targetEle.appendChild(this.dlgContainer) : this.targetEle.appendChild(this.element);\n }\n this.popupObj = new Popup(this.element, {\n height: this.height,\n width: this.width,\n zIndex: this.zIndex,\n relateTo: this.target,\n actionOnScroll: 'none',\n open: function (event) {\n _this.focusContent();\n var eventArgs = {\n container: _this.isModal ? _this.dlgContainer : _this.element,\n element: _this.element,\n target: _this.target\n };\n _this.trigger('open', eventArgs);\n },\n close: function (event) {\n if (_this.isModal) {\n addClass([_this.dlgOverlay], 'e-fade');\n }\n _this.unBindEvent(_this.element);\n if (_this.isModal) {\n _this.dlgContainer.style.display = 'none';\n }\n _this.trigger('close', _this.closeArgs);\n if (!isNullOrUndefined(_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 this.initialRender = false;\n };\n Dialog.prototype.setOverlayZindex = function (zIndexValue) {\n var zIndex;\n if (isNullOrUndefined(zIndexValue)) {\n zIndex = parseInt(this.element.style.zIndex, 10) ? parseInt(this.element.style.zIndex, 10) : this.zIndex;\n }\n else {\n zIndex = zIndexValue;\n }\n this.dlgOverlay.style.zIndex = (zIndex - 1).toString();\n this.dlgContainer.style.zIndex = zIndex.toString();\n };\n Dialog.prototype.positionChange = function () {\n if (this.isModal) {\n if (typeof (this.position.X) === 'number' && typeof (this.position.Y) === 'number') {\n this.setPopupPosition();\n }\n else {\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n this.dlgContainer.classList.add('e-dlg-' + this.position.X + '-' + this.position.Y);\n }\n }\n else {\n this.setPopupPosition();\n }\n };\n Dialog.prototype.setPopupPosition = function () {\n this.popupObj.setProperties({\n position: {\n X: this.position.X, Y: this.position.Y\n }\n });\n };\n Dialog.prototype.setAllowDragging = function () {\n var _this = this;\n var handleContent = '.' + DLG_HEADER_CONTENT;\n this.dragObj = new Draggable(this.element, {\n clone: false,\n abort: '.e-dlg-closeicon-btn',\n handle: handleContent,\n dragStart: function (event) {\n _this.trigger('dragStart', event);\n },\n dragStop: function (event) {\n if (_this.isModal) {\n if (!isNullOrUndefined(_this.position)) {\n _this.dlgContainer.classList.remove('e-dlg-' + _this.position.X + '-' + _this.position.Y);\n }\n // Reset the dialog position after drag completion.\n _this.element.style.position = 'relative';\n }\n _this.trigger('dragStop', event);\n },\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 = this.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 this.btnObj[i].element.classList.add('e-flat');\n this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n }\n };\n Dialog.prototype.setContent = function () {\n attributes(this.element, { 'aria-describedby': this.element.id + '_dialog-content' });\n this.contentEle = this.createElement('div', { className: DLG_CONTENT, id: this.element.id + '_dialog-content' });\n if (this.innerContentElement) {\n this.contentEle.appendChild(this.innerContentElement);\n }\n else if (!isNullOrUndefined(this.content) && this.content !== '' || !this.initialRender) {\n if (typeof (this.content) === 'string') {\n this.contentEle.innerHTML = this.content;\n }\n else if (this.content instanceof HTMLElement) {\n this.contentEle.appendChild(this.content);\n }\n else {\n this.setTemplate(this.content, this.contentEle);\n }\n }\n if (!isNullOrUndefined(this.headerContent)) {\n this.element.insertBefore(this.contentEle, this.element.children[1]);\n }\n else {\n this.element.insertBefore(this.contentEle, this.element.children[0]);\n }\n if (this.height === 'auto') {\n this.setMaxHeight();\n }\n };\n Dialog.prototype.setTemplate = function (template, toElement) {\n var templateFn = compile(template);\n var fromElements = [];\n for (var _i = 0, _a = templateFn({}); _i < _a.length; _i++) {\n var item = _a[_i];\n fromElements.push(item);\n }\n append([].slice.call(fromElements), toElement);\n };\n Dialog.prototype.setMaxHeight = function () {\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\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 if (isNullOrUndefined(this.content) || this.content === '') {\n var isContent = this.element.innerHTML.replace(/\\s/g, '') !== '';\n if (this.element.children.length > 0 || isContent) {\n this.innerContentElement = document.createDocumentFragment();\n while (this.element.childNodes.length !== 0) {\n this.innerContentElement.appendChild(this.element.childNodes[0]);\n }\n }\n }\n };\n Dialog.prototype.setHeader = function () {\n if (this.headerEle) {\n this.headerEle.innerHTML = '';\n }\n else {\n this.headerEle = this.createElement('div', { id: this.element.id + '_title', className: DLG_HEADER });\n }\n this.createHeaderContent();\n this.headerContent.appendChild(this.headerEle);\n this.setTemplate(this.header, this.headerEle);\n attributes(this.element, { 'aria-labelledby': this.element.id + '_title' });\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n };\n Dialog.prototype.setFooterTemplate = function () {\n if (this.ftrTemplateContent) {\n this.ftrTemplateContent.innerHTML = '';\n }\n else {\n this.ftrTemplateContent = this.createElement('div', {\n className: DLG_FOOTER_CONTENT\n });\n }\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setTemplate(this.footerTemplate, this.ftrTemplateContent);\n }\n else {\n this.ftrTemplateContent.innerHTML = this.buttonContent.join('');\n }\n this.element.appendChild(this.ftrTemplateContent);\n };\n Dialog.prototype.createHeaderContent = function () {\n if (isNullOrUndefined(this.headerContent)) {\n this.headerContent = this.createElement('div', { className: DLG_HEADER_CONTENT });\n }\n };\n Dialog.prototype.renderCloseIcon = function () {\n this.closeIcon = this.createElement('button', { className: DLG_CLOSE_ICON_BTN, attrs: { type: 'button' } });\n this.closeIconBtnObj = new Button({ cssClass: 'e-flat', iconCss: DLG_CLOSE_ICON + ' ' + ICON });\n this.closeIconTitle();\n if (!isNullOrUndefined(this.headerContent)) {\n prepend([this.closeIcon], this.headerContent);\n }\n else {\n this.createHeaderContent();\n prepend([this.closeIcon], this.headerContent);\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n }\n this.closeIconBtnObj.appendTo(this.closeIcon);\n };\n Dialog.prototype.closeIconTitle = function () {\n this.l10n.setLocale(this.locale);\n var closeIconTitle = this.l10n.getConstant('close');\n this.closeIcon.setAttribute('title', closeIconTitle);\n };\n Dialog.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n };\n Dialog.prototype.setIsModal = function () {\n this.dlgContainer = this.createElement('div', { className: DLG_CONTAINER });\n this.element.classList.remove(DLG_SHOW);\n this.element.parentNode.insertBefore(this.dlgContainer, this.element);\n this.dlgContainer.appendChild(this.element);\n addClass([this.element], MODAL_DLG);\n this.dlgOverlay = this.createElement('div', { className: DLG_OVERLAY });\n this.dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.dlgContainer.appendChild(this.dlgOverlay);\n };\n Dialog.prototype.getValidFocusNode = function (items) {\n var node;\n for (var u = 0; u < items.length; u++) {\n node = items[u];\n if ((node.clientHeight > 0 || (node.tagName.toLowerCase() === 'a' && node.hasAttribute('href'))) && node.tabIndex > -1 &&\n !node.disabled && !this.disableElement(node, '[disabled],[aria-disabled=\"true\"],[type=\"hidden\"]')) {\n return node;\n }\n }\n return node;\n };\n Dialog.prototype.focusableElements = function (content) {\n if (!isNullOrUndefined(content)) {\n var value = 'input,select,textarea,button,a,[contenteditable=\"true\"],[tabindex]';\n var items = content.querySelectorAll(value);\n return this.getValidFocusNode(items);\n }\n return null;\n };\n Dialog.prototype.getAutoFocusNode = function (container) {\n var node = container.querySelector('.' + DLG_CLOSE_ICON_BTN);\n var value = '[autofocus]';\n var items = container.querySelectorAll(value);\n var validNode = this.getValidFocusNode(items);\n if (!isNullOrUndefined(validNode)) {\n node = validNode;\n }\n else {\n validNode = this.focusableElements(this.contentEle);\n if (!isNullOrUndefined(validNode)) {\n return node = validNode;\n }\n else if (!isNullOrUndefined(this.primaryButtonEle)) {\n return this.element.querySelector('.' + DLG_PRIMARY_BUTTON);\n }\n }\n return node;\n };\n Dialog.prototype.disableElement = function (element, t) {\n var elementMatch = element ? element.matches || element.webkitMatchesSelector || element.msMatchesSelector : null;\n if (elementMatch) {\n for (; element; element = element.parentNode) {\n if (element instanceof Element && elementMatch.call(element, t)) {\n /* istanbul ignore next */\n return element;\n }\n }\n }\n return null;\n };\n Dialog.prototype.focusContent = function () {\n var element = this.getAutoFocusNode(this.element);\n var node = !isNullOrUndefined(element) ? element : this.element;\n node.focus();\n this.bindEvent(this.element);\n };\n Dialog.prototype.bindEvent = function (element) {\n EventHandler.add(element, 'keydown', this.keyDown, this);\n };\n Dialog.prototype.unBindEvent = function (element) {\n EventHandler.remove(element, 'keydown', this.keyDown);\n };\n /**\n * Module required function\n * @private\n */\n Dialog.prototype.getModuleName = function () {\n return 'dialog';\n };\n /**\n * Called internally if any of the property value changed\n * @private\n */\n Dialog.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!isNullOrUndefined(this.content) && this.content !== '') {\n if (!isNullOrUndefined(this.contentEle) && this.contentEle.getAttribute('role') !== 'dialog') {\n this.contentEle.innerHTML = '';\n typeof (this.content) === 'string' ?\n this.contentEle.innerHTML = this.content : this.contentEle.appendChild(this.content);\n this.setMaxHeight();\n }\n else {\n this.setContent();\n }\n }\n else if (!isNullOrUndefined(this.contentEle)) {\n detach(this.contentEle);\n this.contentEle = null;\n }\n break;\n case 'header':\n if (this.header === '' || isNullOrUndefined(this.header)) {\n if (this.headerEle) {\n detach(this.headerEle);\n this.headerEle = null;\n }\n }\n else {\n this.setHeader();\n }\n break;\n case 'footerTemplate':\n if (this.footerTemplate === '' || isNullOrUndefined(this.footerTemplate)) {\n if (!this.ftrTemplateContent) {\n return;\n }\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n this.buttons = [{}];\n }\n else {\n this.setFooterTemplate();\n this.buttons = [{}];\n }\n break;\n case 'showCloseIcon':\n if (this.element.getElementsByClassName(DLG_CLOSE_ICON).length > 0) {\n if (!this.showCloseIcon && (this.header === '' || isNullOrUndefined(this.header))) {\n detach(this.headerContent);\n this.headerContent = null;\n }\n else if (!this.showCloseIcon) {\n detach(this.closeIcon);\n }\n }\n else {\n this.renderCloseIcon();\n this.wireEvents();\n }\n break;\n case 'locale':\n if (this.showCloseIcon) {\n this.closeIconTitle();\n }\n break;\n case 'visible':\n this.visible ? this.show() : this.hide();\n break;\n case 'isModal':\n this.updateIsModal();\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'zIndex':\n this.popupObj.zIndex = this.zIndex;\n if (this.isModal) {\n this.setOverlayZindex(this.zIndex);\n }\n this.calculatezIndex = false;\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'buttons':\n if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n if (!isNullOrUndefined(this.ftrTemplateContent)) {\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n }\n this.footerTemplate = '';\n this.setButton();\n }\n break;\n case 'allowDragging':\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n else {\n this.dragObj.destroy();\n }\n break;\n case 'target':\n this.popupObj.relateTo = newProp.target;\n break;\n case 'position':\n if (this.isModal) {\n var positionX = isNullOrUndefined(oldProp.position.X) ? this.position.X : oldProp.position.X;\n var positionY = isNullOrUndefined(oldProp.position.Y) ? this.position.Y : oldProp.position.Y;\n if (this.dlgContainer.classList.contains('e-dlg-' + positionX + '-' + positionY)) {\n this.dlgContainer.classList.remove('e-dlg-' + positionX + '-' + positionY);\n }\n }\n this.positionChange();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n }\n }\n };\n Dialog.prototype.updateIsModal = function () {\n this.element.setAttribute('aria-modal', this.isModal ? 'true' : 'false');\n if (this.isModal) {\n this.setIsModal();\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n if (!isNullOrUndefined(this.targetEle)) {\n this.targetEle.appendChild(this.dlgContainer);\n }\n }\n else {\n removeClass([this.element], MODAL_DLG);\n removeClass([document.body], SCROLL_DISABLED);\n detach(this.dlgOverlay);\n while (this.dlgContainer.firstChild) {\n this.dlgContainer.parentElement.insertBefore(this.dlgContainer.firstChild, this.dlgContainer);\n }\n this.dlgContainer.parentElement.removeChild(this.dlgContainer);\n }\n if (this.visible) {\n this.show();\n }\n this.positionChange();\n };\n Dialog.prototype.setzIndex = function (zIndexElement, setPopupZindex) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.zIndex = getZindexPartial(zIndexElement);\n this.isProtectedOnChange = prevOnChange;\n if (setPopupZindex) {\n this.popupObj.zIndex = this.zIndex;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Dialog.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}\n * @memberof dialog\n */\n Dialog.prototype.destroy = function () {\n if (this.element.classList.contains(ROOT)) {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n var classArray = [\n ROOT, RTL, MODAL_DLG\n ];\n removeClass([this.element, this.element], classArray);\n if (this.popupObj.element.classList.contains(POPUP_ROOT)) {\n this.popupObj.destroy();\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.btnObj)) {\n for (var i = void 0; i < this.btnObj.length; i++) {\n this.btnObj[i].destroy();\n }\n }\n if (this.isModal) {\n detach(this.dlgOverlay);\n this.dlgContainer.parentNode.insertBefore(this.element, this.dlgContainer);\n detach(this.dlgContainer);\n }\n this.element.innerHTML = '';\n while (this.element.attributes.length > 0) {\n this.element.removeAttribute(this.element.attributes[0].name);\n }\n for (var k = 0; k < this.clonedEle.attributes.length; k++) {\n this.element.setAttribute(this.clonedEle.attributes[k].name, this.clonedEle.attributes[k].value);\n }\n }\n };\n /**\n * Binding event to the element while widget creation\n * @hidden\n */\n Dialog.prototype.wireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.add(this.closeIcon, 'click', this.closeIconClickEventHandler, this);\n }\n if (this.isModal) {\n EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n }\n };\n /**\n * Unbinding event to the element while widget destroy\n * @hidden\n */\n Dialog.prototype.unWireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.remove(this.closeIcon, 'click', this.closeIconClickEventHandler);\n }\n if (this.isModal) {\n EventHandler.remove(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler);\n }\n if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n for (var i = 0; i < this.buttons.length; i++) {\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.remove(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click);\n }\n }\n }\n };\n /**\n * Refreshes the dialog's position when the user changes its header and footer height/width dynamically.\n * @return {void}\n */\n Dialog.prototype.refreshPosition = function () {\n this.popupObj.refreshPosition();\n };\n /**\n * Opens the dialog if it is in hidden state.\n * To open the dialog with full screen width, set the parameter to true.\n * @param { boolean } isFullScreen - Enable the fullScreen Dialog.\n * @return {void}\n */\n Dialog.prototype.show = function (isFullScreen) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n if (!this.element.classList.contains(DLG_SHOW) || (!isNullOrUndefined(isFullScreen))) {\n if (!isNullOrUndefined(isFullScreen)) {\n this.fullScreen(isFullScreen);\n }\n var eventArgs = {\n cancel: false,\n element: this.element,\n container: this.isModal ? this.dlgContainer : this.element,\n target: this.target\n };\n this.trigger('beforeOpen', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.storeActiveElement = document.activeElement;\n this.element.tabIndex = -1;\n if (this.isModal && (!isNullOrUndefined(this.dlgOverlay))) {\n this.dlgOverlay.style.display = 'block';\n this.dlgContainer.style.display = 'flex';\n removeClass([this.dlgOverlay], 'e-fade');\n if (!isNullOrUndefined(this.targetEle)) {\n if (this.targetEle === document.body) {\n this.dlgContainer.style.position = 'fixed';\n }\n else {\n this.dlgContainer.style.position = 'absolute';\n }\n this.dlgOverlay.style.position = 'absolute';\n this.element.style.position = 'relative';\n addClass([this.targetEle], SCROLL_DISABLED);\n }\n else {\n addClass([document.body], SCROLL_DISABLED);\n }\n }\n var openAnimation = {\n name: this.animationSettings.effect + 'In',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n var zIndexElement = (this.isModal) ? this.element.parentElement : this.element;\n if (this.calculatezIndex) {\n this.setzIndex(zIndexElement, true);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n if (this.isModal) {\n this.setOverlayZindex(this.zIndex);\n }\n }\n this.animationSettings.effect === 'None' ? this.popupObj.show() : this.popupObj.show(openAnimation);\n this.dialogOpen = true;\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.visible = true;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n /**\n * Closes the dialog if it is in visible state.\n * @return {void}\n */\n Dialog.prototype.hide = function (event) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n var eventArgs = {\n cancel: false,\n isInteraction: event ? true : false,\n element: this.element,\n target: this.target,\n container: this.isModal ? this.dlgContainer : this.element,\n event: event\n };\n this.trigger('beforeClose', eventArgs);\n this.closeArgs = eventArgs;\n if (eventArgs.cancel) {\n return;\n }\n if (this.isModal) {\n !isNullOrUndefined(this.targetEle) ? removeClass([this.targetEle], SCROLL_DISABLED) :\n removeClass([document.body], SCROLL_DISABLED);\n }\n var closeAnimation = {\n name: this.animationSettings.effect + 'Out',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n this.animationSettings.effect === 'None' ? this.popupObj.hide() : this.popupObj.hide(closeAnimation);\n this.dialogOpen = false;\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.visible = false;\n this.isProtectedOnChange = prevOnChange;\n };\n /**\n * Specifies to view the Full screen Dialog.\n * @private\n */\n Dialog.prototype.fullScreen = function (args) {\n var top = this.element.offsetTop;\n var left = this.element.offsetLeft;\n if (args) {\n addClass([this.element], FULLSCREEN);\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\n (this.targetEle.offsetHeight) + 'px' : (window.innerHeight) + 'px';\n this.element.style.display = display;\n addClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && !isNullOrUndefined(this.dragObj)) {\n this.dragObj.destroy();\n }\n }\n else {\n removeClass([this.element], FULLSCREEN);\n removeClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n }\n return args;\n };\n /**\n * Returns the dialog button instances.\n * Based on that, you can dynamically change the button states.\n * @param { number } index - Index of the button.\n * @return {Button}\n */\n Dialog.prototype.getButtons = function (index) {\n if (!isNullOrUndefined(index)) {\n return this.btnObj[index];\n }\n return this.btnObj;\n };\n __decorate([\n Property('')\n ], Dialog.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"showCloseIcon\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"isModal\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"header\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"visible\", void 0);\n __decorate([\n Property('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/**\n * Base for creating Alert and Confirmation Dialog through util method.\n */\nexport var DialogUtility;\n(function (DialogUtility) {\n /**\n * An alert dialog box is used to display warning like messages to the users.\n * ```\n * Eg : DialogUtility.alert('Alert message');\n *\n * ```\n */\n /* istanbul ignore next */\n function alert(args) {\n var dialogComponent;\n var dialogElement = createElement('div', { 'className': DLG_UTIL_ALERT });\n document.body.appendChild(dialogElement);\n var alertDialogObj;\n var okButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n alertDialogObj = createDialog({ content: args,\n position: { X: 'center', Y: 'top' },\n isModal: true, header: DLG_UTIL_DEFAULT_TITLE,\n buttons: okButtonModel }, dialogElement);\n }\n else {\n alertDialogObj = createDialog(alertOptions(args), dialogElement);\n }\n alertDialogObj.close = function () {\n alertDialogObj.destroy();\n if (alertDialogObj.element.classList.contains('e-dlg-modal')) {\n alertDialogObj.element.parentElement.remove();\n alertDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n alertDialogObj.element.remove();\n }\n };\n return alertDialogObj;\n }\n DialogUtility.alert = alert;\n /**\n * A confirm dialog displays a specified message along with ‘OK’ and ‘Cancel’ button.\n * ```\n * Eg : DialogUtility.confirm('Confirm dialog message');\n *\n * ```\n */\n /* istanbul ignore next */\n function confirm(args) {\n var dialogComponent;\n var dialogElement = createElement('div', { 'className': DLG_UTIL_CONFIRM });\n document.body.appendChild(dialogElement);\n var confirmDialogObj;\n var okCancelButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }, {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n confirmDialogObj = createDialog({ position: { X: 'center', Y: 'top' }, content: args, isModal: true,\n header: DLG_UTIL_DEFAULT_TITLE, buttons: okCancelButtonModel\n }, dialogElement);\n }\n else {\n confirmDialogObj = createDialog(confirmOptions(args), dialogElement);\n }\n confirmDialogObj.close = function () {\n confirmDialogObj.destroy();\n if (confirmDialogObj.element.classList.contains('e-dlg-modal')) {\n confirmDialogObj.element.parentElement.remove();\n confirmDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n confirmDialogObj.element.remove();\n }\n };\n return confirmDialogObj;\n }\n DialogUtility.confirm = confirm;\n function createDialog(options, element) {\n var dialogObject = new Dialog(options);\n dialogObject.appendTo(element);\n return dialogObject;\n }\n function alertOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setAlertButtonModel(options, option);\n return options;\n }\n function confirmOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setConfirmButtonModel(options, option);\n return options;\n }\n function formOptions(options, option) {\n options.header = !isNullOrUndefined(option.title) ? option.title : DLG_UTIL_DEFAULT_TITLE;\n options.content = !isNullOrUndefined(option.content) ? option.content : '';\n options.isModal = !isNullOrUndefined(option.isModal) ? option.isModal : true;\n options.showCloseIcon = !isNullOrUndefined(option.showCloseIcon) ? option.showCloseIcon : false;\n options.allowDragging = !isNullOrUndefined(option.isDraggable) ? option.isDraggable : false;\n options.closeOnEscape = !isNullOrUndefined(option.closeOnEscape) ? option.closeOnEscape : false;\n options.position = !isNullOrUndefined(option.position) ? option.position : { X: 'center', Y: 'top' };\n return options;\n }\n function setAlertButtonModel(options, option) {\n var alertButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, alertButtonModel[0]);\n }\n else {\n options.buttons = alertButtonModel;\n }\n return options;\n }\n function setConfirmButtonModel(options, option) {\n var okButtonModel = {\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n };\n var cancelButtonModel = {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n };\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, okButtonModel);\n }\n else {\n options.buttons[0] = okButtonModel;\n }\n if (!isNullOrUndefined(option.cancelButton)) {\n options.buttons[1] = formButtonModel(options.buttons[1], option.cancelButton, cancelButtonModel);\n }\n else {\n options.buttons[1] = cancelButtonModel;\n }\n return options;\n }\n function formButtonModel(buttonModel, option, buttonPropModel) {\n var buttonProps = buttonPropModel;\n if (!isNullOrUndefined(option.text)) {\n buttonProps.buttonModel.content = option.text;\n }\n if (!isNullOrUndefined(option.icon)) {\n buttonProps.buttonModel.iconCss = option.icon;\n }\n if (!isNullOrUndefined(option.cssClass)) {\n buttonProps.buttonModel.cssClass = option.cssClass;\n }\n if (!isNullOrUndefined(option.click)) {\n buttonProps.click = option.click;\n }\n return buttonProps;\n }\n})(DialogUtility || (DialogUtility = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n *
Droppable
\n * \n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n __extends(Droppable, _super);\n function Droppable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseOver = false;\n _this.dragData = {};\n _this.dragStopCalled = false;\n _this.bind();\n return _this;\n }\n Droppable.prototype.bind = function () {\n this.wireEvents();\n };\n Droppable.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 EventHandler.add(_this.element, Browser.touchCancelEvent, _this.cancelEvent, _this);\n }\n };\n _this.moveEvent = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n _this.movedPoint = point;\n _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n var eScrollArgs = {};\n if (_this.isTouchMoved) {\n clearTimeout(_this.timeOutTapHold);\n _this.calcScrollPoints(evt);\n var scrollArg = {\n startEvents: _this.startEventData,\n originalEvent: evt, startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n velocity: _this.getVelocity(point)\n };\n eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n _this.trigger('scroll', eScrollArgs);\n _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n }\n };\n _this.cancelEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n _this.tapCount = 0;\n _this.swipeFn(evt);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.endEvent = function (evt) {\n _this.swipeFn(evt);\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n _this.modeclear();\n };\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = evt;\n if (evt.changedTouches) {\n point = evt.changedTouches[0];\n }\n var diffX = point.clientX - _this.startPoint.clientX;\n var diffY = point.clientY - _this.startPoint.clientY;\n diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n _this.isTouchMoved = diffX > 1 || diffY > 1;\n _this.endPoint = point;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (_this.isTouchMoved) {\n var eSwipeArgs = void 0;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 20));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed \n /**\n * @private\n * @param newProp\n * @param oldProp\n */\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n * @return {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n * @returns {string}\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean}\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n if (this.distanceX > this.distanceY) {\n this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n }\n else {\n this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n }\n };\n Touch.prototype.calcScrollPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n this.hScrollLocked = true;\n }\n else {\n this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n this.vScrollLocked = true;\n }\n };\n Touch.prototype.getVelocity = function (pnt) {\n var newX = pnt.clientX;\n var newY = pnt.clientY;\n var newT = Date.now();\n var xDist = newX - this.startPoint.clientX;\n var yDist = newY - this.startPoint.clientX;\n var interval = newT - this.tStampStart;\n return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n };\n // tslint:disable-next-line:no-any\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n __decorate([\n Event()\n ], Touch.prototype, \"tap\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"tapHold\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"swipe\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"scroll\", void 0);\n __decorate([\n Property(350)\n ], Touch.prototype, \"tapThreshold\", void 0);\n __decorate([\n Property(750)\n ], Touch.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Complex({}, SwipeSettings)\n ], Touch.prototype, \"swipeSettings\", void 0);\n Touch = __decorate([\n NotifyPropertyChanges\n ], Touch);\n return Touch;\n}(Base));\nexport { Touch };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Component } from '@syncfusion/ej2-base';\nimport { addClass, Event, detach, removeClass, rippleEffect, EventHandler } from '@syncfusion/ej2-base';\nimport { getTextNode } from '../common/common';\nvar cssClassName = {\n RTL: 'e-rtl',\n BUTTON: 'e-btn',\n PRIMARY: 'e-primary',\n ICONBTN: 'e-icon-btn'\n};\n/**\n * The Button is a graphical user interface element that triggers an event on its click action. It can contain a text, an image, or both.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Button = /** @class */ (function (_super) {\n __extends(Button, _super);\n /**\n * Constructor for creating the widget\n * @param {ButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function Button(options, element) {\n return _super.call(this, options, element) || this;\n }\n Button.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n Button.prototype.render = function () {\n this.initialize();\n };\n Button.prototype.initialize = function () {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (this.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n if (this.content) {\n this.element.innerHTML = this.content;\n }\n this.setIconCss();\n if (this.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n if (this.disabled) {\n this.controlStatus(this.disabled);\n }\n else {\n this.wireEvents();\n }\n this.removeRippleEffect = rippleEffect(this.element, { selector: '.' + cssClassName.BUTTON });\n };\n Button.prototype.controlStatus = function (disabled) {\n this.element.disabled = disabled;\n };\n Button.prototype.setIconCss = function () {\n if (this.iconCss) {\n var span = this.createElement('span', { className: 'e-btn-icon ' + this.iconCss });\n if (!this.element.textContent.trim()) {\n this.element.classList.add(cssClassName.ICONBTN);\n }\n else {\n span.classList.add('e-icon-' + this.iconPosition.toLowerCase());\n if (this.iconPosition === 'Top' || this.iconPosition === 'Bottom') {\n this.element.classList.add('e-' + this.iconPosition.toLowerCase() + '-icon-btn');\n }\n }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n this.element.insertBefore(span, node);\n }\n else {\n this.element.appendChild(span);\n }\n }\n };\n Button.prototype.wireEvents = function () {\n if (this.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n };\n Button.prototype.unWireEvents = function () {\n if (this.isToggle) {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n }\n };\n Button.prototype.btnClickHandler = function () {\n if (this.element.classList.contains('e-active')) {\n this.element.classList.remove('e-active');\n }\n else {\n this.element.classList.add('e-active');\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Button.prototype.destroy = function () {\n var span;\n var element = this.element;\n _super.prototype.destroy.call(this);\n removeClass([this.element], [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success', 'e-info', 'e-danger',\n 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round', 'e-top-icon-btn', 'e-bottom-icon-btn']);\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 this.removeRippleEffect();\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n Button.prototype.getModuleName = function () {\n return 'btn';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\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 removeClass([this.element], ['e-top-icon-btn', 'e-bottom-icon-btn']);\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.setIconCss();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content':\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n break;\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n __decorate([\n Event()\n ], Button.prototype, \"created\", void 0);\n Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, detach, getUniqueID, isRippleEnabled, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-checkbox-disabled';\nvar FRAME = 'e-frame';\nvar INDETERMINATE = 'e-stop';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLECHECK = 'e-ripple-check';\nvar RIPPLEINDETERMINATE = 'e-ripple-stop';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-checkbox-wrapper';\n/**\n * The CheckBox is a graphical user interface element that allows you to select one or more options from the choices.\n * It contains checked, unchecked, and indeterminate states.\n * ```html\n * \n * \n * ```\n */\nvar CheckBox = /** @class */ (function (_super) {\n __extends(CheckBox, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function CheckBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n return _this;\n }\n CheckBox.prototype.changeState = function (state) {\n var ariaState;\n var rippleSpan;\n var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n if (isRippleEnabled) {\n rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n }\n if (state === 'check') {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLEINDETERMINATE);\n rippleSpan.classList.add(RIPPLECHECK);\n }\n ariaState = 'true';\n this.element.checked = true;\n }\n else if (state === 'uncheck') {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLECHECK, RIPPLEINDETERMINATE]);\n }\n ariaState = 'false';\n this.element.checked = false;\n }\n else {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLECHECK);\n rippleSpan.classList.add(RIPPLEINDETERMINATE);\n }\n ariaState = 'mixed';\n this.element.indeterminate = true;\n }\n this.getWrapper().setAttribute('aria-checked', ariaState);\n };\n CheckBox.prototype.clickHandler = function (event) {\n this.focusOutHandler();\n if (this.indeterminate) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n this.indeterminate = false;\n this.element.indeterminate = false;\n }\n else if (this.checked) {\n this.changeState('uncheck');\n this.checked = false;\n }\n else {\n this.changeState('check');\n this.checked = true;\n }\n var changeEventArgs = { checked: this.element.checked, event: event };\n this.trigger('change', changeEventArgs);\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n CheckBox.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(this.element, wrapper);\n detach(wrapper);\n this.element.checked = false;\n if (this.indeterminate) {\n this.element.indeterminate = false;\n }\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n 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 = this.createElement('div', {\n className: WRAPPER, attrs: { 'role': 'checkbox', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n var frameSpan = this.createElement('span', { className: 'e-icons ' + FRAME });\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n wrapper.appendChild(label);\n label.appendChild(this.element);\n label.appendChild(frameSpan);\n if (isRippleEnabled) {\n var rippleSpan = this.createElement('span', { className: RIPPLE });\n if (this.labelPosition === 'Before') {\n label.appendChild(rippleSpan);\n }\n else {\n label.insertBefore(rippleSpan, frameSpan);\n }\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n CheckBox.prototype.keyDownHandler = function () {\n this.isKeyPressed = true;\n };\n CheckBox.prototype.labelMouseHandler = function (e) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n CheckBox.prototype.mouseDownHandler = function () {\n this.isKeyPressed = false;\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n CheckBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.indeterminate = false;\n this.element.indeterminate = false;\n this.changeState(newProp.checked ? 'check' : 'uncheck');\n break;\n case 'indeterminate':\n if (newProp.indeterminate) {\n this.changeState();\n }\n else {\n this.element.indeterminate = false;\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n 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(this.createElement, 'EJS-CHECKBOX', 'checkbox', element, WRAPPER, 'checkbox');\n this.element = element;\n if (this.element.getAttribute('type') !== 'checkbox') {\n this.element.setAttribute('type', 'checkbox');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n CheckBox.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n CheckBox.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n CheckBox.prototype.setText = function (text) {\n var label = this.getWrapper().getElementsByClassName(LABEL)[0];\n if (label) {\n label.textContent = text;\n }\n else {\n label = this.createElement('span', { className: LABEL, innerHTML: text });\n var labelWrap = this.getWrapper().getElementsByTagName('label')[0];\n if (this.labelPosition === 'Before') {\n labelWrap.insertBefore(label, this.getWrapper().getElementsByClassName(FRAME)[0]);\n }\n else {\n labelWrap.appendChild(label);\n }\n }\n };\n CheckBox.prototype.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 Event()\n ], CheckBox.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"indeterminate\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], CheckBox.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"value\", void 0);\n CheckBox = __decorate([\n NotifyPropertyChanges\n ], CheckBox);\n return CheckBox;\n}(Component));\nexport { CheckBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, rippleEffect, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { addClass, getInstance, getUniqueID, isRippleEnabled, removeClass } from '@syncfusion/ej2-base';\nimport { detach, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-radio-wrapper';\n/**\n * The RadioButton is a graphical user interface element that allows you to select one option from the choices.\n * It contains checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar RadioButton = /** @class */ (function (_super) {\n __extends(RadioButton, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function RadioButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n return _this;\n }\n RadioButton_1 = RadioButton;\n RadioButton.prototype.changeHandler = function (event) {\n this.checked = true;\n this.dataBind();\n var changeEventArgs = { value: this.value, event: event };\n this.trigger('change', changeEventArgs);\n };\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 = this.createElement('div', { className: WRAPPER });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n wrapper.appendChild(this.element);\n wrapper.appendChild(label);\n if (isRippleEnabled) {\n rippleSpan = this.createElement('span', { className: (RIPPLE) });\n label.appendChild(rippleSpan);\n rippleEffect(rippleSpan, {\n duration: 400,\n isCenterRipple: true\n });\n }\n if (this.enableRtl) {\n label.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([label], this.cssClass.split(' '));\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n RadioButton.prototype.keyDownHandler = function () {\n this.isKeyPressed = true;\n };\n RadioButton.prototype.labelRippleHandler = function (e) {\n var ripple = this.getLabel().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, ripple);\n };\n RadioButton.prototype.mouseDownHandler = function () {\n this.isKeyPressed = false;\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n RadioButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var label = this.getLabel();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n if (newProp.checked) {\n this.updateChange(newProp.checked);\n }\n this.element.checked = newProp.checked;\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([label], oldProp.cssClass.split(' '));\n }\n 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(this.createElement, 'EJS-RADIOBUTTON', 'radio', element, WRAPPER, 'radio');\n this.element = element;\n if (this.element.getAttribute('type') !== 'radio') {\n this.element.setAttribute('type', 'radio');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n RadioButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n RadioButton.prototype.setDisabled = function () {\n this.element.disabled = true;\n };\n RadioButton.prototype.setText = function (text) {\n var label = this.getLabel();\n var textLabel = label.getElementsByClassName(LABEL)[0];\n if (textLabel) {\n textLabel.textContent = text;\n }\n else {\n textLabel = this.createElement('span', { className: LABEL, innerHTML: text });\n label.appendChild(textLabel);\n }\n if (this.labelPosition === 'Before') {\n this.getLabel().classList.add('e-right');\n }\n else {\n this.getLabel().classList.remove('e-right');\n }\n };\n RadioButton.prototype.unWireEvents = function () {\n var label = this.getLabel();\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(document, 'keydown', this.keyDownHandler);\n EventHandler.remove(label, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.remove(rippleLabel, 'mousedown', this.labelRippleHandler);\n EventHandler.remove(rippleLabel, 'mouseup', this.labelRippleHandler);\n }\n };\n RadioButton.prototype.wireEvents = function () {\n var label = this.getLabel();\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(document, 'keydown', this.keyDownHandler, this);\n EventHandler.add(label, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.add(rippleLabel, 'mousedown', this.labelRippleHandler, this);\n EventHandler.add(rippleLabel, 'mouseup', this.labelRippleHandler, this);\n }\n };\n __decorate([\n Event()\n ], RadioButton.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RadioButton.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RadioButton.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"value\", void 0);\n RadioButton = RadioButton_1 = __decorate([\n NotifyPropertyChanges\n ], RadioButton);\n return RadioButton;\n 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, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, isRippleEnabled, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { rippleMouseHandler, destroy, preRender } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-switch-disabled';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLE_CHECK = 'e-ripple-check';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-switch-wrapper';\nvar ACTIVE = 'e-switch-active';\n/**\n * The Switch is a graphical user interface element that allows you to toggle between checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar Switch = /** @class */ (function (_super) {\n __extends(Switch, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function Switch(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n _this.isDrag = false;\n return _this;\n }\n Switch.prototype.changeState = function (state) {\n var ariaState;\n var rippleSpan;\n var wrapper = this.getWrapper();\n var bar = wrapper.querySelector('.e-switch-inner');\n var handle = wrapper.querySelector('.e-switch-handle');\n if (isRippleEnabled) {\n rippleSpan = wrapper.getElementsByClassName(RIPPLE)[0];\n }\n if (state) {\n addClass([bar, handle], ACTIVE);\n ariaState = 'true';\n this.element.checked = true;\n this.checked = true;\n if (rippleSpan) {\n addClass([rippleSpan], [RIPPLE_CHECK]);\n }\n }\n else {\n removeClass([bar, handle], ACTIVE);\n ariaState = 'false';\n this.element.checked = false;\n this.checked = false;\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLE_CHECK]);\n }\n }\n wrapper.setAttribute('aria-checked', ariaState);\n };\n Switch.prototype.clickHandler = function (evt) {\n this.isDrag = false;\n this.focusOutHandler();\n this.changeState(!this.checked);\n this.element.focus();\n var changeEventArgs = { checked: this.element.checked, event: evt };\n this.trigger('change', changeEventArgs);\n };\n /**\n * Destroys the Switch widget.\n * @returns void\n */\n Switch.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n destroy(this, this.getWrapper(), this.tagName);\n };\n Switch.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n Switch.prototype.focusOutHandler = function () {\n this.getWrapper().classList.remove('e-focus');\n };\n /**\n * Gets the module name.\n * @private\n */\n Switch.prototype.getModuleName = function () {\n return 'switch';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n Switch.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n Switch.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n Switch.prototype.initialize = function () {\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.changeState(true);\n }\n if (this.disabled) {\n this.setDisabled();\n }\n if (this.onLabel || this.offLabel) {\n this.setLabel(this.onLabel, this.offLabel);\n }\n };\n Switch.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', {\n className: WRAPPER, attrs: { 'role': 'switch', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var switchInner = this.createElement('span', { className: 'e-switch-inner' });\n var onLabel = this.createElement('span', { className: 'e-switch-on' });\n var offLabel = this.createElement('span', { className: 'e-switch-off' });\n var handle = this.createElement('span', { className: 'e-switch-handle' });\n wrapper.appendChild(this.element);\n switchInner.appendChild(onLabel);\n switchInner.appendChild(offLabel);\n wrapper.appendChild(switchInner);\n wrapper.appendChild(handle);\n if (isRippleEnabled) {\n var rippleSpan = this.createElement('span', { className: RIPPLE });\n handle.appendChild(rippleSpan);\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n Switch.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.changeState(newProp.checked);\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'onLabel':\n case 'offLabel':\n this.setLabel(newProp.onLabel, newProp.offLabel);\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n wrapper.classList.remove(oldProp.cssClass);\n }\n wrapper.classList.add(newProp.cssClass);\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n * @private\n */\n Switch.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n preRender(this, 'EJS-SWITCH', WRAPPER, element, this.getModuleName());\n };\n /**\n * Initialize control rendering.\n * @private\n */\n Switch.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n Switch.prototype.rippleHandler = function (e) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n if (e.type === 'mousedown' && e.currentTarget.classList.contains('e-switch-wrapper') && e.which === 1) {\n this.isDrag = true;\n this.isKeyPressed = false;\n }\n };\n Switch.prototype.rippleTouchHandler = function (eventType) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(eventType, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n };\n Switch.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n Switch.prototype.setLabel = function (onText, offText) {\n var wrapper = this.getWrapper();\n if (onText) {\n wrapper.querySelector('.e-switch-on').textContent = onText;\n }\n if (offText) {\n wrapper.querySelector('.e-switch-off').textContent = offText;\n }\n };\n Switch.prototype.switchFocusHandler = function () {\n this.isKeyPressed = true;\n };\n Switch.prototype.switchMouseUp = function (e) {\n var target = e.target;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (e.type === 'touchmove') {\n e.preventDefault();\n }\n if (e.type === 'touchstart') {\n this.isDrag = true;\n this.rippleTouchHandler('mousedown');\n }\n if (this.isDrag) {\n if ((e.type === 'mouseup' && target.className.indexOf('e-switch') < 0) || e.type === 'touchend') {\n this.clickHandler(e);\n this.rippleTouchHandler('mouseup');\n e.preventDefault();\n }\n }\n };\n /**\n * Toggle the Switch component state into checked/unchecked.\n * @returns void\n */\n Switch.prototype.toggle = function () {\n this.clickHandler();\n };\n Switch.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n var handle = wrapper.querySelector('.e-switch-handle');\n EventHandler.add(wrapper, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(document, 'mouseup', this.switchMouseUp, this);\n EventHandler.add(document, 'keydown', this.switchFocusHandler, this);\n EventHandler.add(wrapper, 'mousedown mouseup', this.rippleHandler, this);\n EventHandler.add(wrapper, 'touchstart touchmove touchend', this.switchMouseUp, this);\n };\n Switch.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n var handle = wrapper.querySelector('.e-switch-handle');\n EventHandler.remove(wrapper, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(document, 'mouseup', this.switchMouseUp);\n EventHandler.remove(document, 'keydown', this.switchFocusHandler);\n EventHandler.remove(wrapper, 'mousedown mouseup', this.rippleHandler);\n EventHandler.remove(wrapper, 'touchstart touchmove touchend', this.switchMouseUp);\n };\n __decorate([\n Event()\n ], Switch.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Switch.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], Switch.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Switch.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"onLabel\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"offLabel\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"value\", void 0);\n Switch = __decorate([\n NotifyPropertyChanges\n ], Switch);\n return Switch;\n}(Component));\nexport { Switch };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Internationalization, } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\nimport { Property, Event, isNullOrUndefined } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar PRIMARY = 'e-primary';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n *\n * @private\n */\nvar CalendarBase = /** @class */ (function (_super) {\n __extends(CalendarBase, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n * @param {CalendarModel} options?\n * @param {string|HTMLElement} element?\n */\n function CalendarBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.effect = '';\n _this.keyConfigs = {\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n altUpArrow: 'alt+uparrow',\n spacebar: 'space',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @returns void\n * @private\n */\n CalendarBase.prototype.render = function () {\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.todayDisabled = false;\n this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add(ROOT);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.element.classList.add(DEVICE);\n }\n attributes(this.element, {\n 'data-role': 'calendar'\n });\n }\n else {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(ROOT);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.calendarElement.classList.add(DEVICE);\n }\n attributes(this.calendarElement, {\n 'role': 'calendar'\n });\n }\n this.createHeader();\n this.createContent();\n this.wireEvents();\n };\n CalendarBase.prototype.validateDate = function (value) {\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n if (!isNullOrUndefined(value) && this.min <= this.max && value >= this.min && value <= this.max) {\n this.currentDate = new Date('' + value);\n }\n };\n CalendarBase.prototype.minMaxUpdate = function (value) {\n if (!(+this.min <= +this.max)) {\n this.setProperties({ min: this.min }, true);\n addClass([this.element], OVERLAY);\n }\n else {\n removeClass([this.element], OVERLAY);\n }\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (+this.min <= +this.max && value && +value <= +this.max && +value >= +this.min) {\n this.currentDate = new Date('' + value);\n }\n else {\n if (+this.min <= +this.max && !value && +this.currentDate > +this.max) {\n this.currentDate = new Date('' + this.max);\n }\n else {\n if (+this.currentDate < +this.min) {\n this.currentDate = new Date('' + this.min);\n }\n }\n }\n };\n CalendarBase.prototype.createHeader = function () {\n var ariaPrevAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'previous month'\n };\n var ariaNextAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'next month'\n };\n var ariaTitleAttrs = {\n 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n };\n this.headerElement = this.createElement('div', { className: HEADER });\n var iconContainer = this.createElement('div', { className: ICONCONTAINER });\n this.previousIcon = this.createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n rippleEffect(this.previousIcon, {\n duration: 400,\n selector: '.e-prev',\n isCenterRipple: true\n });\n attributes(this.previousIcon, ariaPrevAttrs);\n this.nextIcon = this.createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n rippleEffect(this.nextIcon, {\n selector: '.e-next',\n duration: 400,\n isCenterRipple: true\n });\n attributes(this.nextIcon, ariaNextAttrs);\n this.headerTitleElement = this.createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(this.createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(this.createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n iconContainer.appendChild(this.previousIcon);\n iconContainer.appendChild(this.nextIcon);\n this.headerElement.appendChild(iconContainer);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.headerElement);\n }\n else {\n this.calendarElement.appendChild(this.headerElement);\n }\n };\n CalendarBase.prototype.createContent = function () {\n this.contentElement = this.createElement('div', { className: CONTENT });\n this.table = this.createElement('table', { attrs: { tabIndex: '0', 'role': 'grid', 'aria-activedescendant': '' } });\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.contentElement);\n }\n else {\n this.calendarElement.appendChild(this.contentElement);\n }\n this.contentElement.appendChild(this.table);\n this.createContentHeader();\n this.createContentBody();\n if (this.showTodayButton) {\n this.createContentFooter();\n }\n };\n CalendarBase.prototype.getCultureValues = function () {\n var culShortNames = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.short', getDefaultDateObject()));\n }\n else {\n cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n return culShortNames;\n };\n CalendarBase.prototype.createContentHeader = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n var daysCount = 6;\n var html = '';\n var shortNames;\n if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: 0 }, true);\n }\n this.tableHeadElement = this.createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '';\n if (this.getModuleName() === 'calendar') {\n addClass([this.element], '' + WEEKNUMBER);\n }\n else {\n addClass([this.calendarElement], '' + WEEKNUMBER);\n }\n }\n shortNames = this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek);\n for (var days = 0; days <= daysCount; days++) {\n html += '' + shortNames[days] + '';\n }\n html = '' + html + '';\n this.tableHeadElement.innerHTML = html;\n this.table.appendChild(this.tableHeadElement);\n };\n CalendarBase.prototype.createContentBody = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n detach(this.element.querySelectorAll('.e-content tbody')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n }\n }\n switch (this.start) {\n case 'Year':\n this.renderYears();\n break;\n case 'Decade':\n this.renderDecades();\n break;\n default:\n this.renderMonths();\n }\n };\n CalendarBase.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n };\n CalendarBase.prototype.createContentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(+this.min);\n var maximum = new Date(+this.max);\n var l10nLocale = { today: 'Today' };\n this.globalize = new Internationalization(this.locale);\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n this.todayElement = this.createElement('button');\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT, PRIMARY, CSS]);\n if ((!(+new Date(minimum.setHours(0, 0, 0, 0)) <= +this.todayDate &&\n +this.todayDate <= +new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n addClass([this.todayElement], DISABLED);\n }\n this.footer = this.createElement('div', { className: FOOTER });\n this.footer.appendChild(this.todayElement);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (!this.todayElement.classList.contains(DISABLED)) {\n EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n }\n }\n };\n CalendarBase.prototype.wireEvents = function () {\n EventHandler.add(this.headerTitleElement, 'click', this.navigateTitle, this);\n if (this.getModuleName() === 'calendar') {\n this.keyboardModule = new KeyboardEvents(this.element, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n };\n CalendarBase.prototype.todayButtonClick = function (value) {\n if (this.showTodayButton) {\n if (this.currentView() === this.depth) {\n this.effect = '';\n }\n else {\n this.effect = 'e-zoomin';\n }\n if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date('' + value));\n }\n else {\n this.navigateTo('Month', new Date('' + value));\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n CalendarBase.prototype.keyActionHandle = function (e, value, multiSelection) {\n var view = this.getViewNumber(this.currentView());\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate;\n if (multiSelection) {\n if (!isNullOrUndefined(focusedDate) && +value === parseInt(focusedDate.getAttribute('id').split('_')[0], 10)) {\n selectedDate = focusedDate;\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n this.KeyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveRight':\n this.KeyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveUp':\n if (view === 0) {\n this.KeyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.KeyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n break;\n case 'moveDown':\n if (view === 0) {\n this.KeyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.KeyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n break;\n case 'select':\n if (e.target === this.todayElement) {\n this.todayButtonClick(value);\n }\n else {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n if (levelRestrict) {\n var d = new Date(parseInt('' + (element).id, 0));\n this.selectDate(e, d, (element));\n }\n else {\n this.contentClick(null, --view, (element), value);\n }\n }\n }\n break;\n case 'controlUp':\n this.title();\n e.preventDefault();\n break;\n case 'controlDown':\n if (!isNullOrUndefined(focusedDate) || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n detach(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.KeyboardNavigate = function (number, currentView, e, max, min) {\n var date = new Date('' + this.currentDate);\n switch (currentView) {\n case 2:\n this.addYears(this.currentDate, number);\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.isMonthYearRange(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 CalendarBase.prototype.preRender = function (value) {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n ;\n CalendarBase.prototype.minMaxDate = function (localDate) {\n var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n if (+currentDate === +minDate || +currentDate === +maxDate) {\n if (+localDate < +this.min) {\n localDate = new Date(+this.min);\n }\n if (+localDate > +this.max) {\n localDate = new Date(+this.max);\n }\n }\n return localDate;\n };\n CalendarBase.prototype.renderMonths = function (e, value) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles = this.renderDays(this.currentDate, e, value);\n this.createContentHeader();\n this.renderTemplate(tdEles, numCells, MONTH, e, value);\n };\n // tslint:disable-next-line:max-func-body-length\n CalendarBase.prototype.renderDays = function (currentDate, e, value, multiSelection, values) {\n var tdEles = [];\n var cellsCount = 42;\n var localDate = new Date('' + currentDate);\n var minMaxDate;\n var numCells = this.weekNumber ? 8 : 7;\n // 8 and 7 denotes the number of columns to be specified.\n var currentMonth = localDate.getMonth();\n this.titleUpdate(currentDate, 'days');\n var d = localDate;\n localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n while (localDate.getDay() !== this.firstDayOfWeek) {\n this.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.createElement('td', { className: CELL });\n var weekAnchor = this.createElement('span');\n if (day % 7 === 0 && this.weekNumber) {\n weekAnchor.textContent = '' + this.getWeek(localDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.dayCell(localDate);\n var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'd' });\n var disabled = (this.min > localDate) || (this.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n if (currentMonth !== localDate.getMonth()) {\n addClass([tdEle], OTHERMONTH);\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.renderDayCellArgs;\n this.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n if (multiSelection) {\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd' }));\n var tempDateString = +new Date(this.globalize.formatDate(values[index], { type: 'date', skeleton: 'yMd' }));\n if (localDateString === tempDateString) {\n values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (value && +value === +argument.date) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.renderDayCellArgs.date === +this.todayDate) {\n this.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n // to set the value as null while setting the disabled date onProperty change.\n // if (args.isDisabled && +this.value === +args.date) {\n // this.setProperties({ value: null }, true);\n // }\n if (multiSelection && !isNullOrUndefined(values) && !otherMnthBool && !disabledCls) {\n for (var tempValue = 0; tempValue < values.length; tempValue++) {\n var localDateString = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'short' });\n var tempDateString = this.globalize.formatDate(values[tempValue], { type: 'date', skeleton: 'short' });\n if (localDateString === tempDateString && this.getDateVal(localDate, values[tempValue])) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (values.length <= 0) {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!otherMnthBool && !disabledCls && this.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n if (date.getMonth() === new Date().getMonth() && date.getDate() === new Date().getDate()) {\n if (date.getFullYear() === new Date().getFullYear()) {\n addClass([tdEle], TODAY);\n }\n }\n tdEles.push(this.renderDayCellArgs.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n CalendarBase.prototype.updateFocus = function (otherMonth, disabled, localDate, tableElement, currentDate) {\n if (currentDate.getDate() === localDate.getDate() && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n else {\n if (currentDate >= this.max && parseInt(tableElement.id, 0) === +this.max && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n if (currentDate <= this.min && parseInt(tableElement.id, 0) === +this.min && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n }\n };\n CalendarBase.prototype.renderYears = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var days;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date('' + this.currentDate);\n var mon = curDate.getMonth();\n var yr = curDate.getFullYear();\n var localDate = curDate;\n var curYrs = localDate.getFullYear();\n var minYr = new Date('' + this.min).getFullYear();\n var minMonth = new Date('' + this.min).getMonth();\n var maxYr = new Date('' + this.max).getFullYear();\n var maxMonth = new Date('' + this.max).getMonth();\n localDate.setMonth(0);\n this.titleUpdate(this.currentDate, 'months');\n var disabled = (this.min > localDate) || (this.max < localDate);\n localDate.setDate(1);\n for (var month = 0; month < 12; ++month) {\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n var localMonth = (value && (value).getMonth() === localDate.getMonth());\n var select = (value && (value).getFullYear() === yr && localMonth);\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'dateTime', skeleton: 'MMM' });\n if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n localDate.setDate(1);\n localDate.setMonth(localDate.getMonth() + 1);\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, YEAR, e, value);\n };\n CalendarBase.prototype.renderDecades = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date('' + this.currentDate);\n localDate.setMonth(0);\n localDate.setDate(1);\n var localYr = localDate.getFullYear();\n var startYr = new Date('' + (localYr - localYr % 10));\n var endYr = new Date('' + (localYr - localYr % 10 + (10 - 1)));\n var startHdrYr = this.globalize.formatDate(startYr, { type: 'dateTime', skeleton: 'y' });\n var endHdrYr = this.globalize.formatDate(endYr, { type: 'dateTime', skeleton: 'y' });\n this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n var startYear = start.getFullYear();\n for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n var year = startYear + rowIterator;\n localDate.setFullYear(year);\n var tdEle = this.dayCell(localDate);\n attributes(tdEle, { 'role': 'gridcell' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'dateTime', skeleton: 'y' });\n if (year < new Date('' + this.min).getFullYear() || year > new Date('' + this.max).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n CalendarBase.prototype.dayCell = function (localDate) {\n var 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 this.createElement('td', attrs);\n };\n CalendarBase.prototype.firstDay = function (date) {\n var collection = this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n if (!collection[i].classList.contains(DISABLED)) {\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.lastDay = function (date, view) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n if (view !== 2) {\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findLastDay(lastDate);\n }\n else {\n return this.findLastDay(this.firstDay(lastDate));\n }\n };\n ;\n CalendarBase.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n CalendarBase.prototype.findLastDay = function (date) {\n var collection = this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = collection.length - 1; i >= 0; i--) {\n if (!collection[i].classList.contains(DISABLED)) {\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.removeTableHeadElement = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n };\n CalendarBase.prototype.renderTemplate = function (elements, count, classNm, e, value) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = this.createElement('tbody');\n this.table.appendChild(this.tableBodyElement);\n removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.contentElement, this.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n trEle = this.createElement('tr', { attrs: { 'role': 'row' } });\n for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n addClass([elements[rowIterator].children[0]], [LINK]);\n rippleEffect(elements[rowIterator].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowIterator]);\n if (this.weekNumber && rowIterator === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.weekNumber) {\n if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n this.iconHandler();\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActiveDescendant();\n };\n CalendarBase.prototype.clickHandler = function (e, value) {\n this.clickEventEmitter(e);\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.contentClick(e, 0, null, value);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null, value);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null, value);\n }\n else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n this.selectDate(e, this.getIdValue(e, null), null);\n }\n else {\n this.contentClick(e, 0, eve, value);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n // Content click event handler required for extended components\n CalendarBase.prototype.clickEventEmitter = function (e) {\n e.preventDefault();\n };\n CalendarBase.prototype.contentClick = function (e, view, element, value) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, element);\n switch (view) {\n case 0:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n detach(this.tableBodyElement);\n this.currentDate = d;\n this.effect = ZOOMIN;\n this.renderMonths(e);\n }\n else {\n 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 CalendarBase.prototype.switchView = function (view, e, multiSelection) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e);\n if (multiSelection && !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0])) {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n * @private\n */\n CalendarBase.prototype.getModuleName = function () {\n return 'calendar';\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n CalendarBase.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n CalendarBase.prototype.onPropertyChanged = function (newProp, oldProp, multiSelection, values) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n if (newProp.enableRtl) {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add('e-rtl');\n }\n else {\n this.calendarElement.classList.add('e-rtl');\n }\n }\n else {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.remove('e-rtl');\n }\n else {\n this.calendarElement.classList.remove('e-rtl');\n }\n }\n break;\n case 'min':\n case 'max':\n prop === 'min' ? this.setProperties({ min: this.checkDateValue(new Date('' + newProp.min)) }, true) :\n this.setProperties({ max: this.checkDateValue(new Date('' + newProp.max)) }, true);\n this.setProperties({ start: this.currentView() }, true);\n detach(this.tableBodyElement);\n this.minMaxUpdate();\n if (multiSelection) {\n this.validateValues(multiSelection, values);\n }\n this.createContentBody();\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n else {\n if (this.todayElement.classList.contains('e-disabled') && (this.footer) && (this.todayElement)) {\n removeClass([this.todayElement], DISABLED);\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n }\n break;\n case 'start':\n case 'weekNumber':\n case 'firstDayOfWeek':\n this.createContentHeader();\n this.createContentBody();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.createContentHeader();\n this.createContentBody();\n this.l10.setLocale(this.locale);\n this.updateFooter();\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.createContentFooter();\n }\n else {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n /**\n * values property updated with considered disabled dates of the calendar.\n */\n CalendarBase.prototype.validateValues = function (multiSelection, values) {\n if (multiSelection && !isNullOrUndefined(values) && values.length > 0) {\n var copyValues = this.copyValues(values);\n for (var skipIndex = 0; skipIndex < copyValues.length; skipIndex++) {\n var tempValue = copyValues[skipIndex];\n var tempValueString = this.globalize.formatDate(tempValue, { type: 'date', skeleton: 'yMd' });\n var minString = this.globalize.formatDate(this.min, { type: 'date', skeleton: 'yMd' });\n var maxString = this.globalize.formatDate(this.max, { type: 'date', skeleton: 'yMd' });\n if (+new Date(tempValueString) < +new Date(minString) || +new Date(tempValueString) > +new Date(maxString)) {\n copyValues.splice(skipIndex, 1);\n skipIndex = -1;\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n };\n CalendarBase.prototype.setValueUpdate = function () {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.createContentBody();\n };\n CalendarBase.prototype.copyValues = function (values) {\n var copyValues = [];\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n copyValues.push(new Date(+values[index]));\n }\n }\n return copyValues;\n };\n CalendarBase.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n 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 CalendarBase.prototype.setActiveDescendant = function () {\n var id;\n var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n var 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 CalendarBase.prototype.iconHandler = function () {\n new Date('' + this.currentDate).setDate(1);\n switch (this.currentView()) {\n case 'Month':\n this.previousIconHandler(this.compareMonth(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareMonth(new Date('' + this.currentDate), this.max) > -1);\n break;\n case 'Year':\n this.previousIconHandler(this.compareYear(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareYear(new Date('' + this.currentDate), this.max) > -1);\n break;\n case 'Decade':\n this.previousIconHandler(this.compareDecade(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareDecade(new Date('' + this.currentDate), this.max) > -1);\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n CalendarBase.prototype.destroy = function () {\n if (this.getModuleName() === 'calendar') {\n removeClass([this.element], [ROOT]);\n }\n else {\n if (this.calendarElement) {\n removeClass([this.element], [ROOT]);\n }\n }\n if (this.getModuleName() === 'calendar') {\n EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);\n if (this.todayElement) {\n EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n }\n this.previousIconHandler(true);\n this.nextIconHandler(true);\n this.keyboardModule.destroy();\n this.element.removeAttribute('data-role');\n }\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n CalendarBase.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n CalendarBase.prototype.getViewNumber = function (stringVal) {\n if (stringVal === 'Month') {\n return 0;\n }\n else if (stringVal === 'Year') {\n return 1;\n }\n else {\n return 2;\n }\n };\n CalendarBase.prototype.navigateTitle = function (e) {\n e.preventDefault();\n this.title(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.previous = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, -10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigatePrevious = function (e) {\n e.preventDefault();\n this.previous();\n this.triggerNavigate(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.next = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, 10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigateNext = function (eve) {\n eve.preventDefault();\n 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 CalendarBase.prototype.navigateTo = function (view, date) {\n if (+date >= +this.min && +date <= +this.max) {\n this.currentDate = date;\n }\n if (+date <= +this.min) {\n this.currentDate = new Date('' + this.min);\n }\n if (+date >= +this.max) {\n this.currentDate = new Date('' + this.max);\n }\n if (this.getModuleName() === 'daterangepicker') {\n this.currentDate = date;\n }\n if ((this.getViewNumber(this.depth) >= this.getViewNumber(view))) {\n if ((this.getViewNumber(this.depth) <= this.getViewNumber(this.start))\n || this.getViewNumber(this.depth) === this.getViewNumber(view)) {\n view = this.depth;\n }\n }\n this.switchView(this.getViewNumber(view));\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n */\n CalendarBase.prototype.currentView = function () {\n if (this.contentElement.classList.contains(YEAR)) {\n return 'Year';\n }\n else if (this.contentElement.classList.contains(DECADE)) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n CalendarBase.prototype.getDateVal = function (date, value) {\n return (!isNullOrUndefined(value) && date.getDate() === (value).getDate()\n && date.getMonth() === (value).getMonth() && date.getFullYear() === (value).getFullYear());\n };\n CalendarBase.prototype.getCultureObjects = function (ld, c) {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.format.short', ld);\n };\n ;\n CalendarBase.prototype.getWeek = function (d) {\n var currentDate = new Date('' + d).valueOf();\n var date = new Date(d.getFullYear(), 0, 1).valueOf();\n var a = (currentDate - date);\n return Math.ceil((((a) / dayMilliSeconds) + new Date(date).getDay() + 1) / 7);\n };\n CalendarBase.prototype.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n CalendarBase.prototype.addMonths = function (date, i) {\n 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 CalendarBase.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 CalendarBase.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var 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 CalendarBase.prototype.selectDate = function (e, date, node, multiSelection, values) {\n var element = node || e.currentTarget;\n if (this.currentView() === 'Decade') {\n this.setDateDecade(this.currentDate, date.getFullYear());\n }\n else if (this.currentView() === 'Year') {\n this.setDateYear(this.currentDate, date);\n }\n else {\n if (multiSelection && !this.checkPresentDate(date, values)) {\n var copyValues = this.copyValues(values);\n if (!isNullOrUndefined(values) && copyValues.length > 0) {\n copyValues.push(new Date('' + date));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: values[values.length - 1] }, true);\n }\n else {\n this.setProperties({ values: [new Date('' + date)] }, true);\n }\n }\n else {\n this.setProperties({ value: new Date('' + date) }, true);\n }\n this.currentDate = new Date('' + date);\n }\n var tableBodyElement = closest(element, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n if (multiSelection) {\n var copyValues = this.copyValues(values);\n var collection = Array.prototype.slice.call(this.tableBodyElement.querySelectorAll('td'));\n for (var index = 0; index < collection.length; index++) {\n var tempElement = tableBodyElement.querySelectorAll('td' + '.' + FOCUSEDDATE)[0];\n var selectedElement = tableBodyElement.querySelectorAll('td' + '.' + SELECTED)[0];\n if (collection[index] === tempElement) {\n removeClass([collection[index]], FOCUSEDDATE);\n }\n if (collection[index] === selectedElement &&\n !this.checkPresentDate(new Date(parseInt(selectedElement.getAttribute('id').split('_')[0], 10)), values)) {\n removeClass([collection[index]], SELECTED);\n }\n }\n if (element.classList.contains(SELECTED)) {\n removeClass([element], SELECTED);\n for (var i = 0; i < copyValues.length; i++) {\n var localDateString = this.globalize.formatDate(date, { type: 'date', skeleton: 'short' });\n var tempDateString = this.globalize.formatDate(copyValues[i], { type: 'date', skeleton: 'short' });\n if (localDateString === tempDateString) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n addClass([element], FOCUSEDDATE);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n addClass([element], SELECTED);\n }\n }\n else {\n addClass([element], SELECTED);\n }\n };\n CalendarBase.prototype.checkPresentDate = function (dates, values) {\n var previousValue = false;\n if (!isNullOrUndefined(values)) {\n for (var checkPrevious = 0; checkPrevious < values.length; checkPrevious++) {\n var localDateString = this.globalize.formatDate(dates, { type: 'date', skeleton: 'short' });\n var tempDateString = this.globalize.formatDate(values[checkPrevious], { type: 'date', skeleton: 'short' });\n if (localDateString === tempDateString) {\n previousValue = true;\n }\n }\n }\n return previousValue;\n };\n CalendarBase.prototype.setAriaActiveDescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n CalendarBase.prototype.previousIconHandler = function (disabled) {\n if (disabled) {\n EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n addClass([this.previousIcon], '' + DISABLED);\n addClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'true');\n }\n else {\n EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n removeClass([this.previousIcon], '' + DISABLED);\n removeClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDayCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n CalendarBase.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n CalendarBase.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n CalendarBase.prototype.nextIconHandler = function (disabled) {\n if (disabled) {\n EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n addClass([this.nextIcon], DISABLED);\n addClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'true');\n }\n else {\n EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n removeClass([this.nextIcon], DISABLED);\n removeClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.compare = function (startDate, endDate, modifier) {\n var start = endDate.getFullYear();\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (startDate.getFullYear() > end) {\n result = 1;\n }\n else if (startDate.getFullYear() < start) {\n result = -1;\n }\n return result;\n };\n CalendarBase.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n CalendarBase.prototype.isMonthYearRange = function (date) {\n return date.getMonth() >= this.min.getMonth()\n && date.getFullYear() >= this.min.getFullYear()\n && date.getMonth() <= this.max.getMonth()\n && date.getFullYear() <= this.max.getFullYear();\n };\n CalendarBase.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n CalendarBase.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n CalendarBase.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n CalendarBase.prototype.addDay = function (date, i, e, max, min) {\n var column = i;\n var value = new Date(+date);\n if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n while (this.findNextTD(new Date(+date), column, max, min)) {\n column += i;\n }\n var rangeValue = new Date(value.setDate(value.getDate() + column));\n column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n }\n date.setDate(date.getDate() + column);\n };\n CalendarBase.prototype.findNextTD = function (date, column, max, min) {\n var value = new Date(date.setDate(date.getDate() + column));\n var collection = [];\n var isDisabled = false;\n if ((!isNullOrUndefined(value) && value.getMonth()) === (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n var tdEles = this.renderDays(value, null);\n collection = tdEles.filter(function (element) {\n return element.classList.contains(DISABLED);\n });\n }\n else {\n collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n }\n if (+value <= (+(max)) && +value >= (+(min))) {\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n if (isDisabled) {\n break;\n }\n }\n }\n }\n return isDisabled;\n };\n CalendarBase.prototype.getMaxDays = function (d) {\n var date;\n var month;\n var tmpDate = new Date('' + d);\n date = 28;\n month = tmpDate.getMonth();\n while (tmpDate.getMonth() === month) {\n ++date;\n tmpDate.setDate(date);\n }\n return date - 1;\n };\n CalendarBase.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date('' + date) }, true);\n };\n ;\n CalendarBase.prototype.setDateYear = function (date, value) {\n date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n if (value.getMonth() !== date.getMonth()) {\n date.setDate(0);\n }\n this.setProperties({ value: new Date('' + date) }, true);\n this.currentDate = new Date('' + value);\n };\n CalendarBase.prototype.compareMonth = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = 1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n result = -1;\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n }\n return result;\n };\n __decorate([\n Property(new Date(1900, 0, 1))\n ], CalendarBase.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], CalendarBase.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"renderDayCell\", void 0);\n CalendarBase = __decorate([\n NotifyPropertyChanges\n ], CalendarBase);\n return CalendarBase;\n}(Component));\nexport { CalendarBase };\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n __extends(Calendar, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n * @param {CalendarModel} options?\n * @param {string|HTMLElement} element?\n */\n function Calendar(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To Initialize the control rendering.\n * @returns void\n * @private\n */\n Calendar.prototype.render = function () {\n if (this.isMultiSelection && typeof this.values === 'object' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var tempValues = [];\n var copyValues = [];\n for (var limit = 0; limit < this.values.length; limit++) {\n if (tempValues.indexOf(+this.values[limit]) === -1) {\n tempValues.push(+this.values[limit]);\n copyValues.push(this.values[limit]);\n }\n }\n this.setProperties({ values: copyValues }, true);\n for (var index = 0; index < this.values.length; index++) {\n if (!this.checkDateValue(this.values[index])) {\n if (typeof (this.values[index]) === 'string' && this.checkDateValue(new Date('' + this.values[index]))) {\n var copyDate = new Date('' + this.values[index]);\n this.values.splice(index, 1);\n this.values.splice(index, 0, copyDate);\n }\n else {\n this.values.splice(index, 1);\n }\n }\n }\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n this.previousValues = this.values.length;\n }\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.render.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n Calendar.prototype.formResetHandler = function () {\n this.value = null;\n };\n Calendar.prototype.validateDate = function () {\n if (typeof this.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date('' + this.value)) }, true); // persist the value property.\n }\n _super.prototype.validateDate.call(this, this.value);\n if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n this.currentDate = new Date('' + this.value);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n };\n Calendar.prototype.minMaxUpdate = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n }\n if (this.getModuleName() !== 'calendar' && !isNullOrUndefined(this.value)) {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.min);\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.max);\n }\n }\n }\n else {\n _super.prototype.minMaxUpdate.call(this, this.value);\n }\n };\n Calendar.prototype.todayButtonClick = function () {\n if (this.showTodayButton) {\n var tempValue = new Date();\n if (this.value) {\n tempValue.setHours(this.value.getHours());\n tempValue.setMinutes(this.value.getMinutes());\n tempValue.setSeconds(this.value.getSeconds());\n tempValue.setMilliseconds(this.value.getMilliseconds());\n }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0, 0);\n }\n this.setProperties({ value: tempValue }, true);\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (!_super.prototype.checkPresentDate.call(this, tempValue, this.values)) {\n copyValues.push(tempValue);\n this.setProperties({ values: copyValues });\n }\n }\n _super.prototype.todayButtonClick.call(this, new Date(+this.value));\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n _super.prototype.keyActionHandle.call(this, e, this.value, this.isMultiSelection);\n };\n /**\n * Initialize the event handler\n * @private\n */\n Calendar.prototype.preRender = function () {\n var _this = this;\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n _super.prototype.preRender.call(this, this.value);\n };\n ;\n Calendar.prototype.createContent = function () {\n this.previousDate = this.value;\n _super.prototype.createContent.call(this);\n };\n Calendar.prototype.minMaxDate = function (localDate) {\n return _super.prototype.minMaxDate.call(this, localDate);\n };\n Calendar.prototype.renderMonths = function (e) {\n _super.prototype.renderMonths.call(this, e, this.value);\n };\n Calendar.prototype.renderDays = function (currentDate, e) {\n var tempDays = _super.prototype.renderDays.call(this, currentDate, e, this.value, this.isMultiSelection, this.values);\n if (this.isMultiSelection) {\n _super.prototype.validateValues.call(this, this.isMultiSelection, this.values);\n }\n return tempDays;\n };\n Calendar.prototype.renderYears = function (e) {\n _super.prototype.renderYears.call(this, e, this.value);\n };\n Calendar.prototype.renderDecades = function (e) {\n _super.prototype.renderDecades.call(this, e, this.value);\n };\n Calendar.prototype.renderTemplate = function (elements, count, classNm, e) {\n _super.prototype.renderTemplate.call(this, elements, count, classNm, e, this.value);\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n var eve = e.currentTarget;\n if (eve.classList.contains(OTHERMONTH)) {\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n copyValues.push(this.getIdValue(e, null));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n else {\n this.setProperties({ value: this.getIdValue(e, null) }, true);\n }\n }\n var storeView = this.currentView();\n _super.prototype.clickHandler.call(this, e, this.value);\n if (this.isMultiSelection && this.currentDate !== this.value &&\n !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0]) && storeView === 'Year') {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n };\n Calendar.prototype.switchView = function (view, e) {\n _super.prototype.switchView.call(this, view, e, this.isMultiSelection);\n };\n /**\n * To get component name\n * @private\n */\n Calendar.prototype.getModuleName = function () {\n _super.prototype.getModuleName.call(this);\n return 'calendar';\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n Calendar.prototype.getPersistData = function () {\n _super.prototype.getPersistData.call(this);\n var keyEntity = ['value', 'values'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: new Date('' + newProp.value) }, true);\n }\n else {\n newProp.value = new Date('' + newProp.value);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.update();\n break;\n case 'values':\n if (typeof newProp.values === 'string' || typeof newProp.values === 'number') {\n this.setProperties({ values: null }, true);\n }\n else {\n var copyValues = this.copyValues(this.values);\n for (var index = 0; index < copyValues.length; index++) {\n var tempDate = copyValues[index];\n if (this.checkDateValue(tempDate) && !_super.prototype.checkPresentDate.call(this, tempDate, copyValues)) {\n copyValues.push(tempDate);\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.values.length > 0) {\n this.setProperties({ value: newProp.values[newProp.values.length - 1] }, true);\n }\n }\n this.validateValues(this.isMultiSelection, this.values);\n this.update();\n break;\n case 'isMultiSelection':\n this.setProperties({ isMultiSelection: newProp.isMultiSelection }, true);\n this.update();\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp, this.isMultiSelection, this.values);\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Calendar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n Calendar.prototype.navigateTo = function (view, date) {\n this.minMaxUpdate();\n _super.prototype.navigateTo.call(this, view, date);\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n */\n Calendar.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /**\n * This method is used to add the single or multiple dates to the values property of the Calendar.\n * @param {Date || Date[]} dates - Specifies the date or dates to be added to the values property of the Calendar.\n * @returns void\n */\n Calendar.prototype.addDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number') {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && (dates).length > 0) {\n var tempDates = dates;\n for (var i = 0; i < tempDates.length; i++) {\n if (this.checkDateValue(tempDates[i]) && !_super.prototype.checkPresentDate.call(this, tempDates[i], copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push(tempDates[i]);\n }\n else {\n copyValues = [new Date(+tempDates[i])];\n }\n }\n }\n }\n else {\n if (this.checkDateValue(dates) && !_super.prototype.checkPresentDate.call(this, dates, copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push((dates));\n }\n else {\n copyValues = [new Date(+dates)];\n }\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.validateValues(this.isMultiSelection, copyValues);\n this.update();\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * This method is used to remove the single or multiple dates from the values property of the Calendar.\n * @param {Date || Date[]} dates - Specifies the date or dates which need to be removed from the values property of the Calendar.\n * @returns void\n */\n Calendar.prototype.removeDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && ((dates).length > 0)) {\n var tempDates = dates;\n for (var index = 0; index < tempDates.length; index++) {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +tempDates[index]) {\n copyValues.splice(i, 1);\n }\n }\n }\n }\n else {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +dates) {\n copyValues.splice(i, 1);\n }\n }\n }\n this.setProperties({ values: copyValues }, false);\n this.update();\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n Calendar.prototype.update = function () {\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.setValueUpdate.call(this);\n };\n Calendar.prototype.selectDate = function (e, date, element) {\n _super.prototype.selectDate.call(this, e, date, element, this.isMultiSelection, this.values);\n if (this.isMultiSelection && !isNullOrUndefined(this.values) && this.values.length > 0) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler(e);\n };\n Calendar.prototype.changeEvent = function (e) {\n this.trigger('change', this.changedArgs);\n this.previousDate = new Date(+this.value);\n };\n Calendar.prototype.triggerChange = function (e) {\n this.changedArgs.event = e || null;\n this.changedArgs.isInteracted = !isNullOrUndefined(e);\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n if (!this.isMultiSelection && +this.value !== Number.NaN && +this.value !== +this.previousDate) {\n this.changeEvent(e);\n }\n else if (!isNullOrUndefined(this.values) && this.previousValues !== this.values.length) {\n this.changeEvent(e);\n this.previousValues = this.values.length;\n }\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Calendar.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(CalendarBase));\nexport { Calendar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, Event, append, compile } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit } from '@syncfusion/ej2-base';\nimport { attributes, closest, removeClass, addClass, remove } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n ], Animation.prototype, \"open\", void 0);\n __decorate([\n Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n ], Animation.prototype, \"close\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n *
Show Tooltip
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the Tooltip Component\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n Tooltip.prototype.initialize = function () {\n this.formatPosition();\n addClass([this.element], ROOT);\n };\n Tooltip.prototype.formatPosition = function () {\n 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 = this.createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n this.tooltipEle.appendChild(tip);\n };\n Tooltip.prototype.setTipClass = function (position) {\n if (position.indexOf('Right') === 0) {\n this.tipClass = TIP_LEFT;\n }\n else if (position.indexOf('Bottom') === 0) {\n this.tipClass = TIP_TOP;\n }\n else if (position.indexOf('Left') === 0) {\n this.tipClass = TIP_RIGHT;\n }\n else {\n this.tipClass = TIP_BOTTOM;\n }\n };\n Tooltip.prototype.renderPopup = function (target) {\n var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n this.popupObj = new Popup(this.tooltipEle, {\n height: this.height,\n width: this.width,\n position: {\n X: elePos.left,\n Y: elePos.top\n },\n enableRtl: this.enableRtl,\n open: this.openPopupHandler.bind(this),\n close: this.closePopupHandler.bind(this)\n });\n };\n Tooltip.prototype.getTooltipPosition = function (target) {\n this.tooltipEle.style.display = 'none';\n var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY);\n this.tooltipEle.style.display = '';\n var offsetPos = this.calculateTooltipOffset(this.position);\n var elePos = this.collisionFlipFit(target, pos.left + offsetPos.left, pos.top + offsetPos.top);\n return elePos;\n };\n Tooltip.prototype.reposition = function (target) {\n var elePos = this.getTooltipPosition(target);\n this.popupObj.position = { X: elePos.left, Y: elePos.top };\n this.popupObj.dataBind();\n };\n Tooltip.prototype.openPopupHandler = function () {\n this.trigger('afterOpen', this.tooltipEventArgs);\n };\n Tooltip.prototype.closePopupHandler = function () {\n this.clear();\n this.trigger('afterClose', this.tooltipEventArgs);\n };\n Tooltip.prototype.calculateTooltipOffset = function (position) {\n var pos = { top: 0, left: 0 };\n var tooltipEleWidth = this.tooltipEle.offsetWidth;\n var tooltipEleHeight = this.tooltipEle.offsetHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n var tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n var tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n var tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n var tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n if (this.mouseTrail) {\n tipAdjust += MOUSE_TRAIL_GAP;\n }\n switch (position) {\n case 'RightTop':\n pos.left += tipWidth + tipAdjust;\n pos.top -= tooltipEleHeight - tipHeightAdjust;\n break;\n case 'RightCenter':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'RightBottom':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tipHeightAdjust);\n break;\n case 'BottomRight':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n case 'BottomCenter':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n case 'BottomLeft':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'LeftBottom':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tipHeightAdjust);\n break;\n case 'LeftCenter':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'LeftTop':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight - tipHeightAdjust);\n break;\n case 'TopLeft':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'TopRight':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n default:\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n }\n pos.left += this.offsetX;\n pos.top += this.offsetY;\n return pos;\n };\n Tooltip.prototype.updateTipPosition = function (position) {\n var selEle = this.tooltipEle.querySelectorAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER);\n var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n removeClass(selEle, removeList);\n this.setTipClass(position);\n addClass(selEle, this.tipClass);\n };\n Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n if (this.showTipPointer === false) {\n return;\n }\n this.updateTipPosition(position);\n var leftValue;\n var topValue;\n var tooltipWidth = this.tooltipEle.clientWidth;\n var tooltipHeight = this.tooltipEle.clientHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n var tipWidth = arrowEle.offsetWidth;\n var tipHeight = arrowEle.offsetHeight;\n if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n if (this.tipClass === TIP_BOTTOM) {\n topValue = '99.9%';\n // Arrow icon aligned -2px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n }\n else {\n topValue = -(tipHeight - 1) + 'px';\n // Arrow icon aligned -6px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n }\n var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n leftValue = POINTER_ADJUST + 'px';\n }\n else {\n leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n }\n }\n else {\n if (this.tipClass === TIP_RIGHT) {\n leftValue = '99.9%';\n // Arrow icon aligned -2px left from ArrowOuterTip div\n arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n }\n else {\n leftValue = -(tipWidth - 1) + 'px';\n // Arrow icon aligned -2px from ArrowOuterTip width\n arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n }\n var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n topValue = POINTER_ADJUST + 'px';\n }\n else {\n topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n }\n }\n arrowEle.style.top = topValue;\n arrowEle.style.left = leftValue;\n };\n Tooltip.prototype.renderContent = function (target) {\n var tooltipContent = this.tooltipEle.querySelector('.' + CONTENT);\n if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n target.setAttribute('data-content', target.getAttribute('title'));\n target.removeAttribute('title');\n }\n if (!isNullOrUndefined(this.content)) {\n tooltipContent.innerHTML = '';\n if (this.content instanceof HTMLElement) {\n tooltipContent.appendChild(this.content);\n }\n else if (typeof this.content === 'string') {\n tooltipContent.innerHTML = this.content;\n }\n else {\n var templateFunction = compile(this.content);\n append(templateFunction(), tooltipContent);\n }\n }\n else {\n if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n tooltipContent.innerHTML = target.getAttribute('data-content');\n }\n }\n };\n Tooltip.prototype.renderCloseIcon = function () {\n if (!this.isSticky) {\n return;\n }\n var tipClose = this.createElement('div', { className: ICON + ' ' + CLOSE });\n this.tooltipEle.appendChild(tipClose);\n EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n };\n Tooltip.prototype.addDescribedBy = function (target, id) {\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n if (describedby.indexOf(id) < 0) {\n describedby.push(id);\n }\n attributes(target, { 'aria-describedby': describedby.join(' ').trim(), 'data-tooltip-id': id });\n };\n Tooltip.prototype.removeDescribedBy = function (target) {\n var id = target.getAttribute('data-tooltip-id');\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n var index = describedby.indexOf(id);\n if (index !== -1) {\n describedby.splice(index, 1);\n }\n target.removeAttribute('data-tooltip-id');\n var orgdescribedby = describedby.join(' ').trim();\n if (orgdescribedby) {\n target.setAttribute('aria-describedby', orgdescribedby);\n }\n else {\n target.removeAttribute('aria-describedby');\n }\n };\n Tooltip.prototype.tapHoldHandler = function (evt) {\n clearTimeout(this.autoCloseTimer);\n this.targetHover(evt.originalEvent);\n };\n Tooltip.prototype.touchEndHandler = function (e) {\n var _this = this;\n if (this.isSticky) {\n return;\n }\n var close = function () {\n _this.close();\n };\n this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n };\n Tooltip.prototype.targetClick = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n if (target.getAttribute('data-tooltip-id') === null) {\n this.targetHover(e);\n }\n else if (!this.isSticky) {\n this.hideTooltip(this.animation.close, e, target);\n }\n };\n Tooltip.prototype.targetHover = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target) || target.getAttribute('data-tooltip-id') !== null) {\n return;\n }\n var targetList = [].slice.call(document.querySelectorAll('[data-tooltip-id= ' + this.ctrlId + '_content]'));\n for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n var target_1 = targetList_1[_i];\n this.restoreElement(target_1);\n }\n this.showTooltip(target, this.animation.open, e);\n this.wireMouseEvents(e, target);\n };\n Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n var _this = this;\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeRender', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n this.isHidden = false;\n if (isNullOrUndefined(this.tooltipEle)) {\n this.ctrlId = this.element.getAttribute('id') ? getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n this.tooltipEle = this.createElement('div', {\n className: TOOLTIP_WRAP + ' ' + POPUP_ROOT, attrs: {\n role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n }, styles: 'width:' + formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n });\n if (this.cssClass) {\n addClass([this.tooltipEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n addClass([this.tooltipEle], DEVICE);\n }\n if (this.width !== 'auto') {\n this.tooltipEle.style.maxWidth = formatUnit(this.width);\n }\n this.tooltipEle.appendChild(this.createElement('div', { className: CONTENT }));\n document.body.appendChild(this.tooltipEle);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n addClass([this.tooltipEle], POPUP_OPEN);\n if (this.showTipPointer) {\n this.renderArrow();\n }\n this.renderCloseIcon();\n this.renderPopup(target);\n }\n else {\n this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n PopupAnimation.stop(this.tooltipEle);\n this.reposition(target);\n }\n removeClass([this.tooltipEle], POPUP_OPEN);\n addClass([this.tooltipEle], POPUP_CLOSE);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeOpen', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n var openAnimation = {\n name: showAnimation.effect, duration: showAnimation.duration, delay: showAnimation.delay, timingFunction: 'easeOut'\n };\n if (showAnimation.effect === 'None') {\n openAnimation = undefined;\n }\n if (this.openDelay > 0) {\n var show = function () {\n if (_this.popupObj) {\n _this.popupObj.show(openAnimation, target);\n }\n };\n this.showTimer = setTimeout(show, this.openDelay);\n }\n else {\n this.popupObj.show(openAnimation, target);\n }\n };\n Tooltip.prototype.checkCollision = function (target, x, y) {\n var elePos = {\n left: x, top: y, position: this.position,\n horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n };\n var affectedPos = isCollide(this.tooltipEle, (this.target ? this.element : null), x, y);\n if (affectedPos.length > 0) {\n elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n this.tooltipPositionX;\n elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n this.tooltipPositionY;\n }\n return elePos;\n };\n Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n var elePos = this.checkCollision(target, x, y);\n var newpos = elePos.position;\n if (this.tooltipPositionY !== elePos.vertical) {\n newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n }\n if (this.tooltipPositionX !== elePos.horizontal) {\n if (newpos.indexOf('Left') === 0) {\n elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Left');\n }\n if (newpos.indexOf('Right') === 0) {\n elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Right');\n }\n elePos.horizontal = this.tooltipPositionX;\n }\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null,\n element: this.tooltipEle, collidedPosition: newpos\n };\n this.trigger('beforeCollision', this.tooltipEventArgs);\n if (elePos.position !== newpos) {\n var pos = calculatePosition(target, this.tooltipPositionX, elePos.vertical);\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n var offsetPos = this.calculateTooltipOffset(newpos);\n elePos.position = newpos;\n elePos.left = pos.left + offsetPos.left;\n elePos.top = pos.top + offsetPos.top;\n }\n else {\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n }\n var eleOffset = { left: elePos.left, top: elePos.top };\n var left = fit(this.tooltipEle, (this.target ? this.element : null), { X: true, Y: false }, eleOffset).left;\n if (this.showTipPointer && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowleft = parseInt(arrowEle.style.left, 10) - (left - elePos.left);\n if (arrowleft < 0) {\n arrowleft = 0;\n }\n else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n }\n arrowEle.style.left = arrowleft.toString() + 'px';\n }\n eleOffset.left = left;\n return eleOffset;\n };\n Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n var _this = this;\n var target;\n if (e) {\n target = this.target ? (targetElement || e.target) : this.element;\n this.tooltipEventArgs = {\n type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle\n };\n }\n else {\n target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null, element: this.tooltipEle\n };\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n this.trigger('beforeClose', this.tooltipEventArgs);\n if (!this.tooltipEventArgs.cancel) {\n this.restoreElement(target);\n this.isHidden = true;\n var closeAnimation_1 = {\n name: hideAnimation.effect, duration: hideAnimation.duration, delay: hideAnimation.delay, timingFunction: 'easeIn'\n };\n if (hideAnimation.effect === 'None') {\n closeAnimation_1 = undefined;\n }\n if (this.closeDelay > 0) {\n var hide = function () {\n if (_this.popupObj) {\n _this.popupObj.hide(closeAnimation_1);\n }\n };\n this.hideTimer = setTimeout(hide, this.closeDelay);\n }\n else {\n this.popupObj.hide(closeAnimation_1);\n }\n }\n else {\n this.isHidden = false;\n }\n };\n Tooltip.prototype.restoreElement = function (target) {\n this.unwireMouseEvents(target);\n if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n target.setAttribute('title', target.getAttribute('data-content'));\n target.removeAttribute('data-content');\n }\n this.removeDescribedBy(target);\n };\n Tooltip.prototype.clear = function () {\n if (this.tooltipEle) {\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n }\n if (this.isHidden) {\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n }\n };\n Tooltip.prototype.onMouseOut = function (e) {\n this.hideTooltip(this.animation.close, e);\n };\n Tooltip.prototype.onStickyClose = function (e) {\n this.close();\n };\n Tooltip.prototype.onMouseMove = function (event) {\n var eventPageX = 0;\n var eventPageY = 0;\n if (event.type.indexOf('touch') > -1) {\n event.preventDefault();\n eventPageX = event.touches[0].pageX;\n eventPageY = event.touches[0].pageY;\n }\n else {\n eventPageX = event.pageX;\n eventPageY = event.pageY;\n }\n PopupAnimation.stop(this.tooltipEle);\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n var pos = this.calculateTooltipOffset(this.position);\n var x = eventPageX + pos.left + this.offsetX;\n var y = eventPageY + pos.top + this.offsetY;\n var elePos = this.checkCollision(event.target, x, y);\n if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n elePos.position = newpos;\n this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n var colpos = this.calculateTooltipOffset(elePos.position);\n elePos.left = eventPageX + colpos.left - this.offsetX;\n elePos.top = eventPageY + colpos.top - this.offsetY;\n }\n this.tooltipEle.style.left = elePos.left + 'px';\n this.tooltipEle.style.top = elePos.top + 'px';\n };\n Tooltip.prototype.keyDown = function (event) {\n if (this.tooltipEle && event.keyCode === 27) {\n this.close();\n }\n };\n Tooltip.prototype.touchEnd = function (e) {\n if (this.tooltipEle && closest(e.target, '.' + ROOT) === null) {\n this.close();\n }\n };\n Tooltip.prototype.scrollHandler = function (e) {\n if (this.tooltipEle) {\n this.close();\n }\n };\n /**\n * Core method that initializes the control rendering.\n * @private\n */\n Tooltip.prototype.render = function () {\n this.initialize();\n this.wireEvents(this.opensOn);\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Tooltip.prototype.preRender = function () {\n this.tipClass = TIP_BOTTOM;\n this.tooltipPositionX = 'Center';\n this.tooltipPositionY = 'Top';\n this.isHidden = true;\n };\n /**\n * Binding events to the Tooltip element.\n * @hidden\n */\n Tooltip.prototype.wireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n var opensOn = triggerList_1[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.wireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n this.touchModule = new Touch(this.element, {\n tapHoldThreshold: TAPHOLD_THRESHOLD,\n tapHold: this.tapHoldHandler.bind(this)\n });\n EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n }\n else {\n EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n }\n }\n }\n EventHandler.add(document, 'touchend', this.touchEnd, this);\n EventHandler.add(document, 'scroll', this.scrollHandler, this);\n EventHandler.add(document, 'keydown', this.keyDown, this);\n };\n Tooltip.prototype.getTriggerList = function (trigger) {\n if (trigger === 'Auto') {\n trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n }\n return trigger.split(' ');\n };\n Tooltip.prototype.wireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n var target = targetList_2[_i];\n EventHandler.add(target, 'focus', this.targetHover, this);\n }\n }\n else {\n EventHandler.add(this.element, 'focus', this.targetHover, this);\n }\n };\n Tooltip.prototype.wireMouseEvents = function (e, target) {\n if (this.tooltipEle) {\n if (!this.isSticky) {\n if (e.type === 'focus') {\n EventHandler.add(target, 'blur', this.onMouseOut, this);\n }\n if (e.type === 'mouseover') {\n EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n }\n }\n if (this.mouseTrail) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n }\n }\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n Tooltip.prototype.unwireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n var opensOn = triggerList_2[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.unwireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n if (this.touchModule) {\n this.touchModule.destroy();\n }\n EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n }\n else {\n EventHandler.remove(this.element, 'mouseover', this.targetHover);\n }\n }\n }\n EventHandler.remove(document, 'touchend', this.touchEnd);\n EventHandler.remove(document, 'scroll', this.scrollHandler);\n EventHandler.remove(document, 'keydown', this.keyDown);\n };\n Tooltip.prototype.unwireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n var target = targetList_3[_i];\n EventHandler.remove(target, 'focus', this.targetHover);\n }\n }\n else {\n EventHandler.remove(this.element, 'focus', this.targetHover);\n }\n };\n Tooltip.prototype.unwireMouseEvents = function (target) {\n if (!this.isSticky) {\n var triggerList = this.getTriggerList(this.opensOn);\n for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n var opensOn = triggerList_3[_i];\n if (opensOn === 'Focus') {\n EventHandler.remove(target, 'blur', this.onMouseOut);\n }\n if (opensOn === 'Hover' && !Browser.isDevice) {\n EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n }\n }\n }\n if (this.mouseTrail) {\n EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n }\n };\n Tooltip.prototype.findTarget = function () {\n var target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n return target;\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n var targetElement = this.findTarget();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.width = formatUnit(newProp.width);\n this.reposition(targetElement);\n }\n break;\n case 'height':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\n this.reposition(targetElement);\n }\n break;\n case 'content':\n if (this.tooltipEle) {\n this.renderContent();\n }\n break;\n case 'opensOn':\n this.unwireEvents(oldProp.opensOn);\n this.wireEvents(newProp.opensOn);\n break;\n case 'position':\n this.formatPosition();\n if (this.tooltipEle && targetElement) {\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n this.reposition(targetElement);\n }\n break;\n case 'tipPointerPosition':\n if (this.tooltipEle && targetElement) {\n this.reposition(targetElement);\n }\n break;\n case 'offsetX':\n if (this.tooltipEle) {\n var x = newProp.offsetX - oldProp.offsetX;\n this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n }\n break;\n case 'offsetY':\n if (this.tooltipEle) {\n var y = newProp.offsetY - oldProp.offsetY;\n this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n }\n break;\n case 'cssClass':\n if (this.tooltipEle) {\n if (oldProp.cssClass) {\n removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.tooltipEle], newProp.cssClass.split(' '));\n }\n }\n break;\n case 'enableRtl':\n if (this.tooltipEle) {\n if (this.enableRtl) {\n addClass([this.tooltipEle], RTL);\n }\n else {\n removeClass([this.tooltipEle], RTL);\n }\n }\n break;\n }\n }\n };\n /**\n * It is used to show the Tooltip on the specified target with specific animation settings.\n * @param element Target element where the Tooltip is to be displayed.\n * @param animation Sets the specific animation, while showing the Tooltip on the screen.\n * @return {void}\n */\n Tooltip.prototype.open = function (element, animation) {\n if (animation === void 0) { animation = this.animation.open; }\n if (element.style.display === 'none') {\n return;\n }\n this.showTooltip(element, animation);\n };\n /**\n * It is used to hide the Tooltip with specific animation effect.\n * @param animation Sets the specific animation when hiding Tooltip from the screen.\n * @return {void}\n */\n Tooltip.prototype.close = function (animation) {\n if (animation === void 0) { animation = this.animation.close; }\n this.hideTooltip(animation);\n };\n /**\n * It is used to refresh the Tooltip content and its position.\n * @param target Target element where the Tooltip content or position needs to be refreshed.\n * @return {void}\n */\n Tooltip.prototype.refresh = function (target) {\n if (this.tooltipEle) {\n this.renderContent(target);\n }\n if (this.popupObj && target) {\n this.reposition(target);\n }\n };\n /**\n * It is used to destroy the Tooltip component.\n * @method destroy\n * @return {void}\n * @memberof Tooltip\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], ROOT);\n this.unwireEvents(this.opensOn);\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n };\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"target\", void 0);\n __decorate([\n Property('TopCenter')\n ], Tooltip.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetY\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"opensOn\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"mouseTrail\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isSticky\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Tooltip.prototype, \"animation\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"openDelay\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"closeDelay\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeCollision\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"destroyed\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","import { createElement, attributes, addClass, removeClass, detach, classList, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n * @param args\n */\n function createInput(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group')) {\n parent.classList.remove('e-input-focus');\n }\n });\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) && args.properties.showClearButton) {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons)) {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n inputObject = setPropertyValue(args, inputObject);\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if (parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputElement;\n var floatLinelement;\n var floatLabelElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerHTML = args.element.placeholder;\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerHTML = args.properties.placeholder;\n }\n if (!floatLabelElement.innerHTML) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function getParentNode(element) {\n var parentNode = element.parentNode;\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n function wireClearBtnEvents(element, button, container) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('blur', function (event) {\n setTimeout(function () { addClass([button], CLASSNAMES.CLEARICONHIDE); }, 200);\n });\n }\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n * @param value - Specify the value of the input element.\n * @param element - The element on which the specified value is updated.\n * @param floatLabelType - Specify the float label type of the input element.\n * @param clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (element.value && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n * @param cssClass - Css class names which are needed to add.\n * @param elements - The elements which are needed to add / remove classes.\n * @param oldClass - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass);\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, inputContainer) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n inputObject.clearButton.remove();\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n * @param attrs\n * - Array of attributes which are need to removed from the element.\n * @param element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n * @param attrs\n * - Array of attributes which is added to element.\n * @param element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n }\n else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton) {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type, customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n if (isNullOrUndefined(iconEle)) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n container.insertBefore(input, iconEle);\n container.insertBefore(floatLine, iconEle);\n container.insertBefore(floatText, iconEle);\n }\n }\n }\n Input.addFloating = addFloating;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n * @param isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param inputObject\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[i].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[index].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _onMouseDownRipple() {\n var ele = this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n var ele = this;\n setTimeout(function () { ele.classList.remove('e-input-btn-ripple'); }, 500);\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n * @param iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n container.appendChild(button);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n})(Input || (Input = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n function NumericTextBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT]);\n this.angularTagName = null;\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off', 'aria-live': 'assertive' });\n var localeText = { incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: '' };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.checkAttributes();\n this.prevValue = this.value;\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n if (!isNullOrUndefined(this.width)) {\n setStyleAttribute(this.container, { 'width': formatUnit(this.width) });\n }\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ? null : this.strictMode ? this.trimValue(this.value) : this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n }\n };\n NumericTextBox.prototype.checkAttributes = function () {\n var attributes = ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = this.element.getAttribute(prop) === 'disabled' ||\n this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'readonly':\n var readonly = this.element.getAttribute(prop) === 'readonly'\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'hidden', 'validateHidden': 'true' } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n attributes(this.hiddenInput, { 'name': this.inputName });\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n attributes(this.element, { 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString() });\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide'))) {\n this.clear(e);\n }\n };\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n if (this.prevValue !== this.value) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var ignoreKeyCode = void 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function (event) {\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n };\n ;\n NumericTextBox.prototype.inputHandler = function (event) {\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n };\n ;\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n ;\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n ;\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var valueText = value.toString();\n var stepText = step.toString();\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n ;\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n ;\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = void 0;\n var decimalPart = value.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n ;\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = value;\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n ;\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals;\n var currentValue = this.value;\n var decimalPart = currentValue.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n ;\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n ;\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n ;\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n return true;\n }\n };\n ;\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n ;\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusIn = function (event) {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n ;\n NumericTextBox.prototype.focusOut = function (event) {\n var _this = this;\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n };\n ;\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () { _this.isCalled = true; _this.action(action, event); }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target = document.elementFromPoint(event.clientX, event.clientY);\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n * @method destroy\n * @return {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n this.container.parentElement.appendChild(this.cloneElement);\n detach(this.container);\n _super.prototype.destroy.call(this);\n };\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var elementVal;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.container, { 'width': formatUnit(newProp.width) });\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.container], oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.updateValue(newProp.value);\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n break;\n case 'currencyCode':\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules \n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n break;\n case 'equalto':\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n ruleCon[ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[name]) {\n return;\n }\n var rules = Object.keys(this.rules[name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[name][rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n this.optionalValidationStatus(name, eventArgs);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Update the optional validation status\n FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n refer.status = '';\n this.hideMessage(name);\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[name][rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[name][rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=' + name + ']:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[rule](args);\n }\n };\n // Return default error message or custom error message \n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] : 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 } from '@syncfusion/ej2-base';\nimport { removeClass } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nimport { regularExpressions, createMask, applyMask, wireEvents, unwireEvents, unstrippedValue, strippedValue } from '../base/index';\nimport { setMaskValue, setElementValue, bindClearEvent } from '../base/index';\nimport { maskInputBlurHandler } from '../base/mask-base';\nvar ROOT = 'e-widget e-control-wrapper e-mask';\nvar INPUT = 'e-input';\nvar COMPONENT = 'e-maskedtextbox';\nvar CONTROL = 'e-control';\n/**\n * The MaskedTextBox allows the user to enter the valid input only based on the provided mask.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MaskedTextBox = /** @class */ (function (_super) {\n __extends(MaskedTextBox, _super);\n function MaskedTextBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Gets the component name\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\n * @private\n */\n MaskedTextBox.prototype.preRender = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.regExpCollec = regularExpressions;\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n this.changeEventArgs = {};\n this.focusEventArgs = {};\n this.maskKeyPress = false;\n this.isFocus = false;\n this.isInitial = false;\n this.isIosInvalid = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT]);\n this.angularTagName = null;\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n for (var i = 0; i < this.element.attributes.length; i++) {\n input.setAttribute(this.element.attributes[i].nodeName, this.element.attributes[i].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-maskedtextbox');\n this.element.classList.add('e-mask-container');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initializes the component rendering.\n * @private\n */\n MaskedTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n if (this.floatLabelType === 'Never') {\n addClass([this.element], INPUT);\n }\n this.createWrapper();\n if (this.element.name === '') {\n this.element.setAttribute('name', this.element.id);\n }\n this.isInitial = true;\n this.resetMaskedTextBox();\n this.isInitial = false;\n this.setMaskPlaceholder(true, false);\n this.setWidth(this.width);\n this.preEleVal = this.element.value;\n }\n };\n MaskedTextBox.prototype.resetMaskedTextBox = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n if (this.promptChar.length > 1) {\n this.promptChar = this.promptChar[0];\n }\n createMask.call(this);\n applyMask.call(this);\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (!this.isInitial) {\n unwireEvents.call(this);\n }\n wireEvents.call(this);\n };\n MaskedTextBox.prototype.setMaskPlaceholder = function (setVal, dynamicPlaceholder) {\n if (dynamicPlaceholder || this.placeholder) {\n Input.setPlaceholder(this.placeholder, this.element);\n if (this.element.value === this.promptMask && setVal && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n }\n if (this.floatLabelType === 'Never') {\n maskInputBlurHandler.call(this);\n }\n }\n };\n MaskedTextBox.prototype.setCssClass = function (cssClass, element) {\n if (cssClass) {\n addClass(element, cssClass);\n }\n };\n MaskedTextBox.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n this.element.style.width = formatUnit(width);\n this.inputObj.container.style.width = formatUnit(width);\n }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n this.inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n cssClass: this.cssClass,\n enabled: this.enabled,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('class', ROOT + ' ' + this.inputObj.container.getAttribute('class'));\n };\n /**\n * Calls internally if any of the property value is changed.\n * @hidden\n */\n MaskedTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n setMaskValue.call(this, this.value);\n if (this.placeholder) {\n this.setMaskPlaceholder(false, false);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'cssClass':\n this.setCssClass(newProp.cssClass, [this.inputObj.container]);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.inputObj.container]);\n break;\n case 'customCharacters':\n this.customCharacters = newProp.customCharacters;\n this.resetMaskedTextBox();\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputObj, undefined, this.createElement);\n bindClearEvent.call(this);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputObj);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n break;\n case 'mask':\n var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\n break;\n case 'promptChar':\n if (newProp.promptChar.length > 1) {\n newProp.promptChar = newProp.promptChar[0];\n }\n if (newProp.promptChar) {\n this.promptChar = newProp.promptChar;\n }\n else {\n this.promptChar = '_';\n }\n var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\n this.promptMask = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n this.undoCollec = this.redoCollec = [];\n setElementValue.call(this, value);\n break;\n }\n }\n };\n MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\n /**\n * Gets the value of the MaskedTextBox with the masked format.\n * By using `value` property, you can get the raw value of maskedtextbox without literals and prompt characters.\n * @return {string}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n * @method destroy\n * @return {void}\n */\n MaskedTextBox.prototype.destroy = function () {\n unwireEvents.call(this);\n this.inputObj.container.parentElement.appendChild(this.cloneElement);\n detach(this.inputObj.container);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], MaskedTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(true)\n ], MaskedTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"mask\", void 0);\n __decorate([\n Property('_')\n ], MaskedTextBox.prototype, \"promptChar\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"customCharacters\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"focus\", void 0);\n MaskedTextBox = __decorate([\n NotifyPropertyChanges\n ], MaskedTextBox);\n return MaskedTextBox;\n}(Component));\nexport { MaskedTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Complex } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the limit data in slider.\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n ;\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n ;\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n ;\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Slider.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Always') {\n tooltipElement.forEach(function (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderDisabled);\n });\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Always') {\n tooltipElement.forEach(function (tooltipElement) {\n tooltipElement.classList.remove(classNames.sliderDisabled);\n });\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n * @private\n */\n Slider.prototype.initRender = function () {\n this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.element.tabIndex = -1;\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap';\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setOrientClass();\n this.hiddenInput = (this.createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (this.createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (this.createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': min.toString(), 'aria-valuemax': max.toString()\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', 'aria-labelledby': this.element.id + '_title', tabIndex: '0'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.secondMaterialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.secondMaterialHandle);\n }\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', 'aria-labelledby': this.element.id + '_title', tabIndex: '0'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.firstMaterialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.firstMaterialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (pos === 0 && this.type !== 'Range') {\n this.getHandle().classList.add(classNames.sliderHandleStart);\n if (this.isMaterial && this.tooltip.isVisible) {\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 content = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content;\n this.secondTooltipObj.content = content;\n }\n else {\n if (!isNullOrUndefined(this.handleVal1)) {\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content;\n }\n }\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n var _this = this;\n if (this.isMaterial && this.tooltip.isVisible) {\n var count_1 = content.toString().length;\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n tooltipElement.forEach(function (element, index) {\n if (!element) {\n var cssClass = count_1 > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n !index ? _this.firstTooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass :\n _this.secondTooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n if (count_1 > 4) {\n element.classList.remove(classNames.sliderMaterialDefault);\n if (!element.classList.contains(classNames.sliderMaterialRange)) {\n element.classList.add(classNames.sliderMaterialRange);\n element.style.transform = 'scale(1)';\n }\n }\n else {\n element.classList.remove(classNames.sliderMaterialRange);\n if (!element.classList.contains(classNames.sliderMaterialDefault)) {\n element.classList.add(classNames.sliderMaterialDefault);\n element.style.transform = _this.getTooltipTransformProperties(_this.previousTooltipClass).rotate;\n }\n }\n }\n });\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n var tooltipPosition;\n if (this.orientation === 'Horizontal') {\n this.tooltip.placement === 'Before' ? tooltipPosition = 'TopCenter' : tooltipPosition = 'BottomCenter';\n }\n else {\n this.tooltip.placement === 'Before' ? tooltipPosition = 'LeftCenter' : tooltipPosition = 'RightCenter';\n }\n this.firstTooltipObj.position = tooltipPosition;\n if (this.type === 'Range') {\n this.secondTooltipObj.position = tooltipPosition;\n }\n if (this.isMaterial) {\n this.firstTooltipObj.showTipPointer = true;\n this.setProperties({ tooltip: { showOn: 'Always' } }, true);\n this.firstTooltipObj.height = 30;\n if (this.type === 'Range') {\n this.secondTooltipObj.showTipPointer = true;\n this.secondTooltipObj.height = 30;\n }\n }\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n var tooltipElement = args.target === this.firstHandle ? this.firstTooltipElement = args.element :\n this.secondTooltipElement = args.element;\n if (this.tooltip.cssClass !== '') {\n addClass([tooltipElement], this.tooltip.cssClass.split(' '));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterial && this.tooltip.isVisible) {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n tooltipElement.firstChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n }\n if (this.isBootstrap) {\n switch (this.bootstrapCollisionArgs.collidedPosition) {\n case 'TopCenter':\n this.firstTooltipObj.setProperties({ 'offsetY': -(bootstrapTooltipOffset) }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetY': -(bootstrapTooltipOffset) }, false);\n }\n break;\n case 'BottomCenter':\n this.firstTooltipObj.setProperties({ 'offsetY': bootstrapTooltipOffset }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetY': bootstrapTooltipOffset }, false);\n }\n break;\n case 'LeftCenter':\n this.firstTooltipObj.setProperties({ 'offsetX': -(bootstrapTooltipOffset) }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetX': -(bootstrapTooltipOffset) }, false);\n }\n break;\n case 'RightCenter':\n this.firstTooltipObj.setProperties({ 'offsetX': bootstrapTooltipOffset }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetX': bootstrapTooltipOffset }, false);\n }\n break;\n default:\n break;\n }\n }\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterial && this.tooltip.isVisible) {\n if (!destroy) {\n EventHandler.add(this.firstTooltipElement, 'mousedown touchstart', this.sliderDown, this);\n if (this.type === 'Range') {\n EventHandler.add(this.secondTooltipElement, 'mousedown touchstart', this.sliderDown, this);\n }\n }\n else {\n EventHandler.remove(this.firstTooltipElement, 'mousedown touchstart', this.sliderDown);\n if (this.type === 'Range') {\n EventHandler.remove(this.secondTooltipElement, 'mousedown touchstart', this.sliderDown);\n }\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n if (this.firstTooltipElement) {\n var position = void 0;\n if (this.orientation === 'Horizontal') {\n position = (this.firstTooltipElement.clientHeight + 14) - (this.firstTooltipElement.clientHeight / 2);\n }\n else {\n position = (this.firstTooltipElement.clientWidth + 14) - (this.firstTooltipElement.clientWidth / 2);\n }\n var transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n return transformProperties;\n }\n return undefined;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n this.refreshTooltip();\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n var handle = this.activeHandle === 1 ? this.firstMaterialHandle : this.secondMaterialHandle;\n if (tooltipElement.firstChild.classList.contains(classNames.materialTooltipHide)) {\n tooltipElement.firstChild.classList.remove(classNames.materialTooltipHide);\n }\n tooltipElement.firstChild.classList.add(classNames.materialTooltipShow);\n this.getHandle().style.cursor = 'default';\n tooltipElement.style.transition = this.scaleTransform;\n tooltipElement.classList.add(classNames.materialTooltipOpen);\n handle.style.transform = 'scale(0)';\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = 'scale(1)';\n }\n else {\n tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipPosition = args.target === this.firstHandle ? this.firstHandleTooltipPosition :\n this.secondHandleTooltipPosition;\n if (this.isMaterial && (tooltipPosition === undefined || tooltipPosition !== args.collidedPosition)) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length < 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (args.target === this.firstHandle) {\n this.firstHandleTooltipPosition = args.collidedPosition;\n }\n else {\n this.secondHandleTooltipPosition = args.collidedPosition;\n }\n }\n this.bootstrapCollisionArgs = args;\n };\n Slider.prototype.renderTooltip = function () {\n if (this.tooltip.showOn === 'Auto') {\n this.setProperties({ tooltip: { showOn: 'Hover' } }, true);\n }\n var tooltipPointer = this.isBootstrap ? true : false;\n this.firstTooltipObj = new Tooltip({\n showTipPointer: tooltipPointer,\n cssClass: classNames.sliderTooltip,\n animation: { open: { effect: 'None' }, close: { effect: 'None' } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n afterClose: this.tooltipAfterClose.bind(this)\n });\n this.firstTooltipObj.appendTo(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj = new Tooltip({\n showTipPointer: tooltipPointer,\n cssClass: classNames.sliderTooltip,\n animation: { open: { effect: 'None' }, close: { effect: 'None' } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n afterClose: this.tooltipAfterClose.bind(this)\n });\n this.secondTooltipObj.appendTo(this.secondHandle);\n }\n this.tooltipPlacement();\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n if (this.isMaterial) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.firstTooltipObj.open(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n };\n Slider.prototype.tooltipAfterClose = function (args) {\n if (args.element === this.firstTooltipElement) {\n this.firstTooltipElement = undefined;\n }\n else {\n this.secondTooltipElement = undefined;\n }\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n this.firstBtn.tabIndex = -1;\n this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var buttonElement = args.target.parentElement;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (!tooltipElement && this.tooltip.isVisible) {\n this.openTooltip();\n }\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.refreshTooltipOnMove();\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed');\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n Slider.prototype.renderScale = function () {\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = this.createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (this.createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start);\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.tickesAlignment(orien, tickWidth);\n };\n Slider.prototype.tickesAlignment = function (orien, tickWidth) {\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n this.trigger('renderedTicks', eventArgs);\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start) {\n var span = this.createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n span.innerHTML = isNullOrUndefined(this.customValues) ? this.formatTicksValue(li, start) : start;\n };\n Slider.prototype.formatTicksValue = function (li, start) {\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs);\n li.setAttribute('title', eventArgs.text.toString());\n return eventArgs.text.toString();\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n };\n Slider.prototype.tickValuePosition = function () {\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n var otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipAnimation();\n this.getHandle().focus();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipAnimation = function () {\n if (this.tooltip.isVisible) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (this.isMaterial) {\n !tooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() : this.refreshTooltip();\n }\n else {\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.openTooltip();\n }\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (this.tooltip.isVisible) {\n if (!this.isMaterial) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'None' } };\n }\n }\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal') {\n if (this.type === 'MinRange') {\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n this.activeHandle = this.activeHandle;\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition();\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed');\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement && this.secondTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n this.secondTooltipElement.style.zIndex = (this.zIndex + 3) + '';\n }\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement && this.secondTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 3) + '';\n this.secondTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n }\n else if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setHandlePosition = function () {\n var _this = this;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n var val = (this.activeHandle === 1) ? this.handleVal1 : this.handleVal2;\n var handle;\n var tooltipElement;\n if (this.isMaterial && this.tooltip.isVisible) {\n tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n handle = [this.getHandle(), (this.activeHandle === 1 ? this.firstMaterialHandle : this.secondMaterialHandle)];\n }\n else {\n handle = [this.getHandle()];\n }\n if (this.tooltip.isVisible && pos === 0 && this.type !== 'Range') {\n handle[0].classList.add(classNames.sliderHandleStart);\n if (this.isMaterial) {\n handle[1].classList.add(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderTooltipStart);\n }\n }\n }\n else {\n handle[0].classList.remove(classNames.sliderHandleStart);\n if (this.tooltip.isVisible && this.isMaterial) {\n handle[1].classList.remove(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.remove(classNames.sliderTooltipStart);\n }\n }\n }\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change');\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n var temp = this.activeHandle;\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition();\n this.activeHandle = 2;\n this.setHandlePosition();\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value) {\n this.trigger(eventName, this.changeEventArgs(eventName));\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.trigger(eventName, this.changeEventArgs(eventName));\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName) {\n var eventArgs;\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: this.firstTooltipObj.content\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString))\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min > this.max) {\n this.min = this.max;\n }\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n 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.limits.enabled) {\n this.setLimitBar();\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 if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && this.handlePos2 < this.handlePos1) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition();\n }\n };\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.round = function (a) {\n var f = this.step.toString().split('.');\n return f[1] ? parseFloat(a.toFixed(f[1].length)) : Math.round(a);\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterial && this.tooltip.isVisible) {\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n if (evt.target === handle) {\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipAnimation();\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = this.isMaterial && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition();\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.refreshTooltipOnMove = function () {\n if (this.tooltip.isVisible) {\n this.tooltipValue();\n this.activeHandle === 1 ? this.firstTooltipObj.refresh(this.firstHandle) :\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n };\n Slider.prototype.sliderDown = function (event) {\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.getHandle().focus();\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n else {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n }\n var _a, _b;\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === this.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, this.min, 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition();\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !this.firstTooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !this.firstTooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n this.activeHandle = 2;\n this.setHandlePosition();\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !this.secondTooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !this.secondTooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n this.setRangeBar();\n var _a, _b;\n };\n Slider.prototype.sliderBarUp = function () {\n this.changeEvent('changed');\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n if (this.tooltip.isVisible) {\n if (this.tooltip.showOn !== 'Always') {\n this.closeTooltip();\n }\n if (!this.isMaterial) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'None' } };\n }\n }\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.tooltip.isVisible) {\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (handlepos > this.handlePos2) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (handlepos < this.handlePos1) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition();\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !tooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !tooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n this.changeEvent('changed');\n if (this.tooltip.isVisible) {\n if (this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.activeHandle = 1;\n this.firstTooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.closeTooltip();\n this.activeHandle = 2;\n this.secondTooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.closeTooltip();\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function () {\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n this.firstTooltipObj.refresh(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n }\n };\n Slider.prototype.openTooltip = function () {\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n if (this.isMaterial) {\n this.openMaterialTooltip();\n }\n else {\n if (this.activeHandle === 1) {\n this.firstTooltipObj.open(this.firstHandle);\n }\n else {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.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 this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\n }\n this.getHandle().focus();\n this.tooltipAnimation();\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n }\n }\n this.changeEvent('changed');\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n var _this = this;\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n if (this.isMaterial && this.tooltip.isVisible) {\n var transformProperties_1 = this.getTooltipTransformProperties(this.previousTooltipClass);\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n var hiddenHandle_1 = this.type !== 'Range' ? [this.firstHandle] : [this.firstHandle, this.secondHandle];\n var handle_1 = this.type !== 'Range' ? [this.firstMaterialHandle] :\n [this.firstMaterialHandle, this.secondMaterialHandle];\n tooltipElement.forEach(function (tooltipElement, index) {\n if (tooltipElement) {\n tooltipElement.style.transition = _this.scaleTransform;\n tooltipElement.firstChild.classList.remove(classNames.materialTooltipShow);\n tooltipElement.firstChild.classList.add(classNames.materialTooltipHide);\n hiddenHandle_1[index].style.cursor = '-webkit-grab';\n hiddenHandle_1[index].style.cursor = 'grab';\n handle_1[index].style.transform = 'scale(1)';\n tooltipElement.classList.remove(classNames.materialTooltipOpen);\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = transformProperties_1.translate + ' ' + 'scale(0.01)';\n }\n else {\n tooltipElement.style.transform = transformProperties_1.translate + ' ' +\n transformProperties_1.rotate + ' ' + 'scale(0.01)';\n }\n setTimeout(function () { tooltipElement.style.transition = 'none'; }, 2500);\n }\n });\n }\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible) {\n this.tooltipValue();\n if (this.activeHandle === 1) {\n this.firstTooltipObj.close();\n }\n else {\n this.secondTooltipObj.close();\n }\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type) {\n if (this.isMaterial && this.firstMaterialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.firstMaterialHandle);\n this.firstTooltipElement = undefined;\n this.firstHandleTooltipPosition = undefined;\n if (this.secondMaterialHandle) {\n this.removeElement(this.secondMaterialHandle);\n this.secondTooltipElement = undefined;\n this.secondHandleTooltipPosition = undefined;\n }\n }\n if (this.tooltip.isVisible && this.isMaterial) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n this.removeElement(this.firstHandle);\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n }\n this.removeElement(this.rangeBar);\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.firstTooltipObj)) {\n this.firstTooltipObj.destroy();\n if (type === 'Range' && !isNullOrUndefined(this.secondTooltipObj)) {\n this.secondTooltipObj.destroy();\n }\n }\n if (this.limits.enabled && type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n }\n }\n if (type === 'Range') {\n if (this.limits.enabled) {\n if (!isNullOrUndefined(this.limitBarFirst) && !isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarFirst);\n this.removeElement(this.limitBarSecond);\n }\n }\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.updateConfig();\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.firstTooltipObj.refresh(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type);\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip();\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Prepares the slider for safe removal from the DOM.\n * Detaches all event handlers, attributes, and classes to avoid memory leaks.\n * @method destroy\n * @return {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.firstTooltipObj.destroy();\n if (this.type === 'Range' && !isNullOrUndefined(this.secondTooltipObj)) {\n this.secondTooltipObj.destroy();\n }\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n var value = isNullOrUndefined(newProp.value) ?\n (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n this.setProperties({ 'value': value }, true);\n if (oldProp.value.toString() !== value.toString()) {\n this.setValue();\n this.refreshTooltip();\n if (this.type === 'Range') {\n if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n this.activeHandle = 1;\n }\n else {\n this.activeHandle = 2;\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip();\n }\n break;\n case 'type':\n this.changeSliderType(oldProp.type);\n this.setZindex();\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.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 case 'customValue':\n this.setValue();\n this.onResize();\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip();\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function () {\n this.changeSliderType(this.type);\n };\n /**\n * Gets the component name\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"enableRtl\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax, getUniqueID } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-uploader';\nvar CONTROL_WRAPPER = 'e-upload';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar REMOVE_ICON = 'e-file-remove-btn';\nvar DELETE_ICON = 'e-file-delete-btn';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.fileList = [];\n _this.filesData = [];\n _this.uploadedFilesData = [];\n _this.isForm = false;\n _this.allTypes = false;\n _this.pausedData = [];\n _this.uploadMetaData = [];\n _this.tabIndex = '0';\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.setDropArea();\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'directoryUpload':\n this.updateDirectoryAttributes();\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'template':\n case 'autoUpload':\n this.clearAll();\n break;\n case 'locale':\n this.l10n.setLocale(this.locale);\n this.setLocalizedTexts();\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n break;\n }\n }\n };\n Uploader.prototype.setLocalizedTexts = function () {\n if (isNullOrUndefined(this.template)) {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n }\n this.updateFileList();\n }\n };\n Uploader.prototype.getKeyValue = function (val) {\n var keyValue;\n for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.preLocaleObj[key] === val) {\n keyValue = key;\n }\n }\n return keyValue;\n };\n Uploader.prototype.updateFileList = function () {\n var element;\n if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n for (var i = 0; i < this.fileList.length; i++) {\n element = this.fileList[i].querySelector('.e-file-status');\n element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n /* istanbul ignore next */\n if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (this.fileList[i].querySelector('.e-file-play-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('resume'));\n }\n if (this.fileList[i].querySelector('.e-file-remove-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n if (this.fileList[i].querySelector('.e-file-reload-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('retry'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.localizedTexts('Upload'));\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.localizedTexts('Clear'));\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createFileList(this.filesData);\n if (this.actionButtons) {\n this.removeActionButtons();\n this.renderActionButtons();\n this.checkActionButtonStatus();\n }\n }\n };\n Uploader.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n this.localeText = { Browse: 'Browse...', Clear: 'Clear', Upload: 'Upload',\n dropFilesHint: 'Or drop files here', invalidMaxFileSize: 'File size is too large',\n invalidMinFileSize: 'File size is too small', invalidFileType: 'File type is not allowed',\n uploadFailedMessage: 'File failed to upload', uploadSuccessMessage: 'File uploaded successfully',\n removedSuccessMessage: 'File removed successfully', removedFailedMessage: 'Unable to remove file', inProgress: 'Uploading',\n readyToUploadMessage: 'Ready to upload', abort: 'Abort', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file',\n pauseUpload: 'File upload paused', pause: 'Pause', resume: 'Resume', retry: 'Retry',\n fileUploadCancel: 'File upload canceled'\n };\n this.l10n = new L10n('uploader', this.localeText, this.locale);\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n this.checkHTMLAttributes();\n if (this.asyncSettings.saveUrl === '' && this.asyncSettings.removeUrl === '' && !this.autoUpload) {\n var parentEle = this.element.parentElement;\n for (; parentEle && parentEle !== document.documentElement; parentEle = parentEle.parentElement) {\n if (parentEle.tagName === 'FORM') {\n this.isForm = true;\n this.formElement = parentEle;\n parentEle.setAttribute('enctype', 'multipart/form-data');\n parentEle.setAttribute('encoding', 'multipart/form-data');\n }\n }\n }\n // tslint:disable-next-line\n var ejInstance = getValue('ej2_instances', this.element);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-UPLOADER') {\n var inputElement = this.createElement('input', { attrs: { type: 'file' } });\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n if (!inputElement.hasAttribute('name')) {\n inputElement.setAttribute('name', 'UploadFiles');\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n /* istanbul ignore next */\n if (ejInstance[0].isPureReactComponent) {\n if (!isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.name);\n }\n else if (!isNullOrUndefined(ejInstance[0].props.id) && isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.id);\n }\n else {\n this.element.setAttribute('name', 'UploadFiles');\n }\n }\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (!this.element.hasAttribute('type')) {\n this.element.setAttribute('type', 'file');\n }\n this.updateDirectoryAttributes();\n this.keyConfigs = {\n previous: 'shift+tab',\n enter: 'enter',\n next: 'tab'\n };\n if (this.element.hasAttribute('tabindex')) {\n this.tabIndex = this.element.getAttribute('tabindex');\n }\n };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Return the module name of the component.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n Uploader.prototype.updateDirectoryAttributes = function () {\n if (this.directoryUpload) {\n this.element.setAttribute('directory', 'true');\n this.element.setAttribute('webkitdirectory', 'true');\n }\n else {\n this.element.removeAttribute('directory');\n this.element.removeAttribute('webkitdirectory');\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Uploader.prototype.render = function () {\n this.renderBrowseButton();\n this.initializeUpload();\n this.wireEvents();\n this.setMultipleSelection();\n this.setExtensions(this.allowedExtensions);\n this.setRTL();\n this.renderPreLoadFiles();\n this.setControlStatus();\n };\n Uploader.prototype.renderBrowseButton = function () {\n this.browseButton = this.createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n this.browseButton.setAttribute('tabindex', this.tabIndex);\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n this.element.setAttribute('aria-label', 'Uploader');\n };\n Uploader.prototype.renderActionButtons = function () {\n this.element.setAttribute('tabindex', '-1');\n this.actionButtons = this.createElement('div', { className: ACTION_BUTTONS });\n this.uploadButton = this.createElement('button', { className: UPLOAD_BUTTONS, attrs: { 'type': 'button', 'tabindex': '-1' } });\n this.clearButton = this.createElement('button', { className: CLEAR_BUTTONS, attrs: { 'type': 'button', 'tabindex': '-1' } });\n this.actionButtons.appendChild(this.clearButton);\n this.actionButtons.appendChild(this.uploadButton);\n this.renderButtonTemplates();\n this.uploadWrapper.appendChild(this.actionButtons);\n this.browseButton.blur();\n this.uploadButton.focus();\n this.wireActionButtonEvents();\n };\n Uploader.prototype.wireActionButtonEvents = function () {\n EventHandler.add(this.uploadButton, 'click', this.uploadButtonClick, this);\n EventHandler.add(this.clearButton, 'click', this.clearButtonClick, this);\n };\n Uploader.prototype.unwireActionButtonEvents = function () {\n EventHandler.remove(this.uploadButton, 'click', this.uploadButtonClick);\n EventHandler.remove(this.clearButton, 'click', this.clearButtonClick);\n };\n Uploader.prototype.removeActionButtons = function () {\n if (this.actionButtons) {\n this.unwireActionButtonEvents();\n detach(this.actionButtons);\n this.actionButtons = null;\n }\n };\n Uploader.prototype.renderButtonTemplates = function () {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.innerHTML = '';\n this.browseButton.appendChild(this.buttons.browse);\n }\n if (this.uploadButton) {\n var uploadText = void 0;\n uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.innerText);\n }\n else {\n this.uploadButton.innerHTML = '';\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = void 0;\n clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.innerText);\n }\n else {\n this.clearButton.innerHTML = '';\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = this.createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = this.createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n var fileDropArea = this.createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n this.uploadWrapper = this.createElement('div', { className: CONTROL_WRAPPER, attrs: { 'aria-activedescendant': 'li-focused' } });\n this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n this.uploadWrapper.appendChild(this.dropAreaWrapper);\n this.setDropArea();\n };\n Uploader.prototype.renderPreLoadFiles = function () {\n if (isNullOrUndefined(this.files[0].size) || !isNullOrUndefined(this.template)) {\n return;\n }\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.createFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && !this.isForm && this.showFileList) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n document.querySelector(this.dropArea);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n dropTextArea.textContent = this.localizedTexts('dropFilesHint');\n }\n }\n if (!enableDropText) {\n dropTextArea.textContent = '';\n }\n }\n else {\n this.dropZoneElement = this.uploadWrapper;\n dropTextArea.textContent = this.localizedTexts('dropFilesHint');\n }\n this.bindDropEvents();\n };\n Uploader.prototype.setMultipleSelection = function () {\n if (this.multiple && !this.element.hasAttribute('multiple')) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n else if (!this.multiple) {\n this.element.removeAttribute('multiple');\n }\n };\n Uploader.prototype.checkAutoUpload = function (fileData) {\n if (this.autoUpload) {\n 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.formElement, 'reset', this.resetForm, this);\n }\n };\n Uploader.prototype.unWireEvents = function () {\n EventHandler.remove(this.browseButton, 'click', this.browseButtonClick);\n EventHandler.remove(this.element, 'change', this.onSelectFiles);\n EventHandler.remove(document, 'click', this.removeFocus);\n this.keyboardModule.destroy();\n };\n Uploader.prototype.resetForm = function () {\n this.clearAll();\n };\n Uploader.prototype.keyActionHandler = function (e) {\n var targetElement = e.target;\n switch (e.action) {\n case 'next':\n if (e.target === this.browseButton && isNullOrUndefined(this.listParent)) {\n this.browseButton.blur();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButton.blur();\n }\n else {\n this.setTabFocus(e);\n e.preventDefault();\n e.stopPropagation();\n if (e.target === this.clearButton && this.uploadButton.hasAttribute('disabled')) {\n this.clearButton.blur();\n }\n }\n break;\n case 'previous':\n if (e.target === this.browseButton) {\n this.browseButton.blur();\n }\n else {\n this.setReverseFocus(e);\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'enter':\n if (e.target === this.clearButton) {\n this.clearButtonClick();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButtonClick();\n }\n else if (e.target === this.browseButton) {\n this.browseButtonClick();\n }\n else if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pauseUpload');\n this.abortUpload(metaData, false);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(this.getCurrentMetaData(null, e), e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n else {\n this.removeFiles(e);\n if (!targetElement.classList.contains(ABORT_ICON)) {\n this.browseButton.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n };\n Uploader.prototype.getCurrentMetaData = function (fileInfo, e) {\n var fileData;\n var targetMetaData;\n if (isNullOrUndefined(fileInfo)) {\n var target = this.uploadWrapper.querySelector('.' + ICON_FOCUSED).parentElement;\n fileData = this.filesData[this.fileList.indexOf(target)];\n }\n else {\n fileData = fileInfo;\n }\n for (var i = 0; i < this.uploadMetaData.length; i++) {\n if (this.uploadMetaData[i].file.name === fileData.name) {\n targetMetaData = this.uploadMetaData[i];\n }\n }\n return targetMetaData;\n };\n Uploader.prototype.setReverseFocus = function (e) {\n var target = e.target;\n if (target === this.uploadButton) {\n this.uploadButton.blur();\n this.clearButton.focus();\n }\n else if (target === this.clearButton && this.listParent && this.listParent.querySelector('.e-icons')) {\n this.clearButton.blur();\n var items = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n items[items.length - 1].classList.add(ICON_FOCUSED);\n items[items.length - 1].focus();\n }\n else {\n var iconElements = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n var index = iconElements.indexOf(target);\n if (index > 0) {\n this.removeFocus();\n iconElements[index - 1].classList.add(ICON_FOCUSED);\n iconElements[index - 1].focus();\n }\n else {\n this.removeFocus();\n this.browseButton.focus();\n }\n }\n };\n Uploader.prototype.setTabFocus = function (e) {\n var target = e.target;\n if (target === this.clearButton) {\n this.removeFocus();\n if (this.uploadButton.hasAttribute('disabled')) {\n return;\n }\n this.uploadButton.focus();\n }\n else if (target.classList.contains('e-icons')) {\n var iconElements = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n var index = iconElements.indexOf(target);\n if (index < (iconElements.length - 1)) {\n this.removeFocus();\n iconElements[index + 1].classList.add(ICON_FOCUSED);\n iconElements[index + 1].focus();\n }\n else {\n this.removeFocus();\n this.clearButton.focus();\n }\n }\n else {\n this.browseButton.blur();\n var iconElement = this.listParent.querySelectorAll('span.e-icons')[0];\n iconElement.focus();\n iconElement.classList.add(ICON_FOCUSED);\n }\n };\n Uploader.prototype.removeFocus = function () {\n if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n document.activeElement.blur();\n this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n }\n };\n Uploader.prototype.browseButtonClick = function () {\n this.element.click();\n };\n Uploader.prototype.uploadButtonClick = function () {\n 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 EventHandler.add(this.dropZoneElement, 'paste', this.onPasteFile, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n }\n };\n Uploader.prototype.onDragLeave = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.dropElement = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.onPasteFile = function (event) {\n var item = event.clipboardData.items;\n if (item.length !== 1) {\n return;\n }\n var pasteFile = [].slice.call(item)[0];\n if ((pasteFile.kind === 'file') && pasteFile.type.match('^image/')) {\n this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\n }\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var liElement = this.fileList[index];\n var fileData = this.filesData[index];\n if (args.target.classList.contains(ABORT_ICON)) {\n fileData.statusCode = '5';\n if (!isNullOrUndefined(liElement)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n }\n else {\n this.remove(fileData, false, false, args);\n }\n this.element.value = '';\n this.checkActionButtonStatus();\n };\n Uploader.prototype.removeFilesData = function (file, customTemplate) {\n var index;\n if (customTemplate) {\n if (!this.showFileList) {\n index = this.filesData.indexOf(file);\n this.filesData.splice(index, 1);\n }\n return;\n }\n var selectedElement = this.getLiElement(file);\n if (isNullOrUndefined(selectedElement)) {\n return;\n }\n detach(selectedElement);\n index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (this.fileList.length === 0 && !isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n this.removeActionButtons();\n }\n };\n Uploader.prototype.removeUploadedFile = function (file, eventArgs, removeDirectly, custom) {\n var _this = this;\n var selectedFiles = file;\n var name = this.element.getAttribute('name');\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n var formData = new FormData();\n var liElement = this.getLiElement(file);\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs);\n }\n if (eventArgs.cancel) {\n e.cancel = true;\n return;\n }\n if (!isNullOrUndefined(liElement) && (!isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON)) ||\n !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON)))) {\n var spinnerTarget = void 0;\n spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ? liElement.querySelector('.' + DELETE_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (eventArgs.postRawFile && !isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name, selectedFiles.rawFile);\n }\n else {\n formData.append(name, selectedFiles.name);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n };\n ajax.onLoad = function (e) { _this.removeCompleted(e, selectedFiles, custom); return {}; };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.removeFailed(e, selectedFiles, custom); return {}; };\n ajax.send(formData);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateFormData = function (formData, customData) {\n if (customData.length > 0 && customData[0]) {\n var _loop_1 = function (i) {\n var data = customData[i];\n // tslint:disable-next-line\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n formData.append(Object.keys(data)[0], value);\n };\n for (var i = 0; i < customData.length; i++) {\n _loop_1(i);\n }\n }\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var 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 var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getFilesFromFolder = function (event) {\n this.filesEntries = [];\n var items;\n items = this.multiple ? event.dataTransfer.items : [event.dataTransfer.items[0]];\n var validDirectoryUpload = this.checkDirectoryUpload(items);\n if (!validDirectoryUpload) {\n return;\n }\n var _loop_2 = function (i) {\n var item = items[i].webkitGetAsEntry();\n if (item.isFile) {\n var files_2 = [];\n // tslint:disable-next-line\n item.file(function (fileObj) {\n var path = item.fullPath;\n files_2.push({ 'path': path, 'file': fileObj });\n });\n this_1.renderSelectedFiles(event, files_2, true);\n }\n else if (item.isDirectory) {\n this_1.traverseFileTree(item, event);\n }\n };\n var this_1 = this;\n for (var i = 0; i < items.length; i++) {\n _loop_2(i);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.checkDirectoryUpload = function (items) {\n for (var i = 0; i < items.length; i++) {\n var item = items[i].webkitGetAsEntry();\n if (item.isDirectory) {\n return true;\n }\n }\n return false;\n };\n // tslint:disable\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n var _this = this;\n if (typeof (item) === 'boolean') {\n var files_3 = [];\n var _loop_3 = function (i) {\n this_2.filesEntries[i].file(function (fileObj) {\n var path = _this.filesEntries[i].fullPath;\n files_3.push({ 'path': path, 'file': fileObj });\n });\n };\n var this_2 = this;\n for (var i = 0; i < this.filesEntries.length; i++) {\n _loop_3(i);\n }\n this.renderSelectedFiles(event, files_3, true);\n }\n else if (item.isFile) {\n this.filesEntries.push(item);\n }\n else if (item.isDirectory) {\n var directoryReader = item.createReader();\n directoryReader.readEntries(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n _this.traverseFileTree(entries[i]);\n }\n ;\n _this.traverseFileTree(true);\n _this.filesEntries = [];\n });\n }\n };\n // tslint:enable\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var targetFiles;\n if (args.type === 'drop') {\n /* istanbul ignore next */\n if (this.directoryUpload) {\n this.getFilesFromFolder(args);\n }\n else {\n var files = args.dataTransfer.files;\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n this.renderSelectedFiles(args, targetFiles);\n }\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n this.renderSelectedFiles(args, targetFiles);\n }\n };\n Uploader.prototype.renderSelectedFiles = function (args, \n // tslint:disable-next-line\n targetFiles, directory, paste) {\n if (targetFiles.length < 1) {\n return;\n }\n var fileData = [];\n if (!this.multiple) {\n this.clearData(true);\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = directory ? targetFiles[i].file : targetFiles[i];\n var fileName = directory ? targetFiles[i].path.substring(1, targetFiles[i].path.length) : paste ?\n getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name) :\n this.directoryUpload ? targetFiles[i].webkitRelativePath : file.name;\n var eventArgs_1 = {\n name: fileName,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1'\n };\n if (paste) {\n eventArgs_1.fileSource = 'paste';\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 event: args,\n cancel: false,\n filesData: fileData,\n isModified: false,\n modifiedFilesData: [],\n progressInterval: ''\n };\n if (this.allowedExtensions.indexOf('*') > -1) {\n this.allTypes = true;\n }\n if (!this.allTypes) {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (this.showFileList) {\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n var dataFiles = this.allTypes ? eventArgs.modifiedFilesData :\n this.checkExtension(eventArgs.modifiedFilesData);\n this.updateSortedFileList(dataFiles);\n this.filesData = dataFiles;\n if (!this.isForm) {\n this.checkAutoUpload(dataFiles);\n }\n }\n else {\n this.createFileList(fileData);\n this.filesData = this.filesData.concat(fileData);\n if (!this.isForm) {\n this.checkAutoUpload(fileData);\n }\n }\n if (!isNullOrUndefined(eventArgs.progressInterval) && eventArgs.progressInterval !== '') {\n this.progressInterval = eventArgs.progressInterval;\n }\n }\n else {\n this.filesData = this.filesData.concat(fileData);\n if (this.autoUpload) {\n this.upload(this.filesData, true);\n }\n }\n };\n Uploader.prototype.clearData = function (singleUpload) {\n if (!isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n }\n if (Browser.info.name !== 'msie' && !singleUpload) {\n this.element.value = '';\n }\n this.fileList = [];\n this.filesData = [];\n this.removeActionButtons();\n };\n Uploader.prototype.updateSortedFileList = function (filesData) {\n var previousListClone = this.createElement('div', { id: 'clonewrapper' });\n var added = -1;\n var removedList;\n if (this.listParent) {\n for (var i = 0; i < this.listParent.querySelectorAll('li').length; i++) {\n var liElement = this.listParent.querySelectorAll('li')[i];\n previousListClone.appendChild(liElement.cloneNode(true));\n }\n removedList = this.listParent.querySelectorAll('li');\n for (var _i = 0, removedList_1 = removedList; _i < removedList_1.length; _i++) {\n var item = removedList_1[_i];\n detach(item);\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createParentUL();\n for (var index = 0; index < filesData.length; index++) {\n for (var j = 0; j < this.filesData.length; j++) {\n if (this.filesData[j].name === filesData[index].name) {\n this.listParent.appendChild(oldList[j]);\n EventHandler.add(oldList[j].querySelector('.e-icons'), 'click', this.removeFiles, this);\n this.fileList.push(oldList[j]);\n added = index;\n }\n }\n if (added !== index) {\n this.createFileList([filesData[index]]);\n }\n }\n }\n else {\n this.createFileList(filesData);\n }\n };\n Uploader.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n Uploader.prototype.checkExtension = function (files) {\n var dropFiles = files;\n if (!this.isBlank(this.allowedExtensions)) {\n var allowedExtensions = [];\n var extensions = this.allowedExtensions.split(',');\n for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n var extension = extensions_1[_i];\n allowedExtensions.push(extension.trim().toLocaleLowerCase());\n }\n for (var i = 0; i < files.length; i++) {\n if (allowedExtensions.indexOf(('.' + files[i].type).toLocaleLowerCase()) === -1) {\n files[i].status = this.localizedTexts('invalidFileType');\n files[i].statusCode = '0';\n }\n }\n }\n return dropFiles;\n };\n Uploader.prototype.validatedFileSize = function (fileSize) {\n var minSizeError = '';\n var maxSizeError = '';\n if (fileSize < this.minFileSize) {\n minSizeError = this.localizedTexts('invalidMinFileSize');\n }\n else if (fileSize > this.maxFileSize) {\n maxSizeError = this.localizedTexts('invalidMaxFileSize');\n }\n else {\n minSizeError = '';\n maxSizeError = '';\n }\n var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n return errorMessage;\n };\n Uploader.prototype.createCustomfileList = function (fileData) {\n this.createParentUL();\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var liElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n this.listParent.appendChild(liElement);\n var fromElements = [].slice.call(this.uploadTemplateFn(listItem));\n append(fromElements, liElement);\n this.fileList.push(liElement);\n }\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = this.createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n }\n };\n Uploader.prototype.createFileList = function (fileData) {\n this.createParentUL();\n if (this.template !== '' && !isNullOrUndefined(this.template)) {\n this.createCustomfileList(fileData);\n }\n else {\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var liElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n var textContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var textElement = this.createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = this.createElement('span', { className: FILE_TYPE });\n fileExtension.innerHTML = '.' + this.getFileType(listItem.name);\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = this.createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = this.createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = this.createElement('span', { className: ' e-icons', attrs: { 'tabindex': '-1' } });\n /* istanbul ignore next */\n if (Browser.info.name === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n liElement.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n if (listItem.statusCode === '2') {\n statusElement.classList.add(UPLOAD_SUCCESS);\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else if (listItem.statusCode !== '1') {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(VALIDATION_FAILS);\n }\n if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n statusElement.innerHTML = '';\n }\n if (!iconElement.classList.contains(DELETE_ICON)) {\n iconElement.classList.add(REMOVE_ICON);\n }\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n }\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n var text;\n if (nameElement.offsetWidth < nameElement.scrollWidth) {\n text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode) {\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n files.status = status;\n files.statusCode = statusCode;\n }\n var li = this.getLiElement(files);\n if (!isNullOrUndefined(li)) {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n li.querySelector('.' + STATUS).textContent = status;\n }\n }\n return files;\n };\n Uploader.prototype.getLiElement = function (files) {\n var index;\n for (var i = 0; i < this.filesData.length; i++) {\n if (this.filesData[i].name === files.name) {\n index = i;\n }\n }\n return this.fileList[index];\n };\n Uploader.prototype.createProgressBar = function (liElement) {\n var progressbarWrapper = this.createElement('span', { className: PROGRESS_WRAPPER });\n var progressBar = this.createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n var progressbarInnerWrapper = this.createElement('span', { className: PROGRESS_INNER_WRAPPER });\n progressBar.setAttribute('style', 'width: 0%');\n var progressbarText = this.createElement('span', { className: PROGRESSBAR_TEXT });\n progressbarText.textContent = '0%';\n progressbarInnerWrapper.appendChild(progressBar);\n progressbarWrapper.appendChild(progressbarInnerWrapper);\n progressbarWrapper.appendChild(progressbarText);\n liElement.querySelector('.' + TEXT_CONTAINER).appendChild(progressbarWrapper);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateProgressbar = function (e, li) {\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && !isNullOrUndefined(li.querySelector('.' + PROGRESSBAR))) {\n if (!isNullOrUndefined(this.progressInterval) && this.progressInterval !== '') {\n var value = (Math.round((e.loaded / e.total) * 100)) % parseInt(this.progressInterval, 10);\n if (value === 0 || value === 100) {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n else {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n };\n Uploader.prototype.changeProgressValue = function (li, progressValue) {\n li.querySelector('.' + PROGRESSBAR).setAttribute('style', 'width:' + progressValue);\n li.querySelector('.' + PROGRESSBAR_TEXT).textContent = progressValue;\n };\n Uploader.prototype.uploadInProgress = function (e, files, customUI, request) {\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI)) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n /* istanbul ignore next */\n if (files.statusCode === '5') {\n this.cancelUploadingFile(files, e, request, li);\n }\n if (!(li.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0) && li.querySelector('.' + STATUS)) {\n li.querySelector('.' + STATUS).classList.add(UPLOAD_INPROGRESS);\n this.createProgressBar(li);\n this.updateProgressBarClasses(li, UPLOAD_INPROGRESS);\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n this.updateProgressbar(e, li);\n var iconEle = li.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(ABORT_ICON, UPLOAD_INPROGRESS);\n iconEle.setAttribute('title', this.localizedTexts('abort'));\n iconEle.classList.remove(REMOVE_ICON);\n }\n }\n else {\n this.cancelUploadingFile(files, e, request);\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n this.trigger('progress', args);\n };\n /* istanbul ignore next */\n Uploader.prototype.cancelUploadingFile = function (files, e, request, li) {\n var _this = this;\n if (files.statusCode === '5') {\n var eventArgs = {\n event: e,\n fileData: files,\n cancel: false\n };\n this.trigger('canceling', eventArgs);\n if (eventArgs.cancel) {\n files.statusCode = '3';\n if (!isNullOrUndefined(li)) {\n var spinnerTarget = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(li.querySelector('.e-spinner-pane'));\n }\n }\n return;\n }\n request.emitError = false;\n request.httpRequest.abort();\n var formData = new FormData();\n if (files.statusCode === '5') {\n var name_1 = this.element.getAttribute('name');\n formData.append(name_1, files.name);\n formData.append('cancel-uploading', files.name);\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.onLoad = function (e) { _this.removecanceledFile(e, files); return {}; };\n ajax.send(formData);\n }\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n return;\n }\n this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n this.renderFailureState(e, file, liElement);\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(liElement)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n var args = { event: e, operation: 'cancel', file: file };\n this.trigger('success', args);\n };\n Uploader.prototype.renderFailureState = function (e, file, liElement) {\n var _this = this;\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n }\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n if (isNullOrUndefined(deleteIcon)) {\n return;\n }\n deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': '-1' } });\n liElement.insertBefore(this.pauseButton, deleteIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n /* istanbul ignore next */\n retryElement.addEventListener('click', function (e) { _this.reloadcanceledFile(e, file, liElement, false); }, false);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement, custom) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\n if (!custom) {\n liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n if (!isNullOrUndefined(liElement.querySelector('.' + RETRY_ICON))) {\n detach(liElement.querySelector('.' + RETRY_ICON));\n }\n this.pauseButton = null;\n }\n this.upload([file]);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, file, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var li = this.getLiElement(file);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n var iconEle = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(DELETE_ICON);\n iconEle.setAttribute('title', this.localizedTexts('delete'));\n iconEle.classList.remove(ABORT_ICON);\n iconEle.classList.remove(UPLOAD_INPROGRESS);\n }\n }\n this.raiseSuccessEvent(e, file);\n }\n else {\n this.uploadFailed(e, file);\n }\n };\n Uploader.prototype.raiseSuccessEvent = function (e, file) {\n var args = { e: e, operation: 'upload', file: this.updateStatus(file, this.localizedTexts('uploadSuccessMessage'), '2') };\n this.trigger('success', args);\n this.uploadedFilesData.push(file);\n this.trigger('change', { file: this.uploadedFilesData });\n this.checkActionButtonStatus();\n };\n Uploader.prototype.uploadFailed = function (e, file) {\n var li = this.getLiElement(file);\n var args = { e: e, operation: 'upload', file: this.updateStatus(file, this.localizedTexts('uploadFailedMessage'), '0') };\n if (!isNullOrUndefined(li)) {\n this.renderFailureState(e, file, li);\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 if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n }\n };\n Uploader.prototype.setExtensions = function (extensions) {\n this.element.setAttribute('accept', extensions);\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n var exception = void 0;\n try {\n if (document.querySelectorAll(uploadTemplate).length) {\n return compile(document.querySelector(uploadTemplate).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n this.enableRtl ? addClass([this.uploadWrapper], RTL) : removeClass([this.uploadWrapper], RTL);\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function () {\n if (this.element.hasAttribute('accept')) {\n this.allowedExtensions = this.element.getAttribute('accept');\n this.initialAttr.accept = this.allowedExtensions;\n }\n if (this.element.hasAttribute('multiple')) {\n this.multiple = true;\n this.initialAttr.multiple = true;\n }\n if (this.element.hasAttribute('disabled')) {\n this.enabled = false;\n this.initialAttr.disabled = true;\n }\n };\n Uploader.prototype.chunkUpload = function (file, custom) {\n var start = 0;\n var end = Math.min(this.asyncSettings.chunkSize, file.size);\n var index = 0;\n var blob = file.rawFile.slice(start, end);\n var metaData = { chunkIndex: index, blob: blob, file: file, start: start, end: end, retryCount: 0, request: null };\n this.sendRequest(file, metaData, custom);\n };\n Uploader.prototype.sendRequest = function (file, metaData, custom) {\n var _this = this;\n var formData = new FormData();\n var blob = file.rawFile.slice(metaData.start, metaData.end);\n formData.append('chunkFile', blob, file.name);\n formData.append('chunk-index', metaData.chunkIndex.toString());\n var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n formData.append('total-chunk', totalChunk.toString());\n var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n ajax.onLoad = function (e) { _this.chunkUploadComplete(e, metaData, custom); return {}; };\n ajax.onUploadProgress = function (e) {\n _this.chunkUploadInProgress(e, metaData, custom);\n return {};\n };\n var eventArgs = {\n fileData: file,\n customFormData: [],\n cancel: false,\n chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n };\n ajax.beforeSend = function (e) {\n if (metaData.chunkIndex !== 0) {\n return;\n }\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs);\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, file);\n }\n else {\n _this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.chunkUploadFailed(e, metaData, custom); return {}; };\n ajax.send(formData);\n metaData.request = ajax;\n };\n Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n var _this = this;\n e.cancel = true;\n if (eventArgs.fileData.statusCode === '5') {\n return;\n }\n var liElement = this.getLiElement(eventArgs.fileData);\n liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n eventArgs.fileData.statusCode = '5';\n eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': '-1' } });\n liElement.insertBefore(this.pauseButton, liElement.querySelector('.' + REMOVE_ICON));\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n /* istanbul ignore next */\n this.pauseButton.addEventListener('click', function (e) { _this.reloadcanceledFile(e, file, liElement); }, false);\n this.checkActionButtonStatus();\n };\n Uploader.prototype.checkChunkUpload = function () {\n return (this.asyncSettings.chunkSize <= 0 || isNullOrUndefined(this.asyncSettings.chunkSize)) ? false : true;\n };\n Uploader.prototype.chunkUploadComplete = function (e, metaData, custom) {\n var _this = this;\n var response = e.target;\n var liElement;\n if (response.readyState === 4 && response.status >= 200 && response.status < 300) {\n var totalChunk = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: totalChunk,\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('chunkSuccess', eventArgs);\n if (isNullOrUndefined(custom) || !custom) {\n liElement = this.getLiElement(metaData.file);\n }\n this.updateMetaData(metaData);\n if (metaData.end === metaData.file.size) {\n metaData.file.statusCode = '3';\n }\n if (metaData.file.statusCode === '5') {\n var eventArgs_2 = { event: e, fileData: metaData.file, cancel: false };\n this.trigger('canceling', eventArgs_2);\n if (eventArgs_2.cancel) {\n metaData.file.statusCode = '3';\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n this.sendNextRequest(metaData);\n return;\n }\n metaData.request.emitError = false;\n response.abort();\n var formData = new FormData();\n var name_2 = this.element.getAttribute('name');\n formData.append(name_2, metaData.file.name);\n formData.append('cancel-uploading', metaData.file.name);\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.onLoad = function (e) { _this.removeChunkFile(e, metaData, custom); return {}; };\n ajax.send(formData);\n }\n else {\n if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n var index = this.pausedData.indexOf(metaData);\n if (index >= 0) {\n this.pausedData.splice(index, 1);\n }\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n if (liElement) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n this.sendNextRequest(metaData);\n }\n }\n else {\n this.chunkUploadFailed(e, metaData);\n }\n };\n Uploader.prototype.sendNextRequest = function (metaData) {\n metaData.start = metaData.end;\n metaData.end += this.asyncSettings.chunkSize;\n metaData.end = Math.min(metaData.end, metaData.file.size);\n metaData.chunkIndex += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n var liElement = this.getLiElement(metaData.file);\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n var spinnerTarget = deleteIcon;\n this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon.classList.add(RETRY_ICON);\n pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n };\n Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pause');\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.abortUpload(metaData, custom, eventArgs);\n };\n Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n targetElement.classList.remove(PAUSE_UPLOAD);\n targetElement.classList.add(RESUME_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('resume'));\n targetElement.nextElementSibling.classList.add(REMOVE_ICON);\n targetElement.nextElementSibling.classList.remove(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('remove'));\n }\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData.splice(i, 1);\n }\n }\n this.pausedData.push(metaData);\n this.trigger('pausing', eventArgs);\n };\n Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n var liElement = this.getLiElement(metaData.file);\n var targetElement;\n if (!isNullOrUndefined(liElement)) {\n targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n }\n if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n targetElement.classList.remove(RESUME_UPLOAD);\n targetElement.classList.add(PAUSE_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('pause'));\n targetElement.nextElementSibling.classList.remove(REMOVE_ICON);\n targetElement.nextElementSibling.classList.add(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('abort'));\n }\n metaData.file.status = this.localizedTexts('inProgress');\n metaData.file.statusCode = '3';\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('resuming', eventArgs);\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].end === this.pausedData[i].file.size) {\n this.chunkUploadComplete(e, metaData, custom);\n }\n else {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData[i].start = this.pausedData[i].end;\n this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n }\n }\n }\n };\n Uploader.prototype.updateMetaData = function (metaData) {\n if (this.uploadMetaData.indexOf(metaData) === -1) {\n this.uploadMetaData.push(metaData);\n }\n else {\n this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n this.uploadMetaData.push(metaData);\n }\n };\n Uploader.prototype.removeChunkProgressBar = function (metaData) {\n var liElement = this.getLiElement(metaData.file);\n if (!isNullOrUndefined(liElement)) {\n this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n this.removeProgressbar(liElement, 'success');\n var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(cancelButton)) {\n cancelButton.classList.add(DELETE_ICON);\n cancelButton.setAttribute('title', this.localizedTexts('delete'));\n cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n }\n }\n };\n Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n var _this = this;\n var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var liElement;\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n liElement = this.getLiElement(metaData.file);\n }\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: chunkCount,\n chunkSize: this.asyncSettings.chunkSize,\n cancel: false\n };\n this.trigger('chunkFailure', eventArgs);\n /* tslint:disable */\n var eventArgsData = eventArgs;\n var values = Object.keys(eventArgsData).map(function (e) {\n return eventArgsData[e];\n });\n /* tslint:enable */\n // To prevent triggering of failure event\n if (!values[values.length - 2]) {\n if (metaData.retryCount < this.asyncSettings.retryCount) {\n setTimeout(function () { _this.retryRequest(liElement, metaData, custom); }, this.asyncSettings.retryAfterDelay);\n }\n else {\n if (!isNullOrUndefined(liElement)) {\n var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n if (!isNullOrUndefined(pauseButton)) {\n pauseButton.classList.add(RETRY_ICON);\n pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n }\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n var iconElement = liElement.querySelector('.' + ABORT_ICON);\n iconElement.classList.remove(ABORT_ICON);\n if (!isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n if (metaData.start > 0) {\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else {\n iconElement.classList.add(REMOVE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n }\n }\n metaData.retryCount = 0;\n var file = metaData.file;\n var args = { e: e, operation: 'upload', file: this.updateStatus(file, this.localizedTexts('uploadFailedMessage'), '0') };\n this.trigger('failure', args);\n }\n }\n };\n Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n }\n metaData.retryCount += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.checkPausePlayAction = function (e) {\n var targetElement = e.target;\n var selectedElement = e.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n var metaData = this.getCurrentMetaData(fileData);\n if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n this.pauseUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n this.retryUpload(metaData, false);\n }\n else {\n this.retryUpload(metaData, true);\n }\n }\n };\n Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n if (fromcanceledStage) {\n metaData.end = metaData.end + this.asyncSettings.chunkSize;\n metaData.start = metaData.start + this.asyncSettings.chunkSize;\n this.sendRequest(metaData.file, metaData);\n }\n else {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n };\n Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n var _this = this;\n if (metaData.file.statusCode === '4') {\n return;\n }\n if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n metaData.file.statusCode = '3';\n metaData.file.status = this.localizedTexts('inProgress');\n }\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(liElement)) {\n return;\n }\n var target;\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n if (!isNullOrUndefined(retryElement)) {\n retryElement.classList.add(PAUSE_UPLOAD);\n retryElement.setAttribute('title', this.localizedTexts('pause'));\n retryElement.classList.remove(RETRY_ICON);\n }\n if (!isNullOrUndefined(liElement)) {\n if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n var statusElement = liElement.querySelector('.' + STATUS);\n if (isNullOrUndefined(this.template)) {\n statusElement.classList.add(UPLOAD_INPROGRESS);\n statusElement.classList.remove(UPLOAD_FAILED);\n this.createProgressBar(liElement);\n this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n }\n var clearIcon = liElement.querySelector('.' + REMOVE_ICON) ? liElement.querySelector('.' + REMOVE_ICON) :\n liElement.querySelector('.' + DELETE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(REMOVE_ICON);\n }\n }\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n var loadedSize = (metaData.chunkIndex * this.asyncSettings.chunkSize);\n var value = Math.min((((loadedSize + e.loaded) / metaData.file.size) * 100), 100);\n this.changeProgressValue(liElement, Math.round(value).toString() + '%');\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)) {\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': '-1' } });\n if (Browser.info.name === 'msie') {\n this.pauseButton.classList.add('e-msie');\n }\n liElement.insertBefore(this.pauseButton, liElement.querySelector('.' + ABORT_ICON));\n this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n this.pauseButton.addEventListener('click', function (e) { _this.checkPausePlayAction(e); }, false);\n }\n };\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n * @param { number } bytes - specifies the file size in bytes.\n * @returns string\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n var size;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1024;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1024;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns File[]\n */\n Uploader.prototype.sortFileList = function (filesData) {\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n var index = 0;\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_3 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_3 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearAll();\n this.unWireEvents();\n this.unBindDropEvents();\n if (this.multiple) {\n this.element.removeAttribute('multiple');\n }\n if (!this.enabled) {\n this.element.removeAttribute('disabled');\n }\n this.element.removeAttribute('accept');\n this.setInitialAttributes();\n this.uploadWrapper.parentElement.appendChild(this.cloneElement);\n this.cloneElement.classList.remove('e-control', ROOT);\n detach(this.uploadWrapper);\n this.uploadWrapper = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Allows you to call the upload process manually by calling save URL action.\n * To process the selected files (added in upload queue), pass an empty argument otherwise\n * upload the specific file based on its argument.\n * @param { FileInfo | FileInfo[] } files - specifies the files data for upload.\n * @returns void\n */\n Uploader.prototype.upload = function (files, custom) {\n var uploadFiles = this.validateFileType(files);\n this.uploadFiles(uploadFiles, custom);\n };\n Uploader.prototype.validateFileType = function (files) {\n var uploadFiles = [];\n if (files instanceof Array) {\n uploadFiles = files;\n }\n else {\n uploadFiles.push(files);\n }\n return uploadFiles;\n };\n Uploader.prototype.uploadFiles = function (files, custom) {\n var _this = this;\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n return;\n }\n if (!custom || isNullOrUndefined(custom)) {\n if (!this.multiple) {\n var file = [];\n file.push(files[0]);\n selectedFiles = this.filterfileList(file);\n }\n else {\n selectedFiles = this.filterfileList(files);\n }\n }\n else {\n selectedFiles = files;\n }\n var chunkEnabled = this.checkChunkUpload();\n var _loop_4 = function (i) {\n var ajax = new Ajax(this_3.asyncSettings.saveUrl, 'POST', true, null);\n var eventArgs = {\n fileData: selectedFiles[i],\n customFormData: [],\n cancel: false\n };\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs);\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, selectedFiles[i]);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n };\n if (selectedFiles[i].statusCode === '1') {\n var name_4 = this_3.element.getAttribute('name');\n formData.append(name_4, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (chunkEnabled && selectedFiles[i].size > this_3.asyncSettings.chunkSize) {\n this_3.chunkUpload(selectedFiles[i], custom);\n }\n else {\n ajax.onLoad = function (e) { _this.uploadComplete(e, selectedFiles[i], custom); return {}; };\n ajax.onUploadProgress = function (e) {\n _this.uploadInProgress(e, selectedFiles[i], custom, ajax);\n return {};\n };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.uploadFailed(e, selectedFiles[i]); return {}; };\n ajax.send(formData);\n }\n }\n };\n var this_3 = this;\n for (var i = 0; i < selectedFiles.length; i++) {\n _loop_4(i);\n }\n };\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n * @param { boolean } removeDirectly - Set true if files remove without removing event.\n * @returns void\n */\n Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, args) {\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n customFormData: [],\n postRawFile: true\n };\n if (this.isForm) {\n eventArgs.filesData = this.getFilesData();\n this.trigger('removing', eventArgs);\n if (!eventArgs.cancel) {\n this.clearAll();\n }\n return;\n }\n var removeFiles = [];\n fileData = !isNullOrUndefined(fileData) ? fileData : this.filesData;\n if (fileData instanceof Array) {\n removeFiles = fileData;\n }\n else {\n removeFiles.push(fileData);\n }\n eventArgs.filesData = removeFiles;\n var removeUrl = this.asyncSettings.removeUrl;\n var validUrl = (removeUrl === '' || isNullOrUndefined(removeUrl)) ? false : true;\n for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n var files = removeFiles_1[_i];\n if ((files.statusCode === '2' || files.statusCode === '4') && validUrl) {\n this.removeUploadedFile(files, eventArgs, removeDirectly, customTemplate);\n }\n else {\n if (!removeDirectly) {\n this.trigger('removing', eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n this.removeFilesData(files, customTemplate);\n }\n }\n };\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n * @returns void\n */\n Uploader.prototype.clearAll = function () {\n if (isNullOrUndefined(this.listParent)) {\n if (Browser.info.name !== 'msie') {\n this.element.value = '';\n }\n this.filesData = [];\n return;\n }\n var eventArgs = {\n cancel: false,\n filesData: this.filesData\n };\n this.trigger('clearing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.clearData();\n };\n /**\n * Get the data of files which are shown in file list.\n * @returns FileInfo[]\n */\n Uploader.prototype.getFilesData = function () {\n return this.filesData;\n };\n /**\n * Pauses the in-progress chunked upload based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns void\n */\n Uploader.prototype.pause = function (fileData, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.pauseUploading(fileDataFiles, custom);\n };\n Uploader.prototype.pauseUploading = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n Uploader.prototype.getFiles = function (fileData) {\n var files = [];\n if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n files.push(fileData);\n }\n else {\n files = fileData;\n }\n return files;\n };\n /**\n * Resumes the chunked upload that is previously paused based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns void\n */\n Uploader.prototype.resume = function (fileData, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.resumeFiles(fileDataFiles, custom);\n };\n Uploader.prototype.resumeFiles = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '4') {\n this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n /**\n * Retries the canceled or failed file upload based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n * @returns void\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.retryFailedFiles(fileDataFiles, fromcanceledStage, custom);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n if (this.asyncSettings.chunkSize > 0) {\n this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n }\n else {\n var liElement = void 0;\n if (!custom) {\n liElement = this.fileList[this.filesData.indexOf(files[i])];\n }\n this.reloadcanceledFile(null, files[i], liElement, custom);\n }\n }\n }\n };\n /**\n * Stops the in-progress chunked upload based on the file data.\n * When the file upload is canceled, the partially uploaded file is removed from server.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n * @returns void\n */\n Uploader.prototype.cancel = function (fileData) {\n var cancelingFiles = this.validateFileType(fileData);\n this.cancelUpload(cancelingFiles);\n };\n Uploader.prototype.cancelUpload = function (fileData) {\n var files = this.getFiles(fileData);\n if (this.asyncSettings.chunkSize > 0) {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n var metaData = this.getCurrentMetaData(files[i], null);\n metaData.file.statusCode = '5';\n metaData.file.status = this.localizedTexts('fileUploadCancel');\n this.updateMetaData(metaData);\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n else {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n files[i].statusCode = '5';\n files[i].status = this.localizedTexts('fileUploadCancel');\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n };\n Uploader.prototype.showHideUploadSpinner = function (files) {\n var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && isNullOrUndefined(this.template)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"directoryUpload\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"uploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"clearing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkSuccess\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkFailure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"canceling\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"pausing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"resuming\", void 0);\n Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Event, NotifyPropertyChanges, detach, Property, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, getUniqueID, rippleEffect } from '@syncfusion/ej2-base';\nimport { attributes, Component, closest, select } from '@syncfusion/ej2-base';\nimport { classList, removeClass } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { getModel, Item } from './../common/common';\nvar classNames = {\n DISABLED: 'e-disabled',\n FOCUS: 'e-focused',\n ICON: 'e-menu-icon',\n ITEM: 'e-item',\n POPUP: 'e-dropdown-popup',\n RTL: 'e-rtl',\n SEPARATOR: 'e-separator',\n VERTICAL: 'e-vertical'\n};\n/**\n * DropDownButton component is used to toggle contextual overlays for displaying list of action items.\n * It can contain both text and images.\n * ``````html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DropDownButton = /** @class */ (function (_super) {\n __extends(DropDownButton, _super);\n /**\n * Constructor for creating the widget\n * @param {DropDownButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function DropDownButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n DropDownButton.prototype.preRender = function () {\n /** */\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n DropDownButton.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n * @returns void\n */\n DropDownButton.prototype.toggle = function () {\n this.canOpen() ? this.openPopUp() : this.closePopup();\n };\n /**\n * Initialize the Component rendering\n * @returns void\n * @private\n */\n DropDownButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n DropDownButton.prototype.createPopup = function () {\n var div = this.createElement('div', {\n className: classNames.POPUP,\n id: this.element.id + '-popup'\n });\n document.body.appendChild(div);\n this.dropDown = new Popup(div, {\n relateTo: this.element,\n collision: { X: 'fit', Y: 'flip' },\n position: { X: 'left', Y: 'bottom' },\n targetType: 'relative',\n content: this.target ? this.getTargetElement() : '',\n enableRtl: this.enableRtl\n });\n if (this.dropDown.element.style.position === 'fixed') {\n this.dropDown.refreshPosition(this.element);\n }\n this.dropDown.hide();\n attributes(this.element, (_a = {},\n _a['role'] = 'menu',\n _a['aria-haspopup'] = this.items.length || this.target ? 'true' : 'false',\n _a['aria-expanded'] = 'false',\n _a['aria-owns'] = this.getPopUpElement().id,\n _a['type'] = 'button',\n _a));\n if (this.cssClass) {\n addClass([div], this.cssClass.split(' '));\n }\n 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 = this.createElement('ul', {\n attrs: { 'tabindex': '0' }\n });\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n li = this.createElement('li', {\n innerHTML: item.url ? '' : item.text,\n className: item.separator ? classNames.ITEM + ' ' + classNames.SEPARATOR : classNames.ITEM,\n attrs: { 'role': 'menuItem', 'tabindex': '-1' },\n id: item.id ? item.id : getUniqueID('e-' + this.getModuleName() + '-item')\n });\n if (item.iconCss) {\n span = this.createElement('span', { className: classNames.ICON + ' ' + item.iconCss });\n li.insertBefore(span, li.childNodes[0]);\n }\n else {\n if (showIcon && !item.separator) {\n li.classList.add('e-blank-icon');\n }\n }\n if (item.url) {\n li.appendChild(this.createAnchor(item));\n }\n eventArgs = { item: item, element: li };\n this.trigger('beforeItemRender', eventArgs);\n ul.appendChild(li);\n }\n return ul;\n };\n DropDownButton.prototype.hasIcon = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][field]) {\n return true;\n }\n }\n return false;\n };\n DropDownButton.prototype.createAnchor = function (item) {\n return this.createElement('a', { className: 'e-menu-text e-menu-url', innerHTML: item.text, attrs: { 'href': item.url } });\n };\n DropDownButton.prototype.initialize = function () {\n this.button = new Button({\n iconCss: this.iconCss, iconPosition: this.iconPosition, cssClass: this.cssClass, content: this.content,\n disabled: this.disabled, enableRtl: this.enableRtl, enablePersistence: this.enablePersistence\n });\n this.button.createElement = this.createElement;\n this.button.appendTo(this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n this.appendArrowSpan();\n this.createPopup();\n this.setActiveElem([this.element]);\n };\n DropDownButton.prototype.appendArrowSpan = function () {\n this.element.appendChild(this.createElement('span', {\n className: 'e-btn-icon e-icons ' + 'e-icon-' + (this.cssClass.indexOf(classNames.VERTICAL) > -1\n ? 'bottom' : 'right') + ' e-caret'\n }));\n };\n DropDownButton.prototype.setActiveElem = function (elem) {\n this.activeElem = elem;\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n DropDownButton.prototype.getModuleName = function () {\n return 'dropdown-btn';\n };\n DropDownButton.prototype.canOpen = function () {\n return this.getPopUpElement().classList.contains('e-popup-close');\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n DropDownButton.prototype.destroy = function () {\n var _this = this;\n if (this.element.querySelector('span.e-caret')) {\n detach(this.element.querySelector('span.e-caret'));\n }\n _super.prototype.destroy.call(this);\n this.button.destroy();\n ['role', 'aria-haspopup', 'aria-expanded', 'aria-owns', 'type'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n removeClass([this.element], ['e-btn']);\n removeClass(this.activeElem, ['e-active']);\n this.dropDown.destroy();\n var popupEle = document.getElementById(this.getPopUpElement().id);\n if (popupEle) {\n removeClass([popupEle], ['e-popup-open', 'e-popup-close']);\n detach(popupEle);\n }\n if (!this.disabled) {\n this.unWireEvents();\n }\n };\n DropDownButton.prototype.getPopUpElement = function () {\n return this.dropDown.element;\n };\n DropDownButton.prototype.getULElement = function () {\n return this.getPopUpElement().children[0];\n };\n DropDownButton.prototype.wireEvents = function () {\n var popupElement = this.getPopUpElement();\n this.delegateMousedownHandler = this.mousedownHandler.bind(this);\n EventHandler.add(document, 'mousedown touchstart', this.delegateMousedownHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(popupElement, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n EventHandler.add(popupElement, 'keydown', this.keyBoardHandler, this);\n this.rippleFn = rippleEffect(popupElement, { selector: '.' + classNames.ITEM });\n };\n DropDownButton.prototype.keyBoardHandler = function (e) {\n if (e.target === this.element && (e.keyCode === 9 || (!e.altKey && e.keyCode === 40) || e.keyCode === 38)) {\n return;\n }\n switch (e.keyCode) {\n case 38:\n case 40:\n if (e.altKey && (e.keyCode === 38 || e.keyCode === 40)) {\n this.keyEventHandler(e);\n }\n else {\n this.upDownKeyHandler(e);\n }\n break;\n case 9:\n case 13:\n case 27:\n case 32:\n this.keyEventHandler(e);\n break;\n }\n };\n DropDownButton.prototype.upDownKeyHandler = function (e) {\n if (this.target && (e.keyCode === 38 || e.keyCode === 40)) {\n return;\n }\n e.preventDefault();\n var ul = this.getULElement();\n var defaultIdx = e.keyCode === 40 ? 0 : ul.childElementCount - 1;\n var liIdx = defaultIdx;\n var li = null;\n this.removeCustomSelection();\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classNames.FOCUS)) {\n li = ul.children[i];\n liIdx = i;\n li.classList.remove(classNames.FOCUS);\n e.keyCode === 40 ? liIdx++ : liIdx--;\n if (liIdx === (e.keyCode === 40 ? ul.childElementCount : -1)) {\n liIdx = defaultIdx;\n }\n }\n }\n li = ul.children[liIdx];\n liIdx = this.isValidLI(li, liIdx, e.keyCode);\n if (liIdx !== -1) {\n addClass([ul.children[liIdx]], classNames.FOCUS);\n ul.children[liIdx].focus();\n }\n };\n DropDownButton.prototype.removeCustomSelection = function () {\n var selectedLi = this.getULElement().querySelector('.e-selected');\n if (selectedLi) {\n selectedLi.classList.remove('e-selected');\n }\n };\n DropDownButton.prototype.isValidLI = function (li, index, keyCode, count) {\n if (count === void 0) { count = 0; }\n if (li.classList.contains(classNames.SEPARATOR) || li.classList.contains(classNames.DISABLED)) {\n if (index === (keyCode === 40 ? this.items.length - 1 : 0)) {\n index = keyCode === 40 ? 0 : this.items.length - 1;\n }\n else {\n keyCode === 40 ? index++ : index--;\n }\n }\n li = this.getULElement().children[index];\n if (li.classList.contains(classNames.SEPARATOR) || li.classList.contains(classNames.DISABLED)) {\n count++;\n if (count === this.items.length) {\n return index = -1;\n }\n index = this.isValidLI(li, index, keyCode, count);\n }\n return index;\n };\n DropDownButton.prototype.keyEventHandler = function (e) {\n if (this.target && (e.keyCode === 13 || e.keyCode === 9)) {\n return;\n }\n if (e.keyCode !== 9) {\n e.preventDefault();\n }\n if (e.keyCode === 27 || e.keyCode === 38 || e.keyCode === 9) {\n if (!this.canOpen()) {\n this.closePopup(e, this.element);\n }\n }\n else {\n this.clickHandler(e);\n }\n };\n DropDownButton.prototype.getLI = function (elem) {\n return elem.tagName === 'LI' ? elem : closest(elem, 'li');\n };\n DropDownButton.prototype.mousedownHandler = function (e) {\n var trgt = e.target;\n if (!this.canOpen() && !(closest(trgt, '#' + this.getPopUpElement().id) || closest(trgt, '#' + this.element.id))) {\n this.closePopup(e);\n }\n };\n DropDownButton.prototype.clickHandler = function (e) {\n var trgt = e.target;\n var canOpen = this.canOpen();\n if (closest(trgt, '#' + this.element.id)) {\n if (canOpen) {\n this.openPopUp(e);\n }\n else {\n this.closePopup(e, this.activeElem[0]);\n }\n }\n else {\n if (closest(trgt, '#' + this.getPopUpElement().id)) {\n var eventArgs = void 0;\n var liIdx = void 0;\n var item = void 0;\n var li = this.getLI(trgt);\n if (li) {\n liIdx = Array.prototype.indexOf.call(this.getULElement().children, li);\n item = this.items[liIdx];\n if (item) {\n eventArgs = { element: li, item: item };\n this.trigger('select', eventArgs);\n }\n this.closePopup(e, this.activeElem[0]);\n }\n }\n }\n };\n DropDownButton.prototype.openPopUp = function (e) {\n if (e === void 0) { e = null; }\n if (!this.target) {\n this.getPopUpElement().appendChild(this.createItems(this.items));\n }\n var ul = this.getULElement();\n var beforeOpenArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeOpen', beforeOpenArgs);\n if (!beforeOpenArgs.cancel) {\n this.dropDown.show(null, this.element);\n addClass([this.element], 'e-active');\n this.element.setAttribute('aria-expanded', 'true');\n ul.focus();\n var openArgs = { element: ul, items: this.items };\n this.trigger('open', openArgs);\n }\n };\n DropDownButton.prototype.closePopup = function (e, focusEle) {\n if (e === void 0) { e = null; }\n var ul = this.getULElement();\n var beforeCloseArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.removeCustomSelection();\n this.dropDown.hide();\n removeClass(this.activeElem, 'e-active');\n this.element.setAttribute('aria-expanded', 'false');\n if (focusEle) {\n focusEle.focus();\n }\n var closeArgs = { element: ul, items: this.items };\n this.trigger('close', closeArgs);\n if (!this.target && ul) {\n detach(ul);\n }\n }\n };\n DropDownButton.prototype.unWireEvents = function () {\n EventHandler.remove(document, 'mousedown touchstart', this.delegateMousedownHandler);\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.getPopUpElement(), 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\n this.rippleFn();\n };\n /**\n * Called internally if any of the property value changed.\n * @param {DropDownButtonModel} newProp\n * @param {DropDownButtonModel} oldProp\n * @returns void\n * @private\n */\n DropDownButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var btnModel = ['content', 'cssClass', 'iconCss', 'iconPosition', 'disabled', 'enableRtl'];\n this.button.setProperties(getModel(newProp, btnModel));\n var popupElement = this.getPopUpElement();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!this.element.querySelector('span.e-caret')) {\n this.appendArrowSpan();\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.unWireEvents();\n if (!this.canOpen()) {\n this.closePopup();\n }\n }\n else {\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (newProp.cssClass.indexOf(classNames.VERTICAL) > -1) {\n var arrowSpan = this.element.querySelector('span.e-caret');\n classList(arrowSpan, ['e-icon-bottom'], ['e-icon-right']);\n }\n if (oldProp.cssClass) {\n removeClass([popupElement], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([popupElement], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n popupElement.classList.toggle(classNames.RTL);\n break;\n case 'target':\n this.target = newProp.target;\n detach(this.getULElement());\n popupElement.appendChild(this.getTargetElement());\n this.dropDown.content = this.getTargetElement();\n break;\n case 'items':\n this.dropDown.refresh();\n if (popupElement.classList.contains('e-popup-open')) {\n classList(popupElement, ['e-popup-close'], ['e-popup-open']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DropDownButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], DropDownButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Collection([], Item)\n ], DropDownButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"created\", void 0);\n DropDownButton = __decorate([\n NotifyPropertyChanges\n ], DropDownButton);\n return DropDownButton;\n}(Component));\nexport { DropDownButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Event, remove, addClass, removeClass, detach, getValue, setValue } from '@syncfusion/ej2-base';\nimport { EventHandler, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { attributes, getUniqueID, getInstance, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getModel, Item } from './../common/common';\nimport { DropDownButton } from '../drop-down-button/drop-down-button';\nvar RTL = 'e-rtl';\nvar TAGNAME = 'EJS-SPLITBUTTON';\n/**\n * SplitButton component has primary and secondary button. Primary button is used to select\n * default action and secondary button is used to toggle contextual overlays for displaying list of\n * action items. It can contain both text and images.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar SplitButton = /** @class */ (function (_super) {\n __extends(SplitButton, _super);\n /**\n * Constructor for creating the widget\n * @param {SplitButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function SplitButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize Angular support.\n * @private\n */\n SplitButton.prototype.preRender = function () {\n var ele = this.element;\n if (ele.tagName === TAGNAME) {\n var ejInstance = getValue('ej2_instances', ele);\n var btn = this.createElement('button', { attrs: { 'type': 'button' } });\n var wrapper = this.createElement(TAGNAME, { className: 'e-' + this.getModuleName() + '-wrapper' });\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n btn.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = btn;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.wrapper = wrapper;\n this.element = ele;\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n SplitButton.prototype.render = function () {\n this.initWrapper();\n this.createPrimaryButton();\n this.createSecondaryButton();\n this.setActiveElem([this.element, this.secondaryBtnObj.element]);\n this.setAria();\n this.wireEvents();\n };\n SplitButton.prototype.initWrapper = function () {\n if (!this.wrapper) {\n this.wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(this.wrapper, this.element);\n }\n this.element.classList.remove('e-' + this.getModuleName());\n if (this.enableRtl) {\n this.wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([this.wrapper], this.cssClass.split(' '));\n }\n };\n SplitButton.prototype.createPrimaryButton = function () {\n var btnModel = {\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n iconCss: this.iconCss,\n iconPosition: this.iconPosition,\n content: this.content,\n disabled: this.disabled\n };\n this.primaryBtnObj = new Button(btnModel);\n this.primaryBtnObj.createElement = this.createElement;\n this.primaryBtnObj.appendTo(this.element);\n this.element.classList.add('e-' + this.getModuleName());\n this.element.type = 'button';\n this.wrapper.appendChild(this.element);\n };\n SplitButton.prototype.createSecondaryButton = function () {\n var _this = this;\n var btnElem = this.createElement('button', {\n className: 'e-icon-btn',\n attrs: { 'tabindex': '-1' },\n id: this.element.id + '_dropdownbtn'\n });\n this.wrapper.appendChild(btnElem);\n var dropDownBtnModel = {\n cssClass: this.cssClass,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n items: this.items,\n target: this.target,\n beforeItemRender: function (args) {\n _this.trigger('beforeItemRender', args);\n },\n beforeOpen: function (args) {\n _this.trigger('beforeOpen', args);\n },\n beforeClose: function (args) {\n _this.trigger('beforeClose', args);\n },\n open: function (args) {\n _this.trigger('open', args);\n },\n close: function (args) {\n _this.trigger('close', args);\n },\n select: function (args) {\n _this.trigger('select', args);\n }\n };\n this.secondaryBtnObj = new DropDownButton(dropDownBtnModel);\n this.secondaryBtnObj.createElement = this.createElement;\n this.secondaryBtnObj.appendTo(btnElem);\n this.secondaryBtnObj.dropDown.relateTo = this.wrapper;\n this.dropDown = this.secondaryBtnObj.dropDown;\n this.secondaryBtnObj.activeElem = [this.element, this.secondaryBtnObj.element];\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.secondaryBtnObj.keyBoardHandler);\n this.secondaryBtnObj.element.querySelector('.e-btn-icon').classList.remove('e-icon-right');\n };\n SplitButton.prototype.setAria = function () {\n attributes(this.element, {\n 'role': 'listbox', 'aria-expanded': 'false', 'aria-haspopup': 'true',\n 'aria-label': this.element.textContent + ' splitbutton', 'aria-owns': this.secondaryBtnObj.dropDown.element.id\n });\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n SplitButton.prototype.getModuleName = function () {\n return 'split-btn';\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n * @returns void\n */\n SplitButton.prototype.toggle = function () {\n this.secondaryBtnObj.toggle();\n };\n SplitButton.prototype.destroy = function () {\n var _this = this;\n this.primaryBtnObj.destroy();\n this.secondaryBtnObj.destroy();\n var element = document.getElementById(this.element.id);\n if (element && element.parentElement === this.wrapper) {\n if (this.wrapper.tagName === TAGNAME) {\n this.wrapper.innerHTML = '';\n removeClass([this.wrapper], ['e-rtl', 'e-' + this.getModuleName() + '-wrapper']);\n removeClass([this.wrapper], this.cssClass.split(' '));\n }\n else {\n removeClass([this.element], ['e-' + this.getModuleName(), RTL]);\n ['role', 'aria-label', 'aria-haspopup', 'aria-expanded', 'aria-owns', 'type'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n this.wrapper.parentNode.insertBefore(this.element, this.wrapper);\n remove(this.wrapper);\n }\n this.unWireEvents();\n }\n };\n SplitButton.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.primaryBtnClickHandler, this);\n EventHandler.add(this.getPopUpElement(), 'keydown', this.keyBoardHandler, this);\n new KeyboardEvents(this.element, {\n keyAction: this.btnKeyBoardHandler.bind(this),\n keyConfigs: {\n altdownarrow: 'alt+downarrow'\n }\n });\n };\n SplitButton.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.primaryBtnClickHandler);\n getInstance(this.element, KeyboardEvents).destroy();\n };\n SplitButton.prototype.primaryBtnClickHandler = function () {\n this.trigger('click', { element: this.element });\n };\n SplitButton.prototype.btnKeyBoardHandler = function (e) {\n switch (e.action) {\n case 'altdownarrow':\n this.clickHandler(e);\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {SplitButtonModel} newProp\n * @param {SplitButtonModel} oldProp\n * @returns void\n */\n SplitButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var model = ['content', 'iconCss', 'iconPosition', 'cssClass', 'disabled', 'enableRtl'];\n this.primaryBtnObj.setProperties(getModel(newProp, model));\n model = ['items', 'beforeOpen', 'beforeItemRender', 'select', 'open',\n 'close', 'cssClass', 'disabled', 'enableRtl'];\n this.secondaryBtnObj.setProperties(getModel(newProp, model));\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.wrapper], oldProp.cssClass.split(' '));\n }\n addClass([this.wrapper], newProp.cssClass.split(' '));\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.wrapper], RTL);\n }\n else {\n removeClass([this.wrapper], RTL);\n }\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], SplitButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], SplitButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], SplitButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Collection([], Item)\n ], SplitButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"created\", void 0);\n SplitButton = __decorate([\n NotifyPropertyChanges\n ], SplitButton);\n return SplitButton;\n}(DropDownButton));\nexport { SplitButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { EventHandler, Property, NotifyPropertyChanges, Animation, attributes } from '@syncfusion/ej2-base';\nimport { Event, remove, removeClass } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar HIDESPINNER = 'e-hide-spinner';\nvar PROGRESS = 'e-progress';\nvar PROGRESSACTIVE = 'e-progress-active';\nvar CONTENTCLS = 'e-btn-content';\n/**\n * The progress button visualizes the progression of an operation to indicate the user that a process is happening in the background.\n * The progress can be shown with graphics accompanied by a textual representation.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar ProgressButton = /** @class */ (function (_super) {\n __extends(ProgressButton, _super);\n /**\n * Constructor for creating the widget\n * @param {ProgressButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function ProgressButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.step = 1;\n return _this;\n }\n ProgressButton.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n /**\n * Initialize the Component rendering\n * @returns void\n * @private\n */\n ProgressButton.prototype.render = function () {\n _super.prototype.render.call(this);\n this.init();\n this.wireEvents();\n this.setAria();\n };\n /**\n * Starts the button progress at the specified percent.\n * @param percent\n * @returns void\n */\n ProgressButton.prototype.start = function (percent) {\n this.isPaused = false;\n this.startProgress(percent ? percent : this.percent, this.progressTime);\n };\n /**\n * Stops the button progress.\n * @returns void\n */\n ProgressButton.prototype.stop = function () {\n this.isPaused = true;\n cancelAnimationFrame(this.timerId);\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n ProgressButton.prototype.getModuleName = function () {\n return 'progress-btn';\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n ProgressButton.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unWireEvents();\n this.element.innerHTML = '';\n removeClass([this.element], [HIDESPINNER, PROGRESSACTIVE, 'e-round-corner', 'e-' + _super.prototype.getModuleName.call(this)]);\n };\n ProgressButton.prototype.init = function () {\n this.element.classList.add('e-' + _super.prototype.getModuleName.call(this));\n this.setContent();\n this.createSpinner();\n if (this.enableProgress) {\n this.createProgress();\n }\n };\n ProgressButton.prototype.createSpinner = function () {\n var spinner = this.createElement('span', { className: 'e-spinner' });\n this.setSpinPosition(spinner);\n createSpinner({\n target: spinner, width: this.spinSettings.width || 16, template: this.spinSettings.template\n }, this.createElement);\n };\n ProgressButton.prototype.setSpinPosition = function (ele) {\n var position = this.spinSettings.position || 'Left';\n if (position === 'Left' || position === 'Top') {\n this.element.insertBefore(ele, this.element.getElementsByClassName(CONTENTCLS)[0]);\n }\n else {\n this.element.appendChild(ele);\n }\n this.element.classList.add('e-spin-' + position.toLowerCase());\n };\n ProgressButton.prototype.createProgress = function () {\n this.element.appendChild(this.createElement('span', { className: PROGRESS }));\n };\n ProgressButton.prototype.setContent = function () {\n var cont = this.element.innerHTML;\n this.element.innerHTML = '';\n this.element.appendChild(this.createElement('span', { className: CONTENTCLS, innerHTML: cont }));\n };\n ProgressButton.prototype.clickHandler = function () {\n if (this.element.classList.contains(PROGRESSACTIVE)) {\n return;\n }\n this.startProgress();\n };\n ProgressButton.prototype.startProgress = function (percent, progressTime) {\n var _this = this;\n var ele;\n var clsList = this.element.classList;\n var isVertical = clsList.contains('e-vertical');\n clsList.add(PROGRESSACTIVE);\n if (!(clsList.contains(HIDESPINNER))) {\n showSpinner(this.element);\n if (!this.enableProgress) {\n setTimeout(function () {\n _this.hideSpin();\n // tslint:disable-next-line\n }, this.duration);\n }\n }\n if (this.enableProgress) {\n ele = this.element.getElementsByClassName(PROGRESS)[0];\n this.startAnimate(Date.now(), progressTime ? progressTime : 0, progressTime ? Date.now() - (this.duration * 1 / 100) : Date.now(), ele, percent ? percent : 0, 0, this.step, 0, isVertical);\n }\n this.startContAnimate();\n };\n ProgressButton.prototype.startAnimate = function (timestamp, progressTime, prevTime, ele, percent, prevPercent, step, prevProgressTime, isVertical) {\n var _this = this;\n try {\n var args_1;\n var timeDiff = timestamp - prevTime;\n var stepTime = this.duration * step / 100;\n var timeDiffBuffer = timeDiff ? (timeDiff < stepTime ? timeDiff - stepTime : timeDiff % stepTime) : 0;\n this.progressTime = progressTime = progressTime + timeDiff - timeDiffBuffer;\n prevTime = timestamp - timeDiffBuffer;\n percent = percent + (timeDiff - timeDiffBuffer) / this.duration * 100;\n prevPercent = ((progressTime - prevProgressTime) % stepTime === 0 || percent === 100) ? percent : prevPercent;\n args_1 = { percent: prevPercent, currentDuration: progressTime, step: step };\n if (percent === 0) {\n this.trigger('begin', args_1);\n }\n else if (percent === 100 || progressTime === this.duration) {\n this.trigger('end', args_1);\n }\n else {\n this.trigger('progress', args_1);\n }\n if (percent !== args_1.percent && args_1.percent !== prevPercent) {\n percent = args_1.percent;\n }\n this.percent = percent;\n this.step = args_1.step;\n if ((progressTime - prevProgressTime) % (this.duration * args_1.step / 100) === 0 || percent === 100) {\n this.timerId = requestAnimationFrame(function () {\n ele.style[isVertical ? 'height' : 'width'] = percent + '%';\n _this.element.setAttribute('aria-valuenow', percent.toString());\n });\n prevPercent = percent;\n prevProgressTime = progressTime;\n }\n if (!this.isPaused) {\n if (progressTime < this.duration && percent < 100) {\n setTimeout(function () {\n _this.startAnimate(Date.now(), progressTime, prevTime, ele, percent, prevPercent, args_1.step, prevProgressTime, isVertical);\n // tslint:disable-next-line\n }, (this.duration / 100) - timeDiffBuffer);\n }\n else {\n setTimeout(function () {\n _this.progressTime = _this.percent = 0;\n ele.style[isVertical ? 'height' : 'width'] = '0%';\n _this.element.setAttribute('aria-valuenow', '0');\n _this.hideSpin();\n // tslint:disable-next-line\n }, 100);\n }\n }\n }\n catch (e) {\n cancelAnimationFrame(this.timerId);\n this.trigger('fail', e);\n }\n };\n ProgressButton.prototype.startContAnimate = function () {\n var _this = this;\n var ele = this.element.getElementsByClassName(CONTENTCLS)[0];\n if (this.animationSettings.effect !== 'None') {\n (new Animation({})).animate(ele, {\n duration: this.animationSettings.duration,\n name: 'Progress' + this.animationSettings.effect,\n timingFunction: this.animationSettings.easing,\n begin: function () {\n if (_this.spinSettings.position === 'Center') {\n _this.setSpinnerSize();\n }\n },\n end: function () {\n ele.classList.add('e-animate-end');\n }\n });\n }\n else if (this.spinSettings.position === 'Center') {\n this.setSpinnerSize();\n }\n };\n ProgressButton.prototype.setSpinnerSize = function () {\n var ele = this.element.getElementsByClassName(CONTENTCLS)[0];\n var spinner = this.element.getElementsByClassName('e-spinner')[0];\n spinner.style.width = Math.max(spinner.offsetWidth, ele.offsetWidth) + 'px';\n spinner.style.height = Math.max(spinner.offsetHeight, ele.offsetHeight) + 'px';\n ele.classList.add('e-cont-animate');\n };\n ProgressButton.prototype.hideSpin = function () {\n var cont = this.element.getElementsByClassName(CONTENTCLS)[0];\n if (!(this.element.classList.contains(HIDESPINNER))) {\n hideSpinner(this.element);\n }\n this.element.classList.remove(PROGRESSACTIVE);\n if (this.animationSettings.effect !== 'None') {\n cont.classList.remove('e-animate-end');\n }\n if (this.spinSettings.position === 'Center') {\n var ele = this.element.getElementsByClassName('e-spinner')[0];\n cont.classList.remove('e-cont-animate');\n ele.style.width = 'auto';\n ele.style.height = 'auto';\n }\n };\n ProgressButton.prototype.setIconSpan = function () {\n var cont = this.element.getElementsByClassName(CONTENTCLS)[0];\n var iconSpan = this.element.getElementsByClassName('e-btn-icon')[0];\n if (cont.childNodes[0] && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n cont.insertBefore(iconSpan, cont.childNodes[0]);\n }\n else {\n cont.appendChild(iconSpan);\n }\n };\n ProgressButton.prototype.setAria = function () {\n attributes(this.element, {\n 'aria-label': this.element.textContent + ' progress', 'aria-valuemin': '0', 'aria-valuemax': '100', 'aria-valuenow': '0'\n });\n };\n ProgressButton.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n };\n ProgressButton.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n };\n /**\n * Called internally if any of the property value changed.\n * @param {ProgressButton} newProp\n * @param {ProgressButton} oldProp\n * @returns void\n * @private\n */\n ProgressButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n this.setContent();\n this.createSpinner();\n if (this.enableProgress) {\n this.createProgress();\n }\n this.element.setAttribute('aria-label', this.element.textContent + ' progress');\n break;\n case 'iconCss':\n if (!oldProp.iconCss) {\n this.setIconSpan();\n }\n break;\n case 'iconPosition':\n this.setIconSpan();\n break;\n case 'enableProgress':\n if (newProp.enableProgress) {\n this.createProgress();\n }\n else {\n remove(this.element.getElementsByClassName(PROGRESS)[0]);\n }\n break;\n }\n }\n };\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"enableProgress\", void 0);\n __decorate([\n Property(2000)\n ], ProgressButton.prototype, \"duration\", void 0);\n __decorate([\n Property('Left')\n ], ProgressButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], ProgressButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], ProgressButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], ProgressButton.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"isToggle\", void 0);\n __decorate([\n Property({ template: null, width: 16, position: 'Left' })\n ], ProgressButton.prototype, \"spinSettings\", void 0);\n __decorate([\n Property({ duration: 400, effect: 'None', easing: 'ease' })\n ], ProgressButton.prototype, \"animationSettings\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"fail\", void 0);\n ProgressButton = __decorate([\n NotifyPropertyChanges\n ], ProgressButton);\n return ProgressButton;\n}(Button));\nexport { ProgressButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Event, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, closest, detach, EventHandler, getInstance, select, selectAll, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, attributes, classList, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { SplitButton, getModel } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, getZindexPartial, Popup } from '@syncfusion/ej2-popups';\nimport { Input } from './../input/index';\nimport { NumericTextBox } from './../numerictextbox/index';\nimport { Slider } from './../slider/slider';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar CURRENT = 'e-current';\nvar CONTAINER = 'e-container';\nvar CTRLBTN = 'e-ctrl-btn';\nvar CTRLSWITCH = 'e-switch-ctrl-btn';\nvar DISABLED = 'e-disabled';\nvar FORMATSWITCH = 'e-value-switch-btn';\nvar HANDLER = 'e-handler';\nvar HEX = 'e-hex';\nvar HIDEHEX = 'e-hide-hex-value';\nvar HIDEOPACITY = 'e-hide-opacity';\nvar HIDERGBA = 'e-hide-switchable-value';\nvar HIDEVALUE = 'e-hide-value';\nvar HIDEVALUESWITCH = 'e-hide-valueswitcher';\nvar HSVAREA = 'e-hsv-color';\nvar HSVCONTAINER = 'e-hsv-container';\nvar INPUTWRAPPER = 'e-selected-value';\nvar MODESWITCH = 'e-mode-switch-btn';\nvar NOCOLOR = 'e-nocolor-item';\nvar OPACITY = 'e-opacity-value';\nvar PALETTES = 'e-palette';\nvar PALETTECONTENT = 'e-color-palette';\nvar PICKERCONTENT = 'e-color-picker';\nvar PREVIEW = 'e-preview-container';\nvar PREVIOUS = 'e-previous';\nvar RTL = 'e-rtl';\nvar SHOWVALUE = 'e-show-value';\nvar SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar presets = {\n default: ['#000000', '#f44336', '#e91e63', '#9c27b0', '#673ab7', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#ffeb3b',\n '#ffffff', '#ffebee', '#fce4ec', '#f3e5f5', '#ede7f6', '#e3f2fd', '#e1f5fe', '#e0f7fa', '#e0f2f1', '#fffde7',\n '#f2f2f2', '#ffcdd2', '#f8bbd0', '#e1bee7', '#d1c4e9', '#bbdefb', '#b3e5fc', '#b2ebf2', '#b2dfdb', '#fff9c4',\n '#e6e6e6', '#ef9a9a', '#f48fb1', '#ce93d8', '#b39ddb', '#90caf9', '#81d4fa', '#80deea', '#80cbc4', '#fff59d',\n '#cccccc', '#e57373', '#f06292', '#ba68c8', '#9575cd', '#64b5f6', '#4fc3f7', '#4dd0e1', '#4db6ac', '#fff176',\n '#b3b3b3', '#ef5350', '#ec407a', '#ab47bc', '#7e57c2', '#42a5f5', '#29b6f6', '#26c6da', '#26a69a', '#ffee58',\n '#999999', '#e53935', '#d81b60', '#8e24aa', '#5e35b1', '#1e88e5', '#039be5', '#00acc1', '#00897b', '#fdd835',\n '#808080', '#d32f2f', '#c2185b', '#7b1fa2', '#512da8', '#1976d2', '#0288d1', '#0097a7', '#00796b', '#fbc02d',\n '#666666', '#c62828', '#ad1457', '#6a1b9a', '#4527a0', '#1565c0', '#0277bd', '#00838f', '#00695c', '#f9a825',\n '#4d4d4d', '#b71c1c', '#880e4f', '#4a148c', '#311b92', '#0d47a1', '#01579b', '#006064', '#004d40', '#f57f17']\n};\n/**\n * ColorPicker component is a user interface to select and adjust color values. It provides supports for various\n * color specification like Red Green Blue, Hue Saturation Value and Hex codes.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n };\n /**\n * To Initialize the component rendering\n * @private\n */\n ColorPicker.prototype.render = function () {\n this.initWrapper();\n if (this.inline) {\n this.createWidget();\n }\n else {\n this.createSplitBtn();\n }\n if (!this.enableOpacity) {\n addClass([this.container.parentElement], HIDEOPACITY);\n }\n };\n ColorPicker.prototype.initWrapper = function () {\n var wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(wrapper, this.element);\n wrapper.appendChild(this.element);\n attributes(this.element, { 'tabindex': '-1', 'spellcheck': 'false' });\n this.container = this.createElement('div', { className: CONTAINER });\n this.getWrapper().appendChild(this.container);\n var value = this.value ? this.roundValue(this.value).toLowerCase() : '#008000ff';\n this.element.value = value.slice(0, 7);\n this.setProperties({ 'value': value }, true);\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n this.tileRipple = rippleEffect(this.container, { selector: '.' + TILE });\n this.ctrlBtnRipple = rippleEffect(this.container, { selector: '.e-btn' });\n };\n ColorPicker.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n ColorPicker.prototype.createWidget = function () {\n if (this.mode === 'Palette') {\n this.createPalette();\n if (!this.inline) {\n this.firstPaletteFocus();\n }\n }\n else {\n this.createPicker();\n if (!this.inline) {\n this.getDragHandler().focus();\n }\n }\n this.isRgb = true;\n this.createInput();\n this.createCtrlBtn();\n if (!this.disabled) {\n this.wireEvents();\n }\n if (this.inline && this.disabled) {\n this.toggleDisabled(true);\n }\n if (Browser.isDevice) {\n this.refreshPopupPos();\n }\n };\n ColorPicker.prototype.createSplitBtn = function () {\n var _this = this;\n var splitButton = this.createElement('button', { className: 'e-split-colorpicker' });\n this.getWrapper().appendChild(splitButton);\n this.splitBtn = new SplitButton({\n iconCss: 'e-selected-color',\n target: this.container,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n beforeOpen: this.beforeOpenFn.bind(this),\n open: this.onOpen.bind(this),\n beforeClose: this.beforePopupClose.bind(this),\n click: function (args) {\n _this.trigger('change', {\n currentValue: { hex: _this.value.slice(0, 7), rgba: _this.convertToRgbString(_this.hexToRgb(_this.value)) },\n previousValue: { hex: null, rgba: null }\n });\n }\n });\n this.splitBtn.createElement = this.createElement;\n this.splitBtn.appendTo(splitButton);\n var preview = this.createElement('span', { className: SPLITPREVIEW });\n select('.e-selected-color', splitButton).appendChild(preview);\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(this.value));\n var popupEle = this.getPopupEle();\n addClass([popupEle], 'e-colorpicker-popup');\n if (this.cssClass) {\n addClass([popupEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n var popupInst = this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(this.splitBtn.element).toString();\n }\n };\n ColorPicker.prototype.onOpen = function (args) {\n this.trigger('open', { element: this.container });\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.beforeOpenFn = function (args) {\n var beforeOpenArgs = { element: this.container, event: args.event, cancel: false };\n this.trigger('beforeOpen', beforeOpenArgs);\n args.cancel = beforeOpenArgs.cancel;\n if (!args.cancel) {\n var popupEle = this.getPopupEle();\n popupEle.style.top = formatUnit(0 + pageYOffset);\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.display = 'block';\n this.createWidget();\n popupEle.style.display = '';\n if (Browser.isDevice) {\n this.modal = this.createElement('div');\n this.modal.className = 'e-' + this.getModuleName() + ' e-modal';\n this.modal.style.display = 'none';\n document.body.insertBefore(this.modal, popupEle);\n document.body.className += ' e-colorpicker-overflow';\n this.modal.style.display = 'block';\n this.modal.style.zIndex = (Number(popupEle.style.zIndex) - 1).toString();\n }\n }\n };\n ColorPicker.prototype.beforePopupClose = function (args) {\n if (!isNullOrUndefined(args.event)) {\n var beforeCloseArgs = { element: this.container, event: args.event, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (Browser.isDevice && args.event.target === this.modal) {\n beforeCloseArgs.cancel = true;\n }\n args.cancel = beforeCloseArgs.cancel;\n if (!args.cancel) {\n this.onPopupClose();\n }\n }\n };\n ColorPicker.prototype.onPopupClose = function () {\n this.unWireEvents();\n this.destroyOtherComp();\n this.container.style.width = '';\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n this.container.innerHTML = '';\n removeClass([this.container], [PICKERCONTENT, PALETTECONTENT]);\n if (Browser.isDevice && this.modal) {\n removeClass([document.body], 'e-colorpicker-overflow');\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n ColorPicker.prototype.createPalette = function () {\n classList(this.container, [PALETTECONTENT], [PICKERCONTENT]);\n if (this.presetColors) {\n var paletteGroup = this.createElement('div', { className: 'e-custom-palette' });\n this.appendElement(paletteGroup);\n var keys = Object.keys(this.presetColors);\n if (keys.length === 1) {\n this.appendPalette(this.presetColors[keys[0]], keys[0], paletteGroup);\n }\n else {\n for (var i = 0, len = keys.length; i < len; i++) {\n this.appendPalette(this.presetColors[keys[i]], keys[i], paletteGroup);\n }\n }\n if (selectAll('.e-row', paletteGroup).length > 10) {\n addClass([paletteGroup], 'e-palette-group');\n }\n }\n else {\n this.appendPalette(presets.default, 'default');\n }\n if (this.mode === 'Palette' && !this.modeSwitcher && this.noColor) {\n this.setNoColor();\n }\n var width = parseInt(getComputedStyle(this.container).borderBottomWidth, 10);\n this.container.style.width = formatUnit(this.container.children[0].offsetWidth + width + width);\n this.rgb = this.hexToRgb(this.roundValue(this.value));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n };\n ColorPicker.prototype.firstPaletteFocus = function () {\n if (!select('.' + SELECT, this.container.children[0])) {\n selectAll('.' + PALETTES, this.container)[0].focus();\n }\n };\n ColorPicker.prototype.appendPalette = function (colors, key, refEle) {\n var palette = this.createElement('div', { className: PALETTES, attrs: { 'tabindex': '0' } });\n if (refEle) {\n refEle.appendChild(palette);\n }\n else {\n this.appendElement(palette);\n }\n var row;\n var tile;\n var roundedColor;\n for (var i = 0, len = colors.length; i < len; i++) {\n if (i === 0 || i % this.columns === 0) {\n row = this.createElement('div', {\n className: 'e-row', attrs: { 'role': 'row' }\n });\n palette.appendChild(row);\n }\n roundedColor = this.roundValue(colors[i]).toLowerCase();\n tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': roundedColor, 'aria-selected': 'false' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value === roundedColor) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = this.convertToRgbString(this.hexToRgb(roundedColor));\n }\n };\n ColorPicker.prototype.setNoColor = function () {\n var noColorEle = selectAll('.e-row')[0].children[0];\n noColorEle.classList.add(NOCOLOR);\n if (!this.value) {\n noColorEle.classList.add(SELECT);\n closest(noColorEle, '.' + PALETTES).focus();\n }\n ['aria-selected', 'aria-label'].forEach(function (attr) { noColorEle.removeAttribute(attr); });\n noColorEle.style.backgroundColor = '';\n };\n ColorPicker.prototype.appendElement = function (ele, insertPos) {\n if (insertPos === void 0) { insertPos = 0; }\n var refEle = this.container.children[insertPos];\n refEle ? this.container.insertBefore(ele, refEle) : this.container.appendChild(ele);\n };\n ColorPicker.prototype.addTileSelection = function (ele) {\n ele.classList.add(SELECT);\n ele.setAttribute('aria-selected', 'true');\n };\n ColorPicker.prototype.createPicker = function () {\n classList(this.container, [PICKERCONTENT], [PALETTECONTENT]);\n var hsvContainer = this.createElement('div', { className: HSVCONTAINER });\n this.appendElement(hsvContainer);\n hsvContainer.appendChild(this.createElement('div', { className: HSVAREA }));\n var dragHandler = this.createElement('span', { className: HANDLER, attrs: { 'tabindex': '0' } });\n hsvContainer.appendChild(dragHandler);\n this.rgb = this.hexToRgb(this.value);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHsvContainerBg();\n this.setHandlerPosition();\n this.createSlider();\n this.createDragTooltip();\n };\n ColorPicker.prototype.setHsvContainerBg = function (h) {\n if (h === void 0) { h = this.hsv[0]; }\n this.getHsvContainer().style.backgroundColor = this.convertToRgbString(this.hsvToRgb(h, 100, 100, 1));\n };\n ColorPicker.prototype.getHsvContainer = function () {\n return select('.' + HSVCONTAINER, this.container);\n };\n ColorPicker.prototype.setHandlerPosition = function () {\n var dragHandler = this.getDragHandler();\n var hsvArea = select('.' + HSVAREA, this.container);\n if (this.enableRtl) {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * Math.abs(100 - this.hsv[1]) / 100);\n }\n else {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * this.hsv[1] / 100);\n }\n dragHandler.style.top = formatUnit(hsvArea.offsetHeight * (100 - this.hsv[2]) / 100);\n };\n ColorPicker.prototype.createSlider = function () {\n var sliderPreviewWrapper = this.createElement('div', { className: 'e-slider-preview' });\n this.appendElement(sliderPreviewWrapper, 1);\n this.createPreview(sliderPreviewWrapper);\n var sliderWrapper = this.createElement('div', { className: 'e-colorpicker-slider' });\n sliderPreviewWrapper.insertBefore(sliderWrapper, sliderPreviewWrapper.children[0]);\n var slider = this.createElement('div', { className: 'e-hue-slider' });\n sliderWrapper.appendChild(slider);\n this.hueSlider = new Slider({\n value: this.hsv[0],\n min: 0,\n max: 359,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.hueChange.bind(this)\n });\n this.hueSlider.createElement = this.createElement;\n this.hueSlider.appendTo(slider);\n if (this.enableOpacity) {\n slider = this.createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(slider);\n this.createOpacitySlider(slider);\n }\n };\n ColorPicker.prototype.createOpacitySlider = function (slider) {\n this.opacitySlider = new Slider({\n value: this.rgb[3] * 100,\n min: 0,\n max: 100,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.opacityChange.bind(this)\n });\n this.opacitySlider.createElement = this.createElement;\n this.opacitySlider.appendTo(slider);\n var opacityBgTrack = this.createElement('div', { className: 'e-opacity-empty-track' });\n slider.appendChild(opacityBgTrack);\n this.updateOpacitySliderBg();\n };\n ColorPicker.prototype.updateOpacitySliderBg = function () {\n var direction = this.enableRtl ? 'to left' : 'to right';\n select('.e-slider-track', this.opacitySlider.element).style.background =\n 'linear-gradient(' + direction + ', rgba(' + this.rgb.slice(0, 3) + ', 0) 0%, ' +\n this.convertToRgbString(this.rgb.slice(0, 3)) + ' 100%)';\n };\n ColorPicker.prototype.hueChange = function (args) {\n this.hsv[0] = args.value;\n this.setHsvContainerBg();\n this.convertToOtherFormat();\n };\n ColorPicker.prototype.opacityChange = function (args) {\n var value = args.value;\n var pValue = this.rgbToHex(this.rgb);\n this.hsv[3] = value / 100;\n this.rgb[3] = value / 100;\n var cValue = this.rgbToHex(this.rgb);\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n getInstance(select('.' + OPACITY, this.container), NumericTextBox).value = value;\n }\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\n };\n ColorPicker.prototype.createPreview = function (parentEle) {\n var previewContainer = this.createElement('div', { className: PREVIEW });\n parentEle.appendChild(previewContainer);\n var preview = this.createElement('span', { className: 'e-preview ' + CURRENT });\n previewContainer.appendChild(preview);\n var colorValue = this.convertToRgbString(this.rgb);\n preview.style.backgroundColor = colorValue;\n preview = this.createElement('span', { className: 'e-preview ' + PREVIOUS });\n previewContainer.appendChild(preview);\n preview.style.backgroundColor = colorValue;\n };\n ColorPicker.prototype.isPicker = function () {\n return !this.container.classList.contains(PALETTECONTENT);\n };\n ColorPicker.prototype.getPopupEle = function () {\n return this.container.parentElement;\n };\n ColorPicker.prototype.createNumericInput = function (element, value, label, max) {\n var _this = this;\n var numericInput = new NumericTextBox({\n value: value,\n placeholder: label,\n min: 0,\n max: max,\n format: '###.##',\n showSpinButton: false,\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true,\n change: function (args) {\n if (args.event) {\n _this.inputHandler(args.event);\n }\n }\n });\n numericInput.createElement = this.createElement;\n numericInput.appendTo(element);\n };\n ColorPicker.prototype.createInput = function () {\n var isPicker = this.isPicker();\n var wrapper = this.getWrapper();\n if ((isPicker && !wrapper.classList.contains(HIDEVALUE)) || (!isPicker && wrapper.classList.contains(SHOWVALUE))) {\n var inputWrap = this.createElement('div', { className: INPUTWRAPPER });\n isPicker ? this.appendElement(inputWrap, 2) : this.appendElement(inputWrap, 1);\n var container = this.createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n if (!wrapper.classList.contains(HIDEVALUESWITCH)) {\n this.appendValueSwitchBtn(inputWrap);\n }\n if (!wrapper.classList.contains(HIDEHEX)) {\n var hexInput = this.createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false' }\n });\n container.appendChild(hexInput);\n Input.createInput({\n element: hexInput,\n floatLabelType: 'Always',\n properties: {\n placeholder: 'HEX',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true\n }\n }, this.createElement);\n Input.setValue(this.value.slice(0, 7), hexInput);\n hexInput.addEventListener('input', this.inputHandler.bind(this));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n var label = void 0;\n var value = void 0;\n if (this.isRgb) {\n label = 'RGB';\n value = this.rgb;\n }\n else {\n label = 'HSV';\n value = this.hsv;\n }\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: 'e-' + clsName[i] + '-value' })), value[i], label[i], 255);\n }\n if (this.enableOpacity) {\n this.appendOpacityValue(container);\n }\n }\n }\n };\n ColorPicker.prototype.appendOpacityValue = function (container) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: OPACITY })), this.rgb[3] * 100, 'A', 100);\n };\n ColorPicker.prototype.appendValueSwitchBtn = function (targetEle) {\n var valueSwitchBtn = this.createElement('button', { className: 'e-icons e-btn e-flat e-icon-btn ' + FORMATSWITCH });\n targetEle.appendChild(valueSwitchBtn);\n if (this.isPicker() && !this.getWrapper().classList.contains(HIDERGBA)) {\n valueSwitchBtn.addEventListener('click', this.formatSwitchHandler.bind(this));\n }\n };\n ColorPicker.prototype.createCtrlBtn = function () {\n if (this.modeSwitcher || this.showButtons) {\n this.l10n.setLocale(this.locale);\n var btnWrapper = this.createElement('div', { className: CTRLSWITCH });\n this.container.appendChild(btnWrapper);\n if (this.showButtons) {\n var controlBtnWrapper = this.createElement('div', { className: CTRLBTN });\n btnWrapper.appendChild(controlBtnWrapper);\n var apply = this.l10n.getConstant('Apply');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: apply,\n className: 'e-btn e-flat e-primary e-small ' + APPLY,\n attrs: { 'title': apply }\n }));\n var cancel = this.l10n.getConstant('Cancel');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: cancel,\n className: 'e-btn e-flat e-small ' + CANCEL,\n attrs: { 'title': cancel }\n }));\n }\n if (this.modeSwitcher) {\n this.appendModeSwitchBtn();\n }\n }\n };\n ColorPicker.prototype.appendModeSwitchBtn = function () {\n var modeSwitcher = this.createElement('button', {\n className: 'e-icons e-btn e-flat e-icon-btn ' + MODESWITCH, attrs: { title: this.l10n.getConstant('ModeSwitcher') }\n });\n select('.' + CTRLSWITCH, this.container).insertBefore(modeSwitcher, select('.' + CTRLBTN, this.container));\n };\n ColorPicker.prototype.createDragTooltip = function () {\n var _this = this;\n var tooltip = new Tooltip({\n opensOn: 'Custom',\n showTipPointer: false,\n cssClass: 'e-color-picker-tooltip',\n beforeOpen: function (args) {\n _this.tooltipEle = args.element;\n },\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n tooltip.createElement = this.createElement;\n tooltip.appendTo(this.container);\n tooltip.open(this.container);\n this.tooltipEle.style.zIndex = getZindexPartial(this.tooltipEle).toString();\n select('.e-tip-content', this.tooltipEle).appendChild(this.createElement('div', { className: 'e-tip-transparent' }));\n };\n ColorPicker.prototype.getTooltipInst = function () {\n return getInstance(this.container, Tooltip);\n };\n ColorPicker.prototype.setTooltipOffset = function (value) {\n this.getTooltipInst().offsetY = value;\n };\n ColorPicker.prototype.toggleDisabled = function (enable) {\n enable ? this.getWrapper().classList.add(DISABLED) : this.getWrapper().classList.remove(DISABLED);\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n enable ? attributes(ele, { 'disabled': '' }) : ele.removeAttribute('disabled');\n });\n }\n };\n ColorPicker.prototype.convertToRgbString = function (rgb) {\n return rgb.length ? rgb.length === 4 ? 'rgba(' + rgb.join() + ')' : 'rgb(' + rgb.join() + ')' : '';\n };\n ColorPicker.prototype.convertToHsvString = function (hsv) {\n return hsv.length === 4 ? 'hsva(' + hsv.join() + ')' : 'hsv(' + hsv.join() + ')';\n };\n ColorPicker.prototype.updateHsv = function () {\n this.hsv[1] = this.hsv[1] > 100 ? 100 : this.hsv[1];\n this.hsv[2] = this.hsv[2] > 100 ? 100 : this.hsv[2];\n this.setHandlerPosition();\n };\n ColorPicker.prototype.convertToOtherFormat = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hsvToRgb.apply(this, this.hsv);\n var cValue = this.rgbToHex(this.rgb);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.updateInput(cValue);\n this.triggerEvent(cValue, pValue, rgba, isKey);\n };\n ColorPicker.prototype.updateInput = function (value) {\n var wrapper = this.getWrapper();\n if (!wrapper.classList.contains(HIDEVALUE)) {\n if (!wrapper.classList.contains(HIDEHEX)) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n if (this.isRgb) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n if (this.enableOpacity) {\n this.updateOpacitySliderBg();\n }\n select('.e-tip-transparent', this.tooltipEle).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + PREVIOUS, this.container).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n };\n ColorPicker.prototype.getDragHandler = function () {\n return select('.' + HANDLER, this.container);\n };\n ColorPicker.prototype.removeTileSelection = function () {\n var selectedEle = [].slice.call(selectAll('.' + SELECT, this.container.children[0]));\n selectedEle.forEach(function (ele) {\n ele.classList.remove(SELECT);\n ele.setAttribute('aria-selected', 'false');\n });\n };\n ColorPicker.prototype.convertRgbToNumberArray = function (value) {\n return (value.slice(value.indexOf('(') + 1, value.indexOf(')'))).split(',').map(function (n, i) {\n return (i !== 3) ? parseInt(n, 10) : parseFloat(n);\n });\n };\n /**\n * To get color value in specified type.\n * @param value - Specify the color value.\n * @param type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @return {string}\n */\n ColorPicker.prototype.getValue = function (value, type) {\n if (!value) {\n value = this.value;\n }\n type = !type ? 'hex' : type.toLowerCase();\n if (value[0] === 'r') {\n var cValue = this.convertRgbToNumberArray(value);\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue.slice(0, 3)));\n }\n else {\n if (type === 'hsva') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n if (value[0] === 'h') {\n var cValue = this.hsvToRgb.apply(this, this.convertRgbToNumberArray(value));\n if (type === 'rgba') {\n return this.convertToRgbString(cValue);\n }\n else {\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'rgb') {\n return this.convertToRgbString(cValue.slice(0, 3));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n value = this.roundValue(value);\n var rgb = this.hexToRgb(value);\n if (type === 'rgb' || type === 'hsv') {\n rgb = rgb.slice(0, 3);\n }\n if (type === 'rgba' || type === 'rgb') {\n return this.convertToRgbString(rgb);\n }\n else {\n if (type === 'hsva' || type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, rgb));\n }\n else {\n if (type === 'hex') {\n return value.slice(0, 7);\n }\n else {\n if (type === 'a') {\n return rgb[3].toString();\n }\n else {\n return 'null';\n }\n }\n }\n }\n }\n }\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n * @method toggle\n * @return {void}\n */\n ColorPicker.prototype.toggle = function () {\n this.splitBtn.toggle();\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n ColorPicker.prototype.getModuleName = function () {\n return 'colorpicker';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n ColorPicker.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ColorPicker.prototype.wireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.add(dragHandler, 'keydown', this.pickerKeyDown, this);\n EventHandler.add(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown, this);\n if (this.modeSwitcher || this.showButtons) {\n this.addCtrlSwitchEvent();\n }\n EventHandler.add(select('.' + PREVIOUS, this.container), 'click', this.previewHandler, this);\n }\n else {\n EventHandler.add(this.container, 'click', this.paletteClickHandler, this);\n EventHandler.add(this.container, 'keydown', this.paletteKeyDown, this);\n }\n };\n ColorPicker.prototype.addCtrlSwitchEvent = function () {\n EventHandler.add(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler, this);\n };\n ColorPicker.prototype.pickerKeyDown = function (e) {\n switch (e.keyCode) {\n case 39:\n this.handlerDragPosition(1, this.enableRtl ? -1 : 1, e);\n break;\n case 37:\n this.handlerDragPosition(1, this.enableRtl ? 1 : -1, e);\n break;\n case 38:\n this.handlerDragPosition(2, 1, e);\n break;\n case 40:\n this.handlerDragPosition(2, -1, e);\n break;\n case 13:\n e.preventDefault();\n var cValue = this.rgbToHex(this.rgb);\n this.enterKeyHandler(cValue, e);\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value, e) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.closePopup = function (e) {\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.toggle();\n this.onPopupClose();\n }\n };\n ColorPicker.prototype.triggerChangeEvent = function (value) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) }\n });\n this.setProperties({ 'value': value }, true);\n this.element.value = hex ? hex : '#000000';\n };\n ColorPicker.prototype.handlerDragPosition = function (prob, value, e) {\n e.preventDefault();\n this.hsv[prob] += value * (e.ctrlKey ? 1 : 3);\n if (this.hsv[prob] < 0) {\n this.hsv[prob] = 0;\n }\n this.updateHsv();\n this.convertToOtherFormat(true);\n };\n ColorPicker.prototype.handlerDown = function (e) {\n e.preventDefault();\n var x;\n var y;\n if (e.type === 'mousedown') {\n this.clientX = Math.abs(e.pageX - pageXOffset);\n this.clientY = Math.abs(e.pageY - pageYOffset);\n this.setTooltipOffset(8);\n }\n else {\n this.clientX = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n this.clientY = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n this.setTooltipOffset(-8);\n }\n this.setHsv(this.clientX, this.clientY);\n this.getDragHandler().style.transition = 'left .4s cubic-bezier(.25, .8, .25, 1), top .4s cubic-bezier(.25, .8, .25, 1)';\n this.updateHsv();\n this.convertToOtherFormat();\n this.getDragHandler().focus();\n EventHandler.add(document, 'mousemove touchmove', this.handlerMove, this);\n EventHandler.add(document, 'mouseup touchend', this.handlerEnd, this);\n };\n ColorPicker.prototype.handlerMove = function (e) {\n if (e.type !== 'touchmove') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = Math.abs(e.pageX - pageXOffset);\n y = Math.abs(e.pageY - pageYOffset);\n }\n else {\n x = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n y = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n }\n this.setHsv(x, y);\n var dragHandler = this.getDragHandler();\n var left = parseInt(dragHandler.style.left, 10);\n var top = parseInt(dragHandler.style.top, 10);\n this.updateHsv();\n this.convertToOtherFormat();\n this.getTooltipInst().refresh(dragHandler);\n if (!this.tooltipEle.style.transform) {\n if (Math.abs(this.clientX - x) > 8 || Math.abs(this.clientY - y) > 8) {\n select('.' + HSVAREA, this.container).style.cursor = 'pointer';\n dragHandler.style.transition = 'none';\n if (!this.inline) {\n this.tooltipEle.style.zIndex = (parseInt(this.getPopupEle().style.zIndex, 10) + 1).toString();\n }\n this.tooltipEle.style.transform = 'rotate(45deg)';\n dragHandler.classList.add('e-hide-handler');\n }\n }\n };\n ColorPicker.prototype.setHsv = function (clientX, clientY) {\n var ele = select('.' + HSVAREA, this.container);\n var position = ele.getBoundingClientRect();\n if (this.enableRtl) {\n clientX = clientX > position.right ? 0 : Math.abs(clientX - position.right);\n }\n else {\n clientX = clientX > position.left ? Math.abs(clientX - position.left) : 0;\n }\n clientY = clientY > position.top ? Math.abs(clientY - position.top) : 0;\n this.hsv[2] = Math.round(Number(100 * (ele.offsetHeight -\n Math.max(0, Math.min(ele.offsetHeight, (clientY - ele.offsetTop)))) / ele.offsetHeight) * 10) / 10;\n this.hsv[1] =\n Math.round(Number(100 * (Math.max(0, Math.min(ele.offsetWidth, (clientX - ele.offsetLeft)))) / ele.offsetWidth) * 10) / 10;\n };\n ColorPicker.prototype.handlerEnd = function (e) {\n if (e.type !== 'touchend') {\n e.preventDefault();\n }\n EventHandler.remove(document, 'mousemove touchmove', this.handlerMove);\n EventHandler.remove(document, 'mouseup touchend', this.handlerEnd);\n var dragHandler = this.getDragHandler();\n select('.' + HSVAREA, this.container).style.cursor = '';\n if (this.tooltipEle.style.transform) {\n this.tooltipEle.style.transform = '';\n dragHandler.classList.remove('e-hide-handler');\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n };\n ColorPicker.prototype.btnClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.' + MODESWITCH)) {\n e.stopPropagation();\n this.switchToPalette();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n }\n };\n ColorPicker.prototype.switchToPalette = function () {\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Palette' });\n this.unWireEvents();\n this.destroyOtherComp();\n detach(select('.e-slider-preview', this.container));\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n };\n ColorPicker.prototype.refreshPopupPos = function () {\n if (!this.inline) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function (e) {\n var target = e.target.parentElement;\n if (this.isRgb) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n this.isRgb = false;\n }\n else {\n this.updateValue(this.rgb, true, 2);\n this.isRgb = true;\n }\n };\n ColorPicker.prototype.updateValue = function (value, format, idx, max) {\n var clsName = ['e-rh-value', 'e-gs-value', 'e-bv-value'];\n var inst;\n for (var i = 0, len = clsName.length; i < len; i++) {\n inst = getInstance(select('.' + clsName[i], this.container), NumericTextBox);\n inst.value = Math.round(value[i]);\n if (format) {\n inst.placeholder = clsName[i].substr(idx, 1).toUpperCase();\n inst.max = max ? max[i] : 255;\n }\n inst.dataBind();\n }\n };\n ColorPicker.prototype.previewHandler = function (e) {\n var target = e.target;\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.convertRgbToNumberArray(target.style.backgroundColor);\n if (!this.rgb[3]) {\n this.rgb[3] = 1;\n }\n var cValue = this.rgbToHex(this.rgb);\n var hsv = this.rgbToHsv.apply(this, this.rgb);\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n }\n this.setHsvContainerBg(hsv[0]);\n if (this.enableOpacity && hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n this.updateOpacitySliderBg();\n }\n this.hsv = hsv;\n this.setHandlerPosition();\n this.updateInput(cValue);\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = this.convertToRgbString(this.rgb);\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n };\n ColorPicker.prototype.paletteClickHandler = function (e) {\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(TILE)) {\n this.removeTileSelection();\n this.addTileSelection(target);\n if (target.classList.contains(NOCOLOR)) {\n this.noColorTile();\n }\n else {\n var cValue = target.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(this.roundValue(cValue));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n }\n else {\n if (closest(target, '.' + MODESWITCH)) {\n this.switchToPicker();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n else {\n if (this.getWrapper().classList.contains(SHOWVALUE) && closest(target, '.' + FORMATSWITCH)) {\n this.formatSwitchHandler(e);\n }\n }\n }\n }\n };\n ColorPicker.prototype.noColorTile = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = [];\n this.hsv = [];\n this.triggerEvent('', pValue, '', isKey);\n };\n ColorPicker.prototype.switchToPicker = function () {\n var wrapper = this.getWrapper();\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Picker' });\n this.unWireEvents();\n ([].slice.call(selectAll('.' + PALETTES, this.container))).forEach(function (ele) {\n detach(ele);\n });\n if (wrapper.classList.contains(SHOWVALUE)) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n this.container.style.width = '';\n var grpEle = select('.e-custom-palette', this.container);\n if (this.presetColors) {\n remove(grpEle);\n }\n this.createPicker();\n this.getDragHandler().focus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele, e) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.paletteKeyDown = function (e) {\n var target = e.target;\n if (!target.classList.contains(PALETTES)) {\n return;\n }\n var selectedEle;\n var idx;\n var tiles = [].slice.call(selectAll('.' + TILE, target));\n var prevSelectedEle = (tiles.filter(function (tile) { return tile.classList.contains('e-selected'); })).pop();\n switch (!e.altKey && e.keyCode) {\n case 39:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? -1 : 1)]\n : tiles[this.enableRtl ? tiles.length - 1 : 0];\n this.keySelectionChanges(selectedEle);\n break;\n case 37:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? 1 : -1)]\n : tiles[this.enableRtl ? 0 : tiles.length - 1];\n this.keySelectionChanges(selectedEle);\n break;\n case 38:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, -this.columns) : 0;\n selectedEle = tiles[idx] ? tiles[idx] : tiles[idx - this.columns];\n this.keySelectionChanges(selectedEle);\n break;\n case 40:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, this.columns) : tiles.length - 1;\n if (tiles[idx]) {\n selectedEle = tiles[idx];\n }\n else {\n idx %= tiles.length;\n idx += tiles[tiles.length - 1].parentElement.childElementCount;\n selectedEle = tiles[idx];\n }\n this.keySelectionChanges(selectedEle);\n break;\n case 13:\n e.preventDefault();\n if (prevSelectedEle) {\n var cValue = prevSelectedEle.getAttribute('aria-label');\n this.enterKeyHandler(cValue ? cValue : '', e);\n }\n }\n };\n ColorPicker.prototype.keySelectionChanges = function (newEle) {\n this.removeTileSelection();\n this.addTileSelection(newEle);\n if (newEle.classList.contains(NOCOLOR)) {\n this.noColorTile(true);\n }\n else {\n var cValue = newEle.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(cValue);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), true);\n }\n };\n ColorPicker.prototype.tilePosition = function (items, element, cIdx) {\n items = Array.prototype.slice.call(items);\n var n = items.length;\n var emptyCount = this.columns - items[n - 1].parentElement.childElementCount;\n var idx = items.indexOf(element);\n idx += cIdx;\n idx < 0 ? idx += n + emptyCount : idx %= n + emptyCount;\n return idx;\n };\n ColorPicker.prototype.inputHandler = function (e) {\n var target = e.target;\n if (!target.value.length) {\n return;\n }\n var hsv;\n var pValue;\n var label = select('.e-float-text', target.parentElement).textContent;\n switch (label) {\n case 'HEX':\n var value = '';\n if ((target.value[0] === '#' && target.value.length !== 5) || (target.value[0] !== '#' && target.value.length !== 4)) {\n value = this.roundValue(target.value);\n }\n if (value.length === 9) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(value + value.substr(-2));\n this.inputValueChange(this.rgbToHsv.apply(this, this.rgb), pValue, target.value);\n }\n else {\n return;\n }\n break;\n case 'R':\n if (this.rgb[0] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[0] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'G':\n if (this.rgb[1] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[1] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'B':\n if (this.rgb[2] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[2] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'H':\n this.hueSlider.value = Number(target.value);\n break;\n case 'S':\n if (this.hsv[1] !== Number(target.value)) {\n this.hsv[1] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'V':\n if (this.hsv[2] !== Number(target.value)) {\n this.hsv[2] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'A':\n this.opacitySlider.value = Number(target.value);\n break;\n }\n };\n ColorPicker.prototype.inputValueChange = function (hsv, pValue, value) {\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n this.setHsvContainerBg(hsv[0]);\n }\n this.hsv = hsv;\n var cValue = this.rgbToHex(this.rgb);\n this.setHandlerPosition();\n this.updateInput(value ? value : cValue);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.triggerEvent(cValue, pValue, rgba);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n var eventArgs = {\n currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: pValue.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(pValue)) }\n };\n if (!this.showButtons && !isKey) {\n eventArgs.previousValue = { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) };\n this.trigger('change', eventArgs);\n this.setProperties({ 'value': cValue }, true);\n this.element.value = hex ? hex : '#000000';\n }\n else {\n this.trigger('select', eventArgs);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n * @method destroy\n * @return {void}\n */\n ColorPicker.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n ['tabindex', 'spellcheck'].forEach(function (attr) { _this.element.removeAttribute(attr); });\n if (this.inline) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n else {\n if (this.isPopupOpen()) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n this.splitBtn.destroy();\n this.splitBtn = null;\n }\n this.tileRipple();\n this.tileRipple = null;\n this.ctrlBtnRipple();\n this.ctrlBtnRipple = null;\n detach(this.element.nextElementSibling);\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n this.container = null;\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\n this.hueSlider.destroy();\n if (this.enableOpacity) {\n this.opacitySlider.destroy();\n this.opacitySlider = null;\n }\n this.hueSlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var wrapper = this.getWrapper();\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n EventHandler.remove(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown);\n if (this.modeSwitcher || this.showButtons) {\n EventHandler.remove(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler);\n }\n EventHandler.remove(select('.' + PREVIOUS, this.container), 'click', this.previewHandler);\n }\n else {\n EventHandler.remove(this.container, 'click', this.paletteClickHandler);\n EventHandler.remove(this.container, 'keydown', this.paletteKeyDown);\n }\n };\n ColorPicker.prototype.roundValue = function (value) {\n if (!value) {\n return '';\n }\n if (value[0] !== '#') {\n value = '#' + value;\n }\n var len = value.length;\n if (len === 4) {\n value += 'f';\n len = 5;\n }\n if (len === 5) {\n var tempValue = '';\n for (var i = 1, len_1 = value.length; i < len_1; i++) {\n tempValue += (value.charAt(i) + value.charAt(i));\n }\n value = '#' + tempValue;\n len = 9;\n }\n if (len === 7) {\n value += 'ff';\n }\n return value;\n };\n ColorPicker.prototype.hexToRgb = function (hex) {\n if (!hex) {\n return [];\n }\n hex = hex.trim();\n if (hex.length !== 9) {\n hex = this.roundValue(hex);\n }\n var opacity = Number((parseInt(hex.slice(-2), 16) / 255).toFixed(2));\n hex = hex.slice(1, 7);\n var bigInt = parseInt(hex, 16);\n var h = [];\n h.push((bigInt >> 16) & 255);\n h.push((bigInt >> 8) & 255);\n h.push(bigInt & 255);\n h.push(opacity);\n return h;\n };\n ColorPicker.prototype.rgbToHsv = function (r, g, b, opacity) {\n if (this.rgb && !this.rgb.length) {\n return [];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n var hsv = [Math.round(h * 360), Math.round(s * 1000) / 10, Math.round(v * 1000) / 10];\n if (!isNullOrUndefined(opacity)) {\n hsv.push(opacity);\n }\n return hsv;\n };\n ColorPicker.prototype.hsvToRgb = function (h, s, v, opacity) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n s /= 100;\n v /= 100;\n if (s === 0) {\n r = g = b = v;\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), opacity];\n }\n h /= 60;\n i = Math.floor(h);\n f = h - i;\n p = v * (1 - s);\n q = v * (1 - s * f);\n t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n }\n var rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n if (!isNullOrUndefined(opacity)) {\n rgb.push(opacity);\n }\n return rgb;\n };\n ColorPicker.prototype.rgbToHex = function (rgb) {\n return rgb.length ? ('#' + this.hex(rgb[0]) + this.hex(rgb[1]) + this.hex(rgb[2]) +\n (!isNullOrUndefined(rgb[3]) ? (rgb[3] !== 0 ? (Math.round(rgb[3] * 255) + 0x10000).toString(16).substr(-2) : '00') : '')) : '';\n };\n ColorPicker.prototype.hex = function (x) {\n return ('0' + x.toString(16)).slice(-2);\n };\n ColorPicker.prototype.changeModeSwitcherProp = function (prop) {\n var ctrlSwitchWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlSwitchWrapper) {\n this.appendModeSwitchBtn();\n }\n else {\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n }\n else {\n if (ctrlSwitchWrapper) {\n if (this.showButtons) {\n detach(select('.' + MODESWITCH, ctrlSwitchWrapper));\n }\n else {\n remove(ctrlSwitchWrapper);\n }\n }\n }\n };\n ColorPicker.prototype.changeShowBtnProps = function (prop) {\n var ctrlBtnWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlBtnWrapper) {\n remove(ctrlBtnWrapper);\n }\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n else {\n if (this.modeSwitcher) {\n detach(select('.' + CTRLBTN, ctrlBtnWrapper));\n }\n else {\n remove(ctrlBtnWrapper);\n }\n }\n };\n ColorPicker.prototype.changeValueProp = function (newProp) {\n if (this.isPicker()) {\n this.rgb = this.hexToRgb(newProp);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHandlerPosition();\n detach(closest(this.hueSlider.element, '.e-slider-preview'));\n this.createSlider();\n this.setHsvContainerBg();\n this.updateInput(newProp);\n }\n else {\n this.removeTileSelection();\n this.addTileSelection(select('span[aria-label=\"' + this.roundValue(newProp) + '\"]', this.container));\n }\n this.element.value = newProp.slice(0, 7);\n };\n ColorPicker.prototype.setInputEleProps = function (prop) {\n remove(select('.' + INPUTWRAPPER, this.container));\n this.createInput();\n };\n ColorPicker.prototype.changeDisabledProp = function (newProp) {\n if (this.isPicker()) {\n this.hueSlider.enabled = !newProp;\n this.opacitySlider.enabled = !newProp;\n this.setInputEleProps(newProp);\n }\n if (newProp) {\n this.toggleDisabled(true);\n this.unWireEvents();\n }\n else {\n this.toggleDisabled(false);\n this.wireEvents();\n }\n };\n ColorPicker.prototype.changeCssClassProps = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n var popupWrapper = this.getPopupEle();\n if (oldProp) {\n removeClass([wrapper, popupWrapper], oldProp.split(' '));\n }\n if (newProp) {\n addClass([wrapper, popupWrapper], newProp.split(' '));\n }\n };\n ColorPicker.prototype.changeRtlProps = function (newProp) {\n if (newProp) {\n addClass([this.getWrapper()], 'e-rtl');\n }\n else {\n removeClass([this.getWrapper()], 'e-rtl');\n }\n };\n ColorPicker.prototype.changePaletteProps = function () {\n detach(this.container.children[0]);\n this.container.style.width = '';\n this.createPalette();\n };\n ColorPicker.prototype.changeOpacityProps = function (newProp) {\n var wrapper = this.getWrapper();\n if (newProp) {\n removeClass([this.container.parentElement], HIDEOPACITY);\n this.createOpacitySlider(select('.e-colorpicker-slider', this.container).appendChild(this.createElement('div', { className: 'e-opacity-slider' })));\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n this.appendOpacityValue(select('.e-input-container', this.container));\n }\n }\n else {\n addClass([this.container.parentElement], HIDEOPACITY);\n this.opacitySlider.destroy();\n remove(this.opacitySlider.element);\n this.opacitySlider = null;\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n remove(select('.' + OPACITY, this.container).parentElement);\n }\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {ColorPickerModel} newProp\n * @param {ColorPickerModel} oldProp\n * @returns void\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var wrapper = this.getWrapper();\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n if (newProp.value) {\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor = newProp.value;\n }\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n this.changeRtlProps(newProp.enableRtl);\n return;\n }\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this_1.getWrapper().appendChild(this_1.container);\n this_1.splitBtn.destroy();\n detach(this_1.element.nextElementSibling);\n if (!this_1.container.children.length) {\n this_1.createWidget();\n }\n }\n else {\n this_1.destroyOtherComp();\n this_1.unWireEvents();\n this_1.container.innerHTML = '';\n this_1.createSplitBtn();\n }\n break;\n case 'cssClass':\n this_1.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n var props = newProp.cssClass.split(' ').concat(oldProp.cssClass.split(' '));\n props = props.reduce(function (a, b) { if (a.indexOf(b) < 0) {\n a.push(b);\n } return a; }, []);\n var count_1 = 0;\n props.forEach(function (cls) {\n if (count_1 === 0 &&\n (cls === HIDEVALUE || cls === HIDEVALUESWITCH || cls === SHOWVALUE || cls === HIDEHEX || cls === HIDERGBA)) {\n var inputWrap = select('.' + INPUTWRAPPER, _this.container);\n if (inputWrap) {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n _this.createInput();\n count_1++;\n }\n });\n break;\n case 'enableRtl':\n if (this_1.isPicker()) {\n this_1.hueSlider.enableRtl = newProp.enableRtl;\n if (this_1.enableOpacity) {\n this_1.opacitySlider.enableRtl = newProp.enableRtl;\n }\n this_1.setInputEleProps(newProp.enableRtl);\n }\n this_1.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this_1.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n this_1.changeValueProp(newProp.value);\n break;\n case 'showButtons':\n this_1.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this_1.switchToPicker();\n }\n else {\n this_1.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this_1.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this_1.isPicker()) {\n this_1.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this_1.mode === 'Palette' && !this_1.modeSwitcher) {\n this_1.setNoColor();\n }\n }\n else {\n this_1.changePaletteProps();\n }\n break;\n case 'enableOpacity':\n this_1.changeOpacityProps(newProp.enableOpacity);\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n __decorate([\n Property('#008000ff')\n ], ColorPicker.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], ColorPicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('Picker')\n ], ColorPicker.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(null)\n ], ColorPicker.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"showButtons\", void 0);\n __decorate([\n Property(10)\n ], ColorPicker.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"inline\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"noColor\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"enableOpacity\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"created\", void 0);\n ColorPicker = __decorate([\n NotifyPropertyChanges\n ], ColorPicker);\n return ColorPicker;\n}(Component));\nexport { ColorPicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, setValue, getValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-textbox';\nvar CONTROL = 'e-control';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar TextBox = /** @class */ (function (_super) {\n __extends(TextBox, _super);\n function TextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n TextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'floatLabelType':\n Input.removeFloating(this.textboxWrapper);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textboxWrapper.container);\n break;\n case 'value':\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n if (!this.isBlank(this.value)) {\n this.value = this.value.toString();\n }\n this.isProtectedOnChange = prevOnChange;\n Input.setValue(this.value, this.element, this.floatLabelType, this.showClearButton);\n this.raiseChangeEvent();\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.element);\n break;\n case 'type':\n this.element.setAttribute('type', this.type);\n this.raiseChangeEvent();\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.element, this.textboxWrapper);\n this.bindClearEvent();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.textboxWrapper.container]);\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.element);\n break;\n case 'cssClass':\n Input.setCssClass(this.cssClass, [this.textboxWrapper.container]);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.element);\n break;\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n TextBox.prototype.getModuleName = function () {\n return 'textbox';\n };\n TextBox.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n TextBox.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-TEXTBOX') {\n var ejInstance = getValue('ej2_instances', this.element);\n var inputElement = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n var attributes = this.element.attributes;\n this.checkAttributes(attributes);\n this.element.setAttribute('type', this.type);\n this.globalize = new Internationalization(this.locale);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('textbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('textbox'));\n }\n };\n TextBox.prototype.checkAttributes = function (attrs) {\n for (var i = 0; i < attrs.length; i++) {\n var key = attrs[i].nodeName;\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attrs[i].nodeValue }, true);\n }\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n TextBox.prototype.render = function () {\n this.textboxWrapper = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n cssClass: this.cssClass,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n });\n this.wireEvents();\n };\n TextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n }\n };\n TextBox.prototype.focusHandler = function (args) {\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('focus', eventArgs);\n };\n TextBox.prototype.focusOutHandler = function (args) {\n if (!(this.previousValue === null && this.value === null && this.element.value === '') &&\n (this.previousValue !== this.element.value)) {\n this.raiseChangeEvent(args, true);\n }\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('blur', eventArgs);\n };\n TextBox.prototype.inputHandler = function (args) {\n var eventArgs = {\n event: args,\n value: this.element.value,\n previousValue: this.value,\n container: this.textboxWrapper.container\n };\n this.trigger('input', eventArgs);\n };\n TextBox.prototype.changeHandler = function (args) {\n this.setProperties({ value: this.element.value }, true);\n this.raiseChangeEvent(args, true);\n };\n TextBox.prototype.raiseChangeEvent = function (event, interaction) {\n var eventArgs = {\n event: event,\n value: this.value,\n previousValue: this.previousValue,\n container: this.textboxWrapper.container,\n isInteraction: interaction ? interaction : false\n };\n this.trigger('change', eventArgs);\n this.previousValue = this.value;\n };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n }\n };\n TextBox.prototype.resetInputHandler = function (event) {\n event.preventDefault();\n if (!(this.textboxWrapper.clearButton.classList.contains(HIDE_CLEAR))) {\n Input.setValue('', this.element, this.floatLabelType, this.showClearButton);\n }\n };\n TextBox.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also, it maintains the initial TextBox element from the DOM.\n * @method destroy\n * @return {void}\n */\n TextBox.prototype.destroy = function () {\n this.unWireEvents();\n this.textboxWrapper.container.parentElement.appendChild(this.cloneElement);\n detach(this.textboxWrapper.container);\n this.textboxWrapper = null;\n this.cloneElement.classList.remove(ROOT, CONTROL);\n _super.prototype.destroy.call(this);\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Adding the multiple attributes as key-value pair to the TextBox element.\n * @param { { [key: string]: string } } attributes - Specifies the attributes to be add to TextBox element.\n * @return {void}\n */\n TextBox.prototype.addAttributes = function (attributes) {\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n Input.setReadonly(this.readonly, this.element);\n }\n else if (key === 'class') {\n this.element.classList.add(attributes[key]);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attributes[key] }, true);\n Input.setPlaceholder(this.placeholder, this.element);\n }\n else {\n this.element.setAttribute(key, attributes[key]);\n }\n }\n };\n /**\n * Removing the multiple attributes as key-value pair to the TextBox element.\n * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n * @return {void}\n */\n TextBox.prototype.removeAttributes = function (attributes) {\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: false }, true);\n Input.setReadonly(this.readonly, this.element);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: null }, true);\n Input.setPlaceholder(this.placeholder, this.element);\n }\n else {\n this.element.removeAttribute(key);\n }\n }\n };\n __decorate([\n Property('text')\n ], TextBox.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"value\", void 0);\n __decorate([\n Property('Never')\n ], TextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property('')\n ], TextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], TextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"input\", void 0);\n TextBox = __decorate([\n NotifyPropertyChanges\n ], TextBox);\n return TextBox;\n}(Component));\nexport { TextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { detach, addClass, removeClass, closest, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar RTL = 'e-rtl';\nvar LINK = 'e-day';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar CLOSEDURATION = 200;\nvar OFFSETVALUE = 4;\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n __extends(DatePicker, _super);\n /**\n * Constructor for creating the widget.\n */\n function DatePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousElementValue = '';\n _this.isDateIconClicked = false;\n _this.keyConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n tab: 'tab'\n };\n _this.calendarKeyConfigs = {\n escape: 'escape',\n enter: 'enter',\n tab: 'tab'\n };\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DatePicker.prototype.render = function () {\n this.initialize();\n this.bindEvents();\n };\n DatePicker.prototype.setAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n };\n DatePicker.prototype.initialize = function () {\n this.createInput();\n this.setAllowEdit();\n this.updateInput();\n this.previousElementValue = this.inputElement.value;\n this.previousDate = new Date(+this.value);\n };\n DatePicker.prototype.createInput = function () {\n var ariaAttrs = {\n 'aria-live': 'assertive', 'aria-atomic': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: null };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n }, this.createElement);\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function () {\n 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.validateDate.call(this);\n this.minMaxUpdates();\n _super.prototype.minMaxUpdate.call(this);\n }\n if (!isNullOrUndefined(this.value)) {\n var dateValue = this.value;\n var dateString = void 0;\n var tempFormat = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n if (this.getModuleName() === 'datetimepicker') {\n 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.minMaxUpdates = function () {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n };\n DatePicker.prototype.bindEvents = function () {\n if (this.enabled) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n // To prevent the twice triggering.\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.resetFormHandler, this);\n }\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n }\n this.keyboardModules = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n };\n DatePicker.prototype.resetFormHandler = function () {\n if (this.inputElement.getAttribute('value')) {\n this.value = this.checkDateValue(new Date('' + this.element.getAttribute('value')));\n }\n else {\n this.value = null;\n if (this.inputElement) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n removeClass([this.inputWrapper.container], ERROR);\n }\n }\n };\n DatePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n };\n DatePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DatePicker.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n };\n DatePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n this.changeEvent(event);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.isDateIconClicked = true;\n this.show(null, e);\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n addClass(this.inputWrapper.buttons, ACTIVE);\n }\n }\n };\n DatePicker.prototype.CalendarKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show(null, e);\n }\n else {\n if (+this.value !== +this.currentDate && !this.isCalendar()) {\n this.inputWrapper.container.children[this.index].focus();\n }\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n break;\n case 'tab':\n this.hide(e);\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n var focusArguments = {\n model: this\n };\n this.isDateIconClicked = false;\n this.trigger('focus', focusArguments);\n };\n DatePicker.prototype.inputBlurHandler = function (e) {\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.getModuleName() === 'datepicker') {\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n if (this.isCalendar()) {\n this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: this.CalendarKeyActionHandle.bind(this),\n keyConfigs: this.calendarKeyConfigs\n });\n }\n };\n DatePicker.prototype.documentHandler = function (e) {\n if (e.type !== 'touchstart') {\n e.preventDefault();\n }\n var target = e.target;\n if (!(closest(target, '.e-datepicker.e-popup-wrapper'))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (!target.classList.contains('e-day'))) {\n this.hide(e);\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n switch (e.action) {\n case 'altUpArrow':\n this.hide(e);\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n if (this.getModuleName() === 'datepicker') {\n this.show(null, e);\n }\n break;\n case 'escape':\n this.hide(e);\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.isCalendar()) {\n e.preventDefault();\n }\n break;\n case 'tab':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n this.hide(e);\n break;\n default:\n this.previousDate = ((!isNullOrUndefined(this.value) && new Date(+this.value)) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n 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;\n if ((this.getModuleName() === 'datetimepicker')) {\n if (this.checkDateValue(this.globalize.parseDate(this.inputElement.value, dateOptions))) {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n }\n else {\n date = this.globalize.parseDate(this.inputElement.value, { type: 'dateTime', skeleton: 'yMd' });\n }\n }\n else {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n }\n if (this.strictMode && date) {\n Input.setValue(this.globalize.formatDate(date, dateOptions), this.inputElement, this.floatLabelType, this.showClearButton);\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n if (this.strictMode && !date && this.inputElement.value === '') {\n this.setProperties({ value: null }, true);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (isNullOrUndefined(this.value)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n };\n DatePicker.prototype.createCalendar = function () {\n var _this = this;\n this.popupWrapper = this.createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.classList.add(this.cssClass);\n }\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-date-modal';\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n //this.calendarElement represent the Calendar object from the Calendar class.\n this.calendarElement.querySelector('table tbody').className = '';\n this.popupObj = new Popup(this.popupWrapper, {\n content: this.calendarElement,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n offsetY: OFFSETVALUE,\n targetType: 'container',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n open: function () {\n if (_this.getModuleName() !== 'datetimepicker') {\n if (document.activeElement !== _this.inputElement) {\n _this.calendarElement.children[1].firstElementChild.focus();\n _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: _this.CalendarKeyActionHandle.bind(_this),\n keyConfigs: _this.calendarKeyConfigs\n });\n _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n eventName: 'keydown',\n keyAction: _this.CalendarKeyActionHandle.bind(_this),\n keyConfigs: _this.calendarKeyConfigs\n });\n }\n }\n }, close: function () {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n if (_this.value) {\n _this.disabledDates();\n }\n if (_this.popupObj) {\n _this.popupObj.destroy();\n }\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.setAriaAttributes();\n }\n });\n this.popupObj.element.classList.add(this.cssClass);\n this.setAriaAttributes();\n };\n DatePicker.prototype.modelHeader = function () {\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var yearHeading = this.createElement('h1', { className: 'e-model-year' });\n var h2 = this.createElement('div');\n var daySpan = this.createElement('span', { className: 'e-model-day' });\n var monthSpan = this.createElement('span', { className: 'e-model-month' });\n 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 (event) {\n if (this.inputElement.value !== this.previousElementValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.value = this.value;\n this.changedArgs.event = event || null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n this.trigger('change', this.changedArgs);\n this.previousElementValue = this.inputElement.value;\n this.previousDate = new Date('' + this.value);\n }\n }\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.changeEvent = function (event) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.selectCalendar(event);\n this.changedArgs.event = event ? event : null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n this.trigger('change', this.changedArgs);\n this.previousDate = this.value && new Date(+this.value);\n this.hide(event);\n this.previousElementValue = this.inputElement.value;\n this.errorClass();\n }\n };\n DatePicker.prototype.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 };\n DatePicker.prototype.isCalendar = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n return true;\n }\n return false;\n };\n DatePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (this.width) : (formatUnit(this.width));\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n /**\n * Shows the Calendar.\n * @returns void\n */\n DatePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n var prevent_1 = true;\n var outOfRange = void 0;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +this.min && +this.value <= +this.max)) {\n outOfRange = new Date('' + this.value);\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent_1 = false;\n },\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n appendTo: document.body\n };\n this.trigger('open', this.preventArgs);\n if (prevent_1 && !this.preventArgs.cancel) {\n addClass(this.inputWrapper.buttons, ACTIVE);\n this.preventArgs.appendTo.appendChild(this.popupWrapper);\n this.popupObj.refreshPosition(this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION,\n };\n if (this.zIndex === 1000) {\n this.popupObj.show(new Animation(openAnimation), this.element);\n }\n else {\n this.popupObj.show(new Animation(openAnimation), null);\n }\n this.setAriaAttributes();\n }\n else {\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n }\n };\n /**\n * Hide the Calendar.\n * @returns void\n */\n DatePicker.prototype.hide = function (event) {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var prevent_2 = true;\n this.preventArgs = {\n preventDefault: function () {\n prevent_2 = false;\n },\n popup: this.popupObj,\n event: event || null,\n cancel: false\n };\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n if (this.isCalendar()) {\n this.trigger('close', this.preventArgs);\n }\n if (this.isCalendar() && (prevent_2 && !this.preventArgs.cancel)) {\n var closeAnimation = {\n name: 'FadeOut',\n duration: CLOSEDURATION,\n };\n this.popupObj.hide();\n this.keyboardModule.destroy();\n removeClass(this.inputWrapper.buttons, ACTIVE);\n }\n this.setAriaAttributes();\n this.previousElementValue = this.inputElement.value;\n if (Browser.isDevice && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n }\n if (Browser.isDevice) {\n this.element.removeAttribute('readonly');\n }\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DatePicker.prototype.focusIn = function (triggerEvent) {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DatePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n /**\n * Gets the current view of the DatePicker.\n * @returns string\n */\n DatePicker.prototype.currentView = function () {\n var currentView;\n if (this.calendarElement) {\n // calls the Calendar currentView public method\n currentView = _super.prototype.currentView.call(this);\n }\n return currentView;\n };\n /**\n * Navigates to specified month or year or decade view of the DatePicker.\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DatePicker.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.keyboardModules.destroy();\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttrs, this.inputElement);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.ensureInputAttribute();\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n if (this.ngTag === null) {\n if (this.inputElement) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n removeClass([this.inputElement], [INPUTROOT]);\n }\n removeClass([this.element], [ROOT]);\n detach(this.inputWrapper.container);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.inputEleCopy.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.inputEleCopy.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputEleCopy = this.element.cloneNode(true);\n this.inputElement = this.element;\n this.formElement = closest(this.inputElement, 'form');\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n if (this.ngTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkHtmlAttributes();\n _super.prototype.preRender.call(this);\n };\n ;\n DatePicker.prototype.validationAttribute = function (target, inputElement) {\n var nameAttribute = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n inputElement.setAttribute('name', nameAttribute);\n target.removeAttribute('name');\n var attribute = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attribute.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attribute[i]))) {\n continue;\n }\n var attr = target.getAttribute(attribute[i]);\n inputElement.setAttribute(attribute[i], attr);\n target.removeAttribute(attribute[i]);\n }\n };\n DatePicker.prototype.checkHtmlAttributes = function () {\n this.globalize = new Internationalization(this.locale);\n var attributes = ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n var options;\n if (this.getModuleName() === 'datetimepicker') {\n 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 break;\n case 'readonly':\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n if (this.placeholder === null) {\n var placeholder = this.inputElement.getAttribute(prop);\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, true);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'value':\n if (!this.value) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), true);\n }\n break;\n case 'min':\n if (+this.min === +new Date(1900, 0, 1)) {\n this.setProperties(setValue(prop, this.globalize.parseDate(this.inputElement.getAttribute(prop)), {}), true);\n }\n break;\n case 'max':\n if (+this.max === +new Date(2099, 11, 31)) {\n this.setProperties(setValue(prop, this.globalize.parseDate(this.inputElement.getAttribute(prop)), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n /**\n * To get component name.\n * @private\n */\n DatePicker.prototype.getModuleName = function () {\n return 'datepicker';\n };\n DatePicker.prototype.disabledDates = function () {\n var valueCopy;\n valueCopy = this.checkDateValue(this.value) ? new Date(+this.value) : new Date('' + this.value);\n var previousValCopy = this.previousDate;\n //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n this.minMaxUpdates();\n _super.prototype.render.call(this);\n this.previousDate = previousValCopy;\n var date = valueCopy && +(valueCopy);\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n if (!this.strictMode) {\n if (typeof this.value === 'string' || ((typeof this.value === 'object') && (+this.value) !== (+valueCopy))) {\n this.setProperties({ value: valueCopy }, true);\n }\n }\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n if (!this.strictMode) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n 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 var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + (+this.value));\n var isDisabledDate = this.calendarElement &&\n this.calendarElement.querySelectorAll(dateIdString)[0] &&\n this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled');\n if ((!isNullOrUndefined(this.value) && !(+new Date(+this.value).setMilliseconds(0) >= +this.min\n && +new Date(+this.value).setMilliseconds(0) <= +this.max))\n || (!this.strictMode && this.inputElement.value !== '' && isNullOrUndefined(this.value) || isDisabledDate)) {\n addClass([this.inputWrapper.container], ERROR);\n }\n else {\n removeClass([this.inputWrapper.container], ERROR);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var options = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (typeof newProp.value === 'string') {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n this.setProperties({ value: newProp.value }, true);\n }\n this.previousElementValue = this.inputElement.value;\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.updateInput();\n this.changeTrigger(null);\n break;\n case 'format':\n this.updateInput();\n break;\n case 'allowEdit':\n this.setAllowEdit();\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n this.bindEvents();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupWrapper) {\n addClass([this.popupWrapper], [newProp.cssClass]);\n }\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'strictMode':\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n default:\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n this.hide(null);\n }\n };\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","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 (!isNullOrUndefined(res)) {\n param1 = res;\n }\n }\n return param1;\n };\n /**\n * Checks wheather the given input is a plain object or not.\n * @param {Object|Object[]} obj\n */\n DataUtil.isPlainObject = function (obj) {\n return (!!obj) && (obj.constructor === Object);\n };\n /**\n * Returns true when the browser cross origin request.\n */\n DataUtil.isCors = function () {\n var xhr = null;\n var request = 'XMLHttpRequest';\n try {\n xhr = new window[request]();\n }\n catch (e) {\n // No exception handling\n }\n return !!xhr && ('withCredentials' in xhr);\n };\n /**\n * Generate random GUID value which will be prefixed with the given value.\n * @param {string} prefix\n */\n DataUtil.getGuid = function (prefix) {\n var hexs = '0123456789abcdef';\n var rand;\n return (prefix || '') + '00000000-0000-4000-0000-000000000000'.replace(/0/g, function (val, i) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var arr = new Uint8Array(1);\n window.crypto.getRandomValues(arr);\n rand = arr[0] % 16 | 0;\n }\n else {\n rand = Math.random() * 16 | 0;\n }\n return hexs[i === 19 ? rand & 0x3 | 0x8 : rand];\n });\n };\n /**\n * Checks wheather the given value is null or not.\n * @param {string|Object} val\n * @returns boolean\n */\n DataUtil.isNull = function (val) {\n return val === undefined || val === null;\n };\n /**\n * To get the required items from collection of objects.\n * @param {Object[]} array\n * @param {string} field\n * @param {Function} comparer\n * @returns Object\n * @hidden\n */\n DataUtil.getItemFromComparer = function (array, field, comparer) {\n var keyVal;\n var current;\n var key;\n var i = 0;\n var castRequired = typeof DataUtil.getVal(array, 0, field) === 'string';\n if (array.length) {\n while (isNullOrUndefined(keyVal) && i < array.length) {\n keyVal = DataUtil.getVal(array, i, field);\n key = array[i++];\n }\n }\n for (; i < array.length; i++) {\n current = DataUtil.getVal(array, i, field);\n if (isNullOrUndefined(current)) {\n continue;\n }\n if (castRequired) {\n keyVal = +keyVal;\n current = +current;\n }\n if (comparer(keyVal, current) > 0) {\n keyVal = current;\n key = array[i];\n }\n }\n return key;\n };\n /**\n * To get distinct values of Array or Array of Objects.\n * @param {Object[]} json\n * @param {string} field\n * @param {boolean} requiresCompleteRecord\n * @returns Object[]\n * * distinct array of objects is return when requiresCompleteRecord set as true.\n * @hidden\n */\n DataUtil.distinct = function (json, fieldName, requiresCompleteRecord) {\n requiresCompleteRecord = isNullOrUndefined(requiresCompleteRecord) ? false : requiresCompleteRecord;\n var result = [];\n var val;\n var tmp = {};\n json.forEach(function (data, index) {\n val = DataUtil.getVal(json, index, fieldName);\n if (!(val in tmp)) {\n result.push(!requiresCompleteRecord ? val : json[index]);\n tmp[val] = 1;\n }\n });\n return result;\n };\n /**\n * Specifies the value which will be used to adjust the date value to server timezone.\n * @default null\n */\n DataUtil.serverTimezoneOffset = null;\n /**\n * Throw error with the given string as message.\n * @param {string} er\n */\n DataUtil.throwError = function (error) {\n try {\n throw new Error(error);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n };\n DataUtil.aggregates = {\n /**\n * Calculate sum of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n sum: function (ds, field) {\n var result = 0;\n var val;\n var castRequired = typeof DataUtil.getVal(ds, 0, field) !== 'number';\n for (var i = 0; i < ds.length; i++) {\n val = DataUtil.getVal(ds, i, field);\n if (!isNaN(val) && val !== null) {\n if (castRequired) {\n val = +val;\n }\n result += val;\n }\n }\n return result;\n },\n /**\n * Calculate average value of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n average: function (ds, field) {\n return DataUtil.aggregates.sum(ds, field) / ds.length;\n },\n /**\n * Returns the min value of the data based on the field.\n * @param {Object[]} ds\n * @param {string|Function} field\n */\n min: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n },\n /**\n * Returns the max value of the data based on the field.\n * @param {Object[]} ds\n * @param {string} field\n * @returns number\n */\n max: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n },\n /**\n * Returns the total number of true value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n truecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', true, true)).length;\n },\n /**\n * Returns the total number of false value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n falsecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', false, true)).length;\n },\n /**\n * Returns the length of the given data.\n * @param {Object[]} ds\n * @param {string} field?\n * @returns number\n */\n count: function (ds, field) {\n return ds.length;\n }\n };\n /**\n * Specifies the Object with filter operators.\n */\n DataUtil.operatorSymbols = {\n '<': 'lessthan',\n '>': 'greaterthan',\n '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal',\n '==': 'equal',\n '!=': 'notequal',\n '*=': 'contains',\n '$=': 'endswith',\n '^=': 'startswith'\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * * It will be used for date/number type filter query.\n */\n DataUtil.odBiOperator = {\n '<': ' lt ',\n '>': ' gt ',\n '<=': ' le ',\n '>=': ' ge ',\n '==': ' eq ',\n '!=': ' ne ',\n 'lessthan': ' lt ',\n 'lessthanorequal': ' le ',\n 'greaterthan': ' gt ',\n 'greaterthanorequal': ' ge ',\n 'equal': ' eq ',\n 'notequal': ' ne '\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odUniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'substringof',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'substringof'\n };\n /**\n * Specifies the Object with filter operators which will be used for ODataV4 filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odv4UniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'contains',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'contains'\n };\n DataUtil.diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n DataUtil.fnOperators = {\n /**\n * Returns true when the actual input is equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param {boolean} ignoreAccent?\n */\n equal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) === DataUtil.toLowerCase(expected);\n }\n return actual === expected;\n },\n /**\n * Returns true when the actual input is not equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n notequal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n return !DataUtil.fnOperators.equal(actual, expected, ignoreCase);\n },\n /**\n * Returns true when the actual input is less than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) < DataUtil.toLowerCase(expected);\n }\n return actual < expected;\n },\n /**\n * Returns true when the actual input is greater than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) > DataUtil.toLowerCase(expected);\n }\n return actual > expected;\n },\n /**\n * Returns true when the actual input is less than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) <= DataUtil.toLowerCase(expected);\n }\n return actual <= expected;\n },\n /**\n * Returns true when the actual input is greater than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) >= DataUtil.toLowerCase(expected);\n }\n return actual >= expected;\n },\n /**\n * Returns true when the actual input contains the given string.\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n */\n contains: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) !== -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) !== -1;\n },\n /**\n * Returns true when the given input value is not null.\n * @param {string|number} actual\n * @returns boolean\n */\n notnull: function (actual) {\n return actual !== null;\n },\n /**\n * Returns true when the given input value is null.\n * @param {string|number} actual\n * @returns boolean\n */\n isnull: function (actual) {\n return actual === null;\n },\n /**\n * Returns true when the actual input starts with the given string\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n startswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.startsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.startsWith(actual, expected);\n },\n /**\n * Returns true when the actual input ends with the given string.\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n endswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.endsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.endsWith(actual, expected);\n },\n /**\n * It will return the filter operator based on the filter symbol.\n * @param {string} operator\n * @hidden\n */\n processSymbols: function (operator) {\n var fnName = DataUtil.operatorSymbols[operator];\n if (fnName) {\n var fn = DataUtil.fnOperators[fnName];\n return fn;\n }\n return DataUtil.throwError('Query - Process Operator : Invalid operator');\n },\n /**\n * It will return the valid filter operator based on the specified operators.\n * @param {string} operator\n * @hidden\n */\n processOperator: function (operator) {\n var fn = DataUtil.fnOperators[operator];\n if (fn) {\n return fn;\n }\n return DataUtil.fnOperators.processSymbols(operator);\n }\n };\n /**\n * To perform the parse operation on JSON data, like convert to string from JSON or convert to JSON from string.\n */\n DataUtil.parse = {\n /**\n * Parse the given string to the plain JavaScript object.\n * @param {string|Object|Object[]} jsonText\n */\n parseJson: function (jsonText) {\n if (typeof jsonText === 'string') {\n jsonText = JSON.parse(jsonText, DataUtil.parse.jsonReviver);\n }\n else if (jsonText instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(jsonText);\n }\n else if (typeof jsonText === 'object') {\n DataUtil.parse.iterateAndReviveJson(jsonText);\n }\n return jsonText;\n },\n /**\n * It will perform on array of values.\n * @param {string[]|Object[]} array\n * @hidden\n */\n iterateAndReviveArray: function (array) {\n for (var i = 0; i < array.length; i++) {\n if (typeof array[i] === 'object') {\n DataUtil.parse.iterateAndReviveJson(array[i]);\n }\n else if (typeof array[i] === 'string' && !/^[\\s]*\\[|^[\\s]*\\{|\\\"/g.test(array[i])) {\n array[i] = DataUtil.parse.jsonReviver('', array[i]);\n }\n else {\n array[i] = DataUtil.parse.parseJson(array[i]);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {JSON} json\n * @hidden\n */\n iterateAndReviveJson: function (json) {\n var value;\n var keys = Object.keys(json);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var prop = keys_2[_i];\n if (DataUtil.startsWith(prop, '__')) {\n continue;\n }\n value = json[prop];\n if (typeof value === 'object') {\n if (value instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(value);\n }\n else if (value) {\n DataUtil.parse.iterateAndReviveJson(value);\n }\n }\n else {\n json[prop] = DataUtil.parse.jsonReviver(json[prop], value);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {string} field\n * @param {string|Date} value\n * @hidden\n */\n jsonReviver: function (field, value) {\n var dupValue = value;\n if (typeof value === 'string') {\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n if (ms) {\n return DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), DataUtil.serverTimezoneOffset, true);\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var arr = dupValue.split(/[^0-9]/);\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), DataUtil.serverTimezoneOffset, true);\n }\n }\n return value;\n },\n /**\n * Check wheather the given value is JSON or not.\n * @param {Object[]} jsonData\n */\n isJson: function (jsonData) {\n if (typeof jsonData[0] === 'string') {\n return jsonData;\n }\n return DataUtil.parse.parseJson(jsonData);\n },\n /**\n * Checks wheather the given value is GUID or not.\n * @param {string} value\n */\n isGuid: function (value) {\n var regex = /[A-Fa-f0-9]{8}(?:-[A-Fa-f0-9]{4}){3}-[A-Fa-f0-9]{12}/i;\n var match = regex.exec(value);\n return match != null;\n },\n /**\n * The method used to replace the value based on the type.\n * @param {Object} value\n * @param {boolean} stringify\n * @hidden\n */\n replacer: function (value, stringify) {\n if (DataUtil.isPlainObject(value)) {\n return DataUtil.parse.jsonReplacer(value, stringify);\n }\n if (value instanceof Array) {\n return DataUtil.parse.arrayReplacer(value);\n }\n if (value instanceof Date) {\n return DataUtil.parse.jsonReplacer({ val: value }, stringify).val;\n }\n return value;\n },\n /**\n * It will replace the JSON value.\n * @param {string} key\n * @param {Object} val\n * @hidden\n */\n jsonReplacer: function (val, stringify) {\n var value;\n var keys = Object.keys(val);\n for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\n var prop = keys_3[_i];\n value = val[prop];\n if (!(value instanceof Date)) {\n continue;\n }\n var d = value;\n val[prop] = DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(d), DataUtil.serverTimezoneOffset).toJSON();\n }\n return val;\n },\n /**\n * It will replace the Array of value.\n * @param {string} key\n * @param {Object[]} val\n * @hidden\n */\n arrayReplacer: function (val) {\n for (var i = 0; i < val.length; i++) {\n if (DataUtil.isPlainObject(val[i])) {\n val[i] = DataUtil.parse.jsonReplacer(val[i]);\n }\n else if (val[i] instanceof Date) {\n val[i] = DataUtil.parse.jsonReplacer({ date: val[i] }).date;\n }\n }\n return val;\n }\n };\n /**\n * @hidden\n */\n DataUtil.dateParse = {\n addSelfOffset: function (input) {\n return new Date(+input - (input.getTimezoneOffset() * 60000));\n },\n toUTC: function (input) {\n return new Date(+input + (input.getTimezoneOffset() * 60000));\n },\n toTimeZone: function (input, offset, utc) {\n if (offset === null) {\n return input;\n }\n var unix = utc ? DataUtil.dateParse.toUTC(input) : input;\n return new Date(+unix - (offset * 3600000));\n },\n toLocalTime: function (input) {\n var datefn = input;\n var timeZone = -datefn.getTimezoneOffset();\n var differenceString = timeZone >= 0 ? '+' : '-';\n var localtimefn = function (num) {\n var norm = Math.floor(Math.abs(num));\n return (norm < 10 ? '0' : '') + norm;\n };\n var val = datefn.getFullYear() + '-' + localtimefn(datefn.getMonth() + 1) + '-' + localtimefn(datefn.getDate()) +\n 'T' + localtimefn(datefn.getHours()) +\n ':' + localtimefn(datefn.getMinutes()) +\n ':' + localtimefn(datefn.getSeconds()) +\n differenceString + localtimefn(timeZone / 60) +\n ':' + localtimefn(timeZone % 60);\n return val;\n }\n };\n return DataUtil;\n}());\nexport { DataUtil };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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, e.ignoreAccent)) {\n return true;\n }\n }\n return false;\n });\n };\n /**\n * Sort the data with given direction and field.\n * @param {Object[]} ds\n * @param {{comparer:(a:Object} e\n * @param {Object} b\n */\n JsonAdaptor.prototype.onSortBy = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var fnCompare;\n var field = DataUtil.getValue(e.fieldName, query);\n if (!field) {\n return ds.sort(e.comparer);\n }\n if (field instanceof Array) {\n field = field.slice(0);\n for (var i = field.length - 1; i >= 0; i--) {\n if (!field[i]) {\n continue;\n }\n fnCompare = e.comparer;\n if (DataUtil.endsWith(field[i], ' desc')) {\n fnCompare = DataUtil.fnSort('descending');\n field[i] = field[i].replace(' desc', '');\n }\n ds = DataUtil.sort(ds, field[i], fnCompare);\n }\n return ds;\n }\n return DataUtil.sort(ds, field, e.comparer);\n };\n /**\n * Group the data based on the given query.\n * @param {Object[]} ds\n * @param {QueryOptions} e\n * @param {Query} query\n */\n JsonAdaptor.prototype.onGroup = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var aggQuery = Query.filterQueries(query.queries, 'onAggregates');\n var agg = [];\n if (aggQuery.length) {\n var tmp = void 0;\n for (var i = 0; i < aggQuery.length; i++) {\n tmp = aggQuery[i].e;\n agg.push({ type: tmp.type, field: DataUtil.getValue(tmp.field, query) });\n }\n }\n return DataUtil.group(ds, DataUtil.getValue(e.fieldName, query), agg, null, null, e.comparer);\n };\n /**\n * Retrieves records based on the given page index and size.\n * @param {Object[]} ds\n * @param {{pageSize:number} e\n * @param {number}} pageIndex\n * @param {Query} query\n */\n JsonAdaptor.prototype.onPage = function (ds, e, query) {\n var size = DataUtil.getValue(e.pageSize, query);\n var start = (DataUtil.getValue(e.pageIndex, query) - 1) * size;\n var end = start + size;\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(start, end);\n };\n /**\n * Retrieves records based on the given start and end index from query.\n * @param {Object[]} ds\n * @param {{start:number} e\n * @param {number}} end\n */\n JsonAdaptor.prototype.onRange = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.start), DataUtil.getValue(e.end));\n };\n /**\n * Picks the given count of records from the top of the datasource.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onTake = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(0, DataUtil.getValue(e.nos));\n };\n /**\n * Skips the given count of records from the data source.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onSkip = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.nos));\n };\n /**\n * Selects specified columns from the data source.\n * @param {Object[]} ds\n * @param {{fieldNames:string}} e\n */\n JsonAdaptor.prototype.onSelect = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return DataUtil.select(ds, DataUtil.getValue(e.fieldNames));\n };\n /**\n * Inserts new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {number} position\n */\n JsonAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n if (isNullOrUndefined(position)) {\n return dm.dataSource.json.push(data);\n }\n else {\n return dm.dataSource.json.splice(position, 0, data);\n }\n };\n /**\n * Remove the data from the dataSource based on the key field value.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n if (typeof value === 'object') {\n value = value[keyField];\n }\n for (i = 0; i < ds.length; i++) {\n if (ds[i][keyField] === value) {\n break;\n }\n }\n return i !== ds.length ? ds.splice(i, 1) : null;\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n var key = value[keyField];\n for (i = 0; i < ds.length; i++) {\n if (ds[i][keyField] === key) {\n break;\n }\n }\n return i < ds.length ? merge(ds[i], value) : null;\n };\n return JsonAdaptor;\n}(Adaptor));\nexport { JsonAdaptor };\n/**\n * URL Adaptor of DataManager can be used when you are required to use remote service to retrieve data.\n * It interacts with server-side for all DataManager Queries and CRUD operations.\n * @hidden\n */\nvar UrlAdaptor = /** @class */ (function (_super) {\n __extends(UrlAdaptor, _super);\n function UrlAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the query to generate request body.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns p\n */\n UrlAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var params = query.params;\n var url = dm.dataSource.url;\n var temp;\n var skip;\n var take = null;\n var options = this.options;\n var request = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n // calc Paging & Range\n if ('onPage' in singles) {\n temp = singles.onPage;\n skip = DataUtil.getValue(temp.pageIndex, query);\n take = DataUtil.getValue(temp.pageSize, query);\n skip = (skip - 1) * take;\n }\n else if ('onRange' in singles) {\n temp = singles.onRange;\n skip = temp.start;\n take = temp.end - temp.start;\n }\n // Sorting\n for (var i = 0; i < queries.sorts.length; i++) {\n temp = DataUtil.getValue(queries.sorts[i].e.fieldName, query);\n request.sorts.push(DataUtil.callAdaptorFunction(this, 'onEachSort', { name: temp, direction: queries.sorts[i].e.direction }, query));\n }\n // hierarchy\n if (hierarchyFilters) {\n temp = this.getFiltersFrom(hierarchyFilters, query);\n if (temp) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', temp.toJson(), query));\n }\n }\n // Filters\n for (var i = 0; i < queries.filters.length; i++) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query));\n var keys_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] = 'onExpand' in this && 'onSelect' in singles ?\n DataUtil.callAdaptorFunction(this, 'onExpand', { selects: DataUtil.getValue(singles.onSelect.fieldNames, query), expands: query.expands }, query) : query.expands;\n }\n req[options.select] = 'onSelect' in singles ?\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, query);\n return DataUtil.isNull(args.count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Add the group query to the adaptor`s option.\n * @param {Object[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return e;\n };\n /**\n * Add the aggregate query to the adaptor`s option.\n * @param {Aggregates[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n */\n UrlAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var url;\n var key;\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.removeUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify({\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, query) {\n var pData = data;\n if (data && data.result) {\n pData = data.result;\n }\n if (pvt && pvt.aggregates && pvt.aggregates.length) {\n var agg = pvt.aggregates;\n var fn = void 0;\n var aggregateData = pData;\n var res = {};\n if (data.aggregate) {\n aggregateData = data.aggregate;\n }\n for (var i = 0; i < agg.length; i++) {\n fn = DataUtil.aggregates[agg[i].type];\n if (fn) {\n res[agg[i].field + ' - ' + agg[i].type] = fn(aggregateData, agg[i].field);\n }\n }\n args.aggregates = res;\n }\n if (pvt && pvt.groups && pvt.groups.length) {\n var groups = pvt.groups;\n for (var i = 0; i < groups.length; i++) {\n var level = null;\n if (!isNullOrUndefined(groupDs)) {\n groupDs = DataUtil.group(groupDs, groups[i]);\n }\n var groupQuery = Query.filterQueries(query.queries, 'onGroup')[i].e;\n pData = DataUtil.group(pData, groups[i], pvt.aggregates, level, groupDs, groupQuery.comparer);\n }\n args.result = pData;\n }\n return args;\n };\n UrlAdaptor.prototype.getQueryRequest = function (query) {\n var req = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n req.sorts = Query.filterQueries(query.queries, 'onSortBy');\n req.groups = Query.filterQueries(query.queries, 'onGroup');\n req.filters = Query.filterQueries(query.queries, 'onWhere');\n req.searches = Query.filterQueries(query.queries, 'onSearch');\n req.aggregates = Query.filterQueries(query.queries, 'onAggregates');\n return req;\n };\n UrlAdaptor.prototype.addParams = function (options) {\n var req = options.reqParams;\n 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(props) {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json;odata=light;q=1,application/json;odata=verbose;q=0.5',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$inlinecount',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PUT'\n });\n _this.getModuleName = getValue('getModulename', _this);\n extend(_this.options, props || {});\n return _this;\n }\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var operator;\n var guid;\n var val = predicate.value;\n var type = typeof val;\n var field = predicate.field ? ODataAdaptor.getField(predicate.field) : null;\n if (val instanceof Date) {\n val = 'datetime\\'' + DataUtil.parse.replacer(val) + '\\'';\n }\n if (type === 'string') {\n val = '\\'' + val + '\\'';\n if (requiresCast) {\n field = 'cast(' + field + ', \\'Edm.String\\')';\n }\n if (DataUtil.parse.isGuid(val)) {\n guid = 'guid';\n }\n if (predicate.ignoreCase) {\n if (!guid) {\n field = 'tolower(' + field + ')';\n }\n val = val.toLowerCase();\n }\n }\n operator = DataUtil.odBiOperator[predicate.operator];\n if (operator) {\n returnValue += field;\n returnValue += operator;\n if (guid) {\n returnValue += guid;\n }\n return returnValue + val;\n }\n if (!isNullOrUndefined(this.getModuleName)) {\n if (this.getModuleName() === 'ODataV4Adaptor') {\n operator = DataUtil.odv4UniOperator[predicate.operator];\n }\n }\n else {\n operator = DataUtil.odUniOperator[predicate.operator];\n }\n if (operator === 'substringof') {\n var temp = val;\n val = field;\n field = temp;\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += val + ')';\n return returnValue;\n };\n ODataAdaptor.prototype.addParams = function (options) {\n _super.prototype.addParams.call(this, options);\n delete options.reqParams.params;\n };\n /**\n * Generate request string based on the multiple filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onComplexPredicate = function (predicate, query, requiresCast) {\n var res = [];\n for (var i = 0; i < predicate.predicates.length; i++) {\n res.push('(' + this.onEachWhere(predicate.predicates[i], query, requiresCast) + ')');\n }\n return res.join(' ' + predicate.condition + ' ');\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {Predicate} filter\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onEachWhere = function (filter, query, requiresCast) {\n return filter.isComplex ? this.onComplexPredicate(filter, query, requiresCast) : this.onPredicate(filter, query, requiresCast);\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {string[]} filters\n */\n ODataAdaptor.prototype.onWhere = function (filters) {\n if (this.pvt.search) {\n filters.push(this.onEachWhere(this.pvt.search, null, true));\n }\n return filters.join(' and ');\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataAdaptor.prototype.onEachSearch = function (e) {\n if (e.fields && e.fields.length === 0) {\n DataUtil.throwError('Query() - Search : oData search requires list of field names to search');\n }\n var filter = this.pvt.search || [];\n for (var i = 0; i < e.fields.length; i++) {\n filter.push(new Predicate(e.fields[i], e.operator, e.key, e.ignoreCase));\n }\n this.pvt.search = filter;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataAdaptor.prototype.onSearch = function (e) {\n this.pvt.search = Predicate.or(this.pvt.search);\n return '';\n };\n /**\n * Generate query string based on multiple sort criteria from query.\n * @param {QueryOptions} e\n */\n ODataAdaptor.prototype.onEachSort = function (e) {\n var res = [];\n if (e.name instanceof Array) {\n for (var i = 0; i < e.name.length; i++) {\n res.push(ODataAdaptor.getField(e.name[i]) + (e.direction === 'descending' ? ' desc' : ''));\n }\n }\n else {\n res.push(ODataAdaptor.getField(e.name) + (e.direction === 'descending' ? ' desc' : ''));\n }\n return res.join(',');\n };\n /**\n * Returns sort query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSortBy = function (e) {\n return e.reverse().join(',');\n };\n /**\n * Adds the group query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return [];\n };\n /**\n * Returns the select query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSelect = function (e) {\n for (var i = 0; i < e.length; i++) {\n e[i] = ODataAdaptor.getField(e[i]);\n }\n return e.join(',');\n };\n /**\n * Add the aggregate query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n return '';\n };\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataAdaptor.prototype.onCount = function (e) {\n return e === true ? 'allpages' : '';\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n ODataAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.options.multipartAccept);\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.overrideMimeType('text/plain; charset=x-user-defined');\n }\n else {\n request.setRequestHeader('Accept', this.options.accept);\n }\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.setRequestHeader('MaxDataServiceVersion', '2.0');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n if (!isNullOrUndefined(data.d)) {\n var dataCopy = ((query && query.isCountRequired) ? data.d.results : data.d);\n var metaData = '__metadata';\n if (!isNullOrUndefined(dataCopy)) {\n for (var i = 0; i < dataCopy.length; i++) {\n if (!isNullOrUndefined(dataCopy[i][metaData])) {\n delete dataCopy[i][metaData];\n }\n }\n }\n }\n var pvt = request && request[pvtData];\n var emptyAndBatch = this.processBatchResponse(data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var count = null;\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n var oDataCount = '__count';\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n if (data.d) {\n data = data.d;\n }\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n }\n if (version === 3 && data.value) {\n data = data.value;\n }\n if (data.d) {\n data = data.d;\n }\n if (version < 3 && data.results) {\n data = data.results;\n }\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Converts the request object to query string.\n * @param {Object} req\n * @param {Query} query\n * @param {DataManager} dm\n * @returns tableName\n */\n ODataAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n var res = [];\n var table = 'table';\n var tableName = request[table] || '';\n var format = '$format';\n delete request[table];\n if (dm.dataSource.requiresFormat) {\n request[format] = 'json';\n }\n var keys = Object.keys(request);\n for (var _i = 0, keys_4 = keys; _i < keys_4.length; _i++) {\n var prop = keys_4[_i];\n res.push(prop + '=' + request[prop]);\n }\n res = res.join('&');\n if (dm.dataSource.url && dm.dataSource.url.indexOf('?') !== -1 && !tableName) {\n return res;\n }\n return res.length ? tableName + '?' + res : tableName || '';\n };\n ODataAdaptor.prototype.localTimeReplacer = function (key, convertObj) {\n for (var _i = 0, _a = !isNullOrUndefined(convertObj) ? Object.keys(convertObj) : []; _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((convertObj[prop] instanceof Date)) {\n convertObj[prop] = DataUtil.dateParse.toLocalTime(convertObj[prop]);\n }\n }\n return convertObj;\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : ''),\n data: JSON.stringify(data, this.options.localTime ? this.localTimeReplacer : null)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var url;\n if (typeof value === 'string' && !DataUtil.parse.isGuid(value)) {\n url = \"('\" + value + \"')\";\n }\n else {\n url = \"(\" + value + \")\";\n }\n return {\n type: 'DELETE',\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + url\n };\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns this\n */\n ODataAdaptor.prototype.update = function (dm, keyField, value, tableName, query, original) {\n if (this.options.updateType === 'PATCH' && !isNullOrUndefined(original)) {\n value = this.compareAndRemove(value, original, keyField);\n }\n var url;\n if (typeof value[keyField] === 'string' && !DataUtil.parse.isGuid(value[keyField])) {\n url = \"('\" + value[keyField] + \"')\";\n }\n else {\n url = \"(\" + value[keyField] + \")\";\n }\n return {\n type: this.options.updateType,\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + url,\n data: JSON.stringify(value, this.options.localTime ? this.localTimeReplacer : null),\n accept: this.options.accept\n };\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @returns {Object}\n */\n ODataAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n var args = {\n url: e.url,\n key: e.key,\n cid: 1,\n cSet: DataUtil.getGuid(this.options.changeSet)\n };\n var req = '--' + initialGuid + '\\n';\n req += 'Content-Type: multipart/mixed; boundary=' + args.cSet.replace('--', '') + '\\n';\n this.pvt.changeSet = 0;\n req += this.generateInsertRequest(changes.addedRecords, args);\n req += this.generateUpdateRequest(changes.changedRecords, args, original ? original.changedRecords : []);\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, org) {\n var _this = this;\n if (!arr) {\n return '';\n }\n var req = '';\n arr.forEach(function (change) { return change = _this.compareAndRemove(change, org.filter(function (o) { return DataUtil.getObject(e.key, o) === DataUtil.getObject(e.key, change); })[0], e.key); });\n var stat = {\n 'method': this.options.updateType + ' ',\n 'url': function (data, i, key) { return '(' + data[i][key] + ')'; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat);\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 if (!isNullOrUndefined(arr[i]['@odata.etag'])) {\n req += 'If-Match: ' + arr[i]['@odata.etag'] + '\\n\\n';\n delete arr[i]['@odata.etag'];\n }\n else {\n req += '\\n';\n }\n req += stat.data(arr, i);\n }\n return req;\n };\n ODataAdaptor.prototype.processBatchResponse = function (data, query, xhr, request, changes) {\n if (xhr && xhr.getResponseHeader('Content-Type') && xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n if (request && this.options.batch && DataUtil.endsWith(request.url, this.options.batch) && request.type.toLowerCase() === 'post') {\n var guid = xhr.getResponseHeader('Content-Type');\n var cIdx = void 0;\n var jsonObj = void 0;\n var d = data + '';\n guid = guid.substring(guid.indexOf('=batchresponse') + 1);\n d = d.split(guid);\n if (d.length < 2) {\n return {};\n }\n d = d[1];\n var exVal = /(?:\\bContent-Type.+boundary=)(changesetresponse.+)/i.exec(d);\n if (exVal) {\n d.replace(exVal[0], '');\n }\n var changeGuid = exVal ? exVal[1] : '';\n d = d.split(changeGuid);\n for (var i = d.length; i > -1; i--) {\n if (!/\\bContent-ID:/i.test(d[i]) || !/\\bHTTP.+201/.test(d[i])) {\n continue;\n }\n cIdx = parseInt(/\\bContent-ID: (\\d+)/i.exec(d[i])[1], 10);\n if (changes.addedRecords[cIdx]) {\n jsonObj = DataUtil.parse.parseJson(/^\\{.+\\}/m.exec(d[i])[0]);\n extend({}, changes.addedRecords[cIdx], this.processResponse(jsonObj));\n }\n }\n return changes;\n }\n return null;\n };\n ODataAdaptor.prototype.compareAndRemove = function (data, original, key) {\n var _this = this;\n if (isNullOrUndefined(original)) {\n return data;\n }\n Object.keys(data).forEach(function (prop) {\n if (prop !== key && prop !== '@odata.etag') {\n if (DataUtil.isPlainObject(data[prop])) {\n _this.compareAndRemove(data[prop], original[prop]);\n var final = Object.keys(data[prop]).filter(function (data) { return data !== '@odata.etag'; });\n if (final.length === 0) {\n delete data[prop];\n }\n }\n else if (data[prop] === original[prop]) {\n delete data[prop];\n }\n else if (data[prop] && original[prop] && data[prop].valueOf() === original[prop].valueOf()) {\n delete data[prop];\n }\n }\n });\n return data;\n };\n return ODataAdaptor;\n}(UrlAdaptor));\nexport { ODataAdaptor };\n/**\n * The OData v4 is an improved version of OData protocols.\n * The DataManager uses the ODataV4Adaptor to consume OData v4 services.\n * @hidden\n */\nvar ODataV4Adaptor = /** @class */ (function (_super) {\n __extends(ODataV4Adaptor, _super);\n function ODataV4Adaptor(props) {\n var _this = _super.call(this, props) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json, text/javascript, */*; q=0.01',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$count',\n search: '$search',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PATCH',\n localTime: false\n });\n getValue('getModulename', _this.getModulename());\n extend(_this.options, props || {});\n return _this;\n }\n /**\n * @hidden\n */\n ODataV4Adaptor.prototype.getModulename = function () {\n return 'ODataV4Adaptor';\n };\n ;\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataV4Adaptor.prototype.onCount = function (e) {\n return e === true ? 'true' : '';\n };\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataV4Adaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var val = predicate.value;\n var isDate = val instanceof Date;\n returnValue = _super.prototype.onPredicate.call(this, predicate, query, requiresCast);\n if (isDate) {\n returnValue = returnValue.replace(/datetime'(.*)'$/, '$1');\n }\n return returnValue;\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataV4Adaptor.prototype.onEachSearch = function (e) {\n var search = this.pvt.searches || [];\n search.push(e.key);\n this.pvt.searches = search;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataV4Adaptor.prototype.onSearch = function (e) {\n return this.pvt.searches.join(' OR ');\n };\n /**\n * Returns the expand query string.\n * @param {string} e\n */\n ODataV4Adaptor.prototype.onExpand = function (e) {\n var _this = this;\n var selected = {};\n var expanded = {};\n var expands = e.expands.slice();\n var exArr = [];\n var selects = e.selects.filter(function (item) { return item.indexOf('.') > -1; });\n selects.forEach(function (select) {\n var splits = select.split('.');\n if (!(splits[0] in selected)) {\n selected[splits[0]] = [];\n }\n selected[splits[0]].push(splits[1]);\n });\n //Auto expand from select query\n Object.keys(selected).forEach(function (expand) {\n if ((expands.indexOf(expand) === -1)) {\n expands.push(expand);\n }\n });\n expands.forEach(function (expand) {\n expanded[expand] = expand in selected ? expand + \"(\" + _this.options.select + \"=\" + selected[expand].join(',') + \")\" : expand;\n });\n Object.keys(expanded).forEach(function (ex) { return exArr.push(expanded[ex]); });\n return exArr.join(',');\n };\n /**\n * Returns the select query string.\n * @param {string[]} e\n */\n ODataV4Adaptor.prototype.onSelect = function (e) {\n return _super.prototype.onSelect.call(this, e.filter(function (item) { return item.indexOf('.') === -1; }));\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n ODataV4Adaptor.prototype.beforeSend = function (dm, request, settings) {\n if (settings.type === 'POST' || settings.type === 'PUT' || settings.type === 'PATCH') {\n request.setRequestHeader('Prefer', 'return=representation');\n }\n request.setRequestHeader('Accept', this.options.accept);\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataV4Adaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var emptyAndBatch = _super.prototype.processBatchResponse.call(this, data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var count = null;\n var dataCount = '@odata.count';\n if (query && query.isCountRequired) {\n if (dataCount in data) {\n count = data[dataCount];\n }\n }\n data = !isNullOrUndefined(data.value) ? data.value : data;\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: count, aggregates: args.aggregates };\n };\n return ODataV4Adaptor;\n}(ODataAdaptor));\nexport { ODataV4Adaptor };\n/**\n * The Web API is a programmatic interface to define the request and response messages system that is mostly exposed in JSON or XML.\n * The DataManager uses the WebApiAdaptor to consume Web API.\n * Since this adaptor is targeted to interact with Web API created using OData endpoint, it is extended from ODataAdaptor\n * @hidden\n */\nvar WebApiAdaptor = /** @class */ (function (_super) {\n __extends(WebApiAdaptor, _super);\n function WebApiAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.url,\n data: JSON.stringify(data)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'DELETE',\n url: dm.dataSource.url + '/' + value,\n data: JSON.stringify(value)\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'PUT',\n url: dm.dataSource.url,\n data: JSON.stringify(value)\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n WebApiAdaptor.prototype.beforeSend = function (dm, request, settings) {\n request.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n WebApiAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var count = null;\n var args = {};\n if (request && request.type.toLowerCase() !== 'post') {\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n if (!DataUtil.isNull(data.Count)) {\n count = data.Count;\n }\n }\n if (version < 3 && data.Items) {\n data = data.Items;\n }\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n }\n args.result = args.result || data;\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n return WebApiAdaptor;\n}(ODataAdaptor));\nexport { WebApiAdaptor };\n/**\n * WebMethodAdaptor can be used by DataManager to interact with web method.\n * @hidden\n */\nvar WebMethodAdaptor = /** @class */ (function (_super) {\n __extends(WebMethodAdaptor, _super);\n function WebMethodAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare the request body based on the query.\n * The query information can be accessed at the WebMethod using variable named `value`.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns application\n */\n WebMethodAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var obj = new UrlAdaptor().processQuery(dm, query, hierarchyFilters);\n var getData = 'data';\n var data = DataUtil.parse.parseJson(obj[getData]);\n var result = {};\n var value = 'value';\n if (data.param) {\n for (var i = 0; i < data.param.length; i++) {\n var param = data.param[i];\n var key = Object.keys(param)[0];\n result[key] = param[key];\n }\n }\n result[value] = data;\n var pvtData = 'pvtData';\n var url = 'url';\n return {\n data: JSON.stringify(result),\n url: obj[url],\n pvtData: obj[pvtData],\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n };\n return WebMethodAdaptor;\n}(UrlAdaptor));\nexport { WebMethodAdaptor };\n/**\n * RemoteSaveAdaptor, extended from JsonAdaptor and it is used for binding local data and performs all DataManager queries in client-side.\n * It interacts with server-side only for CRUD operations.\n * @hidden\n */\nvar RemoteSaveAdaptor = /** @class */ (function (_super) {\n __extends(RemoteSaveAdaptor, _super);\n /**\n * @hidden\n */\n function RemoteSaveAdaptor() {\n var _this = _super.call(this) || this;\n setValue('beforeSend', UrlAdaptor.prototype.beforeSend, _this);\n return _this;\n }\n RemoteSaveAdaptor.prototype.insert = function (dm, data, tableName) {\n this.updateType = 'add';\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: data,\n table: tableName,\n action: 'insert'\n })\n };\n };\n RemoteSaveAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n _super.prototype.remove.call(this, dm, keyField, value);\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n })\n };\n };\n RemoteSaveAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.updateType = 'update';\n this.updateKey = keyField;\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: value[keyField],\n table: tableName\n })\n };\n };\n RemoteSaveAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes, e) {\n var i;\n if (this.updateType === 'add') {\n _super.prototype.insert.call(this, ds, data);\n }\n if (this.updateType === 'update') {\n _super.prototype.update.call(this, ds, this.updateKey, data);\n }\n if (data.added) {\n for (i = 0; i < data.added.length; i++) {\n _super.prototype.insert.call(this, ds, data.added[i]);\n }\n }\n if (data.changed) {\n for (i = 0; i < data.changed.length; i++) {\n _super.prototype.update.call(this, ds, e.key, data.changed[i]);\n }\n }\n if (data.deleted) {\n for (i = 0; i < data.deleted.length; i++) {\n _super.prototype.remove.call(this, ds, e.key, data.deleted[i]);\n }\n }\n return data;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * Also perform the changes in the locally cached data to sync with the remote data.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n RemoteSaveAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify({\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e.url,\n key: e.key\n })\n };\n };\n return RemoteSaveAdaptor;\n}(JsonAdaptor));\nexport { RemoteSaveAdaptor };\n/**\n * Cache Adaptor is used to cache the data of the visited pages. It prevents new requests for the previously visited pages.\n * You can configure cache page size and duration of caching by using cachingPageSize and timeTillExpiration properties of the DataManager\n * @hidden\n */\nvar CacheAdaptor = /** @class */ (function (_super) {\n __extends(CacheAdaptor, _super);\n /**\n * Constructor for CacheAdaptor class.\n * @param {CacheAdaptor} adaptor?\n * @param {number} timeStamp?\n * @param {number} pageSize?\n * @hidden\n */\n function CacheAdaptor(adaptor, timeStamp, pageSize) {\n var _this = _super.call(this) || this;\n _this.isCrudAction = false;\n _this.isInsertAction = false;\n if (!isNullOrUndefined(adaptor)) {\n _this.cacheAdaptor = adaptor;\n }\n _this.pageSize = pageSize;\n _this.guidId = DataUtil.getGuid('cacheAdaptor');\n var obj = { keys: [], results: [] };\n window.localStorage.setItem(_this.guidId, JSON.stringify(obj));\n var guid = _this.guidId;\n if (!isNullOrUndefined(timeStamp)) {\n setInterval(function () {\n var data;\n data = DataUtil.parse.parseJson(window.localStorage.getItem(guid));\n var forDel = [];\n for (var i = 0; i < data.results.length; i++) {\n var currentTime = +new Date();\n var requestTime = +new Date(data.results[i].timeStamp);\n data.results[i].timeStamp = currentTime - requestTime;\n if (currentTime - requestTime > timeStamp) {\n forDel.push(i);\n }\n }\n for (var i = 0; i < forDel.length; i++) {\n data.results.splice(forDel[i], 1);\n data.keys.splice(forDel[i], 1);\n }\n window.localStorage.removeItem(guid);\n window.localStorage.setItem(guid, JSON.stringify(data));\n }, timeStamp);\n }\n return _this;\n }\n /**\n * It will generate the key based on the URL when we send a request to server.\n * @param {string} url\n * @param {Query} query?\n * @hidden\n */\n CacheAdaptor.prototype.generateKey = function (url, query) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var key = url;\n var page = 'onPage';\n if (page in singles) {\n key += singles[page].pageIndex;\n }\n queries.sorts.forEach(function (obj) {\n key += obj.e.direction + obj.e.fieldName;\n });\n queries.groups.forEach(function (obj) {\n key += obj.e.fieldName;\n });\n queries.searches.forEach(function (obj) {\n key += obj.e.searchKey;\n });\n for (var filter = 0; filter < queries.filters.length; filter++) {\n var currentFilter = queries.filters[filter];\n if (currentFilter.e.isComplex) {\n var newQuery = query.clone();\n newQuery.queries = [];\n for (var i = 0; i < currentFilter.e.predicates.length; i++) {\n newQuery.queries.push({ fn: 'onWhere', e: currentFilter.e.predicates[i], filter: query.queries.filter });\n }\n key += currentFilter.e.condition + this.generateKey(url, newQuery);\n }\n else {\n key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value;\n }\n }\n return key;\n };\n /**\n * Process the query to generate request body.\n * If the data is already cached, it will return the cached data.\n * @param {DataManager} dm\n * @param {Query} query?\n * @param {Object[]} hierarchyFilters?\n */\n CacheAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var key = this.generateKey(dm.dataSource.url, query);\n var cachedItems;\n cachedItems = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null;\n if (data != null && !this.isCrudAction && !this.isInsertAction) {\n return data;\n }\n this.isCrudAction = null;\n this.isInsertAction = null;\n return this.cacheAdaptor.processQuery.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n */\n CacheAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (this.isInsertAction || (request && this.cacheAdaptor.options.batch &&\n DataUtil.endsWith(request.url, this.cacheAdaptor.options.batch) && request.type.toLowerCase() === 'post')) {\n return this.cacheAdaptor.processResponse(data, ds, query, xhr, request, changes);\n }\n data = this.cacheAdaptor.processResponse.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n var key = query ? this.generateKey(ds.dataSource.url, query) : ds.dataSource.url;\n var obj = {};\n obj = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var index = obj.keys.indexOf(key);\n if (index !== -1) {\n obj.results.splice(index, 1);\n obj.keys.splice(index, 1);\n }\n obj.results[obj.keys.push(key) - 1] = { keys: key, result: data.result, timeStamp: new Date(), count: data.count };\n while (obj.results.length > this.pageSize) {\n obj.results.splice(0, 1);\n obj.keys.splice(0, 1);\n }\n window.localStorage.setItem(this.guidId, JSON.stringify(obj));\n return data;\n };\n /**\n * Method will trigger before send the request to server side. Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n CacheAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.cacheAdaptor.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.multipartAccept);\n }\n if (!dm.dataSource.crossDomain) {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.accept);\n }\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n CacheAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.update(dm, keyField, value, tableName);\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.insert = function (dm, data, tableName) {\n this.isInsertAction = true;\n return this.cacheAdaptor.insert(dm, data, tableName);\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.remove(dm, keyField, value, tableName);\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n CacheAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return this.cacheAdaptor.batchRequest(dm, changes, e);\n };\n return CacheAdaptor;\n}(UrlAdaptor));\nexport { CacheAdaptor };\n","import { Ajax } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query } from './query';\nimport { ODataAdaptor, JsonAdaptor, CacheAdaptor, RemoteSaveAdaptor } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\nvar DataManager = /** @class */ (function () {\n /**\n * Constructor for DataManager class\n * @param {DataOptions|JSON[]} dataSource?\n * @param {Query} query?\n * @param {AdaptorOptions|string} adaptor?\n * @hidden\n */\n function DataManager(dataSource, query, adaptor) {\n var _this = this;\n /** @hidden */\n this.dateParse = true;\n this.requests = [];\n if (!dataSource && !this.dataSource) {\n dataSource = [];\n }\n adaptor = adaptor || dataSource.adaptor;\n var data;\n if (dataSource instanceof Array) {\n data = {\n json: dataSource,\n offline: true\n };\n }\n else if (typeof dataSource === 'object') {\n if (!dataSource.json) {\n dataSource.json = [];\n }\n data = {\n url: dataSource.url,\n insertUrl: dataSource.insertUrl,\n removeUrl: dataSource.removeUrl,\n updateUrl: dataSource.updateUrl,\n crudUrl: dataSource.crudUrl,\n batchUrl: dataSource.batchUrl,\n json: dataSource.json,\n headers: dataSource.headers,\n accept: dataSource.accept,\n data: dataSource.data,\n timeTillExpiration: dataSource.timeTillExpiration,\n cachingPageSize: dataSource.cachingPageSize,\n enableCaching: dataSource.enableCaching,\n requestType: dataSource.requestType,\n key: dataSource.key,\n crossDomain: dataSource.crossDomain,\n jsonp: dataSource.jsonp,\n dataType: dataSource.dataType,\n offline: dataSource.offline !== undefined ? dataSource.offline\n : dataSource.adaptor instanceof RemoteSaveAdaptor ? false : dataSource.url ? false : true,\n requiresFormat: dataSource.requiresFormat\n };\n }\n else {\n DataUtil.throwError('DataManager: Invalid arguments');\n }\n if (data.requiresFormat === undefined && !DataUtil.isCors()) {\n data.requiresFormat = isNullOrUndefined(data.crossDomain) ? true : data.crossDomain;\n }\n if (data.dataType === undefined) {\n data.dataType = 'json';\n }\n this.dataSource = data;\n this.defaultQuery = query;\n if (data.url && data.offline && !data.json.length) {\n this.isDataAvailable = false;\n this.adaptor = adaptor || new ODataAdaptor();\n this.dataSource.offline = false;\n this.ready = this.executeQuery(query || new Query());\n this.ready.then(function (e) {\n _this.dataSource.offline = true;\n _this.isDataAvailable = true;\n data.json = e.result;\n _this.adaptor = new JsonAdaptor();\n });\n }\n else {\n this.adaptor = data.offline ? new JsonAdaptor() : new ODataAdaptor();\n }\n if (!data.jsonp && this.adaptor instanceof ODataAdaptor) {\n data.jsonp = 'callback';\n }\n this.adaptor = adaptor || this.adaptor;\n if (data.enableCaching) {\n this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize);\n }\n return this;\n }\n /**\n * Overrides DataManager's default query with given query.\n * @param {Query} query - Defines the new default query.\n */\n DataManager.prototype.setDefaultQuery = function (query) {\n this.defaultQuery = query;\n return this;\n };\n /**\n * Executes the given query with local data source.\n * @param {Query} query - Defines the query to retrieve data.\n */\n DataManager.prototype.executeLocal = function (query) {\n if (!this.defaultQuery && !(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeLocal() : A query is required to execute');\n }\n if (!this.dataSource.json) {\n DataUtil.throwError('DataManager - executeLocal() : Json data is required to execute');\n }\n query = query || this.defaultQuery;\n var result = this.adaptor.processQuery(this, query);\n if (query.subQuery) {\n var from = query.subQuery.fromTable;\n var lookup = query.subQuery.lookups;\n var res = query.isCountRequired ? result.result :\n result;\n if (lookup && lookup instanceof Array) {\n DataUtil.buildHierarchy(query.subQuery.fKey, from, res, lookup, query.subQuery.key);\n }\n for (var j = 0; j < res.length; j++) {\n if (res[j][from] instanceof Array) {\n res[j] = extend({}, {}, res[j]);\n res[j][from] = this.adaptor.processResponse(query.subQuery.using(new DataManager(res[j][from].slice(0))).executeLocal(), this, query);\n }\n }\n }\n return this.adaptor.processResponse(result, this, query);\n };\n /**\n * Executes the given query with either local or remote data source.\n * It will be executed as asynchronously and returns Promise object which will be resolved or rejected after action completed.\n * @param {Query|Function} query - Defines the query to retrieve data.\n * @param {Function} done - Defines the callback function and triggers when the Promise is resolved.\n * @param {Function} fail - Defines the callback function and triggers when the Promise is rejected.\n * @param {Function} always - Defines the callback function and triggers when the Promise is resolved or rejected.\n */\n DataManager.prototype.executeQuery = function (query, done, fail, always) {\n var _this = this;\n if (typeof query === 'function') {\n always = fail;\n fail = done;\n done = query;\n query = null;\n }\n if (!query) {\n query = this.defaultQuery;\n }\n if (!(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeQuery() : A query is required to execute');\n }\n var deffered = new Deferred();\n var args = { query: query };\n if (!this.dataSource.offline && (this.dataSource.url !== undefined && this.dataSource.url !== '')) {\n var result = this.adaptor.processQuery(this, query);\n this.makeRequest(result, deffered, args, query);\n }\n else {\n DataManager.nextTick(function () {\n var res = _this.executeLocal(query);\n args = DataManager.getDeferedArgs(query, res, args);\n deffered.resolve(args);\n });\n }\n if (done || fail) {\n deffered.promise.then(done, fail);\n }\n if (always) {\n deffered.promise.then(always, always);\n }\n return deffered.promise;\n };\n DataManager.getDeferedArgs = function (query, result, args) {\n if (query.isCountRequired) {\n args.result = result.result;\n args.count = result.count;\n args.aggregates = result.aggregates;\n }\n else {\n args.result = result;\n }\n return args;\n };\n DataManager.nextTick = function (fn) {\n (window.setImmediate || window.setTimeout)(fn, 0);\n };\n DataManager.prototype.extendRequest = function (url, fnSuccess, fnFail) {\n return extend({}, {\n type: 'GET',\n dataType: this.dataSource.dataType,\n crossDomain: this.dataSource.crossDomain,\n jsonp: this.dataSource.jsonp,\n cache: true,\n processData: false,\n onSuccess: fnSuccess,\n onFailure: fnFail\n }, url);\n };\n DataManager.prototype.makeRequest = function (url, deffered, args, query) {\n var _this = this;\n var isSelector = !!query.subQuerySelector;\n var fnFail = function (e) {\n args.error = e;\n deffered.reject(args);\n };\n var process = function (data, count, xhr, request, actual, aggregates, virtualSelectRecords) {\n args.xhr = xhr;\n args.count = count ? parseInt(count.toString(), 10) : 0;\n args.result = data;\n args.request = request;\n args.aggregates = aggregates;\n args.actual = actual;\n args.virtualSelectRecords = virtualSelectRecords;\n deffered.resolve(args);\n };\n var fnQueryChild = function (data, selector) {\n var subDeffer = new Deferred();\n var childArgs = { parent: args };\n query.subQuery.isChild = true;\n var subUrl = _this.adaptor.processQuery(_this, query.subQuery, data ? _this.adaptor.processResponse(data) : selector);\n var childReq = _this.makeRequest(subUrl, subDeffer, childArgs, query.subQuery);\n if (!isSelector) {\n subDeffer.then(function (subData) {\n if (data) {\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, data, subData, query.subQuery.key);\n process(data, subData.count, subData.xhr);\n }\n }, fnFail);\n }\n return childReq;\n };\n var fnSuccess = function (data, request) {\n if (request.httpRequest.getResponseHeader('Content-Type').indexOf('xml') === -1 && _this.dateParse) {\n data = DataUtil.parse.parseJson(data);\n }\n var result = _this.adaptor.processResponse(data, _this, query, request.httpRequest, request);\n var count = 0;\n var aggregates = null;\n var virtualSelectRecords = 'virtualSelectRecords';\n var virtualRecords = data[virtualSelectRecords];\n if (query.isCountRequired) {\n count = result.count;\n aggregates = result.aggregates;\n result = result.result;\n }\n if (!query.subQuery) {\n process(result, count, request.httpRequest, request.type, data, aggregates, virtualRecords);\n return;\n }\n if (!isSelector) {\n fnQueryChild(result, request);\n }\n };\n var req = this.extendRequest(url, fnSuccess, fnFail);\n var ajax = new Ajax(req);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n req = ajax.send();\n req.catch(function (e) { return true; }); // to handle failure remote requests. \n this.requests.push(ajax);\n if (isSelector) {\n var promise = void 0;\n var res = query.subQuerySelector.call(this, { query: query.subQuery, parent: query });\n if (res && res.length) {\n promise = Promise.all([req, fnQueryChild(null, res)]);\n promise.then(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = args[0];\n var pResult = _this.adaptor.processResponse(result[0], _this, query, _this.requests[0].httpRequest, _this.requests[0]);\n var count = 0;\n if (query.isCountRequired) {\n count = pResult.count;\n pResult = pResult.result;\n }\n var cResult = _this.adaptor.processResponse(result[1], _this, query.subQuery, _this.requests[1].httpRequest, _this.requests[1]);\n count = 0;\n if (query.subQuery.isCountRequired) {\n count = cResult.count;\n cResult = cResult.result;\n }\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, pResult, cResult, query.subQuery.key);\n isSelector = false;\n process(pResult, count, _this.requests[0].httpRequest);\n });\n }\n else {\n isSelector = false;\n }\n }\n return req;\n };\n DataManager.prototype.beforeSend = function (request, settings) {\n this.adaptor.beforeSend(this, request, settings);\n var headers = this.dataSource.headers;\n var props;\n for (var i = 0; headers && i < headers.length; i++) {\n props = [];\n var keys = Object.keys(headers[i]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n props.push(prop);\n request.setRequestHeader(prop, headers[i][prop]);\n }\n }\n };\n /**\n * Save bulk changes to the given table name.\n * User can add a new record, edit an existing record, and delete a record at the same time.\n * If the datasource from remote, then updated in a single post.\n * @param {Object} changes - Defines the CrudOptions.\n * @param {string} key - Defines the column field.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.saveChanges = function (changes, key, tableName, query, original) {\n var _this = this;\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var args = {\n url: tableName,\n key: key || this.dataSource.key\n };\n var req = this.adaptor.batchRequest(this, changes, args, query, original);\n if (this.dataSource.offline) {\n return req;\n }\n var deff = new Deferred();\n var ajax = new Ajax(req);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n ajax.onSuccess = function (data, request) {\n deff.resolve(_this.adaptor.processResponse(DataUtil.parse.parseJson(data), _this, null, request.httpRequest, request, changes, args));\n };\n ajax.onFailure = function (e) {\n deff.reject([{ error: e }]);\n };\n ajax.send().catch(function (e) { return true; }); // to handle the failure requests. \n return deff.promise;\n };\n /**\n * Inserts new record in the given table.\n * @param {Object} data - Defines the data to insert.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.insert = function (data, tableName, query, position) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var req = this.adaptor.insert(this, data, tableName, query, position);\n if (this.dataSource.offline) {\n return req;\n }\n return this.doAjaxRequest(req);\n };\n /**\n * Removes data from the table with the given key.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.remove = function (keyField, value, tableName, query) {\n if (typeof value === 'object') {\n value = value[keyField];\n }\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.remove(this, keyField, value, tableName, query);\n if (this.dataSource.offline) {\n return res;\n }\n return this.doAjaxRequest(res);\n };\n /**\n * Updates existing record in the given table.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.update = function (keyField, value, tableName, query, original) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.update(this, keyField, value, tableName, query, original);\n if (this.dataSource.offline) {\n return res;\n }\n return this.doAjaxRequest(res);\n };\n DataManager.prototype.doAjaxRequest = function (res) {\n var _this = this;\n var defer = new Deferred();\n res = extend({}, {\n type: 'POST',\n contentType: 'application/json; charset=utf-8',\n processData: false\n }, res);\n var ajax = new Ajax(res);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n ajax.onSuccess = function (record, request) {\n try {\n DataUtil.parse.parseJson(record);\n }\n catch (e) {\n record = [];\n }\n record = _this.adaptor.processResponse(DataUtil.parse.parseJson(record), _this, null, request.httpRequest, request);\n defer.resolve(record);\n };\n ajax.onFailure = function (e) {\n defer.reject([{ error: e }]);\n };\n ajax.send().catch(function (e) { return true; }); // to handle the failure requests.\n return defer.promise;\n };\n return DataManager;\n}());\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, formatUnit, isNullOrUndefined, append, detach } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n content: 'e-content',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist'\n};\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n *
\n *
    \n *
  • Favourite
  • \n *
  • Documents
  • \n *
  • Downloads
  • \n *
\n *
\n * ```\n * ```typescript\n * var lvObj = new ListView({});\n * lvObj.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n */\n function ListView(options, element) {\n return _super.call(this, options, element) || this;\n }\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false);\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false);\n break;\n case 'enableVirtualization':\n detach(this.contentContainer);\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\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 this.isWindow = this.element.getBoundingClientRect().height ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n //Suport Component Functions\n ListView.prototype.header = function (text, showBack) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText, innerHTML: this.headerTitle });\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' e-but-back',\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\n append(compiledString({}), headerTemplateEle);\n append([headerTemplateEle], this.headerEle);\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'group', wrapperRole: 'presentation'\n },\n fields: this.fields.properties, sortOrder: this.sortOrder, showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this)\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = [];\n this.aniObj = new Animation(this.animateOptions);\n };\n ListView.prototype.renderCheckbox = function (args) {\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData = void 0;\n checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData = getFieldValues(args.curData, this.listBaseOption.fields);\n if (fieldData[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n args.item.setAttribute('aria-selected', 'true');\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * It is used to check the checkbox of an item.\n * @param {Fields | HTMLElement} 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.checkAllItems = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * It is used to un-check all the items in ListView.\n */\n ListView.prototype.uncheckAllItems = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checkIcon) {\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.uncheckItem(this.liCollection[i]);\n }\n }\n }\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.checkedItem(checked);\n }\n }\n };\n ListView.prototype.setCheckbox = function () {\n var _this = this;\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args_1 = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n liCollection.forEach(function (element) {\n args_1.item = element;\n args_1.curData = _this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n _this.renderCheckbox(args_1);\n if (args_1.item.classList.contains(classNames.selected)) {\n _this.checkInternally(args_1, args_1.item.querySelector('.' + classNames.checkboxWrapper));\n }\n });\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n liCollection.forEach(function (element) {\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n });\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n ListView.prototype.clickHandler = function (e) {\n var target = e.target;\n var classList = target.classList;\n if (classList.contains(classNames.backIcon) || classList.contains(classNames.headerText)) {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n this.removeFocus();\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n if (e.target.classList.contains(classNames.checkboxIcon)) {\n li.classList.add(classNames.focused);\n if (isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n li.classList.add(classNames.focused);\n }\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n var checkIcon = li.querySelector('.' + classNames.checkboxIcon);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n this.trigger('select', eventArgs);\n }\n }\n else if (li.classList.contains(classNames.hasChild)) {\n this.removeHover();\n this.removeSelect();\n this.removeSelect(li);\n this.setSelectLI(li, e);\n li.classList.remove(classNames.selected);\n }\n else {\n this.setCheckboxLI(li, e);\n }\n }\n else {\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.removeElement = function (element) {\n return element && element.parentNode && element.parentNode.removeChild(element);\n };\n ListView.prototype.hoverHandler = function (e) {\n var curLi = closest(e.target.parentNode, '.' + classNames.listItem);\n this.setHoverLI(curLi);\n };\n ListView.prototype.leaveHandler = function (e) {\n this.removeHover();\n };\n ;\n ListView.prototype.homeKeyHandler = function (e, end) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelectorAll('.' + classNames.listItem);\n var focusedElement = this.curUL.querySelector('.' + classNames.focused) ||\n this.curUL.querySelector('.' + classNames.selected);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n focusedElement.classList.remove(classNames.selected);\n }\n }\n var index = !end ? 0 : li.length - 1;\n if (li[index].classList.contains(classNames.hasChild) || this.showCheckBox) {\n li[index].classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(li[index], e);\n }\n }\n };\n ListView.prototype.onArrowKeyDown = function (e, prev) {\n var siblingLI;\n var li;\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n if (hasChild || this.showCheckBox) {\n li = this.curUL.querySelector('.' + classNames.focused) || this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n if (!isNullOrUndefined(siblingLI)) {\n if (li) {\n li.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n li.classList.remove(classNames.selected);\n }\n }\n if (siblingLI.classList.contains(classNames.hasChild) || this.showCheckBox) {\n siblingLI.classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(siblingLI, e);\n }\n }\n }\n else {\n li = this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n this.setSelectLI(siblingLI, e);\n }\n return siblingLI;\n };\n ListView.prototype.arrowKeyHandler = function (e, prev) {\n var _this = this;\n if (Object.keys(this.dataSource).length && this.curUL) {\n var siblingLI = this.onArrowKeyDown(e, prev);\n var elementTop = this.element.getBoundingClientRect().top;\n var elementHeight = this.element.getBoundingClientRect().height;\n var firstItemBounds = this.curUL.querySelector('.' + classNames.listItem).getBoundingClientRect();\n var heightDiff = void 0;\n var groupItemBounds = void 0;\n if (this.fields.groupBy) {\n groupItemBounds = this.curUL.querySelector('.' + classNames.groupListItem).getBoundingClientRect();\n }\n if (siblingLI) {\n var siblingTop = siblingLI.getBoundingClientRect().top;\n var siblingHeight = siblingLI.getBoundingClientRect().height;\n if (!prev) {\n var height = this.isWindow ? window.innerHeight : elementHeight;\n heightDiff = this.isWindow ? (siblingTop + siblingHeight) :\n ((siblingTop - elementTop) + siblingHeight);\n if (heightDiff > height) {\n this.isWindow ? window.scrollTo(0, pageYOffset + (heightDiff - height)) :\n this.element.scrollTo(0, this.element.scrollTop + (heightDiff - height));\n }\n }\n else {\n heightDiff = this.isWindow ? siblingTop : (siblingTop - elementTop);\n if (heightDiff < 0) {\n this.isWindow ? window.scrollTo(0, pageYOffset + heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop + heightDiff);\n }\n }\n }\n else if (this.enableVirtualization && prev && this.virtualizationModule.uiFirstIndex) {\n this.onUIScrolled = function () {\n _this.onArrowKeyDown(e, prev);\n _this.onUIScrolled = undefined;\n };\n heightDiff = this.virtualizationModule.listItemHeight;\n this.isWindow ? window.scrollTo(0, pageYOffset - heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop - heightDiff);\n }\n else if (prev) {\n if (this.showHeader && this.headerEle) {\n var topHeight = groupItemBounds ? groupItemBounds.top : firstItemBounds.top;\n var headerBounds = this.headerEle.getBoundingClientRect();\n heightDiff = headerBounds.top < 0 ? (headerBounds.height - topHeight) : 0;\n this.isWindow ? window.scrollTo(0, pageYOffset - heightDiff)\n : this.element.scrollTo(0, 0);\n }\n else if (this.fields.groupBy) {\n heightDiff = this.isWindow ? (groupItemBounds.top < 0 ? groupItemBounds.top : 0) :\n (elementTop - firstItemBounds.top) + groupItemBounds.height;\n this.isWindow ? window.scrollTo(0, pageYOffset + heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop - heightDiff);\n }\n }\n }\n };\n ListView.prototype.enterKeyHandler = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (hasChild && li) {\n li.classList.remove(classNames.focused);\n if (this.showCheckBox) {\n this.removeSelect();\n this.removeSelect(li);\n this.removeHover();\n }\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.spaceKeyHandler = function (e) {\n if (this.enable && this.showCheckBox && Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n }\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n e.preventDefault();\n switch (e.keyCode) {\n case 36:\n this.homeKeyHandler(e);\n break;\n case 35:\n this.homeKeyHandler(e, true);\n break;\n case 40:\n this.arrowKeyHandler(e);\n break;\n case 38:\n this.arrowKeyHandler(e, true);\n break;\n case 13:\n this.enterKeyHandler(e);\n break;\n case 8:\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n break;\n case 9:\n this.tabFocus(e);\n break;\n case 32:\n this.spaceKeyHandler(e);\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n var activeElement = this.curUL.querySelector('[aria-selected = true]');\n if (focusedElement && !this.showCheckBox) {\n focusedElement.classList.remove(classNames.focused);\n if (activeElement) {\n activeElement.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n if (!this.enableVirtualization) {\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n }\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n if (!this.enableVirtualization) {\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n }\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n this.touchModule.destroy();\n };\n ListView.prototype.tabFocus = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var selectedList = this.curUL.querySelector('.' + classNames.selected);\n if ((!selectedList && this.curUL) || this.showCheckBox) {\n var li = this.curUL.querySelector('.' + classNames.listItem);\n if (li.classList.contains(classNames.hasChild) || this.showCheckBox) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (isNullOrUndefined(focusedElement)) {\n li.classList.add(classNames.focused);\n }\n }\n else {\n this.setSelectLI(li, e);\n }\n }\n }\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.setAttribute('aria-selected', 'false');\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.groupListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n li.classList.add(classNames.focused);\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n li.setAttribute('aria-selected', 'true');\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n this.trigger('select', eventArgs);\n }\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (!isNullOrUndefined(data)\n && typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n selectedItem = { item: li, text: li && li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem = { item: li, text: fieldData && fieldData[this.listBaseOption.fields.text], data: data };\n }\n var eventArgs = {};\n merge(eventArgs, selectedItem);\n if (e) {\n merge(eventArgs, { isInteracted: true, event: e, index: Array.prototype.indexOf.call(this.curUL.children, li) });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (!isNullOrUndefined(data) && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li && li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n text: fieldData && fieldData[this.listBaseOption.fields.text],\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n li.setAttribute('aria-selected', 'true');\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs);\n this.selectedLI = li;\n this.renderSubList(li);\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n 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 var field = {};\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.element.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = this.dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[column]) &&\n this.fields[column] !==\n ListBase.defaultMappedFields[column]\n && columns.indexOf(this.fields[column]) === -1) {\n columns.push(this.fields[column]);\n }\n }\n query.select(columns);\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n if (dataSource && this.fields.groupBy) {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.listBaseOption.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.headerEle = this.ulElement = this.liCollection = undefined;\n this.setLocalData();\n this.header();\n };\n ListView.prototype.resetCurrentList = function () {\n this.setViewDataSource(this.curViewDS);\n this.contentContainer.innerHTML = '';\n this.createList();\n this.renderIntoDom(this.curUL);\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.createElement, this.curViewDS, this.listBaseOption);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n };\n ListView.prototype.renderSubList = function (li) {\n var uID = li.getAttribute('data-uid');\n if (li.classList.contains(classNames.hasChild) && uID) {\n var ul = closest(li.parentNode, '.' + classNames.parentItem);\n var ele = this.element.querySelector('[pid=\\'' + uID + '\\']');\n this.curDSLevel.push(uID);\n this.setViewDataSource(this.getSubDS());\n if (!ele) {\n var data = this.curViewDS;\n ele = ListBase.createListFromJson(this.createElement, data, this.listBaseOption, this.curDSLevel.length);\n ele.setAttribute('pID', uID);\n ele.style.display = 'none';\n this.renderIntoDom(ele);\n }\n this.switchView(ul, ele);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.selectedItems) {\n var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);\n this.header((fieldData[this.listBaseOption.fields.text]), true);\n }\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function (data) {\n this.setViewDataSource(data);\n if (this.enableVirtualization && Object.keys(this.dataSource).length) {\n if (this.template || this.groupTemplate) {\n this.listBaseOption.template = null;\n this.listBaseOption.groupTemplate = null;\n this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);\n }\n this.virtualizationModule.uiVirtualization();\n }\n else {\n this.createList();\n this.contentContainer = this.createElement('div', { className: classNames.content });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n }\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n fields[this.fields.id] = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * It is used to Initialize the control rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { role: 'list', tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\n this.unWireEvents();\n var classAr = [classNames.root, this.cssClass, classNames.disable, 'e-rtl',\n 'e-has-header', 'e-control'];\n removeClass([this.element], classAr);\n this.rippleFn();\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n this.element.innerHTML = '';\n this.curUL = this.ulElement = this.liCollection = this.headerEle = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * It helps to switch back from navigated sub list.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.add(classNames.focused);\n if (this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked)) {\n li.setAttribute('aria-selected', 'true');\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false));\n };\n /**\n * It is used to select the list item from the ListView.\n * @param {Fields|HTMLElement} 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.enableVirtualization) {\n this.virtualizationModule.selectItem(obj);\n }\n else 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' || typeof this.dataSource[0] === 'number') {\n if (obj instanceof Element) {\n var uid = obj.getAttribute('data-uid').toString();\n for (var i = 0; i < this.liCollection.length; i++) {\n if (this.liCollection[i].getAttribute('data-uid').toString() === uid) {\n li = this.liCollection[i];\n break;\n }\n }\n }\n else {\n Array.prototype.some.call(this.curUL.querySelectorAll('.' + classNames.listItem), function (item) {\n if (item.innerText.trim() === obj.toString()) {\n li = item;\n return true;\n }\n else {\n return false;\n }\n });\n }\n }\n else {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n li = this.element.querySelector('[data-uid=\"'\n + fieldData[this.fields.id] + '\"]');\n if (isNullOrUndefined(li)) {\n var curLi = this.element.querySelectorAll('.' + classNames.listItem);\n for (var i = 0; i < curLi.length; i++) {\n if (curLi[i].innerText.trim() === fieldData[this.fields.text]) {\n li = curLi[i];\n }\n }\n }\n }\n }\n }\n return li;\n };\n /**\n * It is used to select multiple list item from the ListView.\n * @param {Fields[] | HTMLElement[]} obj - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.selectMultipleItems = function (obj) {\n if (!isNullOrUndefined(obj)) {\n for (var i = 0; i < obj.length; i++) {\n if (!isNullOrUndefined(obj[i])) {\n this.selectItem(obj[i]);\n }\n }\n }\n };\n ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[i]);\n }\n }\n return parentId;\n };\n /**\n * It is used to get the currently [here](http://ej2.syncfusion.com/documentation/list-view/api-selectedItem.html?lang=typescript)\n * item details from the list items.\n */\n ListView.prototype.getSelectedItems = function () {\n this.selectedId = [];\n if (this.enableVirtualization) {\n return this.virtualizationModule.getSelectedItems();\n }\n else if (this.showCheckBox) {\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n var dataParent = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n liTextCollection.push(liCollection[i].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[i]);\n var fieldData = getFieldValues(tempData, this.listBaseOption.fields);\n if (this.isNestedList) {\n dataParent.push({ data: tempData, parentId: this.getParentId() });\n }\n else {\n liDataCollection.push(tempData);\n }\n if (fieldData) {\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n }\n else {\n liTextCollection.push(undefined);\n this.selectedId.push(undefined);\n }\n }\n }\n if (typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\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' || typeof this.dataSource[0] === 'number') {\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 if (this.enableVirtualization) {\n this.virtualizationModule.enableItem(obj);\n }\n };\n /**\n * It is used to disable the list items based on passed element.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.disableItem = function (obj) {\n this.setItemState(obj, false);\n if (this.enableVirtualization) {\n this.virtualizationModule.disableItem(obj);\n }\n };\n //A function that used to set state of the list item like enable, disable.\n ListView.prototype.setItemState = function (obj, isEnable) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (isEnable) {\n if (li) {\n li.classList.remove(classNames.disable);\n }\n delete resultJSON[this.fields.enabled];\n }\n else if (!isEnable) {\n if (li) {\n li.classList.add(classNames.disable);\n }\n resultJSON[this.fields.enabled] = false;\n }\n }\n };\n /**\n * It is used to show an list item from the ListView.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.showItem = function (obj) {\n this.showHideItem(obj, false, '');\n if (this.enableVirtualization) {\n this.virtualizationModule.showItem(obj);\n }\n };\n /**\n * It is used to hide an item from the ListView.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.hideItem = function (obj) {\n this.showHideItem(obj, true, 'none');\n if (this.enableVirtualization) {\n this.virtualizationModule.hideItem(obj);\n }\n };\n ListView.prototype.showHideItem = function (obj, isHide, display) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (li) {\n li.style.display = display;\n }\n if (isHide) {\n resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * It adds new item to current ListView.\n * To add a new item in the list view, we need to pass ‘data’ as array or object and ‘fields’ as object.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n * @param {{[key:string]:Object}[]} data - Array JSON Data that need to add.\n * @param {Fields} fields - Fields as an Object with ID and Text fields.\n */\n ListView.prototype.addItem = function (data, fields) {\n var _this = this;\n if (fields === void 0) { fields = undefined; }\n if (data instanceof Array) {\n if (this.enableVirtualization) {\n this.virtualizationModule.addItem(data, fields);\n }\n else {\n var ds = this.findItemFromDS(this.dataSource, fields);\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n var child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n if (ds instanceof Array) {\n data.forEach(function (dataSource) {\n _this.dataSource.push(dataSource);\n _this.setViewDataSource(_this.dataSource);\n if (_this.ulElement) {\n var index = _this.curViewDS.indexOf(dataSource);\n _this.addListItem(dataSource, index);\n var curViewDS = _this.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n _this.addListItem(curViewDS, (index - 1));\n }\n }\n else {\n _this.reRender();\n }\n });\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n else {\n ds[this.fields.child] = child;\n this.reRender();\n }\n }\n }\n };\n ListView.prototype.addListItem = function (dataSource, index) {\n var target = this.getLiFromObjOrElement(this.curViewDS[index + 1]) ||\n this.getLiFromObjOrElement(this.curViewDS[index + 2]) || null;\n var li = ListBase.createListItemFromJson(this.createElement, [dataSource], this.listBaseOption);\n this.ulElement.insertBefore(li[0], target);\n };\n /**\n * A function that removes the item from data source based on passed element like fields: { text: 'Name', tooltip: 'Name', id:'id'}\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.removeItem = function (obj) {\n if (this.enableVirtualization) {\n this.virtualizationModule.removeItem(obj);\n }\n else {\n this.removeItemFromList(obj);\n }\n };\n ListView.prototype.removeItemFromList = function (obj) {\n var fields = obj instanceof Element ? this.getElementUID(obj) : obj;\n var dataSource;\n dataSource = this.findItemFromDS(this.dataSource, fields, true);\n if (dataSource) {\n var data = void 0;\n data = this.findItemFromDS(dataSource, fields);\n var index = this.curViewDS.indexOf(data);\n var li = this.getLiFromObjOrElement(obj);\n var groupLi = void 0;\n if (this.fields.groupBy && this.curViewDS[index - 1] &&\n this.curViewDS[index - 1].isHeader &&\n (this.curViewDS[index - 1])\n .items.length === 1) {\n if (li && li.previousElementSibling.classList.contains(classNames.groupListItem) &&\n (isNullOrUndefined(li.nextElementSibling) || (li.nextElementSibling &&\n li.nextElementSibling.classList.contains(classNames.groupListItem)))) {\n groupLi = li.previousElementSibling;\n }\n }\n if (li) {\n detach(li);\n }\n if (groupLi) {\n detach(groupLi);\n }\n var dsIndex = dataSource.indexOf(data);\n dataSource.splice(dsIndex, 1);\n this.setViewDataSource(this.dataSource);\n this.liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n }\n };\n /**\n * A function that removes multiple item from list view based on given input.\n * @param {Fields[] | HTMLElement[]} 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 if (this.enableVirtualization) {\n this.removeItem(obj[i]);\n }\n else {\n this.removeItemFromList(obj[i]);\n }\n }\n }\n };\n // Module Required function\n ListView.prototype.getModuleName = function () {\n return 'listview';\n };\n ListView.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'virtualization' });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition']);\n };\n __decorate([\n Property()\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n ListView = __decorate([\n NotifyPropertyChanges\n ], ListView);\n return ListView;\n}(Component));\nexport { ListView };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { cldrData, L10n, Component, getDefaultDateObject, rippleEffect, Event } from '@syncfusion/ej2-base';\nimport { remove, addClass, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar FOCUS = 'e-input-focus';\nvar DEVICE = 'e-device';\nvar LISTCLASS = ListBaseClasses.li;\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nexport var TimePickerBase;\n(function (TimePickerBase) {\n // tslint:disable-next-line\n function createListItems(createdEl, min, max, globalize, timeFormat, step) {\n var start;\n var end;\n var interval = step * 60000;\n var listItems = [];\n var timeCollections = [];\n start = +(min.setMilliseconds(0));\n end = +(max.setMilliseconds(0));\n while (end >= start) {\n timeCollections.push(start);\n listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n start += interval;\n }\n var listTag = ListBase.createList(createdEl, listItems, null, true);\n return { collection: timeCollections, list: listTag };\n }\n TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * \n * \n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n __extends(TimePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function TimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.liCollections = [];\n _this.timeCollections = [];\n _this.disableItemCollection = [];\n return _this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n TimePicker.prototype.preRender = function () {\n this.keyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.cloneElement = this.element.cloneNode(true);\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.setTimeAllowEdit();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setValue(this.getFormattedValue(this.value));\n };\n TimePicker.prototype.setTimeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n };\n TimePicker.prototype.validateDisable = function () {\n this.setMinMax(this.initMin, this.initMax);\n this.popupCreation();\n this.popupObj.hide();\n if ((!isNaN(+this.value) && this.value !== null)) {\n if (!this.valueIsDisable(this.value)) {\n //disable value given in value property so reset the date based on current date\n if (this.strictMode) {\n this.resetState();\n }\n this.initValue = null;\n this.initMax = this.getDateObject(this.initMax);\n this.initMin = this.getDateObject(this.initMin);\n this.timeCollections = this.liCollections = [];\n this.setMinMax(this.initMin, this.initMax);\n }\n }\n };\n TimePicker.prototype.validationAttribute = function (target, input) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n input.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n TimePicker.prototype.initialize = function () {\n this.globalize = new Internationalization(this.locale);\n this.defaultCulture = new Internationalization('en');\n // persist the value property.\n this.setProperties({ value: this.checkDateValue(new Date('' + this.value)) }, true);\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkAttributes(); //check the input element attributes\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('timepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.initValue = this.checkDateValue(this.value);\n this.initMin = this.checkDateValue(this.min);\n this.initMax = this.checkDateValue(this.max);\n this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n }, this.createElement);\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n }\n if (this.inputWrapper.container) {\n remove(this.inputWrapper.container);\n }\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n _super.prototype.destroy.call(this);\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = this.createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.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.removeErrorClass = function () {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n };\n TimePicker.prototype.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if (this.validateState(value)) {\n this.removeErrorClass();\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n };\n TimePicker.prototype.validateInterval = function () {\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.enableElement([this.inputWrapper.buttons[0]]);\n }\n else {\n this.disableTimeIcon();\n }\n };\n TimePicker.prototype.disableTimeIcon = function () {\n this.disableElement([this.inputWrapper.buttons[0]]);\n this.hide();\n };\n TimePicker.prototype.disableElement = function (element) {\n addClass(element, DISABLED);\n };\n TimePicker.prototype.enableElement = function (element) {\n removeClass(element, DISABLED);\n };\n TimePicker.prototype.selectInputText = function () {\n this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n };\n TimePicker.prototype.getMeridianText = function () {\n var meridian;\n if (this.locale === 'en' || this.locale === 'en-US') {\n meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n }\n else {\n meridian = getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.dayPeriods.format.abbreviated', cldrData);\n }\n return meridian;\n };\n TimePicker.prototype.getCursorSelection = function () {\n var input = (this.inputElement);\n var start = 0;\n var end = 0;\n if (!isNaN(input.selectionStart)) {\n start = input.selectionStart;\n end = input.selectionEnd;\n }\n return { start: Math.abs(start), end: Math.abs(end) };\n };\n TimePicker.prototype.getActiveElement = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n return this.popupWrapper.querySelectorAll('.' + SELECTED);\n }\n else {\n return null;\n }\n };\n TimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n TimePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice) {\n var firstItem = this.isEmptyList() ? this.listTag : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).textIndent, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var listHeight = this.getPopupHeight();\n var element;\n element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.format)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.format;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.compareFormatChange(time);\n }\n }\n this.updateInput(true, this.initValue);\n };\n TimePicker.prototype.compareFormatChange = function (value) {\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value !== this.getText()) ? this.getDateObject(value) : this.getDateObject(this.value);\n };\n TimePicker.prototype.updatePlaceHolder = function () {\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n };\n //event related functions\n TimePicker.prototype.popupHandler = function (e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n e.preventDefault();\n if (this.isPopupOpen()) {\n this.closePopup(0, e);\n }\n else {\n this.show(e);\n }\n };\n TimePicker.prototype.mouseDownHandler = function () {\n if (!this.readonly) {\n var curPos = this.getCursorSelection();\n this.inputElement.setSelectionRange(0, 0);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n }\n };\n TimePicker.prototype.mouseUpHandler = function (event) {\n if (!this.readonly) {\n event.preventDefault();\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n var curPos = this.getCursorSelection();\n if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n if (this.inputElement.value.length > 0) {\n this.cursorDetails = this.focusSelection();\n }\n this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n }\n }\n };\n TimePicker.prototype.focusSelection = function () {\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n var split = this.inputElement.value.split('');\n split.push(' ');\n var curPos = this.getCursorSelection();\n var start = 0;\n var end = 0;\n var isSeparator = false;\n if (!this.isTextSelected) {\n for (var i = 0; i < split.length; i++) {\n if (!regex.test(split[i])) {\n end = i;\n isSeparator = true;\n }\n if (isSeparator) {\n if (curPos.start >= start && curPos.end <= end) {\n end = end;\n this.isTextSelected = true;\n break;\n }\n else {\n start = i + 1;\n isSeparator = false;\n }\n }\n }\n }\n else {\n start = curPos.start;\n end = curPos.end;\n this.isTextSelected = false;\n }\n return { start: start, end: end };\n };\n TimePicker.prototype.inputHandler = function (event) {\n if (!this.readonly && this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'home':\n case 'end':\n case 'up':\n case 'down':\n this.keyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue(this.valueWithMinutes, event);\n }\n else {\n this.updateValue(this.inputElement.value, event);\n }\n this.hide();\n addClass([this.inputWrapper.container], FOCUS);\n this.isNavigate = false;\n break;\n case 'open':\n this.show(event);\n break;\n case 'escape':\n Input.setValue(this.objToString(this.value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousState(this.value);\n this.hide();\n break;\n case 'close':\n this.hide();\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n TimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n this.setSelection(li, event);\n if (li && li.classList.contains(LISTCLASS)) {\n this.hide();\n addClass([this.inputWrapper.container], FOCUS);\n }\n };\n TimePicker.prototype.closePopup = function (delay, e) {\n if (this.isPopupOpen() && this.popupWrapper) {\n var args = {\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n name: 'open'\n };\n this.trigger('close', args);\n if (!args.cancel) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: delay ? delay : 0\n };\n this.popupObj.hide(new Animation(animModel));\n removeClass([this.inputWrapper.container], [ICONANIMATION]);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n }\n if (Browser.isDevice) {\n this.element.removeAttribute('readonly');\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n this.initValue = this.valueWithMinutes = this.compareFormatChange(this.inputElement.value);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.compareFormatChange(this.inputElement.value));\n }\n }\n else {\n var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n if (+this.prevDate !== +value) {\n this.valueProcess(event, value);\n }\n }\n }\n };\n TimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setHover(currentLi, HOVER);\n };\n TimePicker.prototype.setHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeHover(className);\n addClass([li], className);\n if (className === NAVIGATION) {\n li.setAttribute('aria-selected', 'true');\n }\n }\n };\n TimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(SELECTED)) {\n this.checkValue(li.getAttribute('data-value'));\n this.selectedElement = li;\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.checkValueChange(event, true);\n }\n };\n TimePicker.prototype.onMouseLeave = function () {\n this.removeHover(HOVER);\n };\n TimePicker.prototype.scrollHandler = function () {\n if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n return;\n }\n else {\n this.hide();\n }\n };\n TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n if (isNullOrUndefined(this.checkDateValue(minVal))) {\n this.initMin = this.getDateObject('12:00:00 AM');\n }\n if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n this.initMax = this.getDateObject('11:59:59 PM');\n }\n };\n //protected function\n TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n }\n else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n this.disableTimeIcon();\n }\n if (this.strictMode) {\n dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n }\n this.checkErrorState(dateVal);\n return dateVal;\n };\n TimePicker.prototype.valueIsDisable = function (value) {\n if (this.disableItemCollection.length > 0) {\n if (this.disableItemCollection.length === this.timeCollections.length) {\n return false;\n }\n var time = value instanceof Date ? this.objToString(value) : value;\n for (var index = 0; index < this.disableItemCollection.length; index++) {\n if (time === this.disableItemCollection[index]) {\n return false;\n }\n }\n }\n return true;\n };\n TimePicker.prototype.validateState = function (val) {\n if (!this.strictMode) {\n if (this.valueIsDisable(val)) {\n var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n this.setCurrentDate(this.getDateObject(val));\n var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n return false;\n }\n }\n else {\n if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n return false;\n }\n }\n }\n else {\n return false;\n }\n }\n return true;\n };\n TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n var minValue = this.createDateObj(this.getFormattedValue(minimum));\n var value = this.createDateObj(this.getFormattedValue(val));\n if (this.strictMode) {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n this.initValue = this.getDateObject(maxValue);\n Input.setValue(this.getValue(this.initValue), this.inputElement, this.floatLabelType, this.showClearButton);\n return this.inputElement.value;\n }\n else if (+minValue >= +value) {\n return this.getDateObject(minValue);\n }\n else if (+value >= +maxValue || +minValue === +maxValue) {\n return this.getDateObject(maxValue);\n }\n }\n else {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n if (!isNaN(+this.createDateObj(dateVal))) {\n return dateVal;\n }\n }\n }\n return dateVal;\n };\n TimePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler, this);\n }\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n if (!Browser.isDevice) {\n this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n keyAction: this.inputHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n if (this.showClearButton) {\n EventHandler.add(this.inputElement, 'mousedown touchstart', this.mouseDownHandler, this);\n }\n }\n };\n TimePicker.prototype.formResetHandler = function () {\n if (!this.inputElement.getAttribute('value')) {\n this.value = null;\n if (this.inputElement) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.removeErrorClass();\n }\n }\n else {\n this.value = this.checkDateValue(new Date('' + this.element.getAttribute('value')));\n }\n };\n TimePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n };\n TimePicker.prototype.unBindEvents = function () {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler, this);\n }\n };\n TimePicker.prototype.clearHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n if (this.popupWrapper) {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.initValue = null;\n this.resetState();\n this.changeEvent(event);\n };\n TimePicker.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.zIndex = this.zIndex;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.checkAttributes = function () {\n var attributes = ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'readonly':\n var readonly = !isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'style':\n this.inputStyle = this.inputElement.getAttribute(prop);\n break;\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'placeholder':\n this.placeholder = this.inputElement.getAttribute(prop);\n break;\n case 'min':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ min: value }, true);\n }\n break;\n case 'max':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ max: value }, true);\n }\n break;\n case 'value':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.initValue = value;\n this.updateInput(false, this.initValue);\n }\n break;\n }\n }\n }\n };\n TimePicker.prototype.setCurrentDate = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n };\n TimePicker.prototype.getTextFormat = function () {\n var time = 0;\n if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n time = 1;\n }\n else if (this.cldrTimeFormat().indexOf('a') < 0) {\n var strArray = this.cldrTimeFormat().split(' ');\n for (var i = 0; i < strArray.length; i++) {\n if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n time = i;\n break;\n }\n }\n }\n return time;\n };\n TimePicker.prototype.updateValue = function (value, event) {\n var val;\n if (this.isNullOrEmpty(value)) {\n this.resetState();\n }\n else {\n val = this.checkValue(value);\n if (this.strictMode) {\n // this case set previous value to the text box when set invalid date\n var inputVal = (val === null && value.trim().length > 0) ?\n this.previousState(this.prevDate) : this.inputElement.value;\n Input.setValue(inputVal, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n this.checkValueChange(event, typeof value === 'string' ? false : true);\n };\n TimePicker.prototype.previousState = function (date) {\n var value = this.getDateObject(date);\n for (var i = 0; i < this.timeCollections.length; i++) {\n if (+value === this.timeCollections[i]) {\n this.activeIndex = i;\n this.selectedElement = this.liCollections[i];\n this.valueWithMinutes = new Date(this.timeCollections[i]);\n break;\n }\n }\n return this.prevValue;\n };\n TimePicker.prototype.resetState = function () {\n this.removeSelection();\n Input.setValue('', this.inputElement, this.floatLabelType, false);\n this.valueWithMinutes = this.activeIndex = null;\n if (!this.strictMode) {\n this.checkErrorState(null);\n }\n };\n TimePicker.prototype.objToString = function (val) {\n if (isNullOrUndefined(this.checkDateValue(val))) {\n return null;\n }\n else {\n return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n }\n };\n TimePicker.prototype.checkValue = function (value) {\n if (!this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.validateValue(date, value);\n }\n this.resetState();\n return this.valueWithMinutes = null;\n };\n TimePicker.prototype.validateValue = function (date, value) {\n var time;\n var val = this.validateMinMax(value, this.min, this.max);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = this.objToString(this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = this.objToString(this.valueWithMinutes);\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n var value_1 = val.trim().length > 0 ? val : '';\n Input.setValue(value_1, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(time, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n TimePicker.prototype.findNextElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var timeVal = null;\n var count = this.liCollections.length;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(this.timeCollections.length - 1, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < count; i++) {\n if (+value < this.timeCollections[i]) {\n var index = this.validLiElement(i);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === count - 1) {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n else {\n for (var i = count - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n var index = this.validLiElement(i, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === 0) {\n var index = this.validLiElement(count - 1);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n }\n else {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n };\n TimePicker.prototype.elementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.checkValue(value);\n }\n };\n TimePicker.prototype.validLiElement = function (index, backward) {\n var elementIndex = null;\n var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n var isCheck = true;\n if (items.length) {\n if (backward) {\n for (var i = index; i >= 0; i--) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === 0) {\n if (isCheck) {\n index = i = items.length;\n isCheck = false;\n }\n }\n }\n }\n else {\n for (var i = index; i <= items.length - 1; i++) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === items.length - 1) {\n if (isCheck) {\n index = i = -1;\n isCheck = false;\n }\n }\n }\n }\n }\n return elementIndex;\n };\n TimePicker.prototype.keyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0 || this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n return;\n }\n var count = this.timeCollections.length;\n if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n var nextItem = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n false : true);\n nextItem = isNullOrUndefined(this.timeCollections[index]) ? this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n var index = this.validLiElement(0);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(count - 1, true);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(new Date(nextItem));\n }\n this.isNavigate = true;\n this.setHover(this.selectedElement, NAVIGATION);\n this.setActiveDescendant();\n this.selectInputText();\n if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setScrollPosition();\n }\n };\n TimePicker.prototype.setPopupPosition = function () {\n var offsetValue;\n var padding = 1;\n var popupHeight = this.getPopupHeight();\n var element = this.getActiveElement();\n var liHeight = this.liCollections[0].getBoundingClientRect().height;\n var listHeight = popupHeight / HALFPOSITION;\n var height = element.length === 0 ? this.liCollections[0].offsetTop : element[0].offsetTop;\n var lastItemOffsetValue = this.liCollections[this.liCollections.length - 1].offsetTop;\n var ulPadding = (parseInt(getComputedStyle(this.listTag).paddingTop, 10));\n if (lastItemOffsetValue - listHeight < height) {\n var count = popupHeight / liHeight;\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - ulPadding - HALFPOSITION;\n }\n else if ((height + liHeight) > listHeight) {\n offsetValue = listHeight - liHeight / HALFPOSITION;\n }\n else {\n offsetValue = height;\n }\n offsetValue = offsetValue + HALFPOSITION + ((liHeight - this.containerStyle.height) / HALFPOSITION);\n return -offsetValue;\n };\n TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n TimePicker.prototype.getCultureDateObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n };\n TimePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n TimePicker.prototype.unWireListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n if (!Browser.isDevice) {\n EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n }\n }\n };\n TimePicker.prototype.valueProcess = function (event, value) {\n var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n if (+this.prevDate !== +result) {\n this.initValue = result;\n this.changeEvent(event);\n }\n };\n TimePicker.prototype.changeEvent = function (e) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n event: (e || null),\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.trigger('change', eventArgs);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(date);\n }\n this.prevDate = this.valueWithMinutes = date;\n 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 = this.createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var start;\n var end;\n var interval = this.step * 60000;\n var listItems = [];\n this.timeCollections = [];\n this.disableItemCollection = [];\n start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n while (end >= start) {\n this.timeCollections.push(start);\n listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n start += interval;\n }\n var listBaseOptions = {\n itemCreated: function (args) {\n var eventArgs = {\n element: args.item,\n text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n };\n _this.trigger('itemRender', eventArgs);\n if (eventArgs.isDisabled) {\n eventArgs.element.classList.add(DISABLED);\n }\n if (eventArgs.element.classList.contains(DISABLED)) {\n _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n }\n }\n };\n this.listTag = ListBase.createList(this.createElement, listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n event.preventDefault();\n var target = event.target;\n if (!(closest(target, '#' + this.popupObj.element.id)) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.clearButton) &&\n target !== (this.inputWrapper && this.inputWrapper.container)) {\n if (this.isPopupOpen()) {\n this.hide();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n event.preventDefault();\n }\n }\n };\n TimePicker.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n }\n else {\n this.hide();\n addClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n };\n TimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.initMin = this.checkDateValue(new Date('' + date.min));\n this.setProperties({ min: this.initMin }, true);\n }\n else {\n this.initMax = this.checkDateValue(new Date('' + date.max));\n this.setProperties({ max: this.initMax }, true);\n }\n if (this.inputElement.value === '') {\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.checkValue(this.inputElement.value);\n }\n this.checkValueChange(null, false);\n };\n TimePicker.prototype.inputBlurHandler = function (e) {\n // IE popup closing issue when click over the scrollbar\n if (this.isPreventBlur && this.isPopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.closePopup(0, e);\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, e);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n };\n /**\n * Focuses out the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n TimePicker.prototype.inputFocusHandler = function () {\n var focusArguments = {\n model: this\n };\n if (!this.readonly && !Browser.isDevice) {\n this.selectInputText();\n }\n this.trigger('focus', focusArguments);\n };\n /**\n * Focused the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Hides the TimePicker popup.\n * @returns void\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100, null);\n };\n /**\n * Opens the popup to show the list items.\n * @returns void\n */\n TimePicker.prototype.show = function (event) {\n if ((this.enabled && this.readonly) || !this.enabled || this.popupWrapper) {\n return;\n }\n else {\n var args = {\n popup: this.popupObj || null,\n cancel: false,\n event: event || null,\n name: 'open'\n };\n this.trigger('open', args);\n if (!args.cancel && !this.isPopupOpen() && !this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n this.inputElement.focus();\n this.popupCreation();\n if (!args.cancel) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n this.popupObj.refreshPosition(this.inputElement);\n if (this.zIndex === 1000) {\n this.popupObj.show(new Animation(openAnimation), this.element);\n }\n else {\n this.popupObj.show(new Animation(openAnimation), null);\n }\n this.setActiveDescendant();\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n addClass([this.inputWrapper.container], FOCUS);\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentClickHandler, this);\n }\n }\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n TimePicker.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To get component name\n * @private\n */\n TimePicker.prototype.getModuleName = function () {\n return 'timepicker';\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n TimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.inputElement.setAttribute('aria-placeholder', newProp.placeholder);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n if (this.readonly) {\n this.hide();\n }\n break;\n case 'cssClass':\n 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 'allowEdit':\n this.setTimeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.updatePlaceHolder();\n this.setValue(this.value);\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.setValue(this.value);\n break;\n case 'value':\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(newProp.value)) }, true);\n newProp.value = this.value;\n }\n else {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n this.initValue = newProp.value;\n newProp.value = this.compareFormatChange(this.checkValue(newProp.value));\n this.checkValueChange(null, false);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n case 'strictMode':\n if (newProp.strictMode) {\n this.checkErrorState(null);\n }\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.checkValue((this.inputElement).value);\n this.checkValueChange(null, false);\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date('' + newProp.scrollTo))) {\n if (this.popupWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: newProp.scrollTo }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"itemRender\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"focus\", void 0);\n TimePicker = __decorate([\n NotifyPropertyChanges\n ], TimePicker);\n return TimePicker;\n}(Component));\nexport { TimePicker };\n","import { classNames } from './list-view';\nimport { EventHandler, append, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { ListBase } from '../common/list-base';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.listViewInstance = instance;\n }\n Virtualization.prototype.uiVirtualization = function () {\n var curViewDS = this.listViewInstance.curViewDS;\n var firstDs = curViewDS.slice(0, 1);\n this.listViewInstance.ulElement = this.listViewInstance.curUL = ListBase.createList(this.listViewInstance.createElement, firstDs, this.listViewInstance.listBaseOption);\n this.listViewInstance.contentContainer = this.listViewInstance.createElement('div', { className: classNames.content });\n this.listViewInstance.element.appendChild(this.listViewInstance.contentContainer);\n this.listViewInstance.contentContainer.appendChild(this.listViewInstance.ulElement);\n this.listItemHeight = this.listViewInstance.ulElement.firstElementChild.getBoundingClientRect().height;\n this.expectedDomItemCount = this.ValidateItemCount(10000);\n this.domItemCount = this.ValidateItemCount(Object.keys(this.listViewInstance.curViewDS).length);\n this.uiFirstIndex = 0;\n this.uiLastIndex = this.domItemCount - 1;\n this.wireScrollEvent(false);\n var otherDs = curViewDS.slice(1, this.domItemCount);\n var listItems = ListBase.createListItemFromJson(this.listViewInstance.createElement, otherDs, this.listViewInstance.listBaseOption);\n append(listItems, this.listViewInstance.ulElement);\n this.listViewInstance.liCollection = this.listViewInstance.curUL.querySelectorAll('li');\n this.topElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.topElement, this.listViewInstance.ulElement.firstElementChild);\n this.bottomElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.bottomElement, null);\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n this.listDiff = 0;\n this.uiIndicesInitialization();\n };\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n if (this.listViewInstance.isWindow) {\n this.onVirtualScroll = this.onVirtualUiScroll.bind(this);\n window.addEventListener('scroll', this.onVirtualScroll);\n }\n else {\n EventHandler.add(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll, this);\n }\n }\n else {\n this.listViewInstance.isWindow ? window.removeEventListener('scroll', this.onVirtualScroll) :\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll);\n }\n };\n Virtualization.prototype.ValidateItemCount = function (dataSourceLength) {\n var itemCount = this.listViewInstance.isWindow ? Math.round((window.innerHeight / this.listItemHeight) * 3) :\n Math.round((this.listViewInstance.height / this.listItemHeight) * 1.5);\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n Virtualization.prototype.uiIndicesInitialization = function () {\n var _this = this;\n this.uiIndices = { 'activeIndices': [], 'disabledItemIndices': [], 'hiddenItemIndices': [] };\n this.listViewInstance.curViewDS.forEach(function (ds, index) {\n if (_this.listViewInstance.showCheckBox && ds[_this.listViewInstance.fields.isChecked]) {\n _this.uiIndices.activeIndices.push(index);\n }\n if (!isNullOrUndefined(ds[_this.listViewInstance.fields.enabled]) && !ds[_this.listViewInstance.fields.enabled]) {\n _this.uiIndices.disabledItemIndices.push(index);\n }\n });\n };\n Virtualization.prototype.getscrollerHeight = function () {\n return this.listViewInstance.isWindow ? (((pageYOffset - this.startingHeight) <= 0) ? 0 :\n (pageYOffset - this.startingHeight)) : ((this.listViewInstance.element.scrollTop - this.startingHeight) <= 0) ? 0 :\n (this.listViewInstance.element.scrollTop - this.startingHeight);\n };\n Virtualization.prototype.onVirtualUiScroll = function () {\n if (isNullOrUndefined(this.startingHeight)) {\n if (this.listViewInstance.isWindow) {\n this.startingHeight = document.documentElement.getBoundingClientRect().height -\n this.listViewInstance.ulElement.getBoundingClientRect().height;\n }\n else {\n this.startingHeight = this.listViewInstance.headerEle ? this.listViewInstance.headerEle.getBoundingClientRect().height : 0;\n }\n this.scrollPosition = 0;\n }\n var scroll = this.getscrollerHeight();\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n if (scroll > this.scrollPosition) {\n var listDiff = ((this.topElementHeight / this.listItemHeight) - this.listDiff);\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, true);\n }\n else {\n this.onNormalScroll(listDiff, true);\n }\n }\n else {\n var listDiff = (this.listDiff - (this.topElementHeight / this.listItemHeight));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, false);\n }\n else {\n this.onNormalScroll(listDiff, false);\n }\n }\n this.listDiff = this.topElementHeight / this.listItemHeight;\n if (typeof this.listViewInstance.onUIScrolled === 'function') {\n this.listViewInstance.onUIScrolled();\n }\n }\n this.scrollPosition = scroll;\n var _a;\n };\n Virtualization.prototype.onLongScroll = function (listDiff, isScrollingDown) {\n var _this = this;\n var index = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n Array.prototype.forEach.call(this.listViewInstance.ulElement.querySelectorAll('li'), function (element) {\n _this.updateUI(element, index);\n index++;\n });\n this.uiLastIndex = isScrollingDown ? (this.uiLastIndex + listDiff) : (this.uiLastIndex - listDiff);\n this.uiFirstIndex = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n };\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n if (isScrollingDown) {\n for (var i = 0; i < listDiff; i++) {\n var index = ++this.uiLastIndex;\n this.updateUI(this.topElement.nextElementSibling, index, this.bottomElement);\n this.uiFirstIndex++;\n }\n }\n else {\n for (var i = 0; i < listDiff; i++) {\n var index = --this.uiFirstIndex;\n var target = this.topElement.nextSibling;\n this.updateUI(this.bottomElement.previousElementSibling, index, target);\n this.uiLastIndex--;\n }\n }\n };\n Virtualization.prototype.updateUiContent = function (element, index) {\n var curViewDs = this.listViewInstance.curViewDS;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n element.dataset.uid = ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n this.listViewInstance.curViewDS[index].toString();\n }\n else {\n element.dataset.uid = curViewDs[index][this.listViewInstance.fields.id] ?\n curViewDs[index][this.listViewInstance.fields.id].toString() : ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n curViewDs[index][this.listViewInstance.fields.text].toString();\n }\n if (this.listViewInstance.showIcon) {\n if (element.querySelector('.' + classNames.listIcon)) {\n detach(element.querySelector('.' + classNames.listIcon));\n }\n if (this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]) {\n var textContent = element.querySelector('.' + classNames.textContent);\n var target = this.listViewInstance.createElement('div', {\n className: classNames.listIcon + ' ' +\n this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]\n });\n textContent.insertBefore(target, element.querySelector('.' + classNames.listItemText));\n }\n }\n if (this.listViewInstance.showCheckBox && this.listViewInstance.fields.groupBy) {\n if (!this.checkListWrapper) {\n this.checkListWrapper = this.listViewInstance.curUL.querySelector('.' + classNames.checkboxWrapper).cloneNode(true);\n }\n var textContent = element.querySelector('.' + classNames.textContent);\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.remove(classNames.checklist);\n textContent.classList.remove(classNames.checkbox);\n detach(element.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n else {\n if (!element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.add(classNames.checklist);\n textContent.classList.add(classNames.checkbox);\n textContent.insertBefore(this.checkListWrapper.cloneNode(true), element.querySelector('.' + classNames.listItemText));\n }\n }\n }\n };\n Virtualization.prototype.changeElementAttributes = function (element, index) {\n element.classList.remove(classNames.disable);\n if (this.uiIndices.disabledItemIndices.length && this.uiIndices.disabledItemIndices.indexOf(index) !== -1) {\n element.classList.add(classNames.disable);\n }\n element.style.display = '';\n if (this.uiIndices.hiddenItemIndices.length && this.uiIndices.hiddenItemIndices.indexOf(index) !== -1) {\n element.style.display = 'none';\n }\n if (this.listViewInstance.showCheckBox) {\n var checklistElement = element.querySelector('.' + classNames.checkboxWrapper);\n element.classList.remove(classNames.selected);\n element.classList.remove(classNames.focused);\n if (checklistElement) {\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n }\n if (this.uiIndices.activeIndices.length && this.uiIndices.activeIndices.indexOf(index) !== -1 &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n checklistElement.firstElementChild.classList.add(classNames.checked);\n checklistElement.setAttribute('aria-checked', 'true');\n if (this.activeIndex === index) {\n element.classList.add(classNames.focused);\n }\n }\n }\n else {\n element.classList.remove(classNames.selected);\n element.removeAttribute('aria-selected');\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex === index &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n element.setAttribute('aria-selected', 'true');\n }\n }\n if (this.listViewInstance.fields.groupBy) {\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.classList.contains(classNames.listItem)) {\n element.classList.remove(classNames.listItem);\n element.setAttribute('role', 'group');\n element.classList.add(classNames.groupListItem);\n }\n }\n else {\n if (element.classList.contains(classNames.groupListItem)) {\n element.classList.remove(classNames.groupListItem);\n element.setAttribute('role', 'listitem');\n element.classList.add(classNames.listItem);\n }\n }\n }\n };\n Virtualization.prototype.findDSAndIndexFromId = function (ds, fields) {\n var _this = this;\n var resultJSON = {};\n ds.some(function (data, index) {\n if ((fields[_this.listViewInstance.fields.id] &&\n fields[_this.listViewInstance.fields.id].toString()\n === (data[_this.listViewInstance.fields.id] && data[_this.listViewInstance.fields.id].toString())) || fields === data) {\n resultJSON.index = index;\n resultJSON.data = data;\n return true;\n }\n else {\n return false;\n }\n });\n return resultJSON;\n };\n Virtualization.prototype.getSelectedItems = function () {\n var _this = this;\n if (!isNullOrUndefined(this.activeIndex) || (this.listViewInstance.showCheckBox && this.uiIndices.activeIndices.length)) {\n var dataCollection_1 = [];\n var textCollection_1 = [];\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n var curViewDS_1 = this.listViewInstance.curViewDS;\n if (this.listViewInstance.showCheckBox) {\n this.uiIndices.activeIndices.forEach(function (index) {\n dataCollection_1.push(curViewDS_1[index]);\n });\n return {\n text: dataCollection_1,\n data: dataCollection_1,\n index: this.uiIndices.activeIndices.map(function (index) {\n return _this.listViewInstance.dataSource.indexOf(curViewDS_1[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_1[this.activeIndex],\n data: curViewDS_1[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_1[this.activeIndex])\n };\n }\n }\n else {\n var curViewDS_2 = this.listViewInstance.curViewDS;\n var text_1 = this.listViewInstance.fields.text;\n if (this.listViewInstance.showCheckBox) {\n this.uiIndices.activeIndices.forEach(function (index) {\n textCollection_1.push(curViewDS_2[index][text_1]);\n dataCollection_1.push(curViewDS_2[index]);\n });\n return {\n text: textCollection_1,\n data: dataCollection_1,\n index: this.uiIndices.activeIndices.map(function (index) {\n return (_this.listViewInstance.dataSource).indexOf(curViewDS_2[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_2[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS_2[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_2[this.activeIndex])\n };\n }\n }\n }\n else {\n return undefined;\n }\n };\n Virtualization.prototype.selectItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.activeIndex = resutJSON.index;\n if (this.listViewInstance.showCheckBox && this.uiIndices.activeIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.activeIndices.push(resutJSON.index);\n }\n this.listViewInstance.removeSelect();\n if (this.listViewInstance.showCheckBox && this.listViewInstance.curUL.querySelector('.' + classNames.focused)) {\n this.listViewInstance.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n if (this.listViewInstance.getLiFromObjOrElement(obj)) {\n if (this.listViewInstance.showCheckBox) {\n this.listViewInstance.setCheckboxLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n else {\n this.listViewInstance.setSelectLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n }\n else {\n var eventArgs = void 0;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n eventArgs = {\n text: this.listViewInstance.curViewDS[this.activeIndex],\n data: this.listViewInstance.curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n else {\n var curViewDS = this.listViewInstance.curViewDS;\n eventArgs = {\n text: curViewDS[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS[this.activeIndex],\n index: this.uiIndices.activeIndices\n };\n }\n this.listViewInstance.trigger('select', eventArgs);\n }\n }\n };\n Virtualization.prototype.enableItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.disableItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.disabledItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.disabledItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.showItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.hideItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.hiddenItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.removeItem = function (obj) {\n var dataSource;\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n dataSource = resutJSON.data;\n if (this.listViewInstance.curViewDS[resutJSON.index - 1] &&\n this.listViewInstance.curViewDS[resutJSON.index - 1].isHeader &&\n (this.listViewInstance.curViewDS[resutJSON.index - 1])\n .items.length === 1) {\n this.removeUiItem(resutJSON.index - 1);\n this.removeUiItem(resutJSON.index - 1);\n }\n else {\n this.removeUiItem(resutJSON.index);\n }\n }\n var index = this.listViewInstance.dataSource.indexOf(dataSource);\n if (index !== -1) {\n this.listViewInstance.dataSource.splice(index, 1);\n this.listViewInstance.setViewDataSource(this.listViewInstance.dataSource);\n }\n };\n Virtualization.prototype.setCheckboxLI = function (li, e) {\n var index = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n if (li.classList.contains(classNames.selected)) {\n if (this.uiIndices.activeIndices.indexOf(index) === -1) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n else {\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n }\n };\n Virtualization.prototype.setSelectLI = function (li, e) {\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n };\n Virtualization.prototype.checkedItem = function (checked) {\n var _this = this;\n if (checked) {\n this.uiIndices.activeIndices = [];\n this.activeIndex = undefined;\n this.listViewInstance.curViewDS.forEach(function (ds, index) {\n if (!ds.isHeader) {\n _this.uiIndices.activeIndices.push(index);\n }\n });\n }\n else {\n this.activeIndex = undefined;\n this.uiIndices.activeIndices = [];\n }\n };\n Virtualization.prototype.addUiItem = function (index) {\n var curViewDs = this.listViewInstance.curViewDS;\n this.changeUiIndices(index, true);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex++;\n }\n if (this.listViewInstance.showCheckBox &&\n curViewDs[index][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(index);\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n }\n if (parseFloat(this.bottomElement.style.height)) {\n var liItem = this.listViewInstance.curUL.lastElementChild.previousSibling;\n var target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n if (target) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n this.updateUI(liItem, index, target);\n }\n }\n else {\n var liItem = this.listViewInstance.curUL.firstElementChild.nextSibling;\n var target = void 0;\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n }\n this.topElement.style.height = parseFloat(this.topElement.style.height) + this.listItemHeight + 'px';\n this.uiFirstIndex++;\n this.uiLastIndex++;\n if (target) {\n this.updateUI(liItem, index, target);\n this.listViewInstance.isWindow ? window.scrollTo(0, (pageYOffset + this.listItemHeight)) :\n this.listViewInstance.element.scrollTop += this.listItemHeight;\n }\n }\n this.totalHeight += this.listItemHeight;\n this.listDiff = parseFloat(this.topElement.style.height) / this.listItemHeight;\n };\n Virtualization.prototype.removeUiItem = function (index) {\n this.totalHeight -= this.listItemHeight;\n var curViewDS = this.listViewInstance.curViewDS[index];\n var liItem = this.listViewInstance.getLiFromObjOrElement(curViewDS);\n this.listViewInstance.curViewDS.splice(index, 1);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex--;\n }\n if (liItem) {\n if (this.domItemCount > Object.keys(this.listViewInstance.curViewDS).length) {\n detach(liItem);\n this.domItemCount--;\n this.uiLastIndex--;\n this.totalHeight = 0;\n }\n else {\n if (liItem.classList.contains(classNames.disable)) {\n liItem.classList.remove(classNames.disable);\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(index), 1);\n }\n if (liItem.style.display === 'none') {\n liItem.style.display = '';\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(index), 1);\n }\n if (this.listViewInstance.showCheckBox && liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n var checklistElement = liItem.querySelector('.' + classNames.checkboxWrapper);\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n if (liItem.classList.contains(classNames.focused)) {\n liItem.classList.remove(classNames.focused);\n this.activeIndex = undefined;\n }\n }\n else if (liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else if (parseFloat(this.bottomElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else {\n this.topElement.style.height = parseFloat(this.topElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, (this.uiFirstIndex - 1), this.topElement.nextSibling);\n this.uiLastIndex--;\n this.uiFirstIndex--;\n }\n }\n }\n this.changeUiIndices(index, false);\n this.listDiff = parseFloat(this.topElement.style.height) / this.listItemHeight;\n };\n Virtualization.prototype.changeUiIndices = function (index, increment) {\n var _this = this;\n Object.keys(this.uiIndices).forEach(function (key) {\n _this.uiIndices[key] = _this.uiIndices[key].map(function (i) {\n if (i >= index) {\n return increment ? ++i : --i;\n }\n else {\n return i;\n }\n });\n });\n };\n Virtualization.prototype.addItem = function (data, fields) {\n var _this = this;\n data.forEach(function (dataSource) {\n _this.listViewInstance.dataSource.push(dataSource);\n _this.listViewInstance.setViewDataSource(_this.listViewInstance.dataSource);\n if (!_this.domItemCount) {\n _this.uiVirtualization();\n }\n else if (_this.domItemCount < _this.expectedDomItemCount) {\n _this.wireScrollEvent(true);\n detach(_this.listViewInstance.contentContainer);\n _this.uiVirtualization();\n }\n else {\n var index = _this.listViewInstance.curViewDS.indexOf(dataSource);\n _this.addUiItem(index);\n var curViewDS = _this.listViewInstance.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n _this.addUiItem(index - 1);\n }\n }\n });\n };\n Virtualization.prototype.createUIItem = function (args) {\n var template = this.listViewInstance.createElement('div');\n var commonTemplate = '
' +\n ' ${' + this.listViewInstance.fields.text + '}
';\n template.innerHTML = this.listViewInstance.template || commonTemplate;\n var templateElements = template.getElementsByTagName('*');\n var groupTemplate = this.listViewInstance.createElement('div');\n if (this.listViewInstance.fields.groupBy) {\n groupTemplate.innerHTML = this.listViewInstance.groupTemplate || commonTemplate;\n }\n var groupTemplateElements = groupTemplate.getElementsByTagName('*');\n if (args.curData.isHeader) {\n this.headerData = args.curData;\n }\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\n args.item.innerHTML = '';\n args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };\n for (var i = 0; i < templateElements.length; i++) {\n this.compileTemplate(templateElements[i], args.item, false);\n }\n for (var i = 0; i < groupTemplateElements.length; i++) {\n this.compileTemplate(groupTemplateElements[i], args.item, true);\n }\n args.item.context.template = args.curData.isHeader ? template.firstElementChild :\n groupTemplate.firstElementChild;\n args.item.context.type = args.curData.isHeader ? 'flatList' : 'groupList';\n var element = args.curData.isHeader ? groupTemplate : template;\n args.item.insertBefore(element.firstElementChild, null);\n };\n Virtualization.prototype.compileTemplate = function (element, item, isHeader) {\n this.textProperty(element, item, isHeader);\n this.classProperty(element, item, isHeader);\n this.attributeProperty(element, item, isHeader);\n };\n Virtualization.prototype.onChange = function (newData, listElement) {\n listElement.context.data = newData;\n var groupTemplateNodes = listElement.context.nodes.groupTemplateNodes;\n var flatTemplateNodes = listElement.context.nodes.flatTemplateNodes;\n if (!isNullOrUndefined(newData.isHeader) && newData.isHeader && listElement.context.type === 'groupList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'flatList';\n groupTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else if (!newData.isHeader && listElement.context.type === 'flatList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'groupList';\n flatTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else if (!newData.isHeader) {\n flatTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else {\n groupTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n };\n Virtualization.prototype.updateContextData = function (listElement, node, isHeader) {\n if (isHeader) {\n listElement.context.nodes.groupTemplateNodes.push(node);\n }\n else {\n listElement.context.nodes.flatTemplateNodes.push(node);\n }\n };\n Virtualization.prototype.classProperty = function (element, listElement, isHeader) {\n var _this = this;\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.className);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n if (resultantOutput && resultantOutput.length) {\n resultantOutput.forEach(function (classNameMatch) {\n var classFunction;\n if (classNameMatch[1].indexOf('?') !== -1 && classNameMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + classNameMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + 'data.' + classNameMatch[1]);\n }\n var subNode = {};\n if (isHeader) {\n subNode.bindedvalue = classFunction(_this.headerData);\n }\n else {\n subNode.bindedvalue = classFunction(_this.templateData);\n }\n subNode.onChange = function (value) {\n element.classList.remove(subNode.bindedvalue);\n element.classList.add(classFunction(value));\n subNode.bindedvalue = classFunction(value);\n };\n classNameMatch[0].split(' ').forEach(function (className) {\n element.classList.remove(className);\n });\n element.classList.add(subNode.bindedvalue);\n _this.updateContextData(listElement, subNode, isHeader);\n });\n }\n };\n Virtualization.prototype.attributeProperty = function (element, listElement, isHeader) {\n var _this = this;\n var attributeNames = [];\n for (var i = 0; i < element.attributes.length; i++) {\n attributeNames.push(element.attributes[i].nodeName);\n }\n if (attributeNames.indexOf('class') !== -1) {\n attributeNames.splice(attributeNames.indexOf('class'), 1);\n }\n attributeNames.forEach(function (attributeName) {\n var attrNameMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(attributeName) || [];\n var attrValueMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(element.getAttribute(attributeName))\n || [];\n var attributeNameFunction;\n var attributeValueFunction;\n if (attrNameMatch.length || attrValueMatch.length) {\n if (attrNameMatch[1]) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeNameFunction = new Function('data', 'return ' + 'data.' + attrNameMatch[1]);\n }\n if (attrValueMatch[1]) {\n if (attrValueMatch[1].indexOf('?') !== -1 && attrValueMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + attrValueMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + 'data.' + attrValueMatch[1]);\n }\n }\n var subNode_1 = {};\n if (isHeader) {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(_this.headerData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(_this.headerData)];\n }\n else {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(_this.templateData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(_this.templateData)];\n }\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ?\n attributeName : subNode_1.bindedvalue[0];\n subNode_1.onChange = function (value) {\n var bindedvalue = subNode_1.bindedvalue[1] === undefined ?\n element.getAttribute(subNode_1.attrName) : attributeValueFunction(value);\n element.removeAttribute(subNode_1.attrName);\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ? subNode_1.attrName : attributeNameFunction(value);\n element.setAttribute(subNode_1.attrName, bindedvalue);\n subNode_1.bindedvalue = [subNode_1.bindedvalue[0] === undefined ? undefined : attributeNameFunction(value),\n subNode_1.bindedvalue[1] === undefined ? undefined : attributeValueFunction(value)];\n };\n var attributeValue = subNode_1.bindedvalue[1] === undefined ? element.getAttribute(attributeName) :\n subNode_1.bindedvalue[1];\n element.removeAttribute(attributeName);\n element.setAttribute(subNode_1.attrName, attributeValue);\n _this.updateContextData(listElement, subNode_1, isHeader);\n }\n });\n };\n Virtualization.prototype.textProperty = function (element, listElement, isHeader) {\n var _this = this;\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.innerText);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n var isChildHasTextContent = Array.prototype.some.call(element.children, function (element) {\n if (new RegExp('\\\\${([^}]*)}', 'g').exec(element.innerText)) {\n return true;\n }\n else {\n return false;\n }\n });\n if (resultantOutput && resultantOutput.length && !isChildHasTextContent) {\n resultantOutput.forEach(function (textPropertyMatch) {\n var subNode = {};\n var textFunction;\n if (textPropertyMatch[1].indexOf('?') !== -1 && textPropertyMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + textPropertyMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + 'data.' + textPropertyMatch[1]);\n }\n if (isHeader) {\n subNode.bindedvalue = textFunction(_this.headerData);\n }\n else {\n subNode.bindedvalue = textFunction(_this.templateData);\n }\n subNode.onChange = function (value) {\n element.innerText = element.innerText.replace(subNode.bindedvalue, textFunction(value));\n subNode.bindedvalue = textFunction(value);\n };\n element.innerText = element.innerText.replace(textPropertyMatch[0], subNode.bindedvalue);\n _this.updateContextData(listElement, subNode, isHeader);\n });\n }\n };\n Virtualization.prototype.reRenderUiVirtualization = function () {\n this.wireScrollEvent(true);\n if (this.listViewInstance.contentContainer) {\n detach(this.listViewInstance.contentContainer);\n }\n this.listViewInstance.preRender();\n this.listViewInstance.localData = this.listViewInstance.dataSource;\n this.listViewInstance.renderList();\n };\n Virtualization.prototype.updateUI = function (element, index, targetElement) {\n if (this.listViewInstance.template || this.listViewInstance.groupTemplate) {\n var curViewDS = this.listViewInstance.curViewDS[index];\n element.dataset.uid = curViewDS[this.listViewInstance.fields.id] ?\n curViewDS[this.listViewInstance.fields.id].toString() : ListBase.generateId();\n this.onChange(curViewDS, element);\n }\n else {\n this.updateUiContent(element, index);\n }\n this.changeElementAttributes(element, index);\n if (targetElement) {\n this.listViewInstance.ulElement.insertBefore(element, targetElement);\n }\n };\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n Virtualization.prototype.destroy = function () {\n this.wireScrollEvent(true);\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, EventHandler, Internationalization, NotifyPropertyChanges, detach, getUniqueID } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Event, Browser, L10n, ChildProperty } from '@syncfusion/ej2-base';\nimport { addClass, createElement, remove, closest, select, prepend, removeClass, attributes, Collection } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, formatUnit, setValue, rippleEffect, merge, extend } from '@syncfusion/ej2-base';\nimport { CalendarBase } from '../calendar/calendar';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar DATERANGEWRAPPER = 'e-date-range-wrapper';\nvar INPUTCONTAINER = 'e-input-group';\nvar DATERANGEICON = 'e-input-group-icon e-range-icon e-icons';\nvar POPUP = 'e-popup';\nvar LEFTCALENDER = 'e-left-calendar';\nvar RIGHTCALENDER = 'e-right-calendar';\nvar LEFTCONTAINER = 'e-left-container';\nvar RIGHTCONTAINER = 'e-right-container';\nvar ROOT = 'e-daterangepicker';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar STARTENDCONTAINER = 'e-start-end';\nvar STARTDATE = 'e-start-date';\nvar ENDDATE = 'e-end-date';\nvar STARTBUTTON = 'e-start-btn';\nvar INPUTFOCUS = 'e-input-focus';\nvar ENDBUTTON = 'e-end-btn';\nvar RANGEHOVER = 'e-range-hover';\nvar OTHERMONTH = 'e-other-month';\nvar STARTLABEL = 'e-start-label';\nvar ENDLABEL = 'e-end-label';\nvar DISABLED = 'e-disabled';\nvar SELECTED = 'e-selected';\nvar CALENDAR = 'e-calendar';\nvar NEXTICON = 'e-next';\nvar PREVICON = 'e-prev';\nvar HEADER = 'e-header';\nvar TITLE = 'e-title';\nvar ICONCONTAINER = 'e-icon-container';\nvar RANGECONTAINER = 'e-date-range-container';\nvar RANGEHEADER = 'e-range-header';\nvar PRESETS = 'e-presets';\nvar FOOTER = 'e-footer';\nvar RANGEBORDER = 'e-range-border';\nvar TODAY = 'e-today';\nvar FOCUSDATE = 'e-focused-date';\nvar CONTENT = 'e-content';\nvar DAYSPAN = 'e-day-span';\nvar WEEKNUMBER = 'e-week-number';\nvar DATEDISABLED = 'e-date-disabled';\nvar ICONDISABLED = 'e-icon-disabled';\nvar CALENDARCONTAINER = 'e-calendar-container';\nvar SEPARATOR = 'e-separator';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar DEVICE = 'e-device';\nvar OVERLAY = 'e-overlay';\nvar CHANGEICON = 'e-change-icon e-icons';\nvar LISTCLASS = ListBaseClasses.li;\nvar RTL = 'e-rtl';\nvar HOVER = 'e-hover';\nvar OVERFLOW = 'e-range-overflow';\nvar OFFSETVALUE = 4;\nvar PRIMARY = 'e-primary';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar Presets = /** @class */ (function (_super) {\n __extends(Presets, _super);\n function Presets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Presets.prototype, \"label\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"start\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"end\", void 0);\n return Presets;\n}(ChildProperty));\nexport { Presets };\n/**\n * Represents the DateRangePicker component that allows user to select the date range from the calendar\n * or entering the range through the input element.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateRangePicker = /** @class */ (function (_super) {\n __extends(DateRangePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function DateRangePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isCustomRange = false;\n _this.isCustomWindow = false;\n _this.presetsItem = [];\n _this.liCollections = [];\n _this.previousEleValue = '';\n _this.isKeyPopup = false;\n _this.dateDisabled = false;\n _this.isRangeIconClicked = false;\n _this.isMaxDaysClicked = false;\n _this.disabledDays = [];\n _this.preventBlur = false;\n _this.preventFocus = false;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DateRangePicker.prototype.render = function () {\n this.initialize();\n this.setProperties({ startDate: this.startValue }, true);\n this.setProperties({ endDate: this.endValue }, true);\n this.setModelValue();\n };\n /**\n * Initialize the event handler\n * @returns void\n * @private\n */\n DateRangePicker.prototype.preRender = function () {\n this.presetKeyConfig = {\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n enter: 'enter',\n tab: 'tab',\n spacebar: 'space'\n };\n this.keyInputConfigs = {\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n tab: 'tab',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n this.defaultConstant = {\n placeholder: '',\n startLabel: 'Start Date',\n endLabel: 'End Date',\n customRange: 'Custom Range',\n applyText: 'Apply',\n cancelText: 'Cancel',\n selectedDays: 'Selected Days',\n days: 'days'\n };\n /**\n * Mobile View\n */\n this.isMobile = window.matchMedia('(max-width:550px)').matches;\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.cloneElement = this.element.cloneNode(true);\n if (this.element.getAttribute('id')) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n this.initProperty();\n _super.prototype.preRender.call(this);\n this.navNextFunction = this.navNextMonth.bind(this);\n this.navPrevFunction = this.navPrevMonth.bind(this);\n this.deviceNavNextFunction = this.deviceNavNext.bind(this);\n this.deviceNavPrevFunction = this.deviceNavPrevious.bind(this);\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n };\n ;\n DateRangePicker.prototype.updateValue = function () {\n var dateOptions = { format: this.format, type: 'date', skeleton: 'yMd' };\n if (this.value && this.value.length > 0) {\n if (this.value[0] instanceof Date && !isNaN(+this.value[0])) {\n this.setProperties({ startDate: this.value[0] }, true);\n this.startValue = this.value[0];\n }\n else if (typeof this.value[0] === 'string') {\n this.setProperties({ startDate: new Date('' + this.value[0]) }, true);\n this.startValue = new Date('' + this.value[0]);\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value[1] instanceof Date && !isNaN(+this.value[1])) {\n this.setProperties({ endDate: this.value[1] }, true);\n this.endValue = this.value[1];\n }\n else if (typeof this.value[1] === 'string') {\n this.setProperties({ endDate: new Date('' + this.value[1]) }, true);\n this.endValue = new Date('' + this.value[1]);\n this.setValue();\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (this.value && this.value.start) {\n if (this.value.start instanceof Date && !isNaN(+this.value.start)) {\n this.setProperties({ startDate: this.value.start }, true);\n this.startValue = this.value.start;\n }\n else if (typeof this.value.start === 'string') {\n this.setProperties({ startDate: new Date('' + this.value.start) }, true);\n this.startValue = new Date('' + this.value.start);\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value.end instanceof Date && !isNaN(+this.value.end)) {\n this.setProperties({ endDate: this.value.end }, true);\n this.endValue = this.value.end;\n }\n else if (typeof this.value.end === 'string') {\n this.setProperties({ endDate: new Date('' + this.value.end) }, true);\n this.endValue = new Date('' + this.value.end);\n this.setValue();\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (isNullOrUndefined(this.value)) {\n this.endValue = this.checkDateValue(new Date('' + this.endDate));\n this.startValue = this.checkDateValue(new Date('' + this.startDate));\n this.setValue();\n }\n };\n DateRangePicker.prototype.initProperty = function () {\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.updateValue();\n };\n DateRangePicker.prototype.initialize = function () {\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkHtmlAttributes();\n merge(this.keyConfigs, { shiftTab: 'shift+tab' });\n this.setProperties({ startDate: this.checkDateValue(new Date('' + this.startValue)) }, true); // persist the value propeerty.\n this.setProperties({ endValue: this.checkDateValue(new Date('' + this.endValue)) }, true);\n this.setValue();\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.l10n = new L10n('daterangepicker', this.defaultConstant, this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.processPresets();\n this.createInput();\n this.setRangeAllowEdit();\n this.bindEvents();\n };\n DateRangePicker.prototype.setRangeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n };\n DateRangePicker.prototype.validationAttribute = function (element, input) {\n var name = element.getAttribute('name') ? element.getAttribute('name') : element.getAttribute('id');\n input.setAttribute('name', name);\n element.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(element.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = element.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n element.removeAttribute(attributes[i]);\n }\n };\n DateRangePicker.prototype.processPresets = function () {\n this.presetsItem = [];\n var i = 0;\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {\n var range = _a[_i];\n var id = range.label.replace(/\\s+/g, '') + '_' + (++i);\n if (typeof range.end === 'string') {\n this.presetsItem.push({\n id: id, text: range.label, end: new Date('' + range.end), start: new Date('' + range.start)\n });\n }\n else {\n this.presetsItem.push({ id: id, text: range.label, start: range.start, end: range.end });\n }\n }\n var startDate = isNullOrUndefined(this.startValue) ? null : new Date(+this.startValue);\n var endDate = isNullOrUndefined(this.endValue) ? null : new Date(+this.endValue);\n this.presetsItem.push({ id: 'custom_range', text: this.l10n.getConstant('customRange'), start: startDate, end: endDate });\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.isCustomRange = true;\n this.activeIndex = this.presetsItem.length - 1;\n }\n }\n };\n DateRangePicker.prototype.bindEvents = function () {\n var form = closest(this.element, 'form');\n if (this.enabled) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (!this.isMobile) {\n this.inputKeyboardModule = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown', keyAction: this.inputHandler.bind(this), keyConfigs: this.keyInputConfigs\n });\n }\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.inputKeyboardModule)) {\n this.inputKeyboardModule.destroy();\n }\n }\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n DateRangePicker.prototype.updateHiddenInput = function () {\n if (this.firstHiddenChild && this.secondHiddenChild) {\n var format = { type: 'datetime', skeleton: 'yMd' };\n if (typeof this.startDate === 'string') {\n this.startDate = this.globalize.parseDate(this.startDate, format);\n }\n if (typeof this.endDate === 'string') {\n this.endDate = this.globalize.parseDate(this.endDate, format);\n }\n this.firstHiddenChild.value = (this.startDate && this.globalize.formatDate(this.startDate, format))\n || (this.inputElement.value);\n this.secondHiddenChild.value = (this.endDate && this.globalize.formatDate(this.endDate, format)) ||\n (this.inputElement.value);\n this.dispatchEvent(this.firstHiddenChild, 'focusout');\n this.dispatchEvent(this.firstHiddenChild, 'change');\n }\n };\n DateRangePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DateRangePicker.prototype.resetHandler = function (e) {\n this.valueType = this.value;\n e.preventDefault();\n this.clear();\n this.changeTrigger(e);\n this.clearRange();\n this.hide(e);\n };\n DateRangePicker.prototype.formResetHandler = function () {\n this.value = null;\n if (this.inputElement) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n removeClass([this.inputWrapper.container], ERROR);\n }\n };\n DateRangePicker.prototype.clear = function () {\n if (this.startValue !== null) {\n this.startValue = null;\n }\n if (this.endValue !== null) {\n this.endValue = null;\n }\n if (this.value && this.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n if (this.value !== null && this.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n if (!(isNullOrUndefined(this.applyButton))) {\n this.applyButton.disabled = this.applyButton.element.disabled = true;\n }\n this.removeSelection();\n };\n DateRangePicker.prototype.rangeIconHandler = function (e) {\n if (this.isMobile) {\n this.element.setAttribute('readonly', 'readonly');\n }\n e.preventDefault();\n this.targetElement = null;\n if (this.isPopupOpen()) {\n this.applyFunction(e);\n }\n else {\n this.isRangeIconClicked = true;\n this.inputWrapper.container.children[0].focus();\n this.show(null, e);\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.isRangeIconClicked = false;\n this.calendarFocus();\n this.isRangeIconClicked = true;\n }\n }\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateRangePicker.prototype.checkHtmlAttributes = function () {\n this.globalize = new Internationalization(this.locale);\n var attributes;\n attributes = ['startDate', 'endDate', 'minDays', 'maxDays', 'min', 'max', 'disabled',\n 'readonly', 'style', 'name', 'placeholder', 'type'];\n var format = { format: this.format, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var disabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ enabled: !disabled }, true);\n break;\n case 'readonly':\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n if (isNullOrUndefined(this.placeholder) || this.placeholder.trim() === '') {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, true);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'min':\n if (isNullOrUndefined(this.min) || +this.min === +new Date(1900, 0, 1)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'max':\n if (isNullOrUndefined(this.max) || +this.max === +new Date(2099, 11, 31)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'startDate':\n if (isNullOrUndefined(this.startDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.startValue = dateValue;\n this.setValue();\n }\n break;\n case 'endDate':\n if (isNullOrUndefined(this.endDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.endValue = dateValue;\n this.setValue();\n }\n break;\n case 'minDays':\n if (isNullOrUndefined(this.minDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'maxDays':\n if (isNullOrUndefined(this.maxDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n DateRangePicker.prototype.createPopup = function () {\n for (var i = 0; i < this.presetsItem.length; i++) {\n if ((i !== (this.presetsItem.length - 1)) && this.presetsItem[i].id === 'custom_range') {\n this.presetsItem.splice(i, 1);\n }\n }\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n for (var i = 0; i <= this.presetsItem.length - 2; i++) {\n var startDate = this.presetsItem[i].start;\n var endDate = this.presetsItem[i].end;\n if (this.startValue && this.endValue) {\n if ((+startDate.setMilliseconds(0) === +this.startValue.setMilliseconds(0)) &&\n (+endDate.setMilliseconds(0) === +this.endValue.setMilliseconds(0))) {\n this.activeIndex = i;\n this.isCustomRange = false;\n }\n }\n }\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n var isPreset = (!this.isCustomRange || this.isMobile);\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.isCustomWindow = false;\n this.createPresets();\n this.listRippleEffect();\n this.renderPopup();\n }\n else {\n this.isCustomWindow = true;\n this.renderControl();\n }\n };\n DateRangePicker.prototype.renderControl = function () {\n this.createControl();\n this.bindCalendarEvents();\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.disabledDateRender();\n }\n this.updateHeader();\n };\n DateRangePicker.prototype.clearCalendarEvents = function () {\n EventHandler.clearEvents(this.leftCalPrevIcon);\n EventHandler.clearEvents(this.leftCalNextIcon);\n EventHandler.clearEvents(this.rightCalPrevIcon);\n EventHandler.clearEvents(this.rightCalNextIcon);\n };\n DateRangePicker.prototype.updateNavIcons = function () {\n if (this.currentView() === 'Year' || this.currentView() === 'Decade') {\n return;\n }\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n this.nextIconHandler(this.compareMonths(new Date('' + this.leftCalCurrentDate), this.rightCalCurrentDate) < 1);\n this.previousIconHandler(this.compareMonths(new Date('' + this.leftCalCurrentDate), this.rightCalCurrentDate) < 1);\n };\n DateRangePicker.prototype.calendarIconEvent = function () {\n this.clearCalendarEvents();\n if (this.leftCalPrevIcon && !this.leftCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalPrevIcon, 'mousedown touchstart', this.navPrevFunction);\n }\n if (this.leftCalNextIcon && !this.leftCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalNextIcon, 'mousedown touchstart', this.navNextFunction);\n }\n if (this.rightCalPrevIcon && !this.rightCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalPrevIcon, 'mousedown touchstart', this.navPrevFunction);\n }\n if (this.rightCalNextIcon && !this.rightCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalNextIcon, 'mousedown touchstart', this.navNextFunction);\n }\n };\n DateRangePicker.prototype.bindCalendarEvents = function () {\n if (!this.isMobile) {\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.headerTitleElement = this.popupObj.element.querySelector('.' + RIGHTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.headerTitleElement = this.popupObj.element.querySelector('.' + LEFTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.leftKeyboardModule = new KeyboardEvents(this.leftCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n this.rightKeyboardModule = new KeyboardEvents(this.rightCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n else {\n this.deviceCalendarEvent();\n EventHandler.add(this.startButton.element, 'click touchstart', this.deviceHeaderClick, this);\n EventHandler.add(this.endButton.element, 'click touchstart', this.deviceHeaderClick, this);\n }\n this.bindCalendarCellEvents();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.calendarIconRipple = function () {\n rippleEffect(this.leftCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.leftCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n };\n DateRangePicker.prototype.deviceCalendarEvent = function () {\n EventHandler.clearEvents(this.nextIcon);\n EventHandler.clearEvents(this.previousIcon);\n rippleEffect(this.nextIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.previousIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n if (this.nextIcon && !this.nextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.nextIcon, 'mousedown', this.deviceNavNextFunction);\n }\n if (this.previousIcon && !this.previousIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.previousIcon, 'mousedown', this.deviceNavPrevFunction);\n }\n };\n DateRangePicker.prototype.deviceNavNext = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigateNext(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.deviceNavPrevious = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigatePrevious(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.updateDeviceCalendar = function (calendar) {\n if (calendar) {\n this.previousIcon = calendar.querySelector('.' + PREVICON);\n this.nextIcon = calendar.querySelector('.' + NEXTICON);\n this.calendarElement = calendar;\n this.deviceCalendar = calendar;\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n }\n };\n DateRangePicker.prototype.deviceHeaderClick = function (event) {\n var element = event.currentTarget;\n if (element.classList.contains(STARTBUTTON) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.classList.remove(ACTIVE);\n this.startButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + STARTDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.startValue);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.deviceNavigation();\n }\n this.removeClassDisabled();\n }\n else if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + ENDDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.endValue);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.deviceNavigation();\n }\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n this.selectableDates();\n }\n };\n DateRangePicker.prototype.inputFocusHandler = function () {\n this.preventBlur = false;\n var focusArguments = {\n model: this\n };\n if (!this.preventFocus) {\n this.preventFocus = true;\n this.trigger('focus', focusArguments);\n }\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.inputBlurHandler = function (e) {\n if (!this.preventBlur) {\n var value = this.inputElement.value;\n if (!isNullOrUndefined(this.presetsItem)) {\n if (this.presetsItem.length > 0 && this.previousEleValue !== this.inputElement.value) {\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n }\n }\n if (!isNullOrUndefined(value) && value.trim() !== '') {\n var range = value.split(' ' + this.separator + ' ');\n if (range.length > 1) {\n var dateOptions = { format: this.format, type: 'date', skeleton: 'yMd' };\n var startDate = this.globalize.parseDate(range[0].trim(), dateOptions);\n var endDate = this.globalize.parseDate(range[1].trim(), dateOptions);\n if (!isNullOrUndefined(startDate) && !isNaN(+startDate) && !isNullOrUndefined(endDate) && !isNaN(+endDate)) {\n this.startValue = startDate;\n this.endValue = endDate;\n this.setValue();\n this.refreshControl();\n this.changeTrigger(e);\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n this.updateHiddenInput();\n return;\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n if (!this.strictMode) {\n this.clearRange();\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n else {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n }\n this.errorClass();\n this.changeTrigger(e);\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n }\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.clearRange = function () {\n this.previousStartValue = this.previousEndValue = null;\n this.currentDate = null;\n };\n DateRangePicker.prototype.errorClass = function () {\n var inputStr = this.inputElement.value.trim();\n if (((isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue) && inputStr !== '') ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max))\n || ((this.startValue && this.isDateDisabled(this.startValue))\n || (this.endValue && this.isDateDisabled(this.endValue)))) && inputStr !== '') {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else {\n if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n }\n };\n DateRangePicker.prototype.keyCalendarUpdate = function (isLeftCalendar, ele) {\n this.removeFocusedDate();\n if (isLeftCalendar) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n ele = this.leftCalendar;\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n ele = this.rightCalendar;\n }\n this.updateCalendarElement(ele);\n this.table.focus();\n return ele;\n };\n DateRangePicker.prototype.navInCalendar = function (e, isLeftCalendar, leftLimit, rightLimit, ele) {\n var view = this.getViewNumber(this.currentView());\n var date;\n var min = this.min;\n var max;\n if (!isNullOrUndefined(this.maxDays) && this.isMaxDaysClicked && !isNullOrUndefined(this.startValue)) {\n max = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.maxDays - 1)));\n }\n else {\n max = this.max;\n }\n switch (e.action) {\n case 'moveRight':\n date = new Date(+this.currentDate);\n this.addDay(date, 1, e, max, min);\n if (isLeftCalendar && +date === +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.KeyboardNavigate(1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveLeft':\n date = new Date(+this.currentDate);\n this.addDay(date, -1, e, max, min);\n if (!isLeftCalendar) {\n if (+date === +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n }\n this.KeyboardNavigate(-1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveUp':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, -7, e, max, min);\n if (+date <= +leftLimit && !isLeftCalendar) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.KeyboardNavigate(-7, view, e, max, min);\n }\n else {\n this.KeyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n this.keyNavigation(ele, e);\n break;\n case 'moveDown':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, 7, e, max, min);\n if (isLeftCalendar && +date >= +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.KeyboardNavigate(7, view, e, max, min);\n }\n else {\n this.KeyboardNavigate(4, view, e, this.max, this.min);\n }\n this.keyNavigation(ele, e);\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n remove(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n this.keyNavigation(ele, e);\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n remove(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n this.keyNavigation(ele, e);\n break;\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.keyInputHandler = function (e, value) {\n var date;\n var view = this.getViewNumber(this.currentView());\n var rightDateLimit = new Date(this.rightCalCurrentDate.getFullYear(), this.rightCalCurrentDate.getMonth(), 1);\n var leftDateLimit = new Date(this.leftCalCurrentDate.getFullYear(), this.leftCalCurrentDate.getMonth() + 1, 0);\n var ele = closest(e.target, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n var isLeftCalendar = ele.classList.contains(LEFTCALENDER);\n this.updateCalendarElement(ele);\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n var focusedDate = ele.querySelector('tr td.' + FOCUSDATE);\n var startDate = ele.querySelector('tr td.' + STARTDATE);\n var endDate = ele.querySelector('tr td.' + ENDDATE);\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n var leftCalendar = closest(e.target, '.' + LEFTCALENDER);\n var rightCalendar = closest(e.target, '.' + RIGHTCALENDER);\n var presetElement = closest(e.target, '.' + PRESETS);\n if (!isNullOrUndefined(focusedDate)) {\n this.currentDate = this.currentDate;\n }\n else if (!isNullOrUndefined(endDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.endValue);\n }\n else if (!isNullOrUndefined(startDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.startValue);\n }\n else if (!this.dateDisabled) {\n this.currentDate.setDate(1);\n }\n this.effect = '';\n switch (e.action) {\n case 'altUpArrow':\n if (this.isPopupOpen()) {\n this.hide(e);\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n break;\n case 'select':\n if (view === 0) {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : startDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n this.selectRange(null, (element));\n }\n }\n else {\n if (!isNullOrUndefined(selectedDate) && !levelRestrict || !isNullOrUndefined(focusedDate)) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n }\n e.preventDefault();\n break;\n case 'controlHome':\n var yearDate = new Date(this.currentDate.getFullYear(), 0, 1);\n if (!isLeftCalendar && +yearDate < +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n this.keyNavigation(ele, e);\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else if (!isNullOrUndefined(rightCalendar)) {\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n if (this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(rightCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'controlUp':\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n this.calendarNavigation(e, this.calendarElement);\n }\n else {\n this.calendarNavigation(e, this.calendarElement);\n }\n e.preventDefault();\n break;\n case 'controlDown':\n if ((!isNullOrUndefined(selectedDate) && !levelRestrict) || !isNullOrUndefined(focusedDate)) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (selectedDate || focusedDate), value);\n }\n e.preventDefault();\n break;\n case 'controlEnd':\n yearDate = new Date(this.currentDate.getFullYear(), 11, 31);\n if (isLeftCalendar && +yearDate > +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n this.keyNavigation(ele, e);\n break;\n case 'pageUp':\n date = new Date(+this.currentDate);\n this.addMonths(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'pageDown':\n date = new Date(+this.currentDate);\n this.addMonths(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageUp':\n date = new Date(+this.currentDate);\n this.addYears(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageDown':\n date = new Date(+this.currentDate);\n this.addYears(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftTab':\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.setAttribute('tabindex', '0');\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n e.preventDefault();\n break;\n case 'spacebar':\n if (this.applyButton && !this.applyButton.disabled) {\n this.applyFunction(e);\n }\n break;\n default:\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n this.checkMinMaxDays();\n }\n this.presetHeight();\n };\n DateRangePicker.prototype.keyNavigation = function (calendar, e) {\n this.bindCalendarCellEvents(calendar);\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n this.updateRange([calendar]);\n this.dateDisabled = this.isDateDisabled(this.currentDate);\n e.preventDefault();\n };\n DateRangePicker.prototype.inputHandler = function (e) {\n switch (e.action) {\n case 'altDownArrow':\n if (!this.isPopupOpen()) {\n if (this.inputElement.value === '') {\n this.clear();\n this.changeTrigger(e);\n this.clearRange();\n }\n this.show(null, e);\n this.isRangeIconClicked = false;\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.calendarFocus();\n }\n }\n this.isKeyPopup = true;\n }\n break;\n case 'escape':\n if (this.isPopupOpen()) {\n this.hide(e);\n }\n break;\n case 'enter':\n if (document.activeElement === this.inputElement) {\n this.inputBlurHandler(e);\n this.hide(e);\n }\n break;\n case 'tab':\n if (document.activeElement === this.inputElement && this.isPopupOpen()) {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.bindCalendarCellEvents = function (calendar) {\n var tdCells;\n if (calendar) {\n tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n }\n else {\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n }\n for (var _i = 0, tdCells_1 = tdCells; _i < tdCells_1.length; _i++) {\n var cell = tdCells_1[_i];\n EventHandler.clearEvents(cell);\n var disabledCell = void 0;\n disabledCell = cell.classList.contains(DISABLED) || cell.classList.contains(DATEDISABLED);\n if (!disabledCell && !cell.classList.contains(WEEKNUMBER)) {\n if (!this.isMobile) {\n EventHandler.add(cell, 'mouseover touchstart', this.hoverSelection, this);\n }\n EventHandler.add(cell, 'mousedown touchstart', this.selectRange, this);\n }\n }\n };\n DateRangePicker.prototype.removeFocusedDate = function () {\n var isDate = !isNullOrUndefined(this.startValue) || !isNullOrUndefined(this.endValue);\n var focusedDate;\n focusedDate = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' .' + FOCUSDATE);\n if ((this.leftCalendar && this.leftCalendar.querySelector('.e-content').classList.contains('e-month')\n && this.rightCalendar && this.rightCalendar.querySelector('.e-content').classList.contains('e-month')) ||\n this.calendarElement && this.calendarElement.querySelector('.e-content').classList.contains('e-month')) {\n for (var _i = 0, focusedDate_1 = focusedDate; _i < focusedDate_1.length; _i++) {\n var ele = focusedDate_1[_i];\n if (!ele.classList.contains(TODAY) || (ele.classList.contains(TODAY) && (isDate))) {\n ele.classList.remove(FOCUSDATE);\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(ENDDATE)) {\n ele.removeAttribute('aria-label');\n }\n }\n }\n }\n };\n DateRangePicker.prototype.hoverSelection = function (event, element) {\n var currentElement = element || event.currentTarget;\n var currentDate = this.getIdValue(null, currentElement);\n if (!isNullOrUndefined(this.startValue) && +this.startValue >= +this.min && +this.startValue <= +this.max) {\n if ((!this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)\n && isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue))\n || (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue))) {\n var tdCells = void 0;\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n for (var _i = 0, tdCells_2 = tdCells; _i < tdCells_2.length; _i++) {\n var ele = tdCells_2[_i];\n var isDisabledCell = (!ele.classList.contains(DISABLED) || ele.classList.contains(DATEDISABLED));\n if (!ele.classList.contains(WEEKNUMBER) && isDisabledCell) {\n var eleDate = this.getIdValue(null, ele);\n var startDateValue = new Date(+this.startValue);\n var eleDateValue = new Date(+eleDate);\n if (eleDateValue.setHours(0, 0, 0, 0) >= startDateValue.setHours(0, 0, 0, 0) && +eleDate <= +currentDate) {\n addClass([ele], RANGEHOVER);\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.updateRange = function (elementCollection) {\n if (!isNullOrUndefined(this.startValue)) {\n for (var _i = 0, elementCollection_1 = elementCollection; _i < elementCollection_1.length; _i++) {\n var calendar = elementCollection_1[_i];\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n for (var _a = 0, tdCells_3 = tdCells; _a < tdCells_3.length; _a++) {\n var ele = tdCells_3[_a];\n if (!ele.classList.contains(WEEKNUMBER) && !ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n var eleDateValue = this.getIdValue(null, ele);\n if (!isNullOrUndefined(this.endValue)) {\n if (this.currentView() === 'Month' &&\n +eleDateValue.setHours(0, 0, 0, 0) >= +new Date(+this.startValue).setHours(0, 0, 0, 0)\n && +eleDateValue.setHours(0, 0, 0, 0) <= +new Date(+this.endValue).setHours(0, 0, 0, 0) &&\n +new Date(+this.startValue).setHours(0, 0, 0, 0) !== +new Date(+this.endValue).setHours(0, 0, 0, 0) &&\n +new Date(+this.startValue).setHours(0, 0, 0, 0) >= +this.min\n && +new Date(+this.endValue).setHours(0, 0, 0, 0) <= +this.max\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], RANGEHOVER);\n }\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n if (!ele.classList.contains(OTHERMONTH)) {\n var startDateValue = new Date(+this.startValue);\n var eleDateValue_1 = new Date(+eleDate);\n if (this.currentView() === 'Month' &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +startDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) >= +startDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, true);\n }\n var endDateValue = new Date(+this.endValue);\n if (this.currentView() === 'Month' &&\n !isNullOrUndefined(this.endValue) &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +endDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) <= +endDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, false);\n }\n if (+eleDate === +this.startValue && !isNullOrUndefined(this.endValue) && +eleDate === +this.endValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.checkMinMaxDays = function () {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n if (!this.isMobile) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + LEFTCALENDER));\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + RIGHTCALENDER));\n }\n else {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n }\n };\n DateRangePicker.prototype.rangeArgs = function (e) {\n var inputValue;\n var range;\n var startDate = !isNullOrUndefined(this.startValue) ?\n this.globalize.formatDate(this.startValue, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n var endDate = !isNullOrUndefined(this.endValue) ?\n this.globalize.formatDate(this.endValue, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n inputValue = startDate + ' ' + this.separator + ' ' + endDate;\n range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n }\n else {\n inputValue = '';\n range = 0;\n }\n var args = {\n value: this.value,\n startDate: this.startValue,\n endDate: this.endValue,\n daySpan: range,\n event: e || null,\n element: this.element,\n isInteracted: !isNullOrUndefined(e),\n text: inputValue\n };\n return args;\n };\n DateRangePicker.prototype.otherMonthSelect = function (ele, isStartDate, sameDate) {\n var value = +this.getIdValue(null, ele);\n var dateIdString = '*[id^=\"/id\"]:not(.e-other-month)'.replace('/id', '' + value);\n var tdCell = this.popupObj && this.popupObj.element.querySelector(dateIdString);\n if (!isNullOrUndefined(tdCell)) {\n if (isStartDate) {\n addClass([tdCell], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.startValue, true);\n }\n else {\n addClass([tdCell], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.endValue, true);\n }\n if (sameDate) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.selectRange = function (event, element) {\n var leftCalendar;\n var rightCalendar;\n if (event) {\n event.preventDefault();\n }\n var date;\n date = isNullOrUndefined(event) ? this.getIdValue(null, element)\n : this.getIdValue(event, null);\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n if (!this.isMobile || this.isMobile && !this.endButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n }\n else if (this.isMobile && this.startButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n var ele = element || event.currentTarget;\n if (isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.previousStartValue)) {\n date.setHours(this.previousStartValue.getHours());\n date.setMinutes(this.previousStartValue.getMinutes());\n date.setSeconds(this.previousStartValue.getSeconds());\n }\n this.startValue = new Date('' + date);\n this.endValue = null;\n this.setValue();\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n this.applyButton.disabled = true;\n this.applyButton.element.disabled = true;\n if (this.isMobile) {\n this.endButton.element.classList.add(ACTIVE);\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.removeAttribute('disabled');\n this.selectableDates();\n }\n this.trigger('select', this.rangeArgs(event));\n }\n else {\n if (+date === +this.startValue || +date > +this.startValue) {\n if (+date === +this.startValue && !isNullOrUndefined(this.minDays) && this.minDays > 1) {\n return;\n }\n this.endValue = null;\n this.setValue();\n if (this.isMobile || element) {\n this.hoverSelection(event, element);\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n date.setHours(this.previousEndValue.getHours());\n date.setMinutes(this.previousEndValue.getMinutes());\n date.setSeconds(this.previousEndValue.getSeconds());\n }\n this.endValue = new Date('' + date);\n this.setValue();\n var endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n if (this.isMobile) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n for (var _i = 0, endEle_1 = endEle; _i < endEle_1.length; _i++) {\n var ele_1 = endEle_1[_i];\n ele_1.removeAttribute('aria-label');\n if (!ele_1.classList.contains(STARTDATE)) {\n ele_1.setAttribute('aria-selected', 'false');\n removeClass([ele_1], [ENDDATE, SELECTED]);\n }\n else {\n this.addSelectedAttributes(ele_1, this.startValue, true);\n removeClass([ele_1], [ENDDATE]);\n }\n }\n }\n addClass([ele], ENDDATE);\n if (+this.endValue === +this.startValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n else {\n this.addSelectedAttributes(ele, this.endValue, false);\n }\n if (ele.classList.contains(OTHERMONTH)) {\n if (+this.endValue === +this.startValue) {\n this.otherMonthSelect(ele, false, true);\n }\n else {\n this.otherMonthSelect(ele, false);\n }\n }\n endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, endEle_2 = endEle; _a < endEle_2.length; _a++) {\n var ele_2 = endEle_2[_a];\n if (ele_2.classList.contains(STARTDATE)) {\n removeClass([ele_2], [RANGEHOVER]);\n }\n }\n this.applyButton.disabled = false;\n this.applyButton.element.disabled = false;\n if (!this.isMobile) {\n this.removeClassDisabled();\n }\n this.disabledDateRender();\n this.trigger('select', this.rangeArgs(event));\n }\n else if (+date < +this.startValue) {\n this.removeClassDisabled();\n this.startValue = new Date('' + date);\n this.setValue();\n this.removeSelectedAttributes();\n removeClass(this.popupObj.element.querySelectorAll('.' + STARTDATE), [STARTDATE, SELECTED]);\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n }\n }\n if (event) {\n leftCalendar = closest(event.target, '.' + LEFTCALENDER);\n }\n if (!isNullOrUndefined(leftCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (event) {\n rightCalendar = event && closest(event.target, '.' + RIGHTCALENDER);\n }\n if (!isNullOrUndefined(rightCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n addClass([ele], SELECTED);\n this.updateHeader();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.selectableDates = function () {\n if (!isNullOrUndefined(this.startValue)) {\n var tdCells = this.calendarElement.querySelectorAll('.' + CALENDAR + ' td');\n var isStartDate = false;\n if (this.currentView() === 'Month') {\n for (var _i = 0, tdCells_4 = tdCells; _i < tdCells_4.length; _i++) {\n var ele = tdCells_4[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n if (!ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n if (+eleDate < +this.startValue) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n continue;\n }\n else {\n break;\n }\n }\n }\n if (ele.classList.contains(STARTDATE) && !ele.classList.contains(OTHERMONTH)) {\n isStartDate = true;\n break;\n }\n }\n if (isStartDate) {\n if (!this.previousIcon.classList.contains(DISABLED)) {\n addClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n else {\n for (var _a = 0, tdCells_5 = tdCells; _a < tdCells_5.length; _a++) {\n var ele = tdCells_5[_a];\n var startMonth = this.startValue.getMonth();\n var startYear = this.startValue.getFullYear();\n var element = this.getIdValue(null, ele);\n if (!this.startButton.element.classList.contains(ACTIVE) && ((this.currentView() === 'Year' &&\n (element.getMonth() < startMonth) && (element.getFullYear() <= startYear))\n || (this.currentView() === 'Decade' && (element.getMonth() <= startMonth) &&\n (element.getFullYear() < startYear)))) {\n addClass([ele], [DISABLED]);\n }\n else {\n break;\n }\n }\n if (tdCells[0].classList.contains(DISABLED)) {\n this.previousIconHandler(true);\n }\n else if (tdCells[tdCells.length - 1].classList.contains(DISABLED)) {\n this.nextIconHandler(true);\n }\n }\n }\n };\n DateRangePicker.prototype.updateMinMaxDays = function (calendar) {\n if (!isNullOrUndefined(this.startValue) && (isNullOrUndefined(this.endValue) || this.isMobile)) {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n var minDate = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.minDays - 1)));\n var maxDate = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.maxDays - 1)));\n minDate = (!isNullOrUndefined(this.minDays) && this.minDays > 0) ? minDate : null;\n maxDate = (!isNullOrUndefined(this.maxDays) && this.maxDays > 0) ? maxDate : null;\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n var maxEle = void 0;\n for (var _i = 0, tdCells_6 = tdCells; _i < tdCells_6.length; _i++) {\n var ele = tdCells_6[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n var eleDate = this.getIdValue(null, ele);\n if (!isNullOrUndefined(minDate) && +eleDate === +minDate && ele.classList.contains(DISABLED)) {\n minDate.setDate(minDate.getDate() + 1);\n }\n if (!ele.classList.contains(DISABLED)) {\n if (+eleDate <= +this.startValue) {\n continue;\n }\n if (!isNullOrUndefined(minDate) && +eleDate < +minDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n }\n if (!isNullOrUndefined(maxDate) && +eleDate > +maxDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n this.isMaxDaysClicked = true;\n EventHandler.clearEvents(ele);\n if (isNullOrUndefined(maxEle) && !ele.classList.contains(OTHERMONTH)) {\n maxEle = ele;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(maxEle)) {\n if (this.isMobile) {\n if (!this.nextIcon.classList.contains(DISABLED)) {\n addClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n var calendar_1 = closest(maxEle, '.' + RIGHTCALENDER);\n calendar_1 = isNullOrUndefined(calendar_1) ? this.leftCalendar : calendar_1;\n var isLeftCalendar = calendar_1.classList.contains(LEFTCALENDER);\n if (!isLeftCalendar) {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.leftCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.rightCalPrevIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n }\n }\n }\n else {\n this.isMaxDaysClicked = false;\n }\n };\n DateRangePicker.prototype.removeClassDisabled = function () {\n var tdCells;\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td' + '.' + DATEDISABLED);\n for (var _i = 0, tdCells_7 = tdCells; _i < tdCells_7.length; _i++) {\n var ele = tdCells_7[_i];\n if (ele.classList.contains(DATEDISABLED)) {\n removeClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.add(ele, 'click', this.selectRange, this);\n if (!this.isMobile) {\n EventHandler.add(ele, 'mouseover touchstart', this.hoverSelection, this);\n }\n }\n }\n if (this.isMobile) {\n if (this.nextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.previousIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (this.rightCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.rightCalPrevIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.leftCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n };\n DateRangePicker.prototype.updateHeader = function () {\n var format = { type: 'date', skeleton: 'yMMMd' };\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = range.toString() + ' ' + this.l10n.getConstant('days');\n }\n else {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n if (!isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n }\n }\n if ((this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue)) ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue))\n && +this.startValue > +this.endValue))) {\n if (!this.isMobile) {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n }\n if (this.popupObj.element.querySelector('#custom_range')) {\n this.popupObj.element.querySelector('#custom_range').textContent =\n this.l10.getConstant('customRange') !== '' ? this.l10.getConstant('customRange') : 'Custom Range';\n }\n };\n DateRangePicker.prototype.removeSelection = function () {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.removeSelectedAttributes();\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [STARTDATE, ENDDATE, SELECTED]);\n }\n if (this.popupObj.element.querySelectorAll('.' + FOCUSDATE).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + FOCUSDATE), FOCUSDATE);\n }\n if (this.popupObj.element.querySelectorAll('.' + RANGEHOVER).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + RANGEHOVER), [RANGEHOVER]);\n }\n }\n };\n DateRangePicker.prototype.addSelectedAttributes = function (ele, date, isStartDate, sameDate) {\n if (ele) {\n var title = this.globalize.formatDate(date, { type: 'date', skeleton: 'full' });\n if (!isNullOrUndefined(sameDate) && sameDate) {\n ele.setAttribute('aria-label', 'The current start and end date is ' + '' + title);\n }\n else {\n ele.setAttribute('aria-label', 'The current ' + (isStartDate ? 'start' : 'end') + ' date is ' + '' + title);\n }\n ele.setAttribute('aria-selected', 'true');\n }\n };\n DateRangePicker.prototype.removeSelectedAttributes = function () {\n if (this.popupObj) {\n var start = this.popupObj.element.querySelectorAll('.' + STARTDATE);\n for (var _i = 0, start_1 = start; _i < start_1.length; _i++) {\n var ele = start_1[_i];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n var end = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, end_1 = end; _a < end_1.length; _a++) {\n var ele = end_1[_a];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n }\n };\n DateRangePicker.prototype.updateCalendarElement = function (calendar) {\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.calendarElement = this.leftCalendar;\n this.currentDate = this.leftCalCurrentDate;\n this.previousIcon = this.leftCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.currentDate = this.rightCalCurrentDate;\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.rightCalNextIcon;\n }\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n };\n DateRangePicker.prototype.navPrevMonth = function (e) {\n e.preventDefault();\n var ele = closest(e.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(e.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigatePrevious(e);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.deviceNavigation = function (ele) {\n this.deviceCalendarEvent();\n this.updateRange([this.popupObj.element.querySelector('.' + CALENDAR)]);\n if ((!isNullOrUndefined(this.endValue) && this.endButton.element.classList.contains(ACTIVE))) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n if (this.endButton.element.classList.contains(ACTIVE)) {\n this.selectableDates();\n }\n if (this.currentView() === 'Month') {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.updateControl = function (calendar) {\n if (calendar.classList.contains(RIGHTCALENDER)) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n if ((this.leftCalendar.querySelector('.e-content').classList.contains('e-month')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-month'))\n || this.isMobile) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n this.updateRange([calendar]);\n };\n DateRangePicker.prototype.navNextMonth = function (event) {\n event.preventDefault();\n var ele = closest(event.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(event.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigateNext(event);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.compareMonths = function (start, end) {\n var result;\n if (start.getFullYear() === end.getFullYear() &&\n (this.currentView() === 'Year' || this.currentView() === 'Decade')) {\n result = -1;\n }\n else if (start.getFullYear() > end.getFullYear()) {\n result = -1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n if (start.getFullYear() + 1 === end.getFullYear() && start.getMonth() === 11 && end.getMonth() === 0) {\n result = -1;\n }\n else {\n result = 1;\n }\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() + 1 === end.getMonth() ? -1 : 1;\n }\n return result;\n };\n DateRangePicker.prototype.isPopupOpen = function () {\n if (!isNullOrUndefined(this.popupObj) && this.popupObj.element.classList.contains(POPUP)) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.createRangeHeader = function () {\n var labelContainer = this.createElement('div', { className: STARTENDCONTAINER });\n if (!this.isMobile) {\n var startLabel = this.createElement('a', { className: STARTLABEL });\n var endLabel = this.createElement('a', { className: ENDLABEL });\n var changeIcon = this.createElement('span', { className: CHANGEICON });\n attributes(startLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'Start Date', 'role': 'button' });\n attributes(endLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'End Date', 'role': 'button' });\n labelContainer.appendChild(startLabel);\n labelContainer.appendChild(changeIcon);\n labelContainer.appendChild(endLabel);\n startLabel.textContent = this.l10n.getConstant('startLabel');\n endLabel.textContent = this.l10n.getConstant('endLabel');\n }\n else {\n var endBtn = this.createElement('button', { className: ENDBUTTON });\n var startBtn = this.createElement('button', { className: STARTBUTTON });\n this.startButton = new Button({ content: this.l10n.getConstant('startLabel') }, startBtn);\n this.endButton = new Button({ content: this.l10n.getConstant('endLabel') }, endBtn);\n labelContainer.appendChild(startBtn);\n labelContainer.appendChild(endBtn);\n }\n return labelContainer;\n };\n DateRangePicker.prototype.disableInput = function () {\n if (this.strictMode) {\n if (!isNullOrUndefined(this.previousStartValue) && !isNullOrUndefined(this.previousEndValue)) {\n this.startValue = this.previousStartValue;\n this.endValue = this.previousEndValue;\n this.setValue();\n this.updateInput();\n }\n }\n else {\n this.updateInput();\n this.clearRange();\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.errorClass();\n }\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n };\n DateRangePicker.prototype.validateMinMax = function () {\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (!(this.min <= this.max)) {\n this.disableInput();\n return;\n }\n if (!isNullOrUndefined(this.minDays) && !isNullOrUndefined(this.maxDays)) {\n if (this.maxDays > 0 && this.minDays > 0 && (this.minDays > this.maxDays)) {\n this.maxDays = null;\n }\n }\n if (!isNullOrUndefined(this.minDays) && this.minDays < 0) {\n this.minDays = null;\n }\n if (!isNullOrUndefined(this.maxDays) && this.maxDays < 0) {\n this.maxDays = null;\n }\n };\n DateRangePicker.prototype.validateRangeStrict = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (+this.startValue < +this.min) {\n this.startValue = this.min;\n this.setValue();\n }\n else if (+this.startValue > +this.max) {\n this.startValue = this.max;\n }\n }\n if (!isNullOrUndefined(this.endValue)) {\n if (+this.endValue > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else if (+this.endValue < +this.min) {\n this.endValue = this.min;\n this.setValue();\n }\n }\n if ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue) {\n this.endValue = this.max;\n this.setValue();\n }\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateRange = function () {\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateMinMaxDays = function () {\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n var range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) && !(range >= this.minDays)) {\n if (this.strictMode) {\n var date = new Date(+this.startValue);\n date.setDate(date.getDate() + (this.minDays - 1));\n if (+date > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else {\n this.endValue = date;\n this.setValue();\n }\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n if ((!isNullOrUndefined(this.maxDays) && this.maxDays > 0) && !(range <= this.maxDays)) {\n if (this.strictMode) {\n this.endValue = new Date(+this.startValue);\n this.endValue.setDate(this.endValue.getDate() + (this.maxDays - 1));\n this.setValue();\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n };\n DateRangePicker.prototype.renderCalendar = function () {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(CALENDAR);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n attributes(this.calendarElement, { 'role': 'calendar' });\n _super.prototype.createHeader.call(this);\n _super.prototype.createContent.call(this);\n };\n DateRangePicker.prototype.isSameMonth = function (start, end) {\n if (start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear()) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.startMonthCurrentDate = function () {\n if (this.isSameMonth(this.min, this.max) || +this.currentDate > +this.max || this.isSameMonth(this.currentDate, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (this.currentDate < this.min) {\n this.currentDate = new Date('' + this.min);\n }\n };\n DateRangePicker.prototype.selectNextMonth = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameMonth(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n return;\n }\n if ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n }\n };\n DateRangePicker.prototype.selectStartMonth = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.max) && this.isSameMonth(this.startValue, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (!(this.startValue >= this.min && this.startValue <= this.max)\n || this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n else {\n this.currentDate = new Date(+this.startValue);\n }\n }\n else {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.startMonthCurrentDate();\n }\n if ((!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.startMonthCurrentDate();\n };\n DateRangePicker.prototype.createCalendar = function () {\n var calendarContainer = this.createElement('div', { className: CALENDARCONTAINER });\n if (!this.isMobile) {\n this.selectStartMonth();\n this.renderCalendar();\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.calendarElement.classList.add(LEFTCALENDER);\n this.leftCalPrevIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + PREVICON);\n this.leftCalNextIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + NEXTICON);\n this.leftTitle = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalNextIcon);\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalPrevIcon);\n prepend([this.leftCalPrevIcon], this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER));\n this.leftCalendar = this.calendarElement;\n var leftContainer = this.createElement('div', { className: LEFTCONTAINER });\n var rightContainer = this.createElement('div', { className: RIGHTCONTAINER });\n leftContainer.appendChild(this.leftCalendar);\n calendarContainer.appendChild(leftContainer);\n if (!this.isMobile) {\n EventHandler.add(this.leftTitle, 'click', this.leftNavTitle, this);\n }\n this.selectNextMonth();\n this.renderCalendar();\n this.rightCalCurrentDate = new Date(+this.currentDate);\n addClass([this.calendarElement], RIGHTCALENDER);\n this.rightCalendar = this.calendarElement;\n removeClass([this.leftCalendar && this.leftCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n removeClass([this.rightCalendar && this.rightCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n this.rightCalPrevIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + PREVICON);\n this.rightCalNextIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + NEXTICON);\n this.rightTitle = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('table').setAttribute('tabindex', '-1');\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalNextIcon);\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalPrevIcon);\n prepend([this.rightCalPrevIcon], this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER));\n rightContainer.appendChild(this.rightCalendar);\n calendarContainer.appendChild(rightContainer);\n if (!this.isMobile) {\n EventHandler.add(this.rightTitle, 'click', this.rightNavTitle, this);\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.currentDate = new Date(+this.startValue);\n }\n _super.prototype.validateDate.call(this);\n _super.prototype.minMaxUpdate.call(this);\n _super.prototype.render.call(this);\n var prevIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + PREVICON);\n var nextIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + NEXTICON);\n remove(this.calendarElement.querySelector('.' + CALENDAR + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(nextIcon);\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(prevIcon);\n prepend([prevIcon], this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER));\n this.deviceCalendar = this.calendarElement;\n calendarContainer.appendChild(this.calendarElement);\n this.headerTitleElement = this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER + ' .' + TITLE);\n }\n return calendarContainer;\n };\n DateRangePicker.prototype.leftNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.leftCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.calendarNavigation = function (e, element) {\n this.table = element.querySelector('table');\n this.headerTitleElement = element.querySelector('.e-title');\n this.tableBodyElement = element.querySelector('tbody');\n this.tableHeadElement = element.querySelector('thead');\n this.contentElement = element.querySelector('.e-content');\n this.updateCalendarElement(element);\n _super.prototype.navigateTitle.call(this, e);\n this.updateNavIcons();\n };\n DateRangePicker.prototype.rightNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.rightCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.clickEventEmitter = function (e) {\n if (!this.isMobile) {\n if (closest(e.target, '.e-calendar.e-left-calendar')) {\n this.calendarElement = this.leftCalendar;\n this.updateCalendarElement(this.leftCalendar);\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.updateCalendarElement(this.rightCalendar);\n }\n }\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n * @private\n * @hidden\n */\n DateRangePicker.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n DateRangePicker.prototype.navigatedEvent = function (e) {\n var element;\n if (this.isMobile && this.currentView() === 'Month') {\n this.bindCalendarCellEvents();\n this.deviceNavigation();\n this.removeFocusedDate();\n }\n else if (this.isMobile && (this.currentView() === 'Decade' || this.currentView() === 'Year')) {\n this.selectableDates();\n }\n else {\n if (!this.isMobile && this.currentView() === 'Month') {\n element = this.calendarElement.classList.contains('e-left-calendar') ? this.leftCalendar : this.rightCalendar;\n if (element === this.leftCalendar && ((e && !e.currentTarget.children[0].classList.contains('e-icons'))\n || (!isNullOrUndefined(this.controlDown)))) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.rightCalCurrentDate = new Date(new Date(+this.currentDate).setMonth(new Date(+this.currentDate).getMonth() + 1));\n this.currentDate = this.leftCalCurrentDate;\n this.updateCalendarElement(this.leftCalendar);\n this.updateControl(this.leftCalendar);\n this.updateCalendarElement(this.rightCalendar);\n this.navigateTo('Month', this.rightCalCurrentDate);\n this.updateControl(this.rightCalendar);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n }\n else if (e && !e.currentTarget.children[0].classList.contains('e-icons')\n || (!isNullOrUndefined(this.controlDown))) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n this.leftCalCurrentDate = new Date(this.currentDate.setMonth(this.currentDate.getMonth() - 1));\n this.currentDate = this.rightCalCurrentDate;\n this.updateCalendarElement(this.rightCalendar);\n this.updateControl(this.rightCalendar);\n this.updateCalendarElement(this.leftCalendar);\n if (this.startValue && (this.startValue.getMonth() < this.rightCalCurrentDate.getMonth() &&\n this.startValue.getFullYear() <= this.rightCalCurrentDate.getFullYear())) {\n if (isNullOrUndefined(this.endValue)) {\n this.effect = '';\n this.navigateTo('Month', new Date(+this.startValue));\n }\n else {\n this.navigateTo('Month', this.leftCalCurrentDate);\n }\n }\n else {\n this.navigateTo('Month', this.leftCalCurrentDate);\n }\n this.updateControl(this.leftCalendar);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n }\n }\n else if (!this.isMobile && (this.currentView() === 'Decade' || this.currentView() === 'Year')) {\n this.updateNavIcons();\n this.calendarIconEvent();\n }\n }\n };\n DateRangePicker.prototype.createControl = function () {\n var controlContainer = this.createElement('div', { className: RANGECONTAINER });\n var headerContainer = this.createElement('div', { className: RANGEHEADER });\n var labelContainer = this.createRangeHeader();\n headerContainer.appendChild(labelContainer);\n var daySpan = this.createElement('div', { className: DAYSPAN });\n attributes(daySpan, { 'aria-label': 'Selected Days' });\n daySpan.textContent = this.l10n.getConstant('selectedDays');\n headerContainer.appendChild(daySpan);\n var separator = this.createElement('div', { className: SEPARATOR });\n var calendarContainer = this.createCalendar();\n controlContainer.appendChild(headerContainer);\n controlContainer.appendChild(separator);\n controlContainer.appendChild(calendarContainer);\n var footerSection = this.createElement('div', { className: FOOTER });\n var cancelBtn = this.createElement('button', { className: CANCEL + ' ' + FLAT + ' ' + CSS });\n var applyBtn = this.createElement('button');\n addClass([applyBtn], [APPLY, FLAT, PRIMARY, CSS]);\n footerSection.appendChild(applyBtn);\n footerSection.appendChild(cancelBtn);\n var enable = !isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue);\n this.cancelButton = new Button({ content: this.l10n.getConstant('cancelText') }, cancelBtn);\n this.applyButton = new Button({ content: this.l10n.getConstant('applyText'), disabled: !enable }, applyBtn);\n EventHandler.add(applyBtn, 'click touchstart', this.applyFunction, this);\n EventHandler.add(cancelBtn, 'click touchstart', this.cancelFunction, this);\n this.popupWrapper.appendChild(controlContainer);\n if (!this.isMobile) {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.createPresets();\n this.listRippleEffect();\n addClass([controlContainer], RANGEBORDER);\n addClass([this.popupWrapper], 'e-preset-wrapper');\n var presets = this.popupWrapper.querySelector('.' + PRESETS);\n presets.style.height = this.popupWrapper.querySelector('.' + RANGECONTAINER).getBoundingClientRect().height + 'px';\n }\n }\n this.popupWrapper.appendChild(footerSection);\n if (this.isMobile) {\n this.deviceHeaderUpdate();\n }\n this.renderPopup();\n };\n DateRangePicker.prototype.cancelFunction = function (eve) {\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n eve.preventDefault();\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.startValue = null;\n this.endValue = null;\n this.removeSelection();\n this.hide(eve);\n };\n DateRangePicker.prototype.deviceHeaderUpdate = function () {\n if (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.endButton.element.setAttribute('disabled', '');\n this.startButton.element.classList.add(ACTIVE);\n }\n else if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.classList.add(ACTIVE);\n }\n };\n DateRangePicker.prototype.applyFunction = function (eve) {\n eve.preventDefault();\n if (this.closeEventArgs && this.closeEventArgs.cancel) {\n this.startValue = this.popupWrapper.querySelector('.e-start-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-start-date'));\n this.endValue = this.popupWrapper.querySelector('.e-end-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-end-date'));\n this.setValue();\n }\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n if (eve.type !== 'touchstart' &&\n this.closeEventArgs && !this.closeEventArgs.cancel) {\n eve.preventDefault();\n }\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n this.previousEleValue = this.inputElement.value;\n Input.setValue(this.rangeArgs(eve).text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.changeTrigger(eve);\n this.hide(eve ? eve : null);\n this.errorClass();\n }\n else {\n this.hide(eve ? eve : null);\n }\n if (!this.isMobile) {\n this.isKeyPopup = false;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.children[1].focus();\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n }\n }\n };\n DateRangePicker.prototype.onMouseClick = function (event, item) {\n if (event.type === 'touchstart') {\n return;\n }\n var target = item || event.target;\n var li = closest(target, '.' + LISTCLASS);\n var isClick = li && li.classList.contains(ACTIVE);\n if (li && li.classList.contains(LISTCLASS)) {\n this.setListSelection(li, event);\n }\n this.inputElement.focus();\n if (!this.isMobile) {\n this.preventFocus = true;\n if (li && li.classList.contains(LISTCLASS) && li.getAttribute('id') === 'custom_range') {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (!isClick && event.type === 'keydown') {\n this.inputElement.focus();\n }\n }\n }\n };\n DateRangePicker.prototype.onMouseOver = function (event) {\n var li = closest(event.target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS) && !li.classList.contains(HOVER)) {\n addClass([li], HOVER);\n }\n };\n DateRangePicker.prototype.onMouseLeave = function (event) {\n var item = closest(event.target, '.' + HOVER);\n if (!isNullOrUndefined(item)) {\n removeClass([item], HOVER);\n }\n };\n DateRangePicker.prototype.setListSelection = function (li, event) {\n if (li && (!li.classList.contains(ACTIVE) || (this.isMobile && li.classList.contains(ACTIVE)))) {\n if (this.isMobile && li.classList.contains(ACTIVE)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n var values_1 = this.presetsItem[this.activeIndex];\n if (values_1.id === 'custom_range') {\n this.renderCustomPopup();\n return;\n }\n return;\n }\n this.removeListSelection();\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n addClass([li], ACTIVE);\n li.setAttribute('aria-selected', 'true');\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.renderCustomPopup();\n }\n else {\n this.applyPresetRange(values);\n }\n }\n };\n DateRangePicker.prototype.removeListSelection = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n if (!isNullOrUndefined(item)) {\n removeClass([item], ACTIVE);\n item.removeAttribute('aria-selected');\n }\n };\n DateRangePicker.prototype.setValue = function () {\n this.modelValue = [this.startValue, this.endValue];\n };\n DateRangePicker.prototype.applyPresetRange = function (values) {\n this.hide(null);\n this.presetsItem[this.presetsItem.length - 1].start = null;\n this.presetsItem[this.presetsItem.length - 1].end = null;\n this.startValue = values.start;\n this.endValue = values.end;\n this.setValue();\n this.refreshControl();\n this.trigger('select', this.rangeArgs(null));\n this.changeTrigger();\n this.previousEleValue = this.inputElement.value;\n this.isCustomRange = false;\n this.leftCalendar = this.rightCalendar = null;\n if (this.isKeyPopup) {\n this.isRangeIconClicked = false;\n this.inputElement.focus();\n }\n };\n DateRangePicker.prototype.showPopup = function (element, event) {\n this.presetHeight();\n if (this.zIndex === 1000) {\n this.popupObj.show(null, this.element);\n }\n else {\n this.popupObj.show(null, null);\n }\n if (this.isMobile) {\n this.popupObj.refreshPosition();\n }\n };\n DateRangePicker.prototype.renderCustomPopup = function () {\n this.isCustomWindow = true;\n this.popupObj.hide();\n this.popupWrapper = this.createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.renderControl();\n this.openEventArgs.appendTo.appendChild(this.popupWrapper);\n this.showPopup();\n this.isCustomRange = true;\n if (!this.isMobile) {\n this.calendarFocus();\n }\n };\n DateRangePicker.prototype.listRippleEffect = function () {\n for (var _i = 0, _a = this.liCollections; _i < _a.length; _i++) {\n var li = _a[_i];\n rippleEffect(li);\n }\n };\n DateRangePicker.prototype.createPresets = function () {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.presetElement = this.createElement('div', { className: PRESETS, attrs: { 'tabindex': '0' } });\n var listTag = ListBase.createList(this.createElement, this.presetsItem, null, true);\n attributes(listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n this.presetElement.appendChild(listTag);\n this.popupWrapper.appendChild(this.presetElement);\n this.liCollections = this.presetElement.querySelectorAll('.' + LISTCLASS);\n this.wireListEvents();\n if (this.isMobile) {\n this.presetElement.style.width = this.inputWrapper.container.getBoundingClientRect().width + 'px';\n }\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex > -1) {\n addClass([this.liCollections[this.activeIndex]], ACTIVE);\n }\n }\n };\n DateRangePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.presetElement, 'click touchstart', this.onMouseClick, this);\n if (!this.isMobile) {\n EventHandler.add(this.presetElement, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.presetElement, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateRangePicker.prototype.unWireListEvents = function () {\n if (!isNullOrUndefined(this.presetElement)) {\n EventHandler.remove(this.presetElement, 'click touchstart', this.onMouseClick);\n if (!this.isMobile) {\n EventHandler.remove(this.presetElement, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.presetElement, 'mouseout', this.onMouseLeave);\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.renderPopup = function () {\n var _this = this;\n this.popupWrapper.classList.add('e-control');\n var popupWidth = this.popupWrapper.getBoundingClientRect().width;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass.trim() !== '') {\n this.popupWrapper.classList.add(this.cssClass);\n }\n if (this.isMobile && this.isCustomWindow) {\n this.modal = this.createElement('div');\n document.body.appendChild(this.modal);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n relateTo: this.isMobile && this.isCustomWindow ? document.body :\n (!isNullOrUndefined(this.targetElement) ? this.targetElement : this.inputWrapper.container),\n position: (this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'left', Y: 'bottom' } : { X: 'center', Y: 'center' }) :\n this.enableRtl ? { X: 'left', Y: 'bottom' } : { X: 'right', Y: 'bottom' }),\n offsetX: this.isMobile || this.enableRtl ? 0 : -popupWidth,\n offsetY: OFFSETVALUE,\n collision: this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'fit' } : { X: 'fit', Y: 'fit' }) : { X: 'fit', Y: 'flip' },\n targetType: this.isMobile && this.isCustomWindow ? 'container' : 'relative',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n open: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n addClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (!_this.isMobile) {\n if (_this.cancelButton) {\n _this.btnKeyboardModule = new KeyboardEvents(_this.cancelButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { tab: 'tab', altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n _this.btnKeyboardModule = new KeyboardEvents(_this.applyButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n }\n if (!isNullOrUndefined(_this.leftCalendar)) {\n if (!_this.isRangeIconClicked) {\n _this.calendarFocus();\n }\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.presetKeyActionHandler.bind(_this),\n keyConfigs: _this.presetKeyConfig\n });\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n if (isNullOrUndefined(_this.leftCalendar)) {\n _this.preventBlur = true;\n _this.presetElement.focus();\n }\n else {\n _this.presetElement.setAttribute('tabindex', '-1');\n }\n }\n _this.popupKeyBoardHandler();\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.add(document, 'keydown', _this.popupCloseHandler, _this);\n }\n },\n close: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (_this.isRangeIconClicked) {\n _this.inputWrapper.container.children[1].focus();\n }\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label)) {\n _this.unWireListEvents();\n }\n if (!isNullOrUndefined(_this.popupObj)) {\n detach(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupObj = null;\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.remove(document, 'keydown', _this.popupCloseHandler);\n }\n }\n });\n if (this.isMobile) {\n this.popupObj.element.classList.add(DEVICE);\n if (!this.isMobile) {\n this.popupObj.element.classList.add('e-bigger');\n }\n }\n if (this.isMobile && this.isCustomWindow) {\n addClass([this.modal], [DEVICE, ROOT, 'e-range-modal']);\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n };\n DateRangePicker.prototype.popupCloseHandler = function (e) {\n switch (e.keyCode) {\n case 27:\n this.hide(e);\n break;\n }\n };\n DateRangePicker.prototype.calendarFocus = function () {\n var startDate = this.popupObj && this.popupObj.element.querySelector('.' + STARTDATE);\n if (startDate) {\n var ele = closest(startDate, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n ele.children[1].firstElementChild.focus();\n }\n addClass([startDate], FOCUSDATE);\n }\n else {\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n };\n DateRangePicker.prototype.presetHeight = function () {\n var presets = this.popupObj && this.popupObj.element.querySelector('.' + PRESETS);\n var rangeContainer = this.popupObj && this.popupObj.element.querySelector('.' + RANGECONTAINER);\n if (!isNullOrUndefined(presets) && !isNullOrUndefined(rangeContainer)) {\n presets.style.height = rangeContainer.getBoundingClientRect().height + 'px';\n }\n };\n DateRangePicker.prototype.presetKeyActionHandler = function (e) {\n switch (e.action) {\n case 'moveDown':\n this.listMoveDown(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'moveUp':\n this.listMoveUp(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'enter':\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(this.leftCalendar) && !isNullOrUndefined(actItem)) {\n if (isNullOrUndefined(hvrItem) || (!isNullOrUndefined(actItem) && actItem === hvrItem)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(actItem);\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.calendarFocus();\n actItem.classList.remove(HOVER);\n e.preventDefault();\n return;\n }\n }\n }\n if (!isNullOrUndefined(hvrItem) || !isNullOrUndefined(actItem)) {\n this.onMouseClick(e, hvrItem || actItem);\n }\n e.preventDefault();\n break;\n case 'tab':\n if (this.leftCalendar) {\n var item = this.getHoverLI();\n if (!isNullOrUndefined(item)) {\n item.classList.remove(HOVER);\n }\n }\n else {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.listMoveDown = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n else {\n addClass([this.liCollections[0]], HOVER);\n }\n };\n DateRangePicker.prototype.listMoveUp = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n };\n DateRangePicker.prototype.getHoverLI = function () {\n var item = this.presetElement.querySelector('.' + HOVER);\n return item;\n };\n DateRangePicker.prototype.getActiveLI = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n return item;\n };\n DateRangePicker.prototype.popupKeyBoardHandler = function () {\n this.popupKeyboardModule = new KeyboardEvents(this.popupWrapper, {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: { escape: 'escape' }\n });\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n };\n DateRangePicker.prototype.setScrollPosition = function () {\n var listHeight = this.presetElement.getBoundingClientRect().height;\n var hover = this.presetElement.querySelector('.' + HOVER);\n var active = this.presetElement.querySelector('.' + ACTIVE);\n var element = !isNullOrUndefined(hover) ? hover : active;\n if (!isNullOrUndefined(element)) {\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.presetElement.scrollTop = nextEle ? (height - (listHeight / 2 + liHeight / 2)) : height;\n }\n else {\n this.presetElement.scrollTop = 0;\n }\n }\n };\n DateRangePicker.prototype.popupKeyActionHandle = function (e) {\n var presetElement = closest(e.target, '.' + PRESETS);\n switch (e.action) {\n case 'escape':\n if (this.isPopupOpen()) {\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[1].blur();\n }\n break;\n case 'enter':\n if (!this.isPopupOpen()) {\n this.show(null, e);\n }\n else {\n this.inputWrapper.container.children[1].focus();\n }\n break;\n case 'tab':\n this.hide(e);\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n else {\n if (document.activeElement === this.cancelButton.element && this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (document.activeElement === this.applyButton.element && this.applyButton.element.disabled !== true) {\n this.cancelButton.element.focus();\n }\n else {\n if (!isNullOrUndefined(this.presetElement) && (document.activeElement === this.cancelButton.element)) {\n this.presetElement.focus();\n }\n else {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n }\n e.preventDefault();\n break;\n }\n };\n DateRangePicker.prototype.documentHandler = function (e) {\n if (isNullOrUndefined(this.popupObj)) {\n return;\n }\n var target = e.target;\n if (!this.inputWrapper.container.contains(target) ||\n (!isNullOrUndefined(this.popupObj) && !closest(target, this.popupWrapper.id))) {\n if ((e.type === 'touchstart' || e.type === 'mousedown') ||\n this.closeEventArgs && !this.closeEventArgs.cancel) {\n e.preventDefault();\n }\n }\n if ((isNullOrUndefined(this.targetElement) ||\n (!isNullOrUndefined(this.targetElement) && !(target === this.targetElement))) &&\n !(closest(target, '#' + this.popupObj.element.id))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && !(closest(target, '.e-daterangepicker.e-popup') && (!target.classList.contains('e-day')))) {\n this.preventBlur = false;\n if (this.isPopupOpen()) {\n this.applyFunction(e);\n if (!this.isMobile) {\n this.isRangeIconClicked = false;\n }\n }\n }\n };\n DateRangePicker.prototype.createInput = function () {\n this.inputWrapper = Input.createInput({\n floatLabelType: this.floatLabelType,\n element: this.inputElement,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [DATERANGEICON]\n }, this.createElement);\n attributes(this.inputElement, {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '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.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.inputElement.type === 'hidden') {\n this.inputWrapper.container.style.display = 'none';\n }\n this.refreshControl();\n this.previousEleValue = this.inputElement.value;\n };\n DateRangePicker.prototype.setEleWidth = function (width) {\n if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (this.width);\n }\n else if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n DateRangePicker.prototype.refreshControl = function () {\n this.validateMinMax();\n if (this.strictMode) {\n this.validateRangeStrict();\n }\n var isDisabled = this.disabledDates();\n if (this.strictMode && (isDisabled)) {\n this.startValue = this.previousStartValue;\n this.setProperties({ startDate: this.startValue }, true);\n this.endValue = this.previousEndValue;\n this.setProperties({ endDate: this.endValue }, true);\n this.setValue();\n }\n this.updateInput();\n if (!this.strictMode) {\n this.validateRange();\n }\n if (!this.strictMode && (isDisabled)) {\n this.clearRange();\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !isDisabled) {\n this.disabledDateRender();\n }\n this.errorClass();\n this.previousStartValue = isNullOrUndefined(this.startValue) || isNaN(+this.startValue) ? null : new Date(+this.startValue);\n this.previousEndValue = isNullOrUndefined(this.endValue) || isNaN(+this.endValue) ? null : new Date(+this.endValue);\n };\n DateRangePicker.prototype.updateInput = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var startDate = this.globalize.formatDate(this.startValue, { format: this.format, type: 'date', skeleton: 'yMd' });\n var endDate = this.globalize.formatDate(this.endValue, { format: this.format, type: 'date', skeleton: 'yMd' });\n Input.setValue(startDate + ' ' + this.separator + ' ' + endDate, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n }\n };\n DateRangePicker.prototype.isDateDisabled = function (date) {\n if (isNullOrUndefined(date)) {\n return false;\n }\n var value = new Date(+date);\n if (+value < +this.min || +value > +this.max) {\n return true;\n }\n this.virtualRenderCellArgs = {\n date: value,\n isDisabled: false,\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.disabledDateRender = function () {\n this.disabledDays = [];\n this.disabledDayCnt = null;\n var localDate = new Date(+this.startValue);\n var count = 0;\n while (+localDate <= +this.endValue) {\n this.virtualRenderCellArgs = {\n date: localDate,\n isDisabled: false,\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n this.disabledDays.push(new Date(+args.date));\n if (+localDate > +this.startValue && +localDate < +this.endValue) {\n count++;\n }\n }\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n this.disabledDayCnt = count;\n };\n DateRangePicker.prototype.virtualRenderCellEvent = function (args) {\n extend(this.virtualRenderCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n DateRangePicker.prototype.disabledDates = function () {\n var isStartDisabled = false;\n var isEndDisabled = false;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n isStartDisabled = this.isDateDisabled(this.startValue);\n isEndDisabled = this.isDateDisabled(this.endValue);\n this.currentDate = null;\n this.setValue();\n }\n return (isStartDisabled || isEndDisabled);\n };\n DateRangePicker.prototype.setModelValue = function () {\n if (!this.value && this.startDate === null && this.endDate === null) {\n this.setProperties({ value: null }, true);\n }\n else if (this.value === null || this.value.start === null) {\n if (this.value === null) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n else if (this.value.start === null) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n else {\n if ((this.value && this.value.length > 0) ||\n this.valueType && this.valueType.length > 0) {\n if (+this.startDate !== +this.value[0] || +this.endDate !== +this.value[1]) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n if (this.value && this.value[0] == null && this.value[1] == null) {\n this.setProperties({ value: null }, true);\n }\n }\n else {\n if ((this.value && this.value.start)) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n }\n this.createHiddenInput();\n };\n /**\n * To dispatch the event manually\n */\n DateRangePicker.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n this.firstHiddenChild.dispatchEvent(evt);\n };\n DateRangePicker.prototype.changeTrigger = function (e) {\n if (+this.initStartDate !== +this.startValue || +this.initEndDate !== +this.endValue) {\n this.setProperties({ endDate: this.checkDateValue(this.endValue) }, true);\n this.setProperties({ startDate: this.checkDateValue(this.startValue) }, true);\n this.setModelValue();\n this.trigger('change', this.rangeArgs(e));\n }\n this.previousEleValue = this.inputElement.value;\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n * @hidden\n */\n DateRangePicker.prototype.navigateTo = function (view, value) {\n _super.prototype.navigateTo.call(this, view, value);\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DateRangePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.focus();\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DateRangePicker.prototype.focusOut = function () {\n var isBlur = this.preventBlur;\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.preventBlur = false;\n this.inputElement.blur();\n this.preventBlur = isBlur;\n }\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DateRangePicker.prototype.destroy = function () {\n this.hide(null);\n var ariaAttrs = {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '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 if (this.inputElement) {\n removeClass([this.inputElement], [ROOT]);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n Input.removeAttributes(ariaAttrs, this.inputElement);\n this.ensureInputAttribute();\n this.inputElement.classList.remove('e-input');\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n detach(this.inputWrapper.container);\n }\n }\n if (!isNullOrUndefined(this.inputKeyboardModule) && !this.isMobile) {\n this.inputKeyboardModule.destroy();\n }\n if (this.popupObj) {\n if (!this.isMobile) {\n this.clearCalendarEvents();\n }\n }\n _super.prototype.destroy.call(this);\n this.inputWrapper = this.popupWrapper = this.popupObj = this.cloneElement = this.presetElement = null;\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n if ((!isNullOrUndefined(this.firstHiddenChild))\n && (!isNullOrUndefined(this.secondHiddenChild))) {\n detach(this.firstHiddenChild);\n detach(this.secondHiddenChild);\n this.firstHiddenChild = this.secondHiddenChild = null;\n this.inputElement.setAttribute('name', this.element.getAttribute('data-name'));\n this.inputElement.removeAttribute('data-name');\n }\n };\n DateRangePicker.prototype.ensureInputAttribute = function () {\n for (var attr = 0; attr < this.inputElement.attributes.length; attr++) {\n var prop = this.inputElement.attributes[attr].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * To get component name\n * @returns string\n * @private\n */\n DateRangePicker.prototype.getModuleName = function () {\n return 'daterangepicker';\n };\n /**\n * Return the properties that are maintained upon browser refresh.\n * @returns string\n */\n DateRangePicker.prototype.getPersistData = function () {\n var keyEntity = ['startDate', 'endDate', 'value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Return the selected range and day span in the DateRangePicker.\n * @returns Object\n */\n DateRangePicker.prototype.getSelectedRange = function () {\n var range;\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n this.disabledDateRender();\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n }\n else {\n range = 0;\n }\n return { startDate: this.startValue, endDate: this.endValue, daySpan: range };\n };\n /**\n * To open the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.show = function (element, event) {\n if (this.isMobile && this.popupObj) {\n this.popupObj.refreshPosition();\n }\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n if (!this.isPopupOpen()) {\n if (element) {\n this.targetElement = element;\n }\n this.createPopup();\n this.openEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null,\n appendTo: document.body\n };\n this.trigger('open', this.openEventArgs);\n if (!this.openEventArgs.cancel) {\n this.openEventArgs.appendTo.appendChild(this.popupWrapper);\n this.showPopup(element, event);\n var isPreset = (!this.isCustomRange || (this.isMobile && this.isCustomRange));\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.setScrollPosition();\n }\n }\n }\n }\n };\n /**\n * To close the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.hide = function (event) {\n if (this.popupObj) {\n if (isNullOrUndefined(this.previousEndValue) && isNullOrUndefined(this.previousStartValue)) {\n this.clearRange();\n }\n else {\n if (!isNullOrUndefined(this.previousStartValue)) {\n this.startValue = new Date('' + this.previousStartValue);\n this.setValue();\n this.currentDate = new Date('' + this.startValue);\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n this.endValue = new Date('' + this.previousEndValue);\n this.setValue();\n }\n else {\n this.endValue = null;\n this.setValue();\n }\n }\n if (this.isPopupOpen()) {\n this.closeEventArgs = {\n cancel: false,\n popup: this.popupObj,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null\n };\n this.trigger('close', this.closeEventArgs);\n if (!this.closeEventArgs.cancel) {\n if (this.isMobile) {\n if (!isNullOrUndefined(this.startButton) && !isNullOrUndefined(this.endButton)) {\n EventHandler.remove(this.startButton.element, 'click touchstart', this.deviceHeaderClick);\n EventHandler.remove(this.endButton.element, 'click touchstart', this.deviceHeaderClick);\n }\n }\n if (this.popupObj) {\n this.popupObj.hide();\n if (this.preventBlur) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftKeyboardModule) && !isNullOrUndefined(this.rightKeyboardModule)) {\n this.leftKeyboardModule.destroy();\n this.rightKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.cancelButton)) {\n this.btnKeyboardModule.destroy();\n }\n }\n this.targetElement = null;\n removeClass([document.body], OVERFLOW);\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (this.isMobile && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n this.isKeyPopup = this.dateDisabled = false;\n }\n else {\n removeClass([this.inputWrapper.buttons[0]], ACTIVE);\n }\n }\n }\n this.updateHiddenInput();\n if (this.isMobile) {\n this.element.removeAttribute('readonly');\n }\n };\n DateRangePicker.prototype.setLocale = function () {\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n this.changeTrigger();\n };\n DateRangePicker.prototype.refreshChange = function () {\n this.refreshControl();\n this.changeTrigger();\n };\n DateRangePicker.prototype.setDate = function () {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.refreshChange();\n };\n DateRangePicker.prototype.enableInput = function () {\n if (+this.min <= +this.max) {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.element.hasAttribute('disabled')) {\n this.bindEvents();\n }\n }\n };\n DateRangePicker.prototype.clearModelvalue = function (newProp, oldProp) {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n if (oldProp.value && oldProp.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n else if (oldProp.value && oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n else if (oldProp.value && !oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n this.updateValue();\n this.setDate();\n };\n DateRangePicker.prototype.createHiddenInput = function () {\n if (isNullOrUndefined(this.firstHiddenChild) && isNullOrUndefined(this.secondHiddenChild)) {\n this.firstHiddenChild = this.createElement('input');\n this.secondHiddenChild = this.createElement('input');\n }\n if (!isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n this.inputElement.setAttribute('data-name', this.inputElement.getAttribute('name'));\n this.inputElement.removeAttribute('name');\n }\n attributes(this.firstHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name')\n });\n attributes(this.secondHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name'),\n });\n var format = { type: 'datetime', skeleton: 'yMd' };\n this.firstHiddenChild.value = this.startDate && this.globalize.formatDate(this.startDate, format);\n this.secondHiddenChild.value = this.endDate && this.globalize.formatDate(this.endDate, format);\n this.inputElement.parentElement.appendChild(this.firstHiddenChild);\n this.inputElement.parentElement.appendChild(this.secondHiddenChild);\n this.firstHiddenChild.style.display = 'none';\n this.secondHiddenChild.style.display = 'none';\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var format = { format: this.format, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.hide(null);\n switch (prop) {\n case 'width':\n this.setEleWidth(this.width);\n break;\n case 'separator':\n this.previousEleValue = this.inputElement.value;\n this.setProperties({ separator: newProp.separator }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.setProperties({ placeholder: newProp.placeholder }, true);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n this.inputElement.setAttribute('aria-readonly', '' + this.readonly);\n break;\n case 'cssClass':\n if (this.popupWrapper) {\n 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 'allowEdit':\n this.setRangeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.setLocale();\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'startDate':\n if (typeof newProp.startDate === 'string') {\n newProp.startDate = this.globalize.parseDate(newProp.startDate, format);\n }\n if (+this.initStartDate !== +newProp.startDate) {\n this.startValue = this.checkDateValue(new Date('' + newProp.startDate));\n this.setDate();\n this.setValue();\n }\n break;\n case 'endDate':\n if (typeof newProp.endDate === 'string') {\n newProp.endDate = this.globalize.parseDate(newProp.endDate, format);\n }\n if (+this.initEndDate !== +newProp.endDate) {\n this.endValue = this.checkDateValue(new Date('' + newProp.endDate));\n this.setDate();\n this.setValue();\n }\n break;\n case 'value':\n if ((!isNullOrUndefined(newProp.value) && newProp.value.length > 0)\n || !isNullOrUndefined(newProp.value) && newProp.value.start) {\n this.valueType = newProp.value;\n if (newProp.value[0] === null || (newProp.value.start === null)) {\n if (newProp.value.length === 1 || (newProp.value.start)) {\n this.clearModelvalue(newProp, oldProp);\n }\n else if (newProp.value[1] === null ||\n (newProp.value.start === null)) {\n this.clearModelvalue(newProp, oldProp);\n }\n }\n else if ((+this.initStartDate !== +newProp.value[0]\n || +this.initEndDate !== +newProp.value[1]) ||\n (+this.initStartDate !== +(newProp.value.start\n || +this.initEndDate !== +newProp.value.start))) {\n if (newProp.value.length === 1) {\n this.modelValue = newProp.value;\n }\n else if (newProp.value.start) {\n this.modelValue = newProp.value;\n }\n this.updateValue();\n this.setDate();\n }\n }\n else {\n if (isNullOrUndefined(this.value)\n || newProp.value.start == null) {\n this.valueType = newProp.value;\n this.startValue = null;\n this.endValue = null;\n this.clearModelvalue(newProp, oldProp);\n }\n }\n break;\n case 'minDays':\n this.setProperties({ minDays: newProp.minDays }, true);\n this.refreshChange();\n break;\n case 'maxDays':\n this.setProperties({ maxDays: newProp.maxDays }, true);\n this.refreshChange();\n break;\n case 'min':\n this.setProperties({ min: this.checkDateValue(new Date('' + newProp.min)) }, true);\n this.previousEleValue = this.inputElement.value;\n this.enableInput();\n this.refreshChange();\n break;\n case 'max':\n this.setProperties({ max: this.checkDateValue(new Date('' + newProp.max)) }, true);\n this.enableInput();\n this.refreshChange();\n break;\n case 'strictMode':\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.refreshChange();\n break;\n case 'presets':\n this.setProperties({ presets: newProp.presets }, true);\n this.processPresets();\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateRangePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateRangePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"locale\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"renderDayCell\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"startDate\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"endDate\", void 0);\n __decorate([\n Collection([{}], Presets)\n ], DateRangePicker.prototype, \"presets\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], DateRangePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"depth\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property('-')\n ], DateRangePicker.prototype, \"separator\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"minDays\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"maxDays\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property('Never')\n ], DateRangePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"blur\", void 0);\n DateRangePicker = __decorate([\n NotifyPropertyChanges\n ], DateRangePicker);\n return DateRangePicker;\n}(CalendarBase));\nexport { DateRangePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n///\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\nimport { cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar RTL = 'e-rtl';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = ListBaseClasses.li;\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n __extends(DateTimePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function DateTimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.valueWithMinutes = null;\n _this.previousDateTime = null;\n return _this;\n }\n DateTimePicker.prototype.focusHandler = function () {\n addClass([this.inputWrapper.container], INPUTFOCUS);\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DateTimePicker.prototype.focusIn = function () {\n _super.prototype.focusIn.call(this);\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DateTimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateTimePicker.prototype.blurHandler = function (e) {\n // IE popup closing issue when click over the scrollbar\n if (this.isTimePopupOpen() && this.isPreventBlur) {\n this.inputElement.focus();\n return;\n }\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n var blurArguments = {\n model: this\n };\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n this.trigger('blur', blurArguments);\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n this.inputElement.removeAttribute('aria-placeholder');\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.isPreventBlur = false;\n this.cloneElement = this.element.cloneNode(true);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n this.initValue = this.value;\n this.checkAttributes();\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('datetimepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n _super.prototype.render.call(this);\n this.createInputElement();\n this.bindInputEvents();\n this.setValue();\n this.previousDateTime = this.value && new Date(+this.value);\n };\n DateTimePicker.prototype.setValue = function () {\n this.initValue = this.validateMinMaxRange(this.value);\n if (!this.strictMode && this.isDateObject(this.initValue)) {\n var value = this.validateMinMaxRange(this.initValue);\n Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value }, true);\n }\n else {\n if (isNullOrUndefined(this.value)) {\n this.initValue = null;\n this.setProperties({ value: null }, true);\n }\n }\n this.valueWithMinutes = this.value;\n _super.prototype.updateInput.call(this);\n };\n DateTimePicker.prototype.validateMinMaxRange = function (value) {\n var result = value;\n if (this.isDateObject(value)) {\n result = this.validateValue(value);\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n }\n }\n this.checkValidState(result);\n return result;\n };\n DateTimePicker.prototype.checkValidState = function (value) {\n this.isValidState = true;\n if (!this.strictMode) {\n if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n this.isValidState = false;\n }\n }\n this.checkErrorState();\n };\n DateTimePicker.prototype.checkErrorState = function () {\n if (this.isValidState) {\n removeClass([this.inputWrapper.container], ERROR);\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n }\n attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n DateTimePicker.prototype.validateValue = function (value) {\n var dateVal = value;\n if (this.strictMode) {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = this.max;\n }\n else if (+value < +this.min) {\n dateVal = this.min;\n }\n else if (+value > +this.max) {\n dateVal = this.max;\n }\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = value;\n }\n }\n return dateVal;\n };\n DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n if (isDisable) {\n addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n this.hide();\n }\n else {\n removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n }\n };\n DateTimePicker.prototype.getFormattedValue = function (value) {\n 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.blurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.focusHandler, this);\n this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyAction.bind(this),\n keyConfigs: this.keyConfigs\n });\n };\n DateTimePicker.prototype.unBindInputEvents = function () {\n EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'blur', this.blurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.focusHandler);\n }\n if (this.keyboardHandler) {\n this.keyboardHandler.destroy();\n }\n };\n DateTimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.timeFormat)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.timeFormat;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.cldrDateTimeFormat = function () {\n var cldrTime;\n var culture = new Internationalization(this.locale);\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.format)) {\n cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n }\n else {\n cldrTime = this.format;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.getCldrFormat = function (type) {\n var cldrDateTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTime;\n };\n DateTimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n else {\n this.inputElement.focus();\n this.popupCreation('time', e);\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled) {\n return;\n }\n else {\n if (type === 'time' && !this.dateTimeWrapper) {\n if (this.isDatePopupOpen()) {\n this.hide(e);\n }\n this.popupCreation('time', e);\n }\n else if (!this.popupObj) {\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n _super.prototype.show.call(this);\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.toggle = function (e) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n this.show('time', null);\n }\n else if (this.isTimePopupOpen()) {\n this.hide(e);\n _super.prototype.show.call(this, null, e);\n this.popupCreation('date', null);\n }\n else {\n this.show(null, e);\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var 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(this.createElement, min, max, this.globalize, this.cldrTimeFormat(), this.step);\n this.timeCollections = listDetails.collection;\n this.listTag = listDetails.list;\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type, e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (type === 'date') {\n if (!this.readonly && this.popupWrapper) {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_datepopup' });\n }\n }\n else {\n if (!this.readonly) {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.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(e);\n this.popupObject.refreshPosition(this.inputElement);\n }\n }\n };\n DateTimePicker.prototype.openPopup = function (e) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObject,\n event: e || null\n };\n this.trigger('open', this.preventArgs);\n if (!this.preventArgs.cancel && !this.readonly) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n if (this.zIndex === 1000) {\n this.popupObject.show(new Animation(openAnimation), this.element);\n }\n else {\n this.popupObject.show(new Animation(openAnimation), null);\n }\n addClass([this.inputWrapper.container], [ICONANIMATION]);\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n EventHandler.add(document, 'mousedown touchstart', this.documentClickHandler, this);\n }\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\n event.preventDefault();\n var target = event.target;\n if (!(closest(target, '#' + (this.popupObject && this.popupObject.element.id))) && target !== this.inputElement\n && target !== this.timeIcon && target !== this.inputWrapper.container) {\n if (this.isTimePopupOpen()) {\n this.hide(event);\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n event.preventDefault();\n }\n }\n };\n DateTimePicker.prototype.isTimePopupOpen = function () {\n return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n };\n DateTimePicker.prototype.isDatePopupOpen = function () {\n return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n };\n DateTimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n if (Browser.isDevice) {\n this.timeModal = createElement('div');\n this.timeModal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n this.timeModal.style.display = 'block';\n document.body.appendChild(this.timeModal);\n }\n var offset = 4;\n this.popupObject = new Popup(this.dateTimeWrapper, {\n width: this.setPopupWidth(),\n zIndex: this.zIndex,\n targetType: 'container',\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n open: function () {\n _this.dateTimeWrapper.style.visibility = 'visible';\n addClass([_this.timeIcon], ACTIVE);\n if (!Browser.isDevice) {\n _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n keyAction: _this.TimeKeyActionHandle.bind(_this), keyConfigs: _this.timekeyConfigure, eventName: 'keydown'\n });\n }\n }, close: function () {\n removeClass([_this.timeIcon], ACTIVE);\n _this.unWireTimeListEvents();\n _this.inputElement.setAttribute('aria-activedescendant', 'null');\n remove(_this.popupObject.element);\n _this.popupObject.destroy();\n _this.dateTimeWrapper.innerHTML = '';\n _this.listWrapper = _this.dateTimeWrapper = undefined;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }\n });\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n };\n DateTimePicker.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n DateTimePicker.prototype.changeEvent = function (e) {\n if (+this.previousDateTime !== +this.value) {\n _super.prototype.changeEvent.call(this, e);\n this.inputElement.focus();\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n this.previousDateTime = this.value && new Date(+this.value);\n }\n };\n DateTimePicker.prototype.updateValue = function (e) {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs = {\n value: this.value, event: e || null,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n this.addTimeSelection();\n this.trigger('change', this.changedArgs);\n this.previousDateTime = this.value;\n }\n };\n DateTimePicker.prototype.setTimeScrollPosition = function () {\n var popupHeight = this.getPopupHeight();\n var popupElement;\n popupElement = this.selectedElement;\n if (!isNullOrUndefined(popupElement)) {\n var nextEle = popupElement.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : popupElement.offsetTop;\n var liHeight = popupElement.getBoundingClientRect().height;\n if ((height + popupElement.offsetTop) > popupHeight) {\n this.dateTimeWrapper.scrollTop = nextEle ? (height - (popupHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n }\n };\n DateTimePicker.prototype.setInputValue = function (type) {\n if (type === 'date') {\n this.inputElement.value = this.previousElementValue = this.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n var tempVal = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n Input.setValue(tempVal, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousElementValue = this.inputElement.value;\n this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n }\n };\n DateTimePicker.prototype.getFullDateTime = function () {\n var value = null;\n if (this.isDateObject(this.valueWithMinutes)) {\n value = this.combineDateTime(this.valueWithMinutes);\n }\n else {\n value = this.previousDate;\n }\n return this.validateMinMaxRange(value);\n };\n DateTimePicker.prototype.combineDateTime = function (value) {\n if (this.isDateObject(value)) {\n var day = this.previousDate.getDate();\n var month = this.previousDate.getMonth();\n var year = this.previousDate.getFullYear();\n var hour = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n return new Date(year, month, day, hour, minutes, seconds);\n }\n else {\n return this.previousDate;\n }\n };\n DateTimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.timeValue = li.getAttribute('data-value');\n this.hide(event);\n }\n this.setSelection(li, event);\n };\n DateTimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n var value = li.getAttribute('data-value');\n this.selectedElement = li;\n var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.activeIndex = index;\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.updateValue(event);\n }\n };\n DateTimePicker.prototype.setTimeActiveClass = function () {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n if (!isNullOrUndefined(collections)) {\n var items = collections.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n this.setTimeActiveDescendant();\n break;\n }\n }\n }\n }\n };\n DateTimePicker.prototype.setTimeActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement)) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n attributes(this.inputElement, { 'aria-activedescendant': 'null' });\n }\n };\n DateTimePicker.prototype.addTimeSelection = function () {\n this.selectedElement = null;\n this.removeTimeSelection();\n this.setTimeActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n DateTimePicker.prototype.removeTimeSelection = function () {\n this.removeTimeHover(HOVER);\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n if (items.length) {\n removeClass(items, ACTIVE);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n DateTimePicker.prototype.removeTimeHover = function (className) {\n var hoveredItem = this.getTimeHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n }\n };\n DateTimePicker.prototype.getTimeHoverItem = function (className) {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n var hoveredItem;\n if (!isNullOrUndefined(collections)) {\n hoveredItem = collections.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n DateTimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n var day = value.getDate();\n var month = value.getMonth();\n var year = value.getFullYear();\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var milliseconds = value.getMilliseconds();\n if (range) {\n if (method === 'starttime') {\n return new Date(year, month, day, 0, 0, 0);\n }\n else {\n return new Date(year, month, day, 23, 59, 59);\n }\n }\n else {\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n }\n };\n DateTimePicker.prototype.startTime = function (date) {\n var tempStartValue;\n var start;\n var tempMin = this.min;\n var value;\n value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n start = false;\n tempStartValue = this.min;\n }\n else if (+value < +this.max && +value > +this.min) {\n start = true;\n tempStartValue = value;\n }\n else if (+value >= +this.max) {\n start = true;\n tempStartValue = this.max;\n }\n return this.calculateStartEnd(tempStartValue, start, 'starttime');\n };\n DateTimePicker.prototype.endTime = function (date) {\n var tempEndValue;\n var end;\n var tempMax = this.max;\n var value;\n value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n end = false;\n tempEndValue = this.max;\n }\n else if (+value < +this.max && +value > +this.min) {\n end = true;\n tempEndValue = value;\n }\n else if (+value <= +this.min) {\n end = true;\n tempEndValue = this.min;\n }\n return this.calculateStartEnd(tempEndValue, end, 'endtime');\n };\n DateTimePicker.prototype.hide = function (e) {\n if (this.popupObj || this.dateTimeWrapper) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObj || this.popupObject,\n event: e || null\n };\n if (isNullOrUndefined(this.popupObj)) {\n this.trigger('close', this.preventArgs);\n }\n if (!this.preventArgs.cancel) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup(e);\n removeClass([document.body], OVERFLOW);\n if (Browser.isDevice && this.timeModal) {\n this.timeModal.style.display = 'none';\n this.timeModal.outerHTML = '';\n this.timeModal = null;\n }\n this.setTimeActiveDescendant();\n }\n }\n }\n if (Browser.isDevice) {\n this.element.removeAttribute('readonly');\n }\n };\n DateTimePicker.prototype.closePopup = function (e) {\n if (this.isTimePopupOpen() && this.popupObject) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: 0\n };\n this.popupObject.hide(new Animation(animModel));\n this.inputWrapper.container.classList.remove(ICONANIMATION);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ;\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function () {\n var attributes = ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n var readonly = !isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n this.placeholder = this.inputElement.getAttribute(prop);\n break;\n case 'min':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, true);\n }\n break;\n case 'disabled':\n var enabled = isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'max':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, true);\n }\n break;\n }\n }\n }\n };\n DateTimePicker.prototype.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, this.showClearButton);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n DateTimePicker.prototype.timeElementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.setTimeValue(date, value);\n }\n return null;\n };\n DateTimePicker.prototype.timeKeyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0) {\n return;\n }\n var listCount = this.timeCollections.length;\n if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n this.activeIndex = 0;\n this.selectedElement = this.liCollections[0];\n this.timeElementValue(new Date(this.timeCollections[0]));\n }\n else {\n this.findNextTimeElement(event);\n }\n }\n }\n else {\n var nextItemValue = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n nextItemValue = isNullOrUndefined(this.timeCollections[index]) ? this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n this.activeIndex = 0;\n nextItemValue = this.timeCollections[0];\n }\n else if (event.action === 'end') {\n this.activeIndex = listCount - 1;\n nextItemValue = this.timeCollections[listCount - 1];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(new Date(nextItemValue));\n }\n this.isNavigate = true;\n this.setTimeHover(this.selectedElement, NAVIGATION);\n this.setTimeActiveDescendant();\n if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setTimeScrollPosition();\n }\n };\n DateTimePicker.prototype.TimeKeyActionHandle = function (event) {\n if (this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'up':\n case 'down':\n case 'home':\n case 'end':\n this.timeKeyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\n this.addTimeSelection();\n this.previousDateTime = this.value;\n }\n }\n else {\n this.updateValue(event);\n }\n this.hide(event);\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n break;\n case 'escape':\n this.hide(event);\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n DateTimePicker.prototype.inputKeyAction = function (event) {\n switch (event.action) {\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.toggle(event);\n break;\n }\n };\n DateTimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n var options = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date('' + newProp.value)) }, true);\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n newProp.value = this.validateValue(newProp.value);\n Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\n this.changeTrigger(null);\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.dateTimeWrapper) {\n 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 case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n this.hide(null);\n }\n };\n /**\n * To get component name.\n * @private\n */\n DateTimePicker.prototype.getModuleName = function () {\n return 'datetimepicker';\n };\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(30)\n ], DateTimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(1000)\n ], DateTimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"destroyed\", void 0);\n DateTimePicker = __decorate([\n NotifyPropertyChanges\n ], DateTimePicker);\n return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, getActualDesiredIntervalsCount, setRange, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, logBase } from '../../common/utils/helper';\nimport { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\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 = getActualDesiredIntervalsCount(size, axis);\n var niceInterval = delta / actualDesiredIntervalsCount;\n if (!isNullOrUndefined(axis.desiredIntervals)) {\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 (!setRange(axis)) {\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 || series_1.type.indexOf('Histogram') > -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 (!setRange(axis)) {\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 var labelStyle;\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 labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n if (withIn(tempInterval, axis.visibleRange)) {\n triggerLabelRender(chart, tempInterval, this.formatValue(axis, isCustom, format, tempInterval), labelStyle, axis);\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\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/** @private */\nexport var scrollStart = 'scrollStart';\n/** @private */\nexport var scrollEnd = 'scrollEnd';\n/** @private */\nexport var scrollChanged = 'scrollChanged';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 Property(null)\n ], StripLineSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property('Auto')\n ], StripLineSettings.prototype, \"sizeType\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"isRepeat\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"repeatEvery\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"repeatUntil\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"isSegmented\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"segmentStart\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"segmentEnd\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"segmentAxisName\", 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 { 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, scrollBarHeight) {\n var width = 0;\n var innerPadding = 5;\n if (axis.visible) {\n width += (axis.findTickSize(axis.crossInAxis) + scrollBarHeight +\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, scrollBarHeight) {\n var height = 0;\n var innerPadding = 5;\n if (axis.visible) {\n height += (axis.findTickSize(axis.crossInAxis) + scrollBarHeight +\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 // tslint:disable-next-line:no-any\n function Axis(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || 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 /** @private */\n _this.isChart = true;\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 * 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 * 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 Property(34)\n ], Axis.prototype, \"maximumLabelWidth\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"enableTrim\", 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, originalText, 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 = originalText;\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 { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { subtractThickness, valueToCoefficient, sum, redrawElement } from '../../common/utils/helper';\nimport { subArray, TextOption, inside, measureText, appendChildElement } 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.scrollBarHeight = chart.scrollBarModule && chart.zoomSettings.enableScrollbar && chart.zoomModule.isZoomed\n && (axis_1.zoomFactor < 1 || axis_1.zoomPosition > 0) ? 16 : 0;\n axis_1.scrollBarHeight = chart.delayRedraw ? (axis_1.zoomingScrollBar && axis_1.zoomingScrollBar.svgObject &&\n axis_1.zoomingScrollBar.svgObject.childElementCount) ? 16 : 0 : axis_1.scrollBarHeight;\n axis_1.getModule(chart);\n axis_1.baseModule.calculateRangeAndInterval(size, axis_1);\n definition.computeSize(axis_1, clipRect, axis_1.scrollBarHeight);\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 if (chart.scrollBarModule && chart.zoomSettings.enableScrollbar) {\n this.renderScrollbar(chart, axis);\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 appendChildElement(chart.svgObject, axisElement, chart.redraw);\n return axisLineElement;\n };\n /**\n * To render scrollbar\n * @param chart\n * @param axis\n */\n CartesianAxisLayoutPanel.prototype.renderScrollbar = function (chart, axis) {\n if (chart.zoomModule.isZoomed && (axis.zoomFactor < 1 || axis.zoomPosition > 0) && !axis.zoomingScrollBar.isScrollUI) {\n if (!chart.scrollElement) {\n chart.scrollElement = redrawElement(chart.redraw, chart.element.id + '_scrollElement') || createElement('div', { id: chart.element.id + '_scrollElement' });\n }\n appendChildElement(chart.scrollElement, axis.zoomingScrollBar.render(), true);\n }\n else if (axis.zoomFactor === 1 && axis.zoomPosition === 0 && axis.zoomingScrollBar.svgObject) {\n axis.zoomingScrollBar.destroy();\n }\n if (axis.zoomingScrollBar.isScrollUI) {\n axis.zoomingScrollBar.isScrollUI = false;\n }\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 scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.opposedPosition ? axis.scrollBarHeight :\n -axis.scrollBarHeight : 0;\n var isTickInside = axis.tickPosition === 'Inside';\n var ticks = isTickInside ? (rect.x - tickSize - axisLineSize) : (rect.x + tickSize + axisLineSize + scrollBarHeight);\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 + (isTickInside ? scrollBarHeight : 0)) + ' ' + 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 var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight * (isOpposed ? 1 : -1) : 0;\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n pointX = isLabelInside ? (rect.x - padding) : (rect.x + padding + scrollBarHeight);\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, false, false).setAttribute('text-content', options.text);\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 scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n scrollBarHeight = (axis.opposedPosition ? 1 : -1) * scrollBarHeight;\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') || (!axis.opposedPosition\n && axis.labelPosition === 'Outside')) ? rect.x - length_1 + scrollBarHeight : rect.x + length_1 + scrollBarHeight;\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 + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX\n + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + (rect.y) + ' ');\n }\n else {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n if (i === axis.visibleLabels.length - 1) {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + 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 + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'M' + ' ' + endX + ' ' + endY + ' ' +\n 'L' + ' ' + (rect.x + scrollBarHeight) + ' ' + endY);\n }\n break;\n }\n }\n labelBorder += (axis.border.type === 'Rectangle') ? ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + rect.y + ' ' + 'L' + ' ' +\n (rect.x + scrollBarHeight) + ' ' + (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 + axis.scrollBarHeight : -padding - axis.scrollBarHeight;\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('tabindex', axis.tabIndex.toString());\n element.setAttribute('aria-label', axis.description || axis.title);\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 scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.opposedPosition ? -axis.scrollBarHeight :\n axis.scrollBarHeight : 0;\n var ticksbwtLabel = (axis.valueType.indexOf('Category') > -1 && axis.labelPlacement === 'BetweenTicks') ?\n 0.5 : 0;\n var length = axis.visibleLabels.length;\n var isTickInside = axis.tickPosition === 'Inside';\n var ticks = isTickInside ? (rect.y - tickSize - axisLineSize) : (rect.y + tickSize + axisLineSize + scrollBarHeight);\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 + (isTickInside ? scrollBarHeight : 0))\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 minorTick = minorDirection[1];\n minorGird = minorDirection[0];\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 = axis.angle % 360;\n var anglePadding = ((angle === 90 || 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 var scrollBarHeight = !islabelInside && isNullOrUndefined(axis.crossesAt) && (axis.zoomFactor < 1 || axis.zoomPosition > 0)\n ? axis.scrollBarHeight : 0;\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') && angle === 0\n && elementSize.width > intervalLength) ? intervalLength : elementSize.width;\n pointX -= width / 2;\n if (islabelInside && angle) {\n pointY = isOpposed ? (rect.y + padding) : (rect.y - padding);\n }\n else {\n labelPadding = ((isOpposed && !islabelInside) || (!isOpposed && islabelInside)) ?\n -(padding + scrollBarHeight + (angle ? ((elementSize.height / 2) + (2 * axis.maxLabelSize.height / 5)) :\n (label.index > 1 ? (2 * (elementSize.height / 4)) : 0))) :\n padding + scrollBarHeight + (angle ? (axis.maxLabelSize.height / 2) : (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 (angle === 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 (angle !== 0) {\n rotateSize = rotateTextSize(axis.labelStyle, label.text, angle, chart);\n diffHeight = islabelInside ? rotateSize.height :\n axis.maxLabelSize.height - Math.ceil(rotateSize.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, label.labelStyle, label.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 scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n var startX = void 0;\n var startY = axisRect.y + ((axis.opposedPosition ? -1 : 1) * scrollBarHeight);\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 + scrollBarHeight) : (axisRect.y - length_2 - padding - scrollBarHeight);\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 (axis.angle === 0 && !axis.enableTrim) ? textTrim(width, label, axis.labelStyle) : label;\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 scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\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 + scrollBarHeight) : (padding + (3 *\n elementSize.height / 4) + scrollBarHeight);\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, getValue } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { StackValues, RectOption, appendChildElement, appendClipElement } from '../../common/utils/helper';\nimport { firstToLowerCase, Rect, 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';\nimport { sort } from '../../common/utils/helper';\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.percentage = null;\n this.regionData = null;\n this.marker = {\n visible: false\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 point = new Points();\n var xName = (this instanceof Series && this.type === 'Histogram') ? 'x' : this.xName;\n var textMappingName = this instanceof Series && this.marker.dataLabel.name ?\n this.marker.dataLabel.name : '';\n if (this instanceof Series) {\n if ((this.type === 'Waterfall' || this.type === 'Histogram')) {\n this.currentViewData = this.chart[firstToLowerCase(this.type) + 'SeriesModule'].\n processInternalData(this.currentViewData, this);\n }\n if (this.category === 'Pareto') {\n this.currentViewData = sort(this.currentViewData, [this.yName], true);\n if (this.type === 'Line') {\n this.currentViewData = this.chart.paretoSeriesModule.performCumulativeCalculation(this.currentViewData, this);\n }\n }\n }\n var len = Object.keys(this.currentViewData).length;\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, xName);\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, xName);\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, xName);\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, xName) {\n var point;\n this.points[i] = new Points();\n point = this.points[i];\n var currentViewData = this.currentViewData;\n point.x = getValue(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 point.tooltip = getValue(this.tooltipMappingName, 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 var dateSource = this.dataSource || chart.dataSource;\n if (isNullOrUndefined(this.query) && !isNullOrUndefined(dateSource)) {\n this.dataManagerSuccess({ result: dateSource, count: dateSource.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 !== '' ? extend([], e.result, null, true) : [];\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 || type.indexOf('histogram') !== -1 ||\n type.indexOf('hiloopenclose') !== -1 || type.indexOf('candle') !== -1 || type.indexOf('pareto') !== -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 var stackingSeies = [];\n var stackedValues = [];\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 stackingSeies.push(series);\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].percentage = +(value.toFixed(2));\n }\n else {\n stackedValues[j] = stackedValues[j] ? stackedValues[j] + Math.abs(value) : Math.abs(value);\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 this.findPercentageOfStacking(stackingSeies, stackedValues, isStacking100);\n };\n Series.prototype.findPercentageOfStacking = function (stackingSeies, values, isStacking100) {\n for (var _i = 0, stackingSeies_1 = stackingSeies; _i < stackingSeies_1.length; _i++) {\n var item = stackingSeies_1[_i];\n if (isStacking100) {\n return null;\n }\n for (var _a = 0, _b = item.points; _a < _b.length; _a++) {\n var point = _b[_a];\n point.percentage = Math.abs(+(point.y / values[point.index] * 100).toFixed(2));\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 /* private dataManagerFailure(e: { result: Object[] }): void {\n this.currentViewData = [];\n this.refreshChart();\n }*/\n /** @private */\n Series.prototype.renderSeries = function (chart) {\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 render = chart.renderer;\n var index = this.index === undefined ? this.category : 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 var options = void 0;\n if (chart.chartAreaType === 'PolarRadar') {\n options = 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 this.clipRectElement = appendClipElement(chart.redraw, options, render, 'drawCircularClipPath');\n }\n else {\n options = 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 this.clipRectElement = appendClipElement(chart.redraw, options, render);\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 var redraw = chart.redraw;\n if (this.category !== 'TrendLine') {\n appendChildElement(chart.seriesElements, this.seriesElement, redraw);\n var errorBar = this.errorBar;\n if (errorBar.visible) {\n if (chart.chartAreaType === 'PolarRadar') {\n appendChildElement(chart.seriesElements, this.seriesElement, redraw);\n }\n else {\n appendChildElement(chart.seriesElements, this.errorBarElement, redraw);\n }\n }\n if (this.type === 'Scatter' || this.type === 'Bubble') {\n appendChildElement(chart.seriesElements, this.seriesElement, redraw);\n }\n }\n if (marker.visible && (chart.chartAreaType === 'Cartesian' ||\n ((this.drawType !== 'Scatter') && chart.chartAreaType === 'PolarRadar')) && this.type !== 'Scatter' &&\n this.type !== 'Bubble' && this.type !== 'Candle' && this.type !== 'Hilo' && this.type !== 'HiloOpenClose') {\n appendChildElement(chart.seriesElements, this.symbolElement, redraw);\n }\n if (dataLabel.visible) {\n appendChildElement(chart.dataLabelElements, this.shapeElement, redraw);\n appendChildElement(chart.dataLabelElements, this.textElement, redraw);\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(null)\n ], Series.prototype, \"binInterval\", void 0);\n __decorate([\n Property(false)\n ], Series.prototype, \"showNormalDistribution\", 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('')\n ], Series.prototype, \"tooltipMappingName\", 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(null)\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 var series;\n if (!chart.tooltip.shared || !chart.tooltip.enable) {\n data = this.getData();\n series = data.series;\n previous = this.previousPoints[0];\n explodeSeries = series && ((series.type === 'Bubble' || series.drawType === 'Scatter' || series.type === 'Scatter') ||\n (((series.type !== 'Candle') && (series.type !== 'Hilo') && (series.type !== 'HiloOpenClose')) &&\n (series.marker.visible && series.marker.width !== 0 && series.marker.height !== 0)));\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) || ((series.type !== 'Candle') &&\n (series.type !== 'Hilo') && (series.type !== 'HiloOpenClose'))) {\n stopTimer(this_1.markerExplode);\n this_1.isRemove = true;\n data_1.point.symbolLocations.map(function (location, index) {\n if (!data_1.series.isRectSeries || 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 { RectOption, appendChildElement, getElement, appendClipElement } from '../../common/utils/helper';\nimport { findlElement, drawSymbol, PathOption, Size, markerAnimate, CircleOption, } 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 var redraw = series.chart.redraw;\n this.createElement(series, redraw);\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, redraw);\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, redraw) {\n var seriesIndex = series.index === undefined ? series.category : 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 previousLocation;\n var previousPath;\n var circlePath;\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 markerElement;\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 if (!series.isRectSeries || series.type === 'BoxAndWhisker') {\n this.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n }\n point.color = argsData.fill;\n if (!argsData.cancel) {\n var y = void 0;\n if (series.type === 'RangeArea' || series.type === 'RangeColumn') {\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 if (redraw && getElement(shapeOption.id)) {\n markerElement = getElement(shapeOption.id);\n circlePath = argsData.shape === 'Circle' ? 'c' : '';\n previousLocation = {\n x: +markerElement.getAttribute(circlePath + 'x'), y: +markerElement.getAttribute(circlePath + 'y')\n };\n previousPath = markerElement.getAttribute('d');\n }\n markerElement = drawSymbol(location, argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + y.toString());\n appendChildElement(parentElement, markerElement, redraw, true, circlePath + 'x', circlePath + 'y', previousLocation, previousPath);\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, redraw) {\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 var index = series.index === undefined ? series.category : series.index;\n var options;\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 options = new RectOption(this.elementId + '_ChartMarkerClipRect_' + 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 markerClipRect = appendClipElement(redraw, options, render);\n }\n else {\n options = new CircleOption(this.elementId + '_ChartMarkerClipRect_' + 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 markerClipRect = appendClipElement(redraw, options, render, 'drawCircularClipPath');\n }\n options = {\n 'id': this.elementId + 'SymbolGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.elementId + '_ChartMarkerClipRect_' + index + ')'\n };\n series.symbolElement = render.createGroup(options);\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.type === 'Scatter' || series.type === 'Bubble' || series.type === 'Candle' || series.type === 'Hilo' ||\n series.type === 'HiloOpenClose' || (series.chart.chartAreaType === 'PolarRadar' && (series.drawType === 'Scatter')))) {\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' || series.type === 'RangeColumn') ? 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 } from '../utils/helper';\nimport { removeElement, showTooltip, getElement, appendChildElement } 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, redraw) {\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, redraw);\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 else {\n this.totalPages = 1;\n }\n }\n appendChildElement(chart.svgObject, legendGroup, redraw);\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, redraw) {\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 appendChildElement(chart.svgObject, clippath, redraw);\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","/**\n * Dictionary.ts class for EJ2-PDF\n * @private\n * @hidden\n */\nimport { defaultToString } from './utils';\n/**\n * @private\n * @hidden\n */\nvar Dictionary = /** @class */ (function () {\n /**\n * @private\n * @hidden\n */\n function Dictionary(toStringFunction) {\n this.table = {};\n this.nElements = 0;\n this.toStr = toStringFunction || defaultToString;\n }\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.getValue = function (key) {\n var pair = this.table['$' + this.toStr(key)];\n if (typeof pair === 'undefined') {\n return undefined;\n }\n return pair.value;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.setValue = function (key, value) {\n // if (typeof key === 'undefined' || typeof value === 'undefined') {\n // return undefined;\n // }\n var ret;\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement === 'undefined') {\n this.nElements++;\n ret = undefined;\n // }\n this.table[k] = {\n key: key,\n value: value\n };\n return ret;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.remove = function (key) {\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement !== 'undefined') {\n delete this.table[k];\n this.nElements--;\n return previousElement.value;\n // }\n // return undefined;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.keys = function () {\n var keysArray = [];\n var namesOfKeys = Object.keys(this.table);\n for (var index1 = 0; index1 < namesOfKeys.length; index1++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfKeys[index1])) {\n var pair1 = this.table[namesOfKeys[index1]];\n keysArray.push(pair1.key);\n // }\n }\n return keysArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.values = function () {\n var valuesArray = [];\n var namesOfValues = Object.keys(this.table);\n for (var index2 = 0; index2 < namesOfValues.length; index2++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfValues[index2])) {\n var pair2 = this.table[namesOfValues[index2]];\n valuesArray.push(pair2.value);\n // }\n }\n return valuesArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.containsKey = function (key) {\n var retutnValue = true;\n if (typeof this.getValue(key) === 'undefined') {\n retutnValue = true;\n }\n else {\n retutnValue = false;\n }\n return !retutnValue;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.clear = function () {\n this.table = {};\n this.nElements = 0;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.size = function () {\n return this.nElements;\n };\n return Dictionary;\n}()); // End of dictionary\nexport { Dictionary };\n","/**\n * `PdfName` class is used to perform name (element names) related primitive operations.\n * @private\n */\nvar PdfName = /** @class */ (function () {\n function PdfName(value) {\n /**\n * `Start symbol` of the name object.\n * @default /\n * @private\n */\n this.stringStartMark = '/';\n /**\n * `Value` of the element.\n * @private\n */\n this.internalValue = '';\n /**\n * Indicates if the object is currently in `saving state or not`.\n * @default false\n * @private\n */\n this.isSaving6 = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position6 = -1;\n this.internalValue = this.normalizeValue(value);\n }\n Object.defineProperty(PdfName.prototype, \"status\", {\n //property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status6;\n },\n set: function (value) {\n this.status6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving6;\n },\n set: function (value) {\n this.isSaving6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index6;\n },\n set: function (value) {\n this.index6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position6;\n },\n set: function (value) {\n this.position6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the object.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n set: function (value) {\n // if (value !== this.value) {\n var val = value;\n if (value !== null && value.length > 0) {\n // val = (value.substring(0, 1) === this.stringStartMark) ? value.substring(1) : value;\n val = value;\n this.internalValue = this.normalizeValue(val);\n }\n else {\n this.internalValue = val;\n }\n // }\n },\n enumerable: true,\n configurable: true\n });\n //public methods\n /**\n * `Saves` the name using the specified writer.\n * @private\n */\n PdfName.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.toString());\n };\n /**\n * Gets `string` representation of the primitive.\n * @private\n */\n PdfName.prototype.toString = function () {\n return (this.stringStartMark + this.escapeString(this.value));\n };\n /**\n * Creates a `copy of PdfName`.\n * @private\n */\n PdfName.prototype.clone = function (crossTable) {\n var newName = new PdfName();\n newName.value = this.internalValue;\n return newName;\n };\n /**\n * Replace some characters with its `escape sequences`.\n * @private\n */\n PdfName.prototype.escapeString = function (stringValue) {\n // if (str === null) {\n // throw new Error('ArgumentNullException : str');\n // }\n // if (str === '') {\n // return str;\n // }\n var result = '';\n var len = 0;\n for (var i = 0, len_1 = stringValue.length; i < len_1; i++) {\n var ch = stringValue[i];\n var index = PdfName.delimiters.indexOf(ch);\n // switch (ch) {\n // case '\\r' :\n // result = result + '\\\\r';\n // break;\n // case '\\n' :\n // result = result + '\\n';\n // break;\n // case '(' :\n // case ')' :\n // case '\\\\' :\n // //result.Append( '\\\\' ).Append( ch );\n // result = result + ch;\n // break;\n // default :\n // result = result + ch;\n // break;\n // }\n result = result + ch;\n }\n return result;\n };\n //methiods\n /**\n * Replace a symbol with its code with the precedence of the `sharp sign`.\n * @private\n */\n PdfName.prototype.normalizeValue = function (value, c) {\n // if (typeof c === undefined) {\n // let str : string = value;\n // for (let i : number = 0; i < PdfName.replacements.length; i++) {\n // str = this.normalizeValue(str, c);\n // }\n // return str;\n // } else {\n var strFormat = '#{0:X}';\n //return value.replace(c.toString(),String.format(strFormat,c));\n return value;\n // }\n };\n /**\n * PDF `special characters`.\n * @private\n */\n PdfName.delimiters = '()<>[]{}/%}';\n /**\n * The symbols that are not allowed in PDF names and `should be replaced`.\n * @private\n */\n PdfName.replacements = [' ', '\\t', '\\n', '\\r'];\n return PdfName;\n}());\nexport { PdfName };\n","/**\n * PdfOperators.ts class for EJ2-PDF\n * Class of string PDF common operators.\n * @private\n */\nvar Operators = /** @class */ (function () {\n /**\n * Create an instance of `PdfOperator` class.\n * @private\n */\n function Operators() {\n /**\n * Specifies the value of `test`.\n * @private\n */\n this.forTest = 'test';\n this.forTest = Operators.obj;\n }\n /**\n * Specifies the value of `obj`.\n * @private\n */\n Operators.obj = 'obj';\n /**\n * Specifies the value of `endObj`.\n * @private\n */\n Operators.endObj = 'endobj';\n /**\n * Specifies the value of `R`.\n * @private\n */\n Operators.r = 'R';\n /**\n * Specifies the value of ` `.\n * @private\n */\n Operators.whiteSpace = ' ';\n /**\n * Specifies the value of `/`.\n * @private\n */\n Operators.slash = '/';\n /**\n * Specifies the value of `\\r\\n`.\n * @private\n */\n Operators.newLine = '\\r\\n';\n /**\n * Specifies the value of `stream`.\n * @private\n */\n Operators.stream = 'stream';\n /**\n * Specifies the value of `endStream`.\n * @private\n */\n Operators.endStream = 'endstream';\n /**\n * Specifies the value of `xref`.\n * @private\n */\n Operators.xref = 'xref';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.f = 'f';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.n = 'n';\n /**\n * Specifies the value of `trailer`.\n * @private\n */\n Operators.trailer = 'trailer';\n /**\n * Specifies the value of `startxref`.\n * @private\n */\n Operators.startxref = 'startxref';\n /**\n * Specifies the value of `eof`.\n * @private\n */\n Operators.eof = '%%EOF';\n /**\n * Specifies the value of `header`.\n * @private\n */\n Operators.header = '%PDF-1.5';\n /**\n * Specifies the value of `beginText`.\n * @private\n */\n Operators.beginText = 'BT';\n /**\n * Specifies the value of `endText`.\n * @private\n */\n Operators.endText = 'ET';\n /**\n * Specifies the value of `m`.\n * @private\n */\n Operators.beginPath = 'm';\n /**\n * Specifies the value of `l`.\n * @private\n */\n Operators.appendLineSegment = 'l';\n /**\n * Specifies the value of `S`.\n * @private\n */\n Operators.stroke = 'S';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.fill = 'f';\n /**\n * Specifies the value of `f*`.\n * @private\n */\n Operators.fillEvenOdd = 'f*';\n /**\n * Specifies the value of `B`.\n * @private\n */\n Operators.fillStroke = 'B';\n /**\n * Specifies the value of `B*`.\n * @private\n */\n Operators.fillStrokeEvenOdd = 'B*';\n /**\n * Specifies the value of `c`.\n * @private\n */\n Operators.appendbeziercurve = 'c';\n /**\n * Specifies the value of `re`.\n * @private\n */\n Operators.appendRectangle = 're';\n /**\n * Specifies the value of `q`.\n * @private\n */\n Operators.saveState = 'q';\n /**\n * Specifies the value of `Q`.\n * @private\n */\n Operators.restoreState = 'Q';\n /**\n * Specifies the value of `Do`.\n * @private\n */\n Operators.paintXObject = 'Do';\n /**\n * Specifies the value of `cm`.\n * @private\n */\n Operators.modifyCtm = 'cm';\n /**\n * Specifies the value of `Tm`.\n * @private\n */\n Operators.modifyTM = 'Tm';\n /**\n * Specifies the value of `w`.\n * @private\n */\n Operators.setLineWidth = 'w';\n /**\n * Specifies the value of `J`.\n * @private\n */\n Operators.setLineCapStyle = 'J';\n /**\n * Specifies the value of `j`.\n * @private\n */\n Operators.setLineJoinStyle = 'j';\n /**\n * Specifies the value of `d`.\n * @private\n */\n Operators.setDashPattern = 'd';\n /**\n * Specifies the value of `i`.\n * @private\n */\n Operators.setFlatnessTolerance = 'i';\n /**\n * Specifies the value of `h`.\n * @private\n */\n Operators.closePath = 'h';\n /**\n * Specifies the value of `s`.\n * @private\n */\n Operators.closeStrokePath = 's';\n /**\n * Specifies the value of `b`.\n * @private\n */\n Operators.closeFillStrokePath = 'b';\n /**\n * Specifies the value of `setCharacterSpace`.\n * @private\n */\n Operators.setCharacterSpace = 'Tc';\n /**\n * Specifies the value of `setWordSpace`.\n * @private\n */\n Operators.setWordSpace = 'Tw';\n /**\n * Specifies the value of `setHorizontalScaling`.\n * @private\n */\n Operators.setHorizontalScaling = 'Tz';\n /**\n * Specifies the value of `setTextLeading`.\n * @private\n */\n Operators.setTextLeading = 'TL';\n /**\n * Specifies the value of `setFont`.\n * @private\n */\n Operators.setFont = 'Tf';\n /**\n * Specifies the value of `setRenderingMode`.\n * @private\n */\n Operators.setRenderingMode = 'Tr';\n /**\n * Specifies the value of `setTextRise`.\n * @private\n */\n Operators.setTextRise = 'Ts';\n /**\n * Specifies the value of `setTextScaling`.\n * @private\n */\n Operators.setTextScaling = 'Tz';\n /**\n * Specifies the value of `setCoords`.\n * @private\n */\n Operators.setCoords = 'Td';\n /**\n * Specifies the value of `goToNextLine`.\n * @private\n */\n Operators.goToNextLine = 'T*';\n /**\n * Specifies the value of `setText`.\n * @private\n */\n Operators.setText = 'Tj';\n /**\n * Specifies the value of `setTextWithFormatting`.\n * @private\n */\n Operators.setTextWithFormatting = 'TJ';\n /**\n * Specifies the value of `setTextOnNewLine`.\n * @private\n */\n Operators.setTextOnNewLine = '\\'';\n /**\n * Specifies the value of `selectcolorspaceforstroking`.\n * @private\n */\n Operators.selectcolorspaceforstroking = 'CS';\n /**\n * Specifies the value of `selectcolorspacefornonstroking`.\n * @private\n */\n Operators.selectcolorspacefornonstroking = 'cs';\n /**\n * Specifies the value of `setrbgcolorforstroking`.\n * @private\n */\n Operators.setrbgcolorforstroking = 'RG';\n /**\n * Specifies the value of `setrbgcolorfornonstroking`.\n * @private\n */\n Operators.setrbgcolorfornonstroking = 'rg';\n /**\n * Specifies the value of `K`.\n * @private\n */\n Operators.setcmykcolorforstroking = 'K';\n /**\n * Specifies the value of `k`.\n * @private\n */\n Operators.setcmykcolorfornonstroking = 'k';\n /**\n * Specifies the value of `G`.\n * @private\n */\n Operators.setgraycolorforstroking = 'G';\n /**\n * Specifies the value of `g`.\n * @private\n */\n Operators.setgraycolorfornonstroking = 'g';\n /**\n * Specifies the value of `W`.\n * @private\n */\n Operators.clipPath = 'W';\n /**\n * Specifies the value of `clipPathEvenOdd`.\n * @private\n */\n Operators.clipPathEvenOdd = 'W*';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.endPath = 'n';\n /**\n * Specifies the value of `setGraphicsState`.\n * @private\n */\n Operators.setGraphicsState = 'gs';\n /**\n * Specifies the value of `%`.\n * @private\n */\n Operators.comment = '%';\n /**\n * Specifies the value of `*`.\n * @private\n */\n Operators.evenOdd = '*';\n /**\n * Specifies the value of `M`.\n * @private\n */\n Operators.setMiterLimit = 'M';\n return Operators;\n}());\nexport { Operators };\n","/**\n * dictionaryProperties.ts class for EJ2-PDF\n * PDF dictionary properties.\n * @private\n */\nvar DictionaryProperties = /** @class */ (function () {\n /**\n * Initialize an instance for `PdfDictionaryProperties` class.\n * @private\n */\n function DictionaryProperties() {\n /**\n * Specifies the value of `Pages`.\n * @private\n */\n this.pages = 'Pages';\n /**\n * Specifies the value of `Kids`.\n * @private\n */\n this.kids = 'Kids';\n /**\n * Specifies the value of `Count`.\n * @private\n */\n this.count = 'Count';\n /**\n * Specifies the value of `Resources`.\n * @private\n */\n this.resources = 'Resources';\n /**\n * Specifies the value of `Type`.\n * @private\n */\n this.type = 'Type';\n /**\n * Specifies the value of `Size`.\n * @private\n */\n this.size = 'Size';\n /**\n * Specifies the value of `MediaBox`.\n * @private\n */\n this.mediaBox = 'MediaBox';\n /**\n * Specifies the value of `Parent`.\n * @private\n */\n this.parent = 'Parent';\n /**\n * Specifies the value of `Root`.\n * @private\n */\n this.root = 'Root';\n /**\n * Specifies the value of `DecodeParms`.\n * @private\n */\n this.decodeParms = 'DecodeParms';\n /**\n * Specifies the value of `Filter`.\n * @private\n */\n this.filter = 'Filter';\n /**\n * Specifies the value of `Font`.\n * @private\n */\n this.font = 'Font';\n /**\n * Specifies the value of `Type1`.\n * @private\n */\n this.type1 = 'Type1';\n /**\n * Specifies the value of `BaseFont`.\n * @private\n */\n this.baseFont = 'BaseFont';\n /**\n * Specifies the value of `Encoding`.\n * @private\n */\n this.encoding = 'Encoding';\n /**\n * Specifies the value of `Subtype`.\n * @private\n */\n this.subtype = 'Subtype';\n /**\n * Specifies the value of `Contents`.\n * @private\n */\n this.contents = 'Contents';\n /**\n * Specifies the value of `ProcSet`.\n * @private\n */\n this.procset = 'ProcSet';\n /**\n * Specifies the value of `ColorSpace`.\n * @private\n */\n this.colorSpace = 'ColorSpace';\n /**\n * Specifies the value of `ExtGState`.\n * @private\n */\n this.extGState = 'ExtGState';\n /**\n * Specifies the value of `Pattern`.\n * @private\n */\n this.pattern = 'Pattern';\n /**\n * Specifies the value of `XObject`.\n * @private\n */\n this.xObject = 'XObject';\n /**\n * Specifies the value of `Length`.\n * @private\n */\n this.length = 'Length';\n /**\n * Specifies the value of `Width`.\n * @private\n */\n this.width = 'Width';\n /**\n * Specifies the value of `Height`.\n * @private\n */\n this.height = 'Height';\n /**\n * Specifies the value of `BitsPerComponent`.\n * @private\n */\n this.bitsPerComponent = 'BitsPerComponent';\n /**\n * Specifies the value of `Image`.\n * @private\n */\n this.image = 'Image';\n /**\n * Specifies the value of `dctdecode`.\n * @private\n */\n this.dctdecode = 'DCTDecode';\n /**\n * Specifies the value of `Columns`.\n * @private\n */\n this.columns = 'Columns';\n /**\n * Specifies the value of `BlackIs1`.\n * @private\n */\n this.blackIs1 = 'BlackIs1';\n /**\n * Specifies the value of `K`.\n * @private\n */\n this.k = 'K';\n /**\n * Specifies the value of `S`.\n * @private\n */\n this.s = 'S';\n /**\n * Specifies the value of `Predictor`.\n * @private\n */\n this.predictor = 'Predictor';\n /**\n * Specifies the value of `DeviceRGB`.\n * @private\n */\n this.deviceRgb = 'DeviceRGB';\n /**\n * Specifies the value of `Next`.\n * @private\n */\n this.next = 'Next';\n /**\n * Specifies the value of `Action`.\n * @private\n */\n this.action = 'Action';\n /**\n * Specifies the value of `Link`.\n * @private\n */\n this.link = 'Link';\n /**\n *\n * Specifies the value of `A`.\n * @private\n */\n this.a = 'A';\n /**\n * Specifies the value of `Annot`.\n * @private\n */\n this.annot = 'Annot';\n /**\n * Specifies the value of `P`.\n * @private\n */\n this.p = 'P';\n /**\n * Specifies the value of `C`.\n * @private\n */\n this.c = 'C';\n /**\n * Specifies the value of `Rect`.\n * @private\n */\n this.rect = 'Rect';\n /**\n * Specifies the value of `URI`.\n * @private\n */\n this.uri = 'URI';\n /**\n * Specifies the value of `Annots`.\n * @private\n */\n this.annots = 'Annots';\n /**\n * Specifies the value of `ca`.\n * @private\n */\n this.ca = 'ca';\n /**\n * Specifies the value of `CA`.\n * @private\n */\n this.CA = 'CA';\n /**\n * Specifies the value of `XYZ`.\n * @private\n */\n this.xyz = 'XYZ';\n /**\n * Specifies the value of `Fit`.\n * @private\n */\n this.fit = 'Fit';\n /**\n * Specifies the value of `Dest`.\n * @private\n */\n this.dest = 'Dest';\n /**\n * Specifies the value of `BM`.\n * @private\n */\n this.BM = 'BM';\n /**\n * Specifies the value of `flatedecode`.\n * @private\n */\n this.flatedecode = 'FlateDecode';\n /**\n * Specifies the value of `Rotate`.\n * @private\n */\n this.rotate = 'Rotate';\n /**\n * Specifies the value of 'bBox'.\n * @private\n */\n this.bBox = 'BBox';\n /**\n * Specifies the value of 'form'.\n * @private\n */\n this.form = 'Form';\n /**\n * Specifies the value of 'w'.\n * @private\n */\n this.w = 'W';\n /**\n * Specifies the value of 'cIDFontType2'.\n * @private\n */\n this.cIDFontType2 = 'CIDFontType2';\n /**\n * Specifies the value of 'cIDToGIDMap'.\n * @private\n */\n this.cIDToGIDMap = 'CIDToGIDMap';\n /**\n * Specifies the value of 'identity'.\n * @private\n */\n this.identity = 'Identity';\n /**\n * Specifies the value of 'dw'.\n * @private\n */\n this.dw = 'DW';\n /**\n * Specifies the value of 'fontDescriptor'.\n * @private\n */\n this.fontDescriptor = 'FontDescriptor';\n /**\n * Specifies the value of 'cIDSystemInfo'.\n * @private\n */\n this.cIDSystemInfo = 'CIDSystemInfo';\n /**\n * Specifies the value of 'fontName'.\n * @private\n */\n this.fontName = 'FontName';\n /**\n * Specifies the value of 'flags'.\n * @private\n */\n this.flags = 'Flags';\n /**\n * Specifies the value of 'fontBBox'.\n * @private\n */\n this.fontBBox = 'FontBBox';\n /**\n * Specifies the value of 'missingWidth'.\n * @private\n */\n this.missingWidth = 'MissingWidth';\n /**\n * Specifies the value of 'stemV'.\n * @private\n */\n this.stemV = 'StemV';\n /**\n * Specifies the value of 'italicAngle'.\n * @private\n */\n this.italicAngle = 'ItalicAngle';\n /**\n * Specifies the value of 'capHeight'.\n * @private\n */\n this.capHeight = 'CapHeight';\n /**\n * Specifies the value of 'ascent'.\n * @private\n */\n this.ascent = 'Ascent';\n /**\n * Specifies the value of 'descent'.\n * @private\n */\n this.descent = 'Descent';\n /**\n * Specifies the value of 'leading'.\n * @private\n */\n this.leading = 'Leading';\n /**\n * Specifies the value of 'avgWidth'.\n * @private\n */\n this.avgWidth = 'AvgWidth';\n /**\n * Specifies the value of 'fontFile2'.\n * @private\n */\n this.fontFile2 = 'FontFile2';\n /**\n * Specifies the value of 'maxWidth'.\n * @private\n */\n this.maxWidth = 'MaxWidth';\n /**\n * Specifies the value of 'xHeight'.\n * @private\n */\n this.xHeight = 'XHeight';\n /**\n * Specifies the value of 'stemH'.\n * @private\n */\n this.stemH = 'StemH';\n /**\n * Specifies the value of 'registry'.\n * @private\n */\n this.registry = 'Registry';\n /**\n * Specifies the value of 'ordering'.\n * @private\n */\n this.ordering = 'Ordering';\n /**\n * Specifies the value of 'supplement'.\n * @private\n */\n this.supplement = 'Supplement';\n /**\n * Specifies the value of 'type0'.\n * @private\n */\n this.type0 = 'Type0';\n /**\n * Specifies the value of 'identityH'.\n * @private\n */\n this.identityH = 'Identity-H';\n /**\n * Specifies the value of 'toUnicode'.\n * @private\n */\n this.toUnicode = 'ToUnicode';\n /**\n * Specifies the value of 'descendantFonts'.\n * @private\n */\n this.descendantFonts = 'DescendantFonts';\n //\n }\n return DictionaryProperties;\n}());\nexport { DictionaryProperties };\n","import { Dictionary } from './../collections/dictionary';\nimport { PdfName } from './pdf-name';\nimport { Operators } from './../input-output/pdf-operators';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfDictionary` class is used to perform primitive operations.\n * @private\n */\nvar PdfDictionary = /** @class */ (function () {\n function PdfDictionary(dictionary) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position7 = -1;\n /**\n * The `IPdfSavable` with the specified key.\n * @private\n */\n this.primitiveItems = new Dictionary();\n /**\n * `Start marker` for dictionary.\n * @private\n */\n this.prefix = '<<';\n /**\n * `End marker` for dictionary.\n * @private\n */\n this.suffix = '>>';\n /**\n * @hidden\n * @private\n */\n this.resources = [];\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.object = null;\n /**\n * Flag for PDF file formar 1.5 is dictionary `archiving` needed.\n * @default true\n * @private\n */\n this.archive = true;\n /**\n * Represents the Font dictionary.\n * @hidden\n * @private\n */\n this.isFont = false;\n if (typeof dictionary === 'undefined') {\n this.primitiveItems = new Dictionary();\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n else {\n this.primitiveItems = new Dictionary();\n var keys = dictionary.items.keys();\n var values = dictionary.items.values();\n for (var index = 0; index < dictionary.items.size(); index++) {\n this.primitiveItems.setValue(keys[index], values[index]);\n }\n this.status = dictionary.status;\n this.freezeChanges(this);\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n }\n Object.defineProperty(PdfDictionary.prototype, \"items\", {\n //Properties\n /**\n * Gets or sets the `IPdfSavable` with the specified key.\n * @private\n */\n get: function () {\n return this.primitiveItems;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status7;\n },\n set: function (value) {\n this.status7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving7;\n },\n set: function (value) {\n this.isSaving7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index7;\n },\n set: function (value) {\n this.index7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position7;\n },\n set: function (value) {\n this.position7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.primitiveItems.size();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Dictionary\", {\n /**\n * Collection of `items` in the object.\n * @private\n */\n get: function () {\n return this;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.getArchive = function () {\n return this.archive;\n };\n /**\n * Set flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.setArchive = function (value) {\n this.archive = value;\n };\n /**\n * Sets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.setEncrypt = function (value) {\n this.encrypt = value;\n this.modify();\n };\n /**\n * Gets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.getEncrypt = function () {\n return this.encrypt;\n };\n /**\n * `Freezes` the changes.\n * @private\n */\n PdfDictionary.prototype.freezeChanges = function (freezer) {\n this.bChanged = false;\n };\n /**\n * Creates a `copy of PdfDictionary`.\n * @private\n */\n PdfDictionary.prototype.clone = function (crossTable) {\n //Need to add more codings\n var newDict = new PdfDictionary();\n return newDict;\n };\n /**\n * `Mark` this instance modified.\n * @private\n */\n PdfDictionary.prototype.modify = function () {\n this.bChanged = true;\n };\n /**\n * `Removes` the specified key.\n * @private\n */\n PdfDictionary.prototype.remove = function (key) {\n if (typeof key !== 'string') {\n this.primitiveItems.remove(key.value);\n this.modify();\n }\n else {\n this.remove(new PdfName(key));\n }\n };\n /**\n * `Determines` whether the dictionary contains the key.\n * @private\n */\n PdfDictionary.prototype.containsKey = function (key) {\n var returnValue = false;\n returnValue = this.primitiveItems.containsKey(key.toString());\n return returnValue;\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginSave = function () {\n this.beginSave.sender.beginSave();\n };\n /**\n * Raises event `Font Dictionary BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onFontDictionaryBeginSave = function () {\n this.fontDictionaryBeginSave.sender.fontDictionaryBeginSave();\n };\n /**\n * Raises event `Descendant Font BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onDescendantFontBeginSave = function () {\n this.descendantFontBeginSave.sender.descendantFontBeginSave();\n };\n /**\n * Raises event 'BeginSave'.\n * @private\n */\n PdfDictionary.prototype.onTemplateBeginSave = function () {\n this.pageBeginDrawTemplate.sender.pageBeginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginAnnotationSave = function () {\n this.annotationBeginSave.sender.beginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onSectionBeginSave = function (writer) {\n var saveEvent = this.sectionBeginSave;\n saveEvent.sender.beginSave(saveEvent.state, writer);\n };\n PdfDictionary.prototype.save = function (writer, bRaiseEvent) {\n if (typeof bRaiseEvent === 'undefined') {\n this.save(writer, true);\n }\n else {\n writer.write(this.prefix);\n if (typeof this.beginSave !== 'undefined') {\n this.onBeginSave();\n }\n if (typeof this.descendantFontBeginSave !== 'undefined') {\n this.onDescendantFontBeginSave();\n }\n if (typeof this.fontDictionaryBeginSave !== 'undefined') {\n this.onFontDictionaryBeginSave();\n }\n if (typeof this.annotationBeginSave !== 'undefined') {\n this.onBeginAnnotationSave();\n }\n if (typeof this.sectionBeginSave !== 'undefined') {\n this.onSectionBeginSave(writer);\n }\n if (typeof this.pageBeginDrawTemplate !== 'undefined') {\n this.onTemplateBeginSave();\n }\n // }\n if (this.Count > 0) {\n this.saveItems(writer);\n }\n writer.write(this.suffix);\n writer.write(Operators.newLine);\n }\n };\n /**\n * `Save dictionary items`.\n * @private\n */\n PdfDictionary.prototype.saveItems = function (writer) {\n writer.write(Operators.newLine);\n var keys = this.primitiveItems.keys();\n var values = this.primitiveItems.values();\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n var name_1 = new PdfName(key);\n name_1.save(writer);\n writer.write(Operators.whiteSpace);\n var resources = values[index];\n resources.save(writer);\n writer.write(Operators.newLine);\n }\n };\n return PdfDictionary;\n}());\nexport { PdfDictionary };\nvar SaveSectionCollectionEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveSectionCollectionEventHandler(sender) {\n this.sender = sender;\n }\n return SaveSectionCollectionEventHandler;\n}());\nexport { SaveSectionCollectionEventHandler };\nvar SaveDescendantFontEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveDescendantFontEventHandler(sender) {\n this.sender = sender;\n }\n return SaveDescendantFontEventHandler;\n}());\nexport { SaveDescendantFontEventHandler };\nvar SaveFontDictionaryEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveFontDictionaryEventHandler(sender) {\n this.sender = sender;\n }\n return SaveFontDictionaryEventHandler;\n}());\nexport { SaveFontDictionaryEventHandler };\nvar SaveAnnotationEventHandler = /** @class */ (function () {\n /**\n * New instance for `save annotation event handler` class.\n * @private\n */\n function SaveAnnotationEventHandler(sender) {\n this.sender = sender;\n }\n return SaveAnnotationEventHandler;\n}());\nexport { SaveAnnotationEventHandler };\nvar SaveSectionEventHandler = /** @class */ (function () {\n // constructors\n /**\n * New instance for `save section event handler` class.\n * @private\n */\n function SaveSectionEventHandler(sender, state) {\n this.sender = sender;\n this.state = state;\n }\n return SaveSectionEventHandler;\n}());\nexport { SaveSectionEventHandler };\n/**\n * SaveTemplateEventHandler class used to store information about template elements.\n * @private\n * @hidden\n */\nvar SaveTemplateEventHandler = /** @class */ (function () {\n /**\n * New instance for save section collection event handler class.\n * @public\n */\n function SaveTemplateEventHandler(sender) {\n this.sender = sender;\n }\n return SaveTemplateEventHandler;\n}());\nexport { SaveTemplateEventHandler };\n","/**\n * `PdfNumber` class is used to perform number related primitive operations.\n * @private\n */\nvar PdfNumber = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfNumber` class.\n * @private\n */\n function PdfNumber(value) {\n /**\n * Sotres the `position`.\n * @default -1\n * @private\n */\n this.position5 = -1;\n this.value = value;\n }\n Object.defineProperty(PdfNumber.prototype, \"intValue\", {\n /**\n * Gets or sets the `integer` value.\n * @private\n */\n get: function () {\n return this.value;\n },\n set: function (value) {\n this.value = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isInteger\", {\n /**\n * Gets or sets a value indicating whether this instance `is integer`.\n * @private\n */\n get: function () {\n return this.integer;\n },\n set: function (value) {\n this.integer = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status5;\n },\n set: function (value) {\n this.status5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving5;\n },\n set: function (value) {\n this.isSaving5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index5;\n },\n set: function (value) {\n this.index5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position5;\n },\n set: function (value) {\n this.position5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves the object`.\n * @private\n */\n PdfNumber.prototype.save = function (writer) {\n writer.write(this.intValue.toString()); //tostring(CultureInfo.InletiantCulture)\n };\n /**\n * Creates a `copy of PdfNumber`.\n * @private\n */\n PdfNumber.prototype.clone = function (crossTable) {\n var newNumber = new PdfNumber(this.value);\n return newNumber;\n };\n /**\n * Converts a `float value to a string` using Adobe PDF rules.\n * @private\n */\n PdfNumber.floatToString = function (number) {\n // let tempString1 : string = number.toString();\n // let tempString2 : string = tempString1.indexOf('.') != -1 ? tempString1.substring(0, tempString1.indexOf('.')) : tempString1;\n var returnString = number.toFixed(2);\n if (returnString === '0.00') {\n returnString = '.00';\n }\n // let prefixLength : number = (22 - tempString2.length) >= 0 ? (22 - tempString2.length) : 0;\n // for (let index : number = 0; index < prefixLength; index++) {\n // returnString += '0';\n // }\n // returnString += tempString2 + '.00';\n // returnString += (tempString3.length > 6) ? tempString3.substring(0,6) : tempString3;\n // let suffixLength : number = (6 - tempString3.length) >= 0 ? (6 - tempString3.length) : 0;\n // for (let index : number = 0; index < suffixLength; index++) {\n // returnString += '0';\n // }\n return returnString;\n };\n /**\n * Determines the `minimum of the three values`.\n * @private\n */\n PdfNumber.min = function (x, y, z) {\n var r = Math.min(x, y);\n return Math.min(z, r);\n };\n return PdfNumber;\n}());\nexport { PdfNumber };\n","import { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\n/**\n * `PdfArray` class is used to perform array related primitive operations.\n * @private\n */\nvar PdfArray = /** @class */ (function () {\n function PdfArray(array) {\n //Fields\n /**\n * `startMark` - '['\n * @private\n */\n this.startMark = '[';\n /**\n * `endMark` - ']'.\n * @private\n */\n this.endMark = ']';\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position9 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject9 = null;\n /**\n * Represents the Font dictionary.\n * @hidden\n * @private\n */\n this.isFont = false;\n if (typeof array === 'undefined') {\n this.internalElements = [];\n }\n else {\n if (typeof array !== 'undefined' && !(array instanceof PdfArray)) {\n var tempNumberArray = array;\n for (var index = 0; index < tempNumberArray.length; index++) {\n var pdfNumber = new PdfNumber(tempNumberArray[index]);\n this.add(pdfNumber);\n }\n // } else if (typeof array !== 'undefined' && (array instanceof PdfArray)) {\n }\n else {\n var tempArray = array;\n // if (tempArray.Elements.length > 0) {\n this.internalElements = [];\n for (var index = 0; index < tempArray.elements.length; index++) {\n this.internalElements.push(tempArray.elements[index]);\n }\n // }\n }\n }\n }\n //property\n /**\n * Gets the `IPdfSavable` at the specified index.\n * @private\n */\n PdfArray.prototype.items = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index, The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n Object.defineProperty(PdfArray.prototype, \"count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.internalElements.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status9;\n },\n set: function (value) {\n this.status9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving9;\n },\n set: function (value) {\n this.isSaving9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject9;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position9;\n },\n set: function (value) {\n this.position9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index9;\n },\n set: function (value) {\n this.index9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"elements\", {\n /**\n * Gets the `elements` of the Pdf Array.\n * @private\n */\n get: function () {\n return this.internalElements;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element to the PDF array.\n * @private\n */\n PdfArray.prototype.add = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : obj');\n // }\n if (typeof this.internalElements === 'undefined') {\n this.internalElements = [];\n }\n this.internalElements.push(element);\n this.markedChange();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markedChange = function () {\n this.bChanged = true;\n };\n /**\n * `Determines` whether the specified element is within the array.\n * @private\n */\n PdfArray.prototype.contains = function (element) {\n var returnValue = false;\n for (var index = 0; index < this.internalElements.length; index++) {\n var tempElement = this.internalElements[index];\n var inputElement = element;\n if (tempElement != null && typeof tempElement !== 'undefined' && inputElement != null && typeof inputElement !== 'undefined') {\n if (tempElement.value === inputElement.value) {\n return true;\n }\n }\n // if (this.internalElements[index] === element) {\n // returnValue = true;\n // }\n }\n return returnValue;\n };\n /**\n * Returns the `primitive object` of input index.\n * @private\n */\n PdfArray.prototype.getItems = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index , The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfArray.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.startMark);\n for (var i = 0, len = this.count; i < len; i++) {\n this.getItems(i).save(writer);\n if (i + 1 !== len) {\n writer.write(Operators.whiteSpace);\n }\n }\n writer.write(this.endMark);\n };\n /**\n * Creates a `copy of PdfArray`.\n * @private\n */\n PdfArray.prototype.clone = function (crossTable) {\n // if (this.clonedObject9 !== null && this.clonedObject9.CrossTable === crossTable) {\n // return this.clonedObject9;\n // } else {\n this.clonedObject9 = null;\n // Else clone the object.\n var newArray = new PdfArray();\n for (var index = 0; index < this.internalElements.length; index++) {\n var obj = this.internalElements[index];\n newArray.add(obj.clone(crossTable));\n }\n newArray.pdfCrossTable = crossTable;\n this.clonedObject9 = newArray;\n return newArray;\n };\n /**\n * Creates filled PDF array `from the rectangle`.\n * @private\n */\n PdfArray.fromRectangle = function (bounds) {\n var values = [bounds.x, bounds.y, bounds.width, bounds.height];\n var array = new PdfArray(values);\n return array;\n };\n // /**\n // * Creates the rectangle from filled PDF array.\n // * @private\n // */\n // public ToRectangle() : RectangleF {\n // if (this.Count < 4) {\n // throw Error('InvalidOperationException-Can not convert to rectangle.');\n // }\n // let x1 : number;\n // let x2 : number;\n // let y1 : number;\n // let y2 : number;\n // let num : PdfNumber = this.getItems(0) as PdfNumber;\n // x1 = num.IntValue;\n // num = this.getItems(1) as PdfNumber;\n // y1 = num.IntValue;\n // num = this.getItems(2) as PdfNumber;\n // x2 = num.IntValue;\n // num = this.getItems(3) as PdfNumber;\n // y2 = num.IntValue;\n // let x : number = Math.min(x1, x2);\n // let y : number = Math.min(y1, y2);\n // let width : number = Math.abs(x1 - x2);\n // let height : number = Math.abs(y1 - y2);\n // let rect : RectangleF = new RectangleF(new PointF(x, y), new SizeF(width, height));\n // return rect;\n // }\n /**\n * `Inserts` the element into the array.\n * @private\n */\n PdfArray.prototype.insert = function (index, element) {\n if (index < this.internalElements.length && index > 0) {\n var tempElements = [];\n for (var i = 0; i < index; i++) {\n tempElements.push(this.internalElements[i]);\n }\n tempElements.push(element);\n for (var i = index; i < this.internalElements.length; i++) {\n tempElements.push(this.internalElements[i]);\n }\n this.internalElements = tempElements;\n }\n else {\n this.internalElements.push(element);\n }\n this.markChanged();\n };\n /**\n * `Checks whether array contains the element`.\n * @private\n */\n PdfArray.prototype.indexOf = function (element) {\n return this.internalElements.indexOf(element);\n };\n /**\n * `Removes` element from the array.\n * @private\n */\n PdfArray.prototype.remove = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : element');\n // }\n var index = this.internalElements.indexOf(element);\n // if (index >= 0 && index < this.internalElements.length) {\n this.internalElements[index] = null;\n // }\n this.markChanged();\n };\n /**\n * `Remove` the element from the array by its index.\n * @private\n */\n PdfArray.prototype.removeAt = function (index) {\n // this.internalElements.RemoveAt(index);\n if (this.internalElements.length > index) {\n var tempArray = [];\n for (var i = 0; i < index; i++) {\n tempArray.push(this.internalElements[i]);\n }\n for (var i = index + 1; i < this.internalElements.length; i++) {\n tempArray.push(this.internalElements[i]);\n }\n this.internalElements = tempArray;\n }\n this.markChanged();\n };\n /**\n * `Clear` the array.\n * @private\n */\n PdfArray.prototype.clear = function () {\n this.internalElements = [];\n this.markChanged();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markChanged = function () {\n this.bChanged = true;\n };\n return PdfArray;\n}());\nexport { PdfArray };\n","/**\n * Save class provide method to save file\n * ```typescript\n * let blob : Blob = new Blob([''], { type: 'text/plain' });\n * Save.save('fileName.txt',blob);\n */\nvar Save = /** @class */ (function () {\n /**\n * Initialize new instance of {save}\n */\n function Save() {\n // tslint:disable\n }\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n * @param {boolean} isMicrosoftBrowser- specify whether microsoft browser or not\n * @returns {void}\n */\n Save.save = function (fileName, buffer) {\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('ArgumentException: fileName cannot be undefined, null or empty');\n }\n var extension = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length);\n var mimeType = this.getMimeType(extension);\n if (mimeType !== '') {\n buffer = new Blob([buffer], { type: mimeType });\n }\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(buffer, fileName);\n }\n else {\n var downloadLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n this.saveInternal(fileName, extension, buffer, downloadLink, 'download' in downloadLink);\n }\n };\n Save.saveInternal = function (fileName, extension, buffer, downloadLink, hasDownloadAttribute) {\n if (hasDownloadAttribute) {\n downloadLink.download = fileName;\n var dataUrl_1 = window.URL.createObjectURL(buffer);\n downloadLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n downloadLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n dataUrl_1 = undefined;\n });\n }\n else {\n if (extension !== 'docx' && extension !== 'xlsx') {\n var url = window.URL.createObjectURL(buffer);\n var isPopupBlocked = window.open(url, '_blank');\n if (!isPopupBlocked) {\n window.location.href = url;\n }\n }\n else {\n var reader_1 = new FileReader();\n reader_1.onloadend = function () {\n var isPopupBlocked = window.open(reader_1.result, '_blank');\n if (!isPopupBlocked) {\n window.location.href = reader_1.result;\n }\n };\n reader_1.readAsDataURL(buffer);\n }\n }\n };\n /**\n *\n * @param {string} extension - get mime type of the specified extension\n * @private\n */\n Save.getMimeType = function (extension) {\n var mimeType = '';\n switch (extension) {\n case 'html':\n mimeType = 'text/html';\n break;\n case 'pdf':\n mimeType = 'application/pdf';\n break;\n case 'docx':\n mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n break;\n case 'xlsx':\n mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n break;\n case 'txt':\n mimeType = 'text/plain';\n break;\n }\n return mimeType;\n };\n return Save;\n}());\nexport { Save };\n","import { Save } from './save';\n/**\n * XmlWriter class provide method to create XML data\n */\nvar XmlWriter = /** @class */ (function () {\n /**\n * Initialize new instance of {XmlWriter}\n */\n function XmlWriter() {\n this.contentPos = 0;\n this.bufferText = '';\n this.bufferBlob = new Blob([''], { type: 'text/plain' });\n this.currentState = 'Initial';\n this.namespaceStack = [];\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[0].set('xmlns', 'http://www.w3.org/2000/xmlns/', 'Special');\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[1].set('xml', 'http://www.w3.org/XML/1998/namespace', 'Special');\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[2].set('', '', 'Implied');\n this.elementStack = [];\n this.elementStack.push(new XmlElement());\n this.elementStack[0].set('', '', '', this.namespaceStack.length - 1);\n this.attributeStack = [];\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(XmlWriter.prototype, \"buffer\", {\n /**\n * Gets the content written to the {XmlWriter} as Blob.\n * @returns {Blob}\n */\n get: function () {\n this.flush();\n return this.bufferBlob;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Writes processing instruction with a space between the name and text\n * @param {string} name - name of the processing instruction\n * @param {string} text - text to write in the processing instruction\n * @throws ArgumentException\n * @throws InvalidArgumentException\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeProcessingInstruction = function (name, text) {\n if (name === undefined || name === null || name.length === 0) {\n throw new Error('ArgumentException: name should not be undefined, null or empty');\n }\n this.checkName(name);\n if (text === undefined || text === null) {\n text = '';\n }\n if (name.length === 3 && name === 'xml') {\n if (this.currentState !== 'Initial') {\n // tslint:disable-next-line:max-line-length\n throw new Error('InvalidArgumentException: Cannot write XML declaration.WriteStartDocument method has already written it');\n }\n }\n if (this.currentState !== 'Initial' || this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n else {\n this.writeStartDocument();\n this.writeProcessingInstructionInternal(name, text);\n }\n };\n /**\n * Writes Xml declaration with version and standalone attribute\n * @param {boolean} standalone - if true it write standalone=yes else standalone=no\n * @throws InvalidOperation\n */\n XmlWriter.prototype.writeStartDocument = function (standalone) {\n if (this.currentState !== 'Initial' || this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n this.currentState = 'StartDocument';\n this.rawText('');\n };\n /**\n * Closes any open tag or attribute and write the state back to start\n */\n XmlWriter.prototype.writeEndDocument = function () {\n while (this.elementStack.length - 1 > 0) {\n this.writeEndElement();\n }\n this.currentState = 'EndDocument';\n this.flush();\n };\n /**\n * Writes the specified start tag and associates it with the given namespace and prefix.\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName -localName of element\n * @param {string} namespace - namespace URI associate with element\n * @throws ArgumentException\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeStartElement = function (prefix, localName, namespace) {\n if (this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n if (localName === undefined || localName === null || localName.length === 0) {\n throw new Error('ArgumentException: localName cannot be undefined, null or empty');\n }\n this.checkName(localName);\n if (this.currentState === 'Initial') {\n this.writeStartDocument();\n }\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n }\n this.currentState = 'StartElement';\n if (prefix === undefined || prefix === null) {\n if (namespace !== undefined && namespace !== null) {\n prefix = this.lookupPrefix(namespace);\n }\n if (prefix === undefined || prefix === null) {\n prefix = '';\n }\n }\n else if (prefix.length > 0) {\n if (namespace === undefined || namespace === null) {\n namespace = this.lookupNamespace(prefix);\n }\n if (namespace === undefined || namespace === null || (namespace !== undefined && namespace.length === 0)) {\n throw new Error('ArgumentException: Cannot use a prefix with an empty namespace');\n }\n }\n if (namespace === undefined || namespace === null) {\n namespace = this.lookupNamespace(prefix);\n }\n this.writeStartElementInternal(prefix, localName, namespace);\n };\n /**\n * Closes one element and pop corresponding namespace scope\n */\n XmlWriter.prototype.writeEndElement = function () {\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n this.currentState = 'ElementContent';\n }\n else if (this.currentState === 'ElementContent') {\n this.currentState = 'ElementContent';\n }\n this.currentState = 'EndElement';\n var top = this.elementStack.length - 1;\n this.writeEndElementInternal(this.elementStack[top].prefix, this.elementStack[top].localName);\n this.namespaceStack.splice(this.elementStack[top].previousTop + 1);\n this.elementStack.splice(top);\n if (this.bufferText.length > 10240) {\n this.flush();\n }\n };\n /**\n * Writes an element with the specified prefix, local name, namespace URI, and value.\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName - localName of element\n * @param {string} namespace - namespace URI associate with element\n * @param {string} value - value of element\n */\n XmlWriter.prototype.writeElementString = function (prefix, localName, namespace, value) {\n this.writeStartElement(prefix, localName, namespace);\n if (value !== undefined && value !== null && value.length !== 0) {\n this.writeString(value);\n }\n this.writeEndElement();\n };\n /**\n * Writes out the attribute with the specified prefix, local name, namespace URI, and value\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName - localName of element\n * @param {string} namespace - namespace URI associate with element\n * @param {string} value - value of element\n */\n XmlWriter.prototype.writeAttributeString = function (prefix, localName, namespace, value) {\n this.writeStartAttribute(prefix, localName, namespace, value);\n this.writeStringInternal(value, true);\n this.writeEndAttribute();\n };\n /**\n * Writes the given text content\n * @param {string} text - text to write\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeString = function (text) {\n this.writeInternal(text, false);\n };\n /**\n * Write given text as raw data\n * @param {string} text - text to write\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeRaw = function (text) {\n this.writeInternal(text, true);\n };\n XmlWriter.prototype.writeInternal = function (text, isRawString) {\n if (text === undefined || text === null) {\n return;\n }\n else {\n if (this.currentState !== 'StartElement' && this.currentState !== 'ElementContent') {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n }\n this.currentState = 'ElementContent';\n if (isRawString) {\n this.rawText(text);\n }\n else {\n this.writeStringInternal(text, false);\n }\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName - file name\n */\n XmlWriter.prototype.save = function (fileName) {\n while (this.elementStack.length - 1 > 0) {\n this.writeEndElement();\n }\n if (this.bufferText !== '') {\n this.flush();\n }\n Save.save(fileName, this.buffer);\n };\n /**\n * Releases the resources used by XmlWriter.\n */\n XmlWriter.prototype.destroy = function () {\n this.bufferBlob = undefined;\n for (var i = 0; i < this.namespaceStack.length; i++) {\n this.namespaceStack[i].destroy();\n }\n this.namespaceStack = [];\n for (var i = 0; i < this.elementStack.length; i++) {\n this.elementStack[i].destroy();\n }\n this.elementStack = [];\n this.bufferText = '';\n this.contentPos = 0;\n };\n XmlWriter.prototype.flush = function () {\n if (this.bufferBlob === undefined) {\n return;\n }\n this.bufferBlob = new Blob([this.bufferBlob, this.bufferText], { type: 'text/plain' });\n this.bufferText = '';\n };\n XmlWriter.prototype.writeProcessingInstructionInternal = function (name, text) {\n this.bufferText += ' 0) {\n this.bufferText += ' ';\n text = text.replace(/\\?\\>/g, '? >');\n this.bufferText += text;\n }\n this.bufferText += '?';\n this.bufferText += '>';\n };\n XmlWriter.prototype.writeStartAttribute = function (prefix, localName, namespace, value) {\n if (localName === undefined || localName === null || localName.length === 0) {\n if (prefix === 'xmlns') {\n localName = 'xmlns';\n prefix = '';\n }\n else {\n throw new Error('ArgumentException: localName cannot be undefined, null or empty');\n }\n }\n if (this.currentState !== 'StartElement') {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n this.checkName(localName);\n this.writeStartAttributePrefixAndNameSpace(prefix, localName, namespace, value);\n };\n XmlWriter.prototype.writeStartAttributePrefixAndNameSpace = function (prefix, localName, namespace, value) {\n if (prefix === undefined || prefix === null) {\n if (namespace !== undefined && namespace !== null) {\n if (!(localName === 'xmlns' && namespace === 'http://www.w3.org/2000/xmlns/')) {\n prefix = this.lookupPrefix(namespace);\n }\n }\n if (prefix === undefined || prefix === null) {\n prefix = '';\n }\n }\n if (namespace === undefined || namespace === null) {\n if (prefix !== undefined && prefix !== null && prefix.length > 0) {\n namespace = this.lookupNamespace(prefix);\n }\n if (namespace === undefined || namespace === null) {\n namespace = '';\n }\n }\n this.writeStartAttributeSpecialAttribute(prefix, localName, namespace, value);\n };\n XmlWriter.prototype.writeStartAttributeSpecialAttribute = function (prefix, localName, namespace, value) {\n if (prefix.length === 0) {\n if (localName[0] === 'x' && localName === 'xmlns') {\n this.skipPushAndWrite(prefix, localName, namespace);\n this.pushNamespaceExplicit('', value);\n return;\n }\n else if (namespace.length > 0) {\n prefix = this.lookupPrefix(namespace);\n }\n }\n else {\n if (prefix[0] === 'x') {\n if (prefix === 'xmlns') {\n this.skipPushAndWrite(prefix, localName, namespace);\n this.pushNamespaceExplicit(localName, value);\n return;\n }\n else if (prefix === 'xml') {\n if (localName === 'space' || localName === 'lang') {\n this.skipPushAndWrite(prefix, localName, namespace);\n return;\n }\n }\n }\n if (namespace.length === 0) {\n prefix = '';\n }\n }\n if (prefix !== undefined && prefix !== null && prefix.length !== 0) {\n this.pushNamespaceImplicit(prefix, namespace);\n }\n this.skipPushAndWrite(prefix, localName, namespace);\n };\n XmlWriter.prototype.writeEndAttribute = function () {\n this.currentState = 'StartElement';\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeStartElementInternal = function (prefix, localName, namespace) {\n this.bufferText += '<';\n if (prefix.length > 0) {\n this.rawText(prefix);\n this.bufferText += ':';\n }\n this.rawText(localName);\n var top = this.elementStack.length;\n this.elementStack.push(new XmlElement());\n this.elementStack[top].set(prefix, localName, namespace, this.namespaceStack.length - 1);\n this.pushNamespaceImplicit(prefix, namespace);\n for (var i = 0; i < this.attributeStack.length; i++) {\n this.attributeStack[i].destroy();\n }\n this.attributeStack = [];\n };\n XmlWriter.prototype.writeEndElementInternal = function (prefix, localName) {\n if (this.contentPos !== this.bufferText.length + 1) {\n this.bufferText += '';\n }\n else {\n this.bufferText = this.bufferText.substring(0, this.bufferText.length - 1);\n this.bufferText += ' />';\n }\n };\n XmlWriter.prototype.writeStartAttributeInternal = function (prefix, localName, namespaceName) {\n this.bufferText += ' ';\n if (prefix !== undefined && prefix !== null && prefix.length > 0) {\n this.rawText(prefix);\n this.bufferText += ':';\n }\n this.rawText(localName);\n this.bufferText += '=';\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeNamespaceDeclaration = function (prefix, namespaceUri) {\n this.writeStartNamespaceDeclaration(prefix);\n this.writeStringInternal(namespaceUri, true);\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeStartNamespaceDeclaration = function (prefix) {\n if (prefix === undefined || prefix === null || prefix.length === 0) {\n this.rawText(' xmlns=\\\"');\n }\n else {\n this.rawText(' xmlns:');\n this.rawText(prefix);\n this.bufferText += '=';\n this.bufferText += '\"';\n }\n };\n XmlWriter.prototype.writeStringInternal = function (text, inAttributeValue) {\n if (text === null || text === undefined) {\n text = '';\n }\n var tempText = '';\n text = text.replace(/\\&/g, '&');\n text = text.replace(/\\/g, '>');\n if (inAttributeValue) {\n text = text.replace(/\\\"/g, '"');\n }\n this.bufferText += text;\n if (!inAttributeValue) {\n this.contentPos = 0;\n }\n };\n XmlWriter.prototype.startElementContent = function () {\n var start = this.elementStack[this.elementStack.length - 1].previousTop;\n for (var i = this.namespaceStack.length - 1; i > start; i--) {\n if (this.namespaceStack[i].kind === 'NeedToWrite') {\n this.writeNamespaceDeclaration(this.namespaceStack[i].prefix, this.namespaceStack[i].namespaceUri);\n }\n }\n this.bufferText += '>';\n this.contentPos = this.bufferText.length + 1;\n };\n XmlWriter.prototype.rawText = function (text) {\n this.bufferText += text;\n };\n XmlWriter.prototype.addNamespace = function (prefix, ns, kind) {\n var top = this.namespaceStack.length;\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[top].set(prefix, ns, kind);\n };\n XmlWriter.prototype.lookupPrefix = function (namespace) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].namespaceUri === namespace) {\n return this.namespaceStack[i].prefix;\n }\n }\n return undefined;\n };\n XmlWriter.prototype.lookupNamespace = function (prefix) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].prefix === prefix) {\n return this.namespaceStack[i].namespaceUri;\n }\n }\n return undefined;\n };\n XmlWriter.prototype.lookupNamespaceIndex = function (prefix) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].prefix === prefix) {\n return i;\n }\n }\n return -1;\n };\n XmlWriter.prototype.pushNamespaceImplicit = function (prefix, ns) {\n var kind;\n var existingNsIndex = this.lookupNamespaceIndex(prefix);\n if (existingNsIndex !== -1) {\n if (existingNsIndex > this.elementStack[this.elementStack.length - 1].previousTop) {\n if (this.namespaceStack[existingNsIndex].namespaceUri !== ns) {\n throw new Error('XmlException namespace Uri needs to be the same as the one that is already declared');\n }\n return;\n }\n else {\n if (this.namespaceStack[existingNsIndex].kind === 'Special') {\n if (prefix === 'xml') {\n if (ns !== this.namespaceStack[existingNsIndex].namespaceUri) {\n throw new Error('InvalidArgumentException: Xml String');\n }\n else {\n kind = 'Implied';\n }\n }\n else {\n throw new Error('InvalidArgumentException: Prefix \"xmlns\" is reserved for use by XML.');\n }\n }\n else {\n kind = (this.namespaceStack[existingNsIndex].namespaceUri === ns) ? 'Implied' : 'NeedToWrite';\n }\n }\n }\n else {\n if ((ns === 'http://www.w3.org/XML/1998/namespace' && prefix !== 'xml') ||\n (ns === 'http://www.w3.org/2000/xmlns/' && prefix !== 'xmlns')) {\n throw new Error('InvalidArgumentException');\n }\n kind = 'NeedToWrite';\n }\n this.addNamespace(prefix, ns, kind);\n };\n XmlWriter.prototype.pushNamespaceExplicit = function (prefix, ns) {\n var existingNsIndex = this.lookupNamespaceIndex(prefix);\n if (existingNsIndex !== -1) {\n if (existingNsIndex > this.elementStack[this.elementStack.length - 1].previousTop) {\n this.namespaceStack[existingNsIndex].kind = 'Written';\n return;\n }\n }\n this.addNamespace(prefix, ns, 'Written');\n return;\n };\n XmlWriter.prototype.addAttribute = function (prefix, localName, namespaceName) {\n var top = this.attributeStack.length;\n this.attributeStack.push(new XmlAttribute());\n this.attributeStack[top].set(prefix, localName, namespaceName);\n for (var i = 0; i < top; i++) {\n if (this.attributeStack[i].isDuplicate(prefix, localName, namespaceName)) {\n throw new Error('XmlException: duplicate attribute name');\n }\n }\n };\n XmlWriter.prototype.skipPushAndWrite = function (prefix, localName, namespace) {\n this.addAttribute(prefix, localName, namespace);\n this.writeStartAttributeInternal(prefix, localName, namespace);\n };\n XmlWriter.prototype.checkName = function (text) {\n var format = /[ !@#$%^&*()+\\=\\[\\]{};':\"\\\\|,<>\\/?]/;\n if (format.test(text)) {\n throw new Error('InvalidArgumentException: invalid name character');\n }\n };\n return XmlWriter;\n}());\nexport { XmlWriter };\n/**\n * class for managing namespace collection\n */\nvar Namespace = /** @class */ (function () {\n function Namespace() {\n }\n /**\n * set value for current namespace instance\n * @param {string} prefix namespace's prefix\n * @param {string} namespaceUri namespace URI\n * @param {string} kind namespace kind\n */\n Namespace.prototype.set = function (prefix, namespaceUri, kind) {\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.kind = kind;\n };\n /**\n * Releases the resources used by Namespace\n */\n Namespace.prototype.destroy = function () {\n this.prefix = undefined;\n this.namespaceUri = undefined;\n this.kind = undefined;\n };\n return Namespace;\n}());\nexport { Namespace };\n/**\n * class for managing element collection\n */\nvar XmlElement = /** @class */ (function () {\n function XmlElement() {\n }\n /**\n * set value of current element\n * @param {string} prefix - element prefix\n * @param {string} localName - element local name\n * @param {string} namespaceUri -namespace URI\n * @param {string} previousTop - previous namespace top\n */\n XmlElement.prototype.set = function (prefix, localName, namespaceUri, previousTop) {\n this.previousTop = previousTop;\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.localName = localName;\n };\n /**\n * Releases the resources used by XmlElement\n */\n XmlElement.prototype.destroy = function () {\n this.previousTop = undefined;\n this.prefix = undefined;\n this.localName = undefined;\n this.namespaceUri = undefined;\n };\n return XmlElement;\n}());\nexport { XmlElement };\n/**\n * class for managing attribute collection\n */\nvar XmlAttribute = /** @class */ (function () {\n function XmlAttribute() {\n }\n /**\n * set value of current attribute\n * @param {string} prefix - namespace's prefix\n * @param {string} namespaceUri - namespace URI\n * @param {string} localName - attribute localName\n */\n XmlAttribute.prototype.set = function (prefix, localName, namespaceUri) {\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.localName = localName;\n };\n /**\n * get whether the attribute is duplicate or not\n * @param {string} prefix - namespace's prefix\n * @param {string} namespaceUri - namespace URI\n * @param {string} localName - attribute localName\n */\n XmlAttribute.prototype.isDuplicate = function (prefix, localName, namespaceUri) {\n return ((this.localName === localName) && ((this.prefix === prefix) || (this.namespaceUri === namespaceUri)));\n };\n /**\n * Releases the resources used by XmlAttribute\n */\n XmlAttribute.prototype.destroy = function () {\n this.prefix = undefined;\n this.namespaceUri = undefined;\n this.localName = undefined;\n };\n return XmlAttribute;\n}());\nexport { XmlAttribute };\n","import { Encoding, validateNullOrUndefined } from './encoding';\nimport { Save } from './save';\n/**\n * StreamWriter class contains the implementation for writing characters to a file in a particular encoding\n * ```typescript\n * let writer = new StreamWriter();\n * writer.write('Hello World');\n * writer.save('Sample.txt');\n * writer.dispose();\n * ```\n */\nvar StreamWriter = /** @class */ (function () {\n /**\n * Initializes a new instance of the StreamWriter class by using the specified encoding.\n * @param {Encoding} encoding?- The character encoding to use.\n */\n function StreamWriter(encoding) {\n this.bufferBlob = new Blob(['']);\n this.bufferText = '';\n this.init(encoding);\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(StreamWriter.prototype, \"buffer\", {\n /**\n * Gets the content written to the StreamWriter as Blob.\n * @returns Blob\n */\n get: function () {\n this.flush();\n return this.bufferBlob;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StreamWriter.prototype, \"encoding\", {\n /**\n * Gets the encoding.\n * @returns Encoding\n */\n get: function () {\n return this.enc;\n },\n enumerable: true,\n configurable: true\n });\n StreamWriter.prototype.init = function (encoding) {\n if (encoding === null || encoding === undefined) {\n this.enc = new Encoding(false);\n this.enc.type = 'Utf8';\n }\n else {\n this.enc = encoding;\n this.setBomByte();\n }\n };\n /**\n * Private method to set Byte Order Mark(BOM) value based on EncodingType\n */\n StreamWriter.prototype.setBomByte = function () {\n if (this.encoding.includeBom) {\n switch (this.encoding.type) {\n case 'Unicode':\n var arrayUnicode = new ArrayBuffer(2);\n var uint8 = new Uint8Array(arrayUnicode);\n uint8[0] = 255;\n uint8[1] = 254;\n this.bufferBlob = new Blob([arrayUnicode]);\n break;\n case 'Utf8':\n var arrayUtf8 = new ArrayBuffer(3);\n var utf8 = new Uint8Array(arrayUtf8);\n utf8[0] = 239;\n utf8[1] = 187;\n utf8[2] = 191;\n this.bufferBlob = new Blob([arrayUtf8]);\n break;\n default:\n this.bufferBlob = new Blob(['']);\n break;\n }\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName - The file name to save\n * @returns {void}\n */\n StreamWriter.prototype.save = function (fileName) {\n if (this.bufferText !== '') {\n this.flush();\n }\n Save.save(fileName, this.buffer);\n };\n /**\n * Writes the specified string.\n * @param {string} value - The string to write. If value is null or undefined, nothing is written.\n * @returns {void}\n */\n StreamWriter.prototype.write = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText += value;\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n StreamWriter.prototype.flush = function () {\n if (this.bufferText === undefined || this.bufferText === null || this.bufferText.length === 0) {\n return;\n }\n var bufferArray = this.encoding.getBytes(this.bufferText, 0, this.bufferText.length);\n this.bufferText = '';\n this.bufferBlob = new Blob([this.bufferBlob, bufferArray]);\n };\n /**\n * Writes the specified string followed by a line terminator\n * @param {string} value - The string to write. If value is null or undefined, nothing is written\n * @returns {void}\n */\n StreamWriter.prototype.writeLine = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText = this.bufferText + value + '\\r\\n';\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n /**\n * Releases the resources used by the StreamWriter\n * @returns {void}\n */\n StreamWriter.prototype.destroy = function () {\n this.bufferBlob = undefined;\n this.bufferText = undefined;\n if (this.enc instanceof Encoding) {\n this.enc.destroy();\n }\n this.enc = undefined;\n };\n return StreamWriter;\n}());\nexport { StreamWriter };\n","import { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * array literal codes\n */\nvar 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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfDictionary } from './pdf-dictionary';\nimport { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\nimport { PdfName } from './pdf-name';\nimport { PdfArray } from './pdf-array';\nimport { PdfReferenceHolder } from './pdf-reference';\nimport { CompressedStreamWriter } from '@syncfusion/ej2-compression';\n/**\n * `PdfStream` class is used to perform stream related primitive operations.\n * @private\n */\nvar PdfStream = /** @class */ (function (_super) {\n __extends(PdfStream, _super);\n function PdfStream(dictionary, data) {\n var _this = _super.call(this, dictionary) || this;\n //Constants\n /**\n * @hidden\n * @private\n */\n _this.dicPrefix = 'stream';\n /**\n * @hidden\n * @private\n */\n _this.dicSuffix = 'endstream';\n /**\n * Internal variable to hold `cloned object`.\n * @private\n */\n _this.clonedObject2 = null;\n /**\n * @hidden\n * @private\n */\n _this.bCompress = true;\n /**\n * @hidden\n * @private\n */\n _this.isImageStream = false;\n /**\n * @hidden\n * @private\n */\n _this.isFontStream = false;\n if (typeof dictionary !== 'undefined' || typeof data !== 'undefined') {\n _this.dataStream2 = [];\n _this.dataStream2 = data;\n _this.bCompress2 = false;\n }\n else {\n _this.dataStream2 = [];\n _this.bCompress2 = true;\n //Pending\n }\n return _this;\n }\n Object.defineProperty(PdfStream.prototype, \"internalStream\", {\n /**\n * Gets the `internal` stream.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"isImage\", {\n /**\n * Gets or sets 'is image' flag.\n * @private\n */\n get: function () {\n return this.isImageStream;\n },\n set: function (value) {\n this.isImageStream = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"isFont\", {\n /**\n * Gets or sets 'is font' flag.\n * @private\n */\n get: function () {\n return this.isFontStream;\n },\n set: function (value) {\n this.isFontStream = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"compress\", {\n /**\n * Gets or sets `compression` flag.\n * @private\n */\n get: function () {\n return this.bCompress;\n },\n set: function (value) {\n this.bCompress = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"data\", {\n /**\n * Gets or sets the `data`.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clear` the internal stream.\n * @private\n */\n PdfStream.prototype.clearStream = function () {\n this.internalStream = [];\n if (this.items.containsKey(this.dictionaryProperties.filter)) {\n this.remove(this.dictionaryProperties.filter);\n }\n this.bCompress = true;\n this.modify();\n };\n /**\n * `Writes` the specified string.\n * @private\n */\n PdfStream.prototype.write = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (text.length <= 0) {\n throw new Error('ArgumentException: Can not write an empty string, text');\n }\n this.dataStream2.push(text);\n this.modify();\n };\n /**\n * `Writes` the specified bytes.\n * @private\n */\n PdfStream.prototype.writeBytes = function (data) {\n if (data === null) {\n throw new Error('ArgumentNullException:data');\n }\n if (data.length <= 0) {\n throw new Error('ArgumentException: Can not write an empty bytes, data');\n }\n var text = '';\n for (var i = 0; i < data.length; i++) {\n text += String.fromCharCode(data[i]);\n }\n this.dataStream2.push(text);\n this.modify();\n };\n /**\n * Raises event `Cmap BeginSave`.\n * @private\n */\n PdfStream.prototype.onCmapBeginSave = function () {\n this.cmapBeginSave.sender.cmapBeginSave();\n };\n /**\n * Raises event `Font Program BeginSave`.\n * @private\n */\n PdfStream.prototype.onFontProgramBeginSave = function () {\n this.fontProgramBeginSave.sender.fontProgramBeginSave();\n };\n /**\n * `Compresses the content` if it's required.\n * @private\n */\n PdfStream.prototype.compressContent = function (data, writer) {\n if (this.bCompress) {\n var byteArray = [];\n for (var i = 0; i < data.length; i++) {\n byteArray.push(data.charCodeAt(i));\n }\n var dataArray = new Uint8Array(byteArray);\n var sw = new CompressedStreamWriter();\n // data = 'Hello World!!!';\n sw.write(dataArray, 0, dataArray.length);\n sw.close();\n data = sw.getCompressedString;\n this.addFilter(this.dictionaryProperties.flatedecode);\n }\n return data;\n };\n /**\n * `Adds a filter` to the filter array.\n * @private\n */\n PdfStream.prototype.addFilter = function (filterName) {\n var obj = this.items.getValue(this.dictionaryProperties.filter);\n if (obj instanceof PdfReferenceHolder) {\n var rh = obj;\n obj = rh.object;\n }\n var array = obj;\n var name = obj;\n if (name != null) {\n array = new PdfArray();\n array.insert(0, name);\n this.items.setValue(this.dictionaryProperties.filter, array);\n }\n name = new PdfName(filterName);\n if (array == null) {\n this.items.setValue(this.dictionaryProperties.filter, name);\n }\n else {\n array.insert(0, name);\n }\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfStream.prototype.save = function (writer) {\n if (typeof this.cmapBeginSave !== 'undefined') {\n this.onCmapBeginSave();\n }\n if (typeof this.fontProgramBeginSave !== 'undefined') {\n this.onFontProgramBeginSave();\n }\n var data = '';\n for (var i = 0; i < this.data.length; i++) {\n data = data + this.data[i];\n }\n if (data.length > 1 && !this.isImage && !this.isFont) {\n data = 'q\\r\\n' + data + 'Q\\r\\n';\n }\n data = this.compressContent(data, writer);\n var length = data.length;\n this.items.setValue(this.dictionaryProperties.length, new PdfNumber(length));\n _super.prototype.save.call(this, writer, false);\n writer.write(this.dicPrefix);\n writer.write(Operators.newLine);\n if (data.length > 0) {\n writer.write(data);\n }\n writer.write(Operators.newLine);\n writer.write(this.dicSuffix);\n writer.write(Operators.newLine);\n };\n /**\n * Converts `bytes to string`.\n * @private\n */\n PdfStream.bytesToString = function (byteArray) {\n var output = '';\n for (var i = 0; i < byteArray.length; i++) {\n output = output + String.fromCharCode(byteArray[i]);\n }\n return output;\n };\n return PdfStream;\n}(PdfDictionary));\nexport { PdfStream };\nvar SaveCmapEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveCmapEventHandler(sender) {\n this.sender = sender;\n }\n return SaveCmapEventHandler;\n}());\nexport { SaveCmapEventHandler };\nvar SaveFontProgramEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveFontProgramEventHandler(sender) {\n this.sender = sender;\n }\n return SaveFontProgramEventHandler;\n}());\nexport { SaveFontProgramEventHandler };\n","/**\n * `PdfString` class is used to perform string related primitive operations.\n * @private\n */\nexport var InternalEnum;\n(function (InternalEnum) {\n //Internals\n /**\n * public Enum for `ForceEncoding`.\n * @private\n */\n var ForceEncoding;\n (function (ForceEncoding) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Ascii`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Ascii\"] = 1] = \"Ascii\";\n /**\n * Specifies the type of `Unicode`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Unicode\"] = 2] = \"Unicode\";\n })(ForceEncoding = InternalEnum.ForceEncoding || (InternalEnum.ForceEncoding = {}));\n /**\n * public Enum for `SourceType`.\n * @private\n */\n var SourceType;\n (function (SourceType) {\n /**\n * Specifies the type of `StringValue`.\n * @private\n */\n SourceType[SourceType[\"StringValue\"] = 0] = \"StringValue\";\n /**\n * Specifies the type of `ByteBuffer`.\n * @private\n */\n SourceType[SourceType[\"ByteBuffer\"] = 1] = \"ByteBuffer\";\n })(SourceType || (SourceType = {}));\n})(InternalEnum || (InternalEnum = {}));\nvar PdfString = /** @class */ (function () {\n function PdfString(value) {\n /**\n * Value indicating whether the string was converted to hex.\n * @default false\n * @private\n */\n this.bHex = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position1 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject1 = null;\n /**\n * `Shows` if the data of the stream was decrypted.\n * @default false\n * @private\n */\n this.bDecrypted = false;\n /**\n * Shows if the data of the stream `was decrypted`.\n * @default false\n * @private\n */\n this.isParentDecrypted = false;\n /**\n * Gets a value indicating whether the object is `packed or not`.\n * @default false\n * @private\n */\n this.isPacked = false;\n /**\n * @hidden\n * @private\n */\n this.isFormField = false;\n /**\n * @hidden\n * @private\n */\n this.isColorSpace = false;\n /**\n * @hidden\n * @private\n */\n this.isHexString = true;\n if (typeof value === 'undefined') {\n this.bHex = false;\n }\n else {\n if (!(value.length > 0 && value[0] === '0xfeff')) {\n this.stringValue = value;\n this.data = [];\n for (var i = 0; i < value.length; ++i) {\n this.data.push(value.charCodeAt(i));\n }\n }\n }\n }\n Object.defineProperty(PdfString.prototype, \"hex\", {\n //Property\n /**\n * Gets a value indicating whether string is in `hex`.\n * @private\n */\n get: function () {\n return this.bHex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"value\", {\n /**\n * Gets or sets string `value` of the object.\n * @private\n */\n get: function () {\n return this.stringValue;\n },\n set: function (value) {\n this.stringValue = value;\n this.data = null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status1;\n },\n set: function (value) {\n this.status1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving1;\n },\n set: function (value) {\n this.isSaving1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index1;\n },\n set: function (value) {\n this.index1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position1;\n },\n set: function (value) {\n this.position1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.crossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"converted\", {\n /**\n * Gets a value indicating whether to check if the value has unicode characters.\n * @private\n */\n get: function () {\n return this.bConverted;\n },\n /**\n * sets a value indicating whether to check if the value has unicode characters.\n * @private\n */\n set: function (value) {\n this.bConverted = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"encode\", {\n /**\n * Gets value indicating whether we should convert data to Unicode.\n */\n get: function () {\n return this.bForceEncoding;\n },\n set: function (value) {\n this.bForceEncoding = value;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * Converts `bytes to string using hex format` for representing string.\n * @private\n */\n PdfString.bytesToHex = function (bytes) {\n if (bytes == null) {\n return '';\n }\n var builder = '';\n return builder;\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfString.prototype.save = function (writer) {\n if (writer === null) {\n throw new Error('ArgumentNullException : writer');\n }\n if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {\n writer.write(this.pdfEncode());\n }\n else {\n writer.write(PdfString.stringMark[0] + this.value + PdfString.stringMark[1]);\n }\n };\n PdfString.prototype.pdfEncode = function () {\n var result = '';\n if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {\n var data = this.escapeSymbols(this.value);\n for (var i = 0; i < data.length; i++) {\n result += String.fromCharCode(data[i]);\n }\n result = PdfString.stringMark[0] + result + PdfString.stringMark[1];\n }\n else {\n result = this.value;\n }\n return result;\n };\n PdfString.prototype.escapeSymbols = function (value) {\n var data = [];\n for (var i = 0; i < value.length; i++) {\n var currentData = value.charCodeAt(i);\n switch (currentData) {\n case 40:\n case 41:\n data.push(92);\n data.push(currentData);\n break;\n case 13:\n data.push(92);\n data.push(114);\n break;\n case 92:\n data.push(92);\n data.push(currentData);\n break;\n default:\n data.push(currentData);\n break;\n }\n }\n return data;\n };\n /**\n * Creates a `copy of PdfString`.\n * @private\n */\n PdfString.prototype.clone = function (crossTable) {\n if (this.clonedObject1 !== null && this.clonedObject1.CrossTable === crossTable) {\n return this.clonedObject1;\n }\n else {\n this.clonedObject1 = null;\n }\n var newString = new PdfString(this.stringValue);\n newString.bHex = this.bHex;\n newString.crossTable = crossTable;\n newString.isColorSpace = this.isColorSpace;\n this.clonedObject1 = newString;\n return newString;\n };\n /**\n * Converts string to array of unicode symbols.\n */\n PdfString.toUnicodeArray = function (value, bAddPrefix) {\n if (value == null) {\n throw new Error('Argument Null Exception : value');\n }\n var startIndex = 0;\n var output = [];\n for (var i = 0; i < value.length; i++) {\n var code = value.charCodeAt(i);\n output.push(code / 256 >>> 0);\n output.push(code & 0xff);\n }\n return output;\n };\n /**\n * Converts byte data to string.\n */\n PdfString.byteToString = function (data) {\n if (data == null) {\n throw new Error('Argument Null Exception : stream');\n }\n var result = '';\n for (var i = 0; i < data.length; ++i) {\n result += String.fromCharCode(data[i]);\n }\n return result;\n };\n //constants = ;\n /**\n * `General markers` for string.\n * @private\n */\n PdfString.stringMark = '()';\n /**\n * `Hex markers` for string.\n * @private\n */\n PdfString.hexStringMark = '<>';\n /**\n * Format of password data.\n * @private\n */\n PdfString.hexFormatPattern = '{0:X2}';\n return PdfString;\n}());\nexport { PdfString };\n","/**\n * public Enum for `PdfHorizontalAlignment`.\n * @private\n */\nexport var PdfHorizontalAlignment;\n(function (PdfHorizontalAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Right\"] = 2] = \"Right\";\n})(PdfHorizontalAlignment || (PdfHorizontalAlignment = {}));\n/**\n * public Enum for `PdfVerticalAlignment`.\n * @private\n */\nexport var PdfVerticalAlignment;\n(function (PdfVerticalAlignment) {\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Top\"] = 0] = \"Top\";\n /**\n * Specifies the type of `Middle`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Middle\"] = 1] = \"Middle\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Bottom\"] = 2] = \"Bottom\";\n})(PdfVerticalAlignment || (PdfVerticalAlignment = {}));\n/**\n * public Enum for `public`.\n * @private\n */\nexport var PdfTextAlignment;\n(function (PdfTextAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Right\"] = 2] = \"Right\";\n /**\n * Specifies the type of `Justify`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Justify\"] = 3] = \"Justify\";\n})(PdfTextAlignment || (PdfTextAlignment = {}));\n/**\n * public Enum for `TextRenderingMode`.\n * @private\n */\nexport var TextRenderingMode;\n(function (TextRenderingMode) {\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Fill\"] = 0] = \"Fill\";\n /**\n * Specifies the type of `Stroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Stroke\"] = 1] = \"Stroke\";\n /**\n * Specifies the type of `FillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"FillStroke\"] = 2] = \"FillStroke\";\n /**\n * Specifies the type of `None`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"None\"] = 3] = \"None\";\n /**\n * Specifies the type of `ClipFlag`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFlag\"] = 4] = \"ClipFlag\";\n /**\n * Specifies the type of `ClipFill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFill\"] = 4] = \"ClipFill\";\n /**\n * Specifies the type of `ClipStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipStroke\"] = 5] = \"ClipStroke\";\n /**\n * Specifies the type of `ClipFillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFillStroke\"] = 6] = \"ClipFillStroke\";\n /**\n * Specifies the type of `Clip`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Clip\"] = 7] = \"Clip\";\n})(TextRenderingMode || (TextRenderingMode = {}));\n/**\n * public Enum for `PdfLineJoin`.\n * @private\n */\nexport var PdfLineJoin;\n(function (PdfLineJoin) {\n /**\n * Specifies the type of `Miter`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Miter\"] = 0] = \"Miter\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Bevel`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Bevel\"] = 2] = \"Bevel\";\n})(PdfLineJoin || (PdfLineJoin = {}));\n/**\n * public Enum for `PdfLineCap`.\n * @private\n */\nexport var PdfLineCap;\n(function (PdfLineCap) {\n /**\n * Specifies the type of `Flat`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Flat\"] = 0] = \"Flat\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Square`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Square\"] = 2] = \"Square\";\n})(PdfLineCap || (PdfLineCap = {}));\n/**\n * public Enum for `PdfDashStyle`.\n * @private\n */\nexport var PdfDashStyle;\n(function (PdfDashStyle) {\n /**\n * Specifies the type of `Solid`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Solid\"] = 0] = \"Solid\";\n /**\n * Specifies the type of `Dash`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dash\"] = 1] = \"Dash\";\n /**\n * Specifies the type of `Dot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dot\"] = 2] = \"Dot\";\n /**\n * Specifies the type of `DashDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDot\"] = 3] = \"DashDot\";\n /**\n * Specifies the type of `DashDotDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDotDot\"] = 4] = \"DashDotDot\";\n /**\n * Specifies the type of `Custom`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Custom\"] = 5] = \"Custom\";\n})(PdfDashStyle || (PdfDashStyle = {}));\n/**\n * public Enum for `PdfFillMode`.\n * @private\n */\nexport var PdfFillMode;\n(function (PdfFillMode) {\n /**\n * Specifies the type of `Winding`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Winding\"] = 0] = \"Winding\";\n /**\n * Specifies the type of `Alternate`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Alternate\"] = 1] = \"Alternate\";\n})(PdfFillMode || (PdfFillMode = {}));\n/**\n * public Enum for `PdfColorSpace`.\n * @private\n */\nexport var PdfColorSpace;\n(function (PdfColorSpace) {\n /**\n * Specifies the type of `Rgb`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Rgb\"] = 0] = \"Rgb\";\n /**\n * Specifies the type of `Cmyk`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Cmyk\"] = 1] = \"Cmyk\";\n /**\n * Specifies the type of `GrayScale`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"GrayScale\"] = 2] = \"GrayScale\";\n /**\n * Specifies the type of `Indexed`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Indexed\"] = 3] = \"Indexed\";\n})(PdfColorSpace || (PdfColorSpace = {}));\n/**\n * public Enum for `PdfBlendMode`.\n * @private\n */\nexport var PdfBlendMode;\n(function (PdfBlendMode) {\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Normal\"] = 0] = \"Normal\";\n /**\n * Specifies the type of `Multiply`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Multiply\"] = 1] = \"Multiply\";\n /**\n * Specifies the type of `Screen`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Screen\"] = 2] = \"Screen\";\n /**\n * Specifies the type of `Overlay`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Overlay\"] = 3] = \"Overlay\";\n /**\n * Specifies the type of `Darken`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Darken\"] = 4] = \"Darken\";\n /**\n * Specifies the type of `Lighten`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Lighten\"] = 5] = \"Lighten\";\n /**\n * Specifies the type of `ColorDodge`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorDodge\"] = 6] = \"ColorDodge\";\n /**\n * Specifies the type of `ColorBurn`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorBurn\"] = 7] = \"ColorBurn\";\n /**\n * Specifies the type of `HardLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"HardLight\"] = 8] = \"HardLight\";\n /**\n * Specifies the type of `SoftLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"SoftLight\"] = 9] = \"SoftLight\";\n /**\n * Specifies the type of `Difference`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Difference\"] = 10] = \"Difference\";\n /**\n * Specifies the type of `Exclusion`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Exclusion\"] = 11] = \"Exclusion\";\n /**\n * Specifies the type of `Hue`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Hue\"] = 12] = \"Hue\";\n /**\n * Specifies the type of `Saturation`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Saturation\"] = 13] = \"Saturation\";\n /**\n * Specifies the type of `Color`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Color\"] = 14] = \"Color\";\n /**\n * Specifies the type of `Luminosity`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Luminosity\"] = 15] = \"Luminosity\";\n})(PdfBlendMode || (PdfBlendMode = {}));\n/**\n * public Enum for `PdfGraphicsUnit`.\n * @private\n */\nexport var PdfGraphicsUnit;\n(function (PdfGraphicsUnit) {\n /**\n * Specifies the type of `Centimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Centimeter\"] = 0] = \"Centimeter\";\n /**\n * Specifies the type of `Pica`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pica\"] = 1] = \"Pica\";\n /**\n * Specifies the type of `Pixel`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pixel\"] = 2] = \"Pixel\";\n /**\n * Specifies the type of `Point`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Point\"] = 3] = \"Point\";\n /**\n * Specifies the type of `Inch`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Inch\"] = 4] = \"Inch\";\n /**\n * Specifies the type of `Document`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Document\"] = 5] = \"Document\";\n /**\n * Specifies the type of `Millimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Millimeter\"] = 6] = \"Millimeter\";\n})(PdfGraphicsUnit || (PdfGraphicsUnit = {}));\n/**\n * public Enum for `PdfGridImagePosition`.\n * @private\n */\nexport var PdfGridImagePosition;\n(function (PdfGridImagePosition) {\n /**\n * Specifies the type of `Fit`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Fit\"] = 0] = \"Fit\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Stretch`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Stretch\"] = 2] = \"Stretch\";\n /**\n * Specifies the type of `Tile`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Tile\"] = 3] = \"Tile\";\n})(PdfGridImagePosition || (PdfGridImagePosition = {}));\n/**\n * public Enum for `the text rendering direction`.\n * @private\n */\nexport var PdfTextDirection;\n(function (PdfTextDirection) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `LeftToRight`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"LeftToRight\"] = 1] = \"LeftToRight\";\n /**\n * Specifies the type of `RightToLeft`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"RightToLeft\"] = 2] = \"RightToLeft\";\n})(PdfTextDirection || (PdfTextDirection = {}));\n","import { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfString } from './../primitives/pdf-string';\n/**\n * `PdfReference` class is used to perform reference related primitive operations.\n * @private\n */\nvar PdfReference = /** @class */ (function () {\n function PdfReference(objNumber, genNumber) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index3 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position3 = -1;\n /**\n * Holds the `object number`.\n * @default 0\n * @private\n */\n this.objNumber = 0;\n /**\n * Holds the `generation number` of the object.\n * @default 0\n * @private\n */\n this.genNumber = 0;\n if (typeof objNumber === 'number' && typeof genNumber === 'number') {\n this.objNumber = objNumber;\n this.genNumber = genNumber;\n // } else if (typeof objNum === 'string' && typeof genNum === 'string') {\n }\n else {\n this.objNumber = Number(objNumber);\n this.genNumber = Number(genNumber);\n }\n }\n Object.defineProperty(PdfReference.prototype, \"status\", {\n //Property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status3;\n },\n set: function (value) {\n this.status3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving3;\n },\n set: function (value) {\n this.isSaving3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index3;\n },\n set: function (value) {\n this.index3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position3;\n },\n set: function (value) {\n this.position3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var returnObject3 = null;\n return returnObject3;\n },\n enumerable: true,\n configurable: true\n });\n //IPdfPrimitives methods\n /**\n * `Saves` the object.\n * @private\n */\n PdfReference.prototype.save = function (writer) {\n writer.write(this.toString());\n };\n /**\n * Returns a `string` representing the object.\n * @private\n */\n PdfReference.prototype.toString = function () {\n return this.objNumber.toString() + ' ' + this.genNumber.toString() + ' R';\n };\n /**\n * Creates a `deep copy` of the IPdfPrimitive object.\n * @private\n */\n PdfReference.prototype.clone = function (crossTable) {\n return null;\n };\n return PdfReference;\n}());\nexport { PdfReference };\n/**\n * `PdfReferenceHolder` class is used to perform reference holder related primitive operations.\n * @private\n */\nvar PdfReferenceHolder = /** @class */ (function () {\n function PdfReferenceHolder(obj1, obj2) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index4 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position4 = -1;\n /**\n * The `index` of the object within the object collection.\n * @default -1\n * @private\n */\n this.objectIndex = -1;\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // if (typeof obj2 === 'undefined') {\n if (obj1 instanceof PdfArray\n || obj1 instanceof PdfDictionary\n || obj1 instanceof PdfName\n || obj1 instanceof PdfNumber\n || obj1 instanceof PdfStream\n || obj1 instanceof PdfReference\n || obj1 instanceof PdfString) {\n // if (obj1 === null) {\n // throw new Error('ArgumentNullException : obj');\n // }\n this.primitiveObject = obj1;\n // } else if (obj1 instanceof PdfPageBase\n // || obj1 instanceof PdfPage\n // || obj1 instanceof PdfSection\n // || obj1 instanceof PdfSectionCollection) {\n }\n else {\n var tempObj = obj1;\n this.constructor(tempObj.element);\n }\n // }\n // else {\n // if (obj2 === null) {\n // throw new Error('ArgumentNullException : crossTable');\n // }\n // if (obj1 === null) {\n // throw new Error('ArgumentNullException : reference');\n // }\n // this.crossTable = obj2;\n // let tempObj1 : PdfReference = obj1;\n // this.reference = tempObj1;\n // }\n }\n Object.defineProperty(PdfReferenceHolder.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status4;\n },\n set: function (value) {\n this.status4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving4;\n },\n set: function (value) {\n this.isSaving4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index4;\n },\n set: function (value) {\n this.index4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position4;\n },\n set: function (value) {\n this.position4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"object\", {\n /**\n * Gets the `object` the reference is of.\n * @private\n */\n get: function () {\n // if ((this.reference != null) || (this.object == null)) {\n // this.object = this.GetterObject();\n // }\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"index\", {\n /**\n * Gets the `index` of the object.\n * @private\n */\n get: function () {\n // let items : PdfMainObjectCollection = this.crossTable.PdfObjects;\n // this.objectIndex = items.GetObjectIndex(this.reference);\n // if (this.objectIndex < 0) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.reference);\n // this.objectIndex = items.Count - 1;\n // }\n return this.objectIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"element\", {\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Writes` a reference into a PDF document.\n * @private\n */\n PdfReferenceHolder.prototype.save = function (writer) {\n // if (writer == null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n var position = writer.position;\n var cTable = writer.document.crossTable;\n // if (cTable.Document instanceof PdfDocument) {\n this.object.isSaving = true;\n // }\n var reference = null;\n // if (writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true) {\n // if (this.reference === null) {\n // reference = cTable.GetReference(this.Object);\n // } else {\n // reference = this.reference;\n // }\n // } else {\n // reference = cTable.GetReference(this.Object);\n // }\n // if (!(writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true)) {\n reference = cTable.getReference(this.object);\n // }\n // if (writer.Position !== position) {\n // writer.Position = position;\n // }\n reference.save(writer);\n };\n /**\n * Creates a `copy of PdfReferenceHolder`.\n * @private\n */\n PdfReferenceHolder.prototype.clone = function (crossTable) {\n var refHolder = null;\n var temp = null;\n var refNum = '';\n var reference = null;\n // Restricts addition of same object multiple time.\n /* if (this.Reference != null && this.crossTable != null && this.crossTable.PageCorrespondance.containsKey(this.Reference)) {\n refHolder = new PdfReferenceHolder(this.crossTable.PageCorrespondance.getValue(this.Reference) as PdfReference, crossTable);\n return refHolder;\n }\n if (Object instanceof PdfNumber) {\n return new PdfNumber((Object as PdfNumber).IntValue);\n }\n */\n // if (Object instanceof PdfDictionary) {\n // // Meaning the referenced page is not available for import.\n // let type : PdfName = new PdfName(this.dictionaryProperties.type);\n // let dict : PdfDictionary = Object as PdfDictionary;\n // if (dict.ContainsKey(type)) {\n // let pageName : PdfName = dict.Items.getValue(type.Value) as PdfName;\n // if (pageName !== null) {\n // if (pageName.Value === 'Page') {\n // return new PdfNull();\n // }\n // }\n // }\n // }\n /* if (Object instanceof PdfName) {\n return new PdfName ((Object as PdfName ).Value);\n }\n */\n // Resolves circular references.\n // if (crossTable.PrevReference !== null && (crossTable.PrevReference.indexOf(this.Reference) !== -1)) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.Reference).ClonedObject;\n // if (obj !== null) {\n // reference = crossTable.GetReference(obj);\n // return new PdfReferenceHolder(reference, crossTable);\n // } else {\n // return new PdfNull();\n // }\n // }\n /*if (this.Reference !== null) {\n crossTable.PrevReference.push(this.Reference);\n }\n reference = crossTable.GetReference(temp);\n refHolder = new PdfReferenceHolder(reference, crossTable);\n return refHolder;\n */\n return null;\n };\n return PdfReferenceHolder;\n}());\nexport { PdfReferenceHolder };\n","import { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfName } from './../primitives/pdf-name';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfAction` class represents base class for all action types.\n * @private\n */\nvar PdfAction = /** @class */ (function () {\n // Constructors\n /**\n * Initialize instance for `Action` class.\n * @private\n */\n function PdfAction() {\n /**\n * Specifies the Next `action` to perform.\n * @private\n */\n this.action = null;\n /**\n * Specifies the Internal variable to store `dictionary properties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // super(); -> Object()\n this.initialize();\n }\n Object.defineProperty(PdfAction.prototype, \"next\", {\n // Properties\n /**\n * Gets and Sets the `Next` action to perform.\n * @private\n */\n get: function () {\n return this.action;\n },\n set: function (value) {\n // if (this.action !== value) {\n this.action = value;\n this.dictionary.items.setValue(this.dictionaryProperties.next, new PdfReferenceHolder(this.action));\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAction.prototype, \"dictionary\", {\n /**\n * Gets and Sets the instance of PdfDictionary class for `Dictionary`.\n * @private\n */\n get: function () {\n if (typeof this.pdfDictionary === 'undefined') {\n this.pdfDictionary = new PdfDictionary();\n }\n return this.pdfDictionary;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the action type.\n * @private\n */\n PdfAction.prototype.initialize = function () {\n this.dictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.action));\n };\n Object.defineProperty(PdfAction.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the `Element` as IPdfPrimitive class.\n * @private\n */\n get: function () {\n return this.dictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAction;\n}());\nexport { PdfAction };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfAction } from './action';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * `PdfUriAction` class for initialize the uri related internals.\n * @private\n */\nvar PdfUriAction = /** @class */ (function (_super) {\n __extends(PdfUriAction, _super);\n function PdfUriAction(uri) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Specifies the `uri` string.\n * @default ''.\n * @private\n */\n _this.uniformResourceIdentifier = '';\n return _this;\n }\n Object.defineProperty(PdfUriAction.prototype, \"uri\", {\n // Properties\n /**\n * Gets and Sets the value of `Uri`.\n * @private\n */\n get: function () {\n return this.uniformResourceIdentifier;\n },\n set: function (value) {\n this.uniformResourceIdentifier = value;\n this.dictionary.items.setValue(this.dictionaryProperties.uri, new PdfString(this.uniformResourceIdentifier));\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the internals.\n * @private\n */\n PdfUriAction.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.s, new PdfName(this.dictionaryProperties.uri));\n };\n return PdfUriAction;\n}(PdfAction));\nexport { PdfUriAction };\n","import { PdfColorSpace } from './enum';\nimport { Operators } from './../input-output/pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfArray } from './../primitives/pdf-array';\n/**\n * Implements structures and routines working with `color`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * //\n * // set color\n * let brushColor : PdfColor = new PdfColor(0, 0, 0);\n * //\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(brushColor);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @default black color\n */\nvar PdfColor = /** @class */ (function () {\n function PdfColor(color1, color2, color3, color4) {\n if (color1 instanceof PdfColor) {\n this.redColor = color1.r;\n this.greenColor = color1.g;\n this.blueColor = color1.b;\n this.grayColor = color1.gray;\n this.alpha = color1.alpha;\n this.filled = (this.alpha !== 0);\n }\n else if (typeof color1 === 'number' && typeof color2 === 'number' && typeof color3 === 'number' &&\n typeof color4 === 'undefined') {\n this.constructor(PdfColor.maxColourChannelValue, color1, color2, color3); //doubt-byte/float\n }\n else if (typeof color1 === 'number' && typeof color2 === 'number' && typeof color3 === 'number' && typeof color4 === 'number') {\n this.redColor = color2;\n this.cyanColor = 0;\n this.greenColor = color3;\n this.magentaColor = 0;\n this.blueColor = color4;\n this.yellowColor = 0;\n this.blackColor = 0;\n this.grayColor = 0;\n this.alpha = color1;\n this.filled = true;\n this.assignCMYK(color2, color3, color4);\n }\n }\n /**\n * `Calculate and assign` cyan, megenta, yellow colors from rgb values..\n * @private\n */\n PdfColor.prototype.assignCMYK = function (r, g, b) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n var black = PdfNumber.min(1 - red, 1 - green, 1 - blue);\n var cyan = (black === 1.0) ? 0 : (1 - red - black) / (1 - black);\n var magenta = (black === 1.0) ? 0 : (1 - green - black) / (1 - black);\n var yellow = (black === 1.0) ? 0 : (1 - blue - black) / (1 - black);\n this.blackColor = black;\n this.cyanColor = cyan;\n this.magentaColor = magenta;\n this.yellowColor = yellow;\n };\n Object.defineProperty(PdfColor.prototype, \"r\", {\n //Properties\n // public static get Empty():PdfColor\n // {\n // return this.s_emptyColor\n // }\n /**\n * Gets or sets `Red` channel value.\n * @private\n */\n get: function () {\n return this.redColor;\n },\n set: function (value) {\n this.redColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"red\", {\n /**\n * Gets the `Red` color\n * @private\n */\n get: function () {\n return (this.r / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"b\", {\n /**\n * Gets or sets `Blue` channel value.\n * @private\n */\n get: function () {\n return this.blueColor;\n },\n set: function (value) {\n this.blueColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"blue\", {\n /**\n * Gets the `blue` color.\n * @private\n */\n get: function () {\n return (this.b / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"g\", {\n /**\n * Gets or sets `Green` channel value.\n * @private\n */\n get: function () {\n return this.greenColor;\n },\n set: function (value) {\n this.greenColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"green\", {\n /**\n * Gets the `Green` color.\n * @private\n */\n get: function () {\n return (this.g / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"gray\", {\n /**\n * Gets or sets `Gray` channel value.\n * @private\n */\n get: function () {\n return ((((this.redColor + this.greenColor) + this.blueColor)) / (PdfColor.maxColourChannelValue * 3));\n },\n set: function (value) {\n if (value < 0) {\n this.grayColor = 0;\n }\n else if (value > 1) {\n this.grayColor = 1;\n }\n else {\n this.grayColor = value;\n }\n this.r = (this.grayColor * PdfColor.maxColourChannelValue);\n this.g = (this.grayColor * PdfColor.maxColourChannelValue);\n this.b = (this.grayColor * PdfColor.maxColourChannelValue);\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"isEmpty\", {\n /**\n * Gets whether the PDFColor `is Empty` or not.\n * @private\n */\n get: function () {\n return !this.filled;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"a\", {\n /**\n * Gets or sets `Alpha` channel value.\n * @private\n */\n get: function () {\n return this.alpha;\n },\n set: function (value) {\n if (value < 0) {\n this.alpha = 0;\n }\n else {\n // if (this.alpha !== value) {\n this.alpha = value;\n // }\n }\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Converts `PDFColor to PDF string` representation.\n * @private\n */\n PdfColor.prototype.toString = function (colorSpace, stroke) {\n if (this.isEmpty) {\n return '';\n }\n return this.rgbToString(stroke);\n };\n /**\n * Sets `RGB` color.\n * @private\n */\n PdfColor.prototype.rgbToString = function (ifStroking) {\n var r = this.r;\n var g = this.g;\n var b = this.b;\n var key = (r << 16) + (g << 8) + b;\n if (ifStroking) {\n key += 1 << 24;\n }\n var colour = '';\n var obj = null;\n if (PdfColor.rgbStrings.containsKey(key)) {\n obj = PdfColor.rgbStrings.getValue(key);\n }\n if (obj == null) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n if (ifStroking) {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' RG';\n }\n else {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' rg';\n }\n PdfColor.rgbStrings.setValue(key, colour);\n }\n else {\n colour = obj.toString();\n }\n return colour + Operators.newLine;\n };\n /**\n * Converts `colour to a PDF array`.\n * @private\n */\n PdfColor.prototype.toArray = function (colorSpace) {\n var array = new PdfArray();\n switch (colorSpace) {\n case PdfColorSpace.Rgb:\n array.add(new PdfNumber(this.red));\n array.add(new PdfNumber(this.green));\n array.add(new PdfNumber(this.blue));\n break;\n default:\n throw new Error('NotSupportedException : Unsupported colour space.');\n }\n return array;\n };\n //Fields\n /**\n * Holds `RGB colors` converted into strings.\n * @private\n */\n PdfColor.rgbStrings = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `stroking`.\n * @private\n */\n PdfColor.grayStringsSroke = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `filling`.\n * @private\n */\n PdfColor.grayStringsFill = new Dictionary();\n /**\n * `Max value` of color channel.\n * @private\n */\n PdfColor.maxColourChannelValue = 255.0;\n return PdfColor;\n}());\nexport { PdfColor };\n","/**\n * public Enum for `PdfFontStyle`.\n * @private\n */\nexport var PdfFontStyle;\n(function (PdfFontStyle) {\n /**\n * Specifies the type of `Regular`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Regular\"] = 0] = \"Regular\";\n /**\n * Specifies the type of `Bold`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Bold\"] = 1] = \"Bold\";\n /**\n * Specifies the type of `Italic`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Italic\"] = 2] = \"Italic\";\n /**\n * Specifies the type of `Underline`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Underline\"] = 4] = \"Underline\";\n /**\n * Specifies the type of `Strikeout`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Strikeout\"] = 8] = \"Strikeout\";\n})(PdfFontStyle || (PdfFontStyle = {}));\n/**\n * Specifies the font family from the standard font.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * ```\n */\nexport var PdfFontFamily;\n(function (PdfFontFamily) {\n /**\n * Specifies the `Helvetica` font.\n */\n PdfFontFamily[PdfFontFamily[\"Helvetica\"] = 0] = \"Helvetica\";\n /**\n * Specifies the `Courier` font.\n */\n PdfFontFamily[PdfFontFamily[\"Courier\"] = 1] = \"Courier\";\n /**\n * Specifies the `TimesRoman` font.\n */\n PdfFontFamily[PdfFontFamily[\"TimesRoman\"] = 2] = \"TimesRoman\";\n /**\n * Specifies the `Symbol` font.\n */\n PdfFontFamily[PdfFontFamily[\"Symbol\"] = 3] = \"Symbol\";\n /**\n * Specifies the `ZapfDingbats` font.\n */\n PdfFontFamily[PdfFontFamily[\"ZapfDingbats\"] = 4] = \"ZapfDingbats\";\n})(PdfFontFamily || (PdfFontFamily = {}));\n/**\n * public Enum for `PdfFontType`.\n * @private\n */\nexport var PdfFontType;\n(function (PdfFontType) {\n /**\n * Specifies the type of `Standard`.\n * @private\n */\n PdfFontType[PdfFontType[\"Standard\"] = 0] = \"Standard\";\n /**\n * Specifies the type of `TrueType`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueType\"] = 1] = \"TrueType\";\n /**\n * Specifies the type of `TrueTypeEmbedded`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueTypeEmbedded\"] = 2] = \"TrueTypeEmbedded\";\n})(PdfFontType || (PdfFontType = {}));\n/**\n * public Enum for `PdfWordWrapType`.\n * @private\n */\nexport var PdfWordWrapType;\n(function (PdfWordWrapType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Word`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Word\"] = 1] = \"Word\";\n /**\n * Specifies the type of `WordOnly`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"WordOnly\"] = 2] = \"WordOnly\";\n /**\n * Specifies the type of `Character`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Character\"] = 3] = \"Character\";\n})(PdfWordWrapType || (PdfWordWrapType = {}));\n/**\n * public Enum for `PdfSubSuperScript`.\n * @private\n */\nexport var PdfSubSuperScript;\n(function (PdfSubSuperScript) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `SuperScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SuperScript\"] = 1] = \"SuperScript\";\n /**\n * Specifies the type of `SubScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SubScript\"] = 2] = \"SubScript\";\n})(PdfSubSuperScript || (PdfSubSuperScript = {}));\n/**\n * public Enum for `FontEncoding`.\n * @private\n */\nexport var FontEncoding;\n(function (FontEncoding) {\n /**\n * Specifies the type of `Unknown`.\n * @private\n */\n FontEncoding[FontEncoding[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `StandardEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"StandardEncoding\"] = 1] = \"StandardEncoding\";\n /**\n * Specifies the type of `MacRomanEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacRomanEncoding\"] = 2] = \"MacRomanEncoding\";\n /**\n * Specifies the type of `MacExpertEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacExpertEncoding\"] = 3] = \"MacExpertEncoding\";\n /**\n * Specifies the type of `WinAnsiEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"WinAnsiEncoding\"] = 4] = \"WinAnsiEncoding\";\n /**\n * Specifies the type of `PdfDocEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"PdfDocEncoding\"] = 5] = \"PdfDocEncoding\";\n /**\n * Specifies the type of `IdentityH`.\n * @private\n */\n FontEncoding[FontEncoding[\"IdentityH\"] = 6] = \"IdentityH\";\n})(FontEncoding || (FontEncoding = {}));\n/**\n * public Enum for `TtfCmapFormat`.\n * @private\n */\nexport var TtfCmapFormat;\n(function (TtfCmapFormat) {\n /**\n * This is the Apple standard character to glyph index mapping table.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Apple\"] = 0] = \"Apple\";\n /**\n * This is the Microsoft standard character to glyph index mapping table.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Microsoft\"] = 4] = \"Microsoft\";\n /**\n * Format 6: Trimmed table mapping.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Trimmed\"] = 6] = \"Trimmed\";\n})(TtfCmapFormat || (TtfCmapFormat = {}));\n/**\n * Enumerator that implements CMAP encodings.\n * @private\n */\nexport var TtfCmapEncoding;\n(function (TtfCmapEncoding) {\n /**\n * Unknown encoding.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * When building a symbol font for Windows.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Symbol\"] = 1] = \"Symbol\";\n /**\n * When building a Unicode font for Windows.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Unicode\"] = 2] = \"Unicode\";\n /**\n * For font that will be used on a Macintosh.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Macintosh\"] = 3] = \"Macintosh\";\n})(TtfCmapEncoding || (TtfCmapEncoding = {}));\n/**\n * Ttf platform ID.\n * @private\n */\nexport var TtfPlatformID;\n(function (TtfPlatformID) {\n /**\n * Apple platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"AppleUnicode\"] = 0] = \"AppleUnicode\";\n /**\n * Macintosh platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Macintosh\"] = 1] = \"Macintosh\";\n /**\n * Iso platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Iso\"] = 2] = \"Iso\";\n /**\n * Microsoft platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Microsoft\"] = 3] = \"Microsoft\";\n})(TtfPlatformID || (TtfPlatformID = {}));\n/**\n * Microsoft encoding ID.\n * @private\n */\nexport var TtfMicrosoftEncodingID;\n(function (TtfMicrosoftEncodingID) {\n /**\n * Undefined encoding.\n * @private\n */\n TtfMicrosoftEncodingID[TtfMicrosoftEncodingID[\"Undefined\"] = 0] = \"Undefined\";\n /**\n * Unicode encoding.\n * @private\n */\n TtfMicrosoftEncodingID[TtfMicrosoftEncodingID[\"Unicode\"] = 1] = \"Unicode\";\n})(TtfMicrosoftEncodingID || (TtfMicrosoftEncodingID = {}));\n/**\n * Macintosh encoding ID.\n * @private\n */\nexport var TtfMacintoshEncodingID;\n(function (TtfMacintoshEncodingID) {\n /**\n * Roman encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Roman\"] = 0] = \"Roman\";\n /**\n * Japanese encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Japanese\"] = 1] = \"Japanese\";\n /**\n * Chinese encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Chinese\"] = 2] = \"Chinese\";\n})(TtfMacintoshEncodingID || (TtfMacintoshEncodingID = {}));\n/**\n * Enumerator that implements font descriptor flags.\n * @private\n */\nexport var FontDescriptorFlags;\n(function (FontDescriptorFlags) {\n /**\n * All glyphs have the same width (as opposed to proportional or variable-pitch fonts, which have different widths).\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"FixedPitch\"] = 1] = \"FixedPitch\";\n /**\n * Glyphs have serifs, which are short strokes drawn at an angle on the top and\n * bottom of glyph stems (as opposed to sans serif fonts, which do not).\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Serif\"] = 2] = \"Serif\";\n /**\n * Font contains glyphs outside the Adobe standard Latin character set. The\n * flag and the nonsymbolic flag cannot both be set or both be clear.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Symbolic\"] = 4] = \"Symbolic\";\n /**\n * Glyphs resemble cursive handwriting.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Script\"] = 8] = \"Script\";\n /**\n * Font uses the Adobe standard Latin character set or a subset of it.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Nonsymbolic\"] = 32] = \"Nonsymbolic\";\n /**\n * Glyphs have dominant vertical strokes that are slanted.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Italic\"] = 64] = \"Italic\";\n /**\n * Bold font.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"ForceBold\"] = 262144] = \"ForceBold\";\n})(FontDescriptorFlags || (FontDescriptorFlags = {}));\n/**\n * true type font composite glyph flags.\n * @private\n */\nexport var TtfCompositeGlyphFlags;\n(function (TtfCompositeGlyphFlags) {\n /**\n * The Arg1And2AreWords.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"Arg1And2AreWords\"] = 1] = \"Arg1And2AreWords\";\n /**\n * The ArgsAreXyValues.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"ArgsAreXyValues\"] = 2] = \"ArgsAreXyValues\";\n /**\n * The RoundXyToGrid.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"RoundXyToGrid\"] = 4] = \"RoundXyToGrid\";\n /**\n * The WeHaveScale.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveScale\"] = 8] = \"WeHaveScale\";\n /**\n * The Reserved.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"Reserved\"] = 16] = \"Reserved\";\n /**\n * The MoreComponents.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"MoreComponents\"] = 32] = \"MoreComponents\";\n /**\n * The WeHaveAnXyScale.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveAnXyScale\"] = 64] = \"WeHaveAnXyScale\";\n /**\n * The WeHaveTwoByTwo\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveTwoByTwo\"] = 128] = \"WeHaveTwoByTwo\";\n /**\n * The WeHaveInstructions.\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveInstructions\"] = 256] = \"WeHaveInstructions\";\n /**\n * The UseMyMetrics.\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"UseMyMetrics\"] = 512] = \"UseMyMetrics\";\n})(TtfCompositeGlyphFlags || (TtfCompositeGlyphFlags = {}));\n","/**\n * Coordinates of Position for `PointF`.\n * @private\n */\nvar PointF = /** @class */ (function () {\n function PointF(x, y) {\n if (typeof x === 'undefined') {\n this.x = 0;\n this.y = 0;\n }\n else {\n if (x !== null) {\n this.x = x;\n }\n else {\n this.x = 0;\n }\n if (y !== null) {\n this.y = y;\n }\n else {\n this.y = 0;\n }\n }\n }\n return PointF;\n}());\nexport { PointF };\n/**\n * Width and Height as `Size`.\n * @private\n */\nvar SizeF = /** @class */ (function () {\n function SizeF(width, height) {\n if (typeof height === 'undefined') {\n this.height = 0;\n this.width = 0;\n }\n else {\n if (height !== null) {\n this.height = height;\n }\n else {\n this.height = 0;\n }\n if (width !== null) {\n this.width = width;\n }\n else {\n this.width = 0;\n }\n }\n }\n return SizeF;\n}());\nexport { SizeF };\n/**\n * `RectangleF` with Position and size.\n * @private\n */\nvar RectangleF = /** @class */ (function () {\n function RectangleF(arg1, arg2, arg3, arg4) {\n if (typeof arg1 === typeof arg1 && typeof arg1 === 'undefined') {\n this.x = 0;\n this.y = 0;\n this.height = 0;\n this.width = 0;\n }\n else {\n if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n var pointf = arg1;\n this.x = pointf.x;\n this.y = pointf.y;\n var sizef = arg2;\n this.height = sizef.height;\n this.width = sizef.width;\n }\n else {\n var x = arg1;\n var y = arg2;\n var width = arg3;\n var height = arg4;\n this.x = x;\n this.y = y;\n this.height = height;\n this.width = width;\n }\n }\n }\n return RectangleF;\n}());\nexport { RectangleF };\n/**\n * `Rectangle` with left, right, top and bottom.\n * @private\n */\nvar Rectangle = /** @class */ (function () {\n /**\n * Instance of `RectangleF` class with X, Y, Width and Height.\n * @private\n */\n function Rectangle(left, top, right, bottom) {\n this.left = left;\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n }\n Object.defineProperty(Rectangle.prototype, \"width\", {\n /**\n * Gets a value of width\n */\n get: function () {\n return this.right - this.left;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"height\", {\n /**\n * Gets a value of height\n */\n get: function () {\n return this.bottom - this.top;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"topLeft\", {\n /**\n * Gets a value of Top and Left\n */\n get: function () {\n return new PointF(this.left, this.top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"size\", {\n /**\n * Gets a value of size\n */\n get: function () {\n return new SizeF(this.width, this.height);\n },\n enumerable: true,\n configurable: true\n });\n Rectangle.prototype.toString = function () {\n return this.topLeft + 'x' + this.size;\n };\n return Rectangle;\n}());\nexport { Rectangle };\n","/**\n * `PdfBrush` class provides objects used to fill the interiors of graphical shapes such as rectangles,\n * ellipses, pies, polygons, and paths.\n * @private\n */\nvar PdfBrush = /** @class */ (function () {\n /**\n * Creates instanceof `PdfBrush` class.\n * @hidden\n * @private\n */\n function PdfBrush() {\n //\n }\n return PdfBrush;\n}());\nexport { PdfBrush };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfColor } from './../pdf-color';\nimport { PdfColorSpace } from './../enum';\nimport { PdfBrush } from './pdf-brush';\n/**\n * Represents a brush that fills any object with a solid color.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfSolidBrush = /** @class */ (function (_super) {\n __extends(PdfSolidBrush, _super);\n //Constructors\n /**\n * Initializes a new instance of the `PdfSolidBrush` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param color color of the brush\n */\n function PdfSolidBrush(color) {\n var _this = _super.call(this) || this;\n _this.pdfColor = color;\n return _this;\n }\n Object.defineProperty(PdfSolidBrush.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color` of the brush.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Monitors` the changes of the brush and modify PDF state respectively.\n * @private\n */\n PdfSolidBrush.prototype.monitorChanges = function (brush, streamWriter, getResources, saveChanges, currentColorSpace) {\n if (streamWriter == null) {\n throw new Error('ArgumentNullException:streamWriter');\n }\n var diff = false;\n if (brush == null) {\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n else {\n var sBrush = brush;\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n };\n /**\n * `Resets` the changes, which were made by the brush.\n * @private\n */\n PdfSolidBrush.prototype.resetChanges = function (streamWriter) {\n streamWriter.setColorAndSpace(new PdfColor(0, 0, 0), PdfColorSpace.Rgb, false);\n };\n return PdfSolidBrush;\n}(PdfBrush));\nexport { PdfSolidBrush };\n","/**\n * PdfStringFormat.ts class for EJ2-PDF\n */\nimport { PdfVerticalAlignment } from './../../graphics/enum';\nimport { PdfSubSuperScript, PdfWordWrapType } from './../../graphics/fonts/enum';\n/**\n * `PdfStringFormat` class represents the text layout information on PDF.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfStringFormat = /** @class */ (function () {\n function PdfStringFormat(arg1, arg2) {\n /**\n * The `scaling factor` of the text being drawn.\n * @private\n */\n this.scalingFactor = 100.0;\n /**\n * Indicates text `wrapping` type.\n * @private\n */\n this.wordWrapType = PdfWordWrapType.Word;\n if (typeof arg1 === 'undefined') {\n this.internalLineLimit = true;\n this.wordWrapType = PdfWordWrapType.Word;\n }\n else if (typeof arg1 === 'string') {\n this.constructor();\n }\n else {\n if (typeof arg2 === 'undefined') {\n this.constructor();\n this.textAlignment = arg1;\n }\n else {\n this.constructor(arg1);\n this.verticalAlignment = arg2;\n }\n }\n }\n Object.defineProperty(PdfStringFormat.prototype, \"alignment\", {\n //Properties\n /**\n * Gets or sets the `horizontal` text alignment\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.textAlignment;\n },\n set: function (value) {\n this.textAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"textDirection\", {\n get: function () {\n return this.direction;\n },\n set: function (value) {\n this.direction = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineAlignment\", {\n /**\n * Gets or sets the `vertical` text alignment.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.verticalAlignment === 'undefined' || this.verticalAlignment == null) {\n return PdfVerticalAlignment.Top;\n }\n else {\n return this.verticalAlignment;\n }\n },\n set: function (value) {\n this.verticalAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"rightToLeft\", {\n /**\n * Gets or sets the value that indicates text `direction` mode.\n * @private\n */\n get: function () {\n if (typeof this.isRightToLeft === 'undefined' || this.isRightToLeft == null) {\n return false;\n }\n else {\n return this.isRightToLeft;\n }\n },\n set: function (value) {\n this.isRightToLeft = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"characterSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the characters in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set character spacing\n * stringFormat.characterSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalCharacterSpacing === 'undefined' || this.internalCharacterSpacing == null) {\n return 0;\n }\n else {\n return this.internalCharacterSpacing;\n }\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the words in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set word spacing\n * stringFormat.wordSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalWordSpacing === 'undefined' || this.internalWordSpacing == null) {\n return 0;\n }\n else {\n return this.internalWordSpacing;\n }\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or sets value that indicates the `vertical distance` between the baselines of adjacent lines of text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set string\n * let text : string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor\n * incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitati';\n * // set rectangle bounds\n * let rectangle : RectangleF = new RectangleF({x : 0, y : 0}, {width : 300, height : 100})\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set line spacing\n * stringFormat.lineSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString(text, font, blackBrush, rectangle, stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.leading === 'undefined' || this.leading == null) {\n return 0;\n }\n else {\n return this.leading;\n }\n },\n set: function (value) {\n this.leading = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"clipPath\", {\n /**\n * Gets or sets a value indicating whether the text is `clipped` or not.\n * @private\n */\n get: function () {\n if (typeof this.clip === 'undefined' || this.clip == null) {\n return false;\n }\n else {\n return this.clip;\n }\n },\n set: function (value) {\n this.clip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"subSuperScript\", {\n /**\n * Gets or sets value indicating whether the text is in `subscript or superscript` mode.\n * @private\n */\n get: function () {\n if (typeof this.pdfSubSuperScript === 'undefined' || this.pdfSubSuperScript == null) {\n return PdfSubSuperScript.None;\n }\n else {\n return this.pdfSubSuperScript;\n }\n },\n set: function (value) {\n this.pdfSubSuperScript = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"paragraphIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the paragraph.\n * @private\n */\n get: function () {\n if (typeof this.internalParagraphIndent === 'undefined' || this.internalParagraphIndent == null) {\n return 0;\n }\n else {\n return this.internalParagraphIndent;\n }\n },\n set: function (value) {\n this.internalParagraphIndent = value;\n this.firstLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineLimit\", {\n /**\n * Gets or sets a value indicating whether [`line limit`].\n * @private\n */\n get: function () {\n return this.internalLineLimit;\n },\n set: function (value) {\n this.internalLineLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"measureTrailingSpaces\", {\n /**\n * Gets or sets a value indicating whether [`measure trailing spaces`].\n * @private\n */\n get: function () {\n if (typeof this.trailingSpaces === 'undefined' || this.trailingSpaces == null) {\n return false;\n }\n else {\n return this.trailingSpaces;\n }\n },\n set: function (value) {\n this.trailingSpaces = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"noClip\", {\n /**\n * Gets or sets a value indicating whether [`no clip`].\n * @private\n */\n get: function () {\n if (typeof this.isNoClip === 'undefined' || this.isNoClip == null) {\n return false;\n }\n else {\n return this.isNoClip;\n }\n },\n set: function (value) {\n this.isNoClip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordWrap\", {\n /**\n * Gets or sets value indicating type of the text `wrapping`.\n * @private\n */\n get: function () {\n // if (typeof this.wrapType === 'undefined' || this.wrapType == null) {\n // return PdfWordWrapType.Word;\n // } else {\n return this.wordWrapType;\n // }\n },\n set: function (value) {\n this.wordWrapType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"horizontalScalingFactor\", {\n /**\n * Gets or sets the `scaling factor`.\n * @private\n */\n get: function () {\n // if (typeof this.scalingFactor === 'undefined' || this.scalingFactor == null) {\n // return 100;\n // } else {\n return this.scalingFactor;\n // }\n },\n set: function (value) {\n if (value <= 0) {\n throw new Error('ArgumentOutOfRangeException:The scaling factor cant be less of equal to zero, ScalingFactor');\n }\n this.scalingFactor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the text.\n * @private\n */\n get: function () {\n if (typeof this.initialLineIndent === 'undefined' || this.initialLineIndent == null) {\n return 0;\n }\n else {\n return this.initialLineIndent;\n }\n },\n set: function (value) {\n this.initialLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clones` the object.\n * @private\n */\n //IClonable implementation\n PdfStringFormat.prototype.clone = function () {\n var format = this;\n return format;\n };\n return PdfStringFormat;\n}());\nexport { PdfStringFormat };\n","import { SizeF, RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfWordWrapType } from './enum';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Class `lay outing the text`.\n */\nvar PdfStringLayouter = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringLayouter` class.\n * @private\n */\n function PdfStringLayouter() {\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n //\n }\n PdfStringLayouter.prototype.layout = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n if (arg4 instanceof RectangleF) {\n this.initialize(arg1, arg2, arg3, arg4, arg5);\n this.isOverloadWithPosition = arg6;\n this.clientSize = arg7;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n else {\n this.initialize(arg1, arg2, arg3, arg4);\n this.isOverloadWithPosition = arg5;\n this.clientSize = arg6;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n };\n PdfStringLayouter.prototype.initialize = function (text, font, format, rectSize, pageHeight) {\n if (typeof pageHeight === 'number') {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.text = text;\n this.font = font;\n this.format = format;\n this.size = new SizeF(rectSize.width, rectSize.height);\n this.rectangle = rectSize;\n this.pageHeight = pageHeight;\n this.reader = new StringTokenizer(text);\n }\n else {\n this.initialize(text, font, format, new RectangleF(new PointF(0, 0), rectSize), 0);\n }\n };\n /**\n * `Clear` all resources.\n * @private\n */\n PdfStringLayouter.prototype.clear = function () {\n this.font = null;\n this.format = null;\n this.reader.close();\n this.reader = null;\n this.text = null;\n };\n /**\n * `Layouts` the text.\n * @private\n */\n PdfStringLayouter.prototype.doLayout = function () {\n var result = new PdfStringLayoutResult();\n var lineResult = new PdfStringLayoutResult();\n var lines = [];\n var line = this.reader.peekLine();\n var lineIndent = this.getLineIndent(true);\n while (line != null) {\n lineResult = this.layoutLine(line, lineIndent);\n if (lineResult !== null || typeof lineResult !== 'undefined') {\n var numSymbolsInserted = 0;\n /* tslint:disable */\n var returnedValue = this.copyToResult(result, lineResult, lines, /*out*/ numSymbolsInserted);\n /* tslint:enable */\n var success = returnedValue.success;\n numSymbolsInserted = returnedValue.numInserted;\n if (!success) {\n this.reader.read(numSymbolsInserted);\n break;\n }\n }\n // if (lineResult.textRemainder != null && lineResult.textRemainder.length > 0 ) {\n // break;\n // }\n this.reader.readLine();\n line = this.reader.peekLine();\n lineIndent = this.getLineIndent(false);\n }\n this.finalizeResult(result, lines);\n return result;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineIndent = function (firstLine) {\n var lineIndent = 0;\n if (this.format != null) {\n lineIndent = (firstLine) ? this.format.firstLineIndent : this.format.paragraphIndent;\n lineIndent = (this.size.width > 0) ? Math.min(this.size.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates `height` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineHeight = function () {\n var height = this.font.height;\n if (this.format != null && this.format.lineSpacing !== 0) {\n height = this.format.lineSpacing + this.font.height;\n }\n return height;\n };\n /**\n * Calculates `width` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineWidth = function (line) {\n var width = this.font.getLineWidth(line, this.format);\n return width;\n };\n // tslint:disable\n /**\n * `Layouts` line.\n * @private\n */\n PdfStringLayouter.prototype.layoutLine = function (line, lineIndent) {\n var lineResult = new PdfStringLayoutResult();\n lineResult.layoutLineHeight = this.getLineHeight();\n var lines = [];\n var maxWidth = this.size.width;\n var lineWidth = this.getLineWidth(line) + lineIndent;\n var lineType = LineType.FirstParagraphLine;\n var readWord = true;\n // line is in bounds.\n if (maxWidth <= 0 || Math.round(lineWidth) <= Math.round(maxWidth)) {\n this.addToLineResult(lineResult, lines, line, lineWidth, LineType.NewLineBreak | lineType);\n }\n else {\n var builder = '';\n var curLine = '';\n lineWidth = lineIndent;\n var curIndent = lineIndent;\n var reader = new StringTokenizer(line);\n var word = reader.peekWord();\n var isSingleWord = false;\n if (word.length !== reader.length) {\n if (word === ' ') {\n curLine = curLine + word;\n builder = builder + word;\n reader.position += 1;\n word = reader.peekWord();\n }\n }\n while (word != null) {\n curLine = curLine + word;\n var curLineWidth = this.getLineWidth(curLine.toString()) + curIndent /*)*/;\n if (curLine.toString() === ' ') {\n curLine = '';\n curLineWidth = 0;\n }\n if (curLineWidth > maxWidth) {\n if (this.getWrapType() === PdfWordWrapType.None) {\n break;\n }\n if (curLine.length === word.length) {\n // Character wrap is disabled or one symbol is greater than bounds.\n if (this.getWrapType() === PdfWordWrapType.WordOnly) {\n lineResult.textRemainder = line.substring(reader.position);\n break;\n }\n else if (curLine.length === 1) {\n builder = builder + word;\n break;\n }\n else {\n readWord = false;\n curLine = '';\n word = reader.peek().toString();\n continue;\n }\n }\n else {\n if (this.getLineWidth(word.toString()) > maxWidth) {\n this.format.wordWrap = PdfWordWrapType.Character;\n }\n else {\n if (typeof this.format !== 'undefined' && this.format !== null) {\n this.format.wordWrap = PdfWordWrapType.Word;\n }\n }\n if (this.getWrapType() !== PdfWordWrapType.Character || !readWord) {\n var ln = builder.toString();\n // if (ln.indexOf(' ') === -1) {\n // isSingleWord = true;\n // this.addToLineResult(lineResult, lines, curLine, lineWidth, LineType.LayoutBreak | lineType);\n // } else {\n // this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);\n // } \n if (ln !== ' ') {\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);\n }\n if (this.isOverloadWithPosition) {\n maxWidth = this.clientSize.width;\n }\n curLine = '';\n builder = '';\n lineWidth = 0;\n curIndent = 0;\n curLineWidth = 0;\n lineType = LineType.None;\n // if (isSingleWord) {\n // reader.readWord();\n // readWord = false;\n // }\n word = (readWord) ? word : reader.peekWord();\n //isSingleWord = false;\n readWord = true;\n }\n else {\n readWord = false;\n curLine = '';\n curLine = curLine + builder.toString();\n word = reader.peek().toString();\n }\n continue;\n }\n }\n /*tslint:disable:max-func-body-length */\n builder = builder + word;\n lineWidth = curLineWidth;\n if (readWord) {\n reader.readWord();\n word = reader.peekWord();\n //isSingleWord = false;\n }\n else {\n reader.read();\n word = reader.peek().toString();\n }\n }\n if (builder.length > 0) {\n var ln = builder.toString();\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.NewLineBreak | LineType.LastParagraphLine);\n }\n reader.close();\n }\n lineResult.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n lineResult.layoutLines.push(lines[index]);\n }\n lines = [];\n return lineResult;\n };\n /**\n * `Adds` line to line result.\n * @private\n */\n PdfStringLayouter.prototype.addToLineResult = function (lineResult, lines, line, lineWidth, breakType) {\n var info = new LineInfo();\n info.text = line;\n info.width = lineWidth;\n info.lineType = breakType;\n lines.push(info);\n var size = lineResult.actualSize;\n size.height += this.getLineHeight();\n size.width = Math.max(size.width, lineWidth);\n lineResult.size = size;\n };\n /**\n * `Copies` layout result from line result to entire result. Checks whether we can proceed lay outing or not.\n * @private\n */\n PdfStringLayouter.prototype.copyToResult = function (result, lineResult, lines, \n /*out*/ numInserted) {\n var success = true;\n var allowPartialLines = (this.format != null && !this.format.lineLimit);\n var height = result.actualSize.height;\n var maxHeight = this.size.height;\n if ((this.pageHeight > 0) && (maxHeight + this.rectangle.y > this.pageHeight)) {\n maxHeight = this.rectangle.y - this.pageHeight;\n maxHeight = Math.max(maxHeight, -maxHeight);\n }\n numInserted = 0;\n if (lineResult.lines != null) {\n for (var i = 0, len = lineResult.lines.length; i < len; i++) {\n var expHeight = height + lineResult.lineHeight;\n if (expHeight <= maxHeight || maxHeight <= 0 || allowPartialLines) {\n var info = lineResult.lines[i];\n numInserted += info.text.length;\n info = this.trimLine(info, (lines.length === 0));\n lines.push(info);\n // Update width.\n var size = result.actualSize;\n size.width = Math.max(size.width, info.width);\n result.size = size;\n // The part of the line fits only and it's allowed to use partial lines.\n // if (expHeight >= maxHeight && maxHeight > 0 && allowPartialLines)\n // {\n // let shouldClip : boolean = (this.format == null || !this.format.noClip);\n // if (shouldClip)\n // {\n // let exceededHeight : number = expHeight - maxHeight;\n // let fitHeight : number = /*Utils.Round(*/ lineResult.lineHeight - exceededHeight /*)*/;\n // height = /*Utils.Round(*/ height + fitHeight /*)*/;\n // }\n // else\n // {\n // height = expHeight;\n // }\n // success = false;\n // break;\n // } else {\n height = expHeight;\n // }\n }\n else {\n success = false;\n break;\n }\n }\n }\n if (height != result.size.height) {\n var size1 = result.actualSize;\n size1.height = height;\n result.size = size1;\n }\n return { success: success, numInserted: numInserted };\n };\n /**\n * `Finalizes` final result.\n * @private\n */\n PdfStringLayouter.prototype.finalizeResult = function (result, lines) {\n result.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n result.layoutLines.push(lines[index]);\n }\n result.layoutLineHeight = this.getLineHeight();\n if (!this.reader.end) {\n result.textRemainder = this.reader.readToEnd();\n }\n lines = [];\n };\n /**\n * `Trims` whitespaces at the line.\n * @private\n */\n PdfStringLayouter.prototype.trimLine = function (info, firstLine) {\n var line = info.text;\n var lineWidth = info.width;\n // Trim start whitespaces if the line is not a start of the paragraph only.\n var trimStartSpaces = ((info.lineType & LineType.FirstParagraphLine) === 0);\n var start = (this.format == null || !this.format.rightToLeft);\n var spaces = StringTokenizer.spaces;\n line = (start) ? line.trim() : line.trim();\n // Recalculate line width.\n if (line.length !== info.text.length) {\n lineWidth = this.getLineWidth(line);\n if ((info.lineType & LineType.FirstParagraphLine) > 0) {\n lineWidth += this.getLineIndent(firstLine);\n }\n }\n info.text = line;\n info.width = lineWidth;\n return info;\n };\n /**\n * Returns `wrap` type.\n * @private\n */\n PdfStringLayouter.prototype.getWrapType = function () {\n var wrapType = (this.format != null) ? this.format.wordWrap : PdfWordWrapType.Word;\n return wrapType;\n };\n return PdfStringLayouter;\n}());\nexport { PdfStringLayouter };\n//Internal declaration\nvar PdfStringLayoutResult = /** @class */ (function () {\n function PdfStringLayoutResult() {\n }\n Object.defineProperty(PdfStringLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets the `text` which is not lay outed.\n * @private\n */\n get: function () {\n return this.textRemainder;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"actualSize\", {\n /**\n * Gets the actual layout text `bounds`.\n * @private\n */\n get: function () {\n if (typeof this.size === 'undefined') {\n this.size = new SizeF(0, 0);\n }\n return this.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lines\", {\n /**\n * Gets layout `lines` information.\n * @private\n */\n get: function () {\n return this.layoutLines;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineHeight\", {\n /**\n * Gets the `height` of the line.\n * @private\n */\n get: function () {\n return this.layoutLineHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"empty\", {\n /**\n * Gets value that indicates whether any layout text [`empty`].\n * @private\n */\n get: function () {\n return (this.layoutLines == null || this.layoutLines.length === 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineCount\", {\n /**\n * Gets `number of` the layout lines.\n * @private\n */\n get: function () {\n var count = (!this.empty) ? this.layoutLines.length : 0;\n return count;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStringLayoutResult;\n}());\nexport { PdfStringLayoutResult };\nvar LineInfo = /** @class */ (function () {\n function LineInfo() {\n }\n Object.defineProperty(LineInfo.prototype, \"lineType\", {\n //Properties\n /**\n * Gets the `type` of the line text.\n * @private\n */\n get: function () {\n return this.type;\n },\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"text\", {\n /**\n * Gets the line `text`.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"width\", {\n /**\n * Gets `width` of the line text.\n * @private\n */\n get: function () {\n return this.lineWidth;\n },\n set: function (value) {\n this.lineWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n return LineInfo;\n}());\nexport { LineInfo };\n/**\n* Break type of the `line`.\n* @private\n*/\nexport var LineType;\n(function (LineType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n LineType[LineType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `NewLineBreak`.\n * @private\n */\n LineType[LineType[\"NewLineBreak\"] = 1] = \"NewLineBreak\";\n /**\n * Specifies the type of `LayoutBreak`.\n * @private\n */\n LineType[LineType[\"LayoutBreak\"] = 2] = \"LayoutBreak\";\n /**\n * Specifies the type of `FirstParagraphLine`.\n * @private\n */\n LineType[LineType[\"FirstParagraphLine\"] = 4] = \"FirstParagraphLine\";\n /**\n * Specifies the type of `LastParagraphLine`.\n * @private\n */\n LineType[LineType[\"LastParagraphLine\"] = 8] = \"LastParagraphLine\";\n})(LineType || (LineType = {}));\n","/**\n * StringTokenizer.ts class for EJ2-PDF\n * Utility class for working with strings.\n * @private\n */\nvar StringTokenizer = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringTokenizer` class.\n * @private\n */\n function StringTokenizer(textValue) {\n /**\n * Current `position`.\n * @private\n */\n this.currentPosition = 0;\n if (textValue == null) {\n throw new Error('ArgumentNullException:text');\n }\n this.text = textValue;\n }\n Object.defineProperty(StringTokenizer.prototype, \"length\", {\n // Properties\n /**\n * Gets text `length`.\n * @private\n */\n get: function () {\n return this.text.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StringTokenizer.prototype, \"end\", {\n get: function () {\n return (this.currentPosition === this.text.length);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StringTokenizer.prototype, \"position\", {\n /**\n * Gets or sets the position.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n StringTokenizer.getCharsCount = function (text, symbols) {\n if (typeof symbols === 'string') {\n if (text == null) {\n throw new Error('ArgumentNullException:wholeText');\n }\n var numSymbols = 0;\n var curIndex = 0;\n for (;;) {\n curIndex = text.indexOf(symbols, curIndex);\n if (curIndex === -1) {\n break;\n }\n else {\n numSymbols++;\n curIndex++;\n }\n }\n return numSymbols;\n }\n else {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (symbols == null) {\n throw new Error('ArgumentNullException:symbols');\n }\n var count = 0;\n for (var i = 0, len = text.length; i < len; i++) {\n var ch = text[i];\n if (this.contains(symbols, ch)) {\n count++;\n }\n }\n return count;\n }\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.readLine = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n': {\n var text = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n this.currentPosition++;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.peekLine = function () {\n var pos = this.currentPosition;\n var line = this.readLine();\n this.currentPosition = pos;\n return line;\n };\n /**\n * Reads a word from the text.\n * @private\n */\n StringTokenizer.prototype.readWord = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n':\n var textValue = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n if (((ch === '\\r') && (this.currentPosition < this.length)) && (this.text[this.currentPosition] === '\\n')) {\n this.currentPosition++;\n }\n return textValue;\n case ' ':\n case '\\t': {\n if (pos === this.currentPosition) {\n pos++;\n }\n var text = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Peeks a word from the text.\n * @private\n */\n StringTokenizer.prototype.peekWord = function () {\n var pos = this.currentPosition;\n var word = this.readWord();\n this.currentPosition = pos;\n return word;\n };\n StringTokenizer.prototype.read = function (count) {\n if (typeof count === 'undefined') {\n var ch = '0';\n if (!this.end) {\n ch = this.text[this.currentPosition];\n this.currentPosition++;\n }\n return ch;\n }\n else {\n var num = 0;\n var builder = '';\n while (!this.end && num < count) {\n var ch = this.read();\n builder = builder + ch;\n num++;\n }\n return builder;\n }\n };\n /**\n * Peeks char form the data.\n * @private\n */\n StringTokenizer.prototype.peek = function () {\n var ch = '0';\n if (!this.end) {\n ch = this.text[this.currentPosition];\n }\n return ch;\n };\n /**\n * Closes a reader.\n * @private\n */\n StringTokenizer.prototype.close = function () {\n this.text = null;\n };\n StringTokenizer.prototype.readToEnd = function () {\n var text;\n if (this.currentPosition === 0) {\n text = this.text;\n }\n else {\n text = this.text.substring(this.length, this.currentPosition);\n }\n this.currentPosition = this.length;\n return text;\n };\n //Implementation\n /**\n * Checks whether array contains a symbol.\n * @private\n */\n StringTokenizer.contains = function (array, symbol) {\n var contains = false;\n for (var i = 0; i < array.length; i++) {\n if (array[i] === symbol) {\n contains = true;\n break;\n }\n }\n return contains;\n };\n // Constants\n /**\n * `Whitespace` symbol.\n * @private\n */\n StringTokenizer.whiteSpace = ' ';\n /**\n * `tab` symbol.\n * @private\n */\n StringTokenizer.tab = '\\t';\n /**\n * Array of `spaces`.\n * @private\n */\n StringTokenizer.spaces = [StringTokenizer.whiteSpace, StringTokenizer.tab];\n /**\n * `Pattern` for WhiteSpace.\n * @private\n */\n StringTokenizer.whiteSpacePattern = '^[ \\t]+$';\n return StringTokenizer;\n}());\nexport { StringTokenizer };\n","/**\n * PdfFont.ts class for EJ2-PDF\n */\nimport { PdfFontStyle } from './enum';\nimport { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfStringFormat } from './pdf-string-format';\nimport { PdfStringLayouter } from './string-layouter';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Defines a particular format for text, including font face, size, and style attributes.\n * @private\n */\nvar PdfFont = /** @class */ (function () {\n function PdfFont(size, style) {\n /**\n * `Style` of the font.\n * @private\n */\n this.fontStyle = PdfFontStyle.Regular;\n if (typeof size === 'number' && typeof style === 'undefined') {\n this.fontSize = size;\n }\n else {\n this.fontSize = size;\n this.setStyle(style);\n }\n }\n Object.defineProperty(PdfFont.prototype, \"name\", {\n //Properties\n /**\n * Gets the face name of this Font.\n * @private\n */\n get: function () {\n return this.metrics.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"size\", {\n /**\n * Gets the size of this font.\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"height\", {\n /**\n * Gets the height of the font in points.\n * @private\n */\n get: function () {\n return this.metrics.getHeight(null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"style\", {\n /**\n * Gets the style information for this font.\n * @private\n */\n get: function () {\n return this.fontStyle;\n },\n set: function (value) {\n this.fontStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"bold\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `bold`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Bold) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"italic\", {\n /**\n * Gets a value indicating whether this `PdfFont` has the `italic` style applied.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Italic) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"strikeout\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `strikeout`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Strikeout) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"underline\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `underline`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Underline) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"metrics\", {\n /**\n * Gets or sets the `metrics` for this font.\n * @private\n */\n get: function () {\n return this.fontMetrics;\n },\n set: function (value) {\n this.fontMetrics = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"element\", {\n // /**\n // * Gets and Sets the font `internals`.\n // * @private\n // */\n // public get fontInternal() : IPdfPrimitive {\n // return this.pdfFontInternals;\n // }\n // public set fontInternal(value : IPdfPrimitive) {\n // this.pdfFontInternals = value;\n // }\n //IPdfWrapper Members\n /**\n * Gets the `element` representing the font.\n * @private\n */\n get: function () {\n return this.pdfFontInternals;\n },\n enumerable: true,\n configurable: true\n });\n PdfFont.prototype.measureString = function (text, arg2, arg3, arg4, arg5) {\n if (typeof text === 'string' && typeof arg2 === 'undefined') {\n return this.measureString(text, null);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'undefined' && typeof arg4 === 'undefined') {\n var temparg2 = arg2;\n var charactersFitted = 0;\n var linesFilled = 0;\n return this.measureString(text, temparg2, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'number' && typeof arg4 === 'number') {\n var temparg2 = arg2;\n return this.measureString(text, 0, temparg2, arg3, arg4);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'number' && typeof arg5 === 'number') {\n var layoutArea = new SizeF(arg2, 0);\n var temparg3 = arg3;\n return this.measureString(text, layoutArea, temparg3, arg4, arg5);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else {\n if (text == null) {\n throw Error(\"ArgumentNullException(\\\"text\\\")\");\n }\n var temparg2 = arg2;\n var temparg3 = arg3;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(text, this, temparg3, temparg2, false, new SizeF(0, 0));\n // arg4 = (result.Remainder == null) ? text.length : text.length - result.Remainder.length;\n arg4 = text.length;\n arg5 = (result.empty) ? 0 : result.lines.length;\n return result.actualSize;\n }\n };\n /* tslint:enable */\n //IPdfCache Members\n /**\n * `Checks` whether the object is similar to another object.\n * @private\n */\n PdfFont.prototype.equalsTo = function (obj) {\n var result = this.equalsToFont(obj);\n return result;\n };\n /**\n * Returns `internals` of the object.\n * @private\n */\n PdfFont.prototype.getInternals = function () {\n return this.pdfFontInternals;\n };\n /**\n * Sets `internals` to the object.\n * @private\n */\n PdfFont.prototype.setInternals = function (internals) {\n if (internals == null) {\n throw new Error('ArgumentNullException:internals');\n }\n this.pdfFontInternals = internals;\n };\n /**\n * Sets the `style` of the font.\n * @private\n */\n PdfFont.prototype.setStyle = function (style) {\n this.fontStyle = style;\n };\n /**\n * Applies `settings` to the default line width.\n * @private\n */\n PdfFont.prototype.applyFormatSettings = function (line, format, width) {\n // if (line == null) {\n // throw new Error(`ArgumentNullException:line`);\n // }\n var realWidth = width;\n if (format != null && width > 0) {\n // Space among characters is not default.\n if (format.characterSpacing !== 0) {\n realWidth += (line.length - 1) * format.characterSpacing;\n }\n // Space among words is not default.\n if (format.wordSpacing !== 0) {\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n realWidth += whitespacesCount * format.wordSpacing;\n }\n }\n return realWidth;\n };\n //Constants\n /**\n * `Multiplier` of the symbol width.\n * @default 0.001\n * @private\n */\n PdfFont.charSizeMultiplier = 0.001;\n /**\n * `Synchronization` object.\n * @private\n */\n PdfFont.syncObject = new Object();\n return PdfFont;\n}());\nexport { PdfFont };\n","/**\n * public Enum for `CompositeFontType`.\n * @private\n */\nexport var ObjectStatus;\n(function (ObjectStatus) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Registered`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"Registered\"] = 1] = \"Registered\";\n})(ObjectStatus || (ObjectStatus = {}));\n","/**\n * Used to `write a string` into output file.\n * @private\n */\nvar PdfWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfWriter` class.\n * @private\n */\n function PdfWriter(stream) {\n this.streamWriter = stream;\n }\n Object.defineProperty(PdfWriter.prototype, \"document\", {\n //properties\n /**\n * Gets and Sets the `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"position\", {\n /**\n * Gets the `position`.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"length\", {\n /**\n * Gets the `length` of the stream'.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"stream\", {\n /**\n * Gets the `stream`.\n * @private\n */\n get: function () {\n var result = this.streamWriter;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n //public Methods\n /**\n * `Writes the specified data`.\n * @private\n */\n PdfWriter.prototype.write = function (overload) {\n var data = [];\n var tempOverload = overload;\n this.streamWriter.write(tempOverload);\n };\n return PdfWriter;\n}());\nexport { PdfWriter };\n","/**\n * PdfMainObjectCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\nimport { ObjectStatus } from './enum';\n/**\n * The collection of all `objects` within a PDF document.\n * @private\n */\nvar PdfMainObjectCollection = /** @class */ (function () {\n function PdfMainObjectCollection() {\n //Fields\n /**\n * The collection of the `indirect objects`.\n * @default []\n * @private\n */\n this.objectCollections = [];\n /**\n * The collection of the `Indirect objects`.\n * @default new Dictionary()\n * @private\n */\n this.mainObjectCollection = new Dictionary();\n /**\n * The collection of `primitive objects`.\n * @private\n */\n this.primitiveObjectCollection = new Dictionary();\n }\n Object.defineProperty(PdfMainObjectCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.objectCollections.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the value of `ObjectInfo` from object collection.\n * @private\n */\n PdfMainObjectCollection.prototype.items = function (index) {\n return this.objectCollections[index];\n };\n Object.defineProperty(PdfMainObjectCollection.prototype, \"outIsNew\", {\n //Methods\n /**\n * Specifies the value of `IsNew`.\n * @private\n */\n get: function () {\n return this.isNew;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element.\n * @private\n */\n PdfMainObjectCollection.prototype.add = function (element) {\n var objInfo = new ObjectInfo(element);\n this.objectCollections.push(objInfo);\n if (!this.primitiveObjectCollection.containsKey(element)) {\n this.primitiveObjectCollection.setValue(element, this.objectCollections.length - 1);\n }\n element.position = this.index = this.objectCollections.length - 1;\n element.status = ObjectStatus.Registered;\n };\n /**\n * `Looks` through the collection for the object specified.\n * @private\n */\n PdfMainObjectCollection.prototype.lookFor = function (obj) {\n var index = -1;\n if (obj.position !== -1) {\n return obj.position;\n }\n if (this.primitiveObjectCollection.containsKey(obj) && this.count === this.primitiveObjectCollection.size()) {\n index = this.primitiveObjectCollection.getValue(obj);\n }\n else {\n for (var i = this.count - 1; i >= 0; i--) {\n var oi = this.objectCollections[i];\n if (oi.object === obj) {\n index = i;\n break;\n }\n }\n }\n return index;\n };\n /**\n * Gets the `reference of the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.getReference = function (index, isNew) {\n this.index = this.lookFor(index);\n var reference;\n this.isNew = false;\n var oi = this.objectCollections[this.index];\n reference = oi.reference;\n var obj = { reference: reference, wasNew: isNew };\n return obj;\n };\n /**\n * Tries to set the `reference to the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.trySetReference = function (obj, reference, found) {\n var result = true;\n found = true;\n this.index = this.lookFor(obj);\n var oi = this.objectCollections[this.index];\n oi.setReference(reference);\n return result;\n };\n PdfMainObjectCollection.prototype.destroy = function () {\n for (var _i = 0, _a = this.objectCollections; _i < _a.length; _i++) {\n var obj = _a[_i];\n if (obj !== undefined) {\n obj.pdfObject.position = -1;\n obj.pdfObject.isSaving = undefined;\n obj.pdfObject.objectCollectionIndex = undefined;\n obj.pdfObject.position = undefined;\n }\n }\n this.objectCollections = [];\n this.mainObjectCollection = new Dictionary();\n this.primitiveObjectCollection = new Dictionary();\n };\n return PdfMainObjectCollection;\n}());\nexport { PdfMainObjectCollection };\nvar ObjectInfo = /** @class */ (function () {\n function ObjectInfo(obj, reference) {\n this.pdfObject = obj;\n this.pdfReference = reference;\n }\n Object.defineProperty(ObjectInfo.prototype, \"object\", {\n //Properties\n /**\n * Gets the `object`.\n * @private\n */\n get: function () {\n return this.pdfObject;\n },\n set: function (value) {\n this.pdfObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ObjectInfo.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `reference`.\n * @private\n */\n ObjectInfo.prototype.setReference = function (reference) {\n this.pdfReference = reference;\n };\n return ObjectInfo;\n}());\nexport { ObjectInfo };\n","/**\n * public Enum for `ObjectType`.\n * @private\n */\nexport var ObjectType;\n(function (ObjectType) {\n /**\n * Specifies the type of `Free`.\n * @private\n */\n ObjectType[ObjectType[\"Free\"] = 0] = \"Free\";\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n ObjectType[ObjectType[\"Normal\"] = 1] = \"Normal\";\n /**\n * Specifies the type of `Packed`.\n * @private\n */\n ObjectType[ObjectType[\"Packed\"] = 2] = \"Packed\";\n})(ObjectType || (ObjectType = {}));\n","import { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { Encoding } from '@syncfusion/ej2-file-utils';\nimport { PdfDocument } from './pdf-document';\n/**\n * `PdfDocumentBase` class represent common properties of PdfDocument classes.\n * @private\n */\nvar PdfDocumentBase = /** @class */ (function () {\n function PdfDocumentBase(document) {\n /**\n * If the stream is copied, then it specifies true.\n * @private\n */\n this.isStreamCopied = false;\n if (document instanceof PdfDocument) {\n this.document = document;\n }\n }\n Object.defineProperty(PdfDocumentBase.prototype, \"pdfObjects\", {\n //Prpperties\n /**\n * Gets the `PDF objects` collection, which stores all objects and references to it..\n * @private\n */\n get: function () {\n return this.objects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"crossTable\", {\n /**\n * Gets the `cross-reference` table.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"currentSavingObj\", {\n /**\n * Gets or sets the current saving `object number`.\n * @private\n */\n get: function () {\n return this.currentSavingObject;\n },\n set: function (value) {\n this.currentSavingObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"catalog\", {\n /**\n * Gets the PDF document `catalog`.\n * @private\n */\n get: function () {\n return this.pdfCatalog;\n },\n set: function (value) {\n this.pdfCatalog = value;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Sets the `main object collection`.\n * @private\n */\n PdfDocumentBase.prototype.setMainObjectCollection = function (mainObjectCollection) {\n this.objects = mainObjectCollection;\n };\n /**\n * Sets the `cross table`.\n * @private\n */\n PdfDocumentBase.prototype.setCrossTable = function (cTable) {\n this.pdfCrossTable = cTable;\n };\n /**\n * Sets the `catalog`.\n * @private\n */\n PdfDocumentBase.prototype.setCatalog = function (catalog) {\n this.pdfCatalog = catalog;\n };\n PdfDocumentBase.prototype.save = function (filename) {\n var _this = this;\n var encoding = new Encoding(true);\n var SW = new StreamWriter(encoding);\n if (typeof filename === 'undefined') {\n var encoding_1 = new Encoding(true);\n var SW_1 = new StreamWriter(encoding_1);\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:no-any */\n var obj = {};\n obj.blobData = new Blob([_this.document.docSave(SW_1, true)], { type: 'application/pdf' });\n resolve(obj);\n });\n }\n else {\n this.document.docSave(SW, filename, true);\n }\n };\n /**\n * `Clone` of parent object - PdfDocument.\n * @private\n */\n PdfDocumentBase.prototype.clone = function () {\n return this.document;\n };\n return PdfDocumentBase;\n}());\nexport { PdfDocumentBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfCatalog.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\n/**\n * `PdfCatalog` class represents internal catalog of the Pdf document.\n * @private\n */\nvar PdfCatalog = /** @class */ (function (_super) {\n __extends(PdfCatalog, _super);\n //constructor\n /**\n * Initializes a new instance of the `PdfCatalog` class.\n * @private\n */\n function PdfCatalog() {\n var _this = _super.call(this) || this;\n //fields\n /**\n * Internal variable to store collection of `sections`.\n * @default null\n * @private\n */\n _this.sections = null;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n _this.tempDictionaryProperties = new DictionaryProperties();\n _this.items.setValue(new DictionaryProperties().type, new PdfName('Catalog'));\n return _this;\n }\n Object.defineProperty(PdfCatalog.prototype, \"pages\", {\n //Properties\n /**\n * Gets or sets the sections, which contain `pages`.\n * @private\n */\n get: function () {\n return this.sections;\n },\n set: function (value) {\n var dictionary = value.element;\n // if (this.sections !== value) {\n // this.sections = value;\n // this.Items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n // }\n this.sections = value;\n this.items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n return PdfCatalog;\n}(PdfDictionary));\nexport { PdfCatalog };\n","/**\n * public Enum for `PdfPageOrientation`.\n * @private\n */\nexport var PdfPageOrientation;\n(function (PdfPageOrientation) {\n /**\n * Specifies the type of `Portrait`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Portrait\"] = 0] = \"Portrait\";\n /**\n * Specifies the type of `Landscape`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Landscape\"] = 1] = \"Landscape\";\n})(PdfPageOrientation || (PdfPageOrientation = {}));\n/**\n * public Enum for `PdfPageRotateAngle`.\n * @private\n */\nexport var PdfPageRotateAngle;\n(function (PdfPageRotateAngle) {\n /**\n * Specifies the type of `RotateAngle0`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle0\"] = 0] = \"RotateAngle0\";\n /**\n * Specifies the type of `RotateAngle90`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle90\"] = 1] = \"RotateAngle90\";\n /**\n * Specifies the type of `RotateAngle180`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle180\"] = 2] = \"RotateAngle180\";\n /**\n * Specifies the type of `RotateAngle270`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle270\"] = 3] = \"RotateAngle270\";\n})(PdfPageRotateAngle || (PdfPageRotateAngle = {}));\n/**\n * public Enum for `PdfNumberStyle`.\n * @private\n */\nexport var PdfNumberStyle;\n(function (PdfNumberStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Numeric`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"Numeric\"] = 1] = \"Numeric\";\n /**\n * Specifies the type of `LowerLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerLatin\"] = 2] = \"LowerLatin\";\n /**\n * Specifies the type of `LowerRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerRoman\"] = 3] = \"LowerRoman\";\n /**\n * Specifies the type of `UpperLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperLatin\"] = 4] = \"UpperLatin\";\n /**\n * Specifies the type of `UpperRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperRoman\"] = 5] = \"UpperRoman\";\n})(PdfNumberStyle || (PdfNumberStyle = {}));\n/**\n * public Enum for `PdfDockStyle`.\n * @private\n */\nexport var PdfDockStyle;\n(function (PdfDockStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Bottom\"] = 1] = \"Bottom\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Top\"] = 2] = \"Top\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Right\"] = 4] = \"Right\";\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Fill\"] = 5] = \"Fill\";\n})(PdfDockStyle || (PdfDockStyle = {}));\n/**\n * public Enum for `PdfAlignmentStyle`.\n * @private\n */\nexport var PdfAlignmentStyle;\n(function (PdfAlignmentStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `TopLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopLeft\"] = 1] = \"TopLeft\";\n /**\n * Specifies the type of `TopCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopCenter\"] = 2] = \"TopCenter\";\n /**\n * Specifies the type of `TopRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopRight\"] = 3] = \"TopRight\";\n /**\n * Specifies the type of `MiddleLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleLeft\"] = 4] = \"MiddleLeft\";\n /**\n * Specifies the type of `MiddleCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleCenter\"] = 5] = \"MiddleCenter\";\n /**\n * Specifies the type of `MiddleRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleRight\"] = 6] = \"MiddleRight\";\n /**\n * Specifies the type of `BottomLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomLeft\"] = 7] = \"BottomLeft\";\n /**\n * Specifies the type of `BottomCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomCenter\"] = 8] = \"BottomCenter\";\n /**\n * Specifies the type of `BottomRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomRight\"] = 9] = \"BottomRight\";\n})(PdfAlignmentStyle || (PdfAlignmentStyle = {}));\n/**\n * public Enum for `TemplateType`.\n * @private\n */\nexport var TemplateType;\n(function (TemplateType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n TemplateType[TemplateType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n TemplateType[TemplateType[\"Top\"] = 1] = \"Top\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n TemplateType[TemplateType[\"Bottom\"] = 2] = \"Bottom\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n TemplateType[TemplateType[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n TemplateType[TemplateType[\"Right\"] = 4] = \"Right\";\n})(TemplateType || (TemplateType = {}));\n","import { ObjectStatus } from './../input-output/enum';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './pdf-dictionary-properties';\nimport { Operators } from './pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfReference } from './../primitives/pdf-reference';\nimport { ObjectType } from './cross-table';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfCatalog } from './../document/pdf-catalog';\n/**\n * `PdfCrossTable` is responsible for intermediate level parsing\n * and savingof a PDF document.\n * @private\n */\nvar PdfCrossTable = /** @class */ (function () {\n function PdfCrossTable() {\n /**\n * The modified `objects` that should be saved.\n * @private\n */\n this.objects = new Dictionary();\n /**\n * Holds `maximal generation number` or offset to object.\n * @default 0\n * @private\n */\n this.maxGenNumIndex = 0;\n /**\n * The `number of the objects`.\n * @default 0\n * @private\n */\n this.objectCount = 0;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new PdfDictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n }\n Object.defineProperty(PdfCrossTable.prototype, \"isMerging\", {\n //Properties\n /**\n * Gets or sets if the document `is merged`.\n * @private\n */\n get: function () {\n return this.merging;\n },\n set: function (value) {\n this.merging = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"trailer\", {\n /**\n * Gets the `trailer`.\n * @private\n */\n get: function () {\n if (this.internalTrailer == null) {\n this.internalTrailer = new PdfStream();\n }\n return this.internalTrailer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"document\", {\n /**\n * Gets or sets the main `PdfDocument` class instance.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n this.items = this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"pdfObjects\", {\n /**\n * Gets the catched `PDF object` main collection.\n * @private\n */\n get: function () {\n return this.items;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"objectCollection\", {\n /**\n * Gets the `object collection`.\n * @private\n */\n get: function () {\n return this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"count\", {\n /**\n * Gets or sets the `number of the objects` within the document.\n * @private\n */\n get: function () {\n return this.objectCount;\n },\n set: function (value) {\n this.objectCount = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"nextObjNumber\", {\n /**\n * Returns `next available object number`.\n * @private\n */\n get: function () {\n this.count = this.count + 1;\n return this.count;\n },\n enumerable: true,\n configurable: true\n });\n PdfCrossTable.prototype.save = function (writer, filename) {\n this.saveHead(writer);\n var state = false;\n this.mappedReferences = null;\n this.objects.clear();\n this.markTrailerReferences();\n this.saveObjects(writer);\n var saveCount = this.count;\n var xrefPos = writer.position;\n this.registerObject(0, new PdfReference(0, -1), true);\n var prevXRef = 0;\n writer.write(Operators.xref);\n writer.write(Operators.newLine);\n this.saveSections(writer);\n this.saveTrailer(writer, this.count, prevXRef);\n this.saveTheEndess(writer, xrefPos);\n this.count = saveCount;\n for (var i = 0; i < this.objectCollection.count; ++i) {\n var oi = this.objectCollection.items(i);\n oi.object.isSaving = false;\n }\n if (typeof filename === 'undefined') {\n return writer.stream.buffer;\n }\n else {\n writer.stream.save(filename);\n }\n };\n /**\n * `Saves the endess` of the file.\n * @private\n */\n PdfCrossTable.prototype.saveTheEndess = function (writer, xrefPos) {\n writer.write(Operators.newLine + Operators.startxref + Operators.newLine);\n writer.write(xrefPos.toString() + Operators.newLine);\n writer.write(Operators.eof + Operators.newLine);\n };\n /**\n * `Saves the new trailer` dictionary.\n * @private\n */\n PdfCrossTable.prototype.saveTrailer = function (writer, count, prevXRef) {\n writer.write(Operators.trailer + Operators.newLine);\n // Save the dictionary.\n var trailer = this.trailer;\n trailer.items.setValue(this.dictionaryProperties.size, new PdfNumber(this.objectCount + 1));\n trailer = new PdfDictionary(trailer); // Make it real dictionary.\n trailer.setEncrypt(false);\n trailer.save(writer);\n };\n /**\n * `Saves the xref section`.\n * @private\n */\n PdfCrossTable.prototype.saveSections = function (writer) {\n var objectNum = 0;\n var count = 0;\n do {\n count = this.prepareSubsection(objectNum);\n this.saveSubsection(writer, objectNum, count);\n objectNum += count;\n } while (count !== 0);\n };\n /**\n * `Saves a subsection`.\n * @private\n */\n PdfCrossTable.prototype.saveSubsection = function (writer, objectNum, count) {\n if (count <= 0 || objectNum >= this.count) {\n return;\n }\n var subsectionHead = '{0} {1}{2}';\n writer.write(objectNum + ' ' + (count + 1) + Operators.newLine);\n for (var i = objectNum; i <= objectNum + count; ++i) {\n var obj = this.objects.getValue(i);\n var str = '';\n if (obj.type === ObjectType.Free) {\n str = this.getItem(obj.offset, 65535, true);\n }\n else {\n str = this.getItem(obj.offset, obj.generation, false);\n }\n writer.write(str);\n }\n };\n /**\n * Generates string for `xref table item`.\n * @private\n */\n PdfCrossTable.prototype.getItem = function (offset, genNumber, isFree) {\n var returnString = '';\n var addOffsetLength = 10 - offset.toString().length;\n if (genNumber <= 0) {\n genNumber = 0;\n }\n var addGenNumberLength = (5 - genNumber.toString().length) <= 0 ? 0 : (5 - genNumber.toString().length);\n for (var index = 0; index < addOffsetLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + offset.toString() + ' ';\n for (var index = 0; index < addGenNumberLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + genNumber.toString() + ' ';\n returnString = returnString + ((isFree) ? Operators.f : Operators.n) + Operators.newLine;\n return returnString;\n };\n /**\n * `Prepares a subsection` of the current section within the cross-reference table.\n * @private\n */\n PdfCrossTable.prototype.prepareSubsection = function (objectNum) {\n var count = 0;\n var i;\n var total = this.count;\n for (var k = 0; k < this.document.pdfObjects.count; k++) {\n var reference = this.document.pdfObjects.items(k).reference;\n var refString = reference.toString();\n var refArray = refString.split(' ');\n }\n if (objectNum >= total) {\n return count;\n }\n // search for first changed indirect object.\n for (i = objectNum; i < total; ++i) {\n break;\n }\n objectNum = i;\n // look up for all indirect objects in one subsection.\n for (; i < total; ++i) {\n ++count;\n }\n return count;\n };\n /**\n * `Marks the trailer references` being saved.\n * @private\n */\n PdfCrossTable.prototype.markTrailerReferences = function () {\n var tempArray;\n var keys = this.trailer.items.keys();\n var values = this.trailer.items.values();\n };\n /**\n * `Saves the head`.\n * @private\n */\n PdfCrossTable.prototype.saveHead = function (writer) {\n var version = this.generateFileVersion(writer.document);\n writer.write('%PDF-' + version);\n writer.write(Operators.newLine);\n };\n /**\n * Generates the `version` of the file.\n * @private\n */\n PdfCrossTable.prototype.generateFileVersion = function (document) {\n var iVersion = 4;\n var version = '1.' + iVersion.toString();\n return version;\n };\n PdfCrossTable.prototype.getReference = function (obj, bNew) {\n if (typeof bNew === 'undefined') {\n var wasNew = false;\n return this.getReference(obj, wasNew);\n }\n else {\n //code splitted for reducing lines of code exceeds 100.\n return this.getSubReference(obj, bNew);\n }\n };\n /**\n * Retrieves the `reference` of the object given.\n * @private\n */\n PdfCrossTable.prototype.getSubReference = function (obj, bNew) {\n var isNew = false;\n var wasNew;\n var reference = null;\n // if (obj.IsSaving) {\n if (this.items.count > 0 && obj.objectCollectionIndex > 0 && this.items.count > obj.objectCollectionIndex - 1) {\n var tempObj = this.document.pdfObjects.getReference(obj, wasNew);\n reference = tempObj.reference;\n wasNew = tempObj.wasNew;\n }\n if (reference == null) {\n if (obj.status === ObjectStatus.Registered) {\n wasNew = false;\n }\n else {\n wasNew = true;\n }\n }\n else {\n wasNew = false;\n }\n // need to add mapped reference code\n if (reference == null) {\n var objnumber = this.nextObjNumber;\n reference = new PdfReference(objnumber, 0);\n var found = void 0;\n if (wasNew) {\n this.document.pdfObjects.add(obj);\n this.document.pdfObjects.trySetReference(obj, reference, found);\n var tempIndex = this.document.pdfObjects.count - 1;\n var tempkey = this.document.pdfObjects.objectCollections[tempIndex].reference.objNumber;\n var tempvalue = this.document.pdfObjects.objectCollections[this.document.pdfObjects.count - 1];\n this.document.pdfObjects.mainObjectCollection.setValue(tempkey, tempvalue);\n obj.position = -1;\n }\n else {\n this.document.pdfObjects.trySetReference(obj, reference, found);\n }\n obj.objectCollectionIndex = reference.objNumber;\n obj.status = ObjectStatus.None;\n isNew = true;\n }\n bNew = isNew || this.bForceNew;\n return reference;\n };\n /**\n * `Saves all objects` in the collection.\n * @private\n */\n PdfCrossTable.prototype.saveObjects = function (writer) {\n var objectCollection = this.objectCollection;\n for (var i = 0; i < objectCollection.count; ++i) {\n var oi = objectCollection.items(i);\n var obj = oi.object;\n obj.isSaving = true;\n this.saveIndirectObject(obj, writer);\n }\n };\n /**\n * `Saves indirect object`.\n * @private\n */\n PdfCrossTable.prototype.saveIndirectObject = function (obj, writer) {\n var reference = this.getReference(obj);\n if (obj instanceof PdfCatalog) {\n this.trailer.items.setValue(this.dictionaryProperties.root, reference);\n }\n // NOTE : This is needed for correct string objects encryption.\n this.pdfDocument.currentSavingObj = reference;\n var tempArchive = false;\n tempArchive = obj.getArchive();\n var allowedType = !((obj instanceof PdfStream) || !tempArchive || (obj instanceof PdfCatalog));\n var sigFlag = false;\n this.registerObject(writer.position, reference);\n this.doSaveObject(obj, reference, writer);\n };\n /**\n * Performs `real saving` of the save object.\n * @private\n */\n PdfCrossTable.prototype.doSaveObject = function (obj, reference, writer) {\n var correctPosition = writer.length;\n writer.write(reference.objNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(reference.genNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(Operators.obj);\n writer.write(Operators.newLine);\n obj.save(writer);\n var stream = writer.stream;\n writer.write(Operators.endObj);\n writer.write(Operators.newLine);\n };\n PdfCrossTable.prototype.registerObject = function (offset, reference, free) {\n if (typeof free === 'boolean') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference, free));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n else if (typeof free === 'undefined') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n };\n /**\n * `Dereferences` the specified primitive object.\n * @private\n */\n PdfCrossTable.dereference = function (obj) {\n var rh = obj;\n if (rh != null) {\n obj = rh.object;\n }\n return obj;\n };\n return PdfCrossTable;\n}());\nexport { PdfCrossTable };\nvar RegisteredObject = /** @class */ (function () {\n function RegisteredObject(offset, reference, free) {\n if (typeof free === 'undefined') {\n var tempOffset = offset;\n this.offsetNumber = tempOffset;\n var tempReference = reference;\n this.generation = tempReference.genNumber;\n this.object = tempReference.objNumber;\n this.type = ObjectType.Normal;\n }\n else {\n var tempOffset = offset;\n var tempReference = reference;\n this.constructor(tempOffset, tempReference);\n var tempFree = free;\n this.type = ObjectType.Free;\n }\n }\n Object.defineProperty(RegisteredObject.prototype, \"objectNumber\", {\n //Properties\n /**\n * Gets the `object number`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RegisteredObject.prototype, \"offset\", {\n /**\n * Gets the `offset`.\n * @private\n */\n get: function () {\n var result;\n result = this.offsetNumber;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n return RegisteredObject;\n}());\nexport { RegisteredObject };\n","/**\n * PdfPageSize.ts class for EJ2-PDF\n */\nimport { SizeF } from './../drawing/pdf-drawing';\n/**\n * Represents information about various predefined `page sizes`.\n */\nvar PdfPageSize = /** @class */ (function () {\n //constructor\n /**\n * Initialize an instance for `PdfPageSize` class.\n * @private\n */\n function PdfPageSize() {\n // \n }\n /**\n * Specifies the size of `letter`.\n * @private\n */\n PdfPageSize.letter = new SizeF(612, 792);\n /**\n * Specifies the size of `note`.\n * @private\n */\n PdfPageSize.note = new SizeF(540, 720);\n /**\n * Specifies the size of `legal`.\n * @private\n */\n PdfPageSize.legal = new SizeF(612, 1008);\n /**\n * Specifies the size of `a0`.\n * @private\n */\n PdfPageSize.a0 = new SizeF(2380, 3368);\n /**\n * Specifies the size of `a1`.\n * @private\n */\n PdfPageSize.a1 = new SizeF(1684, 2380);\n /**\n * Specifies the size of `a2`.\n * @private\n */\n PdfPageSize.a2 = new SizeF(1190, 1684);\n /**\n * Specifies the size of `a3`.\n * @private\n */\n PdfPageSize.a3 = new SizeF(842, 1190);\n /**\n * Specifies the size of `a4`.\n * @private\n */\n PdfPageSize.a4 = new SizeF(595, 842);\n /**\n * Specifies the size of `a5`.\n * @private\n */\n PdfPageSize.a5 = new SizeF(421, 595);\n /**\n * Specifies the size of `a6`.\n * @private\n */\n PdfPageSize.a6 = new SizeF(297, 421);\n /**\n * Specifies the size of `a7`.\n * @private\n */\n PdfPageSize.a7 = new SizeF(210, 297);\n /**\n * Specifies the size of `a8`.\n * @private\n */\n PdfPageSize.a8 = new SizeF(148, 210);\n /**\n * Specifies the size of `a9`.\n * @private\n */\n PdfPageSize.a9 = new SizeF(105, 148);\n /**\n * Specifies the size of `a10`.\n * @private\n */\n PdfPageSize.a10 = new SizeF(74, 105);\n /**\n * Specifies the size of `b0`.\n * @private\n */\n PdfPageSize.b0 = new SizeF(2836, 4008);\n /**\n * Specifies the size of `b1`.\n * @private\n */\n PdfPageSize.b1 = new SizeF(2004, 2836);\n /**\n * Specifies the size of `b2`.\n * @private\n */\n PdfPageSize.b2 = new SizeF(1418, 2004);\n /**\n * Specifies the size of `b3`.\n * @private\n */\n PdfPageSize.b3 = new SizeF(1002, 1418);\n /**\n * Specifies the size of `b4`.\n * @private\n */\n PdfPageSize.b4 = new SizeF(709, 1002);\n /**\n * Specifies the size of `b5`.\n * @private\n */\n PdfPageSize.b5 = new SizeF(501, 709);\n /**\n * Specifies the size of `archE`.\n * @private\n */\n PdfPageSize.archE = new SizeF(2592, 3456);\n /**\n * Specifies the size of `archD`.\n * @private\n */\n PdfPageSize.archD = new SizeF(1728, 2592);\n /**\n * Specifies the size of `archC`.\n * @private\n */\n PdfPageSize.archC = new SizeF(1296, 1728);\n /**\n * Specifies the size of `archB`.\n * @private\n */\n PdfPageSize.archB = new SizeF(864, 1296);\n /**\n * Specifies the size of `archA`.\n * @private\n */\n PdfPageSize.archA = new SizeF(648, 864);\n /**\n * Specifies the size of `flsa`.\n * @private\n */\n PdfPageSize.flsa = new SizeF(612, 936);\n /**\n * Specifies the size of `halfLetter`.\n * @private\n */\n PdfPageSize.halfLetter = new SizeF(396, 612);\n /**\n * Specifies the size of `letter11x17`.\n * @private\n */\n PdfPageSize.letter11x17 = new SizeF(792, 1224);\n /**\n * Specifies the size of `ledger`.\n * @private\n */\n PdfPageSize.ledger = new SizeF(1224, 792);\n return PdfPageSize;\n}());\nexport { PdfPageSize };\n","/**\n * PdfMargins.ts class for EJ2-PDF\n * A class representing PDF page margins.\n */\nvar PdfMargins = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfMargins` class.\n * @private\n */\n function PdfMargins() {\n /**\n * Represents the `Default Page Margin` value.\n * @default 0.0\n * @private\n */\n this.pdfMargin = 40.0;\n this.setMargins(this.pdfMargin);\n }\n Object.defineProperty(PdfMargins.prototype, \"left\", {\n //Properties\n /**\n * Gets or sets the `left margin` size.\n * @private\n */\n get: function () {\n return this.leftMargin;\n },\n set: function (value) {\n this.leftMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"top\", {\n /**\n * Gets or sets the `top margin` size.\n * @private\n */\n get: function () {\n return this.topMargin;\n },\n set: function (value) {\n this.topMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"right\", {\n /**\n * Gets or sets the `right margin` size.\n * @private\n */\n get: function () {\n return this.rightMargin;\n },\n set: function (value) {\n this.rightMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"bottom\", {\n /**\n * Gets or sets the `bottom margin` size.\n * @private\n */\n get: function () {\n return this.bottomMargin;\n },\n set: function (value) {\n this.bottomMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"all\", {\n /**\n * Sets the `margins`.\n * @private\n */\n set: function (value) {\n this.setMargins(value);\n },\n enumerable: true,\n configurable: true\n });\n PdfMargins.prototype.setMargins = function (margin1, margin2, margin3, margin4) {\n if (typeof margin2 === 'undefined') {\n this.leftMargin = this.topMargin = this.rightMargin = this.bottomMargin = margin1;\n }\n else {\n if (typeof margin3 === 'undefined') {\n this.leftMargin = this.rightMargin = margin1;\n this.bottomMargin = this.topMargin = margin2;\n }\n else {\n this.leftMargin = margin1;\n this.topMargin = margin2;\n this.rightMargin = margin3;\n this.bottomMargin = margin4;\n }\n }\n };\n /**\n * `Clones` the object.\n * @private\n */\n PdfMargins.prototype.clone = function () {\n return this;\n };\n return PdfMargins;\n}());\nexport { PdfMargins };\n","/**\n * ImageDecoder class\n */\nimport { ByteArray } from './byte-array';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfBoolean } from './../../primitives/pdf-boolean';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\n/**\n * Specifies the image `format`.\n * @private\n */\nexport var ImageFormat;\n(function (ImageFormat) {\n /**\n * Specifies the type of `Unknown`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `Bmp`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Bmp\"] = 1] = \"Bmp\";\n /**\n * Specifies the type of `Emf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Emf\"] = 2] = \"Emf\";\n /**\n * Specifies the type of `Gif`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Gif\"] = 3] = \"Gif\";\n /**\n * Specifies the type of `Jpeg`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Jpeg\"] = 4] = \"Jpeg\";\n /**\n * Specifies the type of `Png`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Png\"] = 5] = \"Png\";\n /**\n * Specifies the type of `Wmf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Wmf\"] = 6] = \"Wmf\";\n /**\n * Specifies the type of `Icon`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Icon\"] = 7] = \"Icon\";\n})(ImageFormat || (ImageFormat = {}));\n/**\n * `Decode the image stream`.\n * @private\n */\nvar ImageDecoder = /** @class */ (function () {\n /**\n * Initialize the new instance for `image-decoder` class.\n * @private\n */\n function ImageDecoder(stream) {\n /**\n * Specifies `format` of image.\n * @hidden\n * @private\n */\n this.mFormat = ImageFormat.Unknown;\n /**\n * `Bits per component`.\n * @default 8\n * @hidden\n * @private\n */\n this.mbitsPerComponent = 8;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.mStream = stream;\n this.initialize();\n }\n Object.defineProperty(ImageDecoder.prototype, \"height\", {\n /**\n * Gets the `height` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"width\", {\n /**\n * Gets the `width` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"bitsPerComponent\", {\n /**\n * Gets `bits per component`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mbitsPerComponent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"size\", {\n /**\n * Gets the `size` of an image data.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageData\", {\n /**\n * Gets the value of an `image data`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageDataAsNumberArray\", {\n /**\n * Gets the value of an `image data as number array`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.internalBuffer.buffer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Initialize` image data and image stream.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.initialize = function () {\n if (this.mFormat === ImageFormat.Unknown && this.checkIfJpeg()) {\n this.mFormat = ImageFormat.Jpeg;\n this.parseJpegImage();\n }\n this.reset();\n this.mImageData = new ByteArray(this.mStream.count);\n this.mStream.read(this.mImageData, 0, this.mImageData.count);\n };\n /**\n * `Reset` stream position into 0.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.reset = function () {\n this.mStream.position = 0;\n };\n /**\n * `Parse` Jpeg image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.parseJpegImage = function () {\n this.reset();\n var imgData = new ByteArray(this.mStream.count);\n this.mStream.read(imgData, 0, imgData.count);\n var i = 4;\n /* tslint:disable */\n if (String.fromCharCode(imgData.getBuffer(i + 2)) === 'J' && String.fromCharCode(imgData.getBuffer(i + 3)) === 'F' && String.fromCharCode(imgData.getBuffer(i + 4)) === 'I' && String.fromCharCode(imgData.getBuffer(i + 5)) === 'F' && imgData.getBuffer(i + 6) === 0) {\n var length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n while (i + length_1 < imgData.count) {\n i += length_1;\n if (imgData.getBuffer(i + 1) === 192) {\n this.mHeight = imgData.getBuffer(i + 5) * 256 + imgData.getBuffer(i + 6);\n this.mWidth = imgData.getBuffer(i + 7) * 256 + imgData.getBuffer(i + 8);\n return;\n }\n else {\n i += 2;\n length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n }\n }\n }\n /* tslint:enable */\n };\n Object.defineProperty(ImageDecoder.prototype, \"format\", {\n /**\n * Gets the image `format`.\n * @private\n * @hidden\n */\n get: function () {\n return this.mFormat;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Checks if JPG`.\n * @private\n * @hidden\n */\n ImageDecoder.prototype.checkIfJpeg = function () {\n this.reset();\n for (var i = 0; i < ImageDecoder.mJpegHeader.length; i++) {\n if (ImageDecoder.mJpegHeader[i] !== this.mStream.readByte(i)) {\n return false;\n }\n this.mStream.position++;\n }\n return true;\n };\n /**\n * Return image `dictionary`.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getImageDictionary = function () {\n if (this.mFormat === ImageFormat.Jpeg) {\n var tempArrayBuffer = this.imageData.internalBuffer.length;\n this.imageStream = new PdfStream();\n this.imageStream.isImage = true;\n var tempString = '';\n var decodedString = '';\n for (var i = 0; i < this.imageDataAsNumberArray.byteLength; i++) {\n tempString += String.fromCharCode(null, this.mStream.readByte(i));\n }\n for (var i = 0; i < tempString.length; i++) {\n if (i % 2 !== 0) {\n decodedString += tempString[i];\n }\n }\n this.imageStream.data = [decodedString];\n this.imageStream.compress = false;\n this.imageStream.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.xObject));\n this.imageStream.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.image));\n this.imageStream.items.setValue(this.dictionaryProperties.width, new PdfNumber(this.width));\n this.imageStream.items.setValue(this.dictionaryProperties.height, new PdfNumber(this.height));\n this.imageStream.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n this.imageStream.items.setValue(this.dictionaryProperties.filter, new PdfName(this.dictionaryProperties.dctdecode));\n this.imageStream.items.setValue(this.dictionaryProperties.colorSpace, new PdfName(this.getColorSpace()));\n this.imageStream.items.setValue(this.dictionaryProperties.decodeParms, this.getDecodeParams());\n return this.imageStream;\n }\n else {\n return this.imageStream;\n }\n };\n /**\n * Return `colorSpace` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getColorSpace = function () {\n return this.dictionaryProperties.deviceRgb;\n };\n /**\n * Return `decode parameters` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getDecodeParams = function () {\n var decodeParams = new PdfDictionary();\n decodeParams.items.setValue(this.dictionaryProperties.columns, new PdfNumber(this.width));\n decodeParams.items.setValue(this.dictionaryProperties.blackIs1, new PdfBoolean(true));\n decodeParams.items.setValue(this.dictionaryProperties.k, new PdfNumber(-1));\n decodeParams.items.setValue(this.dictionaryProperties.predictor, new PdfNumber(15));\n decodeParams.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n return decodeParams;\n };\n /**\n * Number array for `png header`.\n * @hidden\n * @private\n */\n ImageDecoder.mPngHeader = [137, 80, 78, 71, 13, 10, 26, 10];\n /**\n * Number Array for `jpeg header`.\n * @hidden\n * @private\n */\n ImageDecoder.mJpegHeader = [255, 216];\n /**\n * Number array for `gif header`.\n * @hidden\n * @private\n */\n ImageDecoder.GIF_HEADER = 'G,I,F,8';\n /**\n * Number array for `bmp header.`\n * @hidden\n * @private\n */\n ImageDecoder.BMP_HEADER = 'B,M';\n return ImageDecoder;\n}());\nexport { ImageDecoder };\n","/**\n * PdfPageSettings.ts class for EJ2-PDF\n */\nimport { SizeF, PointF } from './../drawing/pdf-drawing';\nimport { PdfPageSize } from './pdf-page-size';\nimport { PdfPageRotateAngle, PdfPageOrientation } from './enum';\nimport { PdfMargins } from './../graphics/pdf-margins';\n/**\n * The class provides various `setting` related with PDF pages.\n */\nvar PdfPageSettings = /** @class */ (function () {\n function PdfPageSettings(margins) {\n //Fields\n /**\n * The page `margins`.\n * @private\n */\n this.pageMargins = new PdfMargins();\n /**\n * The page `size`.\n * @default a4\n * @private\n */\n this.pageSize = PdfPageSize.a4;\n /**\n * The page `rotation angle`.\n * @default PdfPageRotateAngle.RotateAngle0\n * @private\n */\n this.rotateAngle = PdfPageRotateAngle.RotateAngle0;\n /**\n * The page `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.pageOrientation = PdfPageOrientation.Portrait;\n /**\n * The page `origin`.\n * @default 0,0\n * @private\n */\n this.pageOrigin = new PointF(0, 0);\n /**\n * Checks the Whether the `rotation` is applied or not.\n * @default false\n * @private\n */\n this.isRotation = false;\n if (typeof margins === 'number') {\n this.pageMargins.setMargins(margins);\n }\n }\n Object.defineProperty(PdfPageSettings.prototype, \"size\", {\n //Properties\n /**\n * Gets or sets the `size` of the page.\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.setSize(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"orientation\", {\n /**\n * Gets or sets the page `orientation`.\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (orientation) {\n if (this.pageOrientation !== orientation) {\n this.pageOrientation = orientation;\n this.updateSize(orientation);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"margins\", {\n /**\n * Gets or sets the `margins` of the page.\n * @private\n */\n get: function () {\n return this.pageMargins;\n },\n set: function (value) {\n this.pageMargins = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.width;\n },\n set: function (value) {\n this.pageSize.width = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.height;\n },\n set: function (value) {\n this.pageSize.height = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"origin\", {\n /**\n * Gets or sets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"rotate\", {\n /**\n * Gets or sets the number of degrees by which the page should be `rotated` clockwise when displayed or printed.\n * @private\n */\n get: function () {\n return this.rotateAngle;\n },\n set: function (value) {\n this.rotateAngle = value;\n this.isRotation = true;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Update page size` depending on orientation.\n * @private\n */\n PdfPageSettings.prototype.updateSize = function (orientation) {\n var min = Math.min(this.pageSize.width, this.pageSize.height);\n var max = Math.max(this.pageSize.width, this.pageSize.height);\n switch (orientation) {\n case PdfPageOrientation.Portrait:\n this.pageSize = new SizeF(min, max);\n break;\n case PdfPageOrientation.Landscape:\n this.pageSize = new SizeF(max, min);\n break;\n }\n };\n /**\n * Creates a `clone` of the object.\n * @private\n */\n PdfPageSettings.prototype.clone = function () {\n var settings = this;\n settings.pageMargins = this.pageMargins.clone();\n // if (GetTransition() != null)\n // {\n // settings.Transition = (PdfPageTransition)Transition.clone();\n // }\n return settings;\n };\n /**\n * Returns `size`, shrinked by the margins.\n * @private\n */\n PdfPageSettings.prototype.getActualSize = function () {\n var width = this.width - (this.margins.left + this.margins.right);\n var height = this.height - (this.margins.top + this.margins.bottom);\n var size = new SizeF(width, height);\n return size;\n };\n /**\n * Sets `size` to the page aaccording to the orientation.\n * @private\n */\n PdfPageSettings.prototype.setSize = function (size) {\n var min = Math.min(size.width, size.height);\n var max = Math.max(size.width, size.height);\n if (this.orientation === PdfPageOrientation.Portrait) {\n this.pageSize = new SizeF(min, max);\n }\n else {\n this.pageSize = new SizeF(max, min);\n }\n };\n return PdfPageSettings;\n}());\nexport { PdfPageSettings };\n","import { Operators } from './pdf-operators';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * Helper class to `write PDF graphic streams` easily.\n * @private\n */\nvar PdfStreamWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfStreamWriter` class.\n * @private\n */\n function PdfStreamWriter(stream) {\n if (stream == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.stream = stream;\n }\n //Implementation\n /**\n * `Clear` the stream.\n * @public\n */\n PdfStreamWriter.prototype.clear = function () {\n this.stream.clearStream();\n };\n PdfStreamWriter.prototype.setGraphicsState = function (dictionaryName) {\n if (dictionaryName instanceof PdfName) {\n this.stream.write(dictionaryName.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n else {\n this.stream.write(Operators.slash);\n this.stream.write(dictionaryName);\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n };\n /**\n * `Executes the XObject`.\n * @private\n */\n PdfStreamWriter.prototype.executeObject = function (name) {\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.paintXObject);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes path object`.\n * @private\n */\n PdfStreamWriter.prototype.closePath = function () {\n this.writeOperator(Operators.closePath);\n };\n /**\n * `Clips the path`.\n * @private\n */\n PdfStreamWriter.prototype.clipPath = function (useEvenOddRule) {\n this.stream.write(Operators.clipPath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n }\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.endPath);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes, then fills and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.closeFillStrokePath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills and strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.fillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.fillStroke);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills path`.\n * @private\n */\n PdfStreamWriter.prototype.fillPath = function (useEvenOddRule) {\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Ends the path`.\n * @private\n */\n PdfStreamWriter.prototype.endPath = function () {\n this.writeOperator(Operators.n);\n };\n /**\n * `Closes and fills the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillPath = function (useEvenOddRule) {\n this.writeOperator(Operators.closePath);\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Closes and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeStrokePath = function () {\n this.writeOperator(Operators.closeStrokePath);\n };\n /**\n * `Sets the text scaling`.\n * @private\n */\n PdfStreamWriter.prototype.setTextScaling = function (textScaling) {\n this.stream.write(PdfNumber.floatToString(textScaling));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextScaling);\n };\n /**\n * `Strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.strokePath = function () {\n this.writeOperator(Operators.stroke);\n };\n /**\n * `Restores` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.restoreGraphicsState = function () {\n this.writeOperator(Operators.restoreState);\n };\n /**\n * `Saves` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.saveGraphicsState = function () {\n this.writeOperator(Operators.saveState);\n };\n PdfStreamWriter.prototype.startNextLine = function (arg1, arg2) {\n if (typeof arg1 === 'undefined') {\n this.writeOperator(Operators.goToNextLine);\n }\n else if (arg1 instanceof PointF) {\n this.writePoint(arg1);\n this.writeOperator(Operators.setCoords);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.setCoords);\n }\n };\n /**\n * Shows the `text`.\n * @private\n */\n PdfStreamWriter.prototype.showText = function (text) {\n this.checkTextParam(text);\n this.writeText(text);\n this.writeOperator(Operators.setText);\n };\n /**\n * Sets `text leading`.\n * @private\n */\n PdfStreamWriter.prototype.setLeading = function (leading) {\n this.stream.write(PdfNumber.floatToString(leading));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextLeading);\n };\n /**\n * `Begins the path`.\n * @private\n */\n PdfStreamWriter.prototype.beginPath = function (x, y) {\n this.writePoint(x, y);\n this.writeOperator(Operators.beginPath);\n };\n /**\n * `Begins text`.\n * @private\n */\n PdfStreamWriter.prototype.beginText = function () {\n this.writeOperator(Operators.beginText);\n };\n /**\n * `Ends text`.\n * @private\n */\n PdfStreamWriter.prototype.endText = function () {\n this.writeOperator(Operators.endText);\n };\n PdfStreamWriter.prototype.appendRectangle = function (arg1, arg2, arg3, arg4) {\n if (arg1 instanceof RectangleF) {\n this.appendRectangle(arg1.x, arg1.y, arg1.width, arg1.height);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writePoint(arg3, arg4);\n this.writeOperator(Operators.appendRectangle);\n }\n };\n PdfStreamWriter.prototype.appendLineSegment = function (arg1, arg2) {\n if (arg1 instanceof PointF) {\n this.appendLineSegment(arg1.x, arg1.y);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.appendLineSegment);\n }\n };\n /**\n * Sets the `text rendering mode`.\n * @private\n */\n PdfStreamWriter.prototype.setTextRenderingMode = function (renderingMode) {\n this.stream.write(renderingMode.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setRenderingMode);\n };\n /**\n * Sets the `character spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setCharacterSpacing = function (charSpacing) {\n this.stream.write(PdfNumber.floatToString(charSpacing));\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.setCharacterSpace);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `word spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setWordSpacing = function (wordSpacing) {\n this.stream.write(PdfNumber.floatToString(wordSpacing));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setWordSpace);\n };\n PdfStreamWriter.prototype.showNextLineText = function (arg1, arg2) {\n if (arg1 instanceof PdfString) {\n this.checkTextParam(arg1);\n this.writeText(arg1);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n else {\n this.checkTextParam(arg1);\n this.writeText(arg1, arg2);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n };\n PdfStreamWriter.prototype.setColorSpace = function (arg1, arg2) {\n if (arg1 instanceof PdfName && typeof arg2 === 'boolean') {\n var temparg1 = arg1;\n var temparg2 = arg2;\n // if (temparg1 == null) {\n // throw new Error('ArgumentNullException:name');\n // }\n var op = (temparg2) ? Operators.selectcolorspaceforstroking : Operators.selectcolorspacefornonstroking;\n this.stream.write(temparg1.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(op);\n this.stream.write(Operators.newLine);\n }\n else {\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.setColorSpace(new PdfName(temparg1), temparg2);\n }\n };\n /**\n * Modifies current `transformation matrix`.\n * @private\n */\n PdfStreamWriter.prototype.modifyCtm = function (matrix) {\n if (matrix == null) {\n throw new Error('ArgumentNullException:matrix');\n }\n this.stream.write(matrix.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.modifyCtm);\n };\n PdfStreamWriter.prototype.setFont = function (font, name, size) {\n if (typeof name === 'string') {\n this.setFont(font, new PdfName(name), size);\n }\n else {\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(PdfNumber.floatToString(size));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setFont);\n }\n };\n /**\n * `Writes the operator`.\n * @private\n */\n PdfStreamWriter.prototype.writeOperator = function (opcode) {\n this.stream.write(opcode);\n this.stream.write(Operators.newLine);\n };\n PdfStreamWriter.prototype.checkTextParam = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (typeof text === 'string' && text === '') {\n throw new Error('ArgumentException:The text can not be an empty string, text');\n }\n };\n PdfStreamWriter.prototype.writeText = function (arg1, arg2) {\n if ((arg1 instanceof PdfString) && (typeof arg2 === 'undefined')) {\n this.stream.write(arg1.pdfEncode());\n }\n else {\n var start = void 0;\n var end = void 0;\n if (arg2) {\n start = PdfString.hexStringMark[0];\n end = PdfString.hexStringMark[1];\n }\n else {\n start = PdfString.stringMark[0];\n end = PdfString.stringMark[1];\n }\n this.stream.write(start);\n this.stream.write(arg1);\n this.stream.write(end);\n }\n };\n PdfStreamWriter.prototype.writePoint = function (arg1, arg2) {\n if ((arg1 instanceof PointF) && (typeof arg2 === 'undefined')) {\n this.writePoint(arg1.x, arg1.y);\n }\n else {\n var temparg1 = arg1;\n this.stream.write(PdfNumber.floatToString(temparg1));\n this.stream.write(Operators.whiteSpace);\n // NOTE: Change Y co-ordinate because we shifted co-ordinate system only.\n arg2 = this.updateY(arg2);\n this.stream.write(PdfNumber.floatToString(arg2));\n this.stream.write(Operators.whiteSpace);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfStreamWriter.prototype.updateY = function (arg) {\n return -arg;\n };\n /**\n * `Writes string` to the file.\n * @private\n */\n PdfStreamWriter.prototype.write = function (string) {\n var builder = '';\n builder += string;\n builder += Operators.newLine;\n this.writeOperator(builder);\n };\n /**\n * `Writes comment` to the file.\n * @private\n */\n PdfStreamWriter.prototype.writeComment = function (comment) {\n if (comment != null && comment.length > 0) {\n var builder = '';\n builder += Operators.comment;\n builder += Operators.whiteSpace;\n builder += comment;\n //builder.Append( Operators.NewLine );\n this.writeOperator(builder);\n }\n else {\n throw new Error('Invalid comment');\n }\n };\n /**\n * Sets the `color and space`.\n * @private\n */\n PdfStreamWriter.prototype.setColorAndSpace = function (color, colorSpace, forStroking) {\n if (!color.isEmpty) {\n // bool test = color is PdfExtendedColor;\n this.stream.write(color.toString(colorSpace, forStroking));\n this.stream.write(Operators.newLine);\n }\n };\n // public setLineDashPattern(pattern : number[], patternOffset : number) : void\n // {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n // }\n // private setLineDashPatternHelper(pattern : PdfArray, patternOffset : PdfNumber) : void\n // {\n // pattern.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // patternOffset.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // this.writeOperator(Operators.setDashPattern);\n // }\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPattern = function (pattern, patternOffset) {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n this.setLineDashPatternHelper(pattern, patternOffset);\n };\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPatternHelper = function (pattern, patternOffset) {\n var tempPattern = '[';\n if (pattern.length > 1) {\n for (var index = 0; index < pattern.length; index++) {\n if (index === pattern.length - 1) {\n tempPattern += pattern[index].toString();\n }\n else {\n tempPattern += pattern[index].toString() + ' ';\n }\n }\n }\n tempPattern += '] ';\n tempPattern += patternOffset.toString();\n tempPattern += ' ' + Operators.setDashPattern;\n this.stream.write(tempPattern);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `miter limit`.\n * @private\n */\n PdfStreamWriter.prototype.setMiterLimit = function (miterLimit) {\n this.stream.write(PdfNumber.floatToString(miterLimit));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setMiterLimit);\n };\n /**\n * Sets the `width of the line`.\n * @private\n */\n PdfStreamWriter.prototype.setLineWidth = function (width) {\n this.stream.write(PdfNumber.floatToString(width));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineWidth);\n };\n /**\n * Sets the `line cap`.\n * @private\n */\n PdfStreamWriter.prototype.setLineCap = function (lineCapStyle) {\n this.stream.write((lineCapStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineCapStyle);\n };\n /**\n * Sets the `line join`.\n * @private\n */\n PdfStreamWriter.prototype.setLineJoin = function (lineJoinStyle) {\n this.stream.write((lineJoinStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineJoinStyle);\n };\n Object.defineProperty(PdfStreamWriter.prototype, \"position\", {\n //IPdfWriter members\n /**\n * Gets or sets the current `position` within the stream.\n * @private\n */\n get: function () {\n return this.stream.position;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"length\", {\n /**\n * Gets `stream length`.\n * @private\n */\n get: function () {\n var returnValue = 0;\n if (this.stream.data.length !== 0 && this.stream.data.length !== -1) {\n for (var index = 0; index < this.stream.data.length; index++) {\n returnValue += this.stream.data[index].length;\n }\n }\n return returnValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"document\", {\n /**\n * Gets and Sets the `current document`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStreamWriter;\n}());\nexport { PdfStreamWriter };\n","/**\n * PdfPen.ts class for EJ2-PDF\n */\nimport { PdfColor } from './pdf-color';\nimport { PdfDashStyle, PdfColorSpace } from './enum';\nimport { PdfBrush } from './brushes/pdf-brush';\n/**\n * `PdfPen` class defining settings for drawing operations, that determines the color,\n * width, and style of the drawing elements.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfPen = /** @class */ (function () {\n function PdfPen(arg1, arg2) {\n //Fields\n /**\n * Specifies the `color of the pen`.\n * @default new PdfColor()\n * @private\n */\n this.pdfColor = new PdfColor(0, 0, 0);\n /**\n * Specifies the `dash offset of the pen`.\n * @default 0\n * @private\n */\n this.dashOffsetValue = 0;\n /**\n * Specifies the `dash pattern of the pen`.\n * @default [0]\n * @private\n */\n this.penDashPattern = [0];\n /**\n * Specifies the `dash style of the pen`.\n * @default Solid\n * @private\n */\n this.pdfDashStyle = PdfDashStyle.Solid;\n /**\n * Specifies the `line cap of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineCap = 0;\n /**\n * Specifies the `line join of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineJoin = 0;\n /**\n * Specifies the `width of the pen`.\n * @default 1.0\n * @private\n */\n this.penWidth = 1.0;\n /**\n * Specifies the `mitter limit of the pen`.\n * @default 0.0\n * @private\n */\n this.internalMiterLimit = 0.0;\n /**\n * Stores the `colorspace` value.\n * @default Rgb\n * @private\n */\n this.colorSpace = PdfColorSpace.Rgb;\n if (typeof arg2 === 'number') {\n this.constructor(arg1);\n this.width = arg2;\n }\n else if (typeof arg2 === 'undefined' && arg1 instanceof PdfBrush) {\n this.setBrush(arg1);\n }\n else if (typeof arg2 === 'undefined' && arg1 instanceof PdfColor) {\n this.color = arg1;\n }\n }\n Object.defineProperty(PdfPen.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color of the pen`.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashOffset\", {\n /**\n * Gets or sets the `dash offset of the pen`.\n * @private\n */\n get: function () {\n if (typeof this.dashOffsetValue === 'undefined' || this.dashOffsetValue == null) {\n return 0;\n }\n else {\n return this.dashOffsetValue;\n }\n },\n set: function (value) {\n this.dashOffsetValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashPattern\", {\n /**\n * Gets or sets the `dash pattern of the pen`.\n * @private\n */\n get: function () {\n return this.penDashPattern;\n },\n set: function (value) {\n this.penDashPattern = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashStyle\", {\n /**\n * Gets or sets the `dash style of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen style\n * pen.dashStyle = PdfDashStyle.DashDot;\n * // get pen style\n * let style : PdfDashStyle = pen.dashStyle;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfDashStyle;\n },\n set: function (value) {\n if (this.pdfDashStyle !== value) {\n this.pdfDashStyle = value;\n switch (this.pdfDashStyle) {\n case PdfDashStyle.Custom:\n break;\n case PdfDashStyle.Dash:\n this.penDashPattern = [3, 1];\n break;\n case PdfDashStyle.Dot:\n this.penDashPattern = [1, 1];\n break;\n case PdfDashStyle.DashDot:\n this.penDashPattern = [3, 1, 1, 1];\n break;\n case PdfDashStyle.DashDotDot:\n this.penDashPattern = [3, 1, 1, 1, 1, 1];\n break;\n case PdfDashStyle.Solid:\n break;\n default:\n this.pdfDashStyle = PdfDashStyle.Solid;\n this.penDashPattern = [0];\n break;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineCap\", {\n /**\n * Gets or sets the `line cap of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineCap;\n },\n set: function (value) {\n this.pdfLineCap = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineJoin\", {\n /**\n * Gets or sets the `line join style of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineJoin;\n },\n set: function (value) {\n this.pdfLineJoin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"miterLimit\", {\n /**\n * Gets or sets the `miter limit`.\n * @private\n */\n get: function () {\n return this.internalMiterLimit;\n },\n set: function (value) {\n this.internalMiterLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"width\", {\n /**\n * Gets or sets the `width of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen width\n * pen.width = 2;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.penWidth;\n },\n set: function (value) {\n this.penWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Helper\n /**\n * `Clones` this instance of PdfPen class.\n * @private\n */\n PdfPen.prototype.clone = function () {\n var pen = this;\n return pen;\n };\n /**\n * `Sets the brush`.\n * @private\n */\n PdfPen.prototype.setBrush = function (brush) {\n var sBrush = brush;\n this.color = sBrush.color;\n this.pdfBrush = sBrush;\n };\n /**\n * `Monitors the changes`.\n * @private\n */\n PdfPen.prototype.monitorChanges = function (currentPen, streamWriter, getResources, saveState, currentColorSpace, matrix) {\n var diff = false;\n saveState = true;\n if (currentPen == null) {\n diff = true;\n }\n diff = this.dashControl(currentPen, saveState, streamWriter);\n streamWriter.setLineWidth(this.width);\n streamWriter.setLineJoin(this.lineJoin);\n streamWriter.setLineCap(this.lineCap);\n var miterLimit = this.miterLimit;\n if (miterLimit > 0) {\n streamWriter.setMiterLimit(miterLimit);\n diff = true;\n }\n var brush = this.pdfBrush;\n streamWriter.setColorAndSpace(this.color, currentColorSpace, true);\n diff = true;\n return diff;\n };\n /**\n * `Controls the dash style` and behaviour of each line.\n * @private\n */\n PdfPen.prototype.dashControl = function (pen, saveState, streamWriter) {\n saveState = true;\n var lineWidth = this.width;\n var pattern = this.getPattern();\n streamWriter.setLineDashPattern(pattern, this.dashOffset * lineWidth);\n return saveState;\n };\n /**\n * `Gets the pattern` of PdfPen.\n * @private\n */\n PdfPen.prototype.getPattern = function () {\n var pattern = this.dashPattern;\n for (var i = 0; i < pattern.length; ++i) {\n pattern[i] *= this.width;\n }\n return pattern;\n };\n return PdfPen;\n}());\nexport { PdfPen };\n","/**\n * PdfTransformationMatrix.ts class for EJ2-PDF\n */\nimport { PointF } from './../drawing/pdf-drawing';\nimport { PdfNumber } from './../primitives/pdf-number';\n/**\n * Class for representing Root `transformation matrix`.\n */\nvar PdfTransformationMatrix = /** @class */ (function () {\n function PdfTransformationMatrix(value) {\n /**\n * Value for `angle converting`.\n * @default 180.0 / Math.PI\n * @private\n */\n this.radDegFactor = 180.0 / Math.PI;\n if (typeof value === 'undefined') {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, 1.00, 0.00, 0.00);\n }\n else {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, -1.00, 0.00, 0.00);\n }\n }\n Object.defineProperty(PdfTransformationMatrix.prototype, \"matrix\", {\n // Properties\n /**\n * Gets or sets the `internal matrix object`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n set: function (value) {\n this.transformationMatrix = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.translate = function (offsetX, offsetY) {\n this.transformationMatrix.translate(offsetX, offsetY);\n };\n /**\n * `Scales` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.scale = function (scaleX, scaleY) {\n this.transformationMatrix.elements[0] = scaleX;\n this.transformationMatrix.elements[3] = scaleY;\n };\n /**\n * `Rotates` coordinate system in counterclockwise direction.\n * @private\n */\n PdfTransformationMatrix.prototype.rotate = function (angle) {\n //Convert from degree to radian \n angle = (angle * Math.PI) / 180;\n //Rotation \n this.transformationMatrix.elements[0] = Math.cos(angle);\n this.transformationMatrix.elements[1] = Math.sin(angle);\n this.transformationMatrix.elements[2] = -Math.sin(angle);\n this.transformationMatrix.elements[3] = Math.cos(angle);\n };\n // Overrides\n /**\n * Gets `PDF representation`.\n * @private\n */\n PdfTransformationMatrix.prototype.toString = function () {\n var builder = '';\n var whitespace = ' ';\n for (var i = 0, len = this.transformationMatrix.elements.length; i < len; i++) {\n var temp = this.matrix.elements[i];\n builder += PdfNumber.floatToString(this.transformationMatrix.elements[i]);\n builder += whitespace;\n }\n return builder;\n };\n // Implementation\n /**\n * `Multiplies` matrices (changes coordinate system.)\n * @private\n */\n PdfTransformationMatrix.prototype.multiply = function (matrix) {\n this.transformationMatrix.multiply(matrix.matrix);\n };\n /**\n * Converts `degrees to radians`.\n * @private\n */\n PdfTransformationMatrix.degreesToRadians = function (degreesX) {\n return this.degRadFactor * degreesX;\n };\n /**\n * Converts `radians to degrees`.\n * @private\n */\n PdfTransformationMatrix.prototype.radiansToDegrees = function (radians) {\n return this.radDegFactor * radians;\n };\n /**\n * `Clones` this instance of PdfTransformationMatrix.\n * @private\n */\n PdfTransformationMatrix.prototype.clone = function () {\n return this;\n };\n // Constants\n /**\n * Value for `angle converting`.\n * @default Math.PI / 180.0\n * @private\n */\n PdfTransformationMatrix.degRadFactor = Math.PI / 180.0;\n return PdfTransformationMatrix;\n}());\nexport { PdfTransformationMatrix };\nvar Matrix = /** @class */ (function () {\n function Matrix(arg1, arg2, arg3, arg4, arg5, arg6) {\n if (typeof arg1 === 'undefined') {\n this.metrixElements = [];\n }\n else if (typeof arg1 === 'number') {\n this.constructor();\n this.metrixElements.push(arg1);\n this.metrixElements.push(arg2);\n this.metrixElements.push(arg3);\n this.metrixElements.push(arg4);\n this.metrixElements.push(arg5);\n this.metrixElements.push(arg6);\n }\n else {\n this.metrixElements = arg1;\n }\n }\n Object.defineProperty(Matrix.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `elements`.\n * @private\n */\n get: function () {\n return this.metrixElements;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetX\", {\n /**\n * Gets the off set `X`.\n * @private\n */\n get: function () {\n return this.metrixElements[4];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetY\", {\n /**\n * Gets the off set `Y`.\n * @private\n */\n get: function () {\n return this.metrixElements[5];\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n Matrix.prototype.translate = function (offsetX, offsetY) {\n this.metrixElements[4] = offsetX;\n this.metrixElements[5] = offsetY;\n };\n /**\n * `Translates` the specified offset X.\n * @private\n */\n Matrix.prototype.transform = function (point) {\n var x = point.x;\n var y = point.y;\n var x2 = x * this.elements[0] + y * this.elements[2] + this.offsetX;\n var y2 = x * this.elements[1] + y * this.elements[3] + this.offsetY;\n return new PointF(x2, y2);\n };\n /**\n * `Multiplies matrices` (changes coordinate system.)\n * @private\n */\n Matrix.prototype.multiply = function (matrix) {\n var tempMatrix = [];\n tempMatrix.push(this.elements[0] * matrix.elements[0] + this.elements[1] * matrix.elements[2]);\n tempMatrix[1] = (this.elements[0] * matrix.elements[1] + this.elements[1] * matrix.elements[3]);\n tempMatrix[2] = (this.elements[2] * matrix.elements[0] + this.elements[3] * matrix.elements[2]);\n tempMatrix[3] = (this.elements[2] * matrix.elements[1] + this.elements[3] * matrix.elements[3]);\n tempMatrix[4] = (this.offsetX * matrix.elements[0] + this.offsetY * matrix.elements[2] + matrix.offsetX);\n tempMatrix[5] = (this.offsetX * matrix.elements[1] + this.offsetY * matrix.elements[3] + matrix.offsetY);\n for (var i = 0; i < tempMatrix.length; i++) {\n this.elements[i] = tempMatrix[i];\n }\n };\n // IDisposable Members\n /**\n * `Dispose` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.dispose = function () {\n this.metrixElements = null;\n };\n // ICloneable Members\n /**\n * `Clones` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.clone = function () {\n var m = new Matrix(this.metrixElements);\n return m;\n };\n return Matrix;\n}());\nexport { Matrix };\n","/**\n * `constants.ts` class for EJ2-PDF\n * @private\n */\nvar ProcedureSets = /** @class */ (function () {\n function ProcedureSets() {\n /**\n * Specifies the `PDF` procedure set.\n * @private\n */\n this.pdf = 'PDF';\n /**\n * Specifies the `Text` procedure set.\n * @private\n */\n this.text = 'Text';\n /**\n * Specifies the `ImageB` procedure set.\n * @private\n */\n this.imageB = 'ImageB';\n /**\n * Specifies the `ImageC` procedure set.\n * @private\n */\n this.imageC = 'ImageC';\n /**\n * Specifies the `ImageI` procedure set.\n * @private\n */\n this.imageI = 'ImageI';\n }\n return ProcedureSets;\n}());\nexport { ProcedureSets };\n","/**\n * Dictionary class\n * @private\n * @hidden\n */\nvar TemporaryDictionary = /** @class */ (function () {\n function TemporaryDictionary() {\n /**\n * @hidden\n * @private\n */\n this.mKeys = [];\n /**\n * @hidden\n * @private\n */\n this.mValues = [];\n }\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.size = function () {\n return this.mKeys.length;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.add = function (key, value) {\n if (key === undefined || key === null || value === undefined || value === null) {\n throw new ReferenceError('Provided key or value is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n return 1;\n }\n else {\n throw new RangeError('An item with the same key has already been added.');\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.keys = function () {\n return this.mKeys;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.values = function () {\n return this.mValues;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.getValue = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n return this.mValues[index];\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.setValue = function (key, value) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n }\n else {\n this.mValues[index] = value;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.remove = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.mKeys.splice(index, 1);\n this.mValues.splice(index, 1);\n return true;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.containsKey = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n return false;\n }\n return true;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.clear = function () {\n this.mKeys = [];\n this.mValues = [];\n };\n return TemporaryDictionary;\n}());\nexport { TemporaryDictionary };\n","import { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * Represents a simple `transparency`.\n * @private\n */\nvar PdfTransparency = /** @class */ (function () {\n // Properties\n // /**\n // * Gets the `stroke` operation alpha value.\n // * @private\n // */\n // public get stroke() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.CA);\n // return result;\n // }\n // /**\n // * Gets the `fill` operation alpha value.\n // * @private\n // */\n // public get fill() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.ca);\n // return result;\n // }\n // /**\n // * Gets the `blend mode`.\n // * @private\n // */\n // public get mode() : PdfBlendMode {\n // let result : string = this.getName(this.dictionaryProperties.ca);\n // return PdfBlendMode.Normal;\n // }\n // Constructors\n /**\n * Initializes a new instance of the `Transparency` class.\n * @private\n */\n function PdfTransparency(stroke, fill, mode) {\n // Fields\n /**\n * Internal variable to store `dictionary`.\n * @default new PdfDictionary()\n * @private\n */\n this.dictionary = new PdfDictionary();\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new DictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.dictionary.items.setValue(this.dictionaryProperties.CA, new PdfNumber(stroke));\n this.dictionary.items.setValue(this.dictionaryProperties.ca, new PdfNumber(fill));\n this.dictionary.items.setValue(this.dictionaryProperties.BM, new PdfName(mode.toString()));\n }\n Object.defineProperty(PdfTransparency.prototype, \"element\", {\n // // Implementation\n // /**\n // * Gets the `number value`.\n // * @private\n // */\n // private getNumber(keyName : string) : number {\n // let result : number = 0.0;\n // let numb : PdfNumber = this.dictionary.items.getValue(keyName) as PdfNumber;\n // result = numb.intValue;\n // return result;\n // }\n // /**\n // * Gets the `name value`.\n // * @private\n // */\n // private getName(keyName : string) : string {\n // let result : string = null;\n // let name : PdfName = this.dictionary.items.getValue(keyName) as PdfName;\n // result = name.value;\n // return result;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.dictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTransparency;\n}());\nexport { PdfTransparency };\n","/**\n * Represent a `collection of automatic fields information`.\n * @private\n */\nvar PdfAutomaticFieldInfoCollection = /** @class */ (function () {\n /**\n * Initializes a new instance of the 'PdfPageNumberFieldInfoCollection' class.\n * @private\n */\n function PdfAutomaticFieldInfoCollection() {\n /**\n * Internal variable to store instance of `pageNumberFields` class.\n * @private\n */\n this.automaticFieldsInformation = [];\n //\n }\n Object.defineProperty(PdfAutomaticFieldInfoCollection.prototype, \"automaticFields\", {\n /**\n * Gets the `page number fields collection`.\n * @private\n */\n get: function () {\n return this.automaticFieldsInformation;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /// Adds the specified field info.\n /**\n * Add page number field into collection.\n * @private\n */\n PdfAutomaticFieldInfoCollection.prototype.add = function (fieldInfo) {\n return this.automaticFields.push(fieldInfo);\n };\n return PdfAutomaticFieldInfoCollection;\n}());\nexport { PdfAutomaticFieldInfoCollection };\n","/**\n * Represents a base class for all page graphics elements.\n */\nvar PdfGraphicsElement = /** @class */ (function () {\n // Constructors\n function PdfGraphicsElement() {\n //\n }\n /**\n * `Draws` the page number field.\n * @public\n */\n PdfGraphicsElement.prototype.drawHelper = function (graphics, x, y) {\n var bNeedSave = (x !== 0 || y !== 0);\n var gState = null;\n // Translate co-ordinates.\n if (bNeedSave) {\n // Save state.\n gState = graphics.save();\n graphics.translateTransform(x, y);\n }\n this.drawInternal(graphics);\n if (bNeedSave) {\n // Restore state.\n graphics.restore(gState);\n }\n };\n return PdfGraphicsElement;\n}());\nexport { PdfGraphicsElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfAutomaticField.ts class for EJ2-PDF\n */\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfDocument } from './../pdf-document';\nimport { PdfGraphicsElement } from './../../graphics/figures/base/graphics-element';\nimport { PdfAutomaticFieldInfo } from './automatic-field-info';\n/**\n * Represents a fields which is calculated before the document saves.\n */\nvar PdfAutomaticField = /** @class */ (function (_super) {\n __extends(PdfAutomaticField, _super);\n // Constructors\n function PdfAutomaticField() {\n var _this = _super.call(this) || this;\n // Fields\n _this.internalBounds = new RectangleF(0, 0, 0, 0);\n _this.internalTemplateSize = new SizeF(0, 0);\n return _this;\n }\n Object.defineProperty(PdfAutomaticField.prototype, \"bounds\", {\n // Properties\n get: function () {\n return this.internalBounds;\n },\n set: function (value) {\n this.internalBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"size\", {\n get: function () {\n return new SizeF(this.bounds.width, this.bounds.height);\n },\n set: function (value) {\n this.bounds.width = value.width;\n this.bounds.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"location\", {\n get: function () {\n return new PointF(this.bounds.x, this.bounds.y);\n },\n set: function (value) {\n this.bounds.x = value.x;\n this.bounds.y = value.y;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"font\", {\n get: function () {\n return this.internalFont;\n },\n set: function (value) {\n this.internalFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"brush\", {\n get: function () {\n return this.internalBrush;\n },\n set: function (value) {\n this.internalBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"pen\", {\n get: function () {\n return this.internalPen;\n },\n set: function (value) {\n this.internalPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"stringFormat\", {\n get: function () {\n return this.internalStringFormat;\n },\n set: function (value) {\n this.internalStringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfAutomaticField.prototype.performDrawHelper = function (graphics, location, scalingX, scalingY) {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n var text = this.getValue(graphics);\n this.internalTemplateSize = this.getFont().measureString(text, this.size, this.stringFormat);\n }\n };\n PdfAutomaticField.prototype.draw = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n var location_1 = new PointF(0, 0);\n this.draw(arg1, location_1);\n }\n else if (arg2 instanceof PointF) {\n this.draw(arg1, arg2.x, arg2.y);\n }\n else {\n this.drawHelper(arg1, arg2, arg3);\n var info = new PdfAutomaticFieldInfo(this, new PointF(arg2, arg3));\n arg1.automaticFields.add(info);\n }\n };\n PdfAutomaticField.prototype.getSize = function () {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n return this.internalTemplateSize;\n }\n else {\n return this.size;\n }\n };\n PdfAutomaticField.prototype.drawInternal = function (graphics) {\n //\n };\n /* tslint:disable */\n PdfAutomaticField.prototype.getBrush = function () {\n return (typeof this.internalBrush === 'undefined' || this.internalBrush == null) ? new PdfSolidBrush(new PdfColor(0, 0, 0)) : this.internalBrush;\n };\n PdfAutomaticField.prototype.getFont = function () {\n return (typeof this.internalFont === 'undefined' || this.internalFont == null) ? PdfDocument.defaultFont : this.internalFont;\n };\n /* tslint:enable */\n PdfAutomaticField.prototype.getPageFromGraphics = function (graphics) {\n if (typeof graphics.page !== 'undefined' && graphics.page !== null) {\n var page = graphics.page;\n return page;\n }\n else {\n var page = graphics.currentPage;\n return page;\n }\n };\n return PdfAutomaticField;\n}(PdfGraphicsElement));\nexport { PdfAutomaticField };\n","/**\n * PdfAutomaticFieldInfo.ts class for EJ2-PDF\n * @private\n */\nimport { PointF } from './../../drawing/pdf-drawing';\nimport { PdfAutomaticField } from './automatic-field';\n/**\n * Represents information about the automatic field.\n * @private\n */\nvar PdfAutomaticFieldInfo = /** @class */ (function () {\n function PdfAutomaticFieldInfo(field, location, scaleX, scaleY) {\n // Fields\n /**\n * Internal variable to store location of the field.\n * @private\n */\n this.pageNumberFieldLocation = new PointF();\n /**\n * Internal variable to store field.\n * @private\n */\n this.pageNumberField = null;\n /**\n * Internal variable to store x scaling factor.\n * @private\n */\n this.scaleX = 1;\n /**\n * Internal variable to store y scaling factor.\n * @private\n */\n this.scaleY = 1;\n if (typeof location === 'undefined' && field instanceof PdfAutomaticFieldInfo) {\n this.pageNumberField = field.field;\n this.pageNumberFieldLocation = field.location;\n this.scaleX = field.scalingX;\n this.scaleY = field.scalingY;\n }\n else if (typeof scaleX === 'undefined' && location instanceof PointF && field instanceof PdfAutomaticField) {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n }\n else {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n this.scaleX = scaleX;\n this.scaleY = scaleY;\n }\n }\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"location\", {\n /* tslint:enable */\n // Properties\n /**\n * Gets or sets the location.\n * @private\n */\n get: function () {\n return this.pageNumberFieldLocation;\n },\n set: function (value) {\n this.pageNumberFieldLocation = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"field\", {\n /**\n * Gets or sets the field.\n * @private\n */\n get: function () {\n return this.pageNumberField;\n },\n set: function (value) {\n this.pageNumberField = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingX\", {\n /**\n * Gets or sets the scaling X factor.\n * @private\n */\n get: function () {\n return this.scaleX;\n },\n set: function (value) {\n this.scaleX = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingY\", {\n /**\n * Gets or sets the scaling Y factor.\n * @private\n */\n get: function () {\n return this.scaleY;\n },\n set: function (value) {\n this.scaleY = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAutomaticFieldInfo;\n}());\nexport { PdfAutomaticFieldInfo };\n","/**\n * ByteArray class\n * Used to keep information about image stream as byte array.\n * @private\n */\nvar ByteArray = /** @class */ (function () {\n /**\n * Initialize the new instance for `byte-array` class\n * @hidden\n * @private\n */\n function ByteArray(length) {\n /**\n * Current stream `position`.\n * @default 0\n * @private\n */\n this.mPosition = 0;\n this.buffer = new Uint8Array(length);\n this.dataView = new DataView(this.buffer.buffer);\n }\n Object.defineProperty(ByteArray.prototype, \"position\", {\n /**\n * Gets and Sets a current `position` of byte array.\n * @hidden\n * @private\n */\n get: function () {\n return this.mPosition;\n },\n set: function (value) {\n this.mPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Read` from current stream position.\n * @default 0\n * @hidden\n * @private\n */\n ByteArray.prototype.read = function (buffer, offset, count) {\n for (var index = offset; index < count; index++) {\n var position = this.position;\n buffer.buffer[index] = this.readByte(position);\n this.position++;\n }\n };\n /**\n * @hidden\n */\n ByteArray.prototype.getBuffer = function (index) {\n return this.buffer[index];\n };\n /**\n * @hidden\n */\n ByteArray.prototype.writeFromBase64String = function (base64) {\n var arr = this.encodedString(base64);\n this.buffer = arr;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n var resultIndex = 0;\n var dataUrlPrefix = 'data:';\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n var output = new Uint8Array(totalLength | 0);\n while (i < input.length) {\n enc1 = keyStr.indexOf(input.charAt(i++));\n enc2 = keyStr.indexOf(input.charAt(i++));\n enc3 = keyStr.indexOf(input.charAt(i++));\n enc4 = keyStr.indexOf(input.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n output[resultIndex++] = chr1;\n output[resultIndex++] = chr2;\n output[resultIndex++] = chr3;\n }\n return output;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.readByte = function (offset) {\n return (this.buffer[offset]);\n };\n Object.defineProperty(ByteArray.prototype, \"internalBuffer\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ByteArray.prototype, \"count\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer.byteLength;\n },\n enumerable: true,\n configurable: true\n });\n return ByteArray;\n}());\nexport { ByteArray };\n","/**\n * `PdfBoolean` class is used to perform boolean related primitive operations.\n * @private\n */\nvar PdfBoolean = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfBoolean` class.\n * @private\n */\n function PdfBoolean(value) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.currentPosition = -1;\n this.value = value;\n }\n Object.defineProperty(PdfBoolean.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.objectStatus;\n },\n set: function (value) {\n this.objectStatus = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.saving;\n },\n set: function (value) {\n this.saving = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index;\n },\n set: function (value) {\n this.index = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfBoolean.prototype.save = function (writer) {\n writer.write(this.boolToStr(this.value));\n };\n /**\n * Creates a `copy of PdfBoolean`.\n * @private\n */\n PdfBoolean.prototype.clone = function (crossTable) {\n var newNumber = new PdfBoolean(this.value);\n return newNumber;\n };\n // Implementation\n /**\n * Converts `boolean to string` - 0/1 'true'/'false'.\n * @private\n */\n PdfBoolean.prototype.boolToStr = function (value) {\n return value ? 'true' : 'false';\n };\n return PdfBoolean;\n}());\nexport { PdfBoolean };\n","/**\n * public Enum for `PdfLayoutType`.\n * @private\n */\nexport var PdfLayoutType;\n(function (PdfLayoutType) {\n /**\n * Specifies the type of `Paginate`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"Paginate\"] = 0] = \"Paginate\";\n /**\n * Specifies the type of `OnePage`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"OnePage\"] = 1] = \"OnePage\";\n})(PdfLayoutType || (PdfLayoutType = {}));\n/**\n * public Enum for `PdfLayoutBreakType`.\n * @private\n */\nexport var PdfLayoutBreakType;\n(function (PdfLayoutBreakType) {\n /**\n * Specifies the type of `FitPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitPage\"] = 0] = \"FitPage\";\n /**\n * Specifies the type of `FitElement`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitElement\"] = 1] = \"FitElement\";\n /**\n * Specifies the type of `FitColumnsToPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitColumnsToPage\"] = 2] = \"FitColumnsToPage\";\n})(PdfLayoutBreakType || (PdfLayoutBreakType = {}));\n","/**\n * Used to perform `convertion between pixels and points`.\n * @private\n */\nvar PdfUnitConverter = /** @class */ (function () {\n //constructors\n /**\n * Initializes a new instance of the `UnitConvertor` class with DPI value.\n * @private\n */\n function PdfUnitConverter(dpi) {\n this.updateProportionsHelper(dpi);\n }\n /**\n * `Converts` the value, from one graphics unit to another graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertUnits = function (value, from, to) {\n return this.convertFromPixels(this.convertToPixels(value, from), to);\n };\n /**\n * Converts the value `to pixel` from specified graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertToPixels = function (value, from) {\n var index = from;\n var result = (value * this.proportions[index]);\n return result;\n };\n /**\n * Converts value, to specified graphics unit `from Pixel`.\n * @private\n */\n PdfUnitConverter.prototype.convertFromPixels = function (value, to) {\n var index = to;\n var result = (value / this.proportions[index]);\n return result;\n };\n /**\n * `Update proportions` matrix according to Graphics settings.\n * @private\n */\n PdfUnitConverter.prototype.updateProportionsHelper = function (pixelPerInch) {\n this.proportions = [\n pixelPerInch / 2.54,\n pixelPerInch / 6.0,\n 1,\n pixelPerInch / 72.0,\n pixelPerInch,\n pixelPerInch / 300.0,\n pixelPerInch / 25.4 // Millimeter\n ];\n };\n //Fields\n /**\n * Indicates default `horizontal resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.horizontalResolution = 96;\n /**\n * Indicates default `vertical resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.verticalResolution = 96;\n return PdfUnitConverter;\n}());\nexport { PdfUnitConverter };\n","import { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfGraphicsUnit } from './../enum';\nimport { PdfUnitConverter } from './../unit-convertor';\n/**\n * `PdfImage` class represents the base class for images and provides functionality for the 'PdfBitmap' class.\n * @private\n */\nvar PdfImage = /** @class */ (function () {\n function PdfImage() {\n }\n Object.defineProperty(PdfImage.prototype, \"width\", {\n /**\n * Gets and Sets the `width` of an image.\n * @private\n */\n get: function () {\n return this.imageWidth;\n },\n set: function (value) {\n this.imageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"height\", {\n /**\n * Gets and Sets the `height` of an image.\n * @private\n */\n get: function () {\n return this.imageHeight;\n },\n set: function (value) {\n this.imageHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"size\", {\n /**\n * Gets or sets the size of the image.\n * @private\n */\n set: function (value) {\n this.width = value.width;\n this.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"physicalDimension\", {\n /**\n * Gets the `physical dimension` of an image.\n * @private\n */\n get: function () {\n this.imagePhysicalDimension = this.getPointSize(this.width, this.height, this.horizontalResolution, this.verticalResolution);\n return new SizeF(this.width, this.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"element\", {\n // /**\n // * Gets the `image stream as string`.\n // * @private\n // */\n // public static fromString(string : string) : PdfImage {\n // let image : PdfImage = new PdfBitmap(string);\n // return image;\n // }\n /**\n * Gets the `element` image stream.\n * @private\n */\n get: function () {\n return this.imageStream;\n },\n enumerable: true,\n configurable: true\n });\n PdfImage.prototype.getPointSize = function (width, height, horizontalResolution, verticalResolution) {\n if (typeof horizontalResolution === 'undefined') {\n var dpiX = PdfUnitConverter.horizontalResolution;\n var dpiY = PdfUnitConverter.verticalResolution;\n var size = this.getPointSize(width, height, dpiX, dpiY);\n return size;\n }\n else {\n var ucX = new PdfUnitConverter(horizontalResolution);\n var ucY = new PdfUnitConverter(verticalResolution);\n var ptWidth = ucX.convertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var ptHeight = ucY.convertUnits(height, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var size = new SizeF(ptWidth, ptHeight);\n return size;\n }\n };\n return PdfImage;\n}());\nexport { PdfImage };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfBitmap.ts class for EJ2-PDF\n */\nimport { ImageDecoder } from './../../graphics/images/image-decoder';\nimport { ByteArray } from './../../graphics/images/byte-array';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfImage } from './pdf-image';\n/**\n * The 'PdfBitmap' contains methods and properties to handle the Bitmap images.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfBitmap = /** @class */ (function (_super) {\n __extends(PdfBitmap, _super);\n /**\n * Create an instance for `PdfBitmap` class.\n * @param encodedString Base64 string of an image.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * //\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * //\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n function PdfBitmap(encodedString) {\n var _this = _super.call(this) || this;\n //Fields\n /**\n * Specifies the `status` of an image.\n * @default true.\n * @hidden\n * @private\n */\n _this.imageStatus = true;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n _this.loadImage(encodedString);\n return _this;\n }\n /**\n * `Load image`.\n * @hidden\n * @private\n */\n PdfBitmap.prototype.loadImage = function (encodedString) {\n var task = this.initializeAsync(encodedString);\n };\n /**\n * `Initialize` image parameters.\n * @private\n */\n PdfBitmap.prototype.initializeAsync = function (encodedString) {\n var byteArray = new ByteArray(encodedString.length);\n byteArray.writeFromBase64String(encodedString);\n this.decoder = new ImageDecoder(byteArray);\n this.height = this.decoder.height;\n this.width = this.decoder.width;\n // FrameCount = BitmapImageDecoder.FrameCount;\n this.bitsPerComponent = this.decoder.bitsPerComponent;\n };\n /**\n * `Saves` the image into stream.\n * @private\n */\n PdfBitmap.prototype.save = function () {\n this.imageStatus = true;\n this.imageStream = this.decoder.getImageDictionary();\n };\n return PdfBitmap;\n}(PdfImage));\nexport { PdfBitmap };\n","/**\n * TtfTableInfo.ts class for EJ2-PDF\n */\nvar TtfTableInfo = /** @class */ (function () {\n function TtfTableInfo() {\n }\n Object.defineProperty(TtfTableInfo.prototype, \"empty\", {\n //Properties\n /**\n * Gets a value indicating whether this table is empty.\n * @private\n */\n get: function () {\n var empty = (this.offset === this.length && this.length === this.checksum && this.checksum === 0);\n return empty;\n },\n enumerable: true,\n configurable: true\n });\n return TtfTableInfo;\n}());\nexport { TtfTableInfo };\n","var TtfNameTable = /** @class */ (function () {\n function TtfNameTable() {\n }\n return TtfNameTable;\n}());\nexport { TtfNameTable };\n","/**\n * TtfNameRecord.ts class for EJ2-PDF\n */\nvar TtfNameRecord = /** @class */ (function () {\n function TtfNameRecord() {\n }\n return TtfNameRecord;\n}());\nexport { TtfNameRecord };\n","/**\n * TtfHeadTable.ts class for EJ2-PDF\n */\nvar TtfHeadTable = /** @class */ (function () {\n function TtfHeadTable() {\n }\n return TtfHeadTable;\n}());\nexport { TtfHeadTable };\n","var TtfMetrics = /** @class */ (function () {\n function TtfMetrics() {\n }\n Object.defineProperty(TtfMetrics.prototype, \"isItalic\", {\n //Properties\n /**\n * Gets a value indicating whether this instance is italic.\n */\n get: function () {\n return ((this.macStyle & 2) !== 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfMetrics.prototype, \"isBold\", {\n /**\n * Gets a value indicating whether this instance is bold.\n */\n get: function () {\n return ((this.macStyle & 1) !== 0);\n },\n enumerable: true,\n configurable: true\n });\n return TtfMetrics;\n}());\nexport { TtfMetrics };\n","/**\n * TtfHorizontalHeaderTable.ts class for EJ2-PDF\n */\nvar TtfHorizontalHeaderTable = /** @class */ (function () {\n function TtfHorizontalHeaderTable() {\n }\n return TtfHorizontalHeaderTable;\n}());\nexport { TtfHorizontalHeaderTable };\n","/**\n * TtfOS2Table.ts class for EJ2-PDF\n * The OS/2 table consists of a set of metrics that are required by Windows and OS/2.\n */\nvar TtfOS2Table = /** @class */ (function () {\n function TtfOS2Table() {\n }\n return TtfOS2Table;\n}());\nexport { TtfOS2Table };\n","/**\n * TtfPostTable.ts class for EJ2-PDF\n */\nvar TtfPostTable = /** @class */ (function () {\n function TtfPostTable() {\n }\n return TtfPostTable;\n}());\nexport { TtfPostTable };\n","/**\n * TtfLongHorMetric.ts class for EJ2-PDF\n */\nvar TtfLongHorMetric = /** @class */ (function () {\n function TtfLongHorMetric() {\n }\n return TtfLongHorMetric;\n}());\nexport { TtfLongHorMetric };\n","/**\n * TtfCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfCmapSubTable = /** @class */ (function () {\n function TtfCmapSubTable() {\n }\n return TtfCmapSubTable;\n}());\nexport { TtfCmapSubTable };\n","/**\n * TtfCmapTable.ts class for EJ2-PDF\n */\nvar TtfCmapTable = /** @class */ (function () {\n function TtfCmapTable() {\n }\n return TtfCmapTable;\n}());\nexport { TtfCmapTable };\n","/**\n * TtfGlyphInfo.ts class for EJ2-PDF\n */\nvar TtfGlyphInfo = /** @class */ (function () {\n function TtfGlyphInfo() {\n }\n Object.defineProperty(TtfGlyphInfo.prototype, \"empty\", {\n //Properties\n /**\n * Gets a value indicating whether this TtfGlyphInfo is empty.\n */\n get: function () {\n var empty = (this.index === this.width && this.width === this.charCode && this.charCode === 0);\n return empty;\n },\n enumerable: true,\n configurable: true\n });\n //IComparable implementation\n /**\n * Compares two WidthDescriptor objects.\n */\n TtfGlyphInfo.prototype.compareTo = function (obj) {\n var glyph = obj;\n return this.index - glyph.index;\n };\n return TtfGlyphInfo;\n}());\nexport { TtfGlyphInfo };\n","/**\n * TtfLocaTable.ts class for EJ2-PDF\n */\nvar TtfLocaTable = /** @class */ (function () {\n function TtfLocaTable() {\n }\n return TtfLocaTable;\n}());\nexport { TtfLocaTable };\n","/**\n * TtfAppleCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfAppleCmapSubTable = /** @class */ (function () {\n function TtfAppleCmapSubTable() {\n }\n return TtfAppleCmapSubTable;\n}());\nexport { TtfAppleCmapSubTable };\n","/**\n * TtfMicrosoftCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfMicrosoftCmapSubTable = /** @class */ (function () {\n function TtfMicrosoftCmapSubTable() {\n }\n return TtfMicrosoftCmapSubTable;\n}());\nexport { TtfMicrosoftCmapSubTable };\n","/**\n * TtfTrimmedCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfTrimmedCmapSubTable = /** @class */ (function () {\n function TtfTrimmedCmapSubTable() {\n }\n return TtfTrimmedCmapSubTable;\n}());\nexport { TtfTrimmedCmapSubTable };\n","/**\n * TtfLocaTable.ts class for EJ2-PDF\n */\nvar TtfGlyphHeader = /** @class */ (function () {\n function TtfGlyphHeader() {\n }\n return TtfGlyphHeader;\n}());\nexport { TtfGlyphHeader };\n","/**\n * Writes data in BigEndian order.\n */\nvar BigEndianWriter = /** @class */ (function () {\n //Constructors\n /**\n * Creates a new writer.\n */\n function BigEndianWriter(capacity) {\n //Constants\n /**\n * Size of Int32 type.\n */\n this.int32Size = 4;\n /**\n * Size of Int16 type.\n */\n this.int16Size = 2;\n /**\n * Size of long type.\n */\n this.int64Size = 8;\n this.bufferLength = capacity;\n this.buffer = [];\n }\n Object.defineProperty(BigEndianWriter.prototype, \"data\", {\n //Properties\n /**\n * Gets data written to the writer.\n */\n get: function () {\n if (this.buffer.length < this.bufferLength) {\n var length_1 = this.bufferLength - this.buffer.length;\n for (var i = 0; i < length_1; i++) {\n this.buffer.push(0);\n }\n }\n return this.buffer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BigEndianWriter.prototype, \"position\", {\n /// \n /// Gets position of the internal buffer.\n /// \n get: function () {\n if (this.internalPosition === undefined || this.internalPosition === null) {\n this.internalPosition = 0;\n }\n return this.internalPosition;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Writes short value.\n */\n BigEndianWriter.prototype.writeShort = function (value) {\n var bytes = [((value & 0x0000ff00) >> 8), value & 0x000000ff];\n this.flush(bytes);\n };\n /**\n * Writes int value.\n */\n BigEndianWriter.prototype.writeInt = function (value) {\n var i1 = (value & 0xff000000) >> 24;\n i1 = i1 < 0 ? 256 + i1 : i1;\n var i2 = (value & 0x00ff0000) >> 16;\n i2 = i2 < 0 ? 256 + i2 : i2;\n var i3 = (value & 0x0000ff00) >> 8;\n i3 = i3 < 0 ? 256 + i3 : i3;\n var i4 = value & 0x000000ff;\n i4 = i4 < 0 ? 256 + i4 : i4;\n var bytes = [(value & 0xff000000) >> 24, (value & 0x00ff0000) >> 16, (value & 0x0000ff00) >> 8, value & 0x000000ff];\n this.flush(bytes);\n };\n /**\n * Writes u int value.\n */\n BigEndianWriter.prototype.writeUInt = function (value) {\n var buff = [(value & 0xff000000) >> 24, (value & 0x00ff0000) >> 16, (value & 0x0000ff00) >> 8, value & 0x000000ff];\n this.flush(buff);\n };\n /**\n * Writes string value.\n */\n BigEndianWriter.prototype.writeString = function (value) {\n if (value == null) {\n throw new Error('Argument Null Exception : value');\n }\n var bytes = [];\n for (var i = 0; i < value.length; i++) {\n bytes.push(value.charCodeAt(i));\n }\n this.flush(bytes);\n };\n /**\n * Writes byte[] value.\n */\n BigEndianWriter.prototype.writeBytes = function (value) {\n this.flush(value);\n };\n // //Implementation\n BigEndianWriter.prototype.flush = function (buff) {\n if (buff === null) {\n throw new Error('Argument Null Exception : buff');\n }\n var result = [];\n for (var i = 0; i < this.position; i++) {\n result.push(this.buffer[i]);\n }\n for (var i = 0; i < buff.length; i++) {\n result.push(buff[i]);\n }\n for (var i = this.position; i < this.buffer.length; i++) {\n result.push(this.buffer[i]);\n }\n this.buffer = result;\n this.internalPosition += buff.length;\n };\n return BigEndianWriter;\n}());\nexport { BigEndianWriter };\n","/**\n * TtfReader.ts class for EJ2-PDF\n */\nimport { TtfTableInfo } from './ttf-table-info';\nimport { Dictionary } from './../../collections/dictionary';\nimport { TtfNameTable } from './ttf-name-table';\nimport { TtfNameRecord } from './ttf-name-record';\nimport { TtfHeadTable } from './ttf-head-table';\nimport { TtfMetrics } from './ttf-metrics';\nimport { TtfHorizontalHeaderTable } from './ttf-horizontal-header-table';\nimport { TtfOS2Table } from './ttf-OS2-Table';\nimport { TtfPostTable } from './ttf-post-table';\nimport { TtfLongHorMetric } from './ttf-long-hor-metric';\nimport { TtfCmapSubTable } from './ttf-cmap-sub-table';\nimport { TtfCmapTable } from './ttf-cmap-table';\nimport { TtfGlyphInfo } from './ttf-glyph-info';\nimport { TtfLocaTable } from './ttf-loca-table';\nimport { TtfAppleCmapSubTable } from './ttf-apple-cmap-sub-table';\nimport { TtfMicrosoftCmapSubTable } from './ttf-microsoft-cmap-sub-table';\nimport { TtfTrimmedCmapSubTable } from './ttf-trimmed-cmap-sub-table';\nimport { TtfGlyphHeader } from './ttf-glyph-header';\nimport { Rectangle } from './../../drawing/pdf-drawing';\nimport { StringTokenizer } from './string-tokenizer';\nimport { TtfCmapFormat, TtfCmapEncoding, TtfPlatformID } from './enum';\nimport { TtfMicrosoftEncodingID, TtfMacintoshEncodingID, TtfCompositeGlyphFlags } from './enum';\nimport { BigEndianWriter } from './../../input-output/big-endian-writer';\nvar TtfReader = /** @class */ (function () {\n //Constructors\n function TtfReader(fontData) {\n this.int32Size = 4;\n this.isTtcFont = false;\n this.isMacTtf = false;\n this.metricsName = '';\n this.isMacTTF = false;\n this.missedGlyphs = 0;\n this.tableNames = ['cvt ', 'fpgm', 'glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp', 'prep'];\n this.entrySelectors = [0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4];\n this.fontData = fontData;\n this.initialize();\n }\n Object.defineProperty(TtfReader.prototype, \"macintosh\", {\n //Properties\n /**\n * Gets glyphs for Macintosh or Symbol fonts (char - key, glyph - value).\n */\n get: function () {\n if (this.macintoshDictionary === null || this.macintoshDictionary === undefined) {\n this.macintoshDictionary = new Dictionary();\n }\n return this.macintoshDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"microsoft\", {\n /**\n * Gets glyphs for Microsoft or Symbol fonts (char - key, glyph - value).\n */\n get: function () {\n if (this.microsoftDictionary === null || this.microsoftDictionary === undefined) {\n this.microsoftDictionary = new Dictionary();\n }\n return this.microsoftDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"macintoshGlyphs\", {\n /**\n * Gets glyphs for Macintosh or Symbol fonts (glyph index - key, glyph - value).\n */\n get: function () {\n if (this.internalMacintoshGlyphs === null || this.internalMacintoshGlyphs === undefined) {\n this.internalMacintoshGlyphs = new Dictionary();\n }\n return this.internalMacintoshGlyphs;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"microsoftGlyphs\", {\n /**\n * Gets glyphs for Microsoft Unicode fonts (glyph index - key, glyph - value).\n */\n get: function () {\n if (this.internalMicrosoftGlyphs === null || this.internalMicrosoftGlyphs === undefined) {\n this.internalMicrosoftGlyphs = new Dictionary();\n }\n return this.internalMicrosoftGlyphs;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n TtfReader.prototype.initialize = function () {\n if (this.metrics === undefined) {\n this.metrics = new TtfMetrics();\n }\n this.readFontDictionary();\n var nameTable = this.readNameTable();\n var headTable = this.readHeadTable();\n this.initializeFontName(nameTable);\n this.metrics.macStyle = headTable.macStyle;\n };\n TtfReader.prototype.readFontDictionary = function () {\n this.offset = 0;\n var version = this.checkPreambula();\n //this.offset += 4;\n var numTables = this.readInt16(this.offset);\n var searchRange = this.readInt16(this.offset);\n var entrySelector = this.readInt16(this.offset);\n var rangeShift = this.readInt16(this.offset);\n if (this.tableDirectory === undefined) {\n this.tableDirectory = new Dictionary();\n }\n for (var i = 0; i < numTables; ++i) {\n var table = new TtfTableInfo();\n var tableKey = this.readString(this.int32Size);\n table.checksum = this.readInt32(this.offset);\n table.offset = this.readInt32(this.offset);\n table.length = this.readInt32(this.offset);\n this.tableDirectory.setValue(tableKey, table);\n }\n this.lowestPosition = this.offset;\n if (!this.isTtcFont) {\n this.fixOffsets();\n }\n };\n TtfReader.prototype.fixOffsets = function () {\n var minOffset = Number.MAX_VALUE;\n // Search for a smallest offset and compare it with the lowest position found.\n var tableKeys = this.tableDirectory.keys();\n for (var i = 0; i < tableKeys.length; i++) {\n var value = this.tableDirectory.getValue(tableKeys[i]);\n var offset = value.offset;\n if (minOffset > offset) {\n minOffset = offset;\n if (minOffset <= this.lowestPosition) {\n break;\n }\n }\n }\n var shift = minOffset - this.lowestPosition;\n if (shift !== 0) {\n var table = new Dictionary();\n for (var i = 0; i < tableKeys.length; i++) {\n var value = this.tableDirectory.getValue(tableKeys[i]);\n value.offset -= shift;\n table.setValue(tableKeys[i], value);\n }\n this.tableDirectory = table;\n }\n };\n TtfReader.prototype.checkPreambula = function () {\n var version = this.readInt32(this.offset);\n this.isMacTtf = (version === 0x74727565) ? true : false;\n if (version !== 0x10000 && version !== 0x74727565 && version !== 0x4f54544f) {\n this.isTtcFont = true;\n this.offset = 0;\n var fontTag = this.readString(4);\n if (fontTag !== 'ttcf') {\n throw new Error('Can not read TTF font data');\n }\n //skip 4\n this.offset += 4;\n var ttcIdentificationNumber = this.readInt32(this.offset);\n if (ttcIdentificationNumber < 0) {\n throw new Error('Can not read TTF font data');\n }\n this.offset = this.readInt32(this.offset);\n version = this.readInt32(this.offset);\n }\n return version;\n };\n TtfReader.prototype.readNameTable = function () {\n var tableInfo = this.getTable('name');\n this.offset = tableInfo.offset;\n var table = new TtfNameTable();\n table.formatSelector = this.readUInt16(this.offset);\n table.recordsCount = this.readUInt16(this.offset);\n table.offset = this.readUInt16(this.offset);\n table.nameRecords = [];\n var recordSize = 12;\n var position = this.offset;\n for (var i = 0; i < table.recordsCount; i++) {\n this.offset = position;\n var record = new TtfNameRecord();\n record.platformID = this.readUInt16(this.offset);\n record.encodingID = this.readUInt16(this.offset);\n record.languageID = this.readUInt16(this.offset);\n record.nameID = this.readUInt16(this.offset);\n record.length = this.readUInt16(this.offset);\n record.offset = this.readUInt16(this.offset);\n this.offset = tableInfo.offset + table.offset + record.offset;\n var unicode = (record.platformID === 0 || record.platformID === 3);\n record.name = this.readString(record.length, unicode);\n table.nameRecords[i] = record;\n position += recordSize;\n }\n return table;\n };\n TtfReader.prototype.readHeadTable = function () {\n var tableInfo = this.getTable('head');\n this.offset = tableInfo.offset;\n var table = new TtfHeadTable();\n table.version = this.readFixed(this.offset);\n table.fontRevision = this.readFixed(this.offset);\n table.checkSumAdjustment = this.readUInt32(this.offset);\n table.magicNumber = this.readUInt32(this.offset);\n table.flags = this.readUInt16(this.offset);\n table.unitsPerEm = this.readUInt16(this.offset);\n table.created = this.readInt64(this.offset);\n table.modified = this.readInt64(this.offset);\n table.xMin = this.readInt16(this.offset);\n table.yMin = this.readInt16(this.offset);\n table.xMax = this.readInt16(this.offset);\n table.yMax = this.readInt16(this.offset);\n table.macStyle = this.readUInt16(this.offset);\n table.lowestReadableSize = this.readUInt16(this.offset);\n table.fontDirectionHint = this.readInt16(this.offset);\n table.indexToLocalFormat = this.readInt16(this.offset);\n table.glyphDataFormat = this.readInt16(this.offset);\n return table;\n };\n TtfReader.prototype.readHorizontalHeaderTable = function () {\n var tableInfo = this.getTable('hhea');\n this.offset = tableInfo.offset;\n var table = new TtfHorizontalHeaderTable();\n table.version = this.readFixed(this.offset);\n table.ascender = this.readInt16(this.offset);\n table.descender = this.readInt16(this.offset);\n table.lineGap = this.readInt16(this.offset);\n table.advanceWidthMax = this.readUInt16(this.offset);\n table.minLeftSideBearing = this.readInt16(this.offset);\n table.minRightSideBearing = this.readInt16(this.offset);\n table.xMaxExtent = this.readInt16(this.offset);\n table.caretSlopeRise = this.readInt16(this.offset);\n table.caretSlopeRun = this.readInt16(this.offset);\n //skip 2 * 5\n this.offset += 10;\n table.metricDataFormat = this.readInt16(this.offset);\n table.numberOfHMetrics = this.readUInt16(this.offset);\n return table;\n };\n TtfReader.prototype.readOS2Table = function () {\n var tableInfo = this.getTable('OS/2');\n this.offset = tableInfo.offset;\n var table = new TtfOS2Table();\n table.version = this.readUInt16(this.offset);\n table.xAvgCharWidth = this.readInt16(this.offset);\n table.usWeightClass = this.readUInt16(this.offset);\n table.usWidthClass = this.readUInt16(this.offset);\n table.fsType = this.readInt16(this.offset);\n table.ySubscriptXSize = this.readInt16(this.offset);\n table.ySubscriptYSize = this.readInt16(this.offset);\n table.ySubscriptXOffset = this.readInt16(this.offset);\n table.ySubscriptYOffset = this.readInt16(this.offset);\n table.ySuperscriptXSize = this.readInt16(this.offset);\n table.ySuperscriptYSize = this.readInt16(this.offset);\n table.ySuperscriptXOffset = this.readInt16(this.offset);\n table.ySuperscriptYOffset = this.readInt16(this.offset);\n table.yStrikeoutSize = this.readInt16(this.offset);\n table.yStrikeoutPosition = this.readInt16(this.offset);\n table.sFamilyClass = this.readInt16(this.offset);\n table.panose = this.readBytes(10);\n table.ulUnicodeRange1 = this.readUInt32(this.offset);\n table.ulUnicodeRange2 = this.readUInt32(this.offset);\n table.ulUnicodeRange3 = this.readUInt32(this.offset);\n table.ulUnicodeRange4 = this.readUInt32(this.offset);\n table.vendorIdentifier = this.readBytes(4);\n table.fsSelection = this.readUInt16(this.offset);\n table.usFirstCharIndex = this.readUInt16(this.offset);\n table.usLastCharIndex = this.readUInt16(this.offset);\n table.sTypoAscender = this.readInt16(this.offset);\n table.sTypoDescender = this.readInt16(this.offset);\n table.sTypoLineGap = this.readInt16(this.offset);\n table.usWinAscent = this.readUInt16(this.offset);\n table.usWinDescent = this.readUInt16(this.offset);\n table.ulCodePageRange1 = this.readUInt32(this.offset);\n table.ulCodePageRange2 = this.readUInt32(this.offset);\n if (table.version > 1) {\n table.sxHeight = this.readInt16(this.offset);\n table.sCapHeight = this.readInt16(this.offset);\n table.usDefaultChar = this.readUInt16(this.offset);\n table.usBreakChar = this.readUInt16(this.offset);\n table.usMaxContext = this.readUInt16(this.offset);\n }\n else {\n table.sxHeight = 0;\n table.sCapHeight = 0;\n table.usDefaultChar = 0;\n table.usBreakChar = 0;\n table.usMaxContext = 0;\n }\n return table;\n };\n TtfReader.prototype.readPostTable = function () {\n var tableInfo = this.getTable('post');\n this.offset = tableInfo.offset;\n var table = new TtfPostTable();\n table.formatType = this.readFixed(this.offset);\n table.italicAngle = this.readFixed(this.offset);\n table.underlinePosition = this.readInt16(this.offset);\n table.underlineThickness = this.readInt16(this.offset);\n table.isFixedPitch = this.readUInt32(this.offset);\n table.minType42 = this.readUInt32(this.offset);\n table.maxType42 = this.readUInt32(this.offset);\n table.minType1 = this.readUInt32(this.offset);\n table.maxType1 = this.readUInt32(this.offset);\n return table;\n };\n /**\n * Reads Width of the glyphs.\n */\n TtfReader.prototype.readWidthTable = function (glyphCount, unitsPerEm) {\n var tableInfo = this.getTable('hmtx');\n this.offset = tableInfo.offset;\n var width = [];\n for (var i = 0; i < glyphCount; i++) {\n var glyph = new TtfLongHorMetric();\n glyph.advanceWidth = this.readUInt16(this.offset);\n glyph.lsb = this.readInt16(this.offset);\n var glyphWidth = glyph.advanceWidth * 1000 / unitsPerEm;\n width.push(Math.floor(glyphWidth));\n }\n return width;\n };\n /**\n * Reads the cmap table.\n */\n TtfReader.prototype.readCmapTable = function () {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset;\n var table = new TtfCmapTable();\n table.version = this.readUInt16(this.offset);\n table.tablesCount = this.readUInt16(this.offset);\n var position = this.offset;\n var subTables = [];\n for (var i = 0; i < table.tablesCount; i++) {\n this.offset = position;\n var subTable = new TtfCmapSubTable();\n subTable.platformID = this.readUInt16(this.offset);\n subTable.encodingID = this.readUInt16(this.offset);\n subTable.offset = this.readUInt32(this.offset);\n position = this.offset;\n this.readCmapSubTable(subTable);\n subTables[i] = subTable;\n }\n return subTables;\n };\n /**\n * Reads the cmap sub table.\n */\n TtfReader.prototype.readCmapSubTable = function (subTable) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var format = this.readUInt16(this.offset);\n var encoding = this.getCmapEncoding(subTable.platformID, subTable.encodingID);\n var platform = (encoding === TtfCmapEncoding.Macintosh) ? TtfPlatformID.Macintosh : TtfPlatformID.Microsoft;\n if (encoding !== TtfCmapEncoding.Unknown) {\n switch (format) {\n case TtfCmapFormat.Apple:\n this.readAppleCmapTable(subTable, encoding);\n break;\n case TtfCmapFormat.Microsoft:\n this.readMicrosoftCmapTable(subTable, encoding);\n break;\n case TtfCmapFormat.Trimmed:\n this.readTrimmedCmapTable(subTable, encoding);\n break;\n }\n }\n };\n /**\n * Reads Symbol cmap table.\n */\n TtfReader.prototype.readAppleCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var table = new TtfAppleCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n if (this.maxMacIndex === null || this.maxMacIndex === undefined) {\n this.maxMacIndex = 0;\n }\n for (var i = 0; i < 256; ++i) {\n var glyphInfo = new TtfGlyphInfo();\n glyphInfo.index = this.readByte(this.offset);\n glyphInfo.width = this.getWidth(glyphInfo.index);\n glyphInfo.charCode = i;\n this.macintosh.setValue(i, glyphInfo);\n this.addGlyph(glyphInfo, encoding);\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n this.maxMacIndex = Math.max(i, this.maxMacIndex);\n }\n };\n /**\n * Reads Symbol cmap table.\n */\n TtfReader.prototype.readMicrosoftCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var collection = (encoding === TtfCmapEncoding.Unicode) ? this.microsoft : this.macintosh;\n var table = new TtfMicrosoftCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n table.segCountX2 = this.readUInt16(this.offset);\n table.searchRange = this.readUInt16(this.offset);\n table.entrySelector = this.readUInt16(this.offset);\n table.rangeShift = this.readUInt16(this.offset);\n var segCount = table.segCountX2 / 2;\n table.endCount = this.readUshortArray(segCount);\n table.reservedPad = this.readUInt16(this.offset);\n table.startCount = this.readUshortArray(segCount);\n table.idDelta = this.readUshortArray(segCount);\n table.idRangeOffset = this.readUshortArray(segCount);\n var length = (table.length / 2 - 8) - (segCount * 4);\n table.glyphID = this.readUshortArray(length);\n // Process glyphIdArray array.\n var codeOffset = 0;\n var index = 0;\n for (var j = 0; j < segCount; j++) {\n for (var k = table.startCount[j]; k <= table.endCount[j] && k !== 65535; k++) {\n if (table.idRangeOffset[j] === 0) {\n codeOffset = (k + table.idDelta[j]) & 65535;\n }\n else {\n index = j + table.idRangeOffset[j] / 2 - segCount + k - table.startCount[j];\n if (index >= table.glyphID.length) {\n continue;\n }\n codeOffset = (table.glyphID[index] + table.idDelta[j]) & 65535;\n }\n var glyph = new TtfGlyphInfo();\n glyph.index = codeOffset;\n glyph.width = this.getWidth(glyph.index);\n var id = (encoding === TtfCmapEncoding.Symbol) ? ((k & 0xff00) === 0xf000 ? k & 0xff : k) : k;\n glyph.charCode = id;\n collection.setValue(id, glyph);\n this.addGlyph(glyph, encoding);\n }\n }\n };\n /**\n * Reads Trimed cmap table.\n */\n TtfReader.prototype.readTrimmedCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var table = new TtfTrimmedCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n table.firstCode = this.readUInt16(this.offset);\n table.entryCount = this.readUInt16(this.offset);\n for (var i = 0; i < table.entryCount; ++i) {\n var glyphInfo = new TtfGlyphInfo();\n glyphInfo.index = this.readUInt16(this.offset);\n glyphInfo.width = this.getWidth(glyphInfo.index);\n glyphInfo.charCode = i + table.firstCode;\n this.macintosh.setValue(i, glyphInfo);\n this.addGlyph(glyphInfo, encoding);\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n this.maxMacIndex = Math.max(i, this.maxMacIndex);\n }\n };\n TtfReader.prototype.initializeFontName = function (nameTable) {\n for (var i = 0; i < nameTable.recordsCount; i++) {\n var record = nameTable.nameRecords[i];\n if (record.nameID === 1) {\n //font family\n this.metrics.fontFamily = record.name;\n }\n else if (record.nameID === 6) {\n //post script name\n this.metrics.postScriptName = record.name;\n }\n /* tslint:disable */\n if (this.metrics.fontFamily !== null && this.metrics.fontFamily !== undefined && this.metrics.postScriptName !== null && this.metrics.postScriptName !== undefined) {\n break;\n }\n /* tslint:disable */\n }\n };\n TtfReader.prototype.getTable = function (name) {\n // if (name === null) {\n // throw new Error('Argument Null Exception : name');\n // }\n var table = new TtfTableInfo();\n var obj;\n if (this.tableDirectory.containsKey(name)) {\n obj = this.tableDirectory.getValue(name);\n }\n if (obj !== null && obj !== undefined) {\n table = obj;\n }\n return table;\n };\n /**\n * Returns width of the glyph.\n */\n TtfReader.prototype.getWidth = function (glyphCode) {\n glyphCode = (glyphCode < this.width.length) ? glyphCode : this.width.length - 1;\n return this.width[glyphCode];\n };\n /**\n * Gets CMAP encoding based on platform ID and encoding ID.\n */\n /* tslint:disable */\n TtfReader.prototype.getCmapEncoding = function (platformID, encodingID) {\n var format = TtfCmapEncoding.Unknown;\n if (platformID == TtfPlatformID.Microsoft && encodingID == TtfMicrosoftEncodingID.Undefined) {\n // When building a symbol font for Windows,\n // the platform ID should be 3 and the encoding ID should be 0.\n format = TtfCmapEncoding.Symbol;\n }\n else if (platformID == TtfPlatformID.Microsoft && encodingID == TtfMicrosoftEncodingID.Unicode) {\n // When building a Unicode font for Windows,\n // the platform ID should be 3 and the encoding ID should be 1.\n format = TtfCmapEncoding.Unicode;\n }\n else if (platformID == TtfPlatformID.Macintosh && encodingID == TtfMacintoshEncodingID.Roman) {\n // When building a font that will be used on the Macintosh,\n // the platform ID should be 1 and the encoding ID should be 0.\n format = TtfCmapEncoding.Macintosh;\n }\n return format;\n };\n /* tslint:enable */\n /**\n * Adds glyph to the collection.\n */\n TtfReader.prototype.addGlyph = function (glyph, encoding) {\n var collection = null;\n switch (encoding) {\n case TtfCmapEncoding.Unicode:\n collection = this.microsoftGlyphs;\n break;\n case TtfCmapEncoding.Macintosh:\n case TtfCmapEncoding.Symbol:\n collection = this.macintoshGlyphs;\n break;\n }\n collection.setValue(glyph.index, glyph);\n };\n /**\n * Initializes metrics.\n */\n /* tslint:disable */\n TtfReader.prototype.initializeMetrics = function (nameTable, headTable, horizontalHeadTable, os2Table, postTable, cmapTables) {\n /* tslint:enable */\n // if (cmapTables === null) {\n // throw new Error('ArgumentNullException : cmapTables');\n // }\n this.initializeFontName(nameTable);\n // Get font encoding.\n var bSymbol = false;\n for (var i = 0; i < cmapTables.length; i++) {\n var subTable = cmapTables[i];\n var encoding = this.getCmapEncoding(subTable.platformID, subTable.encodingID);\n if (encoding === TtfCmapEncoding.Symbol) {\n bSymbol = true;\n break;\n }\n }\n this.metrics.isSymbol = bSymbol;\n this.metrics.macStyle = headTable.macStyle;\n this.metrics.isFixedPitch = (postTable.isFixedPitch !== 0);\n this.metrics.italicAngle = postTable.italicAngle;\n var factor = 1000 / headTable.unitsPerEm;\n this.metrics.winAscent = os2Table.sTypoAscender * factor;\n this.metrics.macAscent = horizontalHeadTable.ascender * factor;\n //m_metrics.MacAscent = os2Table.UsWinAscent * factor;\n // NOTE: This is stange workaround. The value is good if os2Table.SCapHeight != 0, otherwise it should be properly computed.\n this.metrics.capHeight = (os2Table.sCapHeight !== 0) ? os2Table.sCapHeight : 0.7 * headTable.unitsPerEm * factor;\n this.metrics.winDescent = os2Table.sTypoDescender * factor;\n this.metrics.macDescent = horizontalHeadTable.descender * factor;\n //m_metrics.MacDescent = -os2Table.UsWinDescent * factor;\n this.metrics.leading = (os2Table.sTypoAscender - os2Table.sTypoDescender + os2Table.sTypoLineGap) * factor;\n this.metrics.lineGap = Math.ceil(horizontalHeadTable.lineGap * factor);\n var left = headTable.xMin * factor;\n var top = Math.ceil(this.metrics.macAscent + this.metrics.lineGap);\n var right = headTable.xMax * factor;\n var bottom = this.metrics.macDescent;\n this.metrics.fontBox = new Rectangle(left, top, right, bottom);\n // NOTE: Strange!\n this.metrics.stemV = 80;\n this.metrics.widthTable = this.updateWidth();\n this.metrics.contains = this.tableDirectory.containsKey('CFF');\n this.metrics.subScriptSizeFactor = headTable.unitsPerEm / os2Table.ySubscriptYSize;\n this.metrics.superscriptSizeFactor = headTable.unitsPerEm / os2Table.ySuperscriptYSize;\n };\n /**\n * Updates chars structure which is used in the case of ansi encoding (256 bytes).\n */\n TtfReader.prototype.updateWidth = function () {\n var count = 256;\n var bytes = [];\n if (this.metrics.isSymbol) {\n for (var i = 0; i < count; i++) {\n var glyphInfo = this.getGlyph(String.fromCharCode(i));\n bytes[i] = (glyphInfo.empty) ? 0 : glyphInfo.width;\n }\n }\n else {\n var byteToProcess = [];\n var unknown = '?';\n var space = String.fromCharCode(32);\n for (var i = 0; i < count; i++) {\n byteToProcess[0] = i;\n var text = this.getString(byteToProcess, 0, byteToProcess.length);\n var ch = (text.length > 0) ? text[0] : unknown;\n var glyphInfo = this.getGlyph(ch);\n if (!glyphInfo.empty) {\n bytes[i] = glyphInfo.width;\n }\n else {\n glyphInfo = this.getGlyph(space);\n bytes[i] = (glyphInfo.empty) ? 0 : glyphInfo.width;\n }\n }\n }\n return bytes;\n };\n /**\n * Returns default glyph.\n */\n TtfReader.prototype.getDefaultGlyph = function () {\n var glyph = this.getGlyph(StringTokenizer.whiteSpace);\n return glyph;\n };\n /**\n * Reads unicode string from byte array.\n */\n TtfReader.prototype.getString = function (byteToProcess, start, length) {\n var result = '';\n for (var index = 0; index < length; index++) {\n result += String.fromCharCode(byteToProcess[index + start]);\n }\n return result;\n };\n /**\n * Reads loca table.\n */\n TtfReader.prototype.readLocaTable = function (bShort) {\n var tableInfo = this.getTable('loca');\n this.offset = tableInfo.offset;\n var table = new TtfLocaTable();\n var buffer = null;\n if (bShort) {\n var len = tableInfo.length / 2;\n buffer = [];\n for (var i = 0; i < len; i++) {\n buffer[i] = this.readUInt16(this.offset) * 2;\n }\n }\n else {\n var len = tableInfo.length / 4;\n buffer = [];\n for (var i = 0; i < len; i++) {\n buffer[i] = this.readUInt32(this.offset);\n }\n }\n table.offsets = buffer;\n return table;\n };\n /**\n * Updates hash table of used glyphs.\n */\n TtfReader.prototype.updateGlyphChars = function (glyphChars, locaTable) {\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n // Add zero key.\n if (!glyphChars.containsKey(0)) {\n glyphChars.setValue(0, 0);\n }\n var clone = new Dictionary();\n var glyphCharKeys = glyphChars.keys();\n for (var i = 0; i < glyphCharKeys.length; i++) {\n clone.setValue(glyphCharKeys[i], glyphChars.getValue(glyphCharKeys[i]));\n }\n for (var i = 0; i < glyphCharKeys.length; i++) {\n var nextKey = glyphCharKeys[i];\n this.processCompositeGlyph(glyphChars, nextKey, locaTable);\n }\n };\n /**\n * Checks if glyph is composite or not.\n */\n TtfReader.prototype.processCompositeGlyph = function (glyphChars, glyph, locaTable) {\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n // Is in range.\n if (glyph < locaTable.offsets.length - 1) {\n var glyphOffset = locaTable.offsets[glyph];\n if (glyphOffset !== locaTable.offsets[glyph + 1]) {\n var tableInfo = this.getTable('glyf');\n this.offset = tableInfo.offset + glyphOffset;\n var glyphHeader = new TtfGlyphHeader();\n glyphHeader.numberOfContours = this.readInt16(this.offset);\n glyphHeader.xMin = this.readInt16(this.offset);\n glyphHeader.yMin = this.readInt16(this.offset);\n glyphHeader.xMax = this.readInt16(this.offset);\n glyphHeader.yMax = this.readInt16(this.offset);\n // Glyph is composite.\n if (glyphHeader.numberOfContours < 0) {\n var skipBytes = 0;\n var entry = true;\n while (entry) {\n var flags = this.readUInt16(this.offset);\n var glyphIndex = this.readUInt16(this.offset);\n if (!glyphChars.containsKey(glyphIndex)) {\n glyphChars.setValue(glyphIndex, 0);\n }\n if ((flags & TtfCompositeGlyphFlags.MoreComponents) === 0) {\n break;\n }\n skipBytes = ((flags & TtfCompositeGlyphFlags.Arg1And2AreWords) !== 0) ? 4 : 2;\n if ((flags & TtfCompositeGlyphFlags.WeHaveScale) !== 0) {\n skipBytes += 2;\n }\n else if ((flags & TtfCompositeGlyphFlags.WeHaveAnXyScale) !== 0) {\n skipBytes += 4;\n }\n else if ((flags & TtfCompositeGlyphFlags.WeHaveTwoByTwo) !== 0) {\n skipBytes += 2 * 4;\n }\n this.offset += skipBytes;\n }\n }\n }\n }\n };\n /**\n * Creates new glyph tables based on chars that are used for output.\n */\n /* tslint:disable */\n TtfReader.prototype.generateGlyphTable = function (glyphChars, locaTable, newLocaTable, newGlyphTable) {\n /* tslint:enable */\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n newLocaTable = [];\n // Sorting used glyphs keys.\n var activeGlyphs = glyphChars.keys();\n activeGlyphs.sort(function (a, b) { return a - b; });\n var glyphSize = 0;\n for (var i = 0; i < activeGlyphs.length; i++) {\n var glyphIndex = activeGlyphs[i];\n if (locaTable.offsets.length > 0) {\n glyphSize += locaTable.offsets[glyphIndex + 1] - locaTable.offsets[glyphIndex];\n }\n }\n var glyphSizeAligned = this.align(glyphSize);\n newGlyphTable = [];\n for (var i = 0; i < glyphSizeAligned; i++) {\n newGlyphTable.push(0);\n }\n var nextGlyphOffset = 0;\n var nextGlyphIndex = 0;\n var table = this.getTable('glyf');\n // Creating NewLocaTable - that would hold offsets for filtered glyphs.\n for (var i = 0; i < locaTable.offsets.length; i++) {\n newLocaTable.push(nextGlyphOffset);\n if (nextGlyphIndex < activeGlyphs.length && activeGlyphs[nextGlyphIndex] === i) {\n ++nextGlyphIndex;\n newLocaTable[i] = nextGlyphOffset;\n var oldGlyphOffset = locaTable.offsets[i];\n var oldNextGlyphOffset = locaTable.offsets[i + 1] - oldGlyphOffset;\n if (oldNextGlyphOffset > 0) {\n this.offset = table.offset + oldGlyphOffset;\n var result = this.read(newGlyphTable, nextGlyphOffset, oldNextGlyphOffset);\n newGlyphTable = result.buffer;\n nextGlyphOffset += oldNextGlyphOffset;\n }\n }\n }\n return { glyphTableSize: glyphSize, newLocaTable: newLocaTable, newGlyphTable: newGlyphTable };\n };\n /**\n * Updates new Loca table.\n */\n /* tslint:disable */\n TtfReader.prototype.updateLocaTable = function (newLocaTable, bLocaIsShort, newLocaTableOut) {\n /* tslint:enable */\n if (newLocaTable === null) {\n throw new Error('Argument Null Exception : newLocaTable');\n }\n var size = (bLocaIsShort) ? newLocaTable.length * 2 : newLocaTable.length * 4;\n var count = this.align(size);\n //BigEndianWiter\n var writer = new BigEndianWriter(count);\n for (var i = 0; i < newLocaTable.length; i++) {\n var value = newLocaTable[i];\n if (bLocaIsShort) {\n value /= 2;\n writer.writeShort(value);\n }\n else {\n writer.writeInt(value);\n }\n }\n return { newLocaUpdated: writer.data, newLocaSize: size };\n };\n /**\n * Aligns number to be divisible on 4.\n */\n TtfReader.prototype.align = function (value) {\n return (value + 3) & (~3);\n };\n /**\n * Returns font program data.\n */\n /* tslint:disable */\n TtfReader.prototype.getFontProgram = function (newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize) {\n /* tslint:enable */\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n var result = this.getFontProgramLength(newLocaTableOut, newGlyphTable, 0);\n var fontProgramLength = result.fontProgramLength;\n var numTables = result.numTables;\n var writer = new BigEndianWriter(fontProgramLength);\n writer.writeInt(0x10000);\n writer.writeShort(numTables);\n var entrySelector = this.entrySelectors[numTables];\n writer.writeShort((1 << (entrySelector & 31)) * 16);\n writer.writeShort(entrySelector);\n writer.writeShort((numTables - (1 << (entrySelector & 31))) * 16);\n // Writing to destination buffer - checksums && sizes of used tables.\n this.writeCheckSums(writer, numTables, newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize);\n // // Writing to destination buffer - used glyphs.\n this.writeGlyphs(writer, newLocaTableOut, newGlyphTable);\n return writer.data;\n };\n /* tslint:disable */\n TtfReader.prototype.getFontProgramLength = function (newLocaTableOut, newGlyphTable, numTables) {\n /* tslint:enable */\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n // glyf and loca are used by default;\n numTables = 2;\n var tableNames = this.tableNames;\n var fontProgramLength = 0;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n if (tableName !== 'glyf' && tableName !== 'loca') {\n var table = this.getTable(tableName);\n if (!table.empty) {\n ++numTables;\n fontProgramLength += this.align(table.length);\n }\n }\n }\n fontProgramLength += newLocaTableOut.length;\n fontProgramLength += newGlyphTable.length;\n var usedTablesSize = numTables * 16 + (3 * 4);\n fontProgramLength += usedTablesSize;\n return { fontProgramLength: fontProgramLength, numTables: numTables };\n };\n /**\n * Writing to destination buffer - checksums and sizes of used tables.\n */\n /* tslint:disable */\n TtfReader.prototype.writeCheckSums = function (writer, numTables, newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize) {\n /* tslint:enable */\n if (writer === null) {\n throw new Error('Argument Null Exception : writer');\n }\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n var usedTablesSize = numTables * 16 + (3 * 4);\n var nextTableSize = 0;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n var tableInfo = this.getTable(tableName);\n if (tableInfo.empty) {\n continue;\n }\n writer.writeString(tableName);\n if (tableName === 'glyf') {\n var checksum = this.calculateCheckSum(newGlyphTable);\n writer.writeInt(checksum);\n nextTableSize = glyphTableSize;\n }\n else if (tableName === 'loca') {\n var checksum = this.calculateCheckSum(newLocaTableOut);\n writer.writeInt(checksum);\n nextTableSize = locaTableSize;\n }\n else {\n writer.writeInt(tableInfo.checksum);\n nextTableSize = tableInfo.length;\n }\n writer.writeUInt(usedTablesSize);\n writer.writeUInt(nextTableSize);\n usedTablesSize += this.align(nextTableSize);\n }\n };\n /**\n * Gets checksum from source buffer.\n */\n TtfReader.prototype.calculateCheckSum = function (bytes) {\n if (bytes === null) {\n throw new Error('Argument Null Exception : bytes');\n }\n var pos = 0;\n var byte1 = 0;\n var byte2 = 0;\n var byte3 = 0;\n var byte4 = 0;\n for (var i = 0; i < (bytes.length + 1) / 4; i++) {\n byte4 += (bytes[pos++] & 255);\n byte3 += (bytes[pos++] & 255);\n byte2 += (bytes[pos++] & 255);\n byte1 += (bytes[pos++] & 255);\n }\n var result = byte1;\n result += (byte2 << 8);\n result += (byte3 << 16);\n result += (byte4 << 24);\n return result;\n };\n /**\n * Writing to destination buffer - used glyphs.\n */\n TtfReader.prototype.writeGlyphs = function (writer, newLocaTable, newGlyphTable) {\n if (writer === null) {\n throw new Error('Argument Null Exception : writer');\n }\n if (newLocaTable === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n var tableInfo = this.getTable(tableName);\n if (tableInfo.empty) {\n continue;\n }\n if (tableName === 'glyf') {\n writer.writeBytes(newGlyphTable);\n }\n else if (tableName === 'loca') {\n writer.writeBytes(newLocaTable);\n }\n else {\n var count = this.align(tableInfo.length);\n var buff = [];\n for (var i_1 = 0; i_1 < count; i_1++) {\n buff.push(0);\n }\n this.offset = tableInfo.offset;\n var result = this.read(buff, 0, tableInfo.length);\n writer.writeBytes(result.buffer);\n }\n }\n };\n //public methods\n /**\n * Sets position value of font data.\n */\n TtfReader.prototype.setOffset = function (offset) {\n this.offset = offset;\n };\n /**\n * Creates font Internals\n * @private\n */\n TtfReader.prototype.createInternals = function () {\n this.metrics = new TtfMetrics();\n var nameTable = this.readNameTable();\n var headTable = this.readHeadTable();\n this.bIsLocaShort = (headTable.indexToLocalFormat === 0);\n var horizontalHeadTable = this.readHorizontalHeaderTable();\n var os2Table = this.readOS2Table();\n var postTable = this.readPostTable();\n this.width = this.readWidthTable(horizontalHeadTable.numberOfHMetrics, headTable.unitsPerEm);\n var subTables = this.readCmapTable();\n this.initializeMetrics(nameTable, headTable, horizontalHeadTable, os2Table, postTable, subTables);\n };\n TtfReader.prototype.getGlyph = function (charCode) {\n if (typeof charCode === 'number') {\n var obj1 = null;\n if (!this.metrics.isSymbol && this.microsoftGlyphs != null) {\n if (this.microsoftGlyphs.containsKey(charCode)) {\n obj1 = this.microsoftGlyphs.getValue(charCode);\n }\n }\n else if (this.metrics.isSymbol && this.macintoshGlyphs != null) {\n if (this.macintoshGlyphs.containsKey(charCode)) {\n obj1 = this.macintoshGlyphs.getValue(charCode);\n }\n }\n var glyph = (obj1 != null) ? obj1 : this.getDefaultGlyph();\n return glyph;\n }\n else {\n var obj = null;\n var code = charCode.charCodeAt(0);\n if (!this.metrics.isSymbol && this.microsoft !== null) {\n if (this.microsoft.containsKey(code)) {\n obj = this.microsoft.getValue(code);\n if (code !== StringTokenizer.whiteSpace.charCodeAt(0)) {\n this.isFontPresent = true;\n }\n }\n else if (code !== StringTokenizer.whiteSpace.charCodeAt(0)) {\n this.isFontPresent = false;\n }\n }\n else if (this.metrics.isSymbol && this.macintosh !== null || this.isMacTTF) {\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n if (this.maxMacIndex !== 0) {\n code %= this.maxMacIndex + 1;\n }\n else {\n code = ((code & 0xff00) === 0xf000 ? code & 0xff : code);\n }\n if (this.macintosh.containsKey(code)) {\n obj = this.macintosh.getValue(code);\n this.isFontPresent = true;\n }\n }\n // Fix for StackOverFlow exception in XPS to PDF converter\n if (charCode === StringTokenizer.whiteSpace && obj === null) {\n obj = new TtfGlyphInfo();\n }\n var glyph = (obj !== null) ? obj : this.getDefaultGlyph();\n return glyph;\n }\n };\n /**\n * Gets hash table with chars indexed by glyph index.\n */\n TtfReader.prototype.getGlyphChars = function (chars) {\n if (chars === null || chars === undefined) {\n throw new Error('Argument Null Exception : chars');\n }\n var dictionary = new Dictionary();\n var charKeys = chars.keys();\n for (var i = 0; i < charKeys.length; i++) {\n var ch = charKeys[i];\n var glyph = this.getGlyph(ch);\n if (!glyph.empty) {\n dictionary.setValue(glyph.index, ch.charCodeAt(0));\n }\n }\n return dictionary;\n };\n /**\n * Gets all glyphs.\n */\n TtfReader.prototype.getAllGlyphs = function () {\n var allGlyphInfo = [];\n var info = new TtfGlyphInfo();\n var index = 0;\n for (var i = 0; i < this.width.length; i++) {\n var width = this.width[i];\n info.index = index;\n info.width = width;\n allGlyphInfo.push(info);\n index++;\n }\n return allGlyphInfo;\n };\n /**\n * Reads a font's program.\n * @private\n */\n TtfReader.prototype.readFontProgram = function (chars) {\n var glyphChars = this.getGlyphChars(chars);\n var locaTable = this.readLocaTable(this.bIsLocaShort);\n if (glyphChars.size() < chars.size()) {\n this.missedGlyphs = chars.size() - glyphChars.size();\n }\n this.updateGlyphChars(glyphChars, locaTable);\n /* tslint:disable */\n var result1 = this.generateGlyphTable(glyphChars, locaTable, null, null);\n /* tslint:enable */\n var glyphTableSize = result1.glyphTableSize;\n var newLocaTable = result1.newLocaTable;\n var newGlyphTable = result1.newGlyphTable;\n var result2 = this.updateLocaTable(newLocaTable, this.bIsLocaShort, null);\n var newLocaSize = result2.newLocaSize;\n var newLocaUpdated = result2.newLocaUpdated;\n var fontProgram = this.getFontProgram(newLocaUpdated, newGlyphTable, glyphTableSize, newLocaSize);\n return fontProgram;\n };\n /**\n * Reconverts string to be in proper format saved into PDF file.\n */\n TtfReader.prototype.convertString = function (text) {\n if (text === null) {\n throw new Error('Argument Null Exception : text');\n }\n var glyph = '';\n var i = 0;\n for (var k = 0; k < text.length; k++) {\n var ch = text[k];\n var glyphInfo = this.getGlyph(ch);\n if (!glyphInfo.empty) {\n glyph += String.fromCharCode(glyphInfo.index);\n i++;\n }\n }\n return glyph;\n };\n /**\n * Gets char width.\n */\n TtfReader.prototype.getCharWidth = function (code) {\n var glyphInfo = this.getGlyph(code);\n glyphInfo = (!glyphInfo.empty) ? glyphInfo : this.getDefaultGlyph();\n var codeWidth = (!glyphInfo.empty) ? glyphInfo.width : 0;\n return codeWidth;\n };\n TtfReader.prototype.readString = function (length, isUnicode) {\n if (isUnicode === undefined) {\n return this.readString(length, false);\n }\n else {\n //let buffer : number[] = this.readBytes(length);\n var result = '';\n if (isUnicode) {\n for (var i = 0; i < length; i++) {\n if (i % 2 !== 0) {\n result += String.fromCharCode(this.fontData[this.offset]);\n }\n this.offset += 1;\n }\n }\n else {\n for (var i = 0; i < length; i++) {\n result += String.fromCharCode(this.fontData[this.offset]);\n this.offset += 1;\n }\n }\n return result;\n }\n };\n TtfReader.prototype.readFixed = function (offset) {\n var integer = this.readInt16(offset);\n var sFraction = this.readInt16(offset + 2);\n var fraction = sFraction / 16384;\n return integer + fraction;\n };\n TtfReader.prototype.readInt32 = function (offset) {\n var i1 = this.fontData[offset + 3];\n var i2 = this.fontData[offset + 2];\n var i3 = this.fontData[offset + 1];\n var i4 = this.fontData[offset];\n this.offset += 4;\n return i1 + (i2 << 8) + (i3 << 16) + (i4 << 24);\n };\n TtfReader.prototype.readUInt32 = function (offset) {\n var i1 = this.fontData[offset + 3];\n var i2 = this.fontData[offset + 2];\n var i3 = this.fontData[offset + 1];\n var i4 = this.fontData[offset];\n this.offset += 4;\n return (i1 | i2 << 8 | i3 << 16 | i4 << 24);\n };\n // private readInt16(offset : number) : number {\n // let result : number = (this.fontData[offset] << 8) + this.fontData[offset + 1];\n // this.offset += 2;\n // return result;\n // }\n TtfReader.prototype.readInt16 = function (offset) {\n var result = (this.fontData[offset] << 8) + this.fontData[offset + 1];\n result = result & (1 << 15) ? result - 0x10000 : result;\n this.offset += 2;\n return result;\n };\n TtfReader.prototype.readInt64 = function (offset) {\n var low = this.readInt32(offset + 4);\n var n = this.readInt32(offset) * 4294967296.0 + low;\n if (low < 0) {\n n += 4294967296;\n }\n return n;\n };\n TtfReader.prototype.readUInt16 = function (offset) {\n var result = (this.fontData[offset] << 8) | this.fontData[offset + 1];\n this.offset += 2;\n return result;\n };\n /**\n * Reads ushort array.\n */\n TtfReader.prototype.readUshortArray = function (length) {\n var buffer = [];\n for (var i = 0; i < length; i++) {\n buffer[i] = this.readUInt16(this.offset);\n }\n return buffer;\n };\n TtfReader.prototype.readBytes = function (length) {\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(this.fontData[this.offset]);\n this.offset += 1;\n }\n return result;\n };\n TtfReader.prototype.readByte = function (offset) {\n var result = this.fontData[offset];\n this.offset += 1;\n return result;\n };\n /**\n * Reads bytes to array in BigEndian order.\n * @private\n */\n TtfReader.prototype.read = function (buffer, index, count) {\n if (buffer === null) {\n throw new Error('Argument Null Exception : buffer');\n }\n var written = 0;\n var read = 0;\n do {\n for (var i = 0; (i < count - written) && (this.offset + i < this.fontData.length); i++) {\n buffer[index + i] = this.fontData[this.offset + i];\n }\n read = count - written;\n this.offset += read;\n written += read;\n } while (written < count);\n return { buffer: buffer, written: written };\n };\n return TtfReader;\n}());\nexport { TtfReader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfFont } from './pdf-font';\nimport { PdfSubSuperScript } from './enum';\nimport { PdfArray } from './../../primitives/pdf-array';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar PdfFontMetrics = /** @class */ (function () {\n function PdfFontMetrics() {\n /**\n * `Line gap`.\n * @private\n */\n this.lineGap = 0;\n }\n // Public methods\n /**\n * Returns `ascent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getAscent = function (format) {\n var returnValue = this.ascent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `descent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getDescent = function (format) {\n var returnValue = this.descent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `Line gap` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getLineGap = function (format) {\n var returnValue = this.lineGap * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `height` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getHeight = function (format) {\n var height;\n var clearTypeFonts = ['cambria', 'candara', 'constantia', 'corbel', 'cariadings'];\n var clearTypeFontCollection = [];\n for (var index = 0; index < clearTypeFonts.length; index++) {\n var font = clearTypeFonts[index];\n clearTypeFontCollection.push(font);\n }\n if (this.getDescent(format) < 0) {\n // if ((clearTypeFontCollection.indexOf(this.name.toLowerCase()) !== -1) && !this.isUnicodeFont) {\n // height = (this.GetAscent(format) - this.GetDescent(format) - this.GetLineGap(format));\n // } else {\n height = (this.getAscent(format) - this.getDescent(format) + this.getLineGap(format));\n // }\n }\n else {\n height = (this.getAscent(format) + this.getDescent(format) + this.getLineGap(format));\n }\n return height;\n };\n /**\n * Calculates `size` of the font depending on the subscript/superscript value.\n * @private\n */\n PdfFontMetrics.prototype.getSize = function (format) {\n var size = this.size;\n if (format != null) {\n switch (format.subSuperScript) {\n case PdfSubSuperScript.SubScript:\n size /= this.subScriptSizeFactor;\n break;\n case PdfSubSuperScript.SuperScript:\n size /= this.superscriptSizeFactor;\n break;\n }\n }\n return size;\n };\n /**\n * `Clones` the metrics.\n * @private\n */\n PdfFontMetrics.prototype.clone = function () {\n var metrics = this;\n metrics.widthTable = WidthTable.clone();\n return metrics;\n };\n Object.defineProperty(PdfFontMetrics.prototype, \"widthTable\", {\n // Properies\n /**\n * Gets or sets the `width table`.\n * @private\n */\n get: function () {\n return this.internalWidthTable;\n },\n set: function (value) {\n this.internalWidthTable = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfFontMetrics;\n}());\nexport { PdfFontMetrics };\nvar WidthTable = /** @class */ (function () {\n function WidthTable() {\n }\n /**\n * Static `clones` this instance of the WidthTable class.\n * @private\n */\n WidthTable.clone = function () {\n return null;\n };\n return WidthTable;\n}());\nexport { WidthTable };\nvar StandardWidthTable = /** @class */ (function (_super) {\n __extends(StandardWidthTable, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StandardWidthTable` class.\n * @private\n */\n function StandardWidthTable(widths) {\n var _this = _super.call(this) || this;\n if (widths == null) {\n throw new Error('ArgumentNullException:widths');\n }\n _this.widths = widths;\n return _this;\n }\n //Properties\n /**\n * Gets the `32 bit number` at the specified index.\n * @private\n */\n StandardWidthTable.prototype.items = function (index) {\n if (index < 0 || index >= this.widths.length) {\n throw new Error('ArgumentOutOfRangeException:index, The character is not supported by the font.');\n }\n var result = this.widths[index];\n return result;\n };\n Object.defineProperty(StandardWidthTable.prototype, \"length\", {\n /**\n * Gets the `length` of the internal array.\n * @private\n */\n get: function () {\n return this.widths.length;\n },\n enumerable: true,\n configurable: true\n });\n //Overrides\n /**\n * `Clones` this instance of the WidthTable class.\n * @private\n */\n StandardWidthTable.prototype.clone = function () {\n var swt = this;\n swt.widths = this.widths;\n return swt;\n };\n /**\n * Converts width table to a `PDF array`.\n * @private\n */\n StandardWidthTable.prototype.toArray = function () {\n var arr = new PdfArray(this.widths);\n return arr;\n };\n return StandardWidthTable;\n}(WidthTable));\nexport { StandardWidthTable };\n","/**\n * TrueTypeFont.ts class for EJ2-PDF\n */\nimport { ByteArray } from './../../graphics/images/index';\nimport { TtfReader } from './ttf-reader';\nimport { PdfDictionary, SaveDescendantFontEventHandler, SaveFontDictionaryEventHandler } from './../../primitives/pdf-dictionary';\nimport { SaveFontProgramEventHandler, SaveCmapEventHandler } from './../../primitives/pdf-stream';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfString } from './../../primitives/pdf-string';\nimport { PdfReferenceHolder } from './../../primitives/pdf-reference';\nimport { PdfFontMetrics } from './pdf-font-metrics';\nimport { StandardWidthTable } from './pdf-font-metrics';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { Dictionary } from './../../collections/dictionary';\nimport { FontDescriptorFlags } from './enum';\nimport { RectangleF } from './../../drawing/pdf-drawing';\nimport { Operators } from './../../input-output/pdf-operators';\nvar UnicodeTrueTypeFont = /** @class */ (function () {\n /* tslint:enable */\n //Constructors\n /**\n * Initializes a new instance of the `PdfTrueTypeFont` class.\n * @private\n */\n function UnicodeTrueTypeFont(base64String, size) {\n // Fields\n this.nameString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Indicates whether the font program is compressed or not.\n * @private\n */\n this.isCompress = false;\n /**\n * Indicates whether the font is embedded or not.\n */\n this.isEmbedFont = false;\n /**\n * Cmap table's start prefix.\n */\n /* tslint:disable */\n this.cmapPrefix = '/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap' + Operators.newLine + '/CIDSystemInfo << /Registry (Adobe)/Ordering (UCS)/Supplement 0>> def\\n/CMapName ' + '/Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange' + Operators.newLine;\n /* tslint:enable */\n /**\n * Cmap table's start suffix.\n */\n this.cmapEndCodespaceRange = 'endcodespacerange' + Operators.newLine;\n /**\n * Cmap's begin range marker.\n */\n this.cmapBeginRange = 'beginbfrange' + Operators.newLine;\n /**\n * Cmap's end range marker.\n */\n this.cmapEndRange = 'endbfrange' + Operators.newLine;\n /**\n * Cmap table's end\n */\n /* tslint:disable */\n this.cmapSuffix = 'endbfrange\\nendcmap\\nCMapName currentdict ' + '/CMap defineresource pop\\nend end' + Operators.newLine;\n if (base64String === null || base64String === undefined) {\n throw new Error('ArgumentNullException:base64String');\n }\n this.fontSize = size;\n this.fontString = base64String;\n this.Initialize();\n }\n //Implementation\n /**\n * Returns width of the char symbol.\n */\n UnicodeTrueTypeFont.prototype.getCharWidth = function (charCode) {\n var codeWidth = this.ttfReader.getCharWidth(charCode);\n return codeWidth;\n };\n /**\n * Returns width of the text line.\n */\n UnicodeTrueTypeFont.prototype.getLineWidth = function (line) {\n // if (line == null) {\n // throw new Error('ArgumentNullException : line');\n // }\n var width = 0;\n for (var i = 0, len = line.length; i < len; i++) {\n var ch = line[i];\n var charWidth = this.getCharWidth(ch);\n width += charWidth;\n }\n return width;\n };\n /**\n * Initializes a new instance of the `PdfTrueTypeFont` class.\n * @private\n */\n UnicodeTrueTypeFont.prototype.Initialize = function () {\n var byteArray = new ByteArray(this.fontString.length);\n byteArray.writeFromBase64String(this.fontString);\n this.fontData = byteArray.internalBuffer;\n this.ttfReader = new TtfReader(this.fontData);\n this.ttfMetrics = this.ttfReader.metrics;\n };\n UnicodeTrueTypeFont.prototype.createInternals = function () {\n this.fontDictionary = new PdfDictionary();\n this.fontProgram = new PdfStream();\n this.cmap = new PdfStream();\n this.descendantFont = new PdfDictionary();\n this.metrics = new PdfFontMetrics();\n this.ttfReader.createInternals();\n this.ttfMetrics = this.ttfReader.metrics;\n this.initializeMetrics();\n // Create all the dictionaries of the font.\n this.subsetName = this.getFontName();\n this.createDescendantFont();\n this.createCmap();\n this.createFontDictionary();\n this.createFontProgram();\n };\n UnicodeTrueTypeFont.prototype.getInternals = function () {\n return this.fontDictionary;\n };\n /**\n * Initializes metrics.\n */\n UnicodeTrueTypeFont.prototype.initializeMetrics = function () {\n var ttfMetrics = this.ttfReader.metrics;\n this.metrics.ascent = ttfMetrics.macAscent;\n this.metrics.descent = ttfMetrics.macDescent;\n this.metrics.height = ttfMetrics.macAscent - ttfMetrics.macDescent + ttfMetrics.lineGap;\n this.metrics.name = ttfMetrics.fontFamily;\n this.metrics.postScriptName = ttfMetrics.postScriptName;\n this.metrics.size = this.fontSize;\n this.metrics.widthTable = new StandardWidthTable(ttfMetrics.widthTable);\n this.metrics.lineGap = ttfMetrics.lineGap;\n this.metrics.subScriptSizeFactor = ttfMetrics.subScriptSizeFactor;\n this.metrics.superscriptSizeFactor = ttfMetrics.superscriptSizeFactor;\n this.metrics.isBold = ttfMetrics.isBold;\n };\n /**\n * Gets random string.\n */\n UnicodeTrueTypeFont.prototype.getFontName = function () {\n var builder = '';\n var name;\n // if (this.isEmbed === false) {\n for (var i = 0; i < 6; i++) {\n var index = Math.floor(Math.random() * (25 - 0 + 1)) + 0;\n builder += this.nameString[index];\n }\n builder += '+';\n // }\n builder += this.ttfReader.metrics.postScriptName;\n name = builder.toString();\n // if (name === '') {\n // name = this.ttfReader.metrics.fontFamily;\n // }\n name = this.formatName(name);\n return name;\n };\n /**\n * Generates name of the font.\n */\n UnicodeTrueTypeFont.prototype.formatName = function (fontName) {\n // if (fontName === null) {\n // throw new Error('ArgumentNullException : fontName');\n // }\n // if (fontName === '') {\n // throw new Error('ArgumentOutOfRangeException : fontName, Parameter can not be empty');\n // }\n var ret = fontName.replace('(', '#28');\n ret = ret.replace(')', '#29');\n ret = ret.replace('[', '#5B');\n ret = ret.replace(']', '#5D');\n ret = ret.replace('<', '#3C');\n ret = ret.replace('>', '#3E');\n ret = ret.replace('{', '#7B');\n ret = ret.replace('}', '#7D');\n ret = ret.replace('/', '#2F');\n ret = ret.replace('%', '#25');\n return ret.replace(' ', '#20');\n };\n /**\n * Creates descendant font.\n */\n UnicodeTrueTypeFont.prototype.createDescendantFont = function () {\n // Set property used to clone Font every time\n this.descendantFont.isFont = true;\n this.descendantFont.descendantFontBeginSave = new SaveDescendantFontEventHandler(this);\n this.descendantFont.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n this.descendantFont.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.cIDFontType2));\n this.descendantFont.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.subsetName));\n this.descendantFont.items.setValue(this.dictionaryProperties.cIDToGIDMap, new PdfName(this.dictionaryProperties.identity));\n this.descendantFont.items.setValue(this.dictionaryProperties.dw, new PdfNumber(1000));\n this.fontDescriptor = this.createFontDescriptor();\n this.descendantFont.items.setValue(this.dictionaryProperties.fontDescriptor, new PdfReferenceHolder(this.fontDescriptor));\n var systemInfo = this.createSystemInfo();\n this.descendantFont.items.setValue(this.dictionaryProperties.cIDSystemInfo, systemInfo);\n };\n /**\n * Creates font descriptor.\n */\n UnicodeTrueTypeFont.prototype.createFontDescriptor = function () {\n var descriptor = new PdfDictionary();\n var metrics = this.ttfReader.metrics;\n // Set property used to clone Font every time\n descriptor.isFont = true;\n descriptor.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.fontDescriptor));\n descriptor.items.setValue(this.dictionaryProperties.fontName, new PdfName(this.subsetName));\n descriptor.items.setValue(this.dictionaryProperties.flags, new PdfNumber(this.getDescriptorFlags()));\n descriptor.items.setValue(this.dictionaryProperties.fontBBox, PdfArray.fromRectangle(this.getBoundBox()));\n descriptor.items.setValue(this.dictionaryProperties.missingWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.stemV, new PdfNumber(metrics.stemV));\n descriptor.items.setValue(this.dictionaryProperties.italicAngle, new PdfNumber(metrics.italicAngle));\n descriptor.items.setValue(this.dictionaryProperties.capHeight, new PdfNumber(metrics.capHeight));\n descriptor.items.setValue(this.dictionaryProperties.ascent, new PdfNumber(metrics.winAscent));\n descriptor.items.setValue(this.dictionaryProperties.descent, new PdfNumber(metrics.winDescent));\n descriptor.items.setValue(this.dictionaryProperties.leading, new PdfNumber(metrics.leading));\n descriptor.items.setValue(this.dictionaryProperties.avgWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.fontFile2, new PdfReferenceHolder(this.fontProgram));\n descriptor.items.setValue(this.dictionaryProperties.maxWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.xHeight, new PdfNumber(0));\n descriptor.items.setValue(this.dictionaryProperties.stemH, new PdfNumber(0));\n return descriptor;\n };\n /**\n * Generates cmap.\n * @private\n */\n UnicodeTrueTypeFont.prototype.createCmap = function () {\n this.cmap.cmapBeginSave = new SaveCmapEventHandler(this);\n };\n /**\n * Generates font dictionary.\n */\n UnicodeTrueTypeFont.prototype.createFontDictionary = function () {\n // Set property used to clone Font every time\n this.fontDictionary.isFont = true;\n this.fontDictionary.fontDictionaryBeginSave = new SaveFontDictionaryEventHandler(this);\n this.fontDictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n this.fontDictionary.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.subsetName));\n this.fontDictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.type0));\n this.fontDictionary.items.setValue(this.dictionaryProperties.encoding, new PdfName(this.dictionaryProperties.identityH));\n var descFonts = new PdfArray();\n var reference = new PdfReferenceHolder(this.descendantFont);\n // Set property used to clone Font every time\n descFonts.isFont = true;\n descFonts.add(reference);\n this.fontDictionary.items.setValue(this.dictionaryProperties.descendantFonts, descFonts);\n };\n /**\n * Creates font program.\n */\n UnicodeTrueTypeFont.prototype.createFontProgram = function () {\n this.fontProgram.fontProgramBeginSave = new SaveFontProgramEventHandler(this);\n };\n /**\n * Creates system info dictionary for CID font.\n * @private\n */\n UnicodeTrueTypeFont.prototype.createSystemInfo = function () {\n var systemInfo = new PdfDictionary();\n systemInfo.items.setValue(this.dictionaryProperties.registry, new PdfString('Adobe'));\n systemInfo.items.setValue(this.dictionaryProperties.ordering, new PdfString(this.dictionaryProperties.identity));\n systemInfo.items.setValue(this.dictionaryProperties.supplement, new PdfNumber(0));\n return systemInfo;\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n UnicodeTrueTypeFont.prototype.descendantFontBeginSave = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var width = this.getDescendantWidth();\n if (width !== null) {\n this.descendantFont.items.setValue(this.dictionaryProperties.w, width);\n }\n }\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n UnicodeTrueTypeFont.prototype.cmapBeginSave = function () {\n this.generateCmap();\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n /* tslint:disable */\n UnicodeTrueTypeFont.prototype.fontDictionaryBeginSave = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0 && !this.fontDictionary.containsKey(this.dictionaryProperties.toUnicode)) {\n this.fontDictionary.items.setValue(this.dictionaryProperties.toUnicode, new PdfReferenceHolder(this.cmap));\n }\n };\n /* tslint:enable */\n /**\n * Runs before font program stream save.\n */\n UnicodeTrueTypeFont.prototype.fontProgramBeginSave = function () {\n this.isCompress = true;\n this.generateFontProgram();\n };\n /**\n * Gets width description pad array for c i d font.\n */\n UnicodeTrueTypeFont.prototype.getDescendantWidth = function () {\n var array = new PdfArray();\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var glyphInfo = [];\n // if (!this.isEmbedFont) {\n var keys = this.usedChars.keys();\n for (var i = 0; i < keys.length; i++) {\n var chLen = keys[i];\n var glyph = this.ttfReader.getGlyph(chLen);\n if (glyph.empty) {\n continue;\n }\n glyphInfo.push(glyph);\n }\n // } else {\n // glyphInfo = this.ttfReader.getAllGlyphs();\n // }\n glyphInfo.sort(function (a, b) { return a.index - b.index; });\n var firstGlyphIndex = 0;\n var lastGlyphIndex = 0;\n var firstGlyphIndexWasSet = false;\n var widthDetails = new PdfArray();\n // if (!this.isEmbedFont) {\n for (var i = 0; i < glyphInfo.length; i++) {\n var glyph = glyphInfo[i];\n if (!firstGlyphIndexWasSet) {\n firstGlyphIndexWasSet = true;\n firstGlyphIndex = glyph.index;\n lastGlyphIndex = glyph.index - 1;\n }\n if ((lastGlyphIndex + 1 !== glyph.index || (i + 1 === glyphInfo.length)) && glyphInfo.length > 1) {\n // Add glyph index / width.\n array.add(new PdfNumber(firstGlyphIndex));\n if (i !== 0) {\n array.add(widthDetails);\n }\n firstGlyphIndex = glyph.index;\n widthDetails = new PdfArray();\n }\n widthDetails.add(new PdfNumber(glyph.width));\n if (i + 1 === glyphInfo.length) {\n array.add(new PdfNumber(firstGlyphIndex));\n array.add(widthDetails);\n }\n lastGlyphIndex = glyph.index;\n }\n // } else {\n // for (let i : number = 0; i < glyphInfo.length; i++) {\n // let glyph : TtfGlyphInfo = glyphInfo[i];\n // if (!firstGlyphIndexWasSet) {\n // firstGlyphIndexWasSet = true;\n // lastGlyphIndex = glyph.index - 1;\n // }\n // firstGlyphIndex = glyph.index;\n // if ((lastGlyphIndex + 1 === glyph.index || (i + 1 === glyphInfo.length)) && glyphInfo.length > 1) {\n // // Add glyph index / width.\n // widthDetails.add(new PdfNumber(glyph.width));\n // array.add(new PdfNumber(firstGlyphIndex));\n // array.add(widthDetails);\n // widthDetails = new PdfArray();\n // }\n // lastGlyphIndex = glyph.index;\n // }\n // }\n }\n return array;\n };\n /**\n * Creates cmap.\n */\n UnicodeTrueTypeFont.prototype.generateCmap = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var glyphChars = this.ttfReader.getGlyphChars(this.usedChars);\n if (glyphChars.size() > 0) {\n var keys = glyphChars.keys().sort();\n // add first and last glyph indexes\n var first = keys[0];\n var last = keys[keys.length - 1];\n var middlePart = this.toHexString(first, false) + this.toHexString(last, false) + Operators.newLine;\n var builder = '';\n builder += this.cmapPrefix;\n builder += middlePart;\n builder += this.cmapEndCodespaceRange;\n var nextRange = 0;\n for (var i = 0; i < keys.length; i++) {\n if (nextRange === 0) {\n if (i !== 0) {\n builder += this.cmapEndRange;\n }\n nextRange = Math.min(100, keys.length - i);\n builder += nextRange;\n builder += Operators.whiteSpace;\n builder += this.cmapBeginRange;\n }\n nextRange -= 1;\n var key = keys[i];\n /* tslint:disable */\n builder += this.toHexString(key, true) + this.toHexString(key, true) + this.toHexString(glyphChars.getValue(key), true) + '\\n';\n /* tslint:enable */\n }\n builder += this.cmapSuffix;\n this.cmap.clearStream();\n this.cmap.isFont = true;\n this.cmap.write(builder);\n }\n }\n };\n /**\n * Generates font program.\n */\n UnicodeTrueTypeFont.prototype.generateFontProgram = function () {\n var fontProgram = null;\n this.usedChars = (this.usedChars === null || this.usedChars === undefined) ? new Dictionary() : this.usedChars;\n this.ttfReader.setOffset(0);\n fontProgram = this.ttfReader.readFontProgram(this.usedChars);\n this.fontProgram.clearStream();\n this.fontProgram.isFont = true;\n this.fontProgram.writeBytes(fontProgram);\n };\n /**\n * Calculates flags for the font descriptor.\n * @private\n */\n UnicodeTrueTypeFont.prototype.getDescriptorFlags = function () {\n var flags = 0;\n var metrics = this.ttfReader.metrics;\n if (metrics.isFixedPitch) {\n flags |= FontDescriptorFlags.FixedPitch;\n }\n if (metrics.isSymbol) {\n flags |= FontDescriptorFlags.Symbolic;\n }\n else {\n flags |= FontDescriptorFlags.Nonsymbolic;\n }\n if (metrics.isItalic) {\n flags |= FontDescriptorFlags.Italic;\n }\n if (metrics.isBold) {\n flags |= FontDescriptorFlags.ForceBold;\n }\n return flags;\n };\n /**\n * Calculates BoundBox of the descriptor.\n * @private\n */\n UnicodeTrueTypeFont.prototype.getBoundBox = function () {\n var rect = this.ttfReader.metrics.fontBox;\n var width = Math.abs(rect.right - rect.left);\n var height = Math.abs(rect.top - rect.bottom);\n var rectangle = new RectangleF(rect.left, rect.bottom, width, height);\n return rectangle;\n };\n /**\n * Converts integer of decimal system to hex integer.\n */\n UnicodeTrueTypeFont.prototype.toHexString = function (n, isCaseChange) {\n var s = n.toString(16);\n if (isCaseChange) {\n s = s.toUpperCase();\n }\n return '<0000'.substring(0, 5 - s.length) + s + '>';\n };\n /**\n * Stores used symbols.\n */\n UnicodeTrueTypeFont.prototype.setSymbols = function (text) {\n if (text === null) {\n throw new Error('Argument Null Exception : text');\n }\n if (this.usedChars === null || this.usedChars === undefined) {\n this.usedChars = new Dictionary();\n }\n for (var i = 0; i < text.length; i++) {\n var ch = text[i];\n this.usedChars.setValue(ch, String.fromCharCode(0));\n }\n // else {\n // if (text === null) {\n // throw new Error('Argument Null Exception : glyphs');\n // }\n // if (this.usedChars === null || this.usedChars === undefined) {\n // this.usedChars = new Dictionary();\n // }\n // for (let i : number = 0; i < text.length; i++) {\n // let glyphIndex : number = text[i];\n // let glyph : TtfGlyphInfo = this.ttfReader.getGlyph(glyphIndex);\n // if (!glyph == null) {\n // let c : string = glyph.charCode.toLocaleString();\n // this.usedChars.setValue(c, String.fromCharCode(0));\n // }\n // }\n // }\n if (this.isEmbedFont === false) {\n this.getDescendantWidth();\n }\n };\n return UnicodeTrueTypeFont;\n}());\nexport { UnicodeTrueTypeFont };\n","/**\n * ArabicShapeRenderer.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../../../collections/dictionary';\nvar ArabicShapeRenderer = /** @class */ (function () {\n //#endregion\n //#region Constructor\n function ArabicShapeRenderer() {\n //#region Constants\n this.arabicCharTable = [['\\u0621', '\\uFE80'], ['\\u0622', '\\uFE81', '\\uFE82'],\n ['\\u0623', '\\uFE83', '\\uFE84'],\n ['\\u0624', '\\uFE85', '\\uFE86'],\n ['\\u0625', '\\uFE87', '\\uFE88'],\n ['\\u0626', '\\uFE89', '\\uFE8A', '\\uFE8B', '\\uFE8C'],\n ['\\u0627', '\\uFE8D', '\\uFE8E'],\n ['\\u0628', '\\uFE8F', '\\uFE90', '\\uFE91', '\\uFE92'],\n ['\\u0629', '\\uFE93', '\\uFE94'],\n ['\\u062A', '\\uFE95', '\\uFE96', '\\uFE97', '\\uFE98'],\n ['\\u062B', '\\uFE99', '\\uFE9A', '\\uFE9B', '\\uFE9C'],\n ['\\u062C', '\\uFE9D', '\\uFE9E', '\\uFE9F', '\\uFEA0'],\n ['\\u062D', '\\uFEA1', '\\uFEA2', '\\uFEA3', '\\uFEA4'],\n ['\\u062E', '\\uFEA5', '\\uFEA6', '\\uFEA7', '\\uFEA8'],\n ['\\u062F', '\\uFEA9', '\\uFEAA'],\n ['\\u0630', '\\uFEAB', '\\uFEAC'],\n ['\\u0631', '\\uFEAD', '\\uFEAE'],\n ['\\u0632', '\\uFEAF', '\\uFEB0'],\n ['\\u0633', '\\uFEB1', '\\uFEB2', '\\uFEB3', '\\uFEB4'],\n ['\\u0634', '\\uFEB5', '\\uFEB6', '\\uFEB7', '\\uFEB8'],\n ['\\u0635', '\\uFEB9', '\\uFEBA', '\\uFEBB', '\\uFEBC'],\n ['\\u0636', '\\uFEBD', '\\uFEBE', '\\uFEBF', '\\uFEC0'],\n ['\\u0637', '\\uFEC1', '\\uFEC2', '\\uFEC3', '\\uFEC4'],\n ['\\u0638', '\\uFEC5', '\\uFEC6', '\\uFEC7', '\\uFEC8'],\n ['\\u0639', '\\uFEC9', '\\uFECA', '\\uFECB', '\\uFECC'],\n ['\\u063A', '\\uFECD', '\\uFECE', '\\uFECF', '\\uFED0'],\n ['\\u0640', '\\u0640', '\\u0640', '\\u0640', '\\u0640'],\n ['\\u0641', '\\uFED1', '\\uFED2', '\\uFED3', '\\uFED4'],\n ['\\u0642', '\\uFED5', '\\uFED6', '\\uFED7', '\\uFED8'],\n ['\\u0643', '\\uFED9', '\\uFEDA', '\\uFEDB', '\\uFEDC'],\n ['\\u0644', '\\uFEDD', '\\uFEDE', '\\uFEDF', '\\uFEE0'],\n ['\\u0645', '\\uFEE1', '\\uFEE2', '\\uFEE3', '\\uFEE4'],\n ['\\u0646', '\\uFEE5', '\\uFEE6', '\\uFEE7', '\\uFEE8'],\n ['\\u0647', '\\uFEE9', '\\uFEEA', '\\uFEEB', '\\uFEEC'],\n ['\\u0648', '\\uFEED', '\\uFEEE'],\n ['\\u0649', '\\uFEEF', '\\uFEF0', '\\uFBE8', '\\uFBE9'],\n ['\\u064A', '\\uFEF1', '\\uFEF2', '\\uFEF3', '\\uFEF4'],\n ['\\u0671', '\\uFB50', '\\uFB51'],\n ['\\u0679', '\\uFB66', '\\uFB67', '\\uFB68', '\\uFB69'],\n ['\\u067A', '\\uFB5E', '\\uFB5F', '\\uFB60', '\\uFB61'],\n ['\\u067B', '\\uFB52', '\\uFB53', '\\uFB54', '\\uFB55'],\n ['\\u067E', '\\uFB56', '\\uFB57', '\\uFB58', '\\uFB59'],\n ['\\u067F', '\\uFB62', '\\uFB63', '\\uFB64', '\\uFB65'],\n ['\\u0680', '\\uFB5A', '\\uFB5B', '\\uFB5C', '\\uFB5D'],\n ['\\u0683', '\\uFB76', '\\uFB77', '\\uFB78', '\\uFB79'],\n ['\\u0684', '\\uFB72', '\\uFB73', '\\uFB74', '\\uFB75'],\n ['\\u0686', '\\uFB7A', '\\uFB7B', '\\uFB7C', '\\uFB7D'],\n ['\\u0687', '\\uFB7E', '\\uFB7F', '\\uFB80', '\\uFB81'],\n ['\\u0688', '\\uFB88', '\\uFB89'],\n ['\\u068C', '\\uFB84', '\\uFB85'],\n ['\\u068D', '\\uFB82', '\\uFB83'],\n ['\\u068E', '\\uFB86', '\\uFB87'],\n ['\\u0691', '\\uFB8C', '\\uFB8D'],\n ['\\u0698', '\\uFB8A', '\\uFB8B'],\n ['\\u06A4', '\\uFB6A', '\\uFB6B', '\\uFB6C', '\\uFB6D'],\n ['\\u06A6', '\\uFB6E', '\\uFB6F', '\\uFB70', '\\uFB71'],\n ['\\u06A9', '\\uFB8E', '\\uFB8F', '\\uFB90', '\\uFB91'],\n ['\\u06AD', '\\uFBD3', '\\uFBD4', '\\uFBD5', '\\uFBD6'],\n ['\\u06AF', '\\uFB92', '\\uFB93', '\\uFB94', '\\uFB95'],\n ['\\u06B1', '\\uFB9A', '\\uFB9B', '\\uFB9C', '\\uFB9D'],\n ['\\u06B3', '\\uFB96', '\\uFB97', '\\uFB98', '\\uFB99'],\n ['\\u06BA', '\\uFB9E', '\\uFB9F'],\n ['\\u06BB', '\\uFBA0', '\\uFBA1', '\\uFBA2', '\\uFBA3'],\n ['\\u06BE', '\\uFBAA', '\\uFBAB', '\\uFBAC', '\\uFBAD'],\n ['\\u06C0', '\\uFBA4', '\\uFBA5'],\n ['\\u06C1', '\\uFBA6', '\\uFBA7', '\\uFBA8', '\\uFBA9'],\n ['\\u06C5', '\\uFBE0', '\\uFBE1'],\n ['\\u06C6', '\\uFBD9', '\\uFBDA'],\n ['\\u06C7', '\\uFBD7', '\\uFBD8'],\n ['\\u06C8', '\\uFBDB', '\\uFBDC'],\n ['\\u06C9', '\\uFBE2', '\\uFBE3'],\n ['\\u06CB', '\\uFBDE', '\\uFBDF'],\n ['\\u06CC', '\\uFBFC', '\\uFBFD', '\\uFBFE', '\\uFBFF'],\n ['\\u06D0', '\\uFBE4', '\\uFBE5', '\\uFBE6', '\\uFBE7'],\n ['\\u06D2', '\\uFBAE', '\\uFBAF'],\n ['\\u06D3', '\\uFBB0', '\\uFBB1']\n ];\n this.alef = '\\u0627';\n this.alefHamza = '\\u0623';\n this.alefHamzaBelow = '\\u0625';\n this.alefMadda = '\\u0622';\n this.lam = '\\u0644';\n this.hamza = '\\u0621';\n this.zeroWidthJoiner = '\\u200D';\n this.hamzaAbove = '\\u0654';\n this.hamzaBelow = '\\u0655';\n this.wawHamza = '\\u0624';\n this.yehHamza = '\\u0626';\n this.waw = '\\u0648';\n this.alefMaksura = '\\u0649';\n this.yeh = '\\u064A';\n this.farsiYeh = '\\u06CC';\n this.shadda = '\\u0651';\n this.madda = '\\u0653';\n this.lwa = '\\uFEFB';\n this.lwawh = '\\uFEF7';\n this.lwawhb = '\\uFEF9';\n this.lwawm = '\\uFEF5';\n this.bwhb = '\\u06D3';\n this.fathatan = '\\u064B';\n this.superScriptalef = '\\u0670';\n this.vowel = 0x1;\n // #endregion\n //#region Fields\n this.arabicMapTable = new Dictionary();\n for (var i = 0; i < this.arabicCharTable.length; i++) {\n this.arabicMapTable.setValue(this.arabicCharTable[i][0], this.arabicCharTable[i]);\n }\n }\n //#endregion\n //#region implementation\n ArabicShapeRenderer.prototype.getCharacterShape = function (input, index) {\n if ((input >= this.hamza) && (input <= this.bwhb)) {\n var value = [];\n if (this.arabicMapTable.getValue(input)) {\n value = this.arabicMapTable.getValue(input);\n return value[index + 1];\n }\n }\n else if (input >= this.lwawm && input <= this.lwa) {\n return (input);\n }\n return input;\n };\n ArabicShapeRenderer.prototype.shape = function (text, level) {\n var builder = '';\n var str2 = '';\n for (var i = 0; i < text.length; i++) {\n var c = text[i];\n if (c >= '؀' && c <= 'ۿ') {\n //if(c>= 0x0600.toString() && c<= 0x06FF.toString()) {\n str2 = str2 + c;\n }\n else {\n if (str2.length > 0) {\n var st = this.doShape(str2.toString(), 0);\n builder = builder + st;\n str2 = '';\n }\n builder = builder + c;\n }\n }\n if (str2.length > 0) {\n var st = this.doShape(str2.toString(), 0);\n builder = builder + st;\n }\n return builder.toString();\n };\n ArabicShapeRenderer.prototype.doShape = function (input, level) {\n var str = '';\n var ligature = 0;\n var len = 0;\n var i = 0;\n var next = '';\n var previous = new ArabicShape();\n var present = new ArabicShape();\n while (i < input.length) {\n next = input[i++];\n ligature = this.ligature(next, present);\n if (ligature === 0) {\n var shapeCount = this.getShapeCount(next);\n len = (shapeCount === 1) ? 0 : 2;\n if (previous.Shapes > 2) {\n len += 1;\n }\n len = len % (present.Shapes);\n present.Value = this.getCharacterShape(present.Value, len);\n str = this.append(str, previous, level);\n previous = present;\n present = new ArabicShape();\n present.Value = next;\n present.Shapes = shapeCount;\n present.Ligature++;\n }\n }\n len = (previous.Shapes > 2) ? 1 : 0;\n len = len % (present.Shapes);\n present.Value = this.getCharacterShape(present.Value, len);\n str = this.append(str, previous, level);\n str = this.append(str, present, level);\n return str.toString();\n };\n ArabicShapeRenderer.prototype.append = function (builder, shape, level) {\n if (shape.Value !== '') {\n builder = builder + shape.Value;\n shape.Ligature -= 1;\n if (shape.Type !== '') {\n if ((level & this.vowel) === 0) {\n builder = builder + shape.Type;\n shape.Ligature -= 1;\n }\n else {\n shape.Ligature -= 1;\n }\n }\n if (shape.vowel !== '') {\n if ((level & this.vowel) === 0) {\n builder = builder + shape.vowel;\n shape.Ligature -= 1;\n }\n else {\n shape.Ligature -= 1;\n }\n }\n }\n return builder;\n };\n ArabicShapeRenderer.prototype.ligature = function (value, shape) {\n if (shape.Value !== '') {\n var result = 0;\n if ((value >= this.fathatan && value <= this.hamzaBelow) || value === this.superScriptalef) {\n result = 1;\n if ((shape.vowel !== '') && (value !== this.shadda)) {\n result = 2;\n }\n if (value === this.shadda) {\n if (shape.Type == null) {\n shape.Type = this.shadda;\n }\n else {\n return 0;\n }\n }\n else if (value === this.hamzaBelow) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefHamzaBelow;\n result = 2;\n }\n else if (value === this.lwa) {\n shape.Value = this.lwawhb;\n result = 2;\n }\n else {\n shape.Type = this.hamzaBelow;\n }\n }\n else if (value === this.hamzaAbove) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefHamza;\n result = 2;\n }\n else if (shape.Value === this.lwa) {\n shape.Value = this.lwawh;\n result = 2;\n }\n else if (shape.Value === this.waw) {\n shape.Value = this.wawHamza;\n result = 2;\n }\n else if (shape.Value === this.yeh || shape.Value === this.alefMaksura || shape.Value === this.farsiYeh) {\n shape.Value = this.yehHamza;\n result = 2;\n }\n else {\n shape.Type = this.hamzaAbove;\n }\n }\n else if (value === this.madda) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefMadda;\n result = 2;\n }\n }\n else {\n shape.vowel = value;\n }\n if (result === 1) {\n shape.Ligature++;\n }\n return result;\n }\n if (shape.vowel !== '') {\n return 0;\n }\n if (shape.Value === this.lam) {\n if (value === this.alef) {\n shape.Value = this.lwa;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefHamza) {\n shape.Value = this.lwawh;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefHamzaBelow) {\n shape.Value = this.lwawhb;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefMadda) {\n shape.Value = this.lwawm;\n shape.Shapes = 2;\n result = 3;\n }\n }\n // else if (shape.Value === '') {\n // shape.Value = value;\n // shape.Shapes = this.getShapeCount(value);\n // result = 1;\n // }\n return result;\n }\n else {\n return 0;\n }\n };\n ArabicShapeRenderer.prototype.getShapeCount = function (shape) {\n if ((shape >= this.hamza) && (shape <= this.bwhb) && !((shape >= this.fathatan && shape <= this.hamzaBelow)\n || shape === this.superScriptalef)) {\n var c = [];\n if (this.arabicMapTable.getValue(shape)) {\n c = this.arabicMapTable.getValue(shape);\n return c.length - 1;\n }\n }\n else if (shape === this.zeroWidthJoiner) {\n return 4;\n }\n return 1;\n };\n return ArabicShapeRenderer;\n}());\nexport { ArabicShapeRenderer };\n//#endregion\n//#region Internals\nvar ArabicShape = /** @class */ (function () {\n function ArabicShape() {\n //#region Fields\n this.shapeValue = '';\n this.shapeType = '';\n this.shapeVowel = '';\n this.shapeLigature = 0;\n this.shapeShapes = 1;\n //#endregion\n }\n Object.defineProperty(ArabicShape.prototype, \"Value\", {\n //#endregion\n //#region Properties \n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeValue;\n },\n set: function (value) {\n this.shapeValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Type\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeType;\n },\n set: function (value) {\n this.shapeType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"vowel\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeVowel;\n },\n set: function (value) {\n this.shapeVowel = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Ligature\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeLigature;\n },\n set: function (value) {\n this.shapeLigature = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Shapes\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeShapes;\n },\n set: function (value) {\n this.shapeShapes = value;\n },\n enumerable: true,\n configurable: true\n });\n return ArabicShape;\n}());\nexport { ArabicShape };\n//#endregion\n","/**\n * Bidi.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../../../collections/dictionary';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar Bidi = /** @class */ (function () {\n //#endregion\n //#region Constructor\n function Bidi() {\n //#region Fields\n this.indexes = [];\n this.indexLevels = [];\n this.mirroringShapeCharacters = new Dictionary();\n this.update();\n }\n //#endregion\n //#region implementation\n Bidi.prototype.doMirrorShaping = function (text) {\n var result = [];\n for (var i = 0; i < text.length; i++) {\n if (((this.indexLevels[i] & 1) === 1) && this.mirroringShapeCharacters.containsKey(text[i].charCodeAt(0))) {\n result[i] = String.fromCharCode(this.mirroringShapeCharacters.getValue(text[i].charCodeAt(0)));\n }\n else {\n result[i] = text[i].toString();\n }\n }\n var res = '';\n for (var j = 0; j < result.length; j++) {\n res = res + result[j];\n }\n return res;\n };\n Bidi.prototype.getLogicalToVisualString = function (inputText, isRtl) {\n var rtlCharacters = new RtlCharacters();\n this.indexLevels = rtlCharacters.getVisualOrder(inputText, isRtl);\n this.setDefaultIndexLevel();\n this.doOrder(0, this.indexLevels.length - 1);\n var text = this.doMirrorShaping(inputText);\n //let text : string = inputText;\n var resultBuilder = '';\n for (var i = 0; i < this.indexes.length; i++) {\n var index = this.indexes[i];\n resultBuilder += text[index];\n }\n return resultBuilder.toString();\n };\n Bidi.prototype.setDefaultIndexLevel = function () {\n for (var i = 0; i < this.indexLevels.length; i++) {\n this.indexes[i] = i;\n }\n };\n Bidi.prototype.doOrder = function (sIndex, eIndex) {\n var max = this.indexLevels[sIndex];\n var min = max;\n var odd = max;\n var even = max;\n for (var i = sIndex + 1; i <= eIndex; ++i) {\n var data = this.indexLevels[i];\n if (data > max) {\n max = data;\n }\n else if (data < min) {\n min = data;\n }\n odd &= data;\n even |= data;\n }\n if ((even & 1) === 0) {\n return;\n }\n if ((odd & 1) === 1) {\n this.reArrange(sIndex, eIndex + 1);\n return;\n }\n min |= 1;\n while (max >= min) {\n var pstart = sIndex;\n /*tslint:disable:no-constant-condition */\n while (true) {\n while (pstart <= eIndex) {\n if (this.indexLevels[pstart] >= max) {\n break;\n }\n pstart += 1;\n }\n if (pstart > eIndex) {\n break;\n }\n var pend = pstart + 1;\n while (pend <= eIndex) {\n if (this.indexLevels[pend] < max) {\n break;\n }\n pend += 1;\n }\n this.reArrange(pstart, pend);\n pstart = pend + 1;\n }\n max -= 1;\n }\n };\n Bidi.prototype.reArrange = function (i, j) {\n var length = (i + j) / 2;\n --j;\n for (; i < length; ++i, --j) {\n var temp = this.indexes[i];\n this.indexes[i] = this.indexes[j];\n this.indexes[j] = temp;\n }\n };\n Bidi.prototype.update = function () {\n this.mirroringShapeCharacters.setValue(40, 41);\n this.mirroringShapeCharacters.setValue(41, 40);\n this.mirroringShapeCharacters.setValue(60, 62);\n this.mirroringShapeCharacters.setValue(62, 60);\n this.mirroringShapeCharacters.setValue(91, 93);\n this.mirroringShapeCharacters.setValue(93, 91);\n this.mirroringShapeCharacters.setValue(123, 125);\n this.mirroringShapeCharacters.setValue(125, 123);\n this.mirroringShapeCharacters.setValue(171, 187);\n this.mirroringShapeCharacters.setValue(187, 171);\n this.mirroringShapeCharacters.setValue(8249, 8250);\n this.mirroringShapeCharacters.setValue(8250, 8249);\n this.mirroringShapeCharacters.setValue(8261, 8262);\n this.mirroringShapeCharacters.setValue(8262, 8261);\n this.mirroringShapeCharacters.setValue(8317, 8318);\n this.mirroringShapeCharacters.setValue(8318, 8317);\n this.mirroringShapeCharacters.setValue(8333, 8334);\n this.mirroringShapeCharacters.setValue(8334, 8333);\n this.mirroringShapeCharacters.setValue(8712, 8715);\n this.mirroringShapeCharacters.setValue(8713, 8716);\n this.mirroringShapeCharacters.setValue(8714, 8717);\n this.mirroringShapeCharacters.setValue(8715, 8712);\n this.mirroringShapeCharacters.setValue(8716, 8713);\n this.mirroringShapeCharacters.setValue(8717, 8714);\n this.mirroringShapeCharacters.setValue(8725, 10741);\n this.mirroringShapeCharacters.setValue(8764, 8765);\n this.mirroringShapeCharacters.setValue(8765, 8764);\n this.mirroringShapeCharacters.setValue(8771, 8909);\n this.mirroringShapeCharacters.setValue(8786, 8787);\n this.mirroringShapeCharacters.setValue(8787, 8786);\n this.mirroringShapeCharacters.setValue(8788, 8789);\n this.mirroringShapeCharacters.setValue(8789, 8788);\n this.mirroringShapeCharacters.setValue(8804, 8805);\n this.mirroringShapeCharacters.setValue(8805, 8804);\n this.mirroringShapeCharacters.setValue(8806, 8807);\n this.mirroringShapeCharacters.setValue(8807, 8806);\n this.mirroringShapeCharacters.setValue(8808, 8809);\n this.mirroringShapeCharacters.setValue(8809, 8808);\n this.mirroringShapeCharacters.setValue(8810, 8811);\n this.mirroringShapeCharacters.setValue(8811, 8810);\n this.mirroringShapeCharacters.setValue(8814, 8815);\n this.mirroringShapeCharacters.setValue(8815, 8814);\n this.mirroringShapeCharacters.setValue(8816, 8817);\n this.mirroringShapeCharacters.setValue(8817, 8816);\n this.mirroringShapeCharacters.setValue(8818, 8819);\n this.mirroringShapeCharacters.setValue(8819, 8818);\n this.mirroringShapeCharacters.setValue(8820, 8821);\n this.mirroringShapeCharacters.setValue(8821, 8820);\n this.mirroringShapeCharacters.setValue(8822, 8823);\n this.mirroringShapeCharacters.setValue(8823, 8822);\n this.mirroringShapeCharacters.setValue(8824, 8825);\n this.mirroringShapeCharacters.setValue(8825, 8824);\n this.mirroringShapeCharacters.setValue(8826, 8827);\n this.mirroringShapeCharacters.setValue(8827, 8826);\n this.mirroringShapeCharacters.setValue(8828, 8829);\n this.mirroringShapeCharacters.setValue(8829, 8828);\n this.mirroringShapeCharacters.setValue(8830, 8831);\n this.mirroringShapeCharacters.setValue(8831, 8830);\n this.mirroringShapeCharacters.setValue(8832, 8833);\n this.mirroringShapeCharacters.setValue(8833, 8832);\n this.mirroringShapeCharacters.setValue(8834, 8835);\n this.mirroringShapeCharacters.setValue(8835, 8834);\n this.mirroringShapeCharacters.setValue(8836, 8837);\n this.mirroringShapeCharacters.setValue(8837, 8836);\n this.mirroringShapeCharacters.setValue(8838, 8839);\n this.mirroringShapeCharacters.setValue(8839, 8838);\n this.mirroringShapeCharacters.setValue(8840, 8841);\n this.mirroringShapeCharacters.setValue(8841, 8840);\n this.mirroringShapeCharacters.setValue(8842, 8843);\n this.mirroringShapeCharacters.setValue(8843, 8842);\n this.mirroringShapeCharacters.setValue(8847, 8848);\n this.mirroringShapeCharacters.setValue(8848, 8847);\n this.mirroringShapeCharacters.setValue(8849, 8850);\n this.mirroringShapeCharacters.setValue(8850, 8849);\n this.mirroringShapeCharacters.setValue(8856, 10680);\n this.mirroringShapeCharacters.setValue(8866, 8867);\n this.mirroringShapeCharacters.setValue(8867, 8866);\n this.mirroringShapeCharacters.setValue(8870, 10974);\n this.mirroringShapeCharacters.setValue(8872, 10980);\n this.mirroringShapeCharacters.setValue(8873, 10979);\n this.mirroringShapeCharacters.setValue(8875, 10981);\n this.mirroringShapeCharacters.setValue(8880, 8881);\n this.mirroringShapeCharacters.setValue(8881, 8880);\n this.mirroringShapeCharacters.setValue(8882, 8883);\n this.mirroringShapeCharacters.setValue(8883, 8882);\n this.mirroringShapeCharacters.setValue(8884, 8885);\n this.mirroringShapeCharacters.setValue(8885, 8884);\n /*tslint:disable:max-func-body-length */\n this.mirroringShapeCharacters.setValue(8886, 8887);\n this.mirroringShapeCharacters.setValue(8887, 8886);\n this.mirroringShapeCharacters.setValue(8905, 8906);\n this.mirroringShapeCharacters.setValue(8906, 8905);\n this.mirroringShapeCharacters.setValue(8907, 8908);\n this.mirroringShapeCharacters.setValue(8908, 8907);\n this.mirroringShapeCharacters.setValue(8909, 8771);\n this.mirroringShapeCharacters.setValue(8912, 8913);\n this.mirroringShapeCharacters.setValue(8913, 8912);\n this.mirroringShapeCharacters.setValue(8918, 8919);\n this.mirroringShapeCharacters.setValue(8919, 8918);\n this.mirroringShapeCharacters.setValue(8920, 8921);\n this.mirroringShapeCharacters.setValue(8921, 8920);\n this.mirroringShapeCharacters.setValue(8922, 8923);\n this.mirroringShapeCharacters.setValue(8923, 8922);\n this.mirroringShapeCharacters.setValue(8924, 8925);\n this.mirroringShapeCharacters.setValue(8925, 8924);\n this.mirroringShapeCharacters.setValue(8926, 8927);\n this.mirroringShapeCharacters.setValue(8927, 8926);\n this.mirroringShapeCharacters.setValue(8928, 8929);\n this.mirroringShapeCharacters.setValue(8929, 8928);\n this.mirroringShapeCharacters.setValue(8930, 8931);\n this.mirroringShapeCharacters.setValue(8931, 8930);\n this.mirroringShapeCharacters.setValue(8932, 8933);\n this.mirroringShapeCharacters.setValue(8933, 8932);\n this.mirroringShapeCharacters.setValue(8934, 8935);\n this.mirroringShapeCharacters.setValue(8935, 8934);\n this.mirroringShapeCharacters.setValue(8936, 8937);\n this.mirroringShapeCharacters.setValue(8937, 8936);\n this.mirroringShapeCharacters.setValue(8938, 8939);\n this.mirroringShapeCharacters.setValue(8939, 8938);\n this.mirroringShapeCharacters.setValue(8940, 8941);\n this.mirroringShapeCharacters.setValue(8941, 8940);\n this.mirroringShapeCharacters.setValue(8944, 8945);\n this.mirroringShapeCharacters.setValue(8945, 8944);\n this.mirroringShapeCharacters.setValue(8946, 8954);\n this.mirroringShapeCharacters.setValue(8947, 8955);\n this.mirroringShapeCharacters.setValue(8948, 8956);\n this.mirroringShapeCharacters.setValue(8950, 8957);\n this.mirroringShapeCharacters.setValue(8951, 8958);\n this.mirroringShapeCharacters.setValue(8954, 8946);\n this.mirroringShapeCharacters.setValue(8955, 8947);\n this.mirroringShapeCharacters.setValue(8956, 8948);\n this.mirroringShapeCharacters.setValue(8957, 8950);\n this.mirroringShapeCharacters.setValue(8958, 8951);\n this.mirroringShapeCharacters.setValue(8968, 8969);\n this.mirroringShapeCharacters.setValue(8969, 8968);\n this.mirroringShapeCharacters.setValue(8970, 8971);\n this.mirroringShapeCharacters.setValue(8971, 8970);\n this.mirroringShapeCharacters.setValue(9001, 9002);\n this.mirroringShapeCharacters.setValue(9002, 9001);\n this.mirroringShapeCharacters.setValue(10088, 10089);\n this.mirroringShapeCharacters.setValue(10089, 10088);\n this.mirroringShapeCharacters.setValue(10090, 10091);\n this.mirroringShapeCharacters.setValue(10091, 10090);\n this.mirroringShapeCharacters.setValue(10092, 10093);\n this.mirroringShapeCharacters.setValue(10093, 10092);\n this.mirroringShapeCharacters.setValue(10094, 10095);\n this.mirroringShapeCharacters.setValue(10095, 10094);\n this.mirroringShapeCharacters.setValue(10096, 10097);\n this.mirroringShapeCharacters.setValue(10097, 10096);\n this.mirroringShapeCharacters.setValue(10098, 10099);\n this.mirroringShapeCharacters.setValue(10099, 10098);\n this.mirroringShapeCharacters.setValue(10100, 10101);\n this.mirroringShapeCharacters.setValue(10101, 10100);\n this.mirroringShapeCharacters.setValue(10197, 10198);\n this.mirroringShapeCharacters.setValue(10198, 10197);\n this.mirroringShapeCharacters.setValue(10205, 10206);\n this.mirroringShapeCharacters.setValue(10206, 10205);\n this.mirroringShapeCharacters.setValue(10210, 10211);\n this.mirroringShapeCharacters.setValue(10211, 10210);\n this.mirroringShapeCharacters.setValue(10212, 10213);\n this.mirroringShapeCharacters.setValue(10213, 10212);\n this.mirroringShapeCharacters.setValue(10214, 10215);\n this.mirroringShapeCharacters.setValue(10215, 10214);\n this.mirroringShapeCharacters.setValue(10216, 10217);\n this.mirroringShapeCharacters.setValue(10217, 10216);\n this.mirroringShapeCharacters.setValue(10218, 10219);\n this.mirroringShapeCharacters.setValue(10219, 10218);\n this.mirroringShapeCharacters.setValue(10627, 10628);\n this.mirroringShapeCharacters.setValue(10628, 10627);\n this.mirroringShapeCharacters.setValue(10629, 10630);\n this.mirroringShapeCharacters.setValue(10630, 10629);\n this.mirroringShapeCharacters.setValue(10631, 10632);\n this.mirroringShapeCharacters.setValue(10632, 10631);\n this.mirroringShapeCharacters.setValue(10633, 10634);\n this.mirroringShapeCharacters.setValue(10634, 10633);\n this.mirroringShapeCharacters.setValue(10635, 10636);\n this.mirroringShapeCharacters.setValue(10636, 10635);\n this.mirroringShapeCharacters.setValue(10637, 10640);\n this.mirroringShapeCharacters.setValue(10638, 10639);\n this.mirroringShapeCharacters.setValue(10639, 10638);\n this.mirroringShapeCharacters.setValue(10640, 10637);\n this.mirroringShapeCharacters.setValue(10641, 10642);\n this.mirroringShapeCharacters.setValue(10642, 10641);\n this.mirroringShapeCharacters.setValue(10643, 10644);\n this.mirroringShapeCharacters.setValue(10644, 10643);\n this.mirroringShapeCharacters.setValue(10645, 10646);\n this.mirroringShapeCharacters.setValue(10646, 10645);\n this.mirroringShapeCharacters.setValue(10647, 10648);\n this.mirroringShapeCharacters.setValue(10648, 10647);\n this.mirroringShapeCharacters.setValue(10680, 8856);\n this.mirroringShapeCharacters.setValue(10688, 10689);\n this.mirroringShapeCharacters.setValue(10689, 10688);\n this.mirroringShapeCharacters.setValue(10692, 10693);\n this.mirroringShapeCharacters.setValue(10693, 10692);\n this.mirroringShapeCharacters.setValue(10703, 10704);\n this.mirroringShapeCharacters.setValue(10704, 10703);\n this.mirroringShapeCharacters.setValue(10705, 10706);\n this.mirroringShapeCharacters.setValue(10706, 10705);\n this.mirroringShapeCharacters.setValue(10708, 10709);\n this.mirroringShapeCharacters.setValue(10709, 10708);\n this.mirroringShapeCharacters.setValue(10712, 10713);\n this.mirroringShapeCharacters.setValue(10713, 10712);\n this.mirroringShapeCharacters.setValue(10714, 10715);\n this.mirroringShapeCharacters.setValue(10715, 10714);\n this.mirroringShapeCharacters.setValue(10741, 8725);\n this.mirroringShapeCharacters.setValue(10744, 10745);\n this.mirroringShapeCharacters.setValue(10745, 10744);\n this.mirroringShapeCharacters.setValue(10748, 10749);\n this.mirroringShapeCharacters.setValue(10749, 10748);\n this.mirroringShapeCharacters.setValue(10795, 10796);\n this.mirroringShapeCharacters.setValue(10796, 10795);\n this.mirroringShapeCharacters.setValue(10797, 10796);\n this.mirroringShapeCharacters.setValue(10798, 10797);\n this.mirroringShapeCharacters.setValue(10804, 10805);\n this.mirroringShapeCharacters.setValue(10805, 10804);\n this.mirroringShapeCharacters.setValue(10812, 10813);\n this.mirroringShapeCharacters.setValue(10813, 10812);\n this.mirroringShapeCharacters.setValue(10852, 10853);\n this.mirroringShapeCharacters.setValue(10853, 10852);\n this.mirroringShapeCharacters.setValue(10873, 10874);\n this.mirroringShapeCharacters.setValue(10874, 10873);\n this.mirroringShapeCharacters.setValue(10877, 10878);\n this.mirroringShapeCharacters.setValue(10878, 10877);\n this.mirroringShapeCharacters.setValue(10879, 10880);\n this.mirroringShapeCharacters.setValue(10880, 10879);\n this.mirroringShapeCharacters.setValue(10881, 10882);\n this.mirroringShapeCharacters.setValue(10882, 10881);\n this.mirroringShapeCharacters.setValue(10883, 10884);\n this.mirroringShapeCharacters.setValue(10884, 10883);\n this.mirroringShapeCharacters.setValue(10891, 10892);\n this.mirroringShapeCharacters.setValue(10892, 10891);\n this.mirroringShapeCharacters.setValue(10897, 10898);\n this.mirroringShapeCharacters.setValue(10898, 10897);\n this.mirroringShapeCharacters.setValue(10899, 10900);\n this.mirroringShapeCharacters.setValue(10900, 10899);\n this.mirroringShapeCharacters.setValue(10901, 10902);\n this.mirroringShapeCharacters.setValue(10902, 10901);\n this.mirroringShapeCharacters.setValue(10903, 10904);\n this.mirroringShapeCharacters.setValue(10904, 10903);\n this.mirroringShapeCharacters.setValue(10905, 10906);\n this.mirroringShapeCharacters.setValue(10906, 10905);\n this.mirroringShapeCharacters.setValue(10907, 10908);\n this.mirroringShapeCharacters.setValue(10908, 10907);\n this.mirroringShapeCharacters.setValue(10913, 10914);\n this.mirroringShapeCharacters.setValue(10914, 10913);\n this.mirroringShapeCharacters.setValue(10918, 10919);\n this.mirroringShapeCharacters.setValue(10919, 10918);\n this.mirroringShapeCharacters.setValue(10920, 10921);\n this.mirroringShapeCharacters.setValue(10921, 10920);\n this.mirroringShapeCharacters.setValue(10922, 10923);\n this.mirroringShapeCharacters.setValue(10923, 10922);\n this.mirroringShapeCharacters.setValue(10924, 10925);\n this.mirroringShapeCharacters.setValue(10925, 10924);\n this.mirroringShapeCharacters.setValue(10927, 10928);\n this.mirroringShapeCharacters.setValue(10928, 10927);\n this.mirroringShapeCharacters.setValue(10931, 10932);\n this.mirroringShapeCharacters.setValue(10932, 10931);\n this.mirroringShapeCharacters.setValue(10939, 10940);\n this.mirroringShapeCharacters.setValue(10940, 10939);\n this.mirroringShapeCharacters.setValue(10941, 10942);\n this.mirroringShapeCharacters.setValue(10942, 10941);\n this.mirroringShapeCharacters.setValue(10943, 10944);\n this.mirroringShapeCharacters.setValue(10944, 10943);\n this.mirroringShapeCharacters.setValue(10945, 10946);\n this.mirroringShapeCharacters.setValue(10946, 10945);\n this.mirroringShapeCharacters.setValue(10947, 10948);\n this.mirroringShapeCharacters.setValue(10948, 10947);\n this.mirroringShapeCharacters.setValue(10949, 10950);\n this.mirroringShapeCharacters.setValue(10950, 10949);\n this.mirroringShapeCharacters.setValue(10957, 10958);\n this.mirroringShapeCharacters.setValue(10958, 10957);\n this.mirroringShapeCharacters.setValue(10959, 10960);\n this.mirroringShapeCharacters.setValue(10960, 10959);\n this.mirroringShapeCharacters.setValue(10961, 10962);\n this.mirroringShapeCharacters.setValue(10962, 10961);\n this.mirroringShapeCharacters.setValue(10963, 10964);\n this.mirroringShapeCharacters.setValue(10964, 10963);\n this.mirroringShapeCharacters.setValue(10965, 10966);\n this.mirroringShapeCharacters.setValue(10966, 10965);\n this.mirroringShapeCharacters.setValue(10974, 8870);\n this.mirroringShapeCharacters.setValue(10979, 8873);\n this.mirroringShapeCharacters.setValue(10980, 8872);\n this.mirroringShapeCharacters.setValue(10981, 8875);\n this.mirroringShapeCharacters.setValue(10988, 10989);\n this.mirroringShapeCharacters.setValue(10989, 10988);\n this.mirroringShapeCharacters.setValue(10999, 11000);\n this.mirroringShapeCharacters.setValue(11000, 10999);\n this.mirroringShapeCharacters.setValue(11001, 11002);\n this.mirroringShapeCharacters.setValue(11002, 11001);\n this.mirroringShapeCharacters.setValue(12296, 12297);\n this.mirroringShapeCharacters.setValue(12297, 12296);\n this.mirroringShapeCharacters.setValue(12298, 12299);\n this.mirroringShapeCharacters.setValue(12299, 12298);\n this.mirroringShapeCharacters.setValue(12300, 12301);\n this.mirroringShapeCharacters.setValue(12301, 12300);\n this.mirroringShapeCharacters.setValue(12302, 12303);\n this.mirroringShapeCharacters.setValue(12303, 12302);\n this.mirroringShapeCharacters.setValue(12304, 12305);\n this.mirroringShapeCharacters.setValue(12305, 12304);\n this.mirroringShapeCharacters.setValue(12308, 12309);\n this.mirroringShapeCharacters.setValue(12309, 12308);\n this.mirroringShapeCharacters.setValue(12310, 12311);\n this.mirroringShapeCharacters.setValue(12311, 12310);\n this.mirroringShapeCharacters.setValue(12312, 12313);\n this.mirroringShapeCharacters.setValue(12313, 12312);\n this.mirroringShapeCharacters.setValue(12314, 12315);\n this.mirroringShapeCharacters.setValue(12315, 12314);\n this.mirroringShapeCharacters.setValue(65288, 65289);\n this.mirroringShapeCharacters.setValue(65289, 65288);\n this.mirroringShapeCharacters.setValue(65308, 65310);\n this.mirroringShapeCharacters.setValue(65310, 65308);\n this.mirroringShapeCharacters.setValue(65339, 65341);\n this.mirroringShapeCharacters.setValue(65341, 65339);\n this.mirroringShapeCharacters.setValue(65371, 65373);\n this.mirroringShapeCharacters.setValue(65373, 65371);\n this.mirroringShapeCharacters.setValue(65375, 65376);\n this.mirroringShapeCharacters.setValue(65376, 65375);\n this.mirroringShapeCharacters.setValue(65378, 65379);\n this.mirroringShapeCharacters.setValue(65379, 65378);\n };\n return Bidi;\n}());\nexport { Bidi };\nvar RtlCharacters = /** @class */ (function () {\n //#endregion\n //#region constructors\n function RtlCharacters() {\n //#region fields\n /// \n /// Specifies the character types.\n /// \n this.types = [];\n /// \n /// Specifies the text order (RTL or LTR).\n /// \n this.textOrder = -1;\n /// \n /// Specifies the RTL character types.\n /// \n /* tslint:disable-next-line:prefer-array-literal */\n this.rtlCharacterTypes = new Array(65536);\n //#endregion\n //#region constants\n /// \n /// Left-to-Right (Non-European or non-Arabic digits).\n /// \n this.L = 0;\n /// \n /// Left-to-Right Embedding\n /// \n this.LRE = 1;\n /// \n /// Left-to-Right Override\n /// \n this.LRO = 2;\n /// \n /// Right-to-Left (Hebrew alphabet, and related punctuation).\n /// \n this.R = 3;\n /// \n /// Right-to-Left Arabic \n /// \n this.AL = 4;\n /// \n /// Right-to-Left Embedding.\n /// \n this.RLE = 5;\n /// \n /// Right-to-Left Override\n /// \n this.RLO = 6;\n /// \n /// Pop Directional Format\n /// \n this.PDF = 7;\n /// \n /// European Number (European digits, Eastern Arabic-Indic digits).\n /// \n this.EN = 8;\n /// \n /// European Number Separator (Plus sign, Minus sign).\n /// \n this.ES = 9;\n /// \n /// European Number Terminator (Degree sign, currency symbols).\n /// \n this.ET = 10;\n /// \n /// Arabic Number (Arabic-Indic digits, Arabic decimal and thousands separators).\n /// \n this.AN = 11;\n /// \n /// Common Number Separator (Colon, Comma, Full Stop, No-Break Space.\n /// \n this.CS = 12;\n /// \n /// Nonspacing Mark (Characters with the General_Category values).\n /// \n this.NSM = 13;\n /// \n /// Boundary Neutral (Default ignorables, non-characters, and control characters, other than those explicitly given other types.)\n /// \n this.BN = 14;\n /// \n /// Paragraph Separator (Paragraph separator, appropriate Newline Functions, higher-level protocol paragraph determination).\n /// \n this.B = 15;\n /// \n /// \tSegment Separator (tab).\n /// \n this.S = 16;\n /// \n /// Whitespace (Space, Figure space, Line separator, Form feed, General Punctuation spaces).\n /// \n this.WS = 17;\n /// \n /// Other Neutrals (All other characters, including object replacement character).\n /// \n this.ON = 18;\n /// \n /// RTL character types.\n /// \n this.charTypes = [\n this.L, this.EN, this.BN, this.ES, this.ES, this.S, this.ET, this.ET, this.B, this.AN, this.AN, this.S, this.CS, this.CS,\n this.WS, this.NSM, this.NSM, this.B, this.BN, 27, this.BN, 28, 30, this.B, 31, 31, this.S, 32, 32, this.WS, 33, 34,\n this.ON, 35, 37, this.ET, 38, 42, this.ON, 43, 43, this.ET, 44, 44, this.CS, 45, 45, this.ET, 46, 46, this.CS,\n 47, 47, this.CS, 48, 57, this.EN, 58, 58, this.CS, 59, 64, this.ON, 65, 90, this.L, 91, 96, this.ON, 97, 122, this.L,\n 123, 126, this.ON, 127, 132, this.BN, 133, 133, this.B, 134, 159, this.BN, 160, 160, this.CS,\n 161, 161, this.ON, 162, 165, this.ET, 166, 169, this.ON, 170, 170, this.L, 171, 175, this.ON,\n 176, 177, this.ET, 178, 179, this.EN, 180, 180, this.ON, 181, 181, this.L, 182, 184, this.ON,\n 185, 185, this.EN, 186, 186, this.L, 187, 191, this.ON, 192, 214, this.L, 215, 215, this.ON,\n 216, 246, this.L, 247, 247, this.ON, 248, 696, this.L, 697, 698, this.ON, 699, 705, this.L,\n 706, 719, this.ON, 720, 721, this.L, 722, 735, this.ON, 736, 740, this.L, 741, 749, this.ON,\n 750, 750, this.L, 751, 767, this.ON, 768, 855, this.NSM, 856, 860, this.L, 861, 879, this.NSM,\n 880, 883, this.L, 884, 885, this.ON, 886, 893, this.L, 894, 894, this.ON, 895, 899, this.L,\n 900, 901, this.ON, 902, 902, this.L, 903, 903, this.ON, 904, 1013, this.L, 1014, 1014, this.ON,\n 1015, 1154, this.L, 1155, 1158, this.NSM, 1159, 1159, this.L, 1160, 1161, this.NSM,\n 1162, 1417, this.L, 1418, 1418, this.ON, 1419, 1424, this.L, 1425, 1441, this.NSM,\n 1442, 1442, this.L, 1443, 1465, this.NSM, 1466, 1466, this.L, 1467, 1469, this.NSM,\n 1470, 1470, this.R, 1471, 1471, this.NSM, 1472, 1472, this.R, 1473, 1474, this.NSM,\n 1475, 1475, this.R, 1476, 1476, this.NSM, 1477, 1487, this.L, 1488, 1514, this.R,\n 1515, 1519, this.L, 1520, 1524, this.R, 1525, 1535, this.L, 1536, 1539, this.AL,\n 1540, 1547, this.L, 1548, 1548, this.CS, 1549, 1549, this.AL, 1550, 1551, this.ON,\n 1552, 1557, this.NSM, 1558, 1562, this.L, 1563, 1563, this.AL, 1564, 1566, this.L,\n 1567, 1567, this.AL, 1568, 1568, this.L, 1569, 1594, this.AL, 1595, 1599, this.L,\n 1600, 1610, this.AL, 1611, 1624, this.NSM, 1625, 1631, this.L, 1632, 1641, this.AN,\n 1642, 1642, this.ET, 1643, 1644, this.AN, 1645, 1647, this.AL, 1648, 1648, this.NSM,\n 1649, 1749, this.AL, 1750, 1756, this.NSM, 1757, 1757, this.AL, 1758, 1764, this.NSM,\n 1765, 1766, this.AL, 1767, 1768, this.NSM, 1769, 1769, this.ON, 1770, 1773, this.NSM,\n 1774, 1775, this.AL, 1776, 1785, this.EN, 1786, 1805, this.AL, 1806, 1806, this.L,\n 1807, 1807, this.BN, 1808, 1808, this.AL, 1809, 1809, this.NSM, 1810, 1839, this.AL,\n 1840, 1866, this.NSM, 1867, 1868, this.L, 1869, 1871, this.AL, 1872, 1919, this.L,\n 1920, 1957, this.AL, 1958, 1968, this.NSM, 1969, 1969, this.AL, 1970, 2304, this.L,\n 2305, 2306, this.NSM, 2307, 2363, this.L, 2364, 2364, this.NSM, 2365, 2368, this.L,\n 2369, 2376, this.NSM, 2377, 2380, this.L, 2381, 2381, this.NSM, 2382, 2384, this.L,\n 2385, 2388, this.NSM, 2389, 2401, this.L, 2402, 2403, this.NSM, 2404, 2432, this.L,\n 2433, 2433, this.NSM, 2434, 2491, this.L, 2492, 2492, this.NSM, 2493, 2496, this.L,\n 2497, 2500, this.NSM, 2501, 2508, this.L, 2509, 2509, this.NSM, 2510, 2529, this.L,\n 2530, 2531, this.NSM, 2532, 2545, this.L, 2546, 2547, this.ET, 2548, 2560, this.L,\n 2561, 2562, this.NSM, 2563, 2619, this.L, 2620, 2620, this.NSM, 2621, 2624, this.L,\n 2625, 2626, this.NSM, 2627, 2630, this.L, 2631, 2632, this.NSM, 2633, 2634, this.L,\n 2635, 2637, this.NSM, 2638, 2671, this.L, 2672, 2673, this.NSM, 2674, 2688, this.L,\n 2689, 2690, this.NSM, 2691, 2747, this.L, 2748, 2748, this.NSM, 2749, 2752, this.L,\n 2753, 2757, this.NSM, 2758, 2758, this.L, 2759, 2760, this.NSM, 2761, 2764, this.L,\n 2765, 2765, this.NSM, 2766, 2785, this.L, 2786, 2787, this.NSM, 2788, 2800, this.L,\n 2801, 2801, this.ET, 2802, 2816, this.L, 2817, 2817, this.NSM, 2818, 2875, this.L,\n 2876, 2876, this.NSM, 2877, 2878, this.L, 2879, 2879, this.NSM, 2880, 2880, this.L,\n 2881, 2883, this.NSM, 2884, 2892, this.L, 2893, 2893, this.NSM, 2894, 2901, this.L,\n 2902, 2902, this.NSM, 2903, 2945, this.L, 2946, 2946, this.NSM, 2947, 3007, this.L,\n 3008, 3008, this.NSM, 3009, 3020, this.L, 3021, 3021, this.NSM, 3022, 3058, this.L,\n 3059, 3064, this.ON, 3065, 3065, this.ET, 3066, 3066, this.ON, 3067, 3133, this.L,\n 3134, 3136, this.NSM, 3137, 3141, this.L, 3142, 3144, this.NSM, 3145, 3145, this.L,\n 3146, 3149, this.NSM, 3150, 3156, this.L, 3157, 3158, this.NSM, 3159, 3259, this.L,\n 3260, 3260, this.NSM, 3261, 3275, this.L, 3276, 3277, this.NSM, 3278, 3392, this.L,\n 3393, 3395, this.NSM, 3396, 3404, this.L, 3405, 3405, this.NSM, 3406, 3529, this.L,\n 3530, 3530, this.NSM, 3531, 3537, this.L, 3538, 3540, this.NSM, 3541, 3541, this.L,\n 3542, 3542, this.NSM, 3543, 3632, this.L, 3633, 3633, this.NSM, 3634, 3635, this.L,\n 3636, 3642, this.NSM, 3643, 3646, this.L, 3647, 3647, this.ET, 3648, 3654, this.L,\n 3655, 3662, this.NSM, 3663, 3760, this.L, 3761, 3761, this.NSM, 3762, 3763, this.L,\n 3764, 3769, this.NSM, 3770, 3770, this.L, 3771, 3772, this.NSM, 3773, 3783, this.L,\n 3784, 3789, this.NSM, 3790, 3863, this.L, 3864, 3865, this.NSM, 3866, 3892, this.L,\n 3893, 3893, this.NSM, 3894, 3894, this.L, 3895, 3895, this.NSM, 3896, 3896, this.L,\n 3897, 3897, this.NSM, 3898, 3901, this.ON, 3902, 3952, this.L, 3953, 3966, this.NSM,\n 3967, 3967, this.L, 3968, 3972, this.NSM, 3973, 3973, this.L, 3974, 3975, this.NSM,\n 3976, 3983, this.L, 3984, 3991, this.NSM, 3992, 3992, this.L, 3993, 4028, this.NSM,\n 4029, 4037, this.L, 4038, 4038, this.NSM, 4039, 4140, this.L, 4141, 4144, this.NSM,\n 4145, 4145, this.L, 4146, 4146, this.NSM, 4147, 4149, this.L, 4150, 4151, this.NSM,\n 4152, 4152, this.L, 4153, 4153, this.NSM, 4154, 4183, this.L, 4184, 4185, this.NSM,\n 4186, 5759, this.L, 5760, 5760, this.WS, 5761, 5786, this.L, 5787, 5788, this.ON,\n 5789, 5905, this.L, 5906, 5908, this.NSM, 5909, 5937, this.L, 5938, 5940, this.NSM,\n 5941, 5969, this.L, 5970, 5971, this.NSM, 5972, 6001, this.L, 6002, 6003, this.NSM,\n 6004, 6070, this.L, 6071, 6077, this.NSM, 6078, 6085, this.L, 6086, 6086, this.NSM,\n 6087, 6088, this.L, 6089, 6099, this.NSM, 6100, 6106, this.L, 6107, 6107, this.ET,\n 6108, 6108, this.L, 6109, 6109, this.NSM, 6110, 6127, this.L, 6128, 6137, this.ON,\n 6138, 6143, this.L, 6144, 6154, this.ON, 6155, 6157, this.NSM, 6158, 6158, this.WS,\n 6159, 6312, this.L, 6313, 6313, this.NSM, 6314, 6431, this.L, 6432, 6434, this.NSM,\n 6435, 6438, this.L, 6439, 6443, this.NSM, 6444, 6449, this.L, 6450, 6450, this.NSM,\n 6451, 6456, this.L, 6457, 6459, this.NSM, 6460, 6463, this.L, 6464, 6464, this.ON,\n 6465, 6467, this.L, 6468, 6469, this.ON, 6470, 6623, this.L, 6624, 6655, this.ON,\n 6656, 8124, this.L, 8125, 8125, this.ON, 8126, 8126, this.L, 8127, 8129, this.ON,\n 8130, 8140, this.L, 8141, 8143, this.ON, 8144, 8156, this.L, 8157, 8159, this.ON,\n 8160, 8172, this.L, 8173, 8175, this.ON, 8176, 8188, this.L, 8189, 8190, this.ON,\n 8191, 8191, this.L, 8192, 8202, this.WS, 8203, 8205, this.BN, 8206, 8206, this.L,\n 8207, 8207, this.R, 8208, 8231, this.ON, 8232, 8232, this.WS, 8233, 8233, this.B,\n 8234, 8234, this.LRE, 8235, 8235, this.RLE, 8236, 8236, this.PDF, 8237, 8237, this.LRO,\n 8238, 8238, this.RLO, 8239, 8239, this.WS, 8240, 8244, this.ET, 8245, 8276, this.ON,\n 8277, 8278, this.L, 8279, 8279, this.ON, 8280, 8286, this.L, 8287, 8287, this.WS,\n 8288, 8291, this.BN, 8292, 8297, this.L, 8298, 8303, this.BN, 8304, 8304, this.EN,\n 8305, 8307, this.L, 8308, 8313, this.EN, 8314, 8315, this.ET, 8316, 8318, this.ON,\n 8319, 8319, this.L, 8320, 8329, this.EN, 8330, 8331, this.ET, 8332, 8334, this.ON,\n 8335, 8351, this.L, 8352, 8369, this.ET, 8370, 8399, this.L, 8400, 8426, this.NSM,\n 8427, 8447, this.L, 8448, 8449, this.ON, 8450, 8450, this.L, 8451, 8454, this.ON,\n 8455, 8455, this.L, 8456, 8457, this.ON, 8458, 8467, this.L, 8468, 8468, this.ON,\n 8469, 8469, this.L, 8470, 8472, this.ON, 8473, 8477, this.L, 8478, 8483, this.ON,\n 8484, 8484, this.L, 8485, 8485, this.ON, 8486, 8486, this.L, 8487, 8487, this.ON,\n 8488, 8488, this.L, 8489, 8489, this.ON, 8490, 8493, this.L, 8494, 8494, this.ET,\n 8495, 8497, this.L, 8498, 8498, this.ON, 8499, 8505, this.L, 8506, 8507, this.ON,\n 8508, 8511, this.L, 8512, 8516, this.ON, 8517, 8521, this.L, 8522, 8523, this.ON,\n 8524, 8530, this.L, 8531, 8543, this.ON, 8544, 8591, this.L, 8592, 8721, this.ON,\n 8722, 8723, this.ET, 8724, 9013, this.ON, 9014, 9082, this.L, 9083, 9108, this.ON,\n 9109, 9109, this.L, 9110, 9168, this.ON, 9169, 9215, this.L, 9216, 9254, this.ON,\n 9255, 9279, this.L, 9280, 9290, this.ON, 9291, 9311, this.L, 9312, 9371, this.EN,\n 9372, 9449, this.L, 9450, 9450, this.EN, 9451, 9751, this.ON, 9752, 9752, this.L,\n 9753, 9853, this.ON, 9854, 9855, this.L, 9856, 9873, this.ON, 9874, 9887, this.L,\n 9888, 9889, this.ON, 9890, 9984, this.L, 9985, 9988, this.ON, 9989, 9989, this.L,\n 9990, 9993, this.ON, 9994, 9995, this.L, 9996, 10023, this.ON, 10024, 10024, this.L,\n 10025, 10059, this.ON, 10060, 10060, this.L, 10061, 10061, this.ON, 10062, 10062, this.L,\n 10063, 10066, this.ON, 10067, 10069, this.L, 10070, 10070, this.ON, 10071, 10071, this.L,\n 10072, 10078, this.ON, 10079, 10080, this.L, 10081, 10132, this.ON, 10133, 10135, this.L,\n 10136, 10159, this.ON, 10160, 10160, this.L, 10161, 10174, this.ON, 10175, 10191, this.L,\n 10192, 10219, this.ON, 10220, 10223, this.L, 10224, 11021, this.ON, 11022, 11903, this.L,\n 11904, 11929, this.ON, 11930, 11930, this.L, 11931, 12019, this.ON, 12020, 12031, this.L,\n 12032, 12245, this.ON, 12246, 12271, this.L, 12272, 12283, this.ON, 12284, 12287, this.L,\n 12288, 12288, this.WS, 12289, 12292, this.ON, 12293, 12295, this.L, 12296, 12320, this.ON,\n 12321, 12329, this.L, 12330, 12335, this.NSM, 12336, 12336, this.ON, 12337, 12341, this.L,\n 12342, 12343, this.ON, 12344, 12348, this.L, 12349, 12351, this.ON, 12352, 12440, this.L,\n 12441, 12442, this.NSM, 12443, 12444, this.ON, 12445, 12447, this.L, 12448, 12448, this.ON,\n 12449, 12538, this.L, 12539, 12539, this.ON, 12540, 12828, this.L, 12829, 12830, this.ON,\n 12831, 12879, this.L, 12880, 12895, this.ON, 12896, 12923, this.L, 12924, 12925, this.ON,\n 12926, 12976, this.L, 12977, 12991, this.ON, 12992, 13003, this.L, 13004, 13007, this.ON,\n 13008, 13174, this.L, 13175, 13178, this.ON, 13179, 13277, this.L, 13278, 13279, this.ON,\n 13280, 13310, this.L, 13311, 13311, this.ON, 13312, 19903, this.L, 19904, 19967, this.ON,\n 19968, 42127, this.L, 42128, 42182, this.ON, 42183, 64284, this.L, 64285, 64285, this.R,\n 64286, 64286, this.NSM, 64287, 64296, this.R, 64297, 64297, this.ET, 64298, 64310, this.R,\n 64311, 64311, this.L, 64312, 64316, this.R, 64317, 64317, this.L, 64318, 64318, this.R,\n 64319, 64319, this.L, 64320, 64321, this.R, 64322, 64322, this.L, 64323, 64324, this.R,\n 64325, 64325, this.L, 64326, 64335, this.R, 64336, 64433, this.AL, 64434, 64466, this.L,\n 64467, 64829, this.AL, 64830, 64831, this.ON, 64832, 64847, this.L, 64848, 64911, this.AL,\n 64912, 64913, this.L, 64914, 64967, this.AL, 64968, 65007, this.L, 65008, 65020, this.AL,\n 65021, 65021, this.ON, 65022, 65023, this.L, 65024, 65039, this.NSM, 65040, 65055, this.L,\n 65056, 65059, this.NSM, 65060, 65071, this.L, 65072, 65103, this.ON, 65104, 65104, this.CS,\n 65105, 65105, this.ON, 65106, 65106, this.CS, 65107, 65107, this.L, 65108, 65108, this.ON,\n 65109, 65109, this.CS, 65110, 65118, this.ON, 65119, 65119, this.ET, 65120, 65121, this.ON,\n 65122, 65123, this.ET, 65124, 65126, this.ON, 65127, 65127, this.L, 65128, 65128, this.ON,\n 65129, 65130, this.ET, 65131, 65131, this.ON, 65132, 65135, this.L, 65136, 65140, this.AL,\n 65141, 65141, this.L, 65142, 65276, this.AL, 65277, 65278, this.L, 65279, 65279, this.BN,\n 65280, 65280, this.L, 65281, 65282, this.ON, 65283, 65285, this.ET, 65286, 65290, this.ON,\n 65291, 65291, this.ET, 65292, 65292, this.CS, 65293, 65293, this.ET, 65294, 65294, this.CS,\n 65295, 65295, this.ES, 65296, 65305, this.EN, 65306, 65306, this.CS, 65307, 65312, this.ON,\n 65313, 65338, this.L, 65339, 65344, this.ON, 65345, 65370, this.L, 65371, 65381, this.ON,\n 65382, 65503, this.L, 65504, 65505, this.ET, 65506, 65508, this.ON, 65509, 65510, this.ET,\n 65511, 65511, this.L, 65512, 65518, this.ON, 65519, 65528, this.L, 65529, 65531, this.BN,\n 65532, 65533, this.ON, 65534, 65535, this.L\n ];\n for (var i = 0; i < this.charTypes.length; ++i) {\n var start = this.charTypes[i];\n var end = this.charTypes[++i];\n var b = this.charTypes[++i];\n while (start <= end) {\n this.rtlCharacterTypes[start++] = b;\n }\n }\n }\n //#endregion\n //#region implementation\n RtlCharacters.prototype.getVisualOrder = function (inputText, isRtl) {\n this.types = this.getCharacterCode(inputText);\n this.textOrder = isRtl ? this.LRE : this.L;\n this.doVisualOrder();\n var result = [];\n for (var i = 0; i < this.levels.length; i++) {\n result[i] = this.levels[i];\n }\n return result;\n };\n RtlCharacters.prototype.getCharacterCode = function (text) {\n var characterCodes = [];\n for (var i = 0; i < text.length; i++) {\n characterCodes[i] = this.rtlCharacterTypes[text[i].charCodeAt(0)];\n }\n return characterCodes;\n };\n RtlCharacters.prototype.setDefaultLevels = function () {\n for (var i = 0; i < this.length; i++) {\n this.levels[i] = this.textOrder;\n }\n };\n RtlCharacters.prototype.setLevels = function () {\n this.setDefaultLevels();\n for (var n = 0; n < this.length; ++n) {\n var level = this.levels[n];\n if ((level & 0x80) !== 0) {\n level &= 0x7f;\n this.result[n] = ((level & 0x1) === 0) ? this.L : this.R;\n }\n this.levels[n] = level;\n }\n };\n RtlCharacters.prototype.updateLevels = function (index, level, length) {\n if ((level & 1) === 0) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.R) {\n this.levels[i] += 1;\n }\n else if (this.result[i] !== this.L) {\n this.levels[i] += 2;\n }\n }\n }\n else {\n for (var i = index; i < length; ++i) {\n if (this.result[i] !== this.R) {\n this.levels[i] += 1;\n }\n }\n }\n };\n RtlCharacters.prototype.doVisualOrder = function () {\n this.length = this.types.length;\n this.result = this.types;\n this.levels = [];\n this.setLevels();\n this.length = this.getEmbeddedCharactersLength();\n var preview = this.textOrder;\n var i = 0;\n while (i < this.length) {\n var level = this.levels[i];\n var preType = ((Math.max(preview, level) & 0x1) === 0) ? this.L : this.R;\n var length_1 = i + 1;\n while (length_1 < this.length && this.levels[length_1] === level) {\n ++length_1;\n }\n var success = length_1 < this.length ? this.levels[length_1] : this.textOrder;\n var type = ((Math.max(success, level) & 0x1) === 0) ? this.L : this.R;\n this.checkNSM(i, length_1, level, preType, type);\n this.updateLevels(i, level, length_1);\n preview = level;\n i = length_1;\n }\n this.checkEmbeddedCharacters(this.length);\n };\n RtlCharacters.prototype.getEmbeddedCharactersLength = function () {\n var index = 0;\n for (var i = 0; i < this.length; ++i) {\n if (!(this.types[i] === this.LRE || this.types[i] === this.RLE || this.types[i] === this.LRO ||\n this.types[i] === this.RLO || this.types[i] === this.PDF || this.types[i] === this.BN)) {\n this.result[index] = this.result[i];\n this.levels[index] = this.levels[i];\n index++;\n }\n }\n return index;\n };\n RtlCharacters.prototype.checkEmbeddedCharacters = function (length) {\n for (var i = this.types.length - 1; i >= 0; --i) {\n if (this.types[i] === this.LRE || this.types[i] === this.RLE || this.types[i] === this.LRO ||\n this.types[i] === this.RLO || this.types[i] === this.PDF || this.types[i] === this.BN) {\n this.result[i] = this.types[i];\n this.levels[i] = -1;\n }\n else {\n length -= 1;\n this.result[i] = this.result[length];\n this.levels[i] = this.levels[length];\n }\n }\n for (var i = 0; i < this.types.length; i++) {\n if (this.levels[i] === -1) {\n if (i === 0) {\n this.levels[i] = this.textOrder;\n }\n else {\n this.levels[i] = this.levels[i - 1];\n }\n }\n }\n };\n RtlCharacters.prototype.checkNSM = function (index, length, level, startType, endType) {\n var charType = startType;\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.NSM) {\n this.result[i] = charType;\n }\n else {\n charType = this.result[i];\n }\n }\n this.checkEuropeanDigits(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanDigits = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.EN) {\n for (var j = i - 1; j >= index; --j) {\n if (this.result[j] === this.L || this.result[j] === this.R || this.result[j] === this.AL) {\n if (this.result[j] === this.AL) {\n this.result[i] = this.AN;\n }\n break;\n }\n }\n }\n }\n this.checkArabicCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkArabicCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.AL) {\n this.result[i] = this.R;\n }\n }\n this.checkEuropeanNumberSeparator(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanNumberSeparator = function (index, length, level, startType, endType) {\n for (var i = index + 1; i < length - 1; ++i) {\n if (this.result[i] === this.ES || this.result[i] === this.CS) {\n var preview = this.result[i - 1];\n var success = this.result[i + 1];\n if (preview === this.EN && success === this.EN) {\n this.result[i] = this.EN;\n }\n else if (this.result[i] === this.CS && preview === this.AN && success === this.AN) {\n this.result[i] = this.AN;\n }\n }\n }\n this.checkEuropeanNumberTerminator(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanNumberTerminator = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.ET) {\n var s = i;\n var b = [];\n b.push(this.ET);\n var l = this.getLength(s, length, b);\n var data = s === index ? startType : this.result[s - 1];\n if (data !== this.EN) {\n data = (l === length) ? endType : this.result[l];\n }\n if (data === this.EN) {\n for (var j = s; j < l; ++j) {\n this.result[j] = this.EN;\n }\n }\n i = l;\n }\n }\n this.checkOtherNeutrals(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkOtherNeutrals = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.ES || this.result[i] === this.ET || this.result[i] === this.CS) {\n this.result[i] = this.ON;\n }\n }\n this.checkOtherCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkOtherCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.EN) {\n var pst = startType;\n for (var j = i - 1; j >= index; --j) {\n if (this.result[j] === this.L || this.result[j] === this.R) {\n pst = this.result[j];\n break;\n }\n }\n if (pst === this.L) {\n this.result[i] = this.L;\n }\n }\n }\n this.checkCommanCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.getLength = function (index, length, validSet) {\n --index;\n while (++index < length) {\n var t = this.result[index];\n for (var i = 0; i < validSet.length; ++i) {\n if (t === validSet[i]) {\n index = this.getLength(++index, length, validSet);\n }\n }\n return index;\n }\n return length;\n };\n RtlCharacters.prototype.checkCommanCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.WS || this.result[i] === this.ON || this.result[i] === this.B ||\n this.result[i] === this.S) {\n var s = i;\n var byte = [this.B, this.S, this.WS, this.ON];\n var l = this.getLength(s, length, byte);\n var lt = 0;\n var tt = 0;\n var rt = 0;\n if (s === index) {\n lt = startType;\n }\n else {\n lt = this.result[s - 1];\n if (lt === this.AN) {\n lt = this.R;\n }\n else if (lt === this.EN) {\n lt = this.R;\n }\n }\n if (l === length) {\n tt = endType;\n }\n else {\n tt = this.result[l];\n if (tt === this.AN) {\n tt = this.R;\n }\n else if (tt === this.EN) {\n tt = this.R;\n }\n }\n if (lt === tt) {\n rt = lt;\n }\n else {\n rt = ((level & 0x1) === 0) ? this.L : this.R;\n }\n for (var j = s; j < l; ++j) {\n this.result[j] = rt;\n }\n i = l;\n }\n }\n };\n return RtlCharacters;\n}());\nexport { RtlCharacters };\n","import { PdfString } from './../../primitives/pdf-string';\nimport { ArabicShapeRenderer } from './rtl/rtl-text-shape';\nimport { PdfTextDirection } from './../enum';\nimport { Bidi } from './rtl/rtl-bidirectional';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar RtlRenderer = /** @class */ (function () {\n function RtlRenderer() {\n //region Constants\n /// Open bracket symbol.\n /// \n this.openBracket = '(';\n /// \n /// Close bracket symbol.\n /// \n this.closeBracket = ')';\n //#endregion\n }\n //#region Constructors\n /// \n /// Initializes a new instance of the class.\n /// \n // public constructor() {\n // }\n //#region Public Methods\n /// \n /// Layouts text. Changes blocks position in the RTL text.\n /// Ligates the text if needed.\n /// \n /// Line of the text.\n /// Font to be used for string printing.\n /// Font alignment.\n /// Indicates whether Word Spacing used or not.\n /// Layout string.\n RtlRenderer.prototype.layout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var result = [];\n if (font.Unicode) {\n result = this.customLayout(line, rtl, format, font, wordSpace);\n }\n else {\n result = [];\n result[0] = line;\n }\n return result;\n };\n /// \n /// Layouts a string and splits it by the words and using correct lay outing.\n /// \n /// Text line.\n /// Font object.\n /// Indicates whether RTL should be applied.\n /// Indicates whether word spacing is used.\n /// Array of words if converted, null otherwise.\n RtlRenderer.prototype.splitLayout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var words = [];\n var system = false;\n if (!system || words == null) {\n words = this.customSplitLayout(line, font, rtl, wordSpace, format);\n }\n return words;\n };\n //#endregion\n //#region Implementation\n // private isEnglish( word : string) : boolean\n // {\n // let c : string = (word.length > 0) ? word[0] : '';\n // return (c >= '0' && c < 'ÿ');\n // }\n // private keepOrder( words : string, startIndex : number, count: number, result : string[], resultIndex : number) : void\n // {\n // for (let i : number = 0, ri = resultIndex - count + 1; i < count; ++i, ++ri) {\n // result[ri] = words[i + startIndex];\n // }\n // }\n /// \n /// Uses system API to layout the text.\n /// \n /// Line of the text to be layouted.\n /// Font which is used for text printing.\n /// Indicates whether we use RTL or RTL lay outing of the text container.\n /// Layout string.\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.getGlyphIndex = function (line, font, rtl, /*out*/ glyphs, custom) {\n var success = true;\n var fail = false;\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n glyphs = null;\n if (line.length === 0) {\n return { success: fail, glyphs: glyphs };\n }\n var renderer = new ArabicShapeRenderer();\n var text = renderer.shape(line, 0);\n var internalFont = font.fontInternal;\n var ttfReader = internalFont.ttfReader;\n glyphs = new Uint16Array(text.length);\n var i = 0;\n for (var k = 0, len = text.length; k < len; k++) {\n var ch = text[k];\n var glyphInfo = ttfReader.getGlyph(ch);\n if (glyphInfo !== null && typeof glyphInfo !== 'undefined') {\n glyphs[i++] = (glyphInfo).index;\n }\n }\n return { success: success, glyphs: glyphs };\n };\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.customLayout = function (line, rtl, format, font, wordSpace) {\n if (wordSpace === null || typeof wordSpace === 'undefined') {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n var result = null;\n //bidirectional order.\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n var bidi = new Bidi();\n result = bidi.getLogicalToVisualString(line, rtl);\n }\n return result;\n }\n else {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var layouted = null;\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n var renderer = new ArabicShapeRenderer();\n var txt = renderer.shape(line, 0);\n layouted = this.customLayout(txt, rtl, format);\n }\n // else {\n // layouted = this.customLayout(line, rtl, format);\n // }\n // We have unicode font, but from the file. \n var result = [];\n // Split the text by words if word spacing is not default.\n if (wordSpace) {\n var words = layouted.split('');\n var count = words.length;\n for (var i = 0; i < count; i++) {\n words[i] = this.addChars(font, words[i]);\n }\n result = words;\n }\n else {\n result = [];\n result[0] = this.addChars(font, layouted);\n }\n return result;\n }\n };\n /// \n /// Add information about used glyphs to the font.\n /// \n /// Font used for text rendering.\n /// Array of used glyphs.\n /// String in the form to be written to the file.\n RtlRenderer.prototype.addChars = function (font, glyphs) {\n var line = glyphs;\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n var text = line;\n var internalFont = font.fontInternal;\n var ttfReader = internalFont.ttfReader;\n font.setSymbols(text);\n // Reconvert string according to unicode standard.\n text = ttfReader.convertString(text);\n var bytes = PdfString.toUnicodeArray(text, false);\n text = PdfString.byteToString(bytes);\n return text;\n // else {\n // if (font == null) {\n // throw new Error('ArgumentNullException : font');\n // }\n // if (glyphs == null) {\n // throw new Error('ArgumentNullException : glyphs');\n // }\n // // Mark the chars as used.\n // let text : string = '';\n // font.setSymbols(glyphs);\n // // Create string from the glyphs.\n // \n // let chars : string[] = [];\n // for (let i : number = 0; i < glyphs.length; i++) {\n // chars[i] = glyphs[i].toString();\n // }\n // for (let j : number = 0 ; j < chars.length; j++) {\n // text = text + chars[j];\n // }\n // let bytes : number[] = PdfString.toUnicodeArray(text, false);\n // text = PdfString.byteToString(bytes);\n // return text;\n // }\n };\n /// \n /// Layouts a string and splits it by the words by using custom lay outing.\n /// \n /// Text line.\n /// Font object.\n /// Indicates whether RTL should be applied.\n /// Indicates whether word spacing is used.\n /// Array of words if converted, null otherwise.\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.customSplitLayout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var reversedLine = this.customLayout(line, rtl, format);\n var words = reversedLine.split('');\n return words;\n };\n return RtlRenderer;\n}());\nexport { RtlRenderer };\n","/**\n * PdfGraphics.ts class for EJ2-PDF\n */\nimport { PdfColorSpace, TextRenderingMode, PdfFillMode, PdfTextAlignment } from './enum';\nimport { PdfVerticalAlignment, PdfBlendMode } from './enum';\nimport { PdfSubSuperScript } from './fonts/enum';\nimport { PdfStreamWriter } from './../input-output/pdf-stream-writer';\nimport { PdfPen } from './pdf-pen';\nimport { PdfBrush } from './brushes/pdf-brush';\nimport { PdfSolidBrush } from './brushes/pdf-solid-brush';\nimport { PdfFont } from './fonts/pdf-font';\nimport { PdfTransformationMatrix } from './pdf-transformation-matrix';\nimport { PointF, SizeF, RectangleF } from './../drawing/pdf-drawing';\nimport { ProcedureSets } from './constants';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfStringFormat } from './fonts/pdf-string-format';\nimport { TemporaryDictionary } from './../collections/object-object-pair/dictionary';\nimport { PdfTransparency } from './pdf-transparency';\nimport { PdfStringLayouter, LineType } from './fonts/string-layouter';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { StringTokenizer } from './fonts/string-tokenizer';\nimport { PdfAutomaticFieldInfoCollection } from './../document/automatic-fields/automatic-field-info-collection';\nimport { PdfAutomaticFieldInfo } from './../document/automatic-fields/automatic-field-info';\nimport { Operators } from './../input-output/pdf-operators';\nimport { UnicodeTrueTypeFont } from './fonts/unicode-true-type-font';\nimport { InternalEnum } from './../primitives/pdf-string';\nimport { RtlRenderer } from './fonts/rtl-renderer';\nimport { PdfTextDirection } from './enum';\n/**\n * `PdfGraphics` class represents a graphics context of the objects.\n * It's used for performing all the graphics operations.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * //graphics of the page\n * let page1Graphics : PdfGraphics = page1.graphics;\n * // draw the text on the page1 graphics\n * page1Graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfGraphics = /** @class */ (function () {\n function PdfGraphics(arg1, arg2, arg3) {\n /**\n * Represents the `Current color space`.\n * @private\n */\n this.currentColorSpace = PdfColorSpace.Rgb;\n /**\n * Stores `previous rendering mode`.\n * @private\n */\n this.previousTextRenderingMode = TextRenderingMode.Fill;\n /**\n * Previous `character spacing` value or 0.\n * @private\n */\n this.previousCharacterSpacing = 0.0;\n /**\n * Previous `word spacing` value or 0.\n * @private\n */\n this.previousWordSpacing = 0.0;\n /**\n * The `previously used text scaling` value.\n * @private\n */\n this.previousTextScaling = 100.0;\n /**\n * Instance of `ProcedureSets` class.\n * @private\n */\n this.procedureSets = new ProcedureSets();\n /**\n * To check wihether it is a `direct text rendering`.\n * @default true\n * @private\n */\n this.isNormalRender = true;\n /**\n * check whether to `use font size` to calculate the shift.\n * @default false\n * @private\n */\n this.isUseFontSize = false;\n /**\n * check whether the font is in `italic type`.\n * @default false\n * @private\n */\n this.isItalic = false;\n /**\n * Check whether it is an `emf Text Matrix`.\n * @default false\n * @private\n */\n this.isEmfTextScaled = false;\n /**\n * Check whether it is an `emf` call.\n * @default false\n * @private\n */\n this.isEmf = false;\n /**\n * Check whether it is an `emf plus` call.\n * @default false\n * @private\n */\n this.isEmfPlus = false;\n /**\n * Check whether it is in `base line format`.\n * @default true\n * @private\n */\n this.isBaselineFormat = true;\n /**\n * Emf Text `Scaling Factor`.\n * @private\n */\n this.emfScalingFactor = new SizeF(0, 0);\n /**\n * To check whether the `last color space` of document and garphics is saved.\n * @private\n */\n this.colorSpaceChanged = false;\n /**\n * Stores an instance of `DictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isPointOverload = false;\n /**\n * Current colorspaces.\n * @hidden\n * @private\n */\n this.currentColorSpaces = ['RGB', 'CMYK', 'GrayScale', 'Indexed'];\n /**\n * Checks the current image `is optimized` or not.\n * @default false.\n * @private\n */\n this.isImageOptimized = false;\n /**\n * Stores the `graphics states`.\n * @private\n */\n this.graphicsState = [];\n /**\n * Indicates whether the object `had trasparency`.\n * @default false\n * @private\n */\n this.istransparencySet = false;\n /**\n * Stores the instance of `PdfAutomaticFieldInfoCollection` class .\n * @default null\n * @private\n */\n this.internalAutomaticFields = null;\n /**\n * Stores the index of the start line that should draw with in the next page.\n * @private\n */\n this.startCutIndex = -1;\n if (arg3 instanceof PdfStreamWriter) {\n this.pdfStreamWriter = arg3;\n this.getResources = arg2;\n this.canvasSize = arg1;\n this.initialize();\n }\n else {\n this.constructor(arg1, arg2, new PdfStreamWriter(arg3));\n }\n }\n Object.defineProperty(PdfGraphics.prototype, \"stringLayoutResult\", {\n // Properties\n /**\n * Returns the `result` after drawing string.\n * @private\n */\n get: function () {\n return this.pdfStringLayoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"size\", {\n /**\n * Gets the `size` of the canvas.\n * @private\n */\n get: function () {\n return this.canvasSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"mediaBoxUpperRightBound\", {\n /**\n * Gets and Sets the value of `MediaBox upper right bound`.\n * @private\n */\n get: function () {\n if (typeof this.internalMediaBoxUpperRightBound === 'undefined') {\n this.internalMediaBoxUpperRightBound = 0;\n }\n return this.internalMediaBoxUpperRightBound;\n },\n set: function (value) {\n this.internalMediaBoxUpperRightBound = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"clientSize\", {\n /**\n * Gets the `size` of the canvas reduced by margins and page templates.\n * @private\n */\n get: function () {\n return new SizeF(this.clipBounds.width, this.clipBounds.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"colorSpace\", {\n /**\n * Gets or sets the current `color space` of the document\n * @private\n */\n get: function () {\n return this.currentColorSpace;\n },\n set: function (value) {\n this.currentColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"streamWriter\", {\n /**\n * Gets the `stream writer`.\n * @private\n */\n get: function () {\n return this.pdfStreamWriter;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"matrix\", {\n /**\n * Gets the `transformation matrix` reflecting current transformation.\n * @private\n */\n get: function () {\n if (this.transformationMatrix == null) {\n this.transformationMatrix = new PdfTransformationMatrix();\n }\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"layer\", {\n /**\n * Gets the `layer` for the graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"page\", {\n /**\n * Gets the `page` for this graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer.page;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"automaticFields\", {\n get: function () {\n if (this.internalAutomaticFields == null || typeof this.internalAutomaticFields === 'undefined') {\n this.internalAutomaticFields = new PdfAutomaticFieldInfoCollection();\n }\n return this.internalAutomaticFields;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` this instance.\n * @private\n */\n PdfGraphics.prototype.initialize = function () {\n this.bStateSaved = false;\n this.currentPen = null;\n this.currentBrush = null;\n this.currentFont = null;\n this.currentColorSpace = PdfColorSpace.Rgb;\n this.bCSInitialized = false;\n this.transformationMatrix = null;\n this.previousTextRenderingMode = (-1); //.Fill;\n this.previousCharacterSpacing = -1.0;\n this.previousWordSpacing = -1.0;\n this.previousTextScaling = -100.0;\n // this.m_trasparencies = null;\n this.currentStringFormat = null;\n this.clipBounds = new RectangleF(new PointF(0, 0), this.size);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n };\n PdfGraphics.prototype.drawPdfTemplate = function (template, location, size) {\n if (typeof size === 'undefined') {\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n this.drawPdfTemplate(template, location, template.size);\n }\n else {\n // let crossTable : PdfCrossTable = null;\n // if (this.pageLayer != null) {\n // crossTable = (this.page as PdfPage).section.parentDocument.crossTable;\n // }\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n var scaleX = (template.width > 0) ? size.width / template.width : 1;\n var scaleY = (template.height > 0) ? size.height / template.height : 1;\n var bNeedScale = !(scaleX === 1 && scaleY === 1);\n // Save state.\n var state = this.save();\n // Take into consideration that rect location is bottom/left.\n var matrix = new PdfTransformationMatrix();\n if (this.pageLayer != null) {\n this.getTranslateTransform(location.x, location.y + size.height, matrix);\n }\n if (bNeedScale) {\n this.getScaleTransform(scaleX, scaleY, matrix);\n }\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n var name_1 = resources.getName(template);\n this.pdfStreamWriter.executeObject(name_1);\n // Restore state.\n this.restore(state);\n //Transfer automatic fields from template.\n var g = template.graphics;\n if (g != null) {\n for (var index = 0; index < g.automaticFields.automaticFields.length; index++) {\n var fieldInfo = g.automaticFields.automaticFields[index];\n var newLocation = new PointF(fieldInfo.location.x + location.x, fieldInfo.location.y + location.y);\n var scalingX = template.size.width == 0 ? 0 : size.width / template.size.width;\n var scalingY = template.size.height == 0 ? 0 : size.height / template.size.height;\n this.automaticFields.add(new PdfAutomaticFieldInfo(fieldInfo.field, newLocation, scalingX, scalingY));\n this.page.dictionary.modify();\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageB);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageC);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageI);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n }\n };\n /* tslint:disable */\n /**\n * @public\n */\n PdfGraphics.prototype.drawString = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {\n if (typeof arg1 === 'string' && arg2 instanceof PdfFont && (arg3 instanceof PdfPen || arg3 === null) && (arg4 instanceof PdfBrush || arg4 === null) && typeof arg5 === 'number' && typeof arg6 === 'number' && (arg7 instanceof PdfStringFormat || arg7 === null) && typeof arg8 === 'undefined') {\n this.isOverloadWithPosition = true;\n this.drawString(arg1, arg2, arg3, arg4, arg5, arg6, (this.clientSize.width - arg5), 0, arg7);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n var temparg7 = arg7;\n var temparg8 = arg8;\n var temparg9 = arg9;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(arg1, arg2, temparg9, new SizeF(temparg7, temparg8), this.isOverloadWithPosition, this.clientSize);\n if (!result.empty) {\n var rect = this.checkCorrectLayoutRectangle(result.actualSize, temparg5, temparg6, temparg9);\n if (temparg7 <= 0) {\n temparg5 = rect.x;\n temparg7 = rect.width;\n }\n if (temparg8 <= 0) {\n temparg6 = rect.y;\n temparg8 = rect.height;\n }\n this.drawStringLayoutResult(result, arg2, temparg3, temparg4, new RectangleF(temparg5, temparg6, temparg7, temparg8), temparg9);\n this.isEmfTextScaled = false;\n this.emfScalingFactor = new SizeF(0, 0);\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n this.isNormalRender = true;\n this.pdfStringLayoutResult = result;\n this.isUseFontSize = false;\n }\n }; /* tslint:enable */\n PdfGraphics.prototype.drawLine = function (arg1, arg2, arg3, arg4, arg5) {\n if (arg2 instanceof PointF) {\n var temparg2 = arg2;\n var temparg3 = arg3;\n this.drawLine(arg1, temparg2.x, temparg2.y, temparg3.x, temparg3.y);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n this.stateControl(arg1, null, null);\n var sw = this.streamWriter;\n sw.beginPath(temparg2, temparg3);\n sw.appendLineSegment(temparg4, temparg5);\n sw.strokePath();\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawRectangle = function (arg1, arg2, arg3, arg4, arg5, arg6) {\n if (arg1 instanceof PdfPen && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(arg1, null, arg2, temparg3, arg4, arg5);\n }\n else if (arg1 instanceof PdfBrush && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(null, arg1, arg2, temparg3, arg4, arg5);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n if (arg2 instanceof PdfSolidBrush && arg2.color.isEmpty) {\n arg2 = null;\n }\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.stateControl(temparg1, temparg2, null);\n this.streamWriter.appendRectangle(temparg3, temparg4, temparg5, temparg6);\n this.drawPath(temparg1, temparg2, false);\n }\n };\n PdfGraphics.prototype.drawPath = function (arg1, arg2, arg3, arg4) {\n if (typeof arg3 === 'boolean') {\n var temparg3 = arg3;\n this.drawPath(arg1, arg2, PdfFillMode.Winding, temparg3);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var isPen = arg1 != null;\n var isBrush = arg2 != null;\n var isEvenOdd = (temparg3 === PdfFillMode.Alternate);\n if (isPen && isBrush) {\n this.streamWriter.fillStrokePath(isEvenOdd);\n }\n else if (!isPen && !isBrush) {\n this.streamWriter.endPath();\n }\n else if (isPen) {\n this.streamWriter.strokePath();\n }\n else {\n this.streamWriter.fillPath(isEvenOdd);\n }\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawImage = function (arg1, arg2, arg3, arg4, arg5) {\n if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n var size = arg1.physicalDimension;\n this.drawImage(arg1, arg2, arg3, size.width, size.height);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n arg1.save();\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(temparg2, (temparg3 + temparg5), matrix);\n this.getScaleTransform(arg4, arg5, matrix);\n this.pdfStreamWriter.write('q');\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n if (typeof this.pageLayer !== 'undefined' && this.page != null) {\n resources.document = this.page.document;\n }\n var name_2 = resources.getName(arg1);\n if (typeof this.pageLayer !== 'undefined') {\n this.page.setResources(resources);\n }\n this.pdfStreamWriter.executeObject(name_2);\n this.pdfStreamWriter.write(Operators.restoreState);\n this.pdfStreamWriter.write(Operators.newLine);\n var resource = this.getResources.getResources();\n resource.requireProcedureSet(this.procedureSets.imageB);\n resource.requireProcedureSet(this.procedureSets.imageC);\n resource.requireProcedureSet(this.procedureSets.imageI);\n resource.requireProcedureSet(this.procedureSets.text);\n }\n };\n //Implementation\n /* tslint:disable */\n /**\n * Returns `bounds` of the line info.\n * @private\n */\n PdfGraphics.prototype.getLineBounds = function (lineIndex, result, font, layoutRectangle, format) {\n var bounds;\n if (!result.empty && lineIndex < result.lineCount && lineIndex >= 0) {\n var line = result.lines[lineIndex];\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var y = vShift + layoutRectangle.y + (result.lineHeight * lineIndex);\n var lineWidth = line.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(line, format, layoutRectangle, (lineIndex === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x = layoutRectangle.x + hShift;\n /* tslint:disable */\n var width = (!this.shouldJustify(line, layoutRectangle.width, format)) ? lineWidth - lineIndent : layoutRectangle.width - lineIndent; /* tslint:enable */\n var height = result.lineHeight;\n bounds = new RectangleF(x, y, width, height);\n }\n else {\n bounds = new RectangleF(0, 0, 0, 0);\n }\n return bounds;\n };\n /**\n * Creates `lay outed rectangle` depending on the text settings.\n * @private\n */\n PdfGraphics.prototype.checkCorrectLayoutRectangle = function (textSize, x, y, format) {\n var layoutedRectangle = new RectangleF(x, y, textSize.width, textSize.width);\n if (format != null) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n layoutedRectangle.x -= layoutedRectangle.width / 2;\n break;\n case PdfTextAlignment.Right:\n layoutedRectangle.x -= layoutedRectangle.width;\n break;\n }\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n layoutedRectangle.y -= layoutedRectangle.height / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n layoutedRectangle.y -= layoutedRectangle.height;\n break;\n }\n }\n return layoutedRectangle;\n };\n /**\n * Sets the `layer` for the graphics.\n * @private\n */\n PdfGraphics.prototype.setLayer = function (layer) {\n this.pageLayer = layer;\n var page = layer.page;\n if (page != null && typeof page !== 'undefined') {\n page.beginSave = this.pageSave;\n }\n };\n /**\n * Adding page number field before page saving.\n * @private\n */\n /* tslint:disable */\n PdfGraphics.prototype.pageSave = function (page) {\n if (page.graphics.automaticFields != null) {\n for (var i = 0; i < page.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = page.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(page.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n };\n /**\n * `Draws a layout result`.\n * @private\n */\n PdfGraphics.prototype.drawStringLayoutResult = function (result, font, pen, brush, layoutRectangle, format) {\n if (!result.empty) {\n this.applyStringSettings(font, pen, brush, format, layoutRectangle);\n // Set text scaling\n var textScaling = (format != null) ? format.horizontalScalingFactor : 100.0;\n if (textScaling !== this.previousTextScaling && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setTextScaling(textScaling);\n this.previousTextScaling = textScaling;\n }\n var height = (format == null || format.lineSpacing === 0) ? font.height : format.lineSpacing + font.height;\n var subScript = (format != null && format.subSuperScript === PdfSubSuperScript.SubScript);\n var shift = 0;\n shift = (subScript) ? height - (font.height + font.metrics.getDescent(format)) : (height - font.metrics.getAscent(format));\n this.shift = shift;\n this.pdfStreamWriter.startNextLine(layoutRectangle.x, layoutRectangle.y - shift);\n this.pdfStreamWriter.setLeading(+height);\n var resultHeight = 0;\n var remainingString = '';\n for (var i = 0; i < result.lines.length; i++) {\n resultHeight += result.lineHeight;\n if ((layoutRectangle.y + resultHeight) > this.clientSize.height) {\n this.startCutIndex = i;\n break;\n }\n }\n for (var j = this.startCutIndex; (j < result.lines.length && j >= 0); j++) {\n remainingString += result.lines[j].text;\n }\n var bounds = new RectangleF(layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height);\n this.drawLayoutResult(result, font, format, layoutRectangle);\n this.underlineStrikeoutText(pen, brush, result, font, bounds, format);\n this.isEmfPlus = false;\n this.isUseFontSize = false;\n if (this.startCutIndex !== -1) {\n var page = this.getNextPage();\n page.graphics.drawString(remainingString, font, pen, brush, layoutRectangle.x, 0, layoutRectangle.width, 0, format);\n }\n }\n else {\n throw new Error('ArgumentNullException:result');\n }\n };\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGraphics.prototype.getNextPage = function () {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n return nextPage;\n };\n PdfGraphics.prototype.setClip = function (rectangle, mode) {\n if (typeof mode === 'undefined') {\n this.setClip(rectangle, PdfFillMode.Winding);\n }\n else {\n this.pdfStreamWriter.appendRectangle(rectangle);\n this.pdfStreamWriter.clipPath((mode === PdfFillMode.Alternate));\n }\n };\n /**\n * Applies all the `text settings`.\n * @private\n */\n PdfGraphics.prototype.applyStringSettings = function (font, pen, brush, format, bounds) {\n var setLineWidth = false;\n var tm = this.getTextRenderingMode(pen, brush, format);\n this.stateControl(pen, brush, font, format);\n this.pdfStreamWriter.beginText();\n if ((tm) !== this.previousTextRenderingMode) {\n this.pdfStreamWriter.setTextRenderingMode(tm);\n this.previousTextRenderingMode = tm;\n }\n // Set character spacing.\n var cs = (format != null) ? format.characterSpacing : 0;\n if (cs !== this.previousCharacterSpacing && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setCharacterSpacing(cs);\n this.previousCharacterSpacing = cs;\n }\n // Set word spacing.\n // NOTE: it works only if the space code is equal to 32 (0x20).\n var ws = (format != null) ? format.wordSpacing : 0;\n if (ws !== this.previousWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(ws);\n this.previousWordSpacing = ws;\n }\n };\n /**\n * Calculates `shift value` if the text is vertically aligned.\n * @private\n */\n PdfGraphics.prototype.getTextVerticalAlignShift = function (textHeight, boundsHeight, format) {\n var shift = 0;\n if (boundsHeight >= 0 && format != null && format.lineAlignment !== PdfVerticalAlignment.Top) {\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n shift = (boundsHeight - textHeight) / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n shift = boundsHeight - textHeight;\n break;\n }\n }\n return shift;\n };\n /* tslint:disable */\n /**\n * `Draws layout result`.\n * @private\n */\n PdfGraphics.prototype.drawLayoutResult = function (result, font, format, layoutRectangle) {\n var vAlignShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, vAlignShift);\n }\n var ttfFont = font;\n var unicode = (ttfFont != null && ttfFont.isUnicode);\n var embed = (ttfFont != null && ttfFont.isEmbedFont);\n var lines = result.lines;\n for (var i = 0, len = lines.length; (i < len && i !== this.startCutIndex); i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hAlignShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hAlignShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(hAlignShift, 0);\n }\n if (unicode) {\n this.drawUnicodeLine(lineInfo, layoutRectangle, font, format);\n }\n else {\n this.drawAsciiLine(lineInfo, layoutRectangle, font, format);\n }\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(-hAlignShift, 0);\n }\n if (this.isOverloadWithPosition && lines.length > 1) {\n this.pdfStreamWriter.startNextLine(-(layoutRectangle.x), 0);\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n this.isOverloadWithPosition = false;\n this.isPointOverload = true;\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, -(vAlignShift - result.lineHeight));\n }\n this.pdfStreamWriter.endText();\n };\n /**\n * `Draws Ascii line`.\n * @private\n */\n PdfGraphics.prototype.drawAsciiLine = function (lineInfo, layoutRectangle, font, format) {\n this.justifyLine(lineInfo, layoutRectangle.width, format);\n var value = '';\n if (lineInfo.text.indexOf('(') !== -1 || lineInfo.text.indexOf(')') !== -1) {\n for (var i = 0; i < lineInfo.text.length; i++) {\n if (lineInfo.text[i] === '(') {\n value += '\\\\\\(';\n }\n else if (lineInfo.text[i] === ')') {\n value += '\\\\\\)';\n }\n else {\n value += lineInfo.text[i];\n }\n }\n }\n if (value === '') {\n value = lineInfo.text;\n }\n var line = '(' + value + ')';\n this.pdfStreamWriter.showNextLineText(new PdfString(line));\n };\n /**\n * Draws unicode line.\n * @private\n */\n PdfGraphics.prototype.drawUnicodeLine = function (lineInfo, layoutRectangle, font, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var rtl = (format !== null && format.rightToLeft);\n var useWordSpace = (format !== null && (format.wordSpacing !== 0 || format.alignment === PdfTextAlignment.Justify));\n var ttfFont = font;\n var wordSpacing = this.justifyLine(lineInfo, layoutRectangle.width, format);\n var rtlRender = new RtlRenderer();\n if (rtl || (format !== null && format.textDirection !== PdfTextDirection.None)) {\n var blocks = null;\n var rightAlign = (format !== null && format.alignment === PdfTextAlignment.Right);\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n /* tslint:disable-next-line:max-line-length */\n blocks = rtlRender.layout(line, ttfFont, (format.textDirection === PdfTextDirection.RightToLeft) ? true : false, useWordSpace, format);\n }\n else {\n blocks = rtlRender.layout(line, ttfFont, rightAlign, useWordSpace, format);\n }\n var words = null;\n if (blocks.length > 1) {\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n /* tslint:disable-next-line:max-line-length */\n words = rtlRender.splitLayout(line, ttfFont, (format.textDirection === PdfTextDirection.RightToLeft) ? true : false, useWordSpace, format);\n }\n else {\n words = rtlRender.splitLayout(line, ttfFont, rightAlign, useWordSpace, format);\n }\n }\n else {\n words = [line];\n }\n this.drawUnicodeBlocks(blocks, words, ttfFont, format, wordSpacing);\n }\n else {\n if (useWordSpace) {\n var result = this.breakUnicodeLine(line, ttfFont, null);\n var blocks = result.tokens;\n var words = result.words;\n this.drawUnicodeBlocks(blocks, words, ttfFont, format, wordSpacing);\n }\n else {\n var token = this.convertToUnicode(line, ttfFont);\n var value = this.getUnicodeString(token);\n this.streamWriter.showNextLineText(value);\n }\n }\n };\n /**\n * Draws array of unicode tokens.\n */\n /* tslint:disable */\n PdfGraphics.prototype.drawUnicodeBlocks = function (blocks, words, font, format, wordSpacing) {\n /* tslint:enable */\n if (blocks == null) {\n throw new Error('Argument Null Exception : blocks');\n }\n if (words == null) {\n throw new Error('Argument Null Exception : words');\n }\n if (font == null) {\n throw new Error('Argument Null Exception : font');\n }\n this.streamWriter.startNextLine();\n var x = 0;\n var xShift = 0;\n var firstLineIndent = 0;\n var paragraphIndent = 0;\n try {\n if (format !== null) {\n firstLineIndent = format.firstLineIndent;\n paragraphIndent = format.paragraphIndent;\n format.firstLineIndent = 0;\n format.paragraphIndent = 0;\n }\n var spaceWidth = font.getCharWidth(StringTokenizer.whiteSpace, format) + wordSpacing;\n var characterSpacing = (format != null) ? format.characterSpacing : 0;\n var wordSpace = (format !== null && wordSpacing === 0) ? format.wordSpacing : 0;\n spaceWidth += characterSpacing + wordSpace;\n for (var i = 0; i < blocks.length; i++) {\n var token = blocks[i];\n var word = words[i];\n var tokenWidth = 0;\n if (x !== 0) {\n this.streamWriter.startNextLine(x, 0);\n }\n if (word.length > 0) {\n tokenWidth += /*Utils.Round(*/ font.measureString(word, format).width /*)*/;\n tokenWidth += characterSpacing;\n var val = this.getUnicodeString(token);\n this.streamWriter.showText(val);\n }\n if (i !== blocks.length - 1) {\n x = tokenWidth + spaceWidth;\n xShift += x;\n }\n }\n // Rolback current line position.\n if (xShift > 0) {\n this.streamWriter.startNextLine(-xShift, 0);\n }\n }\n finally {\n if (format !== null) {\n format.firstLineIndent = firstLineIndent;\n format.paragraphIndent = paragraphIndent;\n }\n }\n };\n /**\n * Breakes the unicode line to the words and converts symbols to glyphs.\n */\n PdfGraphics.prototype.breakUnicodeLine = function (line, ttfFont, words) {\n if (line === null) {\n throw new Error('Argument Null Exception : line');\n }\n words = line.split(null);\n var tokens = [];\n for (var i = 0; i < words.length; i++) {\n // Reconvert string according to unicode standard.\n var word = words[i];\n var token = this.convertToUnicode(word, ttfFont);\n tokens[i] = token;\n }\n return { tokens: tokens, words: words };\n };\n /**\n * Creates PdfString from the unicode text.\n */\n PdfGraphics.prototype.getUnicodeString = function (token) {\n if (token === null) {\n throw new Error('Argument Null Exception : token');\n }\n var val = new PdfString(token);\n val.converted = true;\n val.encode = InternalEnum.ForceEncoding.Ascii;\n return val;\n };\n /**\n * Converts to unicode format.\n */\n PdfGraphics.prototype.convertToUnicode = function (text, ttfFont) {\n var token = null;\n if (text == null) {\n throw new Error('Argument Null Exception : text');\n }\n if (ttfFont == null) {\n throw new Error('Argument Null Exception : ttfFont');\n }\n if (ttfFont.fontInternal instanceof UnicodeTrueTypeFont) {\n var ttfReader = ttfFont.fontInternal.ttfReader;\n ttfFont.setSymbols(text);\n token = ttfReader.convertString(text);\n var bytes = PdfString.toUnicodeArray(token, false);\n token = PdfString.byteToString(bytes);\n }\n return token;\n };\n /**\n * `Justifies` the line if needed.\n * @private\n */\n PdfGraphics.prototype.justifyLine = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var shouldJustify = this.shouldJustify(lineInfo, boundsWidth, format);\n var hasWordSpacing = (format != null && format.wordSpacing !== 0);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var wordSpace = 0;\n if (shouldJustify) {\n // Correct line width.\n if (hasWordSpacing) {\n lineWidth -= (whitespacesCount * format.wordSpacing);\n }\n var difference = boundsWidth - lineWidth;\n wordSpace = difference / whitespacesCount;\n this.pdfStreamWriter.setWordSpacing(wordSpace);\n }\n else {\n // If there is justifying, but the line shouldn't be justified, restore default word spacing.\n if (hasWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(format.wordSpacing);\n }\n else {\n this.pdfStreamWriter.setWordSpacing(0);\n }\n }\n return wordSpace;\n };\n /**\n * `Reset` or reinitialize the current graphic value.\n * @private\n */\n PdfGraphics.prototype.reset = function (size) {\n this.canvasSize = size;\n this.streamWriter.clear();\n this.initialize();\n this.initializeCoordinates();\n };\n /**\n * Checks whether the line should be `justified`.\n * @private\n */\n PdfGraphics.prototype.shouldJustify = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var justifyStyle = (format != null && format.alignment === PdfTextAlignment.Justify);\n var goodWidth = (boundsWidth >= 0 && lineWidth < boundsWidth);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var hasSpaces = (whitespacesCount > 0 && line[0] !== StringTokenizer.whiteSpace);\n var goodLineBreakStyle = ((lineInfo.lineType & LineType.LayoutBreak) > 0);\n /* tslint:disable */\n var shouldJustify = (justifyStyle && goodWidth && hasSpaces && (goodLineBreakStyle || format.alignment === PdfTextAlignment.Justify)); /* tslint:enable */\n return shouldJustify;\n };\n /* tslint:disable */\n /**\n * Emulates `Underline, Strikeout` of the text if needed.\n * @private\n */\n PdfGraphics.prototype.underlineStrikeoutText = function (pen, brush, result, font, layoutRectangle, format) {\n if (font.underline || font.strikeout) {\n // Calculate line width.\n var linePen = this.createUnderlineStikeoutPen(pen, brush, font, format);\n if (linePen != null) {\n // Approximate line positions.\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var underlineYOffset = 0;\n underlineYOffset = layoutRectangle.y + vShift + font.metrics.getAscent(format) + 1.5 * linePen.width;\n var strikeoutYOffset = layoutRectangle.y + vShift + font.metrics.getHeight(format) / 2 + 1.5 * linePen.width;\n var lines = result.lines;\n // Run through the text and draw lines.\n for (var i = 0, len = result.lineCount; i < len; i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x1 = layoutRectangle.x + hShift;\n /* tslint:disable */\n var x2 = (!this.shouldJustify(lineInfo, layoutRectangle.width, format)) ? x1 + lineWidth - lineIndent : x1 + layoutRectangle.width - lineIndent;\n /* tslint:enable */\n if (font.underline) {\n var y = underlineYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n underlineYOffset += result.lineHeight;\n }\n if (font.strikeout) {\n var y = strikeoutYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n strikeoutYOffset += result.lineHeight;\n }\n if (this.isPointOverload && lines.length > 1) {\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n }\n }\n this.isPointOverload = false;\n }\n }\n };\n /**\n * `Creates a pen` for drawing lines in the text.\n * @private\n */\n PdfGraphics.prototype.createUnderlineStikeoutPen = function (pen, brush, font, format) {\n // Calculate line width.\n var lineWidth = font.metrics.getSize(format) / 20;\n var linePen = null;\n // Create a pen fo the lines.\n if (pen != null) {\n linePen = new PdfPen(pen.color, lineWidth);\n }\n else if (brush != null) {\n linePen = new PdfPen(brush, lineWidth);\n }\n return linePen;\n };\n /**\n * Return `text rendering mode`.\n * @private\n */\n PdfGraphics.prototype.getTextRenderingMode = function (pen, brush, format) {\n var tm = TextRenderingMode.None;\n if (pen != null && brush != null) {\n tm = TextRenderingMode.FillStroke;\n }\n else if (pen != null) {\n tm = TextRenderingMode.Stroke;\n }\n else {\n tm = TextRenderingMode.Fill;\n }\n if (format != null && format.clipPath) {\n tm |= TextRenderingMode.ClipFlag;\n }\n return tm;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfGraphics.prototype.getLineIndent = function (lineInfo, format, layoutBounds, firstLine) {\n var lineIndent = 0;\n var firstParagraphLine = ((lineInfo.lineType & LineType.FirstParagraphLine) > 0);\n if (format != null && firstParagraphLine) {\n lineIndent = (firstLine) ? format.firstLineIndent : format.paragraphIndent;\n lineIndent = (layoutBounds.width > 0) ? Math.min(layoutBounds.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates shift value if the line is `horizontaly aligned`.\n * @private\n */\n PdfGraphics.prototype.getHorizontalAlignShift = function (lineWidth, boundsWidth, format) {\n var shift = 0;\n if (boundsWidth >= 0 && format != null && format.alignment !== PdfTextAlignment.Left) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n shift = (boundsWidth - lineWidth) / 2;\n break;\n case PdfTextAlignment.Right:\n shift = boundsWidth - lineWidth;\n break;\n }\n }\n return shift;\n };\n /**\n * Gets or sets the value that indicates `text direction` mode.\n * @private\n */\n PdfGraphics.prototype.rightToLeft = function (format) {\n var rtl = (format != null && format.rightToLeft);\n if (format !== null && typeof format !== 'undefined') {\n if (format.textDirection !== PdfTextDirection.None && typeof format.textDirection !== 'undefined') {\n rtl = true;\n }\n }\n return rtl;\n };\n PdfGraphics.prototype.stateControl = function (pen, brush, font, format) {\n if (typeof format === 'undefined') {\n this.stateControl(pen, brush, font, null);\n }\n else {\n var saveState = false;\n if (brush !== null) {\n var solidBrush = brush;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n if (this.colorSpaceChanged === false) {\n this.lastDocumentCS = this.pageLayer.page.document.colorSpace;\n this.lastGraphicsCS = this.pageLayer.page.graphics.colorSpace;\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n this.colorSpaceChanged = true;\n }\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n else if (pen != null) {\n var pdfPen = pen;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n /* tslint:disable */\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n this.penControl(pen, saveState);\n this.brushControl(brush, saveState);\n this.fontControl(font, format, saveState);\n }\n };\n /**\n * Initializes the `current color space`.\n * @private\n */\n PdfGraphics.prototype.initCurrentColorSpace = function (colorspace) {\n var re = this.getResources.getResources();\n if (!this.bCSInitialized) {\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], true);\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], false);\n this.bCSInitialized = true;\n }\n };\n /**\n * Controls the `pen state`.\n * @private\n */\n PdfGraphics.prototype.penControl = function (pen, saveState) {\n if (pen != null) {\n this.currentPen = pen;\n this.colorSpace = PdfColorSpace.Rgb;\n /* tslint:disable */\n pen.monitorChanges(this.currentPen, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace, this.matrix.clone());\n /* tslint:enable */\n this.currentPen = pen.clone();\n }\n };\n /**\n * Controls the `brush state`.\n * @private\n */\n PdfGraphics.prototype.brushControl = function (brush, saveState) {\n if (brush != null) {\n this.currentBrush = brush;\n /* tslint:disable */\n brush.monitorChanges(this.currentBrush, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace);\n /* tslint:enable */\n this.currentBrush = brush;\n brush = null;\n }\n };\n /**\n * Saves the font and other `font settings`.\n * @private\n */\n PdfGraphics.prototype.fontControl = function (font, format, saveState) {\n if (font != null) {\n var curSubSuper = (format != null) ? format.subSuperScript : PdfSubSuperScript.None;\n /* tslint:disable */\n var prevSubSuper = (this.currentStringFormat != null) ? this.currentStringFormat.subSuperScript : PdfSubSuperScript.None; /* tslint:enable */\n if (saveState || font !== this.currentFont || curSubSuper !== prevSubSuper) {\n var resources = this.getResources.getResources();\n this.currentFont = font;\n this.currentStringFormat = format;\n var size = font.metrics.getSize(format);\n /* tslint:disable */\n this.isEmfTextScaled = false;\n var fontName = resources.getName(font);\n this.pdfStreamWriter.setFont(font, fontName, size);\n }\n }\n };\n PdfGraphics.prototype.setTransparency = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n this.istransparencySet = true;\n this.setTransparency(arg1, arg1, PdfBlendMode.Normal);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.setTransparency(arg1, arg2, PdfBlendMode.Normal);\n }\n else {\n if (this.trasparencies == null) {\n this.trasparencies = new TemporaryDictionary();\n }\n var transp = null;\n var td = new TransparencyData(arg1, arg2, arg3);\n if (this.trasparencies.containsKey(td)) {\n transp = this.trasparencies.getValue(td);\n }\n if (transp == null) {\n transp = new PdfTransparency(arg1, arg2, arg3);\n this.trasparencies.setValue(td, transp);\n }\n var resources = this.getResources.getResources();\n var name_3 = resources.getName(transp);\n var sw = this.streamWriter;\n sw.setGraphicsState(name_3);\n }\n };\n PdfGraphics.prototype.clipTranslateMargins = function (x, y, left, top, right, bottom) {\n if (x instanceof RectangleF && typeof y === 'undefined') {\n this.clipBounds = x;\n this.pdfStreamWriter.writeComment('Clip margins.');\n this.pdfStreamWriter.appendRectangle(x);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment('Translate co-ordinate system.');\n this.translateTransform(x.x, x.y);\n }\n else if (typeof x === 'number') {\n var clipArea = new RectangleF(left, top, this.size.width - left - right, this.size.height - top - bottom);\n this.clipBounds = clipArea;\n this.pdfStreamWriter.writeComment(\"Clip margins.\");\n this.pdfStreamWriter.appendRectangle(clipArea);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment(\"Translate co-ordinate system.\");\n this.translateTransform(x, y);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfGraphics.prototype.updateY = function (y) {\n return -y;\n };\n /**\n * Used to `translate the transformation`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set translate transform\n * page1.graphics.translateTransform(100, 100);\n * //\n * // draw the rectangle after applying translate transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param offsetX The x-coordinate of the translation.\n * @param offsetY The y-coordinate of the translation.\n */\n PdfGraphics.prototype.translateTransform = function (offsetX, offsetY) {\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(offsetX, offsetY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Translates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getTranslateTransform = function (x, y, input) {\n input.translate(x, this.updateY(y));\n return input;\n };\n /* tslint:disable */\n /**\n * Applies the specified `scaling operation` to the transformation matrix of this Graphics by prepending it to the object's transformation matrix.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // apply scaling trasformation\n * page1.graphics.scaleTransform(1.5, 2);\n * //\n * // draw the rectangle after applying scaling transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param scaleX Scale factor in the x direction.\n * @param scaleY Scale factor in the y direction.\n */\n /* tslint:enable */\n PdfGraphics.prototype.scaleTransform = function (scaleX, scaleY) {\n var matrix = new PdfTransformationMatrix();\n this.getScaleTransform(scaleX, scaleY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Scales` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getScaleTransform = function (x, y, input) {\n if (input == null) {\n input = new PdfTransformationMatrix();\n }\n input.scale(x, y);\n return input;\n };\n /**\n * Applies the specified `rotation` to the transformation matrix of this Graphics.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set RotateTransform with 25 degree of angle\n * page1.graphics.rotateTransform(25);\n * //\n * // draw the rectangle after RotateTransformation\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param angle Angle of rotation in degrees.\n */\n PdfGraphics.prototype.rotateTransform = function (angle) {\n var matrix = new PdfTransformationMatrix();\n this.getRotateTransform(angle, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Initializes coordinate system`.\n * @private\n */\n PdfGraphics.prototype.initializeCoordinates = function () {\n // Matrix equation: TM(T-1)=M', where T=[1 0 0 -1 0 h]\n this.pdfStreamWriter.writeComment('Change co-ordinate system to left/top.');\n // Translate co-ordinates only, don't flip.\n if (this.mediaBoxUpperRightBound !== -(this.size.height)) {\n if (this.cropBox == null) {\n if (this.mediaBoxUpperRightBound === this.size.height || this.mediaBoxUpperRightBound === 0) {\n this.translateTransform(0, this.updateY(this.size.height));\n }\n else {\n this.translateTransform(0, this.updateY(this.mediaBoxUpperRightBound));\n }\n }\n }\n };\n /**\n * `Rotates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getRotateTransform = function (angle, input) {\n if (input == null || typeof input === 'undefined') {\n input = new PdfTransformationMatrix();\n }\n input.rotate(this.updateY(angle));\n return input;\n };\n /**\n * `Saves` the current state of this Graphics and identifies the saved state with a GraphicsState.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // save the graphics state\n * let state1 : PdfGraphicsState = page1.graphics.save();\n * //\n * page1.graphics.scaleTransform(1.5, 2);\n * // draw the rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // restore the graphics state\n * page1.graphics.restore(state1);\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfGraphics.prototype.save = function () {\n var state = new PdfGraphicsState(this, this.matrix.clone());\n state.brush = this.currentBrush;\n state.pen = this.currentPen;\n state.font = this.currentFont;\n state.colorSpace = this.currentColorSpace;\n state.characterSpacing = this.previousCharacterSpacing;\n state.wordSpacing = this.previousWordSpacing;\n state.textScaling = this.previousTextScaling;\n state.textRenderingMode = this.previousTextRenderingMode;\n this.graphicsState.push(state);\n this.pdfStreamWriter.saveGraphicsState();\n return state;\n };\n PdfGraphics.prototype.restore = function (state) {\n if (typeof state === 'undefined') {\n if (this.graphicsState.length > 0) {\n this.doRestoreState();\n }\n }\n else {\n if (this.graphicsState.indexOf(state) !== -1) {\n for (;;) {\n if (this.graphicsState.length === 0) {\n break;\n }\n var popState = this.doRestoreState();\n if (popState === state) {\n break;\n }\n }\n }\n }\n };\n /**\n * `Restores graphics state`.\n * @private\n */\n PdfGraphics.prototype.doRestoreState = function () {\n var state = this.graphicsState.pop();\n this.transformationMatrix = state.matrix;\n this.currentBrush = state.brush;\n this.currentPen = state.pen;\n this.currentFont = state.font;\n this.currentColorSpace = state.colorSpace;\n this.previousCharacterSpacing = state.characterSpacing;\n this.previousWordSpacing = state.wordSpacing;\n this.previousTextScaling = state.textScaling;\n this.previousTextRenderingMode = state.textRenderingMode;\n this.pdfStreamWriter.restoreGraphicsState();\n return state;\n };\n // Constants\n /**\n * Specifies the mask of `path type values`.\n * @private\n */\n PdfGraphics.pathTypesValuesMask = 0xf;\n /**\n * Checks whether the object is `transparencyObject`.\n * @hidden\n * @private\n */\n PdfGraphics.transparencyObject = false;\n return PdfGraphics;\n}());\nexport { PdfGraphics };\n/**\n * `GetResourceEventHandler` class is alternate for event handlers and delegates.\n * @private\n * @hidden\n */\nvar GetResourceEventHandler = /** @class */ (function () {\n /**\n * Initialize instance of `GetResourceEventHandler` class.\n * Alternate for event handlers and delegates.\n * @private\n */\n function GetResourceEventHandler(sender) {\n this.sender = sender;\n }\n /**\n * Return the instance of `PdfResources` class.\n * @private\n */\n GetResourceEventHandler.prototype.getResources = function () {\n return this.sender.getResources();\n };\n return GetResourceEventHandler;\n}());\nexport { GetResourceEventHandler };\nvar PdfGraphicsState = /** @class */ (function () {\n function PdfGraphicsState(graphics, matrix) {\n /**\n * Stores `previous rendering mode`.\n * @default TextRenderingMode.Fill\n * @private\n */\n this.internalTextRenderingMode = TextRenderingMode.Fill;\n /**\n * `Previous character spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalCharacterSpacing = 0.0;\n /**\n * `Previous word spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalWordSpacing = 0.0;\n /**\n * The previously used `text scaling value`.\n * @default 100.0\n * @private\n */\n this.internalTextScaling = 100.0;\n /**\n * `Current color space`.\n * @default PdfColorSpace.Rgb\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n if (typeof graphics !== 'undefined') {\n this.pdfGraphics = graphics;\n this.transformationMatrix = matrix;\n }\n }\n Object.defineProperty(PdfGraphicsState.prototype, \"graphics\", {\n // Properties\n /**\n * Gets the parent `graphics object`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"matrix\", {\n /**\n * Gets the `current matrix`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"characterSpacing\", {\n /**\n * Gets or sets the `current character spacing`.\n * @private\n */\n get: function () {\n return this.internalCharacterSpacing;\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"wordSpacing\", {\n /**\n * Gets or sets the `word spacing` value.\n * @private\n */\n get: function () {\n return this.internalWordSpacing;\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textScaling\", {\n /**\n * Gets or sets the `text scaling` value.\n * @private\n */\n get: function () {\n return this.internalTextScaling;\n },\n set: function (value) {\n this.internalTextScaling = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"pen\", {\n /**\n * Gets or sets the `current pen` object.\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"brush\", {\n /**\n * Gets or sets the `brush`.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"font\", {\n /**\n * Gets or sets the `current font` object.\n * @private\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"colorSpace\", {\n /**\n * Gets or sets the `current color space` value.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textRenderingMode\", {\n /**\n * Gets or sets the `text rendering mode`.\n * @private\n */\n get: function () {\n return this.internalTextRenderingMode;\n },\n set: function (value) {\n this.internalTextRenderingMode = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGraphicsState;\n}());\nexport { PdfGraphicsState };\nvar TransparencyData = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `TransparencyData` class.\n * @private\n */\n function TransparencyData(alphaPen, alphaBrush, blendMode) {\n this.alphaPen = alphaPen;\n this.alphaBrush = alphaBrush;\n this.blendMode = blendMode;\n }\n return TransparencyData;\n}());\n","import { PdfStream } from './../primitives/pdf-stream';\nimport { PdfGraphics, GetResourceEventHandler } from './../graphics/pdf-graphics';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * The `PdfPageLayer` used to create layers in PDF document.\n * @private\n */\nvar PdfPageLayer = /** @class */ (function () {\n function PdfPageLayer(page, streamClipPageTemplates) {\n // private bSaved : boolean;\n /**\n * Local Variable to store the `color space` of the document.\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n /**\n * Local Variable to set `visibility`.\n * @default true\n * @private\n */\n this.isVisible = true;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n this.sublayer = false;\n /**\n * Local variable to store `length` of the graphics.\n * @default 0\n * @private\n */\n this.contentLength = 0;\n /**\n * Instance for `PdfDictionaryProperties` Class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n if (typeof streamClipPageTemplates === 'undefined') {\n this.pdfPage = page;\n this.clipPageTemplates = true;\n this.content = new PdfStream();\n }\n else if (streamClipPageTemplates instanceof PdfStream || streamClipPageTemplates === null) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n if (streamClipPageTemplates == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.pdfPage = page;\n this.content = streamClipPageTemplates;\n }\n else {\n this.constructor(page);\n this.clipPageTemplates = streamClipPageTemplates;\n }\n }\n Object.defineProperty(PdfPageLayer.prototype, \"colorSpace\", {\n // Properties\n /**\n * Get or set the `color space`.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"page\", {\n /**\n * Gets parent `page` of the layer.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layerId\", {\n /**\n * Gets and Sets the `id of the layer`.\n * @private\n */\n get: function () {\n return this.layerid;\n },\n set: function (value) {\n this.layerid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"name\", {\n /**\n * Gets or sets the `name` of the layer.\n * @private\n */\n get: function () {\n return this.layerName;\n },\n set: function (value) {\n this.layerName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"visible\", {\n /**\n * Gets or sets the `visibility` of the layer.\n * @private\n */\n get: function () {\n return this.isVisible;\n },\n set: function (value) {\n this.isVisible = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"graphics\", {\n /**\n * Gets `Graphics` context of the layer, used to draw various graphical content on layer.\n * @private\n */\n get: function () {\n if ((this.pdfGraphics == null)) {\n this.initializeGraphics(this.page);\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layers\", {\n /**\n * Gets the collection of `PdfPageLayer`, this collection handle by the class 'PdfPageLayerCollection'.\n * @private\n */\n get: function () {\n if (this.layer == null) {\n this.layer = new PdfPageLayerCollection(this.page);\n this.layer.sublayer = true;\n return this.layer;\n }\n else {\n return this.layer;\n }\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Adds` a new PDF Page layer.\n * @private\n */\n PdfPageLayer.prototype.add = function () {\n var layer = new PdfPageLayer(this.pdfPage);\n layer.name = '';\n return layer;\n };\n /**\n * Returns a value indicating the `sign` of a single-precision floating-point number.\n * @private\n */\n PdfPageLayer.prototype.sign = function (number) {\n if (number === 0) {\n return 0;\n }\n else if (number > 0) {\n return 1;\n }\n else {\n return -1;\n }\n };\n /**\n * `Initializes Graphics context` of the layer.\n * @private\n */\n PdfPageLayer.prototype.initializeGraphics = function (page) {\n var oPage = page;\n var gr = new GetResourceEventHandler(this.page);\n var cropBox = null;\n this.pdfGraphics = new PdfGraphics(page.size, gr, this.content);\n this.pdfGraphics.mediaBoxUpperRightBound = 0;\n if (oPage != null) {\n var sc = oPage.section.parent;\n if (sc != null) {\n this.pdfGraphics.colorSpace = sc.document.colorSpace;\n this.colorSpace = sc.document.colorSpace;\n }\n }\n // Transform coordinates to the left/top and activate margins.\n var isSame = (this.sign(page.origin.y) === this.sign(page.origin.x));\n // if (page != null) {\n if (page.origin.x >= 0 && page.origin.y >= 0 || !(isSame)) {\n this.pdfGraphics.initializeCoordinates();\n }\n else {\n // this.m_graphics.InitializeCoordinates(page);\n }\n var clipRect = oPage.section.getActualBounds(oPage, true);\n var margins = oPage.section.pageSettings.margins;\n if (this.clipPageTemplates) {\n if (page.origin.x >= 0 && page.origin.y >= 0) {\n this.pdfGraphics.clipTranslateMargins(clipRect);\n }\n }\n else {\n this.graphics.clipTranslateMargins(clipRect.x, clipRect.y, margins.left, margins.top, margins.right, margins.bottom);\n }\n this.pdfGraphics.setLayer(this);\n // this.bSaved = false;\n };\n Object.defineProperty(PdfPageLayer.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfPageLayer;\n}());\nexport { PdfPageLayer };\n","/**\n * PdfCollection.ts class for EJ2-PDF\n * The class used to handle the collection of PdF objects.\n */\nvar PdfCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `Collection` class.\n * @private\n */\n function PdfCollection() {\n //\n }\n Object.defineProperty(PdfCollection.prototype, \"count\", {\n // Properties\n /**\n * Gets the `Count` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCollection.prototype, \"list\", {\n /**\n * Gets the `list` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCollection;\n}());\nexport { PdfCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfPageLayerCollection.ts class for EJ2-PDF\n */\nimport { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfPageLayer } from './pdf-page-layer';\nimport { PdfCollection } from './../general/pdf-collection';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfStream } from './../primitives/pdf-stream';\n/**\n * The class provides methods and properties to handle the collections of `PdfPageLayer`.\n */\nvar PdfPageLayerCollection = /** @class */ (function (_super) {\n __extends(PdfPageLayerCollection, _super);\n function PdfPageLayerCollection(page) {\n var _this = _super.call(this) || this;\n /**\n * Stores the `number of first level layers` in the document.\n * @default 0\n * @private\n */\n _this.parentLayerCount = 0;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n _this.sublayer = false;\n /**\n * Stores the `optional content dictionary`.\n * @private\n */\n _this.optionalContent = new PdfDictionary();\n if (page instanceof PdfPageBase) {\n // if (page == null) {\n // throw new Error('ArgumentNullException:page');\n // }\n _this.page = page;\n var lPage = page;\n // if (lPage != null) {\n _this.parseLayers(lPage);\n // }\n }\n return _this;\n }\n PdfPageLayerCollection.prototype.items = function (index, value) {\n if (typeof index === 'number' && typeof value === 'undefined') {\n var obj = this.list[index];\n return obj;\n }\n else {\n if (value == null) {\n throw new Error('ArgumentNullException: layer');\n }\n if (value.page !== this.page) {\n throw new Error('ArgumentException: The layer belongs to another page');\n }\n // // Add/remove the layer.\n // let layer : PdfPageLayer = this.items(index);\n // if (layer != null) {\n // this.RemoveLayer(layer);\n // }\n // this.List[index] = value;\n // this.InsertLayer(index, value);\n }\n };\n PdfPageLayerCollection.prototype.add = function (firstArgument, secondArgument) {\n if (typeof firstArgument === 'undefined') {\n var layer = new PdfPageLayer(this.page);\n layer.name = '';\n this.add(layer);\n return layer;\n }\n else if (firstArgument instanceof PdfPageLayer) {\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var index = this.list.push(firstArgument);\n // Register layer.\n this.addLayer(index, firstArgument);\n return index;\n }\n else {\n return 0;\n }\n };\n /**\n * Registers `layer` at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.addLayer = function (index, layer) {\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.add(reference);\n };\n // private RemoveLayer(layer : PdfPageLayer) : void {\n // if (layer == null) {\n // throw new Error('ArgumentNullException:layer');\n // }\n // let reference : PdfReferenceHolder = new PdfReferenceHolder(layer);\n // if (this.page != null) {\n // this.page.Contents.Remove(reference);\n // }\n // }\n /**\n * Inserts `PdfPageLayer` into the collection at specified index.\n * @private\n */\n PdfPageLayerCollection.prototype.insert = function (index, layer) {\n // if (index < 0)\n // throw new ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\");\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var list = [];\n var length = this.list.length;\n for (var i = index; i < length; i++) {\n list.push(this.list.pop());\n }\n this.list.push(layer);\n for (var i = 0; i < list.length; i++) {\n this.list.push(list[i]);\n }\n // Register layer.\n this.insertLayer(index, layer);\n };\n /**\n * Registers layer at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.insertLayer = function (index, layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException:layer');\n }\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.insert(index, reference);\n };\n // tslint:disable\n /**\n * `Parses the layers`.\n * @private\n */\n PdfPageLayerCollection.prototype.parseLayers = function (loadedPage) {\n // if (loadedPage == null) {\n // throw new Error('ArgumentNullException:loadedPage');\n // }\n var contents = this.page.contents;\n var resource = this.page.getResources();\n var crossTable = null;\n var ocproperties = null;\n var propertie = null;\n var isLayerAdded = false;\n // if (loadedPage instanceof PdfPage) {\n crossTable = loadedPage.crossTable;\n // } else {\n // crossTable = (loadedPage as PdfLoadedPage).CrossTable;\n // Propertie = PdfCrossTable.Dereference(Resource[DictionaryProperties.Properties]) as PdfDictionary;\n // ocproperties = PdfCrossTable.Dereference((loadedPage as PdfLoadedPage).\n // Document.Catalog[DictionaryProperties.OCProperties]) as PdfDictionary;\n // }\n var saveStream = new PdfStream();\n var restoreStream = new PdfStream();\n var saveState = 'q';\n var newLine = '\\n';\n var restoreState = 'Q';\n // for (let index : number = 0; index < contents.Items.length; index++) {\n // let obj : IPdfPrimitive = contents[index];\n // let stream : PdfStream = crossTable.GetObject(obj) as PdfStream;\n // if (stream == null)\n // throw new PdfDocumentException(\"Invalid contents array.\");\n // // if (stream.Compress)\n // {\n // if (!loadedPage.Imported)\n // stream.Decompress();\n // }\n // byte[] contentId = stream.Data;\n // string str = PdfString.ByteToString(contentId);\n // if (!loadedPage.Imported && (contents.Count == 1) && ((stream.Data[stream.Data.Length - 2] ==\n // RestoreState) || (stream.Data[stream.Data.Length - 1] == RestoreState)))\n // {\n // byte[] content = stream.Data;\n // byte[] data = new byte[content.Length + 4];\n // data[0] = SaveState;\n // data[1] = NewLine;\n // content.CopyTo(data, 2);\n // data[data.Length - 2] = NewLine;\n // data[data.Length - 1] = RestoreState;\n // stream.Data = data;\n // }\n // if (ocproperties != null)\n // {\n // if (Propertie != null)\n // {\n // foreach (KeyValuePair prop in Propertie.Items)\n // {\n // String Key = prop.Key.ToString();\n // PdfReferenceHolder refh = prop.Value as PdfReferenceHolder;\n // PdfDictionary Dict = null;\n // if (refh != null)\n // {\n // Dict = refh.Object as PdfDictionary;\n // }\n // else\n // {\n // Dict = prop.Value as PdfDictionary;\n // }\n // PdfDictionary m_usage = PdfCrossTable.Dereference(Dict[DictionaryProperties.Usage]) as PdfDictionary;\n // if (m_usage != null)\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // PdfDictionary printoption = PdfCrossTable.Dereference(m_usage[DictionaryProperties.Print])\n // as PdfDictionary;\n // if (printoption != null)\n // {\n // layer.m_printOption = printoption;\n // foreach (KeyValuePair value in printoption.Items)\n // {\n // if (value.Key.Value.Equals(DictionaryProperties.PrintState))\n // {\n // string printState = (value.Value as PdfName).Value;\n // if (printState.Equals(DictionaryProperties.OCGON))\n // {\n // layer.PrintState = PdfPrintState.AlwaysPrint;\n // break;\n // }\n // else\n // {\n // layer.PrintState = PdfPrintState.NeverPrint;\n // break;\n // }\n // }\n // }\n // }\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // List.add(layer);\n // isLayerAdded = true;\n // if(!str.Contains(\"EMC\"))\n // break;\n // }\n // }\n // else\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // if(Dict.ContainsKey(DictionaryProperties.Name))\n // {\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // }\n // isLayerAdded = true;\n // break;\n // }\n // }\n // }\n // }\n // }\n // if (!isLayerAdded)\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // }\n // else\n // isLayerAdded = false;\n // }\n var saveData = [];\n saveData.push(saveState);\n saveStream.data = saveData;\n contents.insert(0, new PdfReferenceHolder(saveStream));\n saveData = [];\n saveData.push(restoreState);\n restoreStream.data = saveData;\n contents.insert(contents.count, new PdfReferenceHolder(restoreStream));\n };\n /**\n * Returns `index of` the `PdfPageLayer` in the collection if exists, -1 otherwise.\n * @private\n */\n PdfPageLayerCollection.prototype.indexOf = function (layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException: layer');\n }\n var index = this.list.indexOf(layer);\n return index;\n };\n return PdfPageLayerCollection;\n}(PdfCollection));\nexport { PdfPageLayerCollection };\n","/**\n * PdfTemplate.ts class for EJ2-PDF\n */\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfGraphics } from './../pdf-graphics';\nimport { PdfResources } from './../pdf-resources';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PointF, SizeF, RectangleF } from './../../drawing/pdf-drawing';\nimport { GetResourceEventHandler } from './../pdf-graphics';\n/**\n * Represents `Pdf Template` object.\n * @private\n */\nvar PdfTemplate = /** @class */ (function () {\n function PdfTemplate(arg1, arg2) {\n /**\n * Initialize an instance for `DictionaryProperties` class.\n * @private\n * @hidden\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the transformation 'is performed'.\n * @default true\n * @private\n */\n this.writeTransformation = true;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.content = new PdfStream();\n var tempSize = new SizeF(arg1.width, arg1.height);\n this.setSize(tempSize);\n this.initialize();\n }\n else {\n this.content = new PdfStream();\n this.setSize(new SizeF(arg1, arg2));\n this.initialize();\n }\n }\n Object.defineProperty(PdfTemplate.prototype, \"size\", {\n //Properties\n /**\n * Gets the size of the 'PdfTemplate'.\n */\n get: function () {\n return this.templateSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"width\", {\n /**\n * Gets the width of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"height\", {\n /**\n * Gets the height of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"graphics\", {\n /**\n * Gets the `graphics` of the 'PdfTemplate'.\n */\n get: function () {\n if (this.pdfGraphics == null || typeof this.pdfGraphics === 'undefined') {\n var gr = new GetResourceEventHandler(this);\n var g = new PdfGraphics(this.size, gr, this.content);\n this.pdfGraphics = g;\n // if(this.writeTransformation) {\n // Transform co-ordinates to Top/Left.\n this.pdfGraphics.initializeCoordinates();\n // }\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the resources and modifies the template dictionary.\n * @private\n */\n PdfTemplate.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.content.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n // Public methods\n /**\n * `Initialize` the type and subtype of the template.\n * @private\n */\n PdfTemplate.prototype.initialize = function () {\n this.addType();\n this.addSubType();\n };\n /**\n * `Adds type key`.\n * @private\n */\n PdfTemplate.prototype.addType = function () {\n var value = new PdfName(this.dictionaryProperties.xObject);\n this.content.items.setValue(this.dictionaryProperties.type, value);\n };\n /**\n * `Adds SubType key`.\n * @private\n */\n PdfTemplate.prototype.addSubType = function () {\n var value = new PdfName(this.dictionaryProperties.form);\n this.content.items.setValue(this.dictionaryProperties.subtype, value);\n };\n PdfTemplate.prototype.reset = function (size) {\n if (typeof size === 'undefined') {\n if (this.resources != null) {\n this.resources = null;\n this.content.remove(this.dictionaryProperties.resources);\n }\n if (this.graphics != null) {\n this.graphics.reset(this.size);\n }\n }\n else {\n this.setSize(size);\n this.reset();\n }\n };\n /**\n * `Set the size` of the 'PdfTemplate'.\n * @private\n */\n PdfTemplate.prototype.setSize = function (size) {\n var rect = new RectangleF(new PointF(0, 0), size);\n var val = PdfArray.fromRectangle(rect);\n this.content.items.setValue(this.dictionaryProperties.bBox, val);\n this.templateSize = size;\n };\n Object.defineProperty(PdfTemplate.prototype, \"element\", {\n // /**\n // * Returns the value of current graphics.\n // * @private\n // */\n // public GetGraphics(g : PdfGraphics) : PdfGraphics {\n // if (this.graphics == null || typeof this.graphics === 'undefined') {\n // this.graphics = g;\n // this.graphics.Size = this.Size;\n // this.graphics.StreamWriter = new PdfStreamWriter(this.content)\n // this.graphics.Initialize();\n // if(this.writeTransformation) {\n // this.graphics.InitializeCoordinates();\n // }\n // }\n // return this.graphics;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `content stream` of 'PdfTemplate' class.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplate;\n}());\nexport { PdfTemplate };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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.getGroup(obj);\n if (group == null) {\n group = this.createNewGroup();\n }\n else if (group.length > 0) {\n result = group[0];\n }\n group.push(obj);\n return result;\n };\n // Implementation\n /**\n * `Creates` a new group.\n * @private\n */\n PdfCacheCollection.prototype.createNewGroup = function () {\n var group = [];\n this.referenceObjects.push(group);\n return group;\n };\n /**\n * `Find and Return` a group.\n * @private\n */\n PdfCacheCollection.prototype.getGroup = function (result) {\n var group = null;\n if (result !== null) {\n var len = this.referenceObjects.length;\n for (var i = 0; i < len; i++) {\n if (this.referenceObjects.length > 0) {\n var tGroup = this.referenceObjects[i];\n if (tGroup.length > 0) {\n var representative = tGroup[0];\n if (result.equalsTo(representative)) {\n group = tGroup;\n break;\n }\n }\n else {\n this.removeGroup(tGroup);\n }\n }\n len = this.referenceObjects.length;\n }\n }\n return group;\n };\n /**\n * Remove a group from the storage.\n */\n PdfCacheCollection.prototype.removeGroup = function (group) {\n if (group !== null) {\n var index = this.referenceObjects.indexOf(group);\n this.referenceObjects.slice(index, index + 1);\n }\n };\n PdfCacheCollection.prototype.destroy = function () {\n this.pdfFontCollection = undefined;\n this.referenceObjects = undefined;\n };\n return PdfCacheCollection;\n}());\nexport { PdfCacheCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfWriter } from './../input-output/pdf-writer';\nimport { PdfMainObjectCollection } from './../input-output/pdf-main-object-collection';\nimport { PdfDocumentBase } from './pdf-document-base';\nimport { PdfCrossTable } from './../input-output/pdf-cross-table';\nimport { PdfCatalog } from './pdf-catalog';\nimport { PdfPageSettings } from './../pages/pdf-page-settings';\nimport { PdfSectionCollection } from './../pages/pdf-section-collection';\nimport { PdfDocumentPageCollection } from './../pages/pdf-document-page-collection';\nimport { PdfCacheCollection } from './../general/pdf-cache-collection';\nimport { PdfColorSpace } from './../graphics/enum';\nimport { PdfDocumentTemplate } from './pdf-document-template';\nimport { PdfFontFamily } from './../graphics/fonts/enum';\nimport { PdfStandardFont } from './../graphics/fonts/pdf-standard-font';\n/**\n * Represents a PDF document and can be used to create a new PDF document from the scratch.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfDocument = /** @class */ (function (_super) {\n __extends(PdfDocument, _super);\n function PdfDocument(isMerging) {\n var _this = _super.call(this) || this;\n /**\n * Default `margin` value.\n * @default 40.0\n * @private\n */\n _this.defaultMargin = 40.0;\n /**\n * Internal variable to store instance of `StreamWriter` classes..\n * @default null\n * @private\n */\n _this.streamWriter = null;\n _this = _super.call(this, _this) || this;\n if (isMerging === true || isMerging === false || typeof isMerging !== 'undefined') {\n var objects = new PdfMainObjectCollection();\n _this.setMainObjectCollection(objects);\n var crossTable = new PdfCrossTable();\n crossTable.isMerging = isMerging;\n crossTable.document = _this;\n _this.setCrossTable(crossTable);\n var catalog = new PdfCatalog();\n _this.setCatalog(catalog);\n objects.add(catalog);\n catalog.position = -1;\n _this.sectionCollection = new PdfSectionCollection(_this);\n _this.documentPageCollection = new PdfDocumentPageCollection(_this);\n catalog.pages = _this.sectionCollection;\n }\n else {\n PdfDocument.cacheCollection = new PdfCacheCollection();\n _this.constructor(false);\n }\n return _this;\n }\n Object.defineProperty(PdfDocument, \"defaultFont\", {\n //Properties\n /**\n * Gets the `default font`. It is used for complex objects when font is not explicitly defined.\n * @private\n */\n get: function () {\n if (this.defaultStandardFont == null) {\n this.defaultStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 8);\n }\n return this.defaultStandardFont;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"sections\", {\n /**\n * Gets the collection of the `sections` in the document.\n * @private\n */\n get: function () {\n return this.sectionCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pageSettings\", {\n /**\n * Gets the document's page setting.\n * @public\n */\n get: function () {\n if (this.settings == null) {\n this.settings = new PdfPageSettings(this.defaultMargin);\n }\n return this.settings;\n },\n /**\n * Sets the document's page setting.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n *\n * // sets the right margin of the page\n * document.pageSettings.margins.right = 0;\n * // set the page size.\n * document.pageSettings.size = new SizeF(500, 500);\n * // change the page orientation to landscape\n * document.pageSettings.orientation = PdfPageOrientation.Landscape;\n * // apply 90 degree rotation on the page\n * document.pageSettings.rotate = PdfPageRotateAngle.RotateAngle90;\n *\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set the specified Point\n * let point : PointF = new PointF(page1.getClientSize().width - 200, page1.getClientSize().height - 200);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, point);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this.settings = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pages\", {\n /**\n * Represents the collection of pages in the PDF document.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * //\n * // get the collection of pages in the document\n * let pageCollection : PdfDocumentPageCollection = document.pages;\n * //\n * // add pages\n * let page1 : PdfPage = pageCollection.add();\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.documentPageCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument, \"cache\", {\n /**\n * Gets collection of the `cached objects`.\n * @private\n */\n get: function () {\n if (typeof PdfDocument.cacheCollection === 'undefined' || PdfDocument.cacheCollection == null) {\n return new PdfCacheCollection();\n }\n return PdfDocument.cacheCollection;\n },\n /**\n * Sets collection of the `cached objects`.\n * @private\n */\n set: function (value) {\n this.cacheCollection = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument, \"enableCache\", {\n /**\n * Gets the value of enable cache.\n * @private\n */\n get: function () {\n return this.isCacheEnabled;\n },\n /**\n * Sets thie value of enable cache.\n * @private\n */\n set: function (value) {\n this.isCacheEnabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"colorSpace\", {\n /* tslint:disable */\n /**\n * Gets or sets the `color space` of the document. This property can be used to create PDF document in RGB, Gray scale or CMYK color spaces.\n * @private\n */\n get: function () {\n if ((this.pdfColorSpace === PdfColorSpace.Rgb) || ((this.pdfColorSpace === PdfColorSpace.Cmyk)\n || (this.pdfColorSpace === PdfColorSpace.GrayScale))) {\n return this.pdfColorSpace;\n }\n else {\n return PdfColorSpace.Rgb;\n }\n },\n set: function (value) {\n if ((value === PdfColorSpace.Rgb) || ((value === PdfColorSpace.Cmyk) ||\n (value === PdfColorSpace.GrayScale))) {\n this.pdfColorSpace = value;\n }\n else {\n this.pdfColorSpace = PdfColorSpace.Rgb;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"template\", {\n /* tslint:enable */\n /**\n * Gets or sets a `template` to all pages in the document.\n * @private\n */\n get: function () {\n if (this.pageTemplate == null) {\n this.pageTemplate = new PdfDocumentTemplate();\n }\n return this.pageTemplate;\n },\n set: function (value) {\n this.pageTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfDocument.prototype.docSave = function (stream, arg2, arg3) {\n this.checkPagesPresence();\n if (stream === null) {\n throw new Error('ArgumentNullException : stream');\n }\n this.streamWriter = stream;\n var writer = new PdfWriter(stream);\n writer.document = this;\n if (typeof arg2 === 'boolean' && typeof arg3 === 'undefined') {\n return this.crossTable.save(writer);\n }\n else {\n this.crossTable.save(writer, arg2);\n }\n };\n /**\n * Checks the pages `presence`.\n * @private\n */\n PdfDocument.prototype.checkPagesPresence = function () {\n if (this.pages.count === 0) {\n this.pages.add();\n }\n };\n /**\n * disposes the current instance of `PdfDocument` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfDocument.prototype.destroy = function () {\n this.catalog = undefined;\n this.colorSpace = undefined;\n this.currentSavingObj = undefined;\n this.documentPageCollection = undefined;\n this.isStreamCopied = undefined;\n this.pageSettings = undefined;\n this.pageTemplate = undefined;\n this.pdfColorSpace = undefined;\n this.sectionCollection = undefined;\n PdfDocument.cache.destroy();\n this.crossTable.pdfObjects.destroy();\n PdfDocument.cache = undefined;\n this.streamWriter.destroy();\n };\n /**\n * `Font` used in complex objects to draw strings and text when it is not defined explicitly.\n * @default null\n * @private\n */\n PdfDocument.defaultStandardFont = null;\n /**\n * Indicates whether enable cache or not\n * @default true\n * @private\n */\n PdfDocument.isCacheEnabled = true;\n return PdfDocument;\n}(PdfDocumentBase));\nexport { PdfDocument };\n","/**\n * PdfStandardFontMetricsFactory.ts class for EJ2-PDF\n */\nimport { PdfFontStyle, PdfFontFamily } from './enum';\nimport { PdfFontMetrics, StandardWidthTable } from './pdf-font-metrics';\n/**\n * @private\n * `Factory of the standard fonts metrics`.\n */\nvar PdfStandardFontMetricsFactory = /** @class */ (function () {\n function PdfStandardFontMetricsFactory() {\n }\n /**\n * Returns `metrics` of the font.\n * @private\n */\n PdfStandardFontMetricsFactory.getMetrics = function (fontFamily, fontStyle, size) {\n var metrics = null;\n switch (fontFamily) {\n case PdfFontFamily.Helvetica:\n metrics = this.getHelveticaMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Courier:\n metrics = this.getCourierMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.TimesRoman:\n metrics = this.getTimesMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Symbol:\n metrics = this.getSymbolMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.ZapfDingbats:\n metrics = this.getZapfDingbatsMetrics(fontFamily, fontStyle, size);\n break;\n default:\n metrics = this.getHelveticaMetrics(PdfFontFamily.Helvetica, fontStyle, size);\n break;\n }\n metrics.name = fontFamily.toString();\n metrics.subScriptSizeFactor = this.subSuperScriptFactor;\n metrics.superscriptSizeFactor = this.subSuperScriptFactor;\n return metrics;\n };\n // Implementation\n /**\n * Creates `Helvetica font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getHelveticaMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaBoldItalicAscent;\n metrics.descent = this.helveticaBoldItalicDescent;\n metrics.postScriptName = this.helveticaBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.helveticaBoldAscent;\n metrics.descent = this.helveticaBoldDescent;\n metrics.postScriptName = this.helveticaBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaItalicAscent;\n metrics.descent = this.helveticaItalicDescent;\n metrics.postScriptName = this.helveticaItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.helveticaAscent;\n metrics.descent = this.helveticaDescent;\n metrics.postScriptName = this.helveticaName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Courier font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getCourierMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierBoldItalicAscent;\n metrics.descent = this.courierBoldItalicDescent;\n metrics.postScriptName = this.courierBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.courierBoldAscent;\n metrics.descent = this.courierBoldDescent;\n metrics.postScriptName = this.courierBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierItalicAscent;\n metrics.descent = this.courierItalicDescent;\n metrics.postScriptName = this.courierItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.courierAscent;\n metrics.descent = this.courierDescent;\n metrics.postScriptName = this.courierName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Times font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getTimesMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesBoldItalicAscent;\n metrics.descent = this.timesBoldItalicDescent;\n metrics.postScriptName = this.timesBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldItalicWidths);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.timesBoldAscent;\n metrics.descent = this.timesBoldDescent;\n metrics.postScriptName = this.timesBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesItalicAscent;\n metrics.descent = this.timesItalicDescent;\n metrics.postScriptName = this.timesItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanItalicWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.timesAscent;\n metrics.descent = this.timesDescent;\n metrics.postScriptName = this.timesName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Symbol font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getSymbolMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.symbolAscent;\n metrics.descent = this.symbolDescent;\n metrics.postScriptName = this.symbolName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.symbolWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * Creates `ZapfDingbats font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getZapfDingbatsMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.zapfDingbatsAscent;\n metrics.descent = this.zapfDingbatsDescent;\n metrics.postScriptName = this.zapfDingbatsName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.zapfDingbatsWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * `Multiplier` os subscript superscript.\n * @private\n */\n PdfStandardFontMetricsFactory.subSuperScriptFactor = 1.52;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaName = 'Helvetica';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldName = 'Helvetica-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicName = 'Helvetica-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicName = 'Helvetica-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierName = 'Courier';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldName = 'Courier-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicName = 'Courier-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicName = 'Courier-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesAscent = 898;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesName = 'Times-Roman';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldAscent = 935;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldName = 'Times-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicAscent = 883;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicDescent = -217;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicName = 'Times-Italic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicAscent = 921;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicName = 'Times-BoldItalic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolAscent = 1010;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolDescent = -293;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolName = 'Symbol';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsAscent = 820;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsDescent = -143;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsName = 'ZapfDingbats';\n /**\n * `Arial` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialWidth = [\n 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584,\n 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278,\n 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833,\n 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334,\n 584, 0, 556, 0, 222, 556, 333, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 222, 222, 333, 333, 350, 556, 1000, 333, 1000, 500, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 556, 537, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 584, 611, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Arial bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialBoldWidth = [\n 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584,\n 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333,\n 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889,\n 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389,\n 584, 0, 556, 0, 278, 556, 500, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 278, 278, 500, 500, 350, 556, 1000, 333, 1000, 556, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 611, 556, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278,\n 278, 278, 611, 611, 611, 611, 611, 611, 611, 584, 611, 611, 611, 611, 611, 556,\n 611, 556\n ];\n /**\n * `Fixed` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.fixedWidth = [\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600\n ];\n /**\n * `Times` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanWidth = [\n 250, 333, 408, 500, 500, 833, 778, 180, 333, 333, 500, 564, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278, 564, 564,\n 564, 444, 921, 722, 667, 667, 722, 611, 556, 722, 722, 333, 389, 722, 611, 889,\n 722, 722, 556, 722, 667, 556, 611, 722, 722, 944, 722, 722, 611, 333, 278, 333,\n 469, 500, 333, 444, 500, 444, 500, 444, 333, 500, 500, 278, 278, 500, 278, 778,\n 500, 500, 500, 500, 333, 389, 278, 500, 500, 722, 500, 500, 444, 480, 200, 480,\n 541, 0, 500, 0, 333, 500, 444, 1000, 500, 500, 333, 1000, 556, 333, 889, 0,\n 611, 0, 0, 333, 333, 444, 444, 350, 500, 1000, 333, 980, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 200, 500, 333, 760, 276, 500, 564, 0,\n 760, 333, 400, 564, 300, 300, 333, 500, 453, 250, 333, 300, 310, 500, 750, 750,\n 750, 444, 722, 722, 722, 722, 722, 722, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 722, 722, 722, 722, 722, 722, 564, 722, 722, 722, 722, 722, 722,\n 556, 500, 444, 444, 444, 444, 444, 444, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 564, 500, 500, 500, 500, 500, 500,\n 500, 500\n ];\n /**\n * `Times bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldWidth = [\n 250, 333, 555, 500, 500, 1000, 833, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 930, 722, 667, 722, 722, 667, 611, 778, 778, 389, 500, 778, 667, 944,\n 722, 778, 611, 778, 722, 556, 667, 722, 722, 1000, 722, 722, 667, 333, 278, 333,\n 581, 500, 333, 500, 556, 444, 556, 444, 333, 500, 556, 278, 333, 556, 278, 833,\n 556, 500, 556, 556, 444, 389, 333, 556, 500, 722, 500, 500, 444, 394, 220, 394,\n 520, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 1000, 0,\n 667, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 220, 500, 333, 747, 300, 500, 570, 0,\n 747, 333, 400, 570, 300, 300, 333, 556, 540, 250, 333, 300, 330, 500, 750, 750,\n 750, 500, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 778, 778, 778, 778, 778, 570, 778, 722, 722, 722, 722, 722,\n 611, 556, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Times italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanItalicWidth = [\n 250, 333, 420, 500, 500, 833, 778, 214, 333, 333, 500, 675, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 675, 675,\n 675, 500, 920, 611, 611, 667, 722, 611, 611, 722, 722, 333, 444, 667, 556, 833,\n 667, 722, 611, 722, 611, 500, 556, 722, 611, 833, 611, 556, 556, 389, 278, 389,\n 422, 500, 333, 500, 500, 444, 500, 444, 278, 500, 500, 278, 278, 444, 278, 722,\n 500, 500, 500, 500, 389, 389, 278, 500, 444, 667, 444, 444, 389, 400, 275, 400,\n 541, 0, 500, 0, 333, 500, 556, 889, 500, 500, 333, 1000, 500, 333, 944, 0,\n 556, 0, 0, 333, 333, 556, 556, 350, 500, 889, 333, 980, 389, 333, 667, 0,\n 389, 556, 0, 389, 500, 500, 500, 500, 275, 500, 333, 760, 276, 500, 675, 0,\n 760, 333, 400, 675, 300, 300, 333, 500, 523, 250, 333, 300, 310, 500, 750, 750,\n 750, 500, 611, 611, 611, 611, 611, 611, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 667, 722, 722, 722, 722, 722, 675, 722, 722, 722, 722, 722, 556,\n 611, 500, 500, 500, 500, 500, 500, 500, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 675, 500, 500, 500, 500, 500, 444,\n 500, 444\n ];\n /**\n * `Times bold italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldItalicWidths = [\n 250, 389, 555, 500, 500, 833, 778, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 832, 667, 667, 667, 722, 667, 667, 722, 778, 389, 500, 667, 611, 889,\n 722, 722, 611, 722, 667, 556, 611, 722, 667, 889, 667, 611, 611, 333, 278, 333,\n 570, 500, 333, 500, 500, 444, 500, 444, 333, 500, 556, 278, 278, 500, 278, 778,\n 556, 500, 500, 500, 389, 389, 278, 556, 444, 667, 500, 444, 389, 348, 220, 348,\n 570, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 944, 0,\n 611, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 389, 611, 0, 389, 500, 500, 500, 500, 220, 500, 333, 747, 266, 500, 606, 0,\n 747, 333, 400, 570, 300, 300, 333, 576, 500, 250, 333, 300, 300, 500, 750, 750,\n 750, 500, 667, 667, 667, 667, 667, 667, 944, 667, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 722, 722, 722, 722, 722, 570, 722, 722, 722, 722, 722, 611,\n 611, 500, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 444,\n 500, 444\n ];\n /**\n * `Symbol` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolWidth = [\n 250, 333, 713, 500, 549, 833, 778, 439, 333, 333, 500, 549, 250, 549,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278,\n 549, 549, 549, 444, 549, 722, 667, 722, 612, 611, 763, 603, 722, 333,\n 631, 722, 686, 889, 722, 722, 768, 741, 556, 592, 611, 690, 439, 768,\n 645, 795, 611, 333, 863, 333, 658, 500, 500, 631, 549, 549, 494, 439,\n 521, 411, 603, 329, 603, 549, 549, 576, 521, 549, 549, 521, 549, 603,\n 439, 576, 713, 686, 493, 686, 494, 480, 200, 480, 549, 750, 620, 247,\n 549, 167, 713, 500, 753, 753, 753, 753, 1042, 987, 603, 987, 603, 400,\n 549, 411, 549, 549, 713, 494, 460, 549, 549, 549, 549, 1000, 603, 1000,\n 658, 823, 686, 795, 987, 768, 768, 823, 768, 768, 713, 713, 713, 713,\n 713, 713, 713, 768, 713, 790, 790, 890, 823, 549, 250, 713, 603, 603,\n 1042, 987, 603, 987, 603, 494, 329, 790, 790, 786, 713, 384, 384, 384,\n 384, 384, 384, 494, 494, 494, 494, 329, 274, 686, 686, 686, 384, 384,\n 384, 384, 384, 384, 494, 494, 494, -1\n ];\n /**\n * `Zip dingbats` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsWidth = [\n 278, 974, 961, 974, 980, 719, 789, 790, 791, 690, 960, 939, 549, 855,\n 911, 933, 911, 945, 974, 755, 846, 762, 761, 571, 677, 763, 760, 759,\n 754, 494, 552, 537, 577, 692, 786, 788, 788, 790, 793, 794, 816, 823,\n 789, 841, 823, 833, 816, 831, 923, 744, 723, 749, 790, 792, 695, 776,\n 768, 792, 759, 707, 708, 682, 701, 826, 815, 789, 789, 707, 687, 696,\n 689, 786, 787, 713, 791, 785, 791, 873, 761, 762, 762, 759, 759, 892,\n 892, 788, 784, 438, 138, 277, 415, 392, 392, 668, 668, 390, 390, 317,\n 317, 276, 276, 509, 509, 410, 410, 234, 234, 334, 334, 732, 544, 544,\n 910, 667, 760, 760, 776, 595, 694, 626, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 894, 838, 1016, 458, 748, 924, 748, 918,\n 927, 928, 928, 834, 873, 828, 924, 924, 917, 930, 931, 463, 883, 836,\n 836, 867, 867, 696, 696, 874, 874, 760, 946, 771, 865, 771, 888, 967,\n 888, 831, 873, 927, 970, 918\n ];\n return PdfStandardFontMetricsFactory;\n}());\nexport { PdfStandardFontMetricsFactory };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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';\n/**\n * Base class for `elements lay outing`.\n * @private\n */\nvar ElementLayouter = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `ElementLayouter` class.\n * @private\n */\n function ElementLayouter(element) {\n this.layoutElement = element;\n }\n Object.defineProperty(ElementLayouter.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.layoutElement;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `element`.\n * @private\n */\n ElementLayouter.prototype.getElement = function () {\n return this.layoutElement;\n };\n // Implementation\n /**\n * `Layouts` the element.\n * @private\n */\n ElementLayouter.prototype.layout = function (param) {\n return this.layoutInternal(param);\n };\n ElementLayouter.prototype.Layouter = function (param) {\n return this.layoutInternal(param);\n };\n /**\n * Returns the `next page`.\n * @private\n */\n ElementLayouter.prototype.getNextPage = function (currentPage) {\n var section = currentPage.section;\n var nextPage = section.add();\n return nextPage;\n };\n return ElementLayouter;\n}());\nexport { ElementLayouter };\nvar PdfLayoutFormat = /** @class */ (function () {\n function PdfLayoutFormat(baseFormat) {\n if (typeof baseFormat === 'undefined') {\n //\n }\n else {\n this.break = baseFormat.break;\n this.layout = baseFormat.layout;\n this.paginateBounds = baseFormat.paginateBounds;\n this.boundsSet = baseFormat.usePaginateBounds;\n }\n }\n Object.defineProperty(PdfLayoutFormat.prototype, \"layout\", {\n // Properties\n /**\n * Gets or sets `layout` type of the element.\n * @private\n */\n get: function () {\n // if (typeof this.layoutType === 'undefined' || this.layoutType == null) {\n // this.layoutType = PdfLayoutType.Paginate;\n // }\n return this.layoutType;\n },\n set: function (value) {\n this.layoutType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"break\", {\n /**\n * Gets or sets `break` type of the element.\n * @private\n */\n get: function () {\n // if (typeof this.breakType === 'undefined' || this.boundsSet == null) {\n // this.breakType = PdfLayoutBreakType.FitPage;\n // }\n return this.breakType;\n },\n set: function (value) {\n this.breakType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"paginateBounds\", {\n /**\n * Gets or sets the `bounds` on the next page.\n * @private\n */\n get: function () {\n if (typeof this.layoutPaginateBounds === 'undefined' && this.layoutPaginateBounds == null) {\n this.layoutPaginateBounds = new RectangleF(0, 0, 0, 0);\n }\n return this.layoutPaginateBounds;\n },\n set: function (value) {\n this.layoutPaginateBounds = value;\n this.boundsSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"usePaginateBounds\", {\n /**\n * Gets a value indicating whether [`use paginate bounds`].\n * @private\n */\n get: function () {\n // if (typeof this.boundsSet === 'undefined' || this.boundsSet == null) {\n // this.boundsSet = false;\n // }\n return this.boundsSet;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutFormat;\n}());\nexport { PdfLayoutFormat };\nvar PdfLayoutParams = /** @class */ (function () {\n function PdfLayoutParams() {\n }\n Object.defineProperty(PdfLayoutParams.prototype, \"page\", {\n // Properties\n /**\n * Gets or sets the layout `page` for the element.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n set: function (value) {\n this.pdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"bounds\", {\n /**\n * Gets or sets layout `bounds` for the element.\n * @private\n */\n get: function () {\n return new RectangleF(this.layoutBounds.x, this.layoutBounds.y, this.layoutBounds.width, this.layoutBounds.height);\n },\n set: function (value) {\n this.layoutBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"format\", {\n /**\n * Gets or sets `layout settings` for the element.\n * @private\n */\n get: function () {\n return this.layoutFormat;\n },\n set: function (value) {\n this.layoutFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutParams;\n}());\nexport { PdfLayoutParams };\nvar PdfLayoutResult = /** @class */ (function () {\n // Constructors\n /**\n * Initializes the new instance of `PdfLayoutResult` class.\n * @private\n */\n function PdfLayoutResult(page, bounds) {\n this.pdfPage = page;\n this.layoutBounds = bounds;\n }\n Object.defineProperty(PdfLayoutResult.prototype, \"page\", {\n // Properties\n /**\n * Gets the last `page` where the element was drawn.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutResult.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of the element on the last page where it was drawn.\n * @private\n */\n get: function () {\n return this.layoutBounds;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutResult;\n}());\nexport { PdfLayoutResult };\n","import { RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutParams, PdfLayoutFormat } from './base/element-layouter';\n/**\n * `PdfLayoutElement` class represents the base class for all elements that can be layout on the pages.\n * @private\n */\nvar PdfLayoutElement = /** @class */ (function () {\n function PdfLayoutElement() {\n }\n Object.defineProperty(PdfLayoutElement.prototype, \"raiseBeginPageLayout\", {\n // Property\n /**\n * Gets a value indicating whether the `start page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutElement.prototype, \"raiseEndPageLayout\", {\n /**\n * Gets a value indicating whether the `ending page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n //Event Handlers\n PdfLayoutElement.prototype.onBeginPageLayout = function (args) {\n if (this.beginPageLayout) {\n this.beginPageLayout(this, args);\n }\n };\n PdfLayoutElement.prototype.onEndPageLayout = function (args) {\n if (this.endPageLayout) {\n this.endPageLayout(this, args);\n }\n };\n PdfLayoutElement.prototype.drawHelper = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof 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","/**\n * public Enum for `PdfDestinationMode`.\n * @private\n */\nexport var PdfDestinationMode;\n(function (PdfDestinationMode) {\n /**\n * Specifies the type of `Location`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"Location\"] = 0] = \"Location\";\n /**\n * Specifies the type of `FitToPage`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitToPage\"] = 1] = \"FitToPage\";\n /**\n * Specifies the type of `FitR`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitR\"] = 2] = \"FitR\";\n})(PdfDestinationMode || (PdfDestinationMode = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfTrueTypeFont.ts class for EJ2-PDF\n */\nimport { UnicodeTrueTypeFont } from './unicode-true-type-font';\nimport { PdfFont } from './pdf-font';\nimport { PdfFontStyle } from './enum';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfTextDirection } from './../enum';\nimport { RtlRenderer } from './rtl-renderer';\n//https://www.giftofspeed.com/base64-encoder/\nvar PdfTrueTypeFont = /** @class */ (function (_super) {\n __extends(PdfTrueTypeFont, _super);\n function PdfTrueTypeFont(base64String, size, style) {\n var _this = _super.call(this, size) || this;\n /**\n * Indicates whether the font is embedded or not.\n * @private\n */\n _this.isEmbedFont = false;\n /**\n * Indicates whether the font is unicoded or not.\n * @private\n */\n _this.isUnicode = true;\n if (style !== undefined) {\n _this.createFontInternal(base64String, style);\n }\n else {\n _this.createFontInternal(base64String, PdfFontStyle.Regular);\n }\n return _this;\n }\n PdfTrueTypeFont.prototype.equalsToFont = function (font) {\n var result = false;\n //let result : boolean = this.fontInternal.equalsToFont(font);\n return result;\n };\n PdfTrueTypeFont.prototype.getLineWidth = function (line, format) {\n var width = 0;\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n var returnValue = this.getUnicodeLineWidth(line, /*out*/ width, format);\n width = returnValue.width;\n }\n else {\n width = this.fontInternal.getLineWidth(line);\n }\n var size = this.metrics.getSize(format);\n width *= (PdfFont.charSizeMultiplier * size);\n width = this.applyFormatSettings(line, format, width);\n return width;\n };\n /**\n * Returns width of the char.\n */\n PdfTrueTypeFont.prototype.getCharWidth = function (charCode, format) {\n var codeWidth = this.fontInternal.getCharWidth(charCode);\n var size = this.metrics.getSize(format);\n codeWidth *= (0.001 * size);\n return codeWidth;\n };\n //Implementation\n PdfTrueTypeFont.prototype.createFontInternal = function (base64String, style) {\n this.fontInternal = new UnicodeTrueTypeFont(base64String, this.size);\n this.calculateStyle(style);\n this.initializeInternals();\n };\n PdfTrueTypeFont.prototype.calculateStyle = function (style) {\n var iStyle = this.fontInternal.ttfMetrics.macStyle;\n if ((style & PdfFontStyle.Underline) !== 0) {\n iStyle |= PdfFontStyle.Underline;\n }\n if ((style & PdfFontStyle.Strikeout) !== 0) {\n iStyle |= PdfFontStyle.Strikeout;\n }\n this.setStyle(iStyle);\n };\n PdfTrueTypeFont.prototype.initializeInternals = function () {\n var equalFont = null;\n if (PdfDocument.enableCache) {\n // Search for the similar fonts.\n equalFont = PdfDocument.cache.search(this);\n }\n var internals = null;\n // There is not equal font in the cache.\n if (equalFont !== null && equalFont !== undefined) {\n // Get the settings from the cached font.\n internals = equalFont.getInternals();\n var metrics = equalFont.metrics;\n metrics = metrics.clone();\n metrics.size = this.size;\n this.metrics = metrics;\n this.fontInternal = equalFont.fontInternal;\n }\n else {\n if (equalFont == null) {\n if (this.fontInternal instanceof UnicodeTrueTypeFont) {\n this.fontInternal.isEmbed = this.isEmbedFont;\n }\n this.fontInternal.createInternals();\n internals = this.fontInternal.getInternals();\n this.metrics = this.fontInternal.metrics;\n }\n }\n this.metrics.isUnicodeFont = true;\n this.setInternals(internals);\n //this.ttfReader = (this.fontInternal as UnicodeTrueTypeFont).ttfReader;\n };\n /**\n * Stores used symbols.\n */\n PdfTrueTypeFont.prototype.setSymbols = function (text) {\n var internalFont = this.fontInternal;\n if (internalFont != null) {\n internalFont.setSymbols(text);\n }\n };\n Object.defineProperty(PdfTrueTypeFont.prototype, \"Unicode\", {\n /**\n * Property\n *\n */\n get: function () {\n return this.isUnicode;\n },\n enumerable: true,\n configurable: true\n });\n // public get Font() : UnicodeTrueTypeFont {\n // return this.fontInternal as UnicodeTrueTypeFont;\n // }\n PdfTrueTypeFont.prototype.getUnicodeLineWidth = function (line, /*out*/ width, format) {\n // if (line == null) {\n // throw new Error('ArgumentNullException : line');\n // }\n width = 0;\n var glyphIndices = null;\n var rtlRender = new RtlRenderer();\n /* tslint:disable-next-line:max-line-length */\n var result = rtlRender.getGlyphIndex(line, this, (format.textDirection === PdfTextDirection.RightToLeft) ? true : false, /*out*/ glyphIndices, true);\n var resultGlyph = result.success;\n glyphIndices = result.glyphs;\n if (resultGlyph && glyphIndices !== null) {\n var ttfReader = this.fontInternal.ttfReader;\n for (var i = 0, len = glyphIndices.length; i < len; i++) {\n var glyphIndex = glyphIndices[i];\n var glyph = ttfReader.getGlyph(glyphIndex);\n if (glyph !== null && typeof glyph !== 'undefined') {\n width += glyph.width;\n }\n }\n }\n return { success: resultGlyph, width: width };\n };\n return PdfTrueTypeFont;\n}(PdfFont));\nexport { PdfTrueTypeFont };\n","/**\n * PdfPageTemplateElement.ts class for EJ2-Pdf\n */\nimport { PdfDockStyle, PdfAlignmentStyle, TemplateType } from './enum';\nimport { PointF, SizeF } from './../drawing/pdf-drawing';\nimport { PdfTemplate } from './../graphics/figures/pdf-template';\nimport { PdfPage } from './pdf-page';\nimport { RectangleF } from './../drawing/pdf-drawing';\n/**\n * Describes a `page template` object that can be used as header/footer, watermark or stamp.\n */\nvar PdfPageTemplateElement = /** @class */ (function () {\n /* tslint:disable */\n function PdfPageTemplateElement(arg1, arg2, arg3, arg4, arg5) {\n if (arg1 instanceof RectangleF && typeof arg2 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg1.width, arg1.height);\n }\n else if (arg1 instanceof RectangleF && arg2 instanceof PdfPage && typeof arg3 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg1.width, arg1.height, arg2);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg2.width, arg2.height);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg2.width, arg2.height, arg3);\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.constructor(arg1.width, arg1.height);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.constructor(0, 0, arg1, arg2);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.constructor(0, 0, arg1, arg2, arg3);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n this.x = arg1;\n this.y = arg2;\n this.pdfTemplate = new PdfTemplate(arg3, arg4);\n }\n else {\n this.x = arg1;\n this.y = arg2;\n this.pdfTemplate = new PdfTemplate(arg3, arg4);\n // this.graphics.colorSpace = this.page.document.colorSpace;\n }\n /* tslint:enable */\n }\n Object.defineProperty(PdfPageTemplateElement.prototype, \"dock\", {\n // Properties\n /**\n * Gets or sets the `dock style` of the page template element.\n * @private\n */\n get: function () {\n return this.dockStyle;\n },\n set: function (value) {\n // if (this.dockStyle !== value && this.Type === TemplateType.None) {\n this.dockStyle = value;\n // Reset alignment.\n this.resetAlignment();\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"alignment\", {\n /**\n * Gets or sets `alignment` of the page template element.\n * @private\n */\n get: function () {\n return this.alignmentStyle;\n },\n set: function (value) {\n // if (this.alignmentStyle !== value) {\n this.setAlignment(value);\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"foreground\", {\n /**\n * Indicates whether the page template is located `in front of the page layers or behind of it`.\n * @private\n */\n get: function () {\n return this.isForeground;\n },\n set: function (value) {\n // if (this.foreground !== value) {\n this.isForeground = value;\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"background\", {\n /**\n * Indicates whether the page template is located `behind of the page layers or in front of it`.\n * @private\n */\n get: function () {\n return !this.isForeground;\n },\n set: function (value) {\n this.isForeground = !value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"location\", {\n /**\n * Gets or sets `location` of the page template element.\n * @private\n */\n get: function () {\n return this.currentLocation;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"x\", {\n /**\n * Gets or sets `X` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.x : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.x = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"y\", {\n /**\n * Gets or sets `Y` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.y : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.y = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"size\", {\n /**\n * Gets or sets `size` of the page template element.\n * @private\n */\n get: function () {\n return this.template.size;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.template.reset(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"width\", {\n /**\n * Gets or sets `width` of the page template element.\n * @private\n */\n get: function () {\n return this.template.width;\n },\n set: function (value) {\n if (this.template.width !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.width = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"height\", {\n /**\n * Gets or sets `height` of the page template element.\n * @private\n */\n get: function () {\n return this.template.height;\n },\n set: function (value) {\n if (this.template.height !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.height = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"graphics\", {\n /**\n * Gets `graphics` context of the page template element.\n * @private\n */\n get: function () {\n return this.template.graphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"template\", {\n /**\n * Gets Pdf `template` object.\n * @private\n */\n get: function () {\n // if (typeof this.pdfTemplate === 'undefined' || this.pdfTemplate == null) {\n // this.pdfTemplate = new PdfTemplate(this.size);\n // }\n return this.pdfTemplate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"type\", {\n /**\n * Gets or sets `type` of the usage of this page template.\n * @private\n */\n get: function () {\n return this.templateType;\n },\n set: function (value) {\n this.updateDocking(value);\n this.templateType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"bounds\", {\n /**\n * Gets or sets `bounds` of the page template.\n * @public\n */\n get: function () {\n return new RectangleF(new PointF(this.x, this.y), this.size);\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.location = new PointF(value.x, value.y);\n this.size = new SizeF(value.width, value.height);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Updates Dock` property if template is used as header/footer.\n * @private\n */\n PdfPageTemplateElement.prototype.updateDocking = function (type) {\n if (type !== TemplateType.None) {\n switch (type) {\n case TemplateType.Top:\n this.dock = PdfDockStyle.Top;\n break;\n case TemplateType.Bottom:\n this.dock = PdfDockStyle.Bottom;\n break;\n case TemplateType.Left:\n this.dock = PdfDockStyle.Left;\n break;\n case TemplateType.Right:\n this.dock = PdfDockStyle.Right;\n break;\n }\n this.resetAlignment();\n }\n };\n /**\n * `Resets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.resetAlignment = function () {\n this.alignment = PdfAlignmentStyle.None;\n };\n /**\n * `Sets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.setAlignment = function (alignment) {\n if (this.dock === PdfDockStyle.None) {\n this.alignmentStyle = alignment;\n }\n else {\n // Template is docked and alignment has been changed.\n var canBeSet = false;\n switch (this.dock) {\n case PdfDockStyle.Left:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.MiddleLeft ||\n alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Top:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.TopCenter ||\n alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Right:\n canBeSet = (alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.MiddleRight ||\n alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Bottom:\n canBeSet = (alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.BottomCenter\n || alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Fill:\n canBeSet = (alignment === PdfAlignmentStyle.MiddleCenter || alignment === PdfAlignmentStyle.None);\n break;\n }\n if (canBeSet) {\n this.alignmentStyle = alignment;\n }\n }\n };\n /**\n * Draws the template.\n * @private\n */\n PdfPageTemplateElement.prototype.draw = function (layer, document) {\n var page = layer.page;\n var bounds = this.calculateBounds(page, document);\n if (bounds.x === -0) {\n bounds.x = 0;\n }\n layer.graphics.drawPdfTemplate(this.template, new PointF(bounds.x, bounds.y), new SizeF(bounds.width, bounds.height));\n };\n /**\n * Calculates bounds of the page template.\n * @private\n */\n PdfPageTemplateElement.prototype.calculateBounds = function (page, document) {\n var result = this.bounds;\n if (this.alignmentStyle !== PdfAlignmentStyle.None) {\n result = this.getAlignmentBounds(page, document);\n }\n else if (this.dockStyle !== PdfDockStyle.None) {\n result = this.getDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getAlignmentBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleAlignmentBounds(page, document);\n }\n else {\n result = this.getTemplateAlignmentBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleAlignmentBounds = function (page, document) {\n var bounds = this.bounds;\n var pdfSection = page.section;\n var actualBounds = pdfSection.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n x = 0;\n y = 0;\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = 0;\n break;\n case PdfAlignmentStyle.TopRight:\n x = actualBounds.width - this.width;\n y = 0;\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = 0;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n x = 0;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n x = actualBounds.width - this.width;\n y = actualBounds.height - this.height;\n break;\n }\n bounds.x = x;\n bounds.y = y;\n return bounds;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateAlignmentBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n if (this.type === TemplateType.Left) {\n x = -actualBounds.x;\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = -actualBounds.x;\n y = -actualBounds.y;\n }\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = -actualBounds.y;\n break;\n case PdfAlignmentStyle.TopRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = -actualBounds.y;\n }\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = -actualBounds.x;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n if (this.type === TemplateType.Left) {\n x = -actualBounds.x;\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = -actualBounds.x;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n }\n result.x = x;\n result.y = y;\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getDockBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleDockBounds(page, document);\n }\n else {\n result = this.getTemplateDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = 0;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = 0;\n y = 0;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = 0;\n y = actualBounds.height - this.height;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n /**\n * Calculates template bounds basing on docking if template is a page template.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var actualSize = section.pageSettings.getActualSize();\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = -actualBounds.x;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = -actualBounds.x;\n y = -actualBounds.y;\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y = -actualBounds.y + actualSize.height;\n }\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = -actualBounds.x;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y -= actualSize.height;\n }\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n return PdfPageTemplateElement;\n}());\nexport { PdfPageTemplateElement };\n","/**\n * PdfBorders.ts class for EJ2-PDF\n */\nimport { PdfPen } from './../../../graphics/pdf-pen';\nimport { PdfDashStyle } from './../../../graphics/enum';\nimport { PdfColor } from './../../../graphics/pdf-color';\n/**\n * `PdfBorders` class used represents the cell border of the PDF grid.\n */\nvar PdfBorders = /** @class */ (function () {\n // Constructor\n /**\n * Create a new instance for `PdfBorders` class.\n * @private\n */\n function PdfBorders() {\n var defaultBorderPenLeft = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenLeft.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenRight = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenRight.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenTop = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenTop.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenBottom = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenBottom.dashStyle = PdfDashStyle.Solid;\n this.leftPen = defaultBorderPenLeft;\n this.rightPen = defaultBorderPenRight;\n this.topPen = defaultBorderPenTop;\n this.bottomPen = defaultBorderPenBottom;\n }\n Object.defineProperty(PdfBorders.prototype, \"left\", {\n // Properties\n /**\n * Gets or sets the `Left`.\n * @private\n */\n get: function () {\n return this.leftPen;\n },\n set: function (value) {\n this.leftPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"right\", {\n /**\n * Gets or sets the `Right`.\n * @private\n */\n get: function () {\n return this.rightPen;\n },\n set: function (value) {\n this.rightPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"top\", {\n /**\n * Gets or sets the `Top`.\n * @private\n */\n get: function () {\n return this.topPen;\n },\n set: function (value) {\n this.topPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"bottom\", {\n /**\n * Gets or sets the `Bottom`.\n * @private\n */\n get: function () {\n return this.bottomPen;\n },\n set: function (value) {\n this.bottomPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"all\", {\n /**\n * sets the `All`.\n * @private\n */\n set: function (value) {\n this.leftPen = this.rightPen = this.topPen = this.bottomPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"isAll\", {\n /**\n * Gets a value indicating whether this instance `is all`.\n * @private\n */\n get: function () {\n return ((this.leftPen === this.rightPen) && (this.leftPen === this.topPen) && (this.leftPen === this.bottomPen));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders, \"default\", {\n /**\n * Gets the `default`.\n * @private\n */\n get: function () {\n return new PdfBorders();\n },\n enumerable: true,\n configurable: true\n });\n return PdfBorders;\n}());\nexport { PdfBorders };\nvar PdfPaddings = /** @class */ (function () {\n function PdfPaddings(left, right, top, bottom) {\n 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 Object.defineProperty(PdfGridStyleBase.prototype, \"backgroundImage\", {\n /**\n * Gets or sets the `background Image`.\n * @private\n */\n get: function () {\n return this.gridBackgroundImage;\n },\n set: function (value) {\n this.gridBackgroundImage = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridStyleBase;\n}());\nexport { PdfGridStyleBase };\n/**\n * `PdfGridStyle` class provides customization of the appearance for the 'PdfGrid'.\n */\nvar PdfGridStyle = /** @class */ (function (_super) {\n __extends(PdfGridStyle, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGridStyle` class.\n * @private\n */\n function PdfGridStyle() {\n var _this = _super.call(this) || this;\n _this.gridBorderOverlapStyle = PdfBorderOverlapStyle.Overlap;\n _this.bAllowHorizontalOverflow = false;\n _this.gridHorizontalOverflowType = PdfHorizontalOverflowType.LastPage;\n return _this;\n }\n Object.defineProperty(PdfGridStyle.prototype, \"cellSpacing\", {\n //Properties\n /**\n * Gets or sets the `cell spacing` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n if (typeof this.gridCellSpacing === 'undefined') {\n this.gridCellSpacing = 0;\n }\n return this.gridCellSpacing;\n },\n set: function (value) {\n this.gridCellSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"horizontalOverflowType\", {\n /**\n * Gets or sets the type of the `horizontal overflow` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridHorizontalOverflowType;\n },\n set: function (value) {\n this.gridHorizontalOverflowType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"allowHorizontalOverflow\", {\n /**\n * Gets or sets a value indicating whether to `allow horizontal overflow`.\n * @private\n */\n get: function () {\n return this.bAllowHorizontalOverflow;\n },\n set: function (value) {\n this.bAllowHorizontalOverflow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n return this.gridCellPadding;\n },\n set: function (value) {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n this.gridCellPadding = value;\n }\n else {\n this.gridCellPadding = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"borderOverlapStyle\", {\n /**\n * Gets or sets the `border overlap style` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridBorderOverlapStyle;\n },\n set: function (value) {\n this.gridBorderOverlapStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridStyle;\n}(PdfGridStyleBase));\nexport { PdfGridStyle };\n/**\n * `PdfGridCellStyle` class provides customization of the appearance for the 'PdfGridCell'.\n */\nvar PdfGridCellStyle = /** @class */ (function (_super) {\n __extends(PdfGridCellStyle, _super);\n /**\n * Initializes a new instance of the `PdfGridCellStyle` class.\n * @private\n */\n function PdfGridCellStyle() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridCellBorders = PdfBorders.default;\n return _this;\n }\n Object.defineProperty(PdfGridCellStyle.prototype, \"stringFormat\", {\n //Properties\n /**\n * Gets the `string format` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"borders\", {\n /**\n * Gets or sets the `border` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.gridCellBorders;\n },\n set: function (value) {\n this.gridCellBorders = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n return this.gridCellPadding;\n },\n set: function (value) {\n if (this.gridCellPadding == null || typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n this.gridCellPadding = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridCellStyle;\n}(PdfGridStyleBase));\nexport { PdfGridCellStyle };\n/**\n * `PdfGridRowStyle` class provides customization of the appearance for the `PdfGridRow`.\n */\nvar PdfGridRowStyle = /** @class */ (function () {\n // public setBackgroundImage(value : PdfImage) : void {\n // this.gridRowBackgroundImage = value;\n // if (typeof this.parent !== 'undefined') {\n // for (let i : number = 0; i < this.parent.cells.count; i++) {\n // this.parent.cells.getCell(i).style.backgroundImage = value;\n // }\n // }\n // }\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowStyle` class.\n * @private\n */\n function PdfGridRowStyle() {\n //\n }\n Object.defineProperty(PdfGridRowStyle.prototype, \"backgroundBrush\", {\n // Properties\n /**\n * Gets or sets the `background brush`.\n * @private\n */\n get: function () {\n return this.gridRowBackgroundBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBackgroundBrush = function (value) {\n this.gridRowBackgroundBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.backgroundBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textBrush\", {\n /**\n * Gets or sets the `text brush`.\n * @private\n */\n get: function () {\n return this.gridRowTextBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextBrush = function (value) {\n this.gridRowTextBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textPen\", {\n /**\n * Gets or sets the `text pen`.\n * @private\n */\n get: function () {\n return this.gridRowTextPen;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextPen = function (value) {\n this.gridRowTextPen = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textPen = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"font\", {\n /**\n * Gets or sets the `font`.\n * @private\n */\n get: function () {\n return this.gridRowFont;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setFont = function (value) {\n this.gridRowFont = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.font = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"border\", {\n /**\n * Gets or sets the `border` of the current row.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBorder === 'undefined') {\n this.setBorder(new PdfBorders());\n }\n return this.gridRowBorder;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBorder = function (value) {\n this.gridRowBorder = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.borders = value;\n }\n }\n };\n /**\n * sets the `parent row` of the current object.\n * @private\n */\n PdfGridRowStyle.prototype.setParent = function (parent) {\n this.parent = parent;\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"backgroundImage\", {\n /**\n * Gets or sets the `backgroundImage` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.gridRowBackgroundImage;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridRowStyle;\n}());\nexport { PdfGridRowStyle };\n/**\n * public Enum for `PdfHorizontalOverflowType`.\n * @private\n */\nexport var PdfHorizontalOverflowType;\n(function (PdfHorizontalOverflowType) {\n /**\n * Specifies the type of `NextPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"NextPage\"] = 0] = \"NextPage\";\n /**\n * Specifies the type of `LastPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"LastPage\"] = 1] = \"LastPage\";\n})(PdfHorizontalOverflowType || (PdfHorizontalOverflowType = {}));\n","import { PdfGrid } from './pdf-grid';\nimport { PdfGridCellStyle } from './styles/style';\nimport { PdfStringLayouter } from './../../graphics/fonts/string-layouter';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\nimport { RectangleF, PointF, SizeF } from './../../drawing/pdf-drawing';\nimport { PdfDashStyle, PdfLineCap } from './../../graphics/enum';\nimport { PdfBorderOverlapStyle } from './../tables/light-tables/enum';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfImage } from './../../graphics/images/pdf-image';\nimport { PdfBitmap } from './../../graphics/images/pdf-bitmap';\nimport { PdfTextWebLink } from './../../annotations/pdf-text-web-link';\nimport { PdfLayoutType } from './../../graphics/figures/enum';\nimport { PdfGridLayouter, PdfGridLayoutFormat } from './../../structured-elements/grid/layout/grid-layouter';\nimport { PdfLayoutParams } from '../../../implementation/graphics/figures/base/element-layouter';\n/**\n * `PdfGridCell` class represents the schema of a cell in a 'PdfGrid'.\n */\nvar PdfGridCell = /** @class */ (function () {\n function PdfGridCell(row) {\n /**\n * `Width` of the cell.\n * @default 0\n * @private\n */\n this.cellWidth = 0;\n /**\n * `Height` of the cell.\n * @default 0\n * @private\n */\n this.cellHeight = 0;\n /**\n * `tempval`to stores current width .\n * @default 0\n * @private\n */\n this.tempval = 0;\n this.fontSpilt = false;\n /**\n * Specifies weather the `cell is drawn`.\n * @default true\n * @private\n */\n this.finsh = true;\n /**\n * The `remaining height` of row span.\n * @default 0\n * @private\n */\n this.rowSpanRemainingHeight = 0;\n this.hasRowSpan = false;\n this.hasColSpan = false;\n /**\n * the 'isFinish' is set to page finish\n */\n this.isFinish = true;\n /**\n * The `present' to store the current cell.\n * @default false\n * @private\n */\n this.present = false;\n if (typeof row === 'undefined') {\n this.gridRowSpan = 1;\n this.colSpan = 1;\n }\n else {\n this.constructor();\n this.gridRow = row;\n }\n }\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeContinue\", {\n //Properties\n get: function () {\n return this.internalIsCellMergeContinue;\n },\n set: function (value) {\n this.internalIsCellMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeContinue\", {\n get: function () {\n return this.internalIsRowMergeContinue;\n },\n set: function (value) {\n this.internalIsRowMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeStart\", {\n get: function () {\n return this.internalIsCellMergeStart;\n },\n set: function (value) {\n this.internalIsCellMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeStart\", {\n get: function () {\n return this.internalIsRowMergeStart;\n },\n set: function (value) {\n this.internalIsRowMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"remainingString\", {\n /**\n * Gets or sets the `remaining string` after the row split between pages.\n * @private\n */\n get: function () {\n return this.remaining;\n },\n set: function (value) {\n this.remaining = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"FinishedDrawingCell\", {\n /**\n * Gets or sets the `FinishedDrawingCell` .\n * @private\n */\n get: function () {\n return this.isFinish;\n },\n set: function (value) {\n this.isFinish = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"stringFormat\", {\n /**\n * Gets or sets the `string format`.\n * @private\n */\n get: function () {\n if (this.format == null) {\n this.format = new PdfStringFormat();\n }\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"row\", {\n /**\n * Gets or sets the parent `row`.\n * @private\n */\n get: function () {\n return this.gridRow;\n },\n set: function (value) {\n this.gridRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the cell.\n * @private\n */\n get: function () {\n return this.objectValue;\n },\n set: function (value) {\n this.objectValue = value;\n if (this.objectValue instanceof PdfGrid) {\n this.row.grid.isSingleGrid = false;\n var grid = this.objectValue;\n grid.ParentCell = this;\n this.objectValue.isChildGrid = true;\n var rowCount = this.row.grid.rows.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.row.grid.rows.getRow(i);\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n cell.parent = this;\n }\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"rowSpan\", {\n /**\n * Gets or sets a value that indicates the total number of rows that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.gridRowSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw new Error('ArgumentException : Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.gridRowSpan = value;\n this.row.rowSpanExists = true;\n this.row.grid.hasRowSpanSpan = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"style\", {\n /**\n * Gets or sets the cell `style`.\n * @private\n */\n get: function () {\n if (this.cellStyle == null) {\n this.cellStyle = new PdfGridCellStyle();\n }\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"height\", {\n /**\n * Gets the `height` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellHeight === 0) {\n this.cellHeight = this.measureHeight();\n }\n return this.cellHeight;\n },\n set: function (value) {\n this.cellHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"columnSpan\", {\n /**\n * Gets or sets a value that indicates the total number of columns that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.colSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw Error('Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.colSpan = value;\n this.row.columnSpanExists = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"width\", {\n /**\n * Gets the `width` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellWidth === 0 || this.row.grid.isComplete) {\n this.cellWidth = this.measureWidth();\n }\n return Math.round(this.cellWidth);\n },\n set: function (value) {\n this.cellWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the width`.\n * @private\n */\n PdfGridCell.prototype.measureWidth = function () {\n // .. Calculate the cell text width.\n // .....Add border widths, cell spacings and paddings to the width.\n var width = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string') {\n /* tslint:disable */\n var slr = layouter.layout(this.objectValue, this.getTextFont(), this.stringFormat, new SizeF(Number.MAX_VALUE, Number.MAX_VALUE), false, new SizeF(0, 0));\n width += slr.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n else if (this.objectValue instanceof PdfGrid) {\n width = this.objectValue.size.width;\n //width += this.objectValue.style.cellSpacing;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n width += this.objectValue.width;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n var result = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(0, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n width += result.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n if (this.style.cellPadding != null) {\n width += (this.style.cellPadding.left + this.style.cellPadding.right);\n }\n else {\n width += (this.row.grid.style.cellPadding.left + this.row.grid.style.cellPadding.right);\n }\n width += this.row.grid.style.cellSpacing;\n return width;\n };\n /**\n * Draw the `cell background`.\n * @private\n */\n PdfGridCell.prototype.drawCellBackground = function (graphics, bounds) {\n var backgroundBrush = this.getBackgroundBrush();\n //graphics.isTemplateGraphics = true;\n if (backgroundBrush != null) {\n graphics.save();\n graphics.drawRectangle(backgroundBrush, bounds.x, bounds.y, bounds.width, bounds.height);\n graphics.restore();\n }\n if (this.style.backgroundImage != null) {\n var image = this.getBackgroundImage();\n graphics.drawImage(this.style.backgroundImage, bounds.x, bounds.y, bounds.width, bounds.height);\n }\n };\n /**\n * `Adjusts the text layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustContentLayoutArea = function (bounds) {\n //Add Padding value to its Cell Bounds\n var returnBounds = new RectangleF(bounds.x, bounds.y, bounds.width, bounds.height);\n if (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 // if(this.gridRow.grid.style.cellSpacing == 0){\n returnBounds.width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n //}\n // else {\n // returnBounds.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\n // } \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 /*if (!this.row.grid.isSingleGrid)\n {\n //Check whether the Grid Span to Nextpage\n if ((this.remainingString != null) || (PdfGridLayouter.repeatRowIndex != -1))\n {\n this.DrawParentCells(graphics, bounds, true);\n }\n else if (this.row.grid.rows.count > 1)\n {\n for (let i : number = 0; i < this.row.grid.rows.count; i++)\n {\n if (this.row == this.row.grid.rows.getRow(i))\n {\n if (this.row.grid.rows.getRow(i).rowBreakHeight > 0)\n isrowbreak = true;\n if ((i > 0) && (isrowbreak))\n this.DrawParentCells(graphics, bounds, false);\n }\n }\n }\n } */\n var result = null;\n /*if (cancelSubsequentSpans)\n {\n //..Cancel all subsequent cell spans, if no space exists.\n let currentCellIndex : number = this.row.cells.indexOf(this);\n for (let i : number = currentCellIndex + 1; i <= currentCellIndex + this.colSpan; i++)\n {\n this.row.cells.getCell(i).isCellMergeContinue = false;\n this.row.cells.getCell(i).isRowMergeContinue = false;\n }\n this.colSpan = 1;\n }*/\n //..Skip cells which were already covered by spanmap.\n if (this.internalIsCellMergeContinue || this.internalIsRowMergeContinue) {\n if (this.internalIsCellMergeContinue && this.row.grid.style.allowHorizontalOverflow) {\n if ((this.row.rowOverflowIndex > 0 && (this.row.cells.indexOf(this) != this.row.rowOverflowIndex + 1)) || (this.row.rowOverflowIndex == 0 && this.internalIsCellMergeContinue)) {\n return result;\n }\n }\n else {\n return result;\n }\n }\n //Adjust bounds with Row and Column Spacing\n bounds = this.adjustOuterLayoutArea(bounds, graphics);\n this.drawCellBackground(graphics, bounds);\n var textPen = this.getTextPen();\n var textBrush = this.getTextBrush();\n if (typeof textPen === 'undefined' && typeof textBrush === 'undefined') {\n textBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var font = this.getTextFont();\n var strFormat = this.getStringFormat();\n var innerLayoutArea = bounds;\n if (innerLayoutArea.height >= graphics.clientSize.height) {\n // If to break row to next page.\n if (this.row.grid.allowRowBreakAcrossPages) {\n innerLayoutArea.height -= innerLayoutArea.y;\n //bounds.height -= bounds.y;\n // if(this.row.grid.isChildGrid)\n // {\n // innerLayoutArea.height -= this.row.grid.ParentCell.row.grid.style.cellPadding.bottom;\n // }\n }\n // if user choose to cut the row whose height is more than page height.\n // else\n // {\n // innerLayoutArea.height = graphics.clientSize.height;\n // bounds.height = graphics.clientSize.height;\n // }\n }\n innerLayoutArea = this.adjustContentLayoutArea(innerLayoutArea);\n if (typeof this.objectValue === 'string' || typeof this.remaining === 'string') {\n var temp = void 0;\n var layoutRectangle = void 0;\n if (innerLayoutArea.height < font.height)\n layoutRectangle = new RectangleF(innerLayoutArea.x, innerLayoutArea.y, innerLayoutArea.width, font.height);\n else\n layoutRectangle = innerLayoutArea;\n if (innerLayoutArea.height < font.height && this.row.grid.isChildGrid && this.row.grid.ParentCell != null) {\n var height = layoutRectangle.height - this.row.grid.ParentCell.row.grid.style.cellPadding.bottom - this.row.grid.style.cellPadding.bottom;\n if (this.row.grid.splitChildRowIndex != -1) {\n this.fontSpilt = true;\n this.row.rowFontSplit = true;\n }\n if (height > 0 && height < font.height)\n layoutRectangle.height = height;\n // else if (height + this.row.grid.style.cellPadding.bottom > 0 && height + this.row.grid.style.cellPadding.bottom < font.height)\n // layoutRectangle.height = height + this.row.grid.style.cellPadding.bottom;\n // else if (bounds.height < font.height)\n // layoutRectangle.height = bounds.height;\n // else if (bounds.height - this.row.grid.ParentCell.row.grid.style.cellPadding.bottom < font.height)\n // layoutRectangle.height = bounds.height - this.row.grid.ParentCell.row.grid.style.cellPadding.bottom; \n }\n if (this.gridRow.grid.style.cellSpacing != 0) {\n layoutRectangle.width -= this.gridRow.grid.style.cellSpacing;\n bounds.width -= this.gridRow.grid.style.cellSpacing;\n }\n if (this.isFinish) {\n // if (this.row.grid.splitChildRowIndex != -1 && !this.row.grid.isChildGrid && typeof this.remaining === 'undefined'){\n // this.remaining = '';\n // graphics.drawString(this.remaining, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n // } else {\n temp = this.remaining === '' ? this.remaining : this.objectValue;\n graphics.drawString(temp, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n if (this.row.grid.splitChildRowIndex != -1 && !this.row.grid.isChildGrid && typeof this.remaining === 'undefined') {\n this.remaining = '';\n //graphics.drawString(this.remaining, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n }\n }\n else {\n if (typeof this.remaining == 'undefined' || this.remaining === null) {\n this.remaining = '';\n }\n if (this.row.repeatFlag) {\n graphics.drawString(this.remaining, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n }\n // else {\n // if(this.row.grid.ParentCell.row.repeatFlag) {\n // graphics.drawString((this.remaining as string), font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat); \n // } else {\n // layoutRectangle.height = this.row.height;\n // graphics.drawString((this.objectValue as string), font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n // bounds.height = this.row.height;\n // }\n // }\n this.isFinish = true;\n //graphics.drawString((this.remaining as string), font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n }\n result = graphics.stringLayoutResult;\n // if(this.row.grid.isChildGrid && this.row.rowBreakHeight > 0 && result !=null) {\n // bounds.height -= this.row.grid.ParentCell.row.grid.style.cellPadding.bottom;\n // }\n }\n else if (this.objectValue instanceof PdfGrid) {\n var childGrid = this.objectValue;\n childGrid.isChildGrid = true;\n childGrid.ParentCell = this;\n var layoutRect = void 0;\n layoutRect = innerLayoutArea;\n if (this.gridRow.grid.style.cellSpacing != 0) {\n bounds.width -= this.gridRow.grid.style.cellSpacing;\n }\n if (this.gridRow.grid.style.cellSpacing != 0 || this.objectValue.style.cellSpacing != 0) {\n layoutRect.x -= this.gridRow.grid.style.cellPadding.left + this.cellStyle.borders.left.width;\n layoutRect.y -= this.gridRow.grid.style.cellPadding.top + this.cellStyle.borders.top.width;\n }\n if ((this.objectValue.style.cellPadding != null) && (this.gridRow.grid.style.cellPadding.bottom === 0.5) &&\n (this.gridRow.grid.style.cellPadding.top === 0.5) && (this.row.grid.style.cellPadding.left === 5.76)\n && (this.gridRow.grid.style.cellPadding.right === 5.76)\n && (this.gridRow.grid.style.cellSpacing === 0) && (childGrid.style.cellSpacing === 0)) {\n layoutRect = bounds;\n }\n if ((this.gridRow.grid.style.cellPadding.right != 5.76 || this.gridRow.grid.style.cellPadding.left != 5.76 ||\n this.gridRow.grid.style.cellPadding.bottom != 0.5 || this.gridRow.grid.style.cellPadding.top != 0.5)\n && (childGrid.style.cellPadding.bottom === 0.5) && (childGrid.style.cellPadding.top === 0.5)\n && (childGrid.style.cellPadding.left === 5.76) && (childGrid.style.cellPadding.right === 5.76)\n && (this.gridRow.grid.style.cellSpacing === 0) && (childGrid.style.cellSpacing != 0)) {\n layoutRect.x += this.gridRow.grid.style.cellPadding.left + this.cellStyle.borders.left.width;\n layoutRect.y += this.gridRow.grid.style.cellPadding.top + this.cellStyle.borders.top.width;\n }\n // layoutRect = bounds;\n // if (this.style.cellPadding != null){\n // layoutRect = bounds; \n // } else if((this.row.grid.style.cellPadding != null) && (childGrid.style.cellPadding.bottom === 0.5) && (childGrid.style.cellPadding.top === 0.5)\n // && (childGrid.style.cellPadding.left === 5.76) && (childGrid.style.cellPadding.right === 5.76)\n // && (this.gridRow.grid.style.cellSpacing === 0) && (childGrid.style.cellSpacing === 0)) {\n // layoutRect = innerLayoutArea;\n // }\n // if(this.objectValue.style.cellPadding != null && typeof this.objectValue.style.cellPadding != 'undefined'){\n // layoutRect = bounds;\n // } \n var layouter = new PdfGridLayouter(childGrid);\n var format = new PdfGridLayoutFormat();\n if (this.row.grid.LayoutFormat != null)\n format = this.row.grid.LayoutFormat;\n else\n format.layout = PdfLayoutType.Paginate;\n var param = new PdfLayoutParams();\n if (graphics.layer != null) {\n // Define layout parameters.\n param.page = graphics.page;\n param.bounds = layoutRect;\n param.format = format;\n //Set the span \n childGrid.setSpan();\n childGrid.checkSpan();\n // Draw the child grid.\n var childGridResult = layouter.Layouter(param);\n //let childGridResult : PdfLayoutResult = layouter.innerLayout(param);\n this.value = childGrid;\n if (this.row.grid.splitChildRowIndex !== -1) {\n this.height = this.row.rowBreakHeightValue;\n }\n if (param.page != childGridResult.page) {\n childGridResult.bounds.height = this.row.rowBreakHeightValue;\n if (this.row.rowBreakHeight == 0)\n this.row.NestedGridLayoutResult = childGridResult;\n else\n this.row.rowBreakHeight = this.row.rowBreakHeightValue;\n //bounds.height = this.row.rowBreakHeight;\n //After drawing paginated nested grid, the bounds of the parent grid in start page should be corrected for borders.\n //bounds.height = graphics.clientSize.height - bounds.y;\n }\n }\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n var imageBounds = void 0;\n if (this.objectValue.width <= innerLayoutArea.width) {\n imageBounds = new RectangleF(innerLayoutArea.x, innerLayoutArea.y, this.objectValue.width, innerLayoutArea.height);\n }\n else {\n imageBounds = innerLayoutArea;\n }\n graphics.drawImage(this.objectValue, imageBounds.x, imageBounds.y, imageBounds.width, imageBounds.height);\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n this.objectValue.draw(graphics.currentPage, innerLayoutArea);\n }\n else if (typeof this.objectValue === 'undefined') {\n this.objectValue = \"\";\n graphics.drawString(this.objectValue, font, textPen, textBrush, innerLayoutArea.x, innerLayoutArea.y, innerLayoutArea.width, innerLayoutArea.height, strFormat);\n if (this.style.cellPadding != null && this.style.cellPadding.bottom == 0 && this.style.cellPadding.left == 0 && this.style.cellPadding.right == 0 && this.style.cellPadding.top == 0) {\n bounds.width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n if (this.gridRow.grid.style.cellSpacing != 0) {\n bounds.width -= this.gridRow.grid.style.cellSpacing;\n }\n }\n if (this.style.borders != null) {\n if (!this.fontSpilt)\n this.drawCellBorders(graphics, bounds);\n else {\n if (this.row.grid.ParentCell.row.grid.splitChildRowIndex != -1) {\n this.row.rowFontSplit = false;\n this.drawCellBorders(graphics, bounds);\n }\n }\n }\n return result;\n };\n /* tslint:enable */\n /**\n * Draws the `cell border` constructed by drawing lines.\n * @private\n */\n PdfGridCell.prototype.drawCellBorders = function (graphics, bounds) {\n if (this.row.grid.style.borderOverlapStyle === PdfBorderOverlapStyle.Inside) {\n bounds.x += this.style.borders.left.width;\n bounds.y += this.style.borders.top.width;\n bounds.width -= this.style.borders.right.width;\n bounds.height -= this.style.borders.bottom.width;\n }\n var p1 = new PointF(bounds.x, bounds.y + bounds.height);\n var p2 = new PointF(bounds.x, bounds.y);\n var pen = this.cellStyle.borders.left;\n if (this.cellStyle.borders.left.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n // SetTransparency(ref graphics, pen);\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n pen = this.cellStyle.borders.right;\n if ((bounds.x + bounds.width) > (graphics.clientSize.width - (pen.width / 2))) {\n p1 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y);\n p2 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y + bounds.height);\n }\n if (this.cellStyle.borders.right.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y);\n pen = this.cellStyle.borders.top;\n if (this.cellStyle.borders.top.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n p2 = new PointF(bounds.x, bounds.y + bounds.height);\n pen = this.cellStyle.borders.bottom;\n // if ((bounds.y + bounds.height) > (graphics.clientSize.height - (pen.width / 2))) {\n // p1 = new PointF((bounds.x + bounds.width), (graphics.clientSize.height - (pen.width / 2)));\n // p2 = new PointF(bounds.x, (graphics.clientSize.height - (pen.width / 2)));\n // }\n if (this.cellStyle.borders.bottom.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n };\n // private setTransparency(graphics : PdfGraphics, pen : PdfPen) : void {\n // let alpha : number = (pen.color.a / 255)as number;\n // graphics.save();\n // graphics.setTransparency(alpha);\n // }\n /**\n * `Adjusts the outer layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustOuterLayoutArea = function (bounds, g) {\n var isHeader = false;\n var cellSpacing = this.row.grid.style.cellSpacing;\n if (cellSpacing > 0) {\n bounds = new RectangleF(bounds.x + cellSpacing, bounds.y + cellSpacing, bounds.width - cellSpacing, bounds.height - cellSpacing);\n }\n var currentColIndex = this.row.cells.indexOf(this);\n if (this.columnSpan > 1 || (this.row.rowOverflowIndex > 0 && (currentColIndex == this.row.rowOverflowIndex + 1) && this.isCellMergeContinue)) {\n var span = this.columnSpan;\n if (span == 1 && this.isCellMergeContinue) {\n for (var j = currentColIndex + 1; j < this.row.grid.columns.count; j++) {\n if (this.row.cells.getCell(j).isCellMergeContinue)\n span++;\n else\n break;\n }\n }\n var totalWidth = 0;\n for (var i = currentColIndex; i < currentColIndex + span; i++) {\n if (this.row.grid.style.allowHorizontalOverflow) {\n var width = void 0;\n var compWidth = this.row.grid.size.width < g.clientSize.width ? this.row.grid.size.width : g.clientSize.width;\n if (this.row.grid.size.width > g.clientSize.width) {\n width = bounds.x + totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n else {\n width = totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n if (width > compWidth) {\n break;\n }\n }\n totalWidth += this.row.grid.columns.getColumn(i).width;\n }\n totalWidth -= this.row.grid.style.cellSpacing;\n bounds.width = totalWidth;\n }\n if (this.rowSpan > 1 || this.row.rowSpanExists) {\n var span = this.rowSpan;\n var currentRowIndex = this.row.grid.rows.rowCollection.indexOf(this.row);\n if (currentRowIndex == -1) {\n currentRowIndex = this.row.grid.headers.indexOf(this.row);\n if (currentRowIndex != -1) {\n isHeader = true;\n }\n }\n // if (span == 1 && this.isCellMergeContinue) {\n // for (let j : number = currentRowIndex + 1; j < this.row.grid.rows.count; j++)\n // {\n // let flag : boolean = (isHeader ? this.row.grid.headers.getHeader(j).cells.getCell(currentColIndex).isCellMergeContinue : this.row.grid.rows.getRow(j).cells.getCell(currentColIndex).isCellMergeContinue);\n // if (flag)\n // span++;\n // else\n // break;\n // }\n // }\n var totalHeight = 0;\n var max = 0;\n for (var i = currentRowIndex; i < currentRowIndex + span; i++) {\n totalHeight += (isHeader ? this.row.grid.headers.getHeader(i).height : this.row.grid.rows.getRow(i).height);\n var row = this.row.grid.rows.getRow(i);\n var rowIndex = this.row.grid.rows.rowCollection.indexOf(row);\n /*if (this.rowSpan > 1)\n {\n for (let k : number = 0; k < this.row.cells.count; k++) {\n let cell : PdfGridCell = this.row.cells.getCell(k);\n if(cell.rowSpan>1)\n {\n let tempHeight : number =0;\n \n for (let j :number = i; j < i +cell.rowSpan; j++)\n {\n if (!this.row.grid.rows.getRow(j).isRowSpanRowHeightSet)\n this.row.grid.rows.getRow(j).isRowHeightSet = false;\n tempHeight += this.row.grid.rows.getRow(j).height;\n if (!this.row.grid.rows.getRow(j).isRowSpanRowHeightSet)\n this.row.grid.rows.getRow(j).isRowHeightSet = true;\n }\n //To check the Row spanned cell height is greater than the total spanned row height.\n if(cell.height>tempHeight)\n {\n if (max < (cell.height - tempHeight))\n {\n max = cell.height - tempHeight;\n if (this.rowSpanRemainingHeight != 0 && max > this.rowSpanRemainingHeight)\n {\n max += this.rowSpanRemainingHeight;\n }\n let index :number = row.cells.indexOf(cell);\n //set the m_rowspanRemainingHeight to last rowspanned row.\n this.row.grid.rows.getRow((rowIndex +cell.rowSpan) - 1).cells.getCell(index).rowSpanRemainingHeight = max;\n this.rowSpanRemainingHeight = this.row.grid.rows.getRow((rowIndex + cell.rowSpan) - 1).cells.getCell(index).rowSpanRemainingHeight;\n }\n }\n }\n }\n }\n if (!this.row.grid.rows.getRow(i).isRowSpanRowHeightSet)\n this.row.grid.rows.getRow(i).isRowHeightSet = true;*/\n }\n var cellIndex = this.row.cells.indexOf(this);\n totalHeight -= this.row.grid.style.cellSpacing;\n // if (this.row.cells.getCell(cellIndex).height > totalHeight && (!this.row.grid.rows.getRow((currentRowIndex + span) - 1).isRowHeightSet)) {\n // this.row.grid.rows.getRow((currentRowIndex + span) - 1).cells.getCell(cellIndex).rowSpanRemainingHeight = this.row.cells.getCell(cellIndex).height - totalHeight;\n // totalHeight = this.row.cells.getCell(cellIndex).height;\n // bounds.height = totalHeight;\n // } else {\n bounds.height = totalHeight;\n // }\n if (!this.row.rowMergeComplete) {\n bounds.height = totalHeight;\n }\n }\n return bounds;\n };\n /* tslint:enable */\n /**\n * Gets the `text font`.\n * @private\n */\n PdfGridCell.prototype.getTextFont = function () {\n if (typeof this.style.font !== 'undefined' && this.style.font != null) {\n return this.style.font;\n }\n else if (typeof this.row.style.font !== 'undefined' && this.row.style.font != null) {\n return this.row.style.font;\n }\n else if (typeof this.row.grid.style.font !== 'undefined' && this.row.grid.style.font != null) {\n return this.row.grid.style.font;\n }\n else {\n return PdfDocument.defaultFont;\n }\n };\n /**\n * Gets the `text brush`.\n * @private\n */\n PdfGridCell.prototype.getTextBrush = function () {\n if (typeof this.style.textBrush !== 'undefined' && this.style.textBrush != null) {\n return this.style.textBrush;\n }\n else if (typeof this.row.style.textBrush !== 'undefined' && this.row.style.textBrush != null) {\n return this.row.style.textBrush;\n }\n else {\n return this.row.grid.style.textBrush;\n }\n };\n /**\n * Gets the `text pen`.\n * @private\n */\n PdfGridCell.prototype.getTextPen = function () {\n if (typeof this.style.textPen !== 'undefined' && this.style.textPen != null) {\n return this.style.textPen;\n }\n else if (typeof this.row.style.textPen !== 'undefined' && this.row.style.textPen != null) {\n return this.row.style.textPen;\n }\n else {\n return this.row.grid.style.textPen;\n }\n };\n /**\n * Gets the `background brush`.\n * @private\n */\n PdfGridCell.prototype.getBackgroundBrush = function () {\n if (typeof this.style.backgroundBrush !== 'undefined' && this.style.backgroundBrush != null) {\n return this.style.backgroundBrush;\n }\n else if (typeof this.row.style.backgroundBrush !== 'undefined' && this.row.style.backgroundBrush != null) {\n return this.row.style.backgroundBrush;\n }\n else {\n return this.row.grid.style.backgroundBrush;\n }\n };\n /**\n * Gets the `background image`.\n * @private\n */\n PdfGridCell.prototype.getBackgroundImage = function () {\n if (typeof this.style.backgroundImage !== 'undefined' && this.style.backgroundImage != null) {\n return this.style.backgroundImage;\n }\n else if (typeof this.row.style.backgroundImage !== 'undefined' && this.row.style.backgroundImage != null) {\n return this.row.style.backgroundImage;\n }\n else {\n return this.row.grid.style.backgroundImage;\n }\n };\n /**\n * Gets the current `StringFormat`.\n * @private\n */\n PdfGridCell.prototype.getStringFormat = function () {\n if (typeof this.style.stringFormat !== 'undefined' && this.style.stringFormat != null) {\n return this.style.stringFormat;\n }\n else {\n return this.stringFormat;\n }\n };\n /**\n * Calculates the `height`.\n * @private\n */\n PdfGridCell.prototype.measureHeight = function () {\n // .. Calculate the cell text height.\n // .....Add border widths, cell spacings and paddings to the height.\n var width = this.calculateWidth();\n // //check whether the Current PdfGridCell has padding\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n //width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n else {\n width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n var height = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string' || typeof this.remaining === 'string') {\n var currentValue = this.objectValue;\n /* tslint:disable */\n if (!this.isFinish)\n currentValue = !(this.remaining === null || this.remaining === '' ||\n typeof this.remaining === 'undefined') ? this.remaining : this.objectValue;\n var slr = null;\n var cellIndex = this.row.cells.indexOf(this);\n if (this.gridRow.grid.style.cellSpacing != 0) {\n width -= this.gridRow.grid.style.cellSpacing * 2;\n }\n if (!this.row.cells.getCell(cellIndex).hasColSpan && !this.row.cells.getCell(cellIndex).hasRowSpan) {\n if (this.gridRow.grid.isChildGrid) {\n if (width < 0) {\n this.tempval = width;\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n this.tempval += (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n }\n else {\n this.tempval += (this.style.cellPadding.right + this.style.cellPadding.left);\n this.tempval += (this.style.borders.left.width + this.style.borders.right.width);\n }\n }\n else {\n this.tempval = width;\n }\n slr = layouter.layout(currentValue, this.getTextFont(), this.stringFormat, new SizeF(this.tempval, 0), false, new SizeF(0, 0));\n height += slr.actualSize.height;\n }\n else {\n slr = layouter.layout(currentValue, this.getTextFont(), this.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n height += slr.actualSize.height;\n }\n }\n /* tslint:enable */\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n else if (this.objectValue instanceof PdfGrid) {\n var cellIndex = this.row.cells.indexOf(this);\n this.objectValue.tempWidth = this.calculateWidth();\n if (!this.row.cells.getCell(cellIndex).hasColSpan && !this.row.cells.getCell(cellIndex).hasRowSpan) {\n height = this.objectValue.size.height;\n }\n else {\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n if (this.gridRow.grid.style.cellSpacing !== 0) {\n width -= this.gridRow.grid.style.cellSpacing * 2;\n //height += (this.row.grid.style.cellPadding.top + this.row.grid.style.cellPadding.bottom);\n }\n if (this.gridRow.grid.style.cellPadding.right === 5.76 && this.gridRow.grid.style.cellPadding.left === 5.76 &&\n this.gridRow.grid.style.cellPadding.top === 0.5 && this.gridRow.grid.style.cellPadding.top === 0.5) {\n height -= (this.row.grid.style.cellPadding.top + this.row.grid.style.cellPadding.bottom);\n }\n height += this.objectValue.style.cellSpacing;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n height += this.objectValue.height;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n /* tslint:disable */\n var slr = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n height += slr.actualSize.height;\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n else if (typeof this.objectValue === 'undefined') {\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n }\n else {\n width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n //Add padding top and bottom value to height\n if (this.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 rowindex = this.row.grid.rows.rowCollection.indexOf(this.row);\n var columnSpan = this.columnSpan;\n var width = 0;\n if (columnSpan === 1) {\n for (var i = 0; i < columnSpan; i++) {\n width += this.row.grid.columns.getColumn(cellIndex + i).width;\n }\n }\n else if (columnSpan > 1) {\n for (var i = 0; i < columnSpan; i++) {\n width += this.row.grid.columns.getColumn(cellIndex + i).width;\n if ((i + 1) < columnSpan) {\n this.row.cells.getCell(cellIndex + i + 1).hasColSpan = true;\n }\n }\n }\n if (this.parent != null && this.parent.row.width > 0) {\n if ((this.row.grid.isChildGrid) && this.parent != null && (this.row.width > this.parent.row.width)) {\n width = 0;\n for (var j = 0; j < this.parent.columnSpan; j++) {\n width += this.parent.row.grid.columns.getColumn(j).width;\n }\n width = width / this.row.cells.count;\n }\n }\n return width;\n };\n return PdfGridCell;\n}());\nexport { PdfGridCell };\n/**\n * `PdfGridCellCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridCell' objects.\n * @private\n */\nvar PdfGridCellCollection = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridCellCollection` class with the row.\n * @private\n */\n function PdfGridCellCollection(row) {\n /**\n * @hidden\n * @private\n */\n this.cells = [];\n this.gridRow = row;\n }\n //Properties\n /**\n * Gets the current `cell`.\n * @private\n */\n PdfGridCellCollection.prototype.getCell = function (index) {\n if (index < 0 || index >= this.count) {\n throw new Error('IndexOutOfRangeException');\n }\n return this.cells[index];\n };\n Object.defineProperty(PdfGridCellCollection.prototype, \"count\", {\n /**\n * Gets the cells `count`.[Read-Only].\n * @private\n */\n get: function () {\n return this.cells.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridCellCollection.prototype.add = function (cell) {\n if (typeof cell === 'undefined') {\n var tempcell = new PdfGridCell();\n this.add(tempcell);\n return cell;\n }\n else {\n cell.row = this.gridRow;\n this.cells.push(cell);\n }\n };\n /**\n * Returns the `index of` a particular cell in the collection.\n * @private\n */\n PdfGridCellCollection.prototype.indexOf = function (cell) {\n return this.cells.indexOf(cell);\n };\n return PdfGridCellCollection;\n}());\nexport { PdfGridCellCollection };\n","import { PdfGridCell } from './pdf-grid-cell';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\n/**\n * `PdfGridColumn` class represents the schema of a column in a 'PdfGrid'.\n */\nvar PdfGridColumn = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumn` class with the parent grid.\n * @private\n */\n function PdfGridColumn(grid) {\n /**\n * The `width` of the column.\n * @default 0\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n }\n Object.defineProperty(PdfGridColumn.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the 'PdfGridColumn'.\n * @private\n */\n get: function () {\n return this.columnWidth;\n },\n set: function (value) {\n this.isCustomWidth = true;\n this.columnWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumn.prototype, \"format\", {\n /**\n * Gets or sets the information about the text `formatting`.\n * @private\n */\n get: function () {\n if (this.stringFormat == null) {\n this.stringFormat = new PdfStringFormat(); //GetDefaultFormat();\n }\n return this.stringFormat;\n },\n set: function (value) {\n this.stringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridColumn;\n}());\nexport { PdfGridColumn };\n/**\n * `PdfGridColumnCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridColumn' objects.\n * @private\n */\nvar PdfGridColumnCollection = /** @class */ (function () {\n //properties\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumnCollection` class with the parent grid.\n * @private\n */\n function PdfGridColumnCollection(grid) {\n /**\n * @hidden\n * @private\n */\n this.internalColumns = [];\n /**\n * @hidden\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n this.internalColumns = [];\n }\n //Iplementation\n /**\n * `Add` a new column to the 'PdfGrid'.\n * @private\n */\n PdfGridColumnCollection.prototype.add = function (count) {\n // public add(column : PdfGridColumn) : void\n // public add(arg : number|PdfGridColumn) : void {\n // if (typeof arg === 'number') {\n for (var i = 0; i < count; i++) {\n this.internalColumns.push(new PdfGridColumn(this.grid));\n for (var index = 0; index < this.grid.rows.count; index++) {\n var row = this.grid.rows.getRow(index);\n var cell = new PdfGridCell();\n cell.value = '';\n row.cells.add(cell);\n }\n }\n // } else {\n // let column : PdfGridColumn = new PdfGridColumn(this.grid);\n // this.columns.push(column);\n // return column;\n // }\n };\n Object.defineProperty(PdfGridColumnCollection.prototype, \"count\", {\n /**\n * Gets the `number of columns` in the 'PdfGrid'.[Read-Only].\n * @private\n */\n get: function () {\n return this.internalColumns.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"width\", {\n /**\n * Gets the `widths`.\n * @private\n */\n get: function () {\n if (this.columnWidth === 0) {\n this.columnWidth = this.measureColumnsWidth();\n }\n if (this.grid.initialWidth !== 0 && this.columnWidth !== this.grid.initialWidth && !this.grid.style.allowHorizontalOverflow) {\n this.columnWidth = this.grid.initialWidth;\n this.grid.isPageWidth = true;\n }\n return this.columnWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"columns\", {\n /**\n * Gets the `array of PdfGridColumn`.[Read-Only]\n * @private\n */\n get: function () {\n return this.internalColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `PdfGridColumn` from the specified index.[Read-Only]\n * @private\n */\n PdfGridColumnCollection.prototype.getColumn = function (index) {\n if (index >= 0 && index <= this.columns.length) {\n return this.columns[index];\n }\n else {\n throw Error('can not get the column from the index: ' + index);\n }\n };\n //Implementation\n /**\n * `Calculates the column widths`.\n * @private\n */\n PdfGridColumnCollection.prototype.measureColumnsWidth = function () {\n var totalWidth = 0;\n this.grid.measureColumnsWidth();\n for (var i = 0, count = this.internalColumns.length; i < count; i++) {\n totalWidth += this.internalColumns[i].width;\n }\n return totalWidth;\n };\n /**\n * Gets the `widths of the columns`.\n * @private\n */\n PdfGridColumnCollection.prototype.getDefaultWidths = function (totalWidth) {\n var widths = [];\n var summ = 0.0;\n var subFactor = this.count;\n for (var i = 0; i < this.count; i++) {\n if (this.grid.isPageWidth && totalWidth >= 0 && !this.internalColumns[i].isCustomWidth) {\n this.internalColumns[i].width = 0;\n }\n else {\n widths[i] = this.internalColumns[i].width;\n if (this.internalColumns[i].width > 0 && this.internalColumns[i].isCustomWidth) {\n totalWidth -= this.internalColumns[i].width;\n subFactor--;\n }\n else {\n widths[i] = 0;\n }\n }\n }\n for (var i = 0; i < this.count; i++) {\n var width = totalWidth / subFactor;\n if (widths[i] <= 0) {\n widths[i] = width;\n }\n }\n return widths;\n };\n return PdfGridColumnCollection;\n}());\nexport { PdfGridColumnCollection };\n","import { PdfGridCell, PdfGridCellCollection } from './pdf-grid-cell';\nimport { PdfGridRowStyle } from './styles/style';\n/**\n * `PdfGridRow` class provides customization of the settings for the particular row.\n */\nvar PdfGridRow = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridRow` class with the parent grid.\n * @private\n */\n function PdfGridRow(grid) {\n /**\n * Stores the index of the overflowing row.\n * @private\n */\n this.gridRowOverflowIndex = 0;\n /**\n * The `height` of the row.\n * @private\n */\n this.rowHeight = 0;\n /**\n * The `width` of the row.\n * @private\n */\n this.rowWidth = 0;\n /**\n * The `isFinish` of the row.\n * @private\n */\n this.isrowFinish = false;\n /**\n * Check whether the Row span row height `is set explicitly`.\n * @default false\n * @public\n */\n this.isRowSpanRowHeightSet = false;\n /**\n * The `page count` of the row.\n * @public\n */\n this.noOfPageCount = 0;\n /**\n * Check whether the row height `is set explicitly`.\n * @default false\n * @private\n */\n this.isRowHeightSet = false;\n this.isPageBreakRowSpanApplied = false;\n /**\n * Check weather the row merge `is completed` or not.\n * @default true\n * @private\n */\n this.isRowMergeComplete = true;\n this.repeatFlag = false;\n this.rowFontSplit = false;\n this.pdfGrid = grid;\n }\n Object.defineProperty(PdfGridRow.prototype, \"rowSpanExists\", {\n //Properties\n /**\n * Gets or sets a value indicating [`row span exists`].\n * @private\n */\n get: function () {\n return this.bRowSpanExists;\n },\n set: function (value) {\n this.bRowSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"cells\", {\n /**\n * Gets the `cells` from the selected row.[Read-Only].\n * @private\n */\n get: function () {\n if (this.gridCells == null) {\n this.gridCells = new PdfGridCellCollection(this);\n }\n return this.gridCells;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"grid\", {\n /**\n * Gets or sets the parent `grid`.\n * @private\n */\n get: function () {\n return this.pdfGrid;\n },\n set: function (value) {\n this.pdfGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"style\", {\n /**\n * Gets or sets the row `style`.\n * @private\n */\n get: function () {\n if (typeof this.rowStyle === 'undefined') {\n this.rowStyle = new PdfGridRowStyle();\n this.rowStyle.setParent(this);\n }\n return this.rowStyle;\n },\n set: function (value) {\n this.rowStyle = value;\n for (var i = 0; i < this.cells.count; i++) {\n this.cells.getCell(i).style.borders = value.border;\n if (typeof value.font !== 'undefined') {\n this.cells.getCell(i).style.font = value.font;\n }\n if (typeof value.backgroundBrush !== 'undefined') {\n this.cells.getCell(i).style.backgroundBrush = value.backgroundBrush;\n }\n if (typeof value.backgroundImage !== 'undefined') {\n this.cells.getCell(i).style.backgroundImage = value.backgroundImage;\n }\n if (typeof value.textBrush !== 'undefined') {\n this.cells.getCell(i).style.textBrush = value.textBrush;\n }\n if (typeof value.textPen !== 'undefined') {\n this.cells.getCell(i).style.textPen = value.textPen;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowBreakHeight\", {\n /**\n * `Height` of the row yet to be drawn after split.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBreakHeight === 'undefined') {\n this.gridRowBreakHeight = 0;\n }\n return this.gridRowBreakHeight;\n },\n set: function (value) {\n this.gridRowBreakHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowOverflowIndex\", {\n /**\n * `over flow index` of the row.\n * @private\n */\n get: function () {\n return this.gridRowOverflowIndex;\n },\n set: function (value) {\n this.gridRowOverflowIndex = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the row.\n * @private\n */\n get: function () {\n if (!this.isRowHeightSet) {\n this.rowHeight = this.measureHeight();\n }\n return this.rowHeight;\n },\n set: function (value) {\n this.rowHeight = value;\n this.isRowHeightSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the row.\n * @private\n */\n get: function () {\n if (this.rowWidth === 0 || typeof this.rowWidth === 'undefined') {\n this.rowWidth = this.measureWidth();\n }\n return this.rowWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"NestedGridLayoutResult\", {\n /**\n * Gets or sets the row `Nested grid Layout Result`.\n * @private\n */\n get: function () {\n return this.gridResult;\n },\n set: function (value) {\n this.gridResult = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"columnSpanExists\", {\n /**\n * Gets or sets a value indicating [`column span exists`].\n * @private\n */\n get: function () {\n return this.bColumnSpanExists;\n },\n set: function (value) {\n this.bColumnSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowMergeComplete\", {\n /**\n * Check whether the Row `has row span or row merge continue`.\n * @private\n */\n get: function () {\n return this.isRowMergeComplete;\n },\n set: function (value) {\n this.isRowMergeComplete = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowIndex\", {\n /**\n * Returns `index` of the row.\n * @private\n */\n get: function () {\n return this.grid.rows.rowCollection.indexOf(this);\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the height`.\n * @private\n */\n PdfGridRow.prototype.measureHeight = function () {\n var rowSpanRemainingHeight = 0;\n var rowHeight;\n var maxHeight = 0;\n if (this.cells.getCell(0).rowSpan > 1) {\n rowHeight = 0;\n }\n else {\n rowHeight = this.cells.getCell(0).height;\n }\n for (var i = 0; i < this.cells.count; i++) {\n var cell = this.cells.getCell(i);\n //get the maximum rowspan remaining height.\n if (cell.rowSpanRemainingHeight > rowSpanRemainingHeight) {\n rowSpanRemainingHeight = cell.rowSpanRemainingHeight;\n }\n //skip the cell if row spanned.\n // if (cell.isRowMergeContinue) {\n // continue;\n // }\n // if (!cell.isRowMergeContinue) {\n // this.rowMergeComplete = false;\n // }\n this.rowMergeComplete = false;\n if (cell.rowSpan > 1) {\n var cellIn = i;\n var rowin = this.grid.rows.rowCollection.indexOf(this);\n for (var j = 0; j < cell.rowSpan; j++) {\n if ((j + 1) < cell.rowSpan) {\n this.grid.rows.getRow(rowin + j + 1).cells.getCell(cellIn).hasRowSpan = true;\n }\n }\n if (maxHeight < cell.height) {\n maxHeight = cell.height;\n }\n continue;\n }\n rowHeight = Math.max(rowHeight, cell.height);\n }\n if (maxHeight > rowHeight) {\n rowHeight = maxHeight;\n }\n if (rowHeight === 0) {\n rowHeight = maxHeight;\n }\n else if (rowSpanRemainingHeight > 0) {\n rowHeight += rowSpanRemainingHeight;\n }\n return rowHeight;\n };\n PdfGridRow.prototype.measureWidth = function () {\n var rowWid = 0;\n for (var i = 0; i < this.grid.columns.count; i++) {\n var column = this.grid.columns.getColumn(i);\n rowWid += column.width;\n }\n return rowWid;\n };\n return PdfGridRow;\n}());\nexport { PdfGridRow };\n/**\n * `PdfGridRowCollection` class provides access to an ordered, strongly typed collection of 'PdfGridRow' objects.\n * @private\n */\nvar PdfGridRowCollection = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowCollection` class with the parent grid.\n * @private\n */\n function PdfGridRowCollection(grid) {\n this.rows = [];\n this.grid = grid;\n }\n Object.defineProperty(PdfGridRowCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the number of header in the `PdfGrid`.[Read-Only].\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRowCollection.prototype, \"rowCollection\", {\n //Implementation\n /**\n * Return the row collection of the `grid`.\n * @private\n */\n get: function () {\n return this.rows;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowCollection.prototype.addRow = function (arg) {\n if (typeof arg === 'undefined') {\n var temprow = new PdfGridRow(this.grid);\n this.addRow(temprow);\n return temprow;\n }\n else {\n arg.style.setBackgroundBrush(this.grid.style.backgroundBrush);\n arg.style.setFont(this.grid.style.font);\n arg.style.setTextBrush(this.grid.style.textBrush);\n arg.style.setTextPen(this.grid.style.textPen);\n if (arg.cells.count === 0) {\n for (var i = 0; i < this.grid.columns.count; i++) {\n arg.cells.add(new PdfGridCell());\n }\n }\n this.rows.push(arg);\n }\n };\n /**\n * Return the row by index.\n * @private\n */\n PdfGridRowCollection.prototype.getRow = function (index) {\n return this.rows[index];\n };\n return PdfGridRowCollection;\n}());\nexport { PdfGridRowCollection };\n/**\n * `PdfGridHeaderCollection` class provides customization of the settings for the header.\n * @private\n */\nvar PdfGridHeaderCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfGridHeaderCollection` class with the parent grid.\n * @private\n */\n function PdfGridHeaderCollection(grid) {\n /**\n * The array to store the `rows` of the grid header.\n * @private\n */\n this.rows = [];\n this.grid = grid;\n this.rows = [];\n }\n //Properties\n /**\n * Gets a 'PdfGridRow' object that represents the `header` row in a 'PdfGridHeaderCollection' control.[Read-Only].\n * @private\n */\n PdfGridHeaderCollection.prototype.getHeader = function (index) {\n // if (index < 0 || index >= Count) {\n // throw new IndexOutOfRangeException();\n // }\n return (this.rows[index]);\n };\n Object.defineProperty(PdfGridHeaderCollection.prototype, \"count\", {\n /**\n * Gets the `number of header` in the 'PdfGrid'.[Read-Only]\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridHeaderCollection.prototype.add = function (arg) {\n if (typeof arg === 'number') {\n var row = void 0;\n for (var i = 0; i < arg; i++) {\n row = new PdfGridRow(this.grid);\n for (var j = 0; j < this.grid.columns.count; j++) {\n row.cells.add(new PdfGridCell());\n }\n this.rows.push(row);\n }\n return this.rows;\n }\n else {\n this.rows.push(arg);\n }\n };\n PdfGridHeaderCollection.prototype.indexOf = function (row) {\n return this.rows.indexOf(row);\n };\n return PdfGridHeaderCollection;\n}());\nexport { PdfGridHeaderCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfGrid.ts class for EJ2-PDF\n */\nimport { PdfGridColumnCollection } from './pdf-grid-column';\nimport { PdfGridRowCollection, PdfGridHeaderCollection } from './pdf-grid-row';\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutElement } from './../../graphics/figures/layout-element';\nimport { PdfLayoutFormat } from './../../graphics/figures/base/element-layouter';\nimport { PdfGridStyle } from './styles/style';\nimport { PdfGridLayouter } from './../../structured-elements/grid/layout/grid-layouter';\nimport { PdfTextAlignment } from '../../graphics/enum';\nvar PdfGrid = /** @class */ (function (_super) {\n __extends(PdfGrid, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGrid` class.\n * @private\n */\n function PdfGrid() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridSize = new SizeF(0, 0);\n /**\n * Check the child grid is ' split or not'\n */\n _this.isGridSplit = false;\n /**\n * @hidden\n * @private\n */\n _this.isRearranged = false;\n /**\n * @hidden\n * @private\n */\n _this.pageBounds = new RectangleF();\n /**\n * @hidden\n * @private\n */\n _this.listOfNavigatePages = [];\n /**\n * @hidden\n * @private\n */\n _this.parentCellIndex = 0;\n _this.tempWidth = 0;\n /**\n * @hidden\n * @private\n */\n _this.breakRow = true;\n _this.splitChildRowIndex = -1;\n /**\n * The event raised on `begin cell lay outing`.\n * @event\n * @private\n */\n //public beginPageLayout : Function;\n /**\n * The event raised on `end cell lay outing`.\n * @event\n * @private\n */\n //public endPageLayout : Function;\n _this.hasRowSpanSpan = false;\n _this.hasColumnSpan = false;\n _this.isSingleGrid = true;\n return _this;\n }\n Object.defineProperty(PdfGrid.prototype, \"raiseBeginCellDraw\", {\n //Properties\n /**\n * Gets a value indicating whether the `start cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginCellDraw !== 'undefined' && typeof this.beginCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseEndCellDraw\", {\n /**\n * Gets a value indicating whether the `end cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endCellDraw !== 'undefined' && typeof this.endCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"repeatHeader\", {\n /**\n * Gets or sets a value indicating whether to `repeat header`.\n * @private\n */\n get: function () {\n if (this.bRepeatHeader == null || typeof this.bRepeatHeader === 'undefined') {\n this.bRepeatHeader = false;\n }\n return this.bRepeatHeader;\n },\n set: function (value) {\n this.bRepeatHeader = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"allowRowBreakAcrossPages\", {\n /**\n * Gets or sets a value indicating whether to split or cut rows that `overflow a page`.\n * @private\n */\n get: function () {\n return this.breakRow;\n },\n set: function (value) {\n this.breakRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"columns\", {\n /**\n * Gets the `column` collection of the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridColumns == null || typeof this.gridColumns === 'undefined') {\n this.gridColumns = new PdfGridColumnCollection(this);\n }\n return this.gridColumns;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"rows\", {\n /**\n * Gets the `row` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridRows == null) {\n this.gridRows = new PdfGridRowCollection(this);\n }\n return this.gridRows;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"headers\", {\n /**\n * Gets the `headers` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridHeaders == null || typeof this.gridHeaders === 'undefined') {\n this.gridHeaders = new PdfGridHeaderCollection(this);\n }\n return this.gridHeaders;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"initialWidth\", {\n /**\n * Indicating `initial width` of the page.\n * @private\n */\n get: function () {\n return this.gridInitialWidth;\n },\n set: function (value) {\n this.gridInitialWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"style\", {\n /**\n * Gets or sets the `grid style`.\n * @private\n */\n get: function () {\n if (this.gridStyle == null) {\n this.gridStyle = new PdfGridStyle();\n }\n return this.gridStyle;\n },\n set: function (value) {\n if (this.gridStyle == null) {\n this.gridStyle = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isPageWidth\", {\n /**\n * Gets a value indicating whether the grid column width is considered to be `page width`.\n * @private\n */\n get: function () {\n return this.ispageWidth;\n },\n set: function (value) {\n this.ispageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isChildGrid\", {\n /**\n * Gets or set if grid `is nested grid`.\n * @private\n */\n get: function () {\n return this.ischildGrid;\n },\n set: function (value) {\n this.ischildGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"size\", {\n /**\n * Gets or set if grid ' is split or not'\n * @public\n */\n // public get isGridSplit() : boolean {\n // return this.isgridSplit;\n // }\n // public set isGridSplit(value : boolean) {\n // this.isgridSplit = value;\n // }public get isGridSplit() : boolean {\n // return this.isgridSplit;\n // }\n // public set isGridSplit(value : boolean) {\n // this.isgridSplit = value;\n // }\n /**\n * Gets the `size`.\n * @private\n */\n get: function () {\n if ((this.gridSize.width === 0 || typeof this.gridSize.width === 'undefined') && this.gridSize.height === 0) {\n this.gridSize = this.measure();\n }\n return this.gridSize;\n // } else {\n // return this.gridSize;\n // }\n },\n set: function (value) {\n this.gridSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"ParentCell\", {\n get: function () {\n return this.parentCell;\n },\n set: function (value) {\n this.parentCell = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"LayoutFormat\", {\n get: function () {\n return this.layoutFormat;\n },\n enumerable: true,\n configurable: true\n });\n PdfGrid.prototype.draw = function (arg1, arg2, arg3, arg4) {\n if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2.x, arg2.y);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg1, arg2, arg3, null);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2, null);\n }\n else if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && arg3 instanceof PdfLayoutFormat) {\n return this.drawHelper(arg1, arg2.x, arg2.y, arg3);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && (arg4 instanceof PdfLayoutFormat || arg4 == null)) {\n var width = (arg1.graphics.clientSize.width - arg2);\n var layoutRectangle = new RectangleF(arg2, arg3, width, 0);\n return this.drawHelper(arg1, layoutRectangle, arg4);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'boolean') {\n return this.drawHelper(arg1, arg2, null);\n }\n else {\n return this.drawHelper(arg1, arg2, arg3);\n }\n };\n /**\n * `measures` this instance.\n * @private\n */\n PdfGrid.prototype.measure = function () {\n var height = 0;\n var width = this.columns.width;\n for (var i = 0; i < this.headers.count; i++) {\n var row = this.headers.getHeader(i);\n height += row.height;\n }\n for (var i = 0; i < this.rows.count; i++) {\n var row = this.rows.getRow(i);\n height += row.height;\n }\n return new SizeF(width, height);\n };\n PdfGrid.prototype.onBeginCellDraw = function (args) {\n if (this.raiseBeginCellDraw) {\n this.beginCellDraw(this, args);\n }\n };\n PdfGrid.prototype.onEndCellDraw = function (args) {\n if (this.raiseEndCellDraw) {\n this.endCellDraw(this, args);\n }\n };\n /**\n * `Layouts` the specified graphics.\n * @private\n */\n PdfGrid.prototype.layout = function (param) {\n // if (this.rows.count !== 0) {\n // if (this.rows.getRow(0).cells.getCell(0).style.borders.left.width !== 1) {\n // let x : number = this.rows.getRow(0).cells.getCell(0).style.borders.left.width / 2;\n // let y : number = this.rows.getRow(0).cells.getCell(0).style.borders.top.width / 2;\n // if (param.bounds.x === PdfBorders.default.right.width / 2 && param.bounds.y === PdfBorders.default.right.width / 2) {\n // let newBound : RectangleF = new RectangleF(x, y, this.gridSize.width, this.gridSize.height);\n // param.bounds = newBound;\n // }\n // }\n // }\n this.setSpan();\n this.checkSpan();\n this.layoutFormat = param.format;\n this.gridLocation = param.bounds;\n var layouter = new PdfGridLayouter(this);\n var result = (layouter.Layouter(param));\n return result;\n };\n PdfGrid.prototype.setSpan = function () {\n var colSpan = 1;\n var rowSpan = 1;\n var currentCellIndex = 0;\n var currentRowIndex = 0;\n var maxSpan = 0;\n var rowCount = this.headers.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.headers.getHeader(i);\n maxSpan = 0;\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n maxSpan = Math.max(maxSpan, cell.rowSpan);\n //Skip setting span map for already coverted rows/columns.\n if (!cell.isCellMergeContinue && !cell.isRowMergeContinue && (cell.columnSpan > 1 || cell.rowSpan > 1)) {\n if (cell.columnSpan + j > row.cells.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.rowSpan + i > this.headers.count) {\n throw new Error('Invalid span specified at Header ' + j.toString() + ' column ' + i.toString());\n }\n // if (this.rows.count !== 0 && cell.rowSpan + i > this.rows.count) {\n // throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n // }\n if (cell.columnSpan > 1 && cell.rowSpan > 1) {\n colSpan = cell.columnSpan;\n rowSpan = cell.rowSpan;\n currentCellIndex = j;\n currentRowIndex = i;\n cell.isCellMergeStart = true;\n cell.isRowMergeStart = true;\n //Set Column merges for first row\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n row.cells.getCell(currentCellIndex).isRowMergeContinue = true;\n row.cells.getCell(currentCellIndex).rowSpan = rowSpan;\n colSpan--;\n }\n currentCellIndex = j;\n colSpan = cell.columnSpan;\n //Set Row Merges and column merges foreach subsequent rows.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n rowSpan--;\n while (colSpan > 1) {\n currentCellIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isCellMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n colSpan--;\n }\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n }\n }\n else if (cell.columnSpan > 1 && cell.rowSpan === 1) {\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n cell.isCellMergeStart = true;\n //Set Column merges.\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n colSpan--;\n }\n }\n else if (cell.columnSpan === 1 && cell.rowSpan > 1) {\n rowSpan = cell.rowSpan;\n currentRowIndex = i;\n //Set row Merges.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n rowSpan--;\n }\n }\n }\n }\n row.maximumRowSpan = maxSpan;\n }\n };\n PdfGrid.prototype.checkSpan = function () {\n var cellcolSpan;\n var cellrowSpan = 1;\n var cellmaxSpan = 0;\n var currentCellIndex;\n var currentRowIndex = 0;\n cellcolSpan = cellrowSpan = 1;\n currentCellIndex = currentRowIndex = 0;\n if (this.hasRowSpanSpan || this.hasColumnSpan) {\n var rowCount = this.rows.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.rows.getRow(i);\n cellmaxSpan = 0;\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n cellmaxSpan = Math.max(cellmaxSpan, cell.rowSpan);\n //Skip setting span map for already coverted rows/columns.\n if (!cell.isCellMergeContinue && !cell.isRowMergeContinue\n && (cell.columnSpan > 1 || cell.rowSpan > 1)) {\n if (cell.columnSpan + j > row.cells.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.rowSpan + i > this.rows.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.columnSpan > 1 && cell.rowSpan > 1) {\n cellcolSpan = cell.columnSpan;\n cellrowSpan = cell.rowSpan;\n currentCellIndex = j;\n currentRowIndex = i;\n cell.isCellMergeStart = true;\n cell.isRowMergeStart = true;\n //Set Column merges for first row\n while (cellcolSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n row.cells.getCell(currentCellIndex).isRowMergeContinue = true;\n cellcolSpan--;\n }\n currentCellIndex = j;\n cellcolSpan = cell.columnSpan;\n //Set Row Merges and column merges foreach subsequent rows.\n while (cellrowSpan > 1) {\n currentRowIndex++;\n this.rows.getRow(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n this.rows.getRow(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n cellrowSpan--;\n while (cellcolSpan > 1) {\n currentCellIndex++;\n this.rows.getRow(currentRowIndex).cells.getCell(currentCellIndex).isCellMergeContinue = true;\n this.rows.getRow(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n cellcolSpan--;\n }\n cellcolSpan = cell.columnSpan;\n currentCellIndex = j;\n }\n }\n else if (cell.columnSpan > 1 && cell.rowSpan === 1) {\n cellcolSpan = cell.columnSpan;\n currentCellIndex = j;\n cell.isCellMergeStart = true;\n //Set Column merges.\n while (cellcolSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n cellcolSpan--;\n }\n }\n else if (cell.columnSpan === 1 && cell.rowSpan > 1) {\n cellrowSpan = cell.rowSpan;\n currentRowIndex = i;\n //Set row Merges.\n while (cellrowSpan > 1) {\n currentRowIndex++;\n this.rows.getRow(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n cellrowSpan--;\n }\n }\n }\n }\n row.maximumRowSpan = cellmaxSpan;\n }\n }\n };\n PdfGrid.prototype.measureColumnsWidth = function (bounds) {\n if (typeof bounds !== 'undefined') {\n this.isPageWidth = false;\n var widths = this.columns.getDefaultWidths(bounds.width - bounds.x);\n //let tempWidth : number = this.columns.getColumn(0).width;\n for (var i = 0, count = this.columns.count; i < count; i++) {\n // if (this.columns.getColumn(i).width < 0)\n // this.columns.getColumn(i).columnWidth = widths[i];\n // else if (this.columns.getColumn(i).width > 0 && !this.columns.getColumn(i).isCustomWidth && widths[i]>0 && this.isComplete)\n this.columns.getColumn(i).columnWidth = widths[i];\n this.tempWidth = widths[i];\n }\n if (this.ParentCell != null && this.style.allowHorizontalOverflow == false && this.ParentCell.row.grid.style.allowHorizontalOverflow == false) {\n var padding = 0;\n var columnWidth = 0;\n var columnCount = this.columns.count;\n var childGridColumnWidth = 0;\n if ((this.ParentCell.row.grid.style.cellPadding != null)) {\n padding += (this.ParentCell.row.grid.style.cellPadding.top + this.ParentCell.row.grid.style.cellPadding.bottom);\n }\n for (var i = 0; i < this.ParentCell.columnSpan; i++) {\n columnWidth += this.ParentCell.row.grid.columns.getColumn(this.parentCellIndex + i).width;\n }\n for (var j = 0; j < this.columns.count; j++) {\n if (this.gridColumns.getColumn(j).width > 0 && this.gridColumns.getColumn(j).isCustomWidth) {\n columnWidth -= this.gridColumns.getColumn(j).width;\n columnCount--;\n }\n }\n // if((this.ParentCell.row.grid.style.cellPadding != null))\n // {\n // padding += (this.ParentCell.style.cellPadding.top + this.ParentCell.style.cellPadding.bottom);\n // }\n if (this.ParentCell.row.grid.style.cellSpacing != 0) {\n columnWidth -= this.ParentCell.row.grid.style.cellSpacing * 2;\n }\n if (columnWidth > padding) {\n if (padding != 1) {\n childGridColumnWidth = (columnWidth - padding) / columnCount;\n }\n else {\n childGridColumnWidth = (columnWidth) / columnCount;\n }\n this.tempWidth = childGridColumnWidth;\n if (this.ParentCell != null && this.ParentCell.stringFormat.alignment != PdfTextAlignment.Right) {\n for (var j = 0; j < this.columns.count; j++) {\n if (!this.columns.getColumn(j).isCustomWidth)\n this.columns.getColumn(j).columnWidth = childGridColumnWidth;\n }\n }\n }\n }\n // if (this.ParentCell != null && this.ParentCell.row.width > 0)\n // {\n // if (this.isChildGrid && this.gridSize.width > this.ParentCell.row.width)\n // {\n // widths = this.columns.getDefaultWidths(bounds.width);\n // for (let i : number = 0; i < this.columns.count; i++)\n // {\n // this.columns.getColumn(i).width = widths[i];\n // }\n // }\n // } \n }\n else {\n var widths = [this.columns.count];\n for (var n = 0; n < this.columns.count; n++) {\n widths[n] = 0;\n }\n var cellWidth = 0;\n var cellWidths = 0;\n if ((typeof this.isChildGrid === 'undefined' && typeof this.gridLocation !== 'undefined') || (this.isChildGrid === null && typeof this.gridLocation !== 'undefined')) {\n this.initialWidth = this.gridLocation.width;\n }\n if (this.headers.count > 0) {\n var colCount_1 = this.headers.getHeader(0).cells.count;\n var rowCount = this.headers.count;\n for (var i = 0; i < colCount_1; i++) {\n cellWidth = 0;\n for (var j = 0; j < rowCount; j++) {\n var rowWidth = Math.min(this.initialWidth, this.headers.getHeader(j).cells.getCell(i).width);\n cellWidth = Math.max(cellWidth, rowWidth);\n }\n widths[i] = cellWidth;\n }\n }\n // else {\n // let colCount : number = this.rows.getRow(0).cells.count;\n // let rowCount : number = this.rows.count;\n // for (let i : number = 0; i < colCount; i++) {\n // cellWidth = 0;\n // for (let j : number = 0; j < rowCount; j++) {\n // let rowWidth : number = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n // cellWidth = Math.max(cellWidth, rowWidth);\n // }\n // widths[i] = cellWidth;\n // }\n // }\n cellWidth = 0;\n for (var i = 0, colCount_2 = this.columns.count; i < colCount_2; i++) {\n for (var j = 0, rowCount = this.rows.count; j < rowCount; j++) {\n if ((this.rows.getRow(j).cells.getCell(i).columnSpan == 1 && !this.rows.getRow(j).cells.getCell(i).isCellMergeContinue) || this.rows.getRow(j).cells.getCell(i).value != null) {\n if (this.rows.getRow(j).cells.getCell(i).value != null && !this.rows.getRow(j).grid.style.allowHorizontalOverflow) {\n var value = this.rows.getRow(j).grid.style.cellPadding.right +\n this.rows.getRow(j).grid.style.cellPadding.left\n + this.rows.getRow(j).cells.getCell(i).style.borders.left.width / 2;\n // if (this.initialWidth != 0 )\n // (this.rows.getRow(j).cells.getCell(i).value as PdfGrid).initialWidth = this.initialWidth - value;\n }\n var rowWidth = 0;\n rowWidth = this.initialWidth > 0.0 ? Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width) : this.rows.getRow(j).cells.getCell(i).width;\n // let internalWidth : number = this.rows.getRow(j).cells.getCell(i).width;\n // internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.left.width;\n // internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.right.width;\n // let internalHeight : number = this.rows.getRow(j).cells.getCell(i).height;\n // internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.top.width);\n // internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.bottom.width);\n // let isCorrectWidth : boolean = (internalWidth + this.gridLocation.x) > this.currentGraphics.clientSize.width;\n // let isCorrectHeight : boolean = (internalHeight + this.gridLocation.y) > this.currentGraphics.clientSize.height;\n // if (isCorrectWidth || isCorrectHeight) {\n // throw Error('Image size exceeds client size of the page. Can not insert this image');\n // }\n // rowWidth = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n cellWidth = Math.max(widths[i], Math.max(cellWidth, rowWidth));\n cellWidth = Math.max(this.columns.getColumn(i).width, cellWidth);\n }\n }\n if (this.rows.count != 0)\n widths[i] = cellWidth;\n cellWidth = 0;\n }\n for (var i = 0, RowCount = this.rows.count; i < RowCount; i++) {\n for (var j = 0, ColCount = this.columns.count; j < ColCount; j++) {\n if (this.rows.getRow(i).cells.getCell(j).columnSpan > 1) {\n var total = widths[j];\n for (var k = 1; k < this.rows.getRow(i).cells.getCell(j).columnSpan; k++) {\n total += widths[j + k];\n }\n // if (this.rows.getRow(i).cells.getCell(j).width > total)\n // {\n // let extendedWidth : number = this.rows.getRow(i).cells.getCell(j).width - total;\n // extendedWidth = extendedWidth / this.rows.getRow(i).cells.getCell(j).columnSpan;\n // for (let k : number = j; k < j + this.rows.getRow(i).cells.getCell(j).columnSpan; k++)\n // widths[k] += extendedWidth;\n // }\n }\n }\n }\n // if (this.isChildGrid && this.initialWidth != 0)\n // {\n // widths = this.columns.getDefaultWidths(this.initialWidth);\n // }\n for (var i = 0, count = this.columns.count; i < count; i++) {\n if (this.columns.getColumn(i).width <= 0)\n this.columns.getColumn(i).columnWidth = widths[i];\n else if (this.columns.getColumn(i).width > 0 && !this.columns.getColumn(i).isCustomWidth)\n this.columns.getColumn(i).columnWidth = widths[i];\n }\n var padding = 0;\n var colWidth = 0;\n var colCount = this.columns.count;\n var childGridColWidth = 0;\n colWidth = this.tempWidth;\n for (var j = 0; j < this.columns.count; j++) {\n if (this.gridColumns.getColumn(j).width > 0 && this.gridColumns.getColumn(j).isCustomWidth) {\n colWidth -= this.gridColumns.getColumn(j).width;\n colCount--;\n }\n }\n if (this.style.cellPadding != null) {\n padding += (this.style.cellPadding.top + this.style.cellPadding.bottom);\n }\n // else if((this.gridStyle.cellPadding != null))\n // {\n // padding += (this.gridStyle.cellPadding.top + this.gridStyle.cellPadding.bottom);\n // }\n // if (this.style.cellSpacing != 0){\n // colWidth -= this.style.cellSpacing * 2;\n // }\n if (colWidth > 0) {\n if ((this.ParentCell.row.grid.style.cellPadding != null)) {\n padding += (this.ParentCell.row.grid.style.cellPadding.top + this.ParentCell.row.grid.style.cellPadding.bottom);\n }\n if (this.ParentCell.row.grid.style.cellSpacing != 0) {\n colWidth -= this.ParentCell.row.grid.style.cellSpacing * 2;\n }\n }\n if (colWidth > padding) {\n if (padding != 1) {\n childGridColWidth = (colWidth - padding) / colCount;\n }\n else {\n childGridColWidth = (colWidth) / colCount;\n }\n if (this.ParentCell != null && this.ParentCell.stringFormat.alignment != PdfTextAlignment.Right) {\n for (var j = 0; j < this.columns.count; j++) {\n if (!this.columns.getColumn(j).isCustomWidth)\n this.columns.getColumn(j).columnWidth = childGridColWidth;\n }\n }\n }\n }\n };\n return PdfGrid;\n}(PdfLayoutElement));\nexport { PdfGrid };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfGrid } from '../pdf-grid';\nimport { PdfStringFormat } from './../../../graphics/fonts/pdf-string-format';\nimport { SizeF, RectangleF, PointF } from './../../../drawing/pdf-drawing';\nimport { PdfBorders } from '../styles/pdf-borders';\nimport { PdfLayoutType, PdfLayoutBreakType } from './../../../graphics/figures/enum';\nimport { PdfLayoutResult, PdfLayoutFormat, ElementLayouter } from './../../../graphics/figures/base/element-layouter';\nimport { PdfHorizontalOverflowType } from '../styles/style';\nimport { TemporaryDictionary } from './../../../collections/object-object-pair/dictionary';\n/**\n * Class `lay outing the text`.\n *\n */\nvar PdfGridLayouter = /** @class */ (function (_super) {\n __extends(PdfGridLayouter, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGrid` class.\n * @private\n */\n function PdfGridLayouter(baseFormat) {\n var _this = _super.call(this, baseFormat) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridInitialWidth = 0;\n /**\n * @hidden\n * @private\n */\n _this.gridSize = new SizeF(0, 0);\n _this.parentCellIndex = 0;\n _this.tempWidth = 0;\n _this.childheight = 0;\n /**\n * Check weather it is `child grid or not`.\n * @private\n */\n _this.isChildGrid = false;\n /**\n * @hidden\n * @private\n */\n _this.hasRowSpanSpan = false;\n /**\n * @hidden\n * @private\n */\n _this.isRearranged = false;\n /**\n * @hidden\n * @private\n */\n _this.pageBounds = new RectangleF();\n /**\n * @hidden\n * @private\n */\n _this.listOfNavigatePages = [];\n /**\n * @hidden\n * @private\n */\n _this.flag = true;\n /**\n * @hidden\n * @private\n */\n _this.columnRanges = [];\n /**\n * @hidden\n * @private\n */\n _this.currentLocation = new PointF(0, 0);\n /**\n * @hidden\n * @private\n */\n _this.breakRow = true;\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n _this.isOverloadWithPosition = false;\n return _this;\n }\n Object.defineProperty(PdfGridLayouter.prototype, \"Grid\", {\n //Properties\n get: function () {\n return this.elements;\n },\n enumerable: true,\n configurable: true\n });\n // Constructors\n /**\n * Initializes a new instance of the `StringLayouter` class.\n * @private\n */\n //Public methods\n /**\n * `Layouts` the text.\n * @private\n */\n /**\n * `Layouts` the specified graphics.\n * @private\n */\n /**\n * `Layouts` the specified graphics.\n * @private\n */\n /*public layout(graphics : PdfLayoutParams) : PdfLayoutResult\n public layout(graphics : PdfGraphics, bounds : RectangleF) : void\n public layout(graphics : PdfGraphics, bounds : PointF) : void\n public layout(graphics ?: PdfGraphics | PdfLayoutParams, bounds ?: PointF | RectangleF) : void | PdfLayoutResult {\n if (graphics instanceof PdfGraphics) {\n if (bounds instanceof PointF) {\n if (bounds.x === 0) {\n bounds.x = PdfBorders.default.right.width / 2;\n }\n if (bounds.y === 0) {\n bounds.y = PdfBorders.default.top.width / 2;\n }\n let boundaries : RectangleF = new RectangleF(bounds, new SizeF(0, 0));\n this.layout(graphics, boundaries);\n } else {\n let width : number = graphics.clientSize.width;\n let parameter : PdfLayoutParams = new PdfLayoutParams();\n parameter.bounds = bounds;\n this.currentGraphics = graphics;\n if (graphics.layer != null) {\n let index : number = 0;\n if (this.currentGraphics.page instanceof PdfPage) {\n index = (this.currentGraphics.page as PdfPage).section.indexOf(this.currentGraphics.page as PdfPage);\n } else {\n index = (this.currentGraphics.page as PdfPageBase).defaultLayerIndex;\n }\n } else {\n this.layoutInternal(parameter);\n }\n }\n }\n }*/\n /**\n * Gets the `format`.\n * @private\n */\n PdfGridLayouter.prototype.getFormat = function (format) {\n var f = format;\n return f;\n };\n /**\n * `Layouts` the element.\n * @private\n */\n PdfGridLayouter.prototype.layoutInternal = function (param) {\n var format = this.getFormat(param.format);\n this.gridLayoutFormat = this.getFormat(param.format);\n this.currentPage = param.page;\n if (this.currentPage !== null) {\n var pageHeight = this.currentPage.getClientSize().height;\n var pageWidth = this.currentPage.getClientSize().width;\n //if (pageHeight > pageWidth) {\n this.currentPageBounds = this.currentPage.getClientSize();\n //}\n }\n else {\n throw Error('Can not set page as null');\n //this.currentPageBounds = this.currentGraphics.clientSize;\n }\n this.currentGraphics = this.currentPage.graphics;\n //this.currentGraphics = (this.currentPage != null ) ? this.currentPage.graphics : this.currentGraphics;\n // if (this.currentGraphics.layer !== null) {\n // let index : number = 0;\n // if (this.currentGraphics.page instanceof PdfPage) {\n // index = (this.currentGraphics.page as PdfPage).section.indexOf(this.currentGraphics.page as PdfPage);\n // } else {\n // index = (this.currentGraphics.page as PdfPageBase).defaultLayerIndex;\n // }\n // this.listOfNavigatePages.push(index);\n // }\n var index = 0;\n index = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n this.listOfNavigatePages.push(index);\n if (format != null && format.break === PdfLayoutBreakType.FitColumnsToPage) {\n this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), new SizeF(this.Grid.columns.width, this.currentGraphics.clientSize.height));\n }\n else {\n this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), this.currentGraphics.clientSize);\n }\n //this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), this.currentGraphics.clientSize);\n if (this.Grid.rows.count !== 0) {\n this.currentBounds.width = (param.bounds.width > 0) ? param.bounds.width :\n (this.currentBounds.width - this.Grid.rows.getRow(0).cells.getCell(0).style.borders.left.width / 2);\n }\n else if (this.Grid.headers.count !== 0) {\n // this.currentBounds.width = (param.bounds.width > 0) ? param.bounds.width : (this.currentBounds.width -\n // this.Grid.headers.getHeader(0).cells.getCell(0).style.borders.left.width / 2);\n this.currentBounds.width = param.bounds.width;\n }\n else {\n throw Error('Please add row or header into grid');\n }\n this.startLocation = new PointF(param.bounds.x, param.bounds.y);\n // if (this.Grid.style.allowHorizontalOverflow && this.currentBounds.width > this.currentGraphics.clientSize.width) {\n // this.currentBounds.width = this.currentGraphics.clientSize.width;\n // this.currentBounds.width -= this.currentBounds.x;\n // }\n // if (this.Grid.isChildGrid) {\n // this.childheight = param.bounds.height;\n // }\n // if (param.format !== null && param.format.usePaginateBounds) {\n // if (param.format.paginateBounds.height > 0) {\n // this.currentBounds.height = param.format.paginateBounds.height;\n // }\n //} else \n if (param.bounds.height > 0 && !this.Grid.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n if (!this.Grid.isChildGrid) {\n this.hType = this.Grid.style.horizontalOverflowType;\n }\n if (!this.Grid.style.allowHorizontalOverflow) {\n this.columnRanges = [];\n this.Grid.measureColumnsWidth(this.currentBounds);\n this.columnRanges.push([0, this.Grid.columns.count - 1]);\n }\n else {\n this.Grid.measureColumnsWidth();\n this.determineColumnDrawRanges();\n }\n if (this.Grid.hasRowSpanSpan) {\n for (var i = 0; i < this.Grid.rows.count; i++) {\n var height = this.Grid.rows.getRow(i).height;\n if (!this.Grid.rows.getRow(i).isRowHeightSet) {\n this.Grid.rows.getRow(i).isRowHeightSet = true;\n }\n }\n }\n var result = this.layoutOnPage(param);\n return result;\n };\n // /* tslint:enable */\n /**\n * `Determines the column draw ranges`.\n * @private\n */\n PdfGridLayouter.prototype.determineColumnDrawRanges = function () {\n var startColumn = 0;\n var endColumn = 0;\n var cellWidths = 0;\n var availableWidth = this.currentGraphics.clientSize.width - this.currentBounds.x;\n for (var i = 0; i < this.Grid.columns.count; i++) {\n cellWidths += this.Grid.columns.getColumn(i).width;\n if (cellWidths >= availableWidth) {\n var subWidths = 0;\n for (var j = startColumn; j <= i; j++) {\n subWidths += this.Grid.columns.getColumn(j).width;\n if (subWidths > availableWidth) {\n break;\n }\n endColumn = j;\n }\n this.columnRanges.push([startColumn, endColumn]);\n startColumn = endColumn + 1;\n endColumn = startColumn;\n cellWidths = (endColumn <= i) ? this.Grid.columns.getColumn(i).width : 0;\n }\n }\n // if (startColumn !== this.columns.Count) {\n this.columnRanges.push([startColumn, this.Grid.columns.count - 1]);\n // }\n };\n /**\n * `Layouts the on page`.\n * @private\n */\n PdfGridLayouter.prototype.layoutOnPage = function (param) {\n /* tslint:disable */\n this.pageBounds.x = param.bounds.x;\n this.pageBounds.y = param.bounds.y;\n this.pageBounds.height = param.bounds.height;\n var format = this.getFormat(param.format);\n var endArgs = null;\n var result = null;\n var layoutedPages = new TemporaryDictionary();\n var startPage = param.page;\n var isParentCell = false;\n var cellBounds = [];\n for (var index = 0; index < this.columnRanges.length; index++) {\n var range = this.columnRanges[index];\n this.cellStartIndex = range[0];\n this.cellEndIndex = range[1];\n var returnObject = this.raiseBeforePageLayout(this.currentPage, this.currentBounds, this.currentRowIndex);\n this.currentBounds = returnObject.currentBounds;\n this.currentRowIndex = returnObject.currentRowIndex;\n // if (returnObject.returnValue) {\n // result = new PdfGridLayoutResult(this.currentPage, this.currentBounds);\n // break;\n // }\n //Draw Headers.\n var drawHeader = void 0;\n for (var i_1 = 0; i_1 < this.Grid.headers.count; i_1++) {\n var row = this.Grid.headers.getHeader(i_1);\n var headerHeight = this.currentBounds.y;\n // RowLayoutResult\n var headerResult = this.drawRow(row);\n // if (headerHeight === this.currentBounds.y) {\n // drawHeader = true;\n // if (PdfGrid.repeatRowIndex === -1) {\n // PdfGrid.repeatRowIndex = this.rows.getRow.indexOf(row);\n // }\n // } else {\n drawHeader = false;\n // }\n }\n var i = 0;\n var length_1 = this.Grid.rows.count;\n var repeatRow = void 0;\n var startingHeight = 0;\n var flag = true;\n //Here is to draw parent Grid and Cells\n cellBounds = [];\n //Draw row by row with the specified cell range.\n for (var j = 0; j < this.Grid.rows.count; j++) {\n var row = this.Grid.rows.getRow(j);\n i++;\n this.currentRowIndex = i - 1;\n var originalHeight = this.currentBounds.y;\n startPage = this.currentPage;\n PdfGridLayouter.repeatRowIndex = -1;\n if (flag && row.grid.isChildGrid) {\n startingHeight = originalHeight;\n flag = false;\n }\n var rowResult = null;\n ///rowResult = this.drawRow(row);\n /*if(!row.isrowFinish) {\n if(!row.grid.isgridSplit){\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n row.isrowDraw = true;\n } else {\n if(!row.isrowDraw){\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n row.isrowDraw = true;\n row.grid.isgridSplit = false;\n } else {\n rowResult = null;\n break;\n }\n }\n }\n else {\n //row.isrowFinish = false;\n //rowResult = this.drawRow(row);\n rowResult = null;\n break;\n \n } */\n if (this.Grid.splitChildRowIndex == -1) {\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n }\n else {\n if (row.grid.ParentCell.row.grid.isGridSplit && this.Grid.splitChildRowIndex <= row.rowIndex) {\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n }\n else if (row.isrowFinish) {\n continue;\n }\n else {\n break;\n }\n }\n //rowResult = this.drawRow(row);\n cellBounds.push(rowResult.bounds.width);\n /*if (row.isRowBreaksNextPage)\n {\n let x : number = 0;\n for (let l : number = 0; l < row.cells.count; l++)\n {\n let isNestedRowBreak : boolean = false;\n if (row.height == row.cells.getCell(l).height)\n {\n let n : number;\n let grid : PdfGrid = row.cells.getCell(l).value as PdfGrid;\n for (let m : number = grid.rows.count; 0 < m; m--)\n {\n if ((grid.rows.getRow(m - 1).rowBreakHeight > 0))\n {\n isNestedRowBreak = true;\n break;\n }\n if (grid.rows.getRow(m - 1).isRowBreaksNextPage)\n {\n row.rowBreakHeightValue = grid.rows.getRow(m - 1).rowBreakHeightValue;\n break;\n }\n row.rowBreakHeightValue += grid.rows.getRow(m - 1).height;\n }\n }\n if (isNestedRowBreak)\n break;\n }\n for (let j : number = 0; j < row.cells.count; j++)\n {\n\n if (row.height > row.cells.getCell(j).height)\n {\n row.cells.getCell(j).value = \" \";\n let rect : RectangleF ;\n let page : PdfPage = this.getNextPage(this.currentPage);\n let section : PdfSection = this.currentPage.section;\n let index : number = section.indexOf(page);\n for (let k : number = 0; k < (section.count - 1) - index; k++)\n {\n rect = new RectangleF(x, 0, row.grid.columns.getColumn(j).width, page.getClientSize().height);\n PdfGridLayouter.repeatRowIndex = -1;\n row.cells.getCell(j).draw(page.graphics, rect, false);\n page = this.getNextPage(page);\n }\n rect = new RectangleF(x, 0, row.grid.columns.getColumn(j).width, row.rowBreakHeightValue);\n\n row.cells.getCell(j).draw(page.graphics, rect, false);\n }\n x += row.grid.columns.getColumn(j).width;\n }\n }*/\n //if height remains same, it is understood that row is not drawn in the page\n if (originalHeight === this.currentBounds.y) {\n repeatRow = true;\n PdfGridLayouter.repeatRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n }\n else {\n repeatRow = false;\n PdfGridLayouter.repeatRowIndex = -1;\n }\n while (!rowResult.isFinish && startPage != null) {\n var tempResult = this.getLayoutResult();\n /*if (startPage != this.currentPage)\n {\n if (row.grid.isChildGrid && row.grid.ParentCell != null)\n {\n let bounds : RectangleF= new RectangleF(new PointF(format.paginateBounds.x,format.paginateBounds.y), new SizeF(param.bounds.width, tempResult.bounds.height));\n bounds.x += param.bounds.x;\n if (row.grid.ParentCell.row.grid.style.cellPadding != null)\n {\n bounds.y += row.grid.ParentCell.row.grid.style.cellPadding.top;\n if (bounds.height > this.currentPageBounds.height)\n {\n bounds.height = this.currentPageBounds.height - bounds.y;\n bounds.height -= (row.grid.ParentCell.row.grid.style.cellPadding.bottom);\n }\n }\n // Draw border for cells in the nested grid cell's row.\n for (let c : number = 0; c < row.cells.count; c++)\n {\n let cell : PdfGridCell = row.cells.getCell(c);\n let cellWidth : number= 0;\n if (cell.columnSpan > 1)\n {\n for (; c < cell.columnSpan; c++)\n cellWidth += row.grid.columns.getColumn(c).width;\n }\n else\n cellWidth = Math.max(cell.width, row.grid.columns.getColumn(c).width);\n cell.drawCellBorders(this.currentGraphics, new RectangleF(new PointF(bounds.x,bounds.y), new SizeF(cellWidth, bounds.height)));\n bounds.x += cellWidth;\n c += (cell.columnSpan - 1);\n }\n }\n }\n */\n endArgs = this.raisePageLayouted(tempResult);\n if (endArgs.cancel || repeatRow)\n break;\n else if (this.Grid.allowRowBreakAcrossPages) {\n //If there is no space in the current page, add new page and then draw the remaining row.\n this.currentPage = this.getNextPageformat(format);\n originalHeight = this.currentBounds.y;\n var location_1 = new PointF(PdfBorders.default.right.width / 2, PdfBorders.default.top.width / 2);\n // if (format.paginateBounds == new RectangleF(0,0,0,0) && this.startLocation == location)\n // {\n // this.currentBounds.x += this.startLocation.x;\n // this.currentBounds.y += this.startLocation.y;\n // }\n if (this.Grid.isChildGrid && row.grid.ParentCell != null) {\n if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n if (row.rowBreakHeight + this.Grid.ParentCell.row.grid.style.cellPadding.top < this.currentBounds.height) {\n this.currentBounds.y = this.Grid.ParentCell.row.grid.style.cellPadding.top;\n }\n }\n }\n if (row.grid.ParentCell != null) {\n row.grid.ParentCell.row.isRowBreaksNextPage = true;\n row.grid.ParentCell.row.rowBreakHeightValue = row.rowBreakHeight + this.Grid.ParentCell.row.grid.style.cellPadding.top + this.Grid.ParentCell.row.grid.style.cellPadding.bottom;\n for (var i_2 = row.rowIndex + 1; i_2 < row.grid.rows.count; i_2++) {\n row.grid.ParentCell.row.rowBreakHeightValue += row.grid.rows.getRow(i_2).height;\n }\n //row.rowBreakHeight = row.grid.ParentCell.row.rowBreakHeightValue;\n }\n /*if (row.noOfPageCount > 1)\n {\n let temp : number = row.rowBreakHeightValue;\n for (let j : number = 1; j < row.noOfPageCount; j++)\n {\n row.rowBreakHeightValue = 0;\n row.height = ((row.noOfPageCount - 1) * this.currentPage.getClientSize().height);\n this.drawRow(row);\n this.currentPage = this.getNextPageformat(format);\n startPage = this.currentPage;\n }\n row.rowBreakHeightValue = temp;\n row.noOfPageCount = 1;\n rowResult = this.drawRow(row);\n } else {\n rowResult = this.drawRow(row);\n }\n /*if(row.grid.isChildGrid){\n row.isrowFinish = false;\n row.isrowDraw = false;\n row.grid.isgridSplit = true;\n row.grid.ParentCell.row.grid.isgridSplit = true;\n //rowResult.isFinish = false;\n break;\n }*/\n if (row.grid.isChildGrid) {\n //row.grid.isgridSplit = true;\n row.isrowFinish = false;\n //row.grid.ParentCell.row.grid.isgridSplit = true;\n row.grid.splitChildRowIndex = row.rowIndex;\n row.grid.ParentCell.row.grid.splitChildRowIndex = row.grid.ParentCell.row.rowIndex;\n if (row.grid.ParentCell.row.grid.isGridSplit) {\n row.grid.ParentCell.row.noOfPageCount += 1;\n row.grid.ParentCell.row.grid.isGridSplit = false;\n }\n break;\n }\n if (row.noOfPageCount < 1) {\n if (row.grid.splitChildRowIndex != -1) {\n row.grid.isGridSplit = true;\n }\n this.currentBounds.y = 0.50;\n if (this.Grid.repeatHeader) {\n for (var j_1 = 0; j_1 < this.Grid.headers.count; j_1++) {\n var headerRepeat = this.Grid.headers.getHeader(j_1);\n this.drawRow(headerRepeat);\n }\n }\n rowResult = this.drawRow(row);\n if (row.noOfPageCount >= 1) {\n var temp = row.rowBreakHeightValue;\n for (var j_2 = 0; j_2 < row.noOfPageCount; j_2++) {\n //this.currentPage.section.add();\n var tempResult1 = this.getLayoutResult();\n endArgs = this.raisePageLayouted(tempResult1);\n this.currentPage = this.getNextPageformat(format);\n originalHeight = this.currentBounds.y;\n //row.rowBreakHeightValue = 0;\n if (row.grid.splitChildRowIndex != -1) {\n row.grid.isGridSplit = true;\n }\n this.currentBounds.y = 0.5;\n if (this.Grid.repeatHeader) {\n for (var i_3 = 0; i_3 < this.Grid.headers.count; i_3++) {\n var header = this.Grid.headers.getHeader(i_3);\n this.drawRow(header);\n }\n }\n //row.height = ((row.noOfPageCount - 1) * this.currentPage.getClientSize().height);\n this.drawRow(row);\n }\n // row.rowBreakHeight = temp;\n // row.noOfPageCount = 1;\n // rowResult = this.drawRow(row);\n }\n row.grid.splitChildRowIndex = -1;\n row.grid.isGridSplit = false;\n rowResult.isFinish = true;\n //row.NestedGridLayoutResult.bounds.height = row.rowBreakHeightValue;\n //this.currentBounds.y = rowResult.bounds.y;\n for (var i_4 = 0; i_4 < row.cells.count; i_4++) {\n if (row.cells.getCell(i_4).value instanceof PdfGrid) {\n row.cells.getCell(i_4).value.splitChildRowIndex = -1;\n }\n }\n }\n }\n // else if (!this.Grid.allowRowBreakAcrossPages && i < length)\n // {\n // this.currentPage = this.getNextPageformat(format);\n // break;\n // }\n // else if (i >= length)\n // break;\n }\n if (!rowResult.isFinish && startPage !== null && format.layout !== PdfLayoutType.OnePage && repeatRow) {\n // During pagination, cell position is maintained here.\n this.startLocation.x = this.currentBounds.x;\n var isAddNextPage = false;\n this.currentPage = this.getNextPageformat(format);\n /*if (!this.Grid.isSingleGrid)\n {\n for ( let j : number= 0; j < this.Grid.rows.count; j++)\n {\n let isWidthGreaterthanParent : boolean = false;\n for (let k : number = 0; k < this.Grid.rows.getRow(j).cells.count; k++)\n {\n if (this.Grid.rows.getRow(j).cells.getCell(k).width > this.currentPageBounds.width)\n isWidthGreaterthanParent = true;\n }\n if (isWidthGreaterthanParent && this.Grid.rows.getRow(j).cells.getCell(this.rowBreakPageHeightCellIndex).pageCount > 0)\n {\n isAddNextPage = true;\n }\n }\n }\n if (!this.Grid.isRearranged && isAddNextPage)\n {\n let section : PdfSection = this.currentPage.section;\n \n //this.currentPage = section.add();\n \n this.currentGraphics = this.currentPage.graphics;\n this.currentBounds = new RectangleF(new PointF(0,0), this.currentPage.getClientSize());\n \n let pageindex : number = (this.currentGraphics.page as PdfPage).section.indexOf(this.currentGraphics.page as PdfPage);\n }\n else\n {\n this.currentPage = this.getNextPageformat(format);\n }\n if (format.paginateBounds.y == 0)\n this.currentBounds.y = PdfBorders.default.top.width/2;\n else\n {\n this.currentBounds.y = format == null ? 0 : format.paginateBounds.y;\n \n }\n if (this.raiseBeforePageLayout(this.currentPage, this.currentBounds, this.currentRowIndex))\n break;*/\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.height > 0 && !this.Grid.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.y > 0 && !this.Grid.isChildGrid) {\n this.currentBounds.y = param.bounds.y;\n }\n this.startLocation.y = this.currentBounds.y;\n if ((format.paginateBounds.x === format.paginateBounds.y) &&\n (format.paginateBounds.y === format.paginateBounds.height) &&\n (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n }\n if (this.currentBounds.x === PdfBorders.default.left.width / 2) {\n this.currentBounds.y += this.startLocation.x;\n }\n if (this.Grid.repeatHeader) {\n for (var i_5 = 0; i_5 < this.Grid.headers.count; i_5++) {\n var header = this.Grid.headers.getHeader(i_5);\n this.drawRow(header);\n }\n }\n this.drawRow(row);\n if (this.currentPage !== null && !layoutedPages.containsKey(this.currentPage)) {\n layoutedPages.add(this.currentPage, range);\n }\n }\n if (row.NestedGridLayoutResult != null) {\n // Position for next row in the grid.\n this.currentPage = row.NestedGridLayoutResult.page;\n this.currentGraphics = this.currentPage.graphics; //If not, next row will not be drawn in the layouted page.\n this.startLocation = new PointF(row.NestedGridLayoutResult.bounds.x, row.NestedGridLayoutResult.bounds.y);\n var recalHeight = this.ReCalculateHeight(row, row.NestedGridLayoutResult.bounds.height);\n this.currentBounds.y = recalHeight;\n //this.currentBounds.y = row.NestedGridLayoutResult.bounds.height;\n if (startPage != this.currentPage) {\n var secion = this.currentPage.section;\n var startIndex = secion.indexOf(startPage) + 1;\n var endIndex = secion.indexOf(this.currentPage);\n for (var page = startIndex; page < endIndex + 1; page++) {\n var pageGraphics = this.currentPage.graphics;\n var location_2 = new PointF(format.paginateBounds.x, format.paginateBounds.y);\n var height = page == endIndex ? (row.NestedGridLayoutResult.bounds.height - param.bounds.y) :\n (this.currentBounds.height - location_2.y);\n if (height <= pageGraphics.clientSize.height)\n height += param.bounds.y;\n // if (row.grid.isChildGrid && row.grid.ParentCell != null)\n // location.x += param.bounds.x;\n location_2.y = format == null ? 0.5 : format.paginateBounds.y;\n // Draw border for last paginated row containing nested grid.\n for (var c = 0; c < row.cells.count; c++) {\n var cell = row.cells.getCell(c);\n var cellWidth = 0;\n var totalwidth = 0;\n if (cell.value instanceof PdfGrid) {\n for (var i_6 = 0; i_6 < cell.value.columns.count; i_6++) {\n totalwidth += cell.value.columns.getColumn(i_6).columnWidth;\n }\n }\n else {\n totalwidth = cell.width;\n }\n // if (cell.columnSpan > 1)\n // {\n // for (; c < cell.columnSpan; c++)\n // cellWidth += row.grid.columns.getColumn(c).width;\n // }\n // else\n cellWidth = Math.max(totalwidth, row.grid.columns.getColumn(c).width);\n cell.drawCellBorders(pageGraphics, new RectangleF(location_2, new SizeF(cellWidth, height)));\n location_2.x += cellWidth;\n c += (cell.columnSpan - 1);\n }\n }\n // So, nested grid drawing is completed for the current row. Update page.\n // Otherwise, the next nested grid of the parent will draw borders from start.\n startPage = this.currentPage;\n }\n }\n }\n var isPdfGrid = false;\n var maximumCellBoundsWidth = 0;\n if (cellBounds.length > 0) {\n maximumCellBoundsWidth = cellBounds[0];\n }\n var largeNavigatePage = [[1, 2]];\n for (var c = 0; c < this.Grid.rows.count; c++) {\n if (this.cellEndIndex != -1 && this.Grid.rows.getRow(c).cells.getCell(this.cellEndIndex).value instanceof PdfGrid) {\n var grid = this.Grid.rows.getRow(c).cells.getCell(this.cellEndIndex).value;\n this.rowLayoutBoundsWidth = grid.rowLayoutBoundsWidth;\n isPdfGrid = true;\n // if (largeNavigatePage[0][0] < grid.listOfNavigatePages.length)\n // {\n // largeNavigatePage[0][0] = grid.listOfNavigatePages.length;\n // largeNavigatePage[0][1] = cellBounds[c];\n // }\n // else if ((largeNavigatePage[0][0] == grid.listOfNavigatePages.length) && (largeNavigatePage[0][1] < cellBounds[c]))\n // {\n // largeNavigatePage[0][1] = cellBounds[c];\n // }\n }\n }\n if (!isPdfGrid && cellBounds.length > 0) {\n for (var c = 0; c < i - 1; c++) {\n if (maximumCellBoundsWidth < cellBounds[c]) {\n maximumCellBoundsWidth = cellBounds[c];\n }\n }\n this.rowLayoutBoundsWidth = maximumCellBoundsWidth;\n }\n else {\n this.rowLayoutBoundsWidth = largeNavigatePage[0][1];\n }\n if (this.columnRanges.indexOf(range) < this.columnRanges.length - 1\n && startPage != null && format.layout != PdfLayoutType.OnePage) {\n isParentCell = this.Grid.isChildGrid;\n if (largeNavigatePage[0][0] != 0) {\n var section = this.currentPage.section;\n var pageIndex = section.indexOf(this.currentPage);\n this.currentGraphics = this.currentPage.graphics;\n this.currentBounds = new RectangleF(new PointF(0, 0), this.currentPage.getClientSize());\n var pageindex = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n }\n else {\n this.currentPage = this.getNextPageformat(format);\n }\n // let locationGrid : PointF= new PointF(PdfBorders.default.right.width / 2, PdfBorders.default.top.width / 2);\n // if (format.paginateBounds == new RectangleF(0,0,0,0) && this.startLocation == locationGrid)\n // {\n // this.currentBounds.x += this.startLocation.x;\n // this.currentBounds.y += this.startLocation.y;\n // }\n }\n if (this.columnRanges.length - 1 !== index && this.columnRanges.length > 1 && format.layout !== PdfLayoutType.OnePage) {\n this.currentPage = this.getNextPageformat(format);\n if ((format.paginateBounds.x === format.paginateBounds.y) && (format.paginateBounds.y === format.paginateBounds.height)\n && (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n this.currentBounds.y += this.startLocation.y;\n //this.currentBounds.height = this.pageBounds.height;\n }\n }\n }\n result = this.getLayoutResult();\n if (this.Grid.style.allowHorizontalOverflow && this.Grid.style.horizontalOverflowType == PdfHorizontalOverflowType.NextPage) {\n this.reArrangePages(layoutedPages);\n }\n this.raisePageLayouted(result);\n return result;\n };\n /* tslint:enable */\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGridLayouter.prototype.getNextPageformat = function (format) {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n this.flag = false;\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n this.currentGraphics = nextPage.graphics;\n var pageindex = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n if (!(this.listOfNavigatePages.indexOf(pageindex) !== -1)) {\n this.listOfNavigatePages.push(pageindex);\n }\n this.currentBounds = new RectangleF(new PointF(0, 0), nextPage.getClientSize());\n // if ((format.paginateBounds.x !== format.paginateBounds.y) && (format.paginateBounds.y !== format.paginateBounds.height)\n // && (format.paginateBounds.height !== format.paginateBounds.width) && (format.paginateBounds.width !== 0)) {\n // this.currentBounds.x = format.paginateBounds.x;\n // this.currentBounds.y = format.paginateBounds.y;\n // this.currentBounds.height = format.paginateBounds.height;\n // }\n return nextPage;\n };\n PdfGridLayouter.prototype.CheckIfDefaultFormat = function (format) {\n var defaultFormat = new PdfStringFormat();\n return (format.alignment === defaultFormat.alignment && format.characterSpacing === defaultFormat.characterSpacing &&\n format.clipPath === defaultFormat.clipPath && format.firstLineIndent === defaultFormat.firstLineIndent &&\n format.horizontalScalingFactor === defaultFormat.horizontalScalingFactor &&\n format.lineAlignment === defaultFormat.lineAlignment\n && format.lineLimit === defaultFormat.lineLimit && format.lineSpacing === defaultFormat.lineSpacing &&\n format.measureTrailingSpaces === defaultFormat.measureTrailingSpaces && format.noClip === defaultFormat.noClip &&\n format.paragraphIndent === defaultFormat.paragraphIndent && format.rightToLeft === defaultFormat.rightToLeft &&\n format.subSuperScript === defaultFormat.subSuperScript && format.wordSpacing === defaultFormat.wordSpacing &&\n format.wordWrap === defaultFormat.wordWrap);\n };\n /**\n * `Raises BeforeCellDraw event`.\n * @private\n */\n PdfGridLayouter.prototype.RaiseBeforeCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, style) {\n var args = null;\n if (this.Grid.raiseBeginCellDraw) {\n args = new PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style);\n this.Grid.onBeginCellDraw(args);\n style = args.style;\n }\n return style;\n };\n /**\n * `Raises AfterCellDraw event`.\n * @private\n */\n PdfGridLayouter.prototype.raiseAfterCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, cellstyle) {\n var args = null;\n if (this.Grid.raiseEndCellDraw) {\n args = new PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, cellstyle);\n this.Grid.onEndCellDraw(args);\n }\n };\n PdfGridLayouter.prototype.reArrangePages = function (layoutedPages) {\n var document = this.currentPage.document;\n var pages = [];\n var keys = layoutedPages.keys();\n var values = layoutedPages.values();\n for (var i = 0; i < keys.length; i++) {\n var page = keys[i];\n page.section = null;\n pages.push(page);\n document.pages.remove(page);\n }\n /* tslint:disable */\n for (var i = 0; i < layoutedPages.size(); i++) {\n var count = 0;\n for (var j = i, count_1 = (layoutedPages.size() / this.columnRanges.length); j < layoutedPages.size(); j += count_1) {\n var page = pages[j];\n if (document.pages.indexOf(page) === -1) {\n document.pages.add(page);\n }\n }\n }\n /* tslint:enable */\n };\n /**\n * Gets the `layout result`.\n * @private\n */\n PdfGridLayouter.prototype.getLayoutResult = function () {\n if (this.Grid.isChildGrid && this.Grid.allowRowBreakAcrossPages) {\n for (var i = 0; i < this.Grid.rows.count; i++) {\n var row = this.Grid.rows.getRow(i);\n if (row.rowBreakHeight > 0 && row.repeatFlag) {\n this.startLocation.y = this.currentPage.origin.y;\n }\n }\n }\n var bounds;\n if (!this.isChanged) {\n bounds = new RectangleF(this.startLocation, new SizeF(this.currentBounds.width, this.currentBounds.y -\n this.startLocation.y));\n }\n // else {\n // bounds = new RectangleF(this.currentLocation, new SizeF(this.currentBounds.width, this.currentBounds.y -\n // this.currentLocation.y));\n // }\n /* tslint:enable */\n return new PdfGridLayoutResult(this.currentPage, bounds);\n };\n /**\n * `Recalculate row height` for the split cell to be drawn.\n * @private\n */\n PdfGridLayouter.prototype.ReCalculateHeight = function (row, height) {\n var newHeight = 0.0;\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n if (!(row.cells.getCell(i).remainingString === null || row.cells.getCell(i).remainingString === '' ||\n typeof row.cells.getCell(i).remainingString === 'undefined')) {\n newHeight = Math.max(newHeight, row.cells.getCell(i).measureHeight());\n }\n }\n return Math.max(height, newHeight);\n };\n /**\n * `Raises BeforePageLayout event`.\n * @private\n */\n PdfGridLayouter.prototype.raiseBeforePageLayout = function (currentPage, currentBounds, currentRow) {\n var cancel = false;\n if (this.Grid.raiseBeginPageLayout) {\n var args = new PdfGridBeginPageLayoutEventArgs(currentBounds, currentPage, currentRow);\n this.Grid.onBeginPageLayout(args);\n // if (currentBounds !== args.Bounds) {\n // this.isChanged = true;\n // this.currentLocation = new PointF(args.Bounds.x, args.Bounds.y);\n // this.measureColumnsWidth(new RectangleF(new PointF(args.Bounds.x, args.Bounds.y) ,\n // new SizeF(args.Bounds.width + args.Bounds.x ,\n // args.Bounds.height)));\n // }\n cancel = args.cancel;\n currentBounds = args.bounds;\n currentRow = args.startRowIndex;\n }\n return { returnValue: cancel, currentBounds: currentBounds, currentRowIndex: currentRow };\n };\n /**\n * `Raises PageLayout event` if needed.\n * @private\n */\n PdfGridLayouter.prototype.raisePageLayouted = function (result) {\n var args = new PdfGridEndPageLayoutEventArgs(result);\n if (this.Grid.raiseEndPageLayout) {\n this.Grid.onEndPageLayout(args);\n }\n return args;\n };\n PdfGridLayouter.prototype.drawRow = function (row, result, height) {\n if (typeof result === 'undefined') {\n //.. Check if required space available.\n //.....If the row conains spans which falls through more than one page, then draw the row to next page. \n var result_1 = new RowLayoutResult();\n var rowHeightWithSpan = 0;\n var location_3 = new PointF(0, 0);\n var size = new SizeF(0, 0);\n var isHeader = false;\n if (row.rowSpanExists) {\n var maxSpan = 0;\n var currRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n if (currRowIndex === -1) {\n currRowIndex = this.Grid.headers.indexOf(row);\n if (currRowIndex !== -1) {\n isHeader = true;\n }\n }\n for (var i = 0; i < row.cells.count; i++) {\n var cell = row.cells.getCell(i);\n maxSpan = Math.max(maxSpan, cell.rowSpan);\n }\n for (var i = currRowIndex; i < currRowIndex + maxSpan; i++) {\n rowHeightWithSpan += (isHeader ? this.Grid.headers.getHeader(i).height : this.Grid.rows.getRow(i).height);\n }\n // let rowMaxHeight : number = rowHeightWithSpan;\n // for (let i : number = 0; i < row.cells.count; i++ ) {\n // rowMaxHeight = rowMaxHeight > row.cells.getCell(i).height ? rowMaxHeight : row.cells.getCell(i).height;\n // }\n // let flag : boolean = true;\n // let nextRow : PdfGridRow = this.Grid.headers.getHeader(this.Grid.headers.indexOf(row) + 1);\n // for (let i : number = 0; i < nextRow.cells.count; i++ ) {\n // if (nextRow.cells.getCell(i).value !== '' && nextRow.cells.getCell(i).value !== undefined) {\n // flag = false;\n // break;\n // }\n // }\n // if ((rowMaxHeight > rowHeightWithSpan) && flag) {\n // row.height += (rowMaxHeight - rowHeightWithSpan);\n // } \n }\n var calculatedHeight = row.rowBreakHeight > 0.0 ? row.rowBreakHeight : row.height;\n if (this.Grid.isChildGrid && this.Grid.ParentCell != null) {\n //Split row only if row height exceeds page height and AllowRowBreakAcrossPages is true.\n // if (calculatedHeight + this.Grid.ParentCell.row.grid.style.cellPadding.bottom +\n // this.Grid.ParentCell.row.grid.style.cellPadding.top > this.currentPageBounds.height) {\n // if (this.Grid.allowRowBreakAcrossPages) {\n // result.isFinish = true;\n // if ( this.Grid.isChildGrid && row.rowBreakHeight > 0 ) {\n // if (this.Grid.ParentCell.row.grid.style.cellPadding !== null) {\n // this.currentBounds.y += this.Grid.ParentCell.row.grid.style.cellPadding.top;\n // }\n // this.currentBounds.x = this.startLocation.x;\n // }\n // result.bounds = this.currentBounds ;\n // this.drawRowWithBreak(result, row, calculatedHeight);\n // } else {\n // //If AllowRowBreakAcrossPages is not true, draw the row till it fits the page. \n // if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n // this.currentBounds.y += this.Grid.ParentCell.row.grid.style.cellPadding.top;\n // calculatedHeight = this.currentBounds.height - this.currentBounds.y -\n // this.Grid.ParentCell.row.grid.style.cellPadding.bottom;\n // }\n // result.isFinish = false;\n // this.drawRow( row, result, calculatedHeight);\n // }\n // } else\n if (this.currentBounds.y + this.Grid.ParentCell.row.grid.style.cellPadding.bottom + calculatedHeight >\n this.currentPageBounds.height || this.currentBounds.y + this.Grid.ParentCell.row.grid.style.cellPadding.bottom\n + calculatedHeight > this.currentBounds.height || this.currentBounds.y +\n this.Grid.ParentCell.row.grid.style.cellPadding.bottom + rowHeightWithSpan > this.currentPageBounds.height) {\n //If a row is repeated and still cannot fit in page, proceed draw.\n if (this.Grid.ParentCell.row.grid.LayoutFormat.break === PdfLayoutBreakType.FitPage) {\n PdfGridLayouter.repeatRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n this.Grid.splitChildRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n }\n if (PdfGridLayouter.repeatRowIndex > -1 && PdfGridLayouter.repeatRowIndex === row.rowIndex) {\n if (this.Grid.allowRowBreakAcrossPages) {\n result_1.isFinish = true;\n // if (this.Grid.isChildGrid && row.rowBreakHeightValue > 0) {\n // // if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n // // this.currentBounds.y += this.Grid.ParentCell.row.grid.style.cellPadding.top;\n // // }\n // this.currentBounds.x = this.startLocation.x;\n // }\n result_1.bounds = this.currentBounds;\n this.drawRowWithBreak(result_1, row, calculatedHeight);\n row.repeatFlag = true;\n row.repeatRowNumber = PdfGridLayouter.repeatRowIndex;\n }\n // else {\n // result.isFinish = false;\n // row.repeatFlag = false;\n // this.drawRow( row, result, calculatedHeight);\n // }\n }\n // else {\n // result.isFinish = false;\n // }\n }\n else {\n result_1.isFinish = true;\n if (row.grid.ParentCell.row.rowBreakHeightValue > 0) {\n row.repeatFlag = true;\n }\n else {\n row.repeatFlag = false;\n calculatedHeight = row.height;\n }\n if (this.Grid.isChildGrid && row.rowBreakHeight > 0) {\n if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n calculatedHeight += this.Grid.ParentCell.row.grid.style.cellPadding.bottom;\n }\n }\n this.drawRow(row, result_1, calculatedHeight);\n }\n }\n else {\n //Split row only if row height exceeds page height and AllowRowBreakAcrossPages is true.\n if (calculatedHeight > this.currentPageBounds.height) {\n if (this.Grid.allowRowBreakAcrossPages) {\n result_1.isFinish = true;\n //result.bounds = this.currentBounds;\n this.drawRowWithBreak(result_1, row, calculatedHeight);\n row.isrowFinish = true;\n row.repeatFlag = true;\n if (row.grid.splitChildRowIndex !== -1) {\n result_1.isFinish = false;\n }\n }\n // else {\n // //If AllowRowBreakAcrossPages is not true, draw the row till it fits the page.\n // result.isFinish = false;\n // this.drawRow( row, result, calculatedHeight);\n // }\n }\n else if (this.currentBounds.y + calculatedHeight > this.currentPageBounds.height ||\n this.currentBounds.y + calculatedHeight > (this.currentBounds.height + this.startLocation.y) ||\n this.currentBounds.y + rowHeightWithSpan > this.currentPageBounds.height) {\n // If a row is repeated and still cannot fit in page, proceed draw.\n if (this.Grid.LayoutFormat.break === PdfLayoutBreakType.FitPage) {\n PdfGridLayouter.repeatRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n }\n if (PdfGridLayouter.repeatRowIndex > -1 && PdfGridLayouter.repeatRowIndex === row.rowIndex) {\n if (this.Grid.allowRowBreakAcrossPages) {\n result_1.isFinish = true;\n this.drawRowWithBreak(result_1, row, calculatedHeight);\n row.repeatFlag = true;\n row.repeatRowNumber = PdfGridLayouter.repeatRowIndex;\n if (row.grid.splitChildRowIndex !== -1) {\n result_1.isFinish = false;\n }\n }\n // else {\n // result.isFinish = false;\n // this.drawRow(row, result, calculatedHeight);\n // }\n }\n else {\n result_1.isFinish = false;\n }\n }\n else {\n result_1.isFinish = true;\n this.drawRow(row, result_1, calculatedHeight);\n row.repeatFlag = false;\n }\n }\n return result_1;\n }\n else {\n var skipcell = false;\n var location_4 = new PointF(this.currentBounds.x, this.currentBounds.y);\n // if (row.grid.isChildGrid && row.grid.allowRowBreakAcrossPages && this.startLocation.x !== this.currentBounds.x && row.width <\n // this.currentPage.getClientSize().width) {\n // location.x = this.startLocation.x;\n // }\n result.bounds = new RectangleF(location_4, new SizeF(0, 0));\n height = this.ReCalculateHeight(row, height);\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n var cancelSpans = ((i > this.cellEndIndex + 1) && (row.cells.getCell(i).columnSpan > 1));\n // let cancelSpans : boolean = false;\n if (!cancelSpans) {\n for (var j = 1; j < row.cells.getCell(i).columnSpan; j++) {\n row.cells.getCell(i + j).isCellMergeContinue = true;\n }\n }\n var size = new SizeF(this.Grid.columns.getColumn(i).width, height);\n // if (size.width > this.currentGraphics.clientSize.width) {\n // size.width = this.currentGraphics.clientSize.width;\n // }\n // if (this.Grid.isChildGrid && this.Grid.style.allowHorizontalOverflow) {\n // if (size.width >= this.currentGraphics.clientSize.width) {\n // size.width -= 2 * this.currentBounds.x;\n // }\n // }\n /* tslint:disable */\n if (!this.CheckIfDefaultFormat(this.Grid.columns.getColumn(i).format) &&\n this.CheckIfDefaultFormat(row.cells.getCell(i).stringFormat)) {\n row.cells.getCell(i).stringFormat = this.Grid.columns.getColumn(i).format;\n }\n var cellstyle = row.cells.getCell(i).style;\n var tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n row.cells.getCell(i).style = this.RaiseBeforeCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_4, size), tempValue, cellstyle);\n //row.cells.getCell(i).style = cellstyle;\n if (!skipcell) {\n if (row.cells.getCell(i).value instanceof PdfGrid) {\n var grid = row.cells.getCell(i).value;\n grid.parentCellIndex = i;\n }\n var stringResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location_4, size), cancelSpans);\n if (row.grid.style.allowHorizontalOverflow && (row.cells.getCell(i).columnSpan > this.cellEndIndex ||\n i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1) && this.cellEndIndex < row.cells.count - 1) {\n row.rowOverflowIndex = this.cellEndIndex;\n }\n if (row.grid.style.allowHorizontalOverflow && (row.rowOverflowIndex > 0 && (row.cells.getCell(i).columnSpan >\n this.cellEndIndex || i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1)) &&\n row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1 > 0) {\n row.cells.getCell(row.rowOverflowIndex + 1).value = stringResult !== null ? (stringResult.remainder !== undefined) ?\n stringResult.remainder : '' : '';\n row.cells.getCell(row.rowOverflowIndex + 1).stringFormat = row.cells.getCell(i).stringFormat;\n row.cells.getCell(row.rowOverflowIndex + 1).style = row.cells.getCell(i).style;\n row.cells.getCell(row.rowOverflowIndex + 1).columnSpan = row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1;\n }\n }\n /* tslint:enable */\n tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n if (!cancelSpans) {\n this.raiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_4, size), tempValue, row.cells.getCell(i).style);\n }\n if (row.cells.getCell(i).value instanceof PdfGrid) {\n var grid = row.cells.getCell(i).value;\n if (this.Grid.columns.getColumn(i).width >= this.currentGraphics.clientSize.width) {\n location_4.x = grid.rowLayoutBoundsWidth;\n location_4.x += grid.style.cellSpacing;\n }\n else {\n location_4.x += this.Grid.columns.getColumn(i).width;\n }\n }\n else {\n location_4.x += this.Grid.columns.getColumn(i).width;\n }\n }\n if (!row.rowMergeComplete || row.isRowHeightSet) {\n this.currentBounds.y += height;\n }\n result.bounds = new RectangleF(new PointF(result.bounds.x, result.bounds.y), new SizeF(location_4.x, location_4.y));\n }\n };\n PdfGridLayouter.prototype.drawRowWithBreak = function (result, row, calculateHeight) {\n var location = new PointF(this.currentBounds.x, this.currentBounds.y);\n if (row.grid.isChildGrid && row.grid.allowRowBreakAcrossPages && this.startLocation.x !== this.currentBounds.x) {\n location.x = this.startLocation.x;\n }\n result.bounds = new RectangleF(location, new SizeF(0, 0));\n this.gridHeight = row.rowBreakHeight > 0 ? this.currentPageBounds.height : 0;\n // Calculate the remaining height.\n if (row.grid.style.cellPadding.top + this.currentBounds.y + row.grid.style.cellPadding.bottom < this.currentPageBounds.height) {\n row.rowBreakHeight = this.currentBounds.y + calculateHeight - this.currentPageBounds.height;\n }\n // else {\n // row.rowBreakHeight = calculateHeight;\n // result.isFinish = false;\n // return;\n // }\n // No need to explicit break if the row height is equal to grid height.\n for (var i = 0; i < row.cells.count; i++) {\n var cell = row.cells.getCell(i);\n var cellHeight = cell.measureHeight();\n if (cellHeight === calculateHeight && cell.value instanceof PdfGrid) {\n row.rowBreakHeight = 0;\n }\n // else if (cellHeight === calculateHeight && (cell.value as PdfGrid) === null) {\n // row.rowBreakHeight = this.currentBounds.y + calculateHeight - this.currentPageBounds.height;\n // }\n }\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n var cancelSpans = ((row.cells.getCell(i).columnSpan + i > this.cellEndIndex + 1) &&\n (row.cells.getCell(i).columnSpan > 1));\n // if (!cancelSpans) {\n // for (let k : number = 1; k < row.cells.getCell(i).columnSpan; k++) {\n // row.cells.getCell(i + k).isCellMergeContinue = true;\n // }\n //}\n var size = new SizeF(this.Grid.columns.getColumn(i).width, this.gridHeight > 0.0 ? this.gridHeight :\n this.currentPageBounds.height);\n // if (size.width === 0) {\n // size = new SizeF(row.cells.getCell(i).width, size.height);\n // }\n // if (!this.CheckIfDefaultFormat(this.Grid.columns.getColumn(i).format) &&\n // this.CheckIfDefaultFormat((row.cells.getCell(i).stringFormat))) {\n // row.cells.getCell(i).stringFormat = this.Grid.columns.getColumn(i).format;\n // }\n var cellstyle1 = row.cells.getCell(i).style;\n row.cells.getCell(i).style = cellstyle1;\n var skipcell = false;\n var stringResult = null;\n if (!skipcell) {\n stringResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location, size), cancelSpans);\n }\n //If still row is to be drawn, set cell finished drawing cell as false and update the text to be drawn.\n if (row.rowBreakHeight > 0.0) {\n if (stringResult != null) {\n row.cells.getCell(i).FinishedDrawingCell = false;\n row.cells.getCell(i).remainingString = stringResult.remainder == null ? ' ' : stringResult.remainder;\n if (row.grid.isChildGrid) {\n row.rowBreakHeight = calculateHeight - stringResult.actualSize.height;\n }\n }\n }\n result.isFinish = (!result.isFinish) ? result.isFinish : row.cells.getCell(i).FinishedDrawingCell;\n // let tempValue : string = ((typeof row.cells.getCell(i).value === 'string' &&\n //row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '') as string;\n // if (!cancelSpans) {\n // // this.raiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i,\n // // new RectangleF(location, size), tempValue, row.cells.getCell(i).style); \n // this.raiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location, size),\n // (row.cells.getCell(i).value as string) ? row.cells.getCell(i).value.toString() : ' ',\n // row.cells.getCell(i).style);\n // } \n if (row.cells.getCell(i).value instanceof PdfGrid) {\n var grid = row.cells.getCell(i).value;\n this.rowBreakPageHeightCellIndex = i;\n // row.cells.getCell(i).pageCount = grid.listOfNavigatePages.length;\n // for (let j : number = 0;j= this.currentGraphics.clientSize.width) {\n location.x = this.rowLayoutBoundsWidth;\n location.x += grid.style.cellSpacing;\n }\n else {\n location.x += this.Grid.columns.getColumn(i).width;\n }\n }\n else {\n location.x += this.Grid.columns.getColumn(i).width;\n }\n }\n this.currentBounds.y += this.gridHeight > 0.0 ? this.gridHeight : calculateHeight;\n result.bounds = new RectangleF(new PointF(result.bounds.x, result.bounds.y), new SizeF(location.x, location.y));\n };\n /**\n * @hidden\n * @private\n */\n PdfGridLayouter.repeatRowIndex = -1;\n return PdfGridLayouter;\n}(ElementLayouter));\nexport { PdfGridLayouter };\n// recalculateBounds : boolean, clientSize : SizeF\n//Implementation\n/**\n * `Initializes` internal data.\n * @private\n */\n//Internal declaration\nvar PdfGridLayoutResult = /** @class */ (function (_super) {\n __extends(PdfGridLayoutResult, _super);\n /**\n * Constructor\n * @private\n */\n function PdfGridLayoutResult(page, bounds) {\n return _super.call(this, page, bounds) || this;\n }\n return PdfGridLayoutResult;\n}(PdfLayoutResult));\nexport { PdfGridLayoutResult };\n/**\n * `PdfGridLayoutFormat` class represents a flexible grid that consists of columns and rows.\n */\nvar PdfGridLayoutFormat = /** @class */ (function (_super) {\n __extends(PdfGridLayoutFormat, _super);\n /**\n * Initializes a new instance of the `PdfGridLayoutFormat` class.\n * @private\n */\n function PdfGridLayoutFormat(baseFormat) {\n var _this = this;\n if (typeof baseFormat === 'undefined') {\n _this = _super.call(this) || this;\n }\n else {\n _this = _super.call(this, baseFormat) || this;\n }\n return _this;\n }\n return PdfGridLayoutFormat;\n}(PdfLayoutFormat));\nexport { PdfGridLayoutFormat };\nvar GridCellEventArgs = /** @class */ (function () {\n // Constructors\n /**\n * Initialize a new instance for `GridCellEventArgs` class.\n * @private\n */\n function GridCellEventArgs(graphics, rowIndex, cellIndex, bounds, value) {\n this.gridRowIndex = rowIndex;\n this.gridCellIndex = cellIndex;\n this.internalValue = value;\n this.gridBounds = bounds;\n this.pdfGraphics = graphics;\n }\n Object.defineProperty(GridCellEventArgs.prototype, \"rowIndex\", {\n // Properties\n /**\n * Gets the value of current `row index`.\n * @private\n */\n get: function () {\n return this.gridRowIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"cellIndex\", {\n /**\n * Gets the value of current `cell index`.\n * @private\n */\n get: function () {\n return this.gridCellIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"value\", {\n /**\n * Gets the actual `value` of current cell.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of current cell.\n * @private\n */\n get: function () {\n return this.gridBounds;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"graphics\", {\n /**\n * Gets the instance of `current graphics`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n return GridCellEventArgs;\n}());\nexport { GridCellEventArgs };\nvar PdfGridBeginCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StartCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.style = style;\n return _this;\n }\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"skip\", {\n // Properties\n /**\n * Gets or sets a value indicating whether the value of this cell should be `skipped`.\n * @private\n */\n get: function () {\n return this.bSkip;\n },\n set: function (value) {\n this.bSkip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"style\", {\n /**\n * Gets or sets a `style` value of the cell.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridBeginCellDrawEventArgs };\nvar PdfGridEndCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `PdfGridEndCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.cellStyle = style;\n return _this;\n }\n Object.defineProperty(PdfGridEndCellDrawEventArgs.prototype, \"style\", {\n // Propertise\n /**\n * Get the `PdfGridCellStyle`.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridEndCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridEndCellDrawEventArgs };\nvar PdfCancelEventArgs = /** @class */ (function () {\n function PdfCancelEventArgs() {\n }\n Object.defineProperty(PdfCancelEventArgs.prototype, \"cancel\", {\n // Properties\n /**\n * Gets and Sets the value of `cancel`.\n * @private\n */\n get: function () {\n return this.isCancel;\n },\n set: function (value) {\n this.isCancel = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCancelEventArgs;\n}());\nexport { PdfCancelEventArgs };\nvar BeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(BeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `BeginPageLayoutEventArgs` class with the specified rectangle and page.\n * @private\n */\n function BeginPageLayoutEventArgs(bounds, page) {\n var _this = _super.call(this) || this;\n _this.bounds = bounds;\n _this.pdfPage = page;\n return _this;\n }\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"bounds\", {\n // Properties\n /**\n * Gets or sets value that indicates the lay outing `bounds` on the page.\n * @private\n */\n get: function () {\n return this.cellBounds;\n },\n set: function (value) {\n this.cellBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"page\", {\n /**\n * Gets the `page` where the lay outing should start.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n return BeginPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { BeginPageLayoutEventArgs };\n/**\n * `EndPageLayoutEventArgs` class is alternate for end page layout events.\n */\nvar EndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(EndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `EndPageLayoutEventArgs` class. with the specified 'PdfLayoutResult'.\n * @private\n */\n function EndPageLayoutEventArgs(result) {\n var _this = _super.call(this) || this;\n _this.layoutResult = result;\n return _this;\n }\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"result\", {\n // Properties\n /**\n * Gets the lay outing `result` of the page.\n * @private\n */\n get: function () {\n return this.layoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"nextPage\", {\n /**\n * Gets or sets a value indicating the `next page` where the element should be layout.\n * @private\n */\n get: function () {\n return this.nextPdfPage;\n },\n set: function (value) {\n this.nextPdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n return EndPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { EndPageLayoutEventArgs };\n/**\n * `PdfGridBeginPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridBeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridBeginPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginPageLayoutEventArgs(bounds, page, startRow) {\n var _this = _super.call(this, bounds, page) || this;\n _this.startRow = startRow;\n return _this;\n }\n Object.defineProperty(PdfGridBeginPageLayoutEventArgs.prototype, \"startRowIndex\", {\n // Properties\n /**\n * Gets the `start row index`.\n * @private\n */\n get: function () {\n return this.startRow;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginPageLayoutEventArgs;\n}(BeginPageLayoutEventArgs));\nexport { PdfGridBeginPageLayoutEventArgs };\n/**\n * `PdfGridEndPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridEndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridEndPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndPageLayoutEventArgs(result) {\n return _super.call(this, result) || this;\n }\n return PdfGridEndPageLayoutEventArgs;\n}(EndPageLayoutEventArgs));\nexport { PdfGridEndPageLayoutEventArgs };\nvar RowLayoutResult = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `RowLayoutResult` class.\n * @private\n */\n function RowLayoutResult() {\n this.layoutedBounds = new RectangleF(0, 0, 0, 0);\n }\n Object.defineProperty(RowLayoutResult.prototype, \"isFinish\", {\n /**\n * Gets or sets a value indicating whether this instance `is finish`.\n * @private\n */\n get: function () {\n return this.bIsFinished;\n },\n set: function (value) {\n this.bIsFinished = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RowLayoutResult.prototype, \"bounds\", {\n /**\n * Gets or sets the `bounds`.\n * @private\n */\n get: function () {\n return this.layoutedBounds;\n },\n set: function (value) {\n this.layoutedBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n return RowLayoutResult;\n}());\nexport { RowLayoutResult };\n","import { print as printWindow, createElement, isNullOrUndefined, Browser, SvgRenderer } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap } from '@syncfusion/ej2-pdf-export';\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, controls, width, height) {\n var _this = this;\n var controlValue = this.getControlsValue(controls);\n width = width ? width : controlValue.width;\n height = height ? height : controlValue.height;\n var element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': width.toString(),\n 'height': height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n controlValue.svg.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(type === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(controlValue.svg)], { 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, width, 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 /**\n * To get the maximum size value\n * @param controls\n * @param name\n */\n ExportUtils.prototype.getControlsValue = function (controls) {\n var width = 0;\n var height = 0;\n var content = '';\n var svgObject = new SvgRenderer('').createSvg({\n id: 'Svg_Export_Element',\n width: 200, height: 200\n });\n controls.map(function (control) {\n var svg = control.svgObject.cloneNode(true);\n var groupEle = control.renderer.createGroup({\n style: 'transform: translateY(' + height + 'px)'\n });\n groupEle.appendChild(svg);\n width = Math.max(control.availableSize.width, width);\n height += control.availableSize.height;\n content += control.svgObject.outerHTML;\n svgObject.appendChild(groupEle);\n });\n svgObject.setAttribute('width', width + '');\n svgObject.setAttribute('height', height + '');\n return {\n 'width': width,\n 'height': height,\n 'svg': svgObject\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 } 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, appendChildElement } from '../common/utils/helper';\nimport { textElement, RectOption, createSvg, firstToLowerCase, titlePositionX, redrawElement } from '../common/utils/helper';\nimport { appendClipElement } 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 { Size, 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, resized } 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 __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableScrollbar\", 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 _this.chartid = 57723;\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 if (this.element.id === '') {\n var collection = document.getElementsByClassName('e-chart').length;\n this.element.id = 'chart_' + this.chartid + '_' + collection;\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 this.calculateStackValues();\n this.calculateBounds();\n this.renderElements();\n removeElement('chartmeasuretext');\n };\n /**\n * To calcualte the stack values\n */\n Chart.prototype.calculateStackValues = function () {\n var series;\n var isCalculateStacking = false;\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 };\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 * @private\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 if (!this.redraw) {\n this.element.appendChild(this.svgObject);\n }\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 = redrawElement(this.redraw, this.element.id + '_Secondary_Element') ||\n this.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n appendChildElement(this.element, tooltipDiv, this.redraw);\n // For userInteraction\n if (this.tooltip.enable) {\n appendChildElement(this.svgObject, this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }), this.redraw);\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 /**\n * @private\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);\n }\n }\n var options = {\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(appendClipElement(this.redraw, options, this.renderer));\n appendChildElement(this.svgObject, this.seriesElements, this.redraw);\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 appendChildElement(this.svgObject, this.indicatorElements, this.redraw);\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 appendChildElement(this.svgObject, this.trendLineElements, this.redraw);\n }\n };\n Chart.prototype.appendElementsAfterSeries = function (axisElement) {\n if (this.chartAreaType === 'PolarRadar') {\n appendChildElement(this.svgObject, this.yAxisElements, this.redraw);\n }\n appendChildElement(this.svgObject, axisElement, this.redraw);\n if (this.zoomModule && this.zoomSettings.enableScrollbar && this.scrollElement.childElementCount) {\n appendChildElement(getElement(this.element.id + '_Secondary_Element'), this.scrollElement, this.redraw);\n }\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Over', this.axisCollections);\n }\n if (!this.tooltip.enable) {\n appendChildElement(this.svgObject, this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }), this.redraw);\n }\n };\n Chart.prototype.applyZoomkit = function () {\n if (!this.redraw && this.zoomModule && this.zoomModule.isZoomed &&\n (!this.zoomSettings.enablePan || this.zoomModule.performedUI)) {\n this.zoomModule.applyZoomToolkit(this, this.axisCollections);\n }\n };\n /**\n * Render annotation perform here\n * @param redraw\n * @private\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 (render) {\n if (render === void 0) { render = true; }\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 (render && (!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 || this.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 subTitleHeight = 0;\n var titleWidth = 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 this.subTitleCollection = [];\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 if (this.subTitle) {\n var maxWidth = 0;\n for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n var titleText = _a[_i];\n titleWidth = measureText(titleText, this.titleStyle).width;\n maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n }\n this.subTitleCollection = getTitle(this.subTitle, this.subTitleStyle, maxWidth);\n subTitleHeight = (measureText(this.subTitle, this.subTitleStyle).height * this.subTitleCollection.length) +\n padding;\n }\n }\n var top = margin.top + subTitleHeight + 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, controls, width, height) {\n var exportChart = new ExportUtils(this);\n controls = controls ? controls : [this];\n exportChart.export(type, fileName, orientation, controls, width, height);\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 /**\n * Calculate the visible axis\n * @private\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 if (this.paretoSeriesModule) {\n axes = axes.concat(this.paretoSeriesModule.paretoAxes);\n }\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 if (this.scrollBarModule) {\n this.scrollBarModule.axes = axes;\n }\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 (this.scrollBarModule) {\n this.scrollBarModule.injectTo(axis, this);\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 case 'Pareto':\n this.visibleSeries.push(series);\n this.paretoSeriesModule.initSeries(series, this);\n continue;\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 var rect;\n var margin = this.margin;\n if (this.title) {\n var alignment = this.titleStyle.textAlignment;\n var getAnchor = alignment === 'Near' ? 'start' : alignment === 'Far' ? 'end' : 'middle';\n this.elementSize = measureText(this.title, this.titleStyle);\n rect = new Rect(margin.left, 0, this.availableSize.width - margin.left - margin.right, 0);\n var options = new TextOption(this.element.id + '_ChartTitle', titlePositionX(rect, this.titleStyle), this.margin.top + ((this.elementSize.height) * 3 / 4), getAnchor, this.titleCollection, '', 'auto');\n var element = redrawElement(this.redraw, this.element.id + '_ChartTitle', options, this.renderer) ||\n 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 if (this.subTitle) {\n this.renderSubTitle(options);\n }\n }\n };\n Chart.prototype.renderSubTitle = function (options) {\n var maxWidth = 0;\n var titleWidth = 0;\n var padding = 10;\n var rect;\n var anchor = function (alignment) {\n return alignment === 'Near' ? 'start' : alignment === 'Far' ? 'end' : 'middle';\n };\n var alignment = this.titleStyle.textAlignment;\n for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n var titleText = _a[_i];\n titleWidth = measureText(titleText, this.titleStyle).width;\n maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n }\n var subTitleElementSize = measureText(this.subTitle, this.subTitleStyle);\n rect = new Rect(alignment === 'Center' ? (options.x - maxWidth / 2) : alignment === 'Far' ? options.x - maxWidth : options.x, 0, maxWidth, 0);\n var subTitleOptions = new TextOption(this.element.id + '_ChartSubTitle', titlePositionX(rect, this.subTitleStyle), options.y * options.text.length + ((subTitleElementSize.height) * 3 / 4) + padding, anchor(this.subTitleStyle.textAlignment), this.subTitleCollection, '', 'auto');\n var element = redrawElement(this.redraw, this.element.id + '_ChartSubTitle', subTitleOptions, this.renderer) ||\n textElement(subTitleOptions, this.subTitleStyle, this.subTitleStyle.color || this.themeStyle.chartTitle, this.svgObject);\n element.setAttribute('aria-label', this.description || this.subTitle);\n element.setAttribute('tabindex', this.tabIndex.toString());\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 = redrawElement(this.redraw, this.element.id + '_ChartBorder', rect, this.renderer)\n || this.renderer.drawRectangle(rect);\n appendChildElement(this.svgObject, this.htmlObject, this.redraw);\n };\n /**\n * @private\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 appendChildElement(this.svgObject, this.htmlObject, this.redraw);\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 if (this.scrollBarModule) {\n this.scrollBarModule.destroy();\n }\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.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 svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n var rect = this.element.getBoundingClientRect();\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 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 var arg = {\n chart: this,\n name: resized,\n currentSize: new Size(0, 0),\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\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 _this.createChartSvg();\n arg.currentSize = _this.availableSize;\n _this.trigger(resized, arg);\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, {\n 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 /**\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 var id = (targetId === (this.element.id + '_ChartTitle') || targetId === (this.element.id + '_ChartSubTitle'));\n if (id && (event.target.textContent.indexOf('...') > -1)) {\n var title = (targetId === (this.element.id + '_ChartTitle')) ? this.title : this.subTitle;\n showTooltip(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 = this.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 if (value.type === 'Pareto') {\n modules.push({\n member: 'ColumnSeries',\n args: [_this, series]\n });\n modules.push({\n member: 'LineSeries',\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 if (zooming.enableScrollbar) {\n modules.push({\n member: 'ScrollBar',\n args: [this]\n });\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 (this.redraw) {\n return null;\n }\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 if (this.paretoSeriesModule) {\n for (var _b = 0, _c = this.paretoSeriesModule.paretoAxes; _b < _c.length; _b++) {\n var item = _c[_b];\n axis = item;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis.isStack100 = false;\n }\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 'axes':\n for (var _b = 0, _c = Object.keys(newProp.axes); _b < _c.length; _b++) {\n var index = _c[_b];\n refreshBounds = refreshBounds || this.axisChange(newProp.axes[index]);\n if (!newProp.axes[index].crosshairTooltip) {\n refreshBounds = true;\n }\n }\n break;\n case 'height':\n case 'width':\n this.createChartSvg();\n refreshBounds = true;\n break;\n case 'subTitle':\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 'subTitleStyle':\n if (newProp.subTitleStyle && (newProp.subTitleStyle.size || newProp.subTitleStyle.textOverflow)) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'dataSource':\n this.processData(false);\n refreshBounds = true;\n break;\n case 'series':\n var len = this.series.length;\n var seriesRefresh = false;\n var series = void 0;\n for (var i = 0; i < len; i++) {\n series = newProp.series[i];\n if (series && (series.dataSource || series.xName || series.yName || series.size ||\n series.high || series.low || series.open || series.close)) {\n seriesRefresh = true;\n }\n }\n if (seriesRefresh) {\n this.processData(false);\n refreshBounds = true;\n }\n break;\n case 'zoomSettings':\n if (newProp.zoomSettings.enableScrollbar || oldProp.zoomSettings.enableScrollbar) {\n refreshBounds = true;\n }\n renderer = true;\n break;\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 Property('')\n ], Chart.prototype, \"dataSource\", void 0);\n __decorate([\n Complex(Theme.chartTitleFont, Font)\n ], Chart.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('')\n ], Chart.prototype, \"subTitle\", void 0);\n __decorate([\n Complex(Theme.chartSubTitleFont, Font)\n ], Chart.prototype, \"subTitleStyle\", 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(true)\n ], Chart.prototype, \"enableAnimation\", 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, \"resized\", 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 Event()\n ], Chart.prototype, \"scrollStart\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"scrollEnd\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"scrollChanged\", 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, isChart) {\n if (isChart === void 0) { isChart = true; }\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 var type = axis.intervalType;\n switch (type) {\n case 'Years':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n break;\n case 'Quarter':\n interval = this.calculateNumericNiceInterval(axis, (totalDays / 365) * 4, size);\n break;\n case 'Months':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n break;\n case 'Weeks':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 7, 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 / 365) * 4, size);\n if (interval >= 1 && !isChart) {\n axis.actualIntervalType = 'Quarter';\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 / 7, size);\n if (interval >= 1 && !isChart) {\n axis.actualIntervalType = 'Weeks';\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, currentValue, previousValue) {\n var skeleton;\n var intervalType = axis.actualIntervalType;\n if (axis.skeleton) {\n return axis.skeleton;\n }\n if (intervalType === 'Years') {\n skeleton = axis.isChart ? (axis.valueType === 'DateTime' ? 'y' : 'yMMM') : 'y';\n }\n else if (intervalType === 'Quarter') {\n skeleton = 'yMMM';\n }\n else if (intervalType === 'Months') {\n skeleton = axis.isChart ? 'MMMd' : 'MMM';\n }\n else if (intervalType === 'Weeks') {\n skeleton = 'MEd';\n }\n else if (intervalType === 'Days') {\n skeleton = axis.isChart ? this.getDayFormat(axis, currentValue, previousValue) : 'MMMd';\n }\n else if (intervalType === 'Hours') {\n skeleton = axis.isChart ? (axis.valueType === 'DateTime' ? 'Hm' : 'EHm') : 'h';\n }\n else if (intervalType === 'Minutes') {\n skeleton = axis.isChart ? 'Hms' : 'hm';\n }\n else {\n skeleton = axis.isChart ? 'Hms' : 'hms';\n }\n return skeleton;\n };\n /**\n * Get intervalType month format\n * @param currentValue\n * @param previousValue\n */\n NiceInterval.prototype.getMonthFormat = function (currentValue, previousValue) {\n return ((new Date(currentValue).getFullYear() === new Date(previousValue).getFullYear()) ? 'MMM' : 'y MMM');\n };\n /**\n * Get intervalType day label format for the axis\n * @param axis\n * @param currentValue\n * @param previousValue\n */\n NiceInterval.prototype.getDayFormat = function (axis, currentValue, previousValue) {\n return (axis.valueType === 'DateTime' ?\n ((new Date(currentValue).getMonth() !== new Date(previousValue).getMonth()) ? 'MMMd' : 'd') : 'yMd');\n };\n /**\n * Find label format for axis\n * @param axis\n * @param currentValue\n * @param previousValue\n * @private\n */\n NiceInterval.prototype.findCustomFormats = function (axis, currentValue, previousValue) {\n var labelFormat = axis.labelFormat ? axis.labelFormat : '';\n if (axis.isChart && !axis.skeleton && axis.actualIntervalType === 'Months' && !labelFormat) {\n labelFormat = axis.valueType === 'DateTime' ? this.getMonthFormat(currentValue, previousValue) : 'yMMM';\n }\n return labelFormat;\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 { setRange, triggerLabelRender } from '../../common/utils/helper';\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';\nimport { extend, getValue } from '@syncfusion/ej2-base';\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, this.chart);\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.min = (axis.actualRange.min);\n this.max = (axis.actualRange.max);\n var minimum;\n var maximum;\n var interval = axis.actualRange.interval;\n if (!setRange(axis)) {\n var rangePadding = axis.getRangePadding(this.chart);\n minimum = new Date(this.min);\n maximum = new Date(this.max);\n var intervalType = axis.actualIntervalType;\n if (rangePadding === 'None') {\n this.min = minimum.getTime();\n this.max = 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.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minute, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), maximum.getMonth(), minimum.getDate(), minimum.getHours(), minute + (-interval), 0)).getTime();\n this.max = (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.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond, 0)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second + (-interval), 0)).getTime();\n this.max = (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.min;\n axis.actualRange.max = (axis.maximum != null) ? this.max : this.max;\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.min = (new Date(startYear - interval, 1, 1, 0, 0, 0)).getTime();\n this.max = (new Date(endYear + interval, 1, 1, 0, 0, 0)).getTime();\n }\n else {\n this.min = new Date(startYear, 0, 0, 0, 0, 0).getTime();\n this.max = 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.min = (new Date(minimum.getFullYear(), month, 0, 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), endMonth, new Date(maximum.getFullYear(), maximum.getMonth(), 0).getDate(), 23, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), month + (-interval), 1, 0, 0, 0)).getTime();\n this.max = (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.min = (new Date(minimum.getFullYear(), minimum.getMonth(), day, 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay, 23, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), day + (-interval), 0, 0, 0)).getTime();\n this.max = (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.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour + (-interval), 0, 0)).getTime();\n this.max = (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 * @param axis\n * @param chart\n * @private\n */\n DateTime.prototype.calculateVisibleLabels = function (axis, chart) {\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n var labelStyle;\n var previousValue;\n var axisLabels = axis.visibleLabels;\n if (!setRange(axis)) {\n tempInterval = this.alignRangeStart(axis, tempInterval, axis.visibleRange.interval, axis.actualIntervalType).getTime();\n }\n while (tempInterval <= axis.visibleRange.max) {\n labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n previousValue = axisLabels.length ? axis.visibleLabels[axisLabels.length - 1].value : tempInterval;\n axis.format = chart.intl.getDateFormat({\n format: this.findCustomFormats(axis, tempInterval, previousValue),\n type: firstToLowerCase(axis.skeletonType),\n skeleton: this.getSkeleton(axis, tempInterval, previousValue)\n });\n axis.startLabel = axis.format(new Date(axis.visibleRange.min));\n axis.endLabel = axis.format(new Date(axis.visibleRange.max));\n if (withIn(tempInterval, axis.visibleRange)) {\n triggerLabelRender(chart, tempInterval, axis.format(new Date(tempInterval)), labelStyle, axis);\n }\n tempInterval = this.increaseDateTimeInterval(axis, tempInterval, axis.visibleRange.interval).getTime();\n }\n //tooltip and crosshair formats for 'Months' and 'Days' interval types\n if ((axis.actualIntervalType === 'Months' || axis.actualIntervalType === 'Days') && axis.isChart) {\n axis.format = chart.intl.getDateFormat({\n format: axis.labelFormat || (axis.actualIntervalType === 'Months' && !axis.skeleton ? 'y MMM' : ''),\n type: firstToLowerCase(axis.skeletonType), skeleton: axis.skeleton || (axis.actualIntervalType === 'Days' ? 'MMMd' : '')\n });\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /** @private */\n DateTime.prototype.increaseDateTimeInterval = function (axis, value, interval) {\n var result = new Date(value);\n interval = Math.ceil(interval);\n axis.visibleRange.interval = interval;\n var intervalType = axis.actualIntervalType;\n switch (intervalType) {\n case 'Years':\n result.setFullYear(result.getFullYear() + interval);\n return result;\n case 'Quarter':\n result.setMonth(result.getMonth() + (3 * interval));\n return result;\n case 'Months':\n result.setMonth(result.getMonth() + interval);\n return result;\n case 'Weeks':\n result.setDate(result.getDate() + (interval * 7));\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 { getActualDesiredIntervalsCount, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn } from '../../common/utils/helper';\nimport { extend, getValue } from '@syncfusion/ej2-base';\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 / getActualDesiredIntervalsCount(size, axis)));\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 var labelStyle;\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 labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n if (withIn(tempInterval, axis.visibleRange) && axis.labels.length > 0) {\n position = Math.round(tempInterval);\n triggerLabelRender(this.chart, position, axis.labels[position] ? axis.labels[position].toString() : position.toString(), labelStyle, axis);\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\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 { getActualDesiredIntervalsCount, triggerLabelRender } from '../../common/utils/helper';\nimport { logBase, withIn } from '../../common/utils/helper';\nimport { extend, getValue } from '@syncfusion/ej2-base';\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 = getActualDesiredIntervalsCount(size, axis);\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 var labelStyle;\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 labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n if (withIn(tempInterval, axis.visibleRange)) {\n triggerLabelRender(this.chart, tempInterval, this.formatValue(axis, isCustomFormat, axisFormat, Math.pow(axis.logBase, tempInterval)), labelStyle, axis);\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\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 { triggerLabelRender } from '../../common/utils/helper';\nimport { withIn, firstToLowerCase } from '../../common/utils/helper';\nimport { extend, getValue } from '@syncfusion/ej2-base';\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 labelStyle;\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, null, null)\n });\n for (var i = 0; i < axis.labels.length; i++) {\n labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\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 triggerLabelRender(this.chart, i, axis.format(new Date(axis.labels.map(Number)[i])), labelStyle, axis);\n }\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\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, RectOption, PathOption, appendChildElement, appendClipElement, withIn } 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 /**\n * Finding x, y, width and height of the strip line\n * @param axis\n * @param strip line\n * @param seriesClipRect\n * @param startValue\n * @param segmentAxis\n */\n StripLine.prototype.measureStripLine = function (axis, stripline, seriesClipRect, startValue, segmentAxis) {\n var actualStart;\n var actualEnd;\n var orientation = axis.orientation;\n if (stripline.isRepeat && stripline.size !== null) {\n actualStart = startValue;\n actualEnd = null;\n }\n else {\n if (axis.valueType === 'DateTimeCategory') {\n var start = stripline.start;\n var end = stripline.end;\n actualStart = (start != null && typeof start !== 'number') ? axis.labels.indexOf((start).getTime().toString()) :\n start;\n actualEnd = (end != null && typeof end !== 'number') ? axis.labels.indexOf((end).getTime().toString()) : end;\n }\n else {\n actualStart = stripline.start === null ? null : +stripline.start;\n actualEnd = stripline.end === null ? null : +stripline.end;\n }\n }\n var rect = this.getFromTovalue(actualStart, actualEnd, stripline.size, stripline.startFromAxis, axis, stripline);\n var height = (orientation === 'Vertical') ? (rect.to - rect.from) * axis.rect.height : seriesClipRect.height;\n var width = (orientation === 'Horizontal') ? (rect.to - rect.from) * axis.rect.width : seriesClipRect.width;\n var x = (orientation === 'Vertical') ? seriesClipRect.x : ((rect.from * axis.rect.width) + axis.rect.x);\n var y = (orientation === 'Horizontal') ? seriesClipRect.y : (axis.rect.y + axis.rect.height -\n ((stripline.sizeType === 'Pixel' ? rect.from : rect.to) * axis.rect.height));\n if (stripline.isSegmented && stripline.segmentStart != null && stripline.segmentEnd != null && stripline.sizeType !== 'Pixel') {\n var segRect = this.getFromTovalue(+stripline.segmentStart, +stripline.segmentEnd, null, null, segmentAxis, stripline);\n if (segmentAxis.orientation === 'Vertical') {\n y = (segmentAxis.rect.y + segmentAxis.rect.height -\n (segRect.to * segmentAxis.rect.height));\n height = (segRect.to - segRect.from) * segmentAxis.rect.height;\n }\n else {\n x = ((segRect.from * segmentAxis.rect.width) + segmentAxis.rect.x);\n width = (segRect.to - segRect.from) * segmentAxis.rect.width;\n }\n }\n if ((height !== 0 && width !== 0) || (stripline.sizeType === 'Pixel' && (stripline.start !== null || stripline.startFromAxis))) {\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 * @param start\n * @param end\n * @param size\n * @param startFromAxis\n * @param axis\n * @param strip line\n */\n StripLine.prototype.getFromTovalue = function (start, end, size, startFromAxis, axis, stripline) {\n var from = (!stripline.isRepeat && startFromAxis) ? axis.visibleRange.min : start;\n var to = this.getToValue(Math.max(start, isNullOrUndefined(end) ? start : end), from, size, axis, end, stripline);\n from = this.findValue(from, axis);\n to = this.findValue(to, axis);\n return { from: valueToCoefficient(axis.isInversed ? to : from, axis), to: valueToCoefficient(axis.isInversed ? from : to, axis) };\n };\n /**\n * Finding end value of the strip line\n * @param to\n * @param from\n * @param size\n * @param axis\n * @param end\n * @param strip line\n */\n StripLine.prototype.getToValue = function (to, from, size, axis, end, stripline) {\n var sizeType = stripline.sizeType;\n var isEnd = (end === null);\n if (axis.valueType === 'DateTime') {\n var fromValue = new Date(from);\n if (sizeType === 'Auto') {\n sizeType = axis.actualIntervalType;\n size *= axis.visibleRange.interval;\n }\n switch (sizeType) {\n case 'Years':\n return (isEnd ? new Date(fromValue.setFullYear(fromValue.getFullYear() + size)) : to);\n case 'Months':\n return (isEnd ? new Date(fromValue.setMonth(fromValue.getMonth() + size)) : to);\n case 'Days':\n return (isEnd ? new Date(fromValue.setDate(fromValue.getDate() + size)) : to);\n case 'Hours':\n return (isEnd ? new Date(fromValue.setHours(fromValue.getHours() + size)) : to);\n case 'Minutes':\n return (isEnd ? new Date(fromValue.setMinutes(fromValue.getMinutes() + size)) : to);\n case 'Seconds':\n return (isEnd ? new Date(fromValue.setSeconds(fromValue.getSeconds() + size)) : to);\n default:\n return from;\n }\n }\n else {\n return stripline.sizeType === 'Pixel' ? from : (isEnd ? (from + size) : to);\n }\n };\n /**\n * To check the strip line values within range\n * @param value\n * @param axis\n */\n StripLine.prototype.findValue = function (value, axis) {\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 strip lines 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 seriesClipRect = chart.chartAxisLayoutPanel.seriesClipRect;\n var count = 0;\n var end = 0;\n var limit = 0;\n var startValue = 0;\n var segmentAxis = null;\n var range;\n var options = new RectOption(id + 'ClipRect', 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: chart.initialClipRect.x, y: chart.initialClipRect.y,\n width: chart.initialClipRect.width,\n height: chart.initialClipRect.height\n });\n var striplineGroup = chart.renderer.createGroup({\n id: id + 'collections',\n 'clip-path': 'url(#' + id + 'ClipRect' + ')'\n });\n striplineGroup.appendChild(appendClipElement(chart.redraw, options, chart.renderer));\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 if (stripline.isSegmented && stripline.segmentStart != null && stripline.segmentEnd != null &&\n stripline.sizeType !== 'Pixel') {\n segmentAxis = this.getSegmentAxis(axes, axis, stripline);\n }\n if (stripline.isRepeat && stripline.repeatEvery != null && stripline.size !== null && stripline.sizeType !== 'Pixel') {\n limit = (stripline.repeatUntil != null) ? ((axis.valueType === 'DateTime') ?\n stripline.repeatUntil.getTime() : +stripline.repeatUntil) : axis.actualRange.max;\n startValue = stripline.start;\n if ((stripline.startFromAxis && axis.valueType === 'DateTime' && stripline.sizeType === 'Auto') ||\n (stripline.start < axis.visibleRange.min)) {\n startValue = axis.visibleLabels[0].value === axis.visibleRange.min ? axis.visibleRange.min :\n axis.visibleLabels[0].value - (axis.valueType === 'DateTime' ? axis.dateTimeInterval :\n axis.visibleRange.interval);\n }\n startValue = stripline.startFromAxis && axis.valueType !== 'DateTime' ? axis.visibleRange.min : startValue;\n while (startValue < limit) {\n end = (startValue + (axis.valueType === 'DateTime' ? axis.dateTimeInterval * +stripline.size : stripline.size));\n range = withIn(end, axis.visibleRange);\n if ((startValue >= axis.visibleRange.min && startValue < axis.visibleRange.max) || range) {\n this.renderStripLineElement(axis, stripline, seriesClipRect, id, striplineGroup, chart, startValue, segmentAxis, count);\n }\n count++;\n startValue = this.getStartValue(axis, stripline, startValue);\n }\n }\n else {\n this.renderStripLineElement(axis, stripline, seriesClipRect, id, striplineGroup, chart, null, segmentAxis, count);\n count++;\n }\n }\n }\n }\n appendChildElement(chart.svgObject, striplineGroup, chart.redraw);\n };\n /**\n * To draw the single line strip line\n * @param strip line\n * @param rect\n * @param id\n * @param parent\n * @param chart\n * @param axis\n */\n StripLine.prototype.renderPath = function (stripline, rect, id, parent, chart, axis) {\n var d = (axis.orientation === 'Vertical') ? ('M' + rect.x + ' ' + rect.y + ' ' + 'L' + (rect.x + rect.width)\n + ' ' + rect.y) :\n ('M' + rect.x + ' ' + rect.y + ' ' + 'L' + rect.x + ' ' + (rect.y + rect.height));\n parent.appendChild(chart.renderer.drawPath(new PathOption(id, '', stripline.size, stripline.color, stripline.opacity, stripline.dashArray, d)));\n };\n ;\n /**\n * To draw the rectangle\n * @param strip line\n * @param rect\n * @param id\n * @param parent\n * @param chart\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, '', stripline.dashArray)));\n };\n /**\n * To create the text on strip line\n * @param strip line\n * @param rect\n * @param id\n * @param parent\n * @param chart\n * @param axis\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 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 anchor = 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 anchor = stripline.verticalAlignment;\n }\n textElement(new TextOption(id, tx, ty, anchor, stripline.text, 'rotate(' + rotation + ' ' + tx + ',' + ty + ')', 'middle'), stripline.textStyle, stripline.textStyle.color, parent);\n };\n /**\n * To find the next value of the recurrence strip line\n * @param axis\n * @param stripline\n * @param startValue\n */\n StripLine.prototype.getStartValue = function (axis, stripline, startValue) {\n if (axis.valueType === 'DateTime') {\n return this.getToValue(null, startValue, +stripline.repeatEvery, axis, null, stripline);\n }\n else {\n return startValue + (+stripline.repeatEvery);\n }\n };\n /**\n * Finding segment axis for segmented strip line\n * @param axes\n * @param axis\n * @param strip line\n */\n StripLine.prototype.getSegmentAxis = function (axes, axis, stripline) {\n var segment;\n if (stripline.segmentAxisName == null) {\n return (axis.orientation === 'Horizontal') ? axes[1] : axes[0];\n }\n else {\n for (var i = 0; i < axes.length; i++) {\n if (stripline.segmentAxisName === axes[i].name) {\n segment = axes[i];\n }\n }\n return segment;\n }\n };\n /**\n * To render strip line on chart\n * @param axis\n * @param stripline\n * @param seriesClipRect\n * @param id\n * @param striplineGroup\n * @param chart\n * @param startValue\n * @param segmentAxis\n * @param count\n */\n StripLine.prototype.renderStripLineElement = function (axis, stripline, seriesClipRect, id, striplineGroup, chart, startValue, segmentAxis, count) {\n var rect = this.measureStripLine(axis, stripline, seriesClipRect, startValue, segmentAxis);\n if (stripline.sizeType === 'Pixel') {\n this.renderPath(stripline, rect, id + 'path_' + count, striplineGroup, chart, axis);\n }\n else {\n if (rect.height !== 0 && rect.width !== 0) {\n this.renderRectangle(stripline, rect, id + 'rect_' + count, striplineGroup, chart);\n }\n }\n if (stripline.text !== '') {\n this.renderText(stripline, rect, id + 'text_' + count, striplineGroup, chart, axis);\n }\n };\n /**\n * To find the factor of the text\n * @param 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 /**\n * To find the start value of the text\n * @param xy\n * @param size\n * @param textAlignment\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, pathAnimation, getElement } 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 element = getElement(options.id);\n var previousDirection = element ? element.getAttribute('d') : null;\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 pathAnimation(element, options.d, series.chart.redraw, previousDirection);\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 && 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 var markerWidth = (series.marker && series.marker.width) ? series.marker.width : 0;\n var markerHeight = (series.marker && series.marker.height) ? series.marker.height : 0;\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 - markerWidth, point.symbolLocations[0].y - markerHeight, 2 * markerWidth, 2 * markerHeight));\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 isPolar = (series.chart && series.chart.chartAreaType === 'PolarRadar');\n var isDrop = (series.emptyPointSettings && series.emptyPointSettings.mode === 'Drop');\n var getCoordinate = isPolar ? 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 = isDrop ? prevPoint : null;\n startPoint = isDrop ? startPoint : 'M';\n point.symbolLocations = [];\n }\n }\n if (isPolar) {\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 === undefined ? series.category : 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 { PathOption, appendChildElement, redrawElement, pathAnimation, valueToCoefficient } from '../../common/utils/helper';\nimport { getAnimationFunction, getPoint, Rect, getMinPointsDelta } 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 === null) ? ((series.type === 'Histogram') ? 1 : 0.7) :\n 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 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 if (series.type === 'Histogram') {\n point.minimum = +point.x - series.histogramValues.binWidth / 2;\n point.maximum = +point.x + series.histogramValues.binWidth / 2;\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 if (series.type === 'RangeColumn') {\n point.symbolLocations.push({\n x: rect.x + (rect.width) / 2,\n y: rect.y + rect.height\n });\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 if (series.type === 'RangeColumn') {\n point.symbolLocations.push({\n x: rect.x,\n y: rect.y + rect.height / 2\n });\n }\n };\n /**\n * To render the marker for the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.renderMarker = function (series) {\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.render(series);\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 chart = series.chart;\n var check = 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' ? chart.element.id + '_Indicator_' + series.index + '_' + series.name +\n '_Point_' + point.index : chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n var previousElement = redrawElement(chart.redraw, name);\n var previousDirection = previousElement ? previousElement.getAttribute('d') : '';\n var options = new PathOption(name, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n var element = 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 appendChildElement(series.seriesElement, element, chart.redraw);\n pathAnimation(element, direction, chart.redraw, previousDirection);\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 this.renderMarker(series);\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, appendClipElement, pathAnimation } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\nimport { RectOption, getElement } 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 attributeOptions;\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 attributeOptions = {\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 pathAnimation(getElement(attributeOptions.id), attributeOptions.d, chart.redraw);\n series.seriesElement.appendChild(chart.renderer.drawPath(attributeOptions));\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 var options;\n if ((endPointLocation.x - startPointLocation.x > 0) && (endPointLocation.y - startPointLocation.y > 0)) {\n options = 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 series.seriesElement.appendChild(appendClipElement(series.chart.redraw, options, series.chart.renderer));\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 isDropMode = (series.emptyPointSettings && series.emptyPointSettings.mode === 'Drop');\n var borderWidth = series.border ? series.border.width : 0;\n var borderColor = series.border ? series.border.color : 'transparent';\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 && !isDropMode) {\n direction += _this.getAreaEmptyDirection({ 'x': currentXValue, 'y': origin }, startPoint, series, isInverted, getCoordinate);\n startPoint = null;\n }\n _this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n });\n this.appendLinePath(new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, borderWidth, borderColor, 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 this.renderMarker(series);\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 } from '../../common/utils/helper';\nimport { measureText, appendChildElement } 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 appendChildElement(chart.svgObject, axisElement, chart.redraw);\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 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 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, xAxis, yAxis, inverted) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') > -1) {\n this.columnDrawTypeRender(series, xAxis, yAxis);\n }\n else {\n series.chart[seriesType + 'SeriesModule'].render(series, xAxis, yAxis, inverted);\n }\n };\n /**\n * Render Column DrawType.\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.columnDrawTypeRender = function (series, xAxis, yAxis) {\n var options;\n var argsData;\n var startAngle;\n var endAngle;\n var itemCurrentXPos;\n var radius;\n var inversedValue;\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 min = xAxis.actualRange.min;\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 isRangeColumn = series.drawType === 'RangeColumn';\n var isPolar = series.type === 'Polar';\n var isLogAxis = yAxis.valueType === 'Logarithmic';\n var isStacking = series.drawType === 'StackingColumn';\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 = xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks' ? 0 : interval / 2;\n var rangeInterval = xAxis.valueType === 'DateTime' ? xAxis.dateTimeInterval : 1;\n this.getSeriesPosition(series);\n var position = xAxis.isInversed ? (series.rectCount - 1 - series.position) : series.position;\n do {\n sumofYValues += rangeInterval;\n min += rangeInterval;\n } while (min <= xAxis.actualRange.max - (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 = xAxis.isInversed ? (xAxis.visibleRange.max - point.xValue) :\n point.xValue - xAxis.visibleRange.min;\n itemCurrentXPos = (inversedValue) +\n ((interval / series.rectCount) * position - ticks) + (sumofYValues / 360 * xAxis.startAngle);\n itemCurrentXPos = (((itemCurrentXPos) / (sumofYValues)));\n startAngle = 2 * Math.PI * (itemCurrentXPos + xAxis.startAngle);\n endAngle = 2 * Math.PI * ((itemCurrentXPos + 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 (isStacking || isRangeColumn) {\n startValue = isRangeColumn ? point.low : series.stackedValues.startValues[point.index];\n endValue = isRangeColumn ? point.high : series.stackedValues.endValues[point.index];\n endValue = (isLogAxis ? logBase(endValue === 0 ? 1 : endValue, yAxis.logBase) : endValue);\n endValue = endValue > yAxis.actualRange.max ? yAxis.actualRange.max : endValue;\n radius = startValue === endValue ? 0 : series.chart.radius * valueToCoefficient(endValue, 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 && yAxis.visibleRange.min !== 0) ? yAxis.visibleRange.min : startValue, 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 (isPolar) {\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 > yAxis.actualRange.max ? yAxis.actualRange.max : point.yValue;\n radius = series.chart.radius *\n valueToCoefficient((isLogAxis ? logBase(endValue, yAxis.logBase) : endValue), 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 (isPolar) {\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 (isPolar) {\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 if (isRangeColumn) {\n point.symbolLocations.push({\n x: centerX + innerRadius * Math.cos((startAngle + (endAngle - startAngle) / 2)),\n y: centerY + innerRadius * Math.sin((startAngle + (endAngle - startAngle) / 2))\n });\n }\n }\n else {\n point.symbolLocations.push({ x: (x1 + x2) / 2, y: (y1 + y2) / 2 });\n if (isRangeColumn) {\n point.symbolLocations.push({ x: (dEndX + dStartX) / 2, y: (dEndY + dStartY) / 2 });\n }\n }\n }\n }\n }\n this.renderMarker(series);\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, xAxis, yAxis, inverted) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') === -1) {\n series.chart[seriesType + 'SeriesModule'].render(series, xAxis, yAxis, inverted);\n }\n else {\n this.columnDrawTypeRender(series, xAxis, yAxis);\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 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 this.renderMarker(series);\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, pathAnimation, getElement } 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 element = getElement(options.id);\n var previousDirection = element ? element.getAttribute('d') : null;\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 pathAnimation(element, direction, series.chart.redraw, previousDirection);\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 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 this.renderMarker(series);\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, getElement } from '../../common/utils/helper';\nimport { Rect, markerAnimate, TransformToVisible, appendChildElement } 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 marker = series.marker;\n var visiblePoints = series.points;\n var argsData;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n var startLocation;\n var redraw = series.chart.redraw;\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n startLocation = (redraw && point.symbolLocations) ? point.symbolLocations[0] : null;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\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 this.refresh(series, point, argsData, startLocation);\n }\n else {\n point.marker = { visible: true };\n }\n }\n }\n };\n /**\n * To append scatter element\n * @param series\n * @param point\n * @param argsData\n * @param startLocation\n */\n ScatterSeries.prototype.refresh = function (series, point, argsData, startLocation) {\n var chart = series.chart;\n var circlePath;\n var previousPath;\n var marker = series.marker;\n var shapeOption = new PathOption(chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n if (chart.redraw && getElement(shapeOption.id)) {\n circlePath = argsData.shape === 'Circle' ? 'c' : '';\n previousPath = getElement(shapeOption.id).getAttribute('d');\n }\n appendChildElement(series.seriesElement, drawSymbol(point.symbolLocations[0], argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + point.yValue.toString()), chart.redraw, true, circlePath + 'x', circlePath + 'y', startLocation, previousPath);\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 /**\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 this.renderMarker(series);\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 } from '../../common/utils/helper';\nimport { subArraySum, getElement, appendChildElement, redrawElement } 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 var redraw = series.chart.redraw;\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 if (redraw && getElement(options.id)) {\n direction = getElement(options.id).getAttribute('d');\n }\n var element = (redrawElement(redraw, options.id, options, series.chart.renderer) ||\n series.chart.renderer.drawPath(options));\n element.style.visibility = (series.animation.enable && series.chart.animateSeries) ? 'hidden' : 'visible';\n appendChildElement(series.seriesElement, element, redraw, true, null, null, null, direction);\n this.renderMarker(series);\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.processInternalData = 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, pathAnimation, getElement } 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 pathAnimation(getElement(options.id), direction, series.chart.redraw);\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, xAxis, yAxis, inverted) {\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 (yAxis.isInversed) {\n var temp = low;\n low = high;\n high = temp;\n }\n var lowPoint = getPoint(point.xValue, low, xAxis, yAxis, inverted);\n var highPoint = getPoint(point.xValue, high, xAxis, yAxis, inverted);\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 (!inverted) {\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 } from '../../common/utils/helper';\nimport { markerAnimate, appendChildElement, animateRedrawElement } 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 var element;\n var startLocation;\n var redraw = series.chart.redraw;\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 startLocation = redraw ? bubblePoint.symbolLocations[0] : null;\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 element = drawSymbol(bubblePoint.symbolLocations[0], 'Circle', new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, bubblePoint.x.toString() + ':' + bubblePoint.yValue.toString());\n appendChildElement(series.seriesElement, element, redraw);\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 if (redraw) {\n animateRedrawElement(element, 300, startLocation, bubblePoint.symbolLocations[0], 'cx', 'cy');\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 { sum, PathOption, getPoint, templateAnimate } from '../../common/utils/helper';\nimport { ColumnSeries } from './column-series';\n/**\n * `HistogramSeries` Module used to render the histogram series.\n */\nvar HistogramSeries = /** @class */ (function (_super) {\n __extends(HistogramSeries, _super);\n function HistogramSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Histogram series.\n * @return {void}\n * @private\n */\n HistogramSeries.prototype.render = function (series) {\n _super.prototype.render.call(this, series);\n if (series.showNormalDistribution) {\n this.renderNormalDistribution(series);\n }\n };\n /**\n * To calculate bin interval for Histogram series.\n * @return number\n * @private\n */\n HistogramSeries.prototype.calculateBinInterval = function (yValues, series) {\n var mean = sum(yValues) / yValues.length;\n var sumValue = 0;\n for (var _i = 0, yValues_1 = yValues; _i < yValues_1.length; _i++) {\n var value = yValues_1[_i];\n sumValue += (value - mean) * (value - mean);\n }\n series.histogramValues.mean = mean;\n series.histogramValues.sDValue = Math.round(Math.sqrt(sumValue / yValues.length - 1));\n series.histogramValues.binWidth = series.binInterval ||\n Math.round((3.5 * series.histogramValues.sDValue) / Math.pow(yValues.length, 1 / 3));\n };\n /**\n * Add data points for Histogram series.\n * @return {object[]}\n * @private\n */\n HistogramSeries.prototype.processInternalData = function (data, series) {\n var updatedData = [];\n var yValues = [];\n var binWidth;\n Object.keys(data).forEach(function (key) {\n yValues.push(data[key][series.yName]);\n });\n series.histogramValues = {\n yValues: yValues\n };\n var min = Math.min.apply(Math, series.histogramValues.yValues);\n this.calculateBinInterval(series.histogramValues.yValues, series);\n binWidth = series.histogramValues.binWidth;\n var yCount;\n for (var j = 0; j < data.length;) {\n yCount = yValues.filter(function (y) { return y >= min && y < (min + (binWidth)); }).length;\n updatedData.push((_a = {\n 'x': min + binWidth / 2\n },\n _a[series.yName] = yCount,\n _a));\n min = min + binWidth;\n j += yCount;\n }\n return updatedData;\n var _a;\n };\n /**\n * Render Normal Distribution for Histogram series.\n * @return {void}\n * @private\n */\n HistogramSeries.prototype.renderNormalDistribution = function (series) {\n var min = series.xAxis.actualRange.min;\n var max = series.xAxis.actualRange.max;\n var xValue;\n var pointLocation;\n var yValue;\n var direction = '';\n var startPoint = 'M';\n var yValuesCount = series.histogramValues.yValues.length;\n var binWidth = series.histogramValues.binWidth;\n var mean = series.histogramValues.mean;\n var sDValue = series.histogramValues.sDValue;\n var pointsCount = 500;\n var del = (max - min) / (pointsCount - 1);\n var distributionLine;\n for (var i = 0; i < pointsCount; i++) {\n xValue = min + i * del;\n yValue = Math.exp(-(xValue - mean) * (xValue - mean) / (2 * sDValue * sDValue)) /\n (sDValue * Math.sqrt(2 * Math.PI));\n pointLocation = getPoint(xValue, yValue * binWidth * yValuesCount, series.xAxis, series.yAxis, series.chart.requireInvertedAxis, series);\n direction += startPoint + ' ' + (pointLocation.x) + ' ' + (pointLocation.y) + ' ';\n startPoint = 'L';\n }\n distributionLine = series.chart.renderer.drawPath(new PathOption(series.chart.element.id + '_Series_' + series.index + '_NDLine', 'transparent', 2, series.chart.themeStyle.errorBar, series.opacity, series.dashArray, direction));\n distributionLine.style.visibility = (series.animation.enable && series.chart.animateSeries) ?\n 'hidden' : 'visible';\n series.seriesElement.appendChild(distributionLine);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HistogramSeries.prototype.doAnimation = function (series) {\n _super.prototype.doAnimation.call(this, series);\n if (series.showNormalDistribution) {\n templateAnimate(series.seriesElement.lastElementChild, series.animation.duration, 500, 'FadeIn');\n }\n };\n /**\n * Get module name.\n */\n HistogramSeries.prototype.getModuleName = function () {\n return 'HistogramSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the histogram series.\n * @return {void}\n * @private\n */\n HistogramSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return HistogramSeries;\n}(ColumnSeries));\nexport { HistogramSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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, appendClipElement } 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 var options = 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 var clipRectElement = appendClipElement(chart.redraw, options, chart.renderer);\n //defines the clip rect element\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 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 var scrollBarHeight = axis.zoomingScrollBar && axis.zoomingScrollBar.svgObject ? axis.scrollBarHeight : 0;\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) :\n axisRect.y + scrollBarHeight;\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 + (!islabelInside ? scrollBarHeight : 0), this.elementSize.width + padding * 2, this.elementSize.height + padding * 2);\n if (axis.opposedPosition) {\n tooltipRect.y = islabelInside ? axisRect.y : axisRect.y -\n (this.elementSize.height + padding * 2 + arrowPadding) - scrollBarHeight;\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 scrollBarHeight = scrollBarHeight * (axis.opposedPosition ? 1 : -1);\n this.arrowLocation = new ChartLocation(axisRect.x, this.valueY);\n var width = islabelInside ? axisRect.x - scrollBarHeight :\n axisRect.x - (this.elementSize.width) - (padding * 2 + arrowPadding);\n tooltipRect = new Rect(width + scrollBarHeight, 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 :\n axisRect.x + arrowPadding + scrollBarHeight;\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})();\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 { NotifyPropertyChanges, Property, Event, Complex } from '@syncfusion/ej2-base';\nimport { SvgRenderer, extend, compile as templateComplier, Component } from '@syncfusion/ej2-base';\nimport { ChildProperty, createElement, remove, Browser, Animation } from '@syncfusion/ej2-base';\nimport { getTooltipThemeColor } from './interface';\nimport { Size, Rect, Side, measureText, getElement, findDirection, drawSymbol, textElement } from './helper';\nimport { removeElement, TextOption, TooltipLocation, PathOption } from './helper';\n/**\n * Configures the fonts in charts.\n * @private\n */\nvar TextStyle = /** @class */ (function (_super) {\n __extends(TextStyle, _super);\n function TextStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], TextStyle.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], TextStyle.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], TextStyle.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], TextStyle.prototype, \"opacity\", void 0);\n return TextStyle;\n}(ChildProperty));\nexport { TextStyle };\n/**\n * Configures the borders in the chart.\n * @private\n */\nvar TooltipBorder = /** @class */ (function (_super) {\n __extends(TooltipBorder, _super);\n function TooltipBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], TooltipBorder.prototype, \"width\", void 0);\n return TooltipBorder;\n}(ChildProperty));\nexport { TooltipBorder };\n/**\n * Configures the borders in the chart.\n * @private\n */\nvar AreaBounds = /** @class */ (function (_super) {\n __extends(AreaBounds, _super);\n function AreaBounds() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"y\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"height\", void 0);\n return AreaBounds;\n}(ChildProperty));\nexport { AreaBounds };\n/**\n * Configures the borders in the chart.\n * @private\n */\nvar ToolLocation = /** @class */ (function (_super) {\n __extends(ToolLocation, _super);\n function ToolLocation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"y\", void 0);\n return ToolLocation;\n}(ChildProperty));\nexport { ToolLocation };\n/**\n * Represents the Tooltip control.\n * ```html\n *
\n * \n * ```\n * @private\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler.\n * @private.\n */\n Tooltip.prototype.preRender = function () {\n this.initPrivateVariable();\n this.removeSVG();\n this.createTooltipElement();\n };\n Tooltip.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.themeStyle = getTooltipThemeColor(this.theme);\n this.formattedText = [];\n this.padding = 5;\n this.isFirst = true;\n this.markerPoint = [];\n };\n Tooltip.prototype.removeSVG = function () {\n var svgObject = document.getElementById(this.element.id + '_svg');\n var templateObject = document.getElementById(this.element.id + 'parent_template');\n if (svgObject && svgObject.parentNode) {\n remove(svgObject);\n }\n if (templateObject && templateObject.parentNode) {\n remove(templateObject);\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Tooltip.prototype.render = function () {\n this.fadeOuted = false;\n if (!this.template) {\n this.renderText(this.isFirst);\n var argsData = {\n cancel: false, name: 'tooltipRender', tooltip: this\n };\n this.trigger('tooltipRender', argsData);\n var markerSide = this.renderTooltipElement(this.areaBounds, this.location);\n this.drawMarker(markerSide.isBottom, markerSide.isRight, this.markerSize);\n }\n else {\n this.updateTemplateFn();\n this.createTemplate(this.areaBounds, this.location);\n }\n this.trigger('loaded', { tooltip: this });\n var element = document.getElementById('chartmeasuretext');\n if (element) {\n if (typeof element.remove === 'function') {\n element.remove();\n }\n else {\n element.parentNode.removeChild(element);\n }\n }\n };\n Tooltip.prototype.createTooltipElement = function () {\n this.textElements = [];\n if (!this.template || this.shared) {\n // SVG element for tooltip\n var svgObject = this.renderer.createSvg({ id: this.element.id + '_svg' });\n this.element.appendChild(svgObject);\n // Group to hold text and path.\n var groupElement = this.renderer.createGroup({ id: this.element.id + '_group' });\n svgObject.appendChild(groupElement);\n var pathElement = this.renderer.drawPath({\n 'id': this.element.id + '_path', 'stroke-width': this.border.width,\n 'fill': this.fill || this.themeStyle.tooltipFill, 'opacity': this.opacity,\n 'stroke': this.border.color\n });\n groupElement.appendChild(pathElement);\n }\n };\n Tooltip.prototype.drawMarker = function (isBottom, isRight, size) {\n if (this.shapes.length <= 0) {\n return null;\n }\n var shapeOption;\n var count = 0;\n var markerGroup = this.renderer.createGroup({ id: this.element.id + '_trackball_group' });\n var groupElement = getElement(this.element.id + '_group');\n var x = (this.marginX * 2) + (size / 2) + (isRight ? this.arrowPadding : 0);\n for (var _i = 0, _a = this.shapes; _i < _a.length; _i++) {\n var shape = _a[_i];\n shapeOption = new PathOption(this.element.id + '_Trackball_' + count, this.palette[count], 1, '#cccccc', 1, null);\n markerGroup.appendChild(drawSymbol(new TooltipLocation(x, this.markerPoint[count] - this.padding + (isBottom ? this.arrowPadding : 0)), shape, new Size(size, size), '', shapeOption, null));\n count++;\n }\n groupElement.appendChild(markerGroup);\n };\n Tooltip.prototype.renderTooltipElement = function (areaBounds, location) {\n var tooltipDiv = getElement(this.element.id);\n var arrowLocation = new TooltipLocation(0, 0);\n var tipLocation = new TooltipLocation(0, 0);\n var textHeights;\n var svgObject = getElement(this.element.id + '_svg');\n var groupElement = getElement(this.element.id + '_group');\n var pathElement = getElement(this.element.id + '_path');\n var rect;\n var isTop = false;\n var isLeft = false;\n var isBottom = false;\n var x = 0;\n var y = 0;\n this.tipRadius = 1;\n if (this.header !== '') {\n this.elementSize.height += this.marginY;\n }\n if (this.content.length > 1) {\n rect = this.sharedTooltipLocation(areaBounds, this.location.x, this.location.y);\n isTop = true;\n }\n else {\n rect = this.tooltipLocation(areaBounds, location, arrowLocation, tipLocation);\n if (!this.inverted) {\n isTop = (rect.y < (location.y + this.clipBounds.y));\n isBottom = !isTop;\n y = (isTop ? 0 : this.arrowPadding);\n }\n else {\n isLeft = (rect.x < (location.x + this.clipBounds.x));\n x = (isLeft ? 0 : this.arrowPadding);\n }\n }\n if (this.header !== '') {\n var headerSize = measureText(this.header, this.textStyle).height + (this.marginY * 2) +\n (isBottom ? this.arrowPadding : 0); //header padding;\n var xLength = (this.marginX * 3) + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0);\n var direction = 'M ' + xLength + ' ' + headerSize +\n 'L ' + (rect.width + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0) - (this.marginX * 2)) +\n ' ' + headerSize;\n var pathElement_1 = this.renderer.drawPath({\n 'id': this.element.id + '_header_path', 'stroke-width': 1,\n 'fill': null, 'opacity': 0.8, 'stroke': this.themeStyle.tooltipHeaderLine, 'd': direction\n });\n groupElement.appendChild(pathElement_1);\n }\n var start = this.border.width / 2;\n var pointRect = new Rect(start + x, start + y, rect.width - start, rect.height - start);\n groupElement.setAttribute('opacity', '1');\n if (this.enableAnimation && !this.shared && !this.isFirst) {\n this.animateTooltipDiv(tooltipDiv, rect);\n }\n else {\n this.updateDiv(tooltipDiv, rect.x, rect.y);\n }\n svgObject.setAttribute('height', (rect.height + this.border.width + (!((!this.inverted)) ? 0 : this.arrowPadding)).toString());\n svgObject.setAttribute('width', (rect.width + this.border.width + (((!this.inverted)) ? 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 if (this.enableShadow) {\n pathElement.setAttribute('filter', Browser.isIE ? '' : 'url(#chart_shadow_tooltip)');\n var shadow = '';\n shadow += '';\n shadow += '';\n var defElement = this.renderer.createDefs();\n defElement.setAttribute('id', 'SVG_tooltip_definition');\n groupElement.appendChild(defElement);\n defElement.innerHTML = shadow;\n }\n pathElement.setAttribute('stroke', this.border.color);\n this.changeText(new TooltipLocation(x, y), isBottom, !isLeft && !isTop && !isBottom, rect);\n return new Side(isBottom, !isLeft && !isTop && !isBottom);\n };\n Tooltip.prototype.changeText = function (point, isBottom, isRight, rect) {\n var element = document.getElementById(this.element.id + '_text');\n if (isBottom) {\n element.setAttribute('transform', 'translate(0,' + this.arrowPadding + ')');\n }\n if (isRight) {\n element.setAttribute('transform', 'translate(' + this.arrowPadding + ' 0)');\n }\n };\n Tooltip.prototype.findFormattedText = function () {\n this.formattedText = [];\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n this.formattedText = this.formattedText.concat(this.header);\n }\n this.formattedText = this.formattedText.concat(this.content);\n };\n Tooltip.prototype.renderText = function (isRender) {\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.textStyle, null, true)[key];\n var groupElement = getElement(this.element.id + '_group');\n var tspanElement;\n var tspanStyle = '';\n var line;\n var tspanOption;\n this.findFormattedText();\n var headerContent = this.header.replace(//g, '').replace(/<\\/b>/g, '').trim();\n var headerSpace = (headerContent !== '') ? this.marginY : 0;\n var isRow = true;\n var isColumn = true;\n this.markerPoint = [];\n var markerSize = (this.shapes.length > 0) ? 10 : 0;\n var markerPadding = (this.shapes.length > 0) ? 5 : 0;\n var spaceWidth = 4;\n var fontSize = '13px';\n var dy = (22 / parseFloat(fontSize)) * (parseFloat(font.size));\n if (!isRender) {\n removeElement(this.element.id + '_text');\n removeElement(this.element.id + '_header_path');\n removeElement(this.element.id + '_trackball_group');\n removeElement('SVG_tooltip_definition');\n }\n var options = new TextOption(this.element.id + '_text', this.marginX * 2, (this.marginY * 2 + this.padding * 2 + (this.marginY === 2 ? 3 : 0)), 'start', '');\n var parentElement = textElement(options, font, null, groupElement);\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) || (headerContent === '')) {\n this.markerPoint.push((headerContent !== '' ? (this.marginY) : 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.marginX * 2) + (markerSize + markerPadding),\n dy: dy + ((isColumn) ? headerSpace : 0), fill: '' };\n headerSpace = null;\n }\n else {\n if (isRow && isColumn) {\n tspanOption = { x: (headerContent === '') ? ((this.marginX * 2) + (markerSize + markerPadding))\n : (this.marginX * 2) };\n }\n else {\n tspanOption = {};\n }\n }\n isColumn = false;\n tspanElement = this.renderer.createTSpan(tspanOption, '');\n parentElement.appendChild(tspanElement);\n if (line.indexOf('') > -1) {\n tspanStyle = 'font-weight:bold';\n font.fontWeight = 'bold';\n (tspanElement).setAttribute('fill', this.textStyle.color || this.themeStyle.tooltipBoldLabel);\n }\n else {\n tspanStyle = '';\n font.fontWeight = 'Normal';\n (tspanElement).setAttribute('fill', this.textStyle.color || this.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 this.elementSize = new Size(width + (width > 0 ? (2 * this.marginX) : 0), height);\n this.elementSize.width += (markerSize + markerPadding); // marker size + marker Spacing\n var element = (parentElement.childNodes[0]);\n if (headerContent !== '' && element) {\n font.fontWeight = 'bold';\n var width_1 = (this.elementSize.width + (2 * this.padding)) / 2 - measureText(headerContent, font).width / 2;\n element.setAttribute('x', width_1.toString());\n }\n };\n Tooltip.prototype.createTemplate = function (areaBounds, location) {\n var argsData = { cancel: false, name: 'tooltipRender', tooltip: this };\n this.trigger('tooltipRender', argsData);\n var parent = document.getElementById(this.element.id);\n var firstElement = parent.firstElementChild;\n if (firstElement) {\n if (typeof firstElement.remove === 'function') {\n firstElement.remove();\n }\n else {\n firstElement.parentNode.removeChild(firstElement);\n }\n }\n if (!argsData.cancel) {\n var templateElement = this.templateFn(this.data);\n var elem = createElement('div', { id: this.element.id + 'parent_template' });\n while (templateElement && templateElement.length > 0) {\n elem.appendChild(templateElement[0]);\n }\n parent.appendChild(elem);\n var rect = this.element.getBoundingClientRect();\n this.padding = 0;\n this.elementSize = new Size(rect.width, rect.height);\n var tooltipRect = this.tooltipLocation(areaBounds, location, new TooltipLocation(0, 0), new TooltipLocation(0, 0));\n if (this.enableAnimation && !this.shared && !this.isFirst) {\n this.animateTooltipDiv(this.element, tooltipRect);\n }\n else {\n this.updateDiv(this.element, tooltipRect.x, tooltipRect.y);\n }\n }\n else {\n getElement(this.element.id + '_tooltip').remove();\n }\n };\n Tooltip.prototype.sharedTooltipLocation = function (bounds, x, y) {\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var tooltipRect = new Rect(x + 2 * this.padding, y - height - this.padding, width, height);\n if (tooltipRect.y < bounds.y) {\n tooltipRect.y += (tooltipRect.height + 2 * this.padding);\n }\n if (tooltipRect.x + tooltipRect.width > bounds.x + bounds.width) {\n tooltipRect.x -= (tooltipRect.width + 4 * this.padding);\n }\n return tooltipRect;\n };\n Tooltip.prototype.tooltipLocation = function (bounds, symbolLocation, arrowLocation, tipLocation) {\n var location = new TooltipLocation(symbolLocation.x, symbolLocation.y);\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var markerHeight = this.offset;\n var clipX = this.clipBounds.x;\n var clipY = this.clipBounds.y;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n if (!this.inverted) {\n location = new TooltipLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight);\n arrowLocation.x = tipLocation.x = width / 2;\n if (location.y < boundsY || (this.isNegative)) {\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 = new TooltipLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n arrowLocation.y = tipLocation.y = height / 2;\n if ((location.x + width + this.arrowPadding > boundsX + bounds.width) || (this.isNegative)) {\n location.x = (symbolLocation.x > bounds.width ? bounds.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 Tooltip.prototype.animateTooltipDiv = function (tooltipDiv, rect) {\n var _this = this;\n var x = parseFloat(tooltipDiv.style.left);\n var y = parseFloat(tooltipDiv.style.top);\n var currenDiff;\n new Animation({}).animate(tooltipDiv, {\n duration: 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 _this.trigger('animationComplete', { tooltip: _this });\n }\n });\n };\n Tooltip.prototype.updateDiv = function (tooltipDiv, x, y) {\n tooltipDiv.style.left = x + 'px';\n tooltipDiv.style.top = y + 'px';\n };\n Tooltip.prototype.updateTemplateFn = function () {\n if (this.template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(this.template).length) {\n this.templateFn = templateComplier(document.querySelector(this.template).innerHTML.trim());\n }\n }\n catch (e) {\n this.templateFn = templateComplier(this.template);\n }\n }\n };\n /** @private */\n Tooltip.prototype.fadeOut = function () {\n var _this = this;\n var tooltipElement = getElement(this.element.id);\n if (tooltipElement) {\n var tooltipGroup_1 = tooltipElement.firstChild;\n var opacity_1 = parseFloat(tooltipGroup_1.getAttribute('opacity')) || 1;\n new Animation({}).animate(tooltipGroup_1, {\n duration: 200,\n progress: function (args) {\n // tooltipGroup.removeAttribute('e-animate');\n _this.progressAnimation(tooltipGroup_1, opacity_1, (args.timeStamp / args.duration));\n },\n end: function (model) {\n _this.fadeOuted = true;\n _this.endAnimation(tooltipGroup_1);\n }\n });\n }\n };\n Tooltip.prototype.progressAnimation = function (tooltipGroup, opacity, timeStamp) {\n tooltipGroup.style.animation = '';\n tooltipGroup.setAttribute('opacity', (opacity - timeStamp).toString());\n };\n /*\n * @hidden\n */\n Tooltip.prototype.endAnimation = function (tooltipGroup) {\n tooltipGroup.setAttribute('opacity', '0');\n if (this.template && !this.shared) {\n tooltipGroup.style.display = 'none';\n }\n this.trigger('animationComplete', { tooltip: this });\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n var keyEntity = [];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * To destroy the accumulationcharts\n * @private\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-tooltip');\n };\n /**\n * Called internally if any of the property value changed.\n * @return {void}\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.isFirst = false;\n this.render();\n };\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"shared\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableShadow\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"header\", void 0);\n __decorate([\n Property(0.75)\n ], Tooltip.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ size: '13px', fontWeight: 'Normal', color: null, fontStyle: 'Normal', fontFamily: 'Segoe UI' }, TextStyle)\n ], Tooltip.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"inverted\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isNegative\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, TooltipBorder)\n ], Tooltip.prototype, \"border\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property(10)\n ], Tooltip.prototype, \"markerSize\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"clipBounds\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"palette\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"shapes\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"location\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offset\", void 0);\n __decorate([\n Property(2)\n ], Tooltip.prototype, \"rx\", void 0);\n __decorate([\n Property(2)\n ], Tooltip.prototype, \"ry\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginX\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginY\", void 0);\n __decorate([\n Property(12)\n ], Tooltip.prototype, \"arrowPadding\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"data\", void 0);\n __decorate([\n Property('Material')\n ], Tooltip.prototype, \"theme\", void 0);\n __decorate([\n Complex({ x: 0, y: 0, width: 0, height: 0 }, AreaBounds)\n ], Tooltip.prototype, \"areaBounds\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"animationComplete\", void 0);\n 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})();\nimport { extend } from '@syncfusion/ej2-base';\nimport { ChartLocation } from '../../common/utils/helper';\nimport { stopTimer, removeElement } from '../../common/utils/helper';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { tooltipRender } from '../../common/model/constants';\nimport { Tooltip as SVGTooltip } from '@syncfusion/ej2-svg-base';\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.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.header = (this.control.tooltip.header === null) ?\n ((this.control.tooltip.shared) ? '${point.x}' : '${series.name}')\n : (this.control.tooltip.header);\n this.formattedText = [];\n if (!isTooltip) {\n return this.createElement();\n }\n return null;\n };\n BaseTooltip.prototype.createElement = function () {\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 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 (tooltipDiv && !document.getElementById(tooltipDiv.id)) {\n document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n return true;\n }\n return false;\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 () {\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.series.isRectSeries && item.series.category === 'Series') {\n this.highlightPoint(item.series, item.point.index, true);\n }\n }\n };\n BaseTooltip.prototype.createTooltip = function (chart, isFirst, header, location, clipLocation, point, shapes, offset, bounds, extraPoints, templatePoint) {\n if (extraPoints === void 0) { extraPoints = null; }\n if (templatePoint === void 0) { templatePoint = null; }\n var series = this.currentPoints[0].series;\n var module = chart.tooltipModule || chart.accumulationTooltipModule;\n if (isFirst) {\n this.svgTooltip = new SVGTooltip({\n opacity: chart.tooltip.opacity,\n header: header, content: this.text, fill: chart.tooltip.fill, border: chart.tooltip.border,\n enableAnimation: chart.tooltip.enableAnimation, location: location, shared: chart.tooltip.shared,\n shapes: shapes, clipBounds: this.chart.chartAreaType === 'PolarRadar' ? new ChartLocation(0, 0) : clipLocation,\n areaBounds: bounds, palette: this.findPalette(), template: chart.tooltip.template, data: templatePoint,\n theme: chart.theme, offset: offset, textStyle: chart.tooltip.textStyle,\n isNegative: (series.isRectSeries && series.type !== 'Waterfall' && point && point.y < 0),\n inverted: this.chart.requireInvertedAxis && series.isRectSeries,\n arrowPadding: this.text.length > 1 ? 0 : 12,\n tooltipRender: function () {\n module.removeHighlight(module.control);\n module.highlightPoints();\n module.updatePreviousPoint(extraPoints);\n },\n animationComplete: function (args) {\n if (args.tooltip.fadeOuted) {\n module.fadeOut(module.previousPoints, chart);\n }\n }\n }, '#' + this.element.id + '_tooltip');\n }\n else {\n this.svgTooltip.location = location;\n this.svgTooltip.content = this.text;\n this.svgTooltip.header = header;\n this.svgTooltip.offset = offset;\n this.svgTooltip.palette = this.findPalette();\n this.svgTooltip.shapes = shapes;\n this.svgTooltip.data = templatePoint;\n this.svgTooltip.template = chart.tooltip.template;\n this.svgTooltip.textStyle = chart.tooltip.textStyle;\n this.svgTooltip.isNegative = (series.isRectSeries && series.type !== 'Waterfall' && point && point.y < 0);\n this.svgTooltip.clipBounds = this.chart.chartAreaType === 'PolarRadar' ? new ChartLocation(0, 0) : clipLocation;\n this.svgTooltip.arrowPadding = this.text.length > 1 ? 0 : 12;\n this.svgTooltip.dataBind();\n }\n };\n BaseTooltip.prototype.findPalette = function () {\n var colors = [];\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n colors.push(this.findColor(data, data.series));\n }\n return colors;\n };\n BaseTooltip.prototype.findColor = function (data, series) {\n if (series.isRectSeries && (series.type === 'Candle' || series.type === 'Hilo' || series.type === 'HiloOpenClose')) {\n return data.point.color;\n }\n else {\n return (data.point.color && data.point.color !== '#ffffff' ? data.point.color\n : data.point.interior) ||\n series.marker.fill || series.interior;\n }\n };\n BaseTooltip.prototype.updatePreviousPoint = function (extraPoints) {\n if (extraPoints) {\n this.currentPoints = this.currentPoints.concat(extraPoints);\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n };\n BaseTooltip.prototype.fadeOut = function (data, chart) {\n var svgElement = this.getElement(this.element.id + '_tooltip_svg');\n var isTooltip = (svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0);\n if (!isTooltip) {\n this.valueX = null;\n this.valueY = null;\n this.currentPoints = [];\n this.removeHighlight(chart);\n this.removeHighlightedMarker(data);\n this.svgTooltip = null;\n this.control.trigger('animationComplete', {});\n }\n };\n /*\n * @hidden\n */\n BaseTooltip.prototype.removeHighlightedMarker = function (data) {\n if (this.chart.markerRender) {\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 this.chart.markerRender.removeHighlightedMarker();\n }\n this.previousPoints = [];\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 this.text = this.formattedText;\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 && element.childNodes.length > 0) {\n while (element.lastChild && element.childNodes.length !== 1) {\n element.removeChild(element.lastChild);\n }\n }\n };\n BaseTooltip.prototype.stopAnimation = function () {\n stopTimer(this.toolTipInterval);\n };\n /**\n * Removes the tooltip on mouse leave.\n * @return {void}\n * @private\n */\n BaseTooltip.prototype.removeTooltip = function (duration) {\n var _this = this;\n var tooltipElement = this.getElement(this.element.id + '_tooltip');\n this.stopAnimation();\n if (tooltipElement && this.previousPoints.length > 0) {\n this.toolTipInterval = setTimeout(function () {\n if (_this.svgTooltip) {\n _this.svgTooltip.fadeOut();\n }\n }, duration);\n }\n };\n return BaseTooltip;\n}(ChartData));\nexport { BaseTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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 { PointData, ChartLocation } from '../../common/utils/helper';\nimport { 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 svgElement = this.getElement(this.element.id + '_tooltip_svg');\n var isTooltip = (svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0);\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 if (this.header === '') {\n return '';\n }\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 return this.header;\n }\n return '';\n };\n Tooltip.prototype.findShapes = function () {\n var marker = [];\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n marker.push(data.point.marker.shape || data.series.marker.shape);\n }\n return marker;\n };\n Tooltip.prototype.renderSeriesTooltip = function (chart, isFirst, tooltipDiv) {\n var data = this.getData();\n data.lierIndex = this.lierIndex;\n var rect = chart.chartAxisLayoutPanel.seriesClipRect;\n this.currentPoints = [];\n var tool;\n if (this.findData(data, this.previousPoints[0])) {\n if (this.pushData(data, isFirst, tooltipDiv, true)) {\n if (this.triggerEvent(data, isFirst, this.getTooltipText(data))) {\n this.createTooltip(chart, isFirst, this.findHeader(data), this.getSymbolLocation(data), data.series.clipRect, data.point, this.findShapes(), this.findMarkerHeight(this.currentPoints[0]), chart.chartAxisLayoutPanel.seriesClipRect, null, this.getTemplateText(data));\n }\n else {\n this.removeHighlight(this.control);\n this.getElement(this.element.id + '_tooltip').remove();\n }\n this.isRemove = true;\n }\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.findMarkerHeight = function (pointData) {\n var markerHeight = 0;\n var series = pointData.series;\n markerHeight = ((series.marker.visible || (this.chart.tooltip.shared &&\n (!series.isRectSeries || series.marker.visible)) || series.type === 'Scatter' || series.drawType === 'Scatter')\n && !(series.type === 'Candle' || series.type === 'Hilo' || series.type === 'HiloOpenClose')) ?\n ((series.marker.height + 2) / 2 + (2 * series.marker.border.width)) : 0;\n return markerHeight;\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 var location;\n if (data.series.type !== 'BoxAndWhisker') {\n if (!data.point.symbolLocations[0]) {\n return null;\n }\n location = new ChartLocation(data.point.symbolLocations[0].x, data.point.symbolLocations[0].y);\n }\n switch (data.series.type) {\n case 'BoxAndWhisker':\n return this.getBoxLocation(data);\n case 'Waterfall':\n return this.getWaterfallRegion(data, location);\n case 'RangeArea':\n return this.getRangeArea(data, location);\n default:\n return location;\n }\n };\n Tooltip.prototype.getRangeArea = function (data, location) {\n if (data.point.regions[0]) {\n if (!this.inverted) {\n location.y = data.point.regions[0].y + data.point.regions[0].height / 2;\n }\n else {\n location.x = data.point.regions[0].x + data.point.regions[0].width / 2;\n }\n }\n return location;\n };\n Tooltip.prototype.getWaterfallRegion = function (data, location) {\n if (!this.inverted) {\n location.y = (data.point.y < 0) ?\n location.y - data.point.regions[0].height : location.y;\n }\n else {\n location.x = (data.point.y < 0) ?\n location.x + data.point.regions[0].width : location.x;\n }\n return location;\n };\n Tooltip.prototype.getTooltipText = function (pointData) {\n var series = pointData.series;\n return this.parseTemplate(pointData.point, series, this.getFormat(this.chart, series), series.xAxis, series.yAxis);\n };\n Tooltip.prototype.getTemplateText = function (data) {\n if (this.chart.tooltip.template) {\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 else {\n return data.point;\n }\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 headerContent = '';\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 headerContent = this.findHeader(data);\n }\n if (data && this.triggerEvent(data, isFirst, this.getTooltipText(data))) {\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.createTooltip(chart, isFirst, headerContent, this.findSharedLocation(), this.currentPoints.length === 1 ? this.currentPoints[0].series.clipRect : null, null, this.findShapes(), this.findMarkerHeight(this.currentPoints[0]), chart.chartAxisLayoutPanel.seriesClipRect, extraPoints);\n }\n else if (this.getElement(this.element.id + '_tooltip_path')) {\n this.getElement(this.element.id + '_tooltip_path').setAttribute('d', '');\n }\n };\n Tooltip.prototype.findSharedLocation = function () {\n if (this.currentPoints.length > 1) {\n return new ChartLocation(this.valueX, this.valueY);\n }\n else {\n return this.getSymbolLocation(this.currentPoints[0]);\n }\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.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 textX = (series.type === 'Histogram') ? '${point.minimum}' + '-' + '${point.maximum}' : '${point.x}';\n var format = !chart.tooltip.shared ? textX : '${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 * 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 if (axis.zoomingScrollBar) {\n axis.zoomingScrollBar.isScrollUI = false;\n }\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, createElement } 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 if (zooming.enableScrollbar) {\n chart.scrollElement = createElement('div', { id: chart.element.id + '_scrollElement' });\n }\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.visible) {\n if (value.category === 'Indicator') {\n value.seriesElement.parentNode.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 };\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 } from '../../common/utils/helper';\nimport { markerAnimate, appendChildElement } 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, getValue, extend } 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 var index = (series.index === undefined) ? series.category : series.index;\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' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + index + ')'\n });\n series.textElement = render.createGroup({\n 'id': this.chart.element.id + 'TextGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + index + ')'\n });\n }\n this.markerHeight = ((series.type === 'Scatter' || marker.visible)) ? (marker.height / 2) : 0;\n this.commonId = this.chart.element.id + '_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 redraw = chart.redraw;\n var templateId = chart.element.id + '_Series_' +\n (series.index === undefined ? series.category : series.index) + '_DataLabelCollections';\n var element = createElement('div', {\n id: templateId\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 var argsFont = (extend({}, getValue('properties', dataLabel.font), null, true));\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, font: argsFont\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, redraw);\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'), argsData.font, argsData.font.color ||\n ((contrast >= 128 || series.type === 'Hilo') ? 'black' : 'white'), series.textElement, false, redraw, true);\n }\n }\n }\n }\n }\n });\n if (element.childElementCount) {\n appendChildElement(getElement(chart.element.id + '_Secondary_Element'), element, chart.redraw);\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, redraw) {\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 === undefined ? series.category : 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, redraw);\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 appendChildElement(parentElement, childElement, redraw, true, 'left', 'top');\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 + this.markerHeight :\n columnRadius - 2 * padding - this.markerHeight;\n }\n else if (position === 'Middle') {\n columnRadius = columnRadius / 2 + padding;\n }\n else if (position === 'Top') {\n columnRadius = labelIndex === 0 ? columnRadius - 2 * padding - this.markerHeight :\n columnRadius + 2 * padding + this.markerHeight;\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 if (isInverted) {\n location.y = point.regions[0].y + (point.regions[0].height / 2);\n }\n else {\n location.x = point.regions[0].x + (point.regions[0].width / 2);\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 - this.markerHeight :\n location + extraSpace + margin.left + this.markerHeight;\n }\n else {\n location = !this.inverted ? location + extraSpace + margin.top + this.markerHeight :\n location - extraSpace - margin.right - this.markerHeight;\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 - this.markerHeight :\n location + extraSpace + margin.top + this.markerHeight;\n }\n else {\n location = (position === 'Outer' && !inside) ? location + rect.height + extraSpace + margin.top + this.markerHeight :\n location + rect.height - extraSpace - margin.bottom - this.markerHeight;\n }\n }\n else {\n if (top) {\n location = (position === 'Outer' && !inside) ? location + extraSpace + margin.left + this.markerHeight :\n location - extraSpace - margin.right - this.markerHeight;\n }\n else {\n location = (position === 'Outer' && !inside) ? location - rect.width - extraSpace - margin.right - this.markerHeight :\n location - rect.width + extraSpace + margin.left + this.markerHeight;\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, pathAnimation, getElement, appendChildElement, appendClipElement } 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, this.chart);\n this.renderErrorBar(series);\n };\n ErrorBar.prototype.renderErrorBar = function (series) {\n var seriesIndex = series.index;\n var symbolId;\n var capId;\n var errorbar = series.errorBar;\n var errorBarCap = series.errorBar.errorBarCap;\n var errorDirection = ['', ''];\n var redraw = series.chart.redraw;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.visible && point.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, series, this.chart.requireInvertedAxis, errorX, errorY);\n symbolId = this.chart.element.id + '_Series_' + '_ErrorBarGroup_' + seriesIndex + '_Point_' + point.index;\n capId = this.chart.element.id + '_Series_' + '_ErrorBarCap_' + seriesIndex + '_Point_' + point.index;\n var shapeOption = new PathOption(symbolId, '', errorbar.width, errorbar.color || this.chart.themeStyle.errorBar, null, '', errorDirection[0]);\n var element = getElement(shapeOption.id);\n var previousDirection = element ? element.getAttribute('d') : null;\n series.errorBarElement.appendChild(this.chart.renderer.drawPath(shapeOption));\n pathAnimation(element, errorDirection[0], redraw, previousDirection);\n var capOption = new PathOption(capId, '', errorBarCap.width, errorBarCap.color || this.chart.themeStyle.errorBar, null, '', errorDirection[1]);\n element = getElement(capOption.id);\n previousDirection = element ? element.getAttribute('d') : null;\n appendChildElement(series.errorBarElement, this.chart.renderer.drawPath(capOption), redraw);\n pathAnimation(element, errorDirection[1], redraw, previousDirection);\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 verStandardMean;\n var horStandardMean;\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, chart) {\n var explodeValue = 5;\n var transform = chart.chartAreaType === 'Cartesian' ?\n '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 (chart.chartAreaType === 'Cartesian') {\n var options = new RectOption(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 = chart.renderer.createGroup({\n 'id': chart.element.id + 'ErrorBarGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + chart.element.id + '_ChartErrorBarClipRect_' + series.index + ')'\n });\n series.errorBarElement.appendChild(appendClipElement(chart.redraw, options, chart.renderer));\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, removeElement, getElement } 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 && !chart.enableAnimation) {\n while (chart.svgObject.lastChild) {\n chart.svgObject.removeChild(chart.svgObject.lastChild);\n }\n remove(chart.svgObject);\n }\n chart.animateSeries = false;\n chart.redraw = chart.enableAnimation;\n removeElement(getElement(chart.element.id + '_Secondary_Element').querySelectorAll('.ejSVGTooltip')[0]);\n this.redrawSeriesElements(series, chart);\n chart.removeSvg();\n chart.refreshAxis();\n series.refreshAxisLabel();\n this.refreshSeries(chart.visibleSeries);\n chart.refreshBound();\n chart.trigger('loaded', { chart: chart });\n if (selectedDataIndexes.length > 0) {\n chart.selectionModule.selectedDataIndexes = selectedDataIndexes;\n chart.selectionModule.redrawSelection(chart, chart.selectionMode);\n }\n chart.redraw = false;\n }\n else if (chart.selectionModule) {\n chart.selectionModule.legendSelection(chart, seriesIndex);\n }\n };\n Legend.prototype.redrawSeriesElements = function (series, chart) {\n if (!chart.redraw) {\n return null;\n }\n removeElement(chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index) +\n '_DataLabelCollections');\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 break;\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, removeElement } 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) && withIn(yAxis.valueType === 'Logarithmic' ? logBase(+annotation.y, yAxis.logBase) : +annotation.y, yAxis.visibleRange)) {\n symbolLocation = getPoint(xValue, +annotation.y, 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 else if (this.control.redraw) {\n removeElement(annotationElement.id);\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 // tslint:disable-next-line \n accPoint.y == this.annotation.y) {\n point = accPoint;\n break;\n }\n }\n else {\n // tslint:disable-next-line\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, this.control.redraw);\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, this.control.redraw, true, 'left', 'top');\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, redrawElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `ChartAnnotation` module handles the annotation for chart.\n */\nvar ChartAnnotation = /** @class */ (function (_super) {\n __extends(ChartAnnotation, _super);\n /**\n * Constructor for chart annotation.\n * @private.\n */\n function ChartAnnotation(control, annotations) {\n var _this = _super.call(this, control) || this;\n _this.chart = control;\n _this.annotations = annotations;\n return _this;\n }\n /**\n * Method to render the annotation for chart\n * @param element\n * @private\n */\n ChartAnnotation.prototype.renderAnnotations = function (element) {\n var _this = this;\n this.annotations = this.chart.annotations;\n this.parentElement = redrawElement(this.chart.redraw, this.chart.element.id + '_Annotation_Collections') ||\n 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, this.chart.redraw);\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 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 = 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 = this.getRectangle((point.xValue + sideBySideInfo.start), point.upperQuartile, (point.xValue + sideBySideInfo.end), point.lowerQuartile, series);\n point.regions.push(centerRegion);\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, argsData, this.getPathString(point, series, getPoint(point.xValue, point.median, xAxis, yAxis, isInverted), getPoint(point.xValue + sideBySideInfo.median, point.average, xAxis, yAxis, isInverted)), sideBySideInfo.median);\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, median) {\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 + median), 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 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 { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { 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 var scrollBarHeight = isOutside && isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n scrollBarHeight = scrollBarHeight * (opposedPosition ? -1 : 1);\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 + scrollBarHeight, 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])) + scrollBarHeight;\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 scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n var x = startX + axisRect.x;\n var y = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? (startY + axisRect.y +\n this.xAxisPrevHeight[labelIndex] + scrollBarHeight) : (axisRect.y - startY -\n this.xAxisPrevHeight[labelIndex] - scrollBarHeight);\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 var scrollBarHeight = isOutside && isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n scrollBarHeight = scrollBarHeight * (opposedPosition ? 1 : -1);\n clipX = ((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ?\n (rect.x - axis.multiLevelLabelHeight - startX - padding) : (rect.x + startX);\n this.createClipRect(clipX + scrollBarHeight, 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\n + '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] + scrollBarHeight : rect.x - startX - (_this.yAxisMultiLabelHeight[level] / 2) -\n _this.yAxisPrevHeight[level] - padding / 2;\n }\n else {\n x = isOutside ? x + scrollBarHeight : 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 scrollBarHeight = isOutside && isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n scrollBarHeight = scrollBarHeight * (opposedPosition ? 1 : -1);\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]) + scrollBarHeight;\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","import { Rect, PathOption, RectOption, CircleOption } from '../utils/helper';\n/**\n * Create scrollbar svg.\n * @return {void}\n */\nexport function createScrollSvg(scrollbar, renderer) {\n var rect = scrollbar.axis.rect;\n var isHorizontalAxis = scrollbar.axis.orientation === 'Horizontal';\n scrollbar.svgObject = renderer.createSvg({\n id: 'scrollBar_svg' + scrollbar.axis.name,\n width: scrollbar.isVertical ? scrollbar.height : scrollbar.width,\n height: scrollbar.isVertical ? scrollbar.width : scrollbar.height,\n style: 'position: absolute;top: ' + ((scrollbar.axis.opposedPosition && isHorizontalAxis ? -16 : 0) + rect.y) + 'px;left: ' +\n (((scrollbar.axis.opposedPosition && !isHorizontalAxis ? 16 : 0) + rect.x) - (scrollbar.isVertical ? scrollbar.height : 0))\n + 'px;cursor:auto;'\n });\n scrollbar.elements.push(scrollbar.svgObject);\n}\n/**\n * Scrollbar elements renderer\n */\nvar ScrollElements = /** @class */ (function () {\n /**\n * Constructor for scroll elements\n * @param scrollObj\n */\n function ScrollElements() {\n // Constructor Called here\n }\n /**\n * Render scrollbar elements.\n * @return {void}\n * @private\n */\n ScrollElements.prototype.renderElements = function (scroll, renderer) {\n var scrollGroup = renderer.createGroup({\n id: 'scrollBar_' + scroll.axis.name,\n transform: 'translate(' + (scroll.isVertical ? scroll.height : '0') +\n ',0) rotate(' + (scroll.isVertical ? '90' : '0') + ')'\n });\n var backRectGroup = renderer.createGroup({\n id: 'scrollBar_backRect_' + scroll.axis.name\n });\n var thumbGroup = renderer.createGroup({\n id: 'scrollBar_thumb_' + scroll.axis.name,\n transform: 'translate(0,0)'\n });\n this.backRect(scroll, renderer, backRectGroup);\n this.thumb(scroll, renderer, thumbGroup);\n this.renderCircle(scroll, renderer, thumbGroup);\n this.arrows(scroll, renderer, thumbGroup);\n this.thumbGrip(scroll, renderer, thumbGroup);\n scrollGroup.appendChild(backRectGroup);\n scrollGroup.appendChild(thumbGroup);\n return scrollGroup;\n };\n /**\n * Method to render back rectangle of scrollbar\n * @param scroll\n */\n ScrollElements.prototype.backRect = function (scroll, renderer, parent) {\n var style = scroll.scrollbarThemeStyle;\n var backRectEle = renderer.drawRectangle(new RectOption('scrollBarBackRect_' + scroll.axis.name, style.backRect, { width: 1, color: style.backRect }, 1, new Rect(0, 0, scroll.width, scroll.height), 0, 0));\n parent.appendChild(backRectEle);\n };\n /**\n * Method to render arrows\n * @param scroll\n */\n ScrollElements.prototype.arrows = function (scroll, renderer, parent) {\n var style = scroll.scrollbarThemeStyle;\n var option = new PathOption('scrollBar_leftArrow_' + scroll.axis.name, style.arrow, 1, style.arrow, 1, '', '');\n this.leftArrowEle = renderer.drawPath(option);\n option.id = 'scrollBar_rightArrow_' + scroll.axis.name;\n this.rightArrowEle = renderer.drawPath(option);\n this.setArrowDirection(this.thumbRectX, this.thumbRectWidth, scroll.height);\n parent.appendChild(this.leftArrowEle);\n parent.appendChild(this.rightArrowEle);\n };\n /**\n * Methods to set the arrow width\n * @param thumbRectX\n * @param thumbRectWidth\n * @param height\n */\n ScrollElements.prototype.setArrowDirection = function (thumbRectX, thumbRectWidth, height) {\n var circleRadius = 8;\n var leftDirection = 'M ' + ((thumbRectX - circleRadius / 2) + 1) + ' ' + (height / 2) + ' ' + 'L ' +\n (thumbRectX - circleRadius / 2 + 6) + ' ' + 11 + ' ' + 'L ' + (thumbRectX - circleRadius / 2 + 6) + ' ' + 5 + ' Z';\n var rightDirection = 'M ' + ((thumbRectX + thumbRectWidth + circleRadius / 2) - 0.5) + ' ' + (height / 2)\n + ' ' + 'L ' + (thumbRectX + thumbRectWidth + circleRadius / 2 - 6) + ' ' + 11.5 + ' ' + 'L ' + (thumbRectX +\n thumbRectWidth + circleRadius / 2 - 6) + ' ' + 4.5 + ' Z';\n this.leftArrowEle.setAttribute('d', leftDirection);\n this.rightArrowEle.setAttribute('d', rightDirection);\n };\n /**\n * Method to render thumb\n * @param scroll\n * @param renderer\n * @param parent\n */\n ScrollElements.prototype.thumb = function (scroll, renderer, parent) {\n scroll.startX = this.thumbRectX;\n var style = scroll.scrollbarThemeStyle;\n this.slider = renderer.drawRectangle(new RectOption('scrollBarThumb_' + scroll.axis.name, style.thumb, { width: 1, color: '' }, 1, new Rect(this.thumbRectX, 0, this.thumbRectWidth, scroll.height)));\n parent.appendChild(this.slider);\n };\n /**\n * Method to render circles\n * @param scroll\n * @param renderer\n * @param parent\n */\n ScrollElements.prototype.renderCircle = function (scroll, renderer, parent) {\n var style = scroll.scrollbarThemeStyle;\n var option = new CircleOption('scrollBar_leftCircle_' + scroll.axis.name, style.circle, { width: 1, color: style.circle }, 1, this.thumbRectX, scroll.height / 2, 8);\n var scrollShadowEle = '' +\n '' +\n '' +\n '' +\n '';\n var defElement = renderer.createDefs();\n defElement.innerHTML = scrollShadowEle;\n var shadowGroup = renderer.createGroup({\n id: scroll.axis.name + '_thumb_shadow'\n });\n shadowGroup.innerHTML = '';\n this.leftCircleEle = renderer.drawCircle(option);\n option.id = 'scrollBar_rightCircle_' + scroll.axis.name;\n option.cx = this.thumbRectX + this.thumbRectWidth;\n this.rightCircleEle = renderer.drawCircle(option);\n parent.appendChild(defElement);\n parent.appendChild(this.leftCircleEle);\n parent.appendChild(this.rightCircleEle);\n parent.appendChild(shadowGroup);\n };\n /**\n * Method to render grip elements\n * @param scroll\n * @param renderer\n * @param parent\n */\n ScrollElements.prototype.thumbGrip = function (scroll, renderer, parent) {\n var sidePadding = 0;\n var topPadding = 0;\n var gripWidth = 14;\n var gripCircleDiameter = 2;\n var padding = gripWidth / 2 - gripCircleDiameter;\n var style = scroll.scrollbarThemeStyle;\n var option = new CircleOption('scrollBar_gripCircle0' + '_' + scroll.axis.name, style.grip, { width: 1, color: style.grip }, 1, 0, 0, 1);\n this.gripCircle = renderer.createGroup({\n id: 'scrollBar_gripCircle_' + scroll.axis.name,\n transform: 'translate(' + ((this.thumbRectX + this.thumbRectWidth / 2) + ((scroll.isVertical ? 1 : -1) * padding)) +\n ',' + (scroll.isVertical ? '10' : '5') + ') rotate(' + (scroll.isVertical ? '180' : '0') + ')'\n });\n for (var i = 1; i <= 6; i++) {\n option.id = 'scrollBar_gripCircle' + i + '_' + scroll.axis.name;\n option.cx = sidePadding;\n option.cy = topPadding;\n this.gripCircle.appendChild(renderer.drawCircle(option));\n sidePadding = i === 3 ? 0 : (sidePadding + 5);\n topPadding = i >= 3 ? 5 : 0;\n }\n parent.appendChild(this.gripCircle);\n };\n return ScrollElements;\n}());\nexport { ScrollElements };\n","import { EventHandler, Browser, remove } from '@syncfusion/ej2-base';\nimport { Animation, createElement } from '@syncfusion/ej2-base';\nimport { ScrollElements, createScrollSvg } from './scrollbar-elements';\nimport { getElement, minMax } from '../utils/helper';\nimport { linear } from '../../chart/index';\nimport { getScrollbarThemeColor } from '../model/theme';\nimport { scrollChanged, scrollEnd, scrollStart } from '../model/constants';\n/**\n * Scrollbar Base\n */\nvar ScrollBar = /** @class */ (function () {\n /**\n * Constructor for creating scrollbar\n * @param component\n * @param axis\n */\n function ScrollBar(component, axis) {\n this.component = component;\n this.elements = [];\n this.scrollElements = new ScrollElements();\n this.axis = axis;\n this.mouseMoveListener = this.scrollMouseMove.bind(this);\n this.mouseUpListener = this.scrollMouseUp.bind(this);\n this.animateDuration = 500;\n this.isPointer = Browser.isPointer;\n this.browserName = Browser.info.name;\n }\n /**\n * To Mouse x and y position\n * @param e\n */\n ScrollBar.prototype.getMouseXY = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (e.type.indexOf('touch') > -1) {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n pageX = e.clientX;\n pageY = e.clientY;\n }\n var svgRect = getElement('scrollBar_svg' + this.axis.name).getBoundingClientRect();\n this.mouseX = pageX - Math.max(svgRect.left, 0);\n this.mouseY = pageY - Math.max(svgRect.top, 0);\n };\n /**\n * Method to bind events for scrollbar svg object\n * @param element\n */\n ScrollBar.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.scrollMouseDown, this);\n EventHandler.add(element, Browser.touchMoveEvent, this.scrollMouseMove, this);\n EventHandler.add(element, Browser.touchEndEvent, this.scrollMouseUp, this);\n EventHandler.add(element, 'mousewheel', this.scrollMouseWheel, this);\n window.addEventListener('mousemove', this.mouseMoveListener, false);\n window.addEventListener('mouseup', this.mouseUpListener, false);\n };\n /**\n * Method to remove events for srcollbar svg object\n * @param element\n */\n ScrollBar.prototype.unWireEvents = function (element) {\n EventHandler.remove(element, Browser.touchStartEvent, this.scrollMouseDown);\n EventHandler.remove(element, Browser.touchMoveEvent, this.scrollMouseMove);\n EventHandler.remove(element, Browser.touchEndEvent, this.scrollMouseUp);\n EventHandler.remove(element, 'mousewheel', this.scrollMouseWheel);\n window.removeEventListener('mousemove', this.mouseMoveListener, false);\n window.removeEventListener('mouseup', this.mouseUpListener, false);\n };\n /**\n * Handles the mouse down on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseDown = function (e) {\n var id = e.target.id;\n var elem = this.scrollElements;\n this.getMouseXY(e);\n this.isResizeLeft = this.isExist(id, '_leftCircle_') || this.isExist(id, '_leftArrow_');\n this.isResizeRight = this.isExist(id, '_rightCircle_') || this.isExist(id, '_rightArrow_');\n this.previousXY = this.isVertical ? this.mouseY : this.mouseX;\n this.previousWidth = elem.thumbRectWidth;\n this.previousRectX = elem.thumbRectX;\n this.startZoomPosition = this.axis.zoomPosition;\n this.startZoomFactor = this.axis.zoomFactor;\n this.startRange = this.axis.visibleRange;\n this.scrollStarted = true;\n this.component.trigger(scrollStart, this.getArgs(scrollStart));\n if (this.isExist(id, 'scrollBarThumb_')) {\n this.isThumbDrag = true;\n this.svgObject.style.cursor = '-webkit-grabbing';\n }\n else if (this.isExist(id, 'scrollBarBackRect_')) {\n var currentX = this.moveLength(this.previousXY, this.previousRectX, 8);\n if (this.animateDuration) {\n currentX = this.isWithIn(currentX) ? currentX : elem.thumbRectX;\n this.performAnimation(elem.thumbRectX, currentX);\n }\n else {\n elem.thumbRectX = this.isWithIn(currentX) ? currentX : elem.thumbRectX;\n this.positionThumb(elem.thumbRectX, elem.thumbRectWidth);\n this.setZoomFactorPosition(elem.thumbRectX, elem.thumbRectWidth);\n }\n }\n };\n /**\n * To check the matched string\n * @param id\n * @param match\n */\n ScrollBar.prototype.isExist = function (id, match) {\n return id.indexOf(match) > -1;\n };\n /**\n * To check current poisition is within scrollbar region\n * @param currentX\n */\n ScrollBar.prototype.isWithIn = function (currentX) {\n var circleRadius = 8;\n return (currentX - circleRadius >= 0 &&\n currentX + this.scrollElements.thumbRectWidth + circleRadius <= this.width);\n };\n /**\n * Method to find move length of thumb\n * @param mouseXY\n * @param thumbX\n * @param circleRadius\n */\n ScrollBar.prototype.moveLength = function (mouseXY, thumbX, circleRadius) {\n var moveLength = (10 / 100) * (this.width - circleRadius * 2);\n if (mouseXY < thumbX) {\n moveLength = thumbX - (thumbX - moveLength > circleRadius ? moveLength : circleRadius);\n }\n else {\n moveLength = thumbX + (thumbX + this.scrollElements.thumbRectWidth + moveLength < this.width - circleRadius ?\n moveLength : circleRadius);\n }\n return moveLength;\n };\n /**\n * Method to calculate zoom factor and position\n * @param currentX\n * @param currentWidth\n */\n ScrollBar.prototype.setZoomFactorPosition = function (currentX, currentWidth) {\n var axis = this.axis;\n this.isScrollUI = true;\n var circleRadius = 8;\n var circleWidth = 1;\n var currentScrollWidth = currentX + currentWidth + circleRadius + circleWidth;\n var currentZPWidth = circleRadius + (circleWidth / 2);\n this.zoomPosition = (currentX - (currentX - currentZPWidth <= 0 ? currentZPWidth : 0)) / (this.isVertical\n ? axis.rect.height : this.width);\n this.zoomFactor = (currentWidth + (currentScrollWidth === this.width ? circleRadius + circleWidth : 0)) / (this.isVertical\n ? axis.rect.height : this.width);\n axis.zoomPosition = this.zoomPosition;\n axis.zoomFactor = this.zoomFactor;\n };\n /**\n * Handles the mouse move on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseMove = function (e) {\n var target = e.target;\n var elem = this.scrollElements;\n this.getMouseXY(e);\n this.setCursor(target);\n this.setTheme(target);\n var mouseXY = this.isVertical ? this.mouseY : this.mouseX;\n var range = this.axis.visibleRange;\n var zoomPosition = this.zoomPosition;\n var zoomFactor = this.zoomFactor;\n if (this.isThumbDrag) {\n this.svgObject.style.cursor = '-webkit-grabbing';\n var currentX = elem.thumbRectX + (mouseXY - this.previousXY);\n if (mouseXY >= 0 && mouseXY <= currentX + elem.thumbRectWidth) {\n elem.thumbRectX = this.isWithIn(currentX) ? currentX : elem.thumbRectX;\n this.positionThumb(elem.thumbRectX, elem.thumbRectWidth);\n this.previousXY = mouseXY;\n this.setZoomFactorPosition(currentX, elem.thumbRectWidth);\n }\n this.component.trigger(scrollChanged, this.getArgs(scrollChanged, range, zoomPosition, zoomFactor));\n }\n else if (this.isResizeLeft || this.isResizeRight) {\n this.resizeThumb(e);\n this.component.trigger(scrollChanged, this.getArgs(scrollChanged, range, zoomPosition, zoomFactor));\n }\n };\n /**\n * Handles the mouse wheel on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseWheel = function (e) {\n var svgRect = getElement('scrollBar_svg' + this.axis.name).getBoundingClientRect();\n this.mouseX = e.clientX - Math.max(svgRect.left, 0);\n this.mouseY = e.clientY - Math.max(svgRect.top, 0);\n var origin = 0.5;\n var elem = this.scrollElements;\n var axis = this.axis;\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 1 : -1 : (e.wheelDelta / 120) > 0 ? 1 : -1;\n var cumulative;\n cumulative = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * direction), 1);\n var range = this.axis.visibleRange;\n var zoomPosition = this.zoomPosition;\n var zoomFactor = this.zoomFactor;\n if (cumulative >= 1) {\n origin = axis.orientation === 'Horizontal' ? this.mouseX / axis.rect.width : 1 - (this.mouseY / axis.rect.height);\n origin = origin > 1 ? 1 : origin < 0 ? 0 : origin;\n this.zoomFactor = (cumulative === 1) ? 1 : minMax(1 / cumulative, 0, 1);\n this.zoomPosition = (cumulative === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - this.zoomFactor) * origin);\n }\n elem.thumbRectX = this.isWithIn(this.zoomPosition * this.width) ? this.zoomPosition * this.width : elem.thumbRectX;\n this.isScrollUI = true;\n this.positionThumb(elem.thumbRectX, elem.thumbRectWidth);\n axis.zoomFactor = this.zoomFactor;\n axis.zoomPosition = this.zoomPosition;\n this.component.trigger(scrollChanged, this.getArgs(scrollChanged, range, zoomPosition, zoomFactor));\n };\n /**\n * Handles the mouse up on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseUp = function (e) {\n var circleRadius = 8;\n var circleWidth = 1;\n this.startX = this.scrollElements.thumbRectX;\n var currentScrollWidth = this.startX + this.scrollElements.thumbRectWidth + circleRadius + circleWidth;\n var currentZPWidth = circleRadius + (circleWidth / 2);\n if (this.isResizeLeft || this.isResizeRight) {\n this.axis.zoomFactor = (currentScrollWidth >= this.width - 1 && (this.startX - currentZPWidth) <= 0) ? 1 : this.zoomFactor;\n }\n this.isThumbDrag = false;\n this.isResizeLeft = false;\n this.isResizeRight = false;\n if (this.scrollStarted) {\n this.component.trigger(scrollEnd, this.getArgs(scrollChanged, this.startRange, this.startZoomPosition, this.startZoomFactor));\n this.scrollStarted = false;\n }\n };\n /**\n * To render scroll bar\n * @private\n */\n ScrollBar.prototype.render = function () {\n this.getDefaults();\n this.getTheme();\n this.removeScrollSvg();\n createScrollSvg(this, this.component.renderer);\n this.wireEvents(this.svgObject);\n this.svgObject.appendChild(this.scrollElements.renderElements(this, this.component.renderer));\n return this.svgObject;\n };\n /**\n * Theming for scrollabr\n */\n ScrollBar.prototype.getTheme = function () {\n this.scrollbarThemeStyle = getScrollbarThemeColor(this.component.theme);\n };\n /**\n * Method to remove existing scrollbar\n */\n ScrollBar.prototype.removeScrollSvg = function () {\n if (document.getElementById('scrollBar_svg' + this.axis.name)) {\n remove(document.getElementById('scrollBar_svg' + this.axis.name));\n }\n };\n /**\n * Method to set cursor fpr scrollbar\n * @param target\n */\n ScrollBar.prototype.setCursor = function (target) {\n var id = target.id;\n this.svgObject.style.cursor = id.indexOf('scrollBarThumb_') > -1 || id.indexOf('_gripCircle') > -1 ?\n '-webkit-grab' : (id.indexOf('Circle_') > -1 || id.indexOf('Arrow_') > -1) ? this.isVertical ? 'ns-resize' :\n 'ew-resize' : 'auto';\n };\n /**\n * Method to set theme for sollbar\n * @param target\n */\n ScrollBar.prototype.setTheme = function (target) {\n var id = target.id;\n var isLeftHover = id.indexOf('_leftCircle_') > -1 || id.indexOf('_leftArrow_') > -1;\n var isRightHover = id.indexOf('_rightCircle_') > -1 || id.indexOf('_rightArrow_') > -1;\n var style = this.scrollbarThemeStyle;\n var leftArrowEle = this.scrollElements.leftArrowEle;\n var rightArrowEle = this.scrollElements.rightArrowEle;\n var leftCircleEle = this.scrollElements.leftCircleEle;\n var rightCircleEle = this.scrollElements.rightCircleEle;\n var isAxis = this.isCurrentAxis(target, leftArrowEle);\n leftCircleEle.style.fill = isLeftHover && isAxis ? style.circleHover : style.circle;\n rightCircleEle.style.fill = isRightHover && isAxis ? style.circleHover : style.circle;\n leftCircleEle.style.stroke = isLeftHover && isAxis ? style.circleHover : style.circle;\n rightCircleEle.style.stroke = isRightHover && isAxis ? style.circleHover : style.circle;\n if (this.component.theme === 'Highcontrast') {\n leftArrowEle.style.fill = isLeftHover && isAxis ? style.arrowHover : style.arrow;\n leftArrowEle.style.stroke = isLeftHover && isAxis ? style.arrowHover : style.arrow;\n rightArrowEle.style.fill = isRightHover && isAxis ? style.arrowHover : style.arrow;\n rightArrowEle.style.stroke = isRightHover && isAxis ? style.arrowHover : style.arrow;\n leftCircleEle.style.stroke = isLeftHover && isAxis ? style.circleHover : style.circle;\n rightCircleEle.style.stroke = isRightHover && isAxis ? style.circleHover : style.circle;\n }\n };\n /**\n * To check current axis\n * @param target\n * @param ele\n */\n ScrollBar.prototype.isCurrentAxis = function (target, ele) {\n return (target.id.split('_')[2] === ele.id.split('_')[2]);\n };\n /**\n * Method to resize thumb\n * @param e\n */\n ScrollBar.prototype.resizeThumb = function (e) {\n var currentWidth;\n var circleRadius = 8;\n var padding = 5;\n var gripWidth = 14;\n var minThumbWidth = circleRadius * 2 + padding * 2 + gripWidth;\n var thumbX = this.previousRectX;\n var mouseXY = this.isVertical ? this.mouseY : this.mouseX;\n var diff = Math.abs(this.previousXY - mouseXY);\n if (this.isResizeLeft && mouseXY >= 0) {\n var currentX = thumbX + (mouseXY > this.previousXY ? diff : -diff);\n currentWidth = currentX - circleRadius >= 0 ? this.previousWidth + (mouseXY > this.previousXY ? -diff : diff) :\n this.previousWidth;\n currentX = currentX - circleRadius >= 0 ? currentX : thumbX;\n if (currentWidth >= minThumbWidth && mouseXY < currentX + currentWidth) {\n this.scrollElements.thumbRectX = this.previousRectX = currentX;\n this.scrollElements.thumbRectWidth = this.previousWidth = currentWidth;\n this.previousXY = mouseXY;\n this.positionThumb(currentX, currentWidth);\n this.setZoomFactorPosition(currentX, currentWidth);\n }\n }\n else if (this.isResizeRight) {\n currentWidth = mouseXY >= minThumbWidth + this.scrollElements.thumbRectX && mouseXY <= this.width - circleRadius ?\n mouseXY - this.scrollElements.thumbRectX : this.previousWidth;\n this.scrollElements.thumbRectWidth = this.previousWidth = currentWidth;\n this.previousXY = mouseXY;\n this.positionThumb(this.startX, currentWidth);\n this.setZoomFactorPosition(this.startX, currentWidth);\n }\n };\n /**\n * Method to position the scrollbar thumb\n * @param currentX\n * @param currentWidth\n */\n ScrollBar.prototype.positionThumb = function (currentX, currentWidth) {\n var circlePadding = 3;\n var elem = this.scrollElements;\n var gripWidth = 14;\n var gripCircleDiameter = 2;\n var padding = gripWidth / 2 - gripCircleDiameter;\n elem.slider.setAttribute('x', currentX.toString());\n elem.slider.setAttribute('width', currentWidth.toString());\n elem.leftCircleEle.setAttribute('cx', currentX.toString());\n elem.rightCircleEle.setAttribute('cx', (currentX + currentWidth).toString());\n elem.setArrowDirection(currentX, currentWidth, this.height);\n elem.gripCircle.setAttribute('transform', 'translate(' + (currentX + currentWidth / 2 + ((this.isVertical ? 1 : -1) * padding)) +\n ',' + (this.isVertical ? '10' : '5') + ') rotate(' + (this.isVertical ? '180' : '0') + ')');\n };\n /**\n * Method to get default values\n */\n ScrollBar.prototype.getDefaults = function () {\n var circleRadius = 8;\n var padding = 5;\n var gripWidth = 14;\n var minThumbWidth = circleRadius * 2 + padding * 2 + gripWidth;\n var axis = this.axis;\n this.isVertical = axis.orientation === 'Vertical';\n var currentWidth = axis.zoomFactor * (this.isVertical ? axis.rect.height : axis.rect.width);\n currentWidth = currentWidth > minThumbWidth ? currentWidth : minThumbWidth;\n this.scrollX = axis.rect.x;\n this.scrollY = axis.rect.y;\n this.width = this.isVertical ? axis.rect.height : axis.rect.width;\n this.height = 16;\n var currentX = axis.zoomPosition * (this.isVertical ? axis.rect.height : this.width);\n this.scrollElements.thumbRectX = currentX > circleRadius ? currentX : circleRadius;\n this.scrollElements.thumbRectWidth = ((currentWidth + this.scrollElements.thumbRectX) < this.width - (circleRadius * 2))\n ? currentWidth : this.width - this.scrollElements.thumbRectX - circleRadius;\n };\n /**\n * Method for injecting scrollbar module\n * @param axis\n * @param component\n */\n ScrollBar.prototype.injectTo = function (axis, component) {\n axis.zoomingScrollBar = new ScrollBar(component, axis);\n };\n /**\n * Animation Calculation for scrollbar\n * @param previous\n * @param current\n */\n ScrollBar.prototype.performAnimation = function (previous, current) {\n var _this = this;\n var currentX;\n var width = this.scrollElements.thumbRectWidth;\n var range = this.axis.visibleRange;\n var zoomPosition = this.zoomPosition;\n var zoomFactor = this.zoomFactor;\n new Animation({}).animate(createElement('div'), {\n duration: this.animateDuration,\n progress: function (args) {\n currentX = linear(args.timeStamp, 0, current - previous, args.duration) + previous;\n _this.positionThumb(currentX, width);\n range = _this.axis.visibleRange;\n zoomPosition = _this.zoomPosition;\n zoomFactor = _this.zoomFactor;\n _this.setZoomFactorPosition(currentX, width);\n _this.component.trigger(scrollChanged, _this.getArgs(scrollChanged, range, zoomPosition, zoomFactor));\n },\n end: function () {\n _this.scrollElements.thumbRectX = current;\n _this.startX = current;\n _this.positionThumb(current, width);\n _this.setZoomFactorPosition(current, width);\n _this.component.trigger(scrollEnd, _this.getArgs(scrollEnd, range, zoomPosition, zoomFactor));\n }\n });\n };\n /**\n * Method to destroy scrollbar\n */\n ScrollBar.prototype.destroy = function () {\n var _this = this;\n if (this.axes) {\n this.axes.map(function (axis) {\n axis.zoomingScrollBar.destroy();\n });\n }\n else {\n this.elements.map(function (element) {\n _this.unWireEvents(element);\n remove(element.firstChild);\n });\n this.elements = [];\n }\n };\n /**\n * Method to get scrollbar module name\n */\n ScrollBar.prototype.getModuleName = function () {\n return 'ScrollBar';\n };\n ScrollBar.prototype.getArgs = function (eventName, range, zoomPosition, zoomFactor) {\n var scrollArgs = {\n axis: this.axis,\n name: eventName,\n range: this.axis.visibleRange,\n zoomFactor: this.axis.zoomFactor,\n zoomPosition: this.axis.zoomPosition,\n previousRange: range,\n previousZoomFactor: zoomFactor,\n previousZoomPosition: zoomPosition\n };\n return scrollArgs;\n };\n return ScrollBar;\n}());\nexport { ScrollBar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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 { ColumnBase } from './column-base';\nimport { Axis } from '../axis/axis';\n/**\n * `Pareto series` module used to render the Pareto series.\n */\nvar ParetoSeries = /** @class */ (function (_super) {\n __extends(ParetoSeries, _super);\n function ParetoSeries() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.paretoAxes = [];\n return _this;\n }\n /**\n * Defines the Line initialization\n */\n ParetoSeries.prototype.initSeries = function (targetSeries, chart) {\n var series = new Series(chart, 'series', targetSeries.properties, true);\n series.name = 'Pareto';\n series.yAxisName = targetSeries.yAxisName + '_CumulativeAxis';\n series.category = 'Pareto';\n targetSeries.category = 'Pareto';\n series.type = 'Line';\n series.interior = chart.themeStyle.errorBar;\n chart.visibleSeries.push(series);\n this.initAxis(targetSeries, series, chart);\n };\n /**\n * Defines the Axis initialization for Line\n */\n ParetoSeries.prototype.initAxis = function (paretoSeries, targetSeries, chart) {\n var isExist = this.paretoAxes.some(function (currentAxis) {\n return currentAxis.name === targetSeries.yAxisName;\n });\n if (!isExist) {\n var secondaryAxis = (paretoSeries.yAxisName ? chart.axes.filter(function (axis) {\n return axis.name === paretoSeries.yAxisName;\n })[0] : chart.primaryYAxis);\n var newAxis = new Axis(chart, 'axis', {\n name: targetSeries.yAxisName,\n majorGridLines: {\n width: 0\n },\n majorTickLines: secondaryAxis.majorTickLines,\n lineStyle: secondaryAxis.lineStyle,\n minimum: 0,\n maximum: 100,\n rowIndex: secondaryAxis.rowIndex,\n opposedPosition: true,\n labelFormat: '{value}%'\n });\n this.paretoAxes.push(newAxis);\n }\n };\n /**\n * Render Pareto series.\n * @return {void}\n * @private\n */\n ParetoSeries.prototype.render = function (series) {\n series.chart.columnSeriesModule.render(series);\n };\n /**\n * To perform the cumulative calculation for pareto series.\n */\n ParetoSeries.prototype.performCumulativeCalculation = function (json, series) {\n var data = json;\n var sum = 0;\n var count = 0;\n var max = 0;\n var length = data.length;\n for (var i = 0; i < length; i++) {\n sum += data[i][series.yName];\n }\n for (var i = 0; i < length; i++) {\n count = count + data[i][series.yName];\n data[i][series.yName] = Math.round((count / sum) * 100);\n }\n return data;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ParetoSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n ParetoSeries.prototype.getModuleName = function () {\n return 'ParetoSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the pareto series.\n * @return {void}\n * @private\n */\n ParetoSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return ParetoSeries;\n}(ColumnBase));\nexport { ParetoSeries };\n","/**\n * Defines the common functionalities of accumulation series\n */\nimport { isNullOrUndefined, Animation, createElement } from '@syncfusion/ej2-base';\nimport { degreeToLocation, getElement, indexFinder, linear } 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, this.accumulation.enableAnimation ? 300 : 0);\n }\n };\n /**\n * To invoke the explode on accumulation chart loading\n * @private\n */\n AccumulationBase.prototype.invokeExplode = function () {\n var series = this.accumulation.visibleSeries[0];\n var duration = this.accumulation.enableAnimation ? 300 : 0;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.isExplode) {\n this.pointExplode(point.index, point, duration);\n }\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, duration);\n }\n }\n };\n /**\n * To deExplode all points in the series\n * @private\n */\n AccumulationBase.prototype.deExplodeAll = function (index, animationDuration) {\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 && !currentPoint.isSliced) || currentPoint.isClubbed) {\n currentPoint.isExplode = false;\n this.deExplodeSlice(currentPoint.index, pointId, animationDuration);\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 series = chart.visibleSeries[0];\n var points = series.points;\n var point = pointByIndex(index, points);\n var explodePoints = true;\n var duration = this.accumulation.enableAnimation ? 300 : 0;\n if (isNullOrUndefined(point)) {\n return null;\n }\n var clubPointsExploded = !explode &&\n (point.isSliced || (series.clubbedPoints.length &&\n points[points.length - 1].index === series.clubbedPoints[series.clubbedPoints.length - 1].index));\n if (series.type === 'Pie' && (clubPointsExploded || point.isClubbed)) {\n explodePoints = this.clubPointExplode(index, point, series, points, chart, duration, explode, clubPointsExploded);\n }\n if (explodePoints) {\n this.pointExplode(index, point, duration, explode);\n }\n };\n AccumulationBase.prototype.getSum = function (points) {\n var total = 0;\n points.map(function (point) {\n total += point.visible ? point.y : 0;\n });\n return total;\n };\n ;\n AccumulationBase.prototype.clubPointExplode = function (index, point, series, points, chart, duration, explode, clubPointsExploded) {\n if (explode === void 0) { explode = false; }\n if (clubPointsExploded === void 0) { clubPointsExploded = false; }\n if (point.isClubbed) {\n chart.animateSeries = false;\n points.splice(points.length - 1, 1);\n series.clubbedPoints.map(function (point) {\n point.visible = true;\n point.isExplode = true;\n });\n chart.visibleSeries[0].points = points.concat(series.clubbedPoints);\n this.deExplodeAll(index, duration);\n series.sumOfPoints = this.getSum(chart.visibleSeries[0].points);\n chart.refreshChart();\n return false;\n }\n else if (clubPointsExploded || point.isSliced) {\n chart.animateSeries = false;\n points.splice(points.length - series.clubbedPoints.length, series.clubbedPoints.length);\n var clubPoint = series.generateClubPoint();\n clubPoint.index = points.length;\n clubPoint.color = series.clubbedPoints[0].color;\n points.push(clubPoint);\n series.sumOfPoints = this.getSum(points);\n this.deExplodeAll(index, duration);\n clubPoint.isExplode = false;\n chart.visibleSeries[0].points = points;\n chart.refreshChart();\n this.pointExplode(clubPoint.index, points[clubPoint.index], 0, true);\n clubPoint.isExplode = false;\n this.deExplodeSlice(clubPoint.index, chart.element.id + '_Series_0_Point_', duration);\n if (point.isSliced) {\n return false;\n }\n }\n return true;\n };\n /**\n * To Explode points\n * @param index\n * @param point\n * @param explode\n */\n AccumulationBase.prototype.pointExplode = function (index, point, duration, explode) {\n var translate;\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var chart = this.accumulation;\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 point.isExplode = true;\n this.explodeSlice(index, translate, pointId, this.center || { x: 0, y: 0 }, duration);\n }\n else {\n point.isExplode = false;\n this.deExplodeSlice(index, pointId, duration);\n }\n };\n /**\n * To check point is exploded by id\n */\n AccumulationBase.prototype.isExplode = function (id) {\n var element = getElement(id);\n var transform = element ? element.getAttribute('transform') : null;\n return (element && (transform === 'translate(0, 0)' || transform === null || transform === 'translate(0)'));\n };\n /**\n * To deExplode the point by index\n */\n AccumulationBase.prototype.deExplodeSlice = function (index, sliceId, animationDuration) {\n var element = getElement(sliceId + index);\n var transform = element ? element.getAttribute('transform') : null;\n if (this.accumulation.enableAnimation && element && transform &&\n transform !== 'translate(0, 0)' && transform !== 'translate(0)') {\n var result = /translate\\((-?\\d+\\.?\\d*),?\\s*(-?\\d+[.]?\\d*)?\\)/.exec(transform);\n this.performAnimation(index, sliceId, 0, 0, +result[1], +result[2] || 0, animationDuration, true);\n }\n else {\n this.performAnimation(index, sliceId, 0, 0, 0, 0, animationDuration, true);\n }\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, animationDuration) {\n this.performAnimation(index, sliceId, 0, 0, translate.x - center.x, translate.y - center.y, animationDuration);\n };\n /**\n * To Perform animation point explode\n * @param index\n * @param sliceId\n * @param start\n * @param endX\n * @param endY\n */\n AccumulationBase.prototype.performAnimation = function (index, sliceId, startX, startY, endX, endY, duration, isReverse) {\n var _this = this;\n if (duration <= 0) {\n this.setTranslate(index, sliceId, 'translate(' + (endX) + ', ' + (endY) + ')');\n return null;\n }\n var xValue;\n var yValue;\n new Animation({}).animate(createElement('div'), {\n duration: duration,\n progress: function (args) {\n xValue = linear(args.timeStamp, startX, endX, args.duration);\n yValue = linear(args.timeStamp, startY, endY, args.duration);\n _this.setTranslate(index, sliceId, 'translate(' + (isReverse ? endX - xValue : xValue) + ', ' + (isReverse ? endY - yValue : yValue) + ')');\n },\n end: function (model) {\n _this.setTranslate(index, sliceId, 'translate(' + (isReverse ? startX : endX) + ', ' + (isReverse ? startX : endY) + ')');\n }\n });\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, isNullOrUndefined } 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 var endAngle = isNullOrUndefined(series.endAngle) ? series.startAngle : series.endAngle;\n this.totalAngle = (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, getElement, linear } from '../../common/utils/helper';\nimport { PieBase } from '../renderer/pie-base';\nimport { Animation, createElement } from '@syncfusion/ej2-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, seriesGroup, redraw) {\n var sum = series.sumOfPoints;\n var yValue = point.visible ? point.y : 0;\n var degree = (sum) ? ((Math.abs(yValue) / sum) * (this.totalAngle)) : null;\n var start = Math.PI / 180 * ((90 - (360 - this.startAngle)) - 90);\n option.d = this.getPathOption(point, degree, this.startAngle % 360, yValue);\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 if (!redraw) {\n seriesGroup.appendChild(chart.renderer.drawPath(option));\n point.degree = degree;\n point.start = start;\n }\n else {\n this.refresh(point, degree, start, chart, option, seriesGroup);\n }\n };\n PieSeries.prototype.refresh = function (point, degree, start, chart, option, seriesGroup) {\n var _this = this;\n var seriesElement = getElement(option.id);\n var currentStartAngle;\n var curentDegree;\n new Animation({}).animate(createElement('div'), {\n duration: 300,\n delay: 0,\n progress: function (args) {\n curentDegree = linear(args.timeStamp, point.degree, (degree - point.degree), args.duration);\n currentStartAngle = linear(args.timeStamp, point.start, start - point.start, args.duration);\n currentStartAngle = ((currentStartAngle / (Math.PI / 180)) + 360) % 360;\n seriesElement.setAttribute('d', _this.getPathOption(point, curentDegree, currentStartAngle, point.y));\n if (point.isExplode) {\n chart.accBaseModule.explodePoints(point.index, chart, true);\n }\n seriesElement.style.visibility = 'visible';\n },\n end: function (args) {\n seriesElement.style.visibility = point.visible ? 'visible' : 'hidden';\n seriesElement.setAttribute('d', option.d);\n point.degree = degree;\n point.start = start;\n }\n });\n };\n /**\n * To get path option from the point.\n */\n PieSeries.prototype.getPathOption = function (point, degree, startAngle, yValue) {\n if (!degree) {\n return '';\n }\n var path = this.getPathArc(this.center, startAngle % 360, (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 } 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, appendChildElement, redrawElement } 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 _this.chartid = 57724;\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 if (this.element.id === '') {\n var collection = document.getElementsByClassName('e-accumulationchart').length;\n this.element.id = 'acc_chart_' + this.chartid + '_' + collection;\n }\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 var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n var rect = this.element.getBoundingClientRect();\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.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 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 accumulation control.\n */\n AccumulationChart.prototype.export = function (type, fileName, orientation, controls, width, height) {\n var exportChart = new ExportUtils(this);\n exportChart.export(type, fileName, orientation, (controls ? controls : [this]), width, height);\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 = this.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 var id = (targetId === (this.element.id + '_title') || targetId === (this.element.id + '_subTitle'));\n if ((event.target.textContent.indexOf('...') > -1) && id) {\n var title = (targetId === (this.element.id + '_title')) ? this.title : this.subTitle;\n showTooltip(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 if (this.redraw) {\n return null;\n }\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 var element = redrawElement(this.redraw, this.element.id + '_Secondary_Element') ||\n this.createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: relative'\n });\n appendChildElement(this.element, element, this.redraw);\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 (render) {\n if (render === void 0) { render = true; }\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 || this.dataSource, series.query);\n series.refreshDataManager(this, render);\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 removeElement('chartmeasuretext');\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.subTitleCollection = [];\n var titleHeight = 0;\n var subTitleHeight = 0;\n var maxWidth = 0;\n var titleWidth = 0;\n this.titleCollection = getTitle(this.title, this.titleStyle, this.initialClipRect.width);\n titleHeight = measureText(this.title, this.titleStyle).height * this.titleCollection.length;\n if (this.subTitle) {\n for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n var titleText = _a[_i];\n titleWidth = measureText(titleText, this.titleStyle).width;\n maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n }\n this.subTitleCollection = getTitle(this.subTitle, this.subTitleStyle, maxWidth);\n subTitleHeight = (measureText(this.subTitle, this.subTitleStyle).height * this.subTitleCollection.length);\n }\n subtractRect(this.initialClipRect, new Rect(0, (subTitleHeight + titleHeight), 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 appendChildElement(this.element, this.svgObject, this.redraw);\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 * @private\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 * @private\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 * @private\n */\n AccumulationChart.prototype.processExplode = function () {\n if (this.redraw) {\n return null;\n }\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 if (!this.redraw) {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_SeriesCollection' }));\n }\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, this.redraw);\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 appendChildElement(this.svgObject, 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))), this.redraw);\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, this.redraw);\n }\n };\n /**\n * To process the selection in accumulation chart\n * @private\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 var rect;\n var margin = this.margin;\n if (!this.title) {\n return null;\n }\n var alignment = this.titleStyle.textAlignment;\n var getAnchor = alignment === 'Near' ? 'start' : alignment === 'Far' ? 'end' : 'middle';\n var titleSize = measureText(this.title, this.titleStyle);\n rect = new Rect(margin.left, 0, this.availableSize.width - margin.left - margin.right, 0);\n var options = new TextOption(this.element.id + '_title', titlePositionX(rect, this.titleStyle), this.margin.top + (titleSize.height * 3 / 4), getAnchor, this.titleCollection, '', 'auto');\n var element = textElement(options, this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitle, this.svgObject, false, this.redraw);\n if (this.subTitle) {\n this.renderSubTitle(options);\n }\n };\n AccumulationChart.prototype.renderSubTitle = function (options) {\n var maxWidth = 0;\n var titleWidth = 0;\n var padding = 10;\n var rect;\n var alignment = this.titleStyle.textAlignment;\n var getAnchor = function (alignment) {\n return alignment === 'Near' ? 'start' : alignment === 'Far' ? 'end' : 'middle';\n };\n var subTitleElementSize = measureText(this.subTitle, this.subTitleStyle);\n for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n var titleText = _a[_i];\n titleWidth = measureText(titleText, this.titleStyle).width;\n maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n }\n rect = new Rect(alignment === 'Center' ? (options.x - maxWidth / 2) : alignment === 'Far' ? options.x - maxWidth : options.x, 0, maxWidth, 0);\n var subTitleOption = new TextOption(this.element.id + '_subTitle', titlePositionX(rect, this.subTitleStyle), options.y * options.text.length + ((subTitleElementSize.height) * 3 / 4) + padding, getAnchor(this.subTitleStyle.textAlignment), this.subTitleCollection, '', 'auto');\n var element = textElement(subTitleOption, this.subTitleStyle, this.subTitleStyle.color || this.themeStyle.chartTitle, this.svgObject, false, this.redraw);\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 'subTitle':\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 'subTitleStyle':\n if (newProp.subTitleStyle && (newProp.subTitleStyle.size || newProp.subTitleStyle.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 'dataSource':\n this.processData(false);\n update.refreshBounds = true;\n break;\n case 'series':\n var len = this.series.length;\n var seriesRefresh = false;\n for (var i = 0; i < len; i++) {\n if (newProp.series[i] && (newProp.series[i].dataSource || newProp.series[i].yName || newProp.series[i].xName)) {\n seriesRefresh = true;\n }\n if (newProp.series[i] && newProp.series[i].explodeIndex !== oldProp.series[i].explodeIndex) {\n this.accBaseModule.explodePoints(newProp.series[i].explodeIndex, this);\n this.accBaseModule.deExplodeAll(newProp.series[i].explodeIndex, this.enableAnimation ? 300 : 0);\n }\n }\n if (seriesRefresh) {\n this.processData(false);\n update.refreshBounds = true;\n }\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 Property('')\n ], AccumulationChart.prototype, \"dataSource\", void 0);\n __decorate([\n Complex(Theme.chartTitleFont, Font)\n ], AccumulationChart.prototype, \"titleStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"subTitle\", void 0);\n __decorate([\n Complex(Theme.chartSubTitleFont, Font)\n ], AccumulationChart.prototype, \"subTitleStyle\", 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 Property(true)\n ], AccumulationChart.prototype, \"enableAnimation\", 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 { appendChildElement, removeElement } from '../../common/utils/helper';\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 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, seriesGroup, redraw) {\n if (!point.visible) {\n removeElement(options.id);\n return null;\n }\n var direction = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n options.d = direction;\n appendChildElement(seriesGroup, chart.renderer.drawPath(options), redraw);\n if (point.isExplode) {\n chart.accBaseModule.explodePoints(point.index, chart, true);\n }\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 { appendChildElement } from '../../common/utils/helper';\nimport { TriangularBase } from './triangular-base';\nimport { removeElement } from '../../sparkline/utils/helper';\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, seriesGroup, redraw) {\n if (!point.visible) {\n removeElement(options.id);\n return null;\n }\n options.d = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n appendChildElement(seriesGroup, chart.renderer.drawPath(options), redraw);\n if (point.isExplode) {\n chart.accBaseModule.explodePoints(point.index, chart, true);\n }\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, Animation } from '@syncfusion/ej2-base';\nimport { pointByIndex } from '../model/acc-base';\nimport { BaseLegend, LegendOptions } from '../../common/legend/legend';\nimport { Rect, measureText, textTrim, getElement } 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 chart = this.chart;\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 this.chart.animateSeries = false;\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 if (this.chart.legendSettings.toggleVisibility) {\n var currentSeries = this.chart.visibleSeries[0];\n var point = pointByIndex(pointIndex, currentSeries.points);\n var legendOption = this.legendByIndex(pointIndex, this.legendCollections);\n point.visible = !point.visible;\n legendOption.visible = point.visible;\n currentSeries.sumOfPoints += point.visible ? point.y : -point.y;\n chart.redraw = chart.enableAnimation;\n this.sliceVisibility(pointIndex, point.visible);\n chart.removeSvg();\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 chart.redraw = false;\n };\n /**\n * To translate the point elements by index and position\n */\n AccumulationLegend.prototype.sliceVisibility = function (index, isVisible) {\n var sliceId = this.chart.element.id + '_Series_0_Point_';\n if (this.chart.visibleSeries[0].dataLabel.visible) {\n sliceId = this.chart.element.id + '_datalabel_Series_0_';\n this.sliceAnimate(getElement(sliceId + 'g_' + index), isVisible);\n }\n };\n /**\n * Slice animation\n * @param element\n * @param name\n * @param isVisible\n */\n AccumulationLegend.prototype.sliceAnimate = function (element, isVisible) {\n if (!element) {\n return null;\n }\n new Animation({}).animate(element, {\n duration: 300,\n delay: 0,\n name: isVisible ? 'FadeIn' : 'FadeOut',\n end: function (args) {\n args.element.style.visibility = isVisible ? 'visible' : 'hidden';\n },\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, getValue } from '@syncfusion/ej2-base';\nimport { ChartLocation, degreeToLocation, Rect, isOverlap, stringToNumber, getAngle, TextOption, appendChildElement } 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, redraw) {\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 argsFont = (extend({}, getValue('properties', dataLabel.font), null, true));\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, font: argsFont\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, redraw) :\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 var dataLabelElement;\n var location;\n var element;\n if (point.labelVisible) {\n this.correctLabelRegion(point.labelRegion, textSize);\n if (isTemplate) {\n this.setTemplateStyle(childElement, point, templateElement, dataLabel.font.color, argsData.color, redraw);\n }\n else {\n location = new ChartLocation(point.labelRegion.x + this.marginValue, point.labelRegion.y + (textSize.height * 3 / 4) + this.marginValue);\n element = getElement(id + 'shape_' + point.index);\n var startLocation = element ? new ChartLocation(+element.getAttribute('x'), +element.getAttribute('y')) : null;\n dataLabelElement = this.accumulation.renderer.drawRectangle(new RectOption(id + 'shape_' + point.index, argsData.color, argsData.border, 1, point.labelRegion, dataLabel.rx, dataLabel.ry));\n appendChildElement(datalabelGroup, dataLabelElement, redraw, true, 'x', 'y', startLocation);\n textElement(new TextOption(id + 'text_' + point.index, location.x, location.y, 'start', point.label, '', 'auto'), argsData.font, argsData.font.color || this.getSaturatedColor(point, argsData.color), datalabelGroup, false, redraw, true);\n element = null;\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 element_1 = getElement(id + 'connector_' + point.index);\n var previousDirection = element_1 ? element_1.getAttribute('d') : '';\n var pathElement = this.accumulation.renderer.drawPath(new PathOption(id + 'connector_' + point.index, 'transparent', dataLabel.connectorStyle.width, dataLabel.connectorStyle.color || point.color, 1, dataLabel.connectorStyle.dashArray, this.getConnectorPath(extend({}, point.labelRegion, null, true), point, dataLabel, point.labelAngle)));\n appendChildElement(datalabelGroup, pathElement, redraw, true, null, null, null, previousDirection);\n }\n appendChildElement(parent, datalabelGroup, redraw);\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, redraw) {\n var clientRect;\n element = createTemplate(element, point.index, argsData.template, this.accumulation, point, this.accumulation.visibleSeries[0]);\n clientRect = measureElementRect(element, redraw);\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, redraw) {\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 appendChildElement(parent, childElement, redraw, true, 'left', 'top');\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 } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { AccPointData, withInBounds, 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 svgElement = this.getElement(this.element.id + '_tooltip_svg');\n var isTooltip = svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0;\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 if (data.point && (!this.previousPoints[0] || (this.previousPoints[0].point !== data.point))) {\n if (this.pushData(data, isFirst, tooltipDiv, false)) {\n if (this.triggerEvent(data, isFirst, this.getTooltipText(data, chart.tooltip))) {\n this.createTooltip(chart, isFirst, this.findHeader(data), data.point.symbolLocation, data.series.clipRect, data.point, ['Circle'], 0, rect, null, data.point);\n }\n else {\n this.removeHighlight(this.control);\n this.getElement(this.element.id + '_tooltip').remove();\n }\n this.isRemove = true;\n }\n }\n else {\n if (!data.point && this.isRemove) {\n this.removeTooltip(1000);\n this.isRemove = false;\n }\n }\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.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 if (this.header === '') {\n return '';\n }\n this.header = this.parseTemplate(data.point, data.series, this.header);\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n return this.header;\n }\n return '';\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 * 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 */\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, redrawElement } 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 var redraw = this.pie.redraw;\n this.parentElement = (redrawElement(redraw, this.pie.element.id + '_Annotation_Collections') ||\n 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, redraw);\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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, RectOption, Rect, measureText } from '../../chart/index';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { DataPoint } from '../utils/helper';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getSeriesColor } from '../../common/model/theme';\nimport { NiceInterval, Size, PathOption } from '../../chart/index';\nimport { Data } from '../../common/model/data';\n/**\n * To render Chart series\n */\nvar RangeSeries = /** @class */ (function (_super) {\n __extends(RangeSeries, _super);\n function RangeSeries(range) {\n var _this = _super.call(this) || this;\n _this.dataSource = range.dataSource;\n _this.xName = range.xName;\n _this.yName = range.yName;\n _this.query = range.query;\n _this.xMin = Infinity;\n _this.xMax = -Infinity;\n _this.yMin = Infinity;\n _this.yMax = -Infinity;\n return _this;\n }\n /**\n * To render light weight and data manager process\n * @param control\n */\n RangeSeries.prototype.renderChart = function (control) {\n var _this = this;\n var dataSource;\n var query;\n this.seriesLength = 0;\n control.rangeSlider.points = [];\n if (control.series.length) {\n control.series.map(function (series) {\n dataSource = series.dataSource || control.dataSource;\n query = series.query || control.query;\n series.points = [];\n _this.processDataSource(dataSource, query, control, series);\n });\n }\n else {\n this.processDataSource(control.dataSource, control.query, control);\n }\n };\n RangeSeries.prototype.processDataSource = function (dataSource, query, control, series) {\n var _this = this;\n if (isNullOrUndefined(query) && !isNullOrUndefined(dataSource)) {\n this.dataManagerSuccess({ result: dataSource, count: dataSource.length }, control, series);\n return;\n }\n control.dataModule = new Data(dataSource, query);\n var dataManager = control.dataModule.getData(control.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, control, series); });\n };\n /**\n * data manager process calculated here\n * @param e\n */\n RangeSeries.prototype.dataManagerSuccess = function (e, control, series) {\n var viewData = e.result !== '' ? e.result : [];\n this.processJsonData(viewData, control, Object.keys(viewData).length, series);\n this.seriesLength += series ? 1 : this.seriesLength;\n if (!series || this.seriesLength === control.series.length) {\n this.processXAxis(control);\n this.calculateGroupingBounds(control);\n this.processYAxis(control);\n control.renderChart();\n }\n };\n /**\n * Process JSON data from data source\n * @param control\n * @param len\n */\n RangeSeries.prototype.processJsonData = function (viewData, control, len, series) {\n var i = 0;\n var point;\n var xName = (series && series.xName) || control.xName;\n var yName = (series && series.yName) || control.yName;\n while (i < len) {\n point = new DataPoint(getValue(xName, viewData[i]), getValue(yName, viewData[i]));\n point.yValue = +point.y;\n if (control.valueType === 'DateTime') {\n var dateParser = control.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n var dateFormatter = control.intl.getDateFormat({ skeleton: 'full', type: 'dateTime' });\n point.x = new Date(DataUtil.parse.parseJson({ val: point.x }).val);\n point.xValue = Date.parse(dateParser(dateFormatter(point.x)));\n }\n else {\n point.xValue = +point.x;\n }\n if (series) {\n series.points.push(point);\n }\n this.xMin = Math.min(this.xMin, point.xValue);\n this.yMin = Math.min(this.yMin, point.yValue);\n this.xMax = Math.max(this.xMax, point.xValue);\n this.yMax = Math.max(this.yMax, point.yValue);\n control.rangeSlider.points.push(point);\n i++;\n }\n };\n RangeSeries.prototype.processXAxis = function (control) {\n var axisModule;\n var axis = {\n minimum: control.minimum, maximum: control.maximum,\n interval: control.interval, valueType: control.valueType,\n isInversed: control.enableRtl, labelFormat: control.labelFormat,\n logBase: control.logBase, skeleton: control.skeleton, skeletonType: control.skeletonType\n };\n this.xAxis = axis;\n this.xAxis.intervalType = control.intervalType;\n this.xAxis.maximumLabels = 3;\n this.xAxis.skeleton = control.skeleton;\n this.xAxis.intervalDivs = [10, 5, 2, 1];\n this.xAxis.rect = control.bounds;\n this.xAxis.visibleLabels = [];\n this.xAxis.orientation = 'Horizontal';\n axisModule = control[firstToLowerCase(control.valueType) + 'Module'];\n axisModule.min = this.xMin;\n axisModule.max = this.xMax;\n axisModule.getActualRange(this.xAxis, control.bounds);\n if (this.xAxis.valueType !== 'Logarithmic') {\n axisModule.updateActualRange(this.xAxis, this.xAxis.actualRange.min, this.xAxis.actualRange.max, this.xAxis.actualRange.interval);\n }\n this.xAxis.actualRange.delta = this.xAxis.actualRange.max - this.xAxis.actualRange.min;\n this.xAxis.visibleRange = this.xAxis.actualRange;\n axisModule.calculateVisibleLabels(this.xAxis, control);\n };\n /**\n * Process yAxis for range navigator\n * @param control\n */\n RangeSeries.prototype.processYAxis = function (control) {\n var axis = {\n majorGridLines: { width: 0 }, rangePadding: 'None',\n majorTickLines: { width: 0 }, labelStyle: { size: '0' },\n visible: false, valueType: 'Double', minimum: null, maximum: null,\n interval: null\n };\n this.yAxis = axis;\n this.yAxis.rect = control.bounds;\n this.yAxis.maximumLabels = 3;\n this.yAxis.intervalDivs = [10, 5, 2, 1];\n this.yAxis.orientation = 'Vertical';\n control.doubleModule.min = this.yMin;\n control.doubleModule.max = this.yMax;\n control.doubleModule.getActualRange(this.yAxis, control.bounds);\n control.doubleModule.updateActualRange(this.yAxis, this.yAxis.actualRange.min, this.yAxis.actualRange.max, this.yAxis.actualRange.interval);\n this.yAxis.actualRange.delta = this.yAxis.actualRange.max - this.yAxis.actualRange.min;\n this.yAxis.visibleRange = this.yAxis.actualRange;\n };\n /**\n * Process Light weight control\n * @param control\n * @private\n */\n RangeSeries.prototype.renderSeries = function (control) {\n var _this = this;\n var chartGroup = control.renderer.createGroup({ id: control.element.id + '_chart' });\n var colors = getSeriesColor(control.theme);\n control.series.map(function (series, index) {\n series.xAxis = _this.xAxis;\n series.yAxis = _this.yAxis;\n series.chart = control;\n series.index = index;\n series.xAxis.isInversed = control.enableRtl;\n series.interior = series.fill || colors[index % colors.length];\n _this.createSeriesElement(control, series, index);\n control[firstToLowerCase(series.type) + 'SeriesModule'].render(series, _this.xAxis, _this.yAxis, false);\n chartGroup.appendChild(series.seriesElement);\n if (series.animation.enable && control.animateSeries) {\n control[firstToLowerCase(series.type) + 'SeriesModule'].doAnimation(series);\n }\n });\n control.svgObject.appendChild(chartGroup);\n if (control.series.length) {\n this.drawSeriesBorder(control, chartGroup);\n }\n };\n RangeSeries.prototype.createSeriesElement = function (control, series, index) {\n var elementId = control.element.id;\n series.clipRect = new Rect(this.xAxis.rect.x, this.yAxis.rect.y, this.xAxis.rect.width, this.yAxis.rect.height);\n series.clipRectElement = control.renderer.drawClipPath(new RectOption(elementId + '_RangeSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0,\n width: series.clipRect.width,\n height: series.clipRect.height\n }));\n series.seriesElement = control.renderer.createGroup({\n 'id': elementId + 'SeriesGroup' + index,\n 'transform': 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')',\n 'clip-path': 'url(#' + elementId + '_RangeSeriesClipRect_' + index + ')'\n });\n series.seriesElement.appendChild(series.clipRectElement);\n };\n RangeSeries.prototype.calculateGroupingBounds = function (control) {\n var padding = control.margin.bottom;\n var labelHeight = measureText('string', control.labelStyle).height;\n this.calculateDateTimeNiceInterval(this.xAxis, new Size(control.bounds.width, control.bounds.height), this.xMin, this.xMax, false);\n if (control.enableGrouping && control.valueType === 'DateTime'\n && (this.xAxis.actualIntervalType !== 'Years' || !control.series.length)) {\n control.bounds.height -= (control.labelPosition === 'Outside' || control.series.length === 0) ? padding + labelHeight :\n (labelHeight + 2 * padding);\n }\n if (!control.series.length) {\n control.bounds.y += control.bounds.height / 4;\n control.bounds.height = control.bounds.height / 2;\n }\n };\n RangeSeries.prototype.drawSeriesBorder = function (control, chartElement) {\n var options = new PathOption(control.element.id + '_SeriesBorder', 'transparent', control.navigatorBorder.width, control.navigatorBorder.color, 1, '', ('M ' + (control.bounds.x) + ' ' + (control.bounds.y) +\n ' L ' + (control.bounds.x + control.bounds.width) + ' ' + control.bounds.y +\n ' L ' + (control.bounds.x + control.bounds.width) + ' ' + (control.bounds.y + control.bounds.height) +\n ' L ' + (control.bounds.x) + ' ' + (control.bounds.y + control.bounds.height) + 'Z'));\n var htmlObject = control.renderer.drawPath(options);\n control.svgObject.appendChild(htmlObject);\n };\n return RangeSeries;\n}(NiceInterval));\nexport { RangeSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { measureText, TextOption, Rect, valueToCoefficient, textElement, PathOption, firstToLowerCase, } from '../../common/utils/helper';\nimport { DateTime } from '../../chart/index';\nimport { VisibleLabels } from '../../chart/index';\n/**\n * class for axis\n */\nvar RangeNavigatorAxis = /** @class */ (function (_super) {\n __extends(RangeNavigatorAxis, _super);\n function RangeNavigatorAxis(range) {\n var _this = _super.call(this) || this;\n _this.firstLevelLabels = [];\n _this.secondLevelLabels = [];\n _this.rangeNavigator = range;\n return _this;\n }\n /**\n * To render grid lines of axis\n */\n RangeNavigatorAxis.prototype.renderGridLines = function () {\n var pointX = 0;\n var control = this.rangeNavigator;\n var majorGridLines = control.majorGridLines;\n var majorTickLines = control.majorTickLines;\n var majorGrid = '';\n var majorTick = '';\n var rect = control.bounds;\n var chartAxis = control.chartSeries.xAxis;\n var labelLength;\n var range = chartAxis.visibleRange;\n var disabledColor = (control.disableRangeSelector) ? 'transparent' : null;\n this.gridLines = control.renderer.createGroup({ id: control.element.id + '_GridLines' });\n var tick = (control.tickPosition === 'Outside' || control.series.length === 0) ?\n rect.y + rect.height + majorTickLines.height : rect.y + rect.height - majorTickLines.height;\n //Gridlines\n this.firstLevelLabels = [];\n chartAxis.labelStyle = control.labelStyle;\n chartAxis.skeleton = control.skeleton;\n chartAxis.skeletonType = control.skeletonType;\n chartAxis.isChart = false;\n if (control.valueType === 'DateTime') {\n this.calculateDateTimeNiceInterval(chartAxis, rect, chartAxis.doubleRange.start, chartAxis.doubleRange.end, chartAxis.isChart);\n this.actualIntervalType = chartAxis.actualIntervalType;\n this.findAxisLabels(chartAxis);\n }\n this.firstLevelLabels = chartAxis.visibleLabels;\n this.lowerValues = [];\n labelLength = chartAxis.visibleLabels.length;\n for (var i = 0; i < labelLength; i++) {\n this.lowerValues.push(this.firstLevelLabels[i].value);\n pointX = (valueToCoefficient(this.firstLevelLabels[i].value, chartAxis) * rect.width) + rect.x;\n if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n majorGrid = majorGrid.concat('M ' + pointX + ' ' + (control.bounds.y + control.bounds.height) +\n ' L ' + pointX + ' ' + control.bounds.y + ' ');\n majorTick = majorTick.concat('M ' + (pointX) + ' ' + (rect.y + rect.height) +\n ' L ' + (pointX) + ' ' + tick + ' ');\n }\n }\n var options = new PathOption(control.element.id + '_MajorGridLine', 'transparent', majorGridLines.width, control.series.length ? disabledColor || majorGridLines.color || control.themeStyle.gridLineColor : 'transparent', 1, majorGridLines.dashArray, majorGrid);\n this.gridLines.appendChild(control.renderer.drawPath(options));\n options = new PathOption(control.element.id + '_MajorTickLine', 'transparent', majorTickLines.width, disabledColor || majorTickLines.color || control.themeStyle.gridLineColor, 1, majorGridLines.dashArray, majorTick);\n this.gridLines.appendChild(control.renderer.drawPath(options));\n };\n /**\n * To render of axis labels\n */\n RangeNavigatorAxis.prototype.renderAxisLabels = function () {\n var axis = this.rangeNavigator.chartSeries.xAxis;\n var control = this.rangeNavigator;\n var pointY;\n var rect = control.bounds;\n var labelElement = control.renderer.createGroup({ id: control.element.id + '_AxisLabels' });\n var firstLevelElement = control.renderer.createGroup({ id: control.element.id + '_FirstLevelAxisLabels' });\n var secondLevelElement = control.renderer.createGroup({ id: control.element.id + '_SecondLevelAxisLabels' });\n var secondaryAxis = axis;\n pointY = this.findLabelY(control, false);\n this.placeAxisLabels(axis, pointY, '_AxisLabel_', control, firstLevelElement);\n secondaryAxis.intervalType = secondaryAxis.actualIntervalType = (control.groupBy ||\n this.getSecondaryLabelType(axis.actualIntervalType));\n if (control.enableGrouping && control.valueType === 'DateTime' && this.actualIntervalType !== 'Years') {\n secondaryAxis.visibleRange.interval = 1;\n secondaryAxis.visibleLabels = [];\n this.findAxisLabels(secondaryAxis);\n this.secondLevelLabels = secondaryAxis.visibleLabels;\n pointY = this.findLabelY(control, true);\n var border = this.placeAxisLabels(secondaryAxis, pointY, '_SecondaryLabel_', control, secondLevelElement);\n var path = new PathOption(control.element.id + '_SecondaryMajorLines', 'transparent', control.majorTickLines.width, control.majorTickLines.color || control.themeStyle.gridLineColor, 1, control.majorGridLines.dashArray, border);\n this.gridLines.appendChild(control.renderer.drawPath(path));\n }\n control.chartSeries.xAxis.visibleLabels = control.chartSeries.xAxis.visibleLabels.concat(secondaryAxis.visibleLabels);\n labelElement.appendChild(firstLevelElement);\n labelElement.appendChild(secondLevelElement);\n //gridlines and axis label append to element\n control.svgObject.appendChild(this.gridLines);\n control.svgObject.appendChild(labelElement);\n };\n /**\n * To find secondary level label type\n * @param type\n */\n RangeNavigatorAxis.prototype.getSecondaryLabelType = function (type) {\n var types = ['Years', 'Quarter', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'];\n return (type === 'Years' ? 'Years' : types[types.indexOf(type) - 1]);\n };\n /**\n * To find labels for date time axis\n * @param axis\n */\n RangeNavigatorAxis.prototype.findAxisLabels = function (axis) {\n axis.visibleLabels = [];\n var start = new Date(axis.visibleRange.min);\n var nextInterval;\n var text;\n var interval = this.rangeNavigator.interval ? this.rangeNavigator.interval : 1;\n switch (axis.actualIntervalType) {\n case 'Years':\n start = new Date(start.getFullYear().toString());\n break;\n case 'Quarter':\n if (start.getMonth() <= 2) {\n start = new Date(start.getFullYear(), 0, 1);\n }\n else if (start.getMonth() <= 5) {\n start = new Date(start.getFullYear(), 3, 1);\n }\n else if (start.getMonth() <= 8) {\n start = new Date(start.getFullYear(), 6, 1);\n }\n else {\n start = new Date(start.getFullYear(), 9, 1);\n }\n break;\n case 'Months':\n start = new Date(start.getFullYear(), start.getMonth());\n break;\n case 'Weeks':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate() - start.getDay());\n break;\n case 'Days':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n break;\n case 'Hours':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate(), start.getHours());\n break;\n case 'Minutes':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate(), start.getHours(), start.getMinutes());\n break;\n case 'Seconds':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate(), start.getHours(), start.getMinutes(), start.getSeconds());\n break;\n }\n nextInterval = start.getTime();\n this.rangeNavigator.format = this.rangeNavigator.intl.getDateFormat({\n format: axis.labelFormat, type: firstToLowerCase(axis.skeletonType), skeleton: this.getSkeleton(axis, null, null)\n });\n while (nextInterval < axis.visibleRange.max) {\n text = this.dateFormats(this.rangeNavigator.format(new Date(nextInterval)), axis, axis.visibleLabels.length);\n axis.visibleLabels.push(new VisibleLabels(text, nextInterval, this.rangeNavigator.labelStyle, text));\n nextInterval = this.increaseDateTimeInterval(axis, nextInterval, interval).getTime();\n }\n };\n /**\n * To find date time formats for Quarter and week interval type\n * @param text\n * @param axis\n * @param index\n */\n RangeNavigatorAxis.prototype.dateFormats = function (text, axis, index) {\n var changedText = text;\n var isFirstLevel = this.rangeNavigator.enableGrouping && this.firstLevelLabels.length === 0;\n switch (axis.actualIntervalType) {\n case 'Quarter':\n if (text.indexOf('Jan') > -1) {\n changedText = !isFirstLevel ? text.replace('Jan', 'Quarter1') : 'Quarter1';\n }\n else if (text.indexOf('Apr') > -1) {\n changedText = !isFirstLevel ? text.replace('Apr', 'Quarter2') : 'Quarter2';\n }\n else if (text.indexOf('Jul') > -1) {\n changedText = !isFirstLevel ? text.replace('Jul', 'Quarter3') : 'Quarter3';\n }\n else if (text.indexOf('Oct') > -1) {\n changedText = !isFirstLevel ? text.replace('Oct', 'Quarter4') : 'Quarter4';\n }\n break;\n case 'Weeks':\n changedText = 'Week' + ++index;\n break;\n default:\n changedText = text;\n break;\n }\n return changedText;\n };\n /**\n * To find the y co-ordinate for axis labels\n * @param control - rangeNavigator\n * @param isSecondary sets true if the axis is secondary axis\n */\n RangeNavigatorAxis.prototype.findLabelY = function (control, isSecondary) {\n var pointY;\n var reference = control.bounds.y + control.bounds.height;\n var tickHeight = control.majorTickLines.height;\n var textHeight = measureText('Quarter1 2011', control.labelStyle).height;\n var padding = 8;\n if ((control.labelPosition === 'Outside' && control.tickPosition === 'Outside') || control.series.length === 0) {\n pointY = reference + tickHeight + padding + textHeight * 0.75;\n }\n else if (control.labelPosition === 'Inside' && control.tickPosition === 'Inside') {\n pointY = reference - tickHeight - padding;\n }\n else if (control.labelPosition === 'Inside' && control.tickPosition === 'Outside') {\n pointY = reference - padding;\n }\n else {\n pointY = reference + padding + (textHeight * 0.75);\n }\n if (isSecondary) {\n padding = 15;\n if (control.labelPosition === 'Outside' || control.series.length === 0) {\n pointY += padding + textHeight * 0.75;\n }\n else {\n pointY = (control.tickPosition === 'Outside' || control.series.length === 0) ?\n reference + tickHeight + padding + textHeight * 0.75 : reference + padding + textHeight * 0.75;\n }\n }\n return pointY;\n };\n /**\n * It places the axis labels and returns border for secondary axis labels\n * @param axis axis for the lables placed\n * @param pointY y co-ordinate for axis labels\n * @param id id for the axis elements\n * @param control range navigator\n * @param labelElement parent element in which axis labels appended\n */\n RangeNavigatorAxis.prototype.placeAxisLabels = function (axis, pointY, id, control, labelElement) {\n var maxLabels = axis.visibleLabels.length;\n var label;\n var prevLabel;\n var pointX;\n var rect = control.bounds;\n var border = '';\n var pointXGrid;\n var disabledColor = (control.disableRangeSelector) ? 'transparent' : null;\n var prevX = control.enableRtl ? (rect.x + rect.width) : rect.x;\n var intervalType = axis.actualIntervalType;\n var intervalInTime = control.valueType === 'DateTime' ?\n maxLabels > 1 ? (axis.visibleLabels[1].value - axis.visibleLabels[0].value) :\n (axis.visibleRange.max - axis.visibleLabels[0].value) / 2 : 0;\n if (control.valueType === 'DateTime' && (intervalType === 'Quarter' || intervalType === 'Weeks')) {\n this.findSuitableFormat(axis, control);\n }\n for (var i = 0, len = maxLabels; i < len; i++) {\n label = axis.visibleLabels[i];\n label.size = measureText(label.text, axis.labelStyle);\n if (control.secondaryLabelAlignment === 'Middle') {\n pointX = (valueToCoefficient((label.value + intervalInTime / 2), axis) * rect.width) + rect.x;\n }\n else if ((id.indexOf('Secondary') > -1)) {\n pointX = this.findAlignment(axis, i);\n }\n pointXGrid = (valueToCoefficient((label.value), axis) * rect.width) + rect.x;\n //edgelabelPlacements\n if ((i === 0 || (i === axis.visibleLabels.length - 1 && control.enableRtl)) && pointX < rect.x) {\n pointX = rect.x + label.size.width / 2;\n }\n if ((i === axis.visibleLabels.length - 1 || (i === 0 && control.enableRtl)) &&\n ((pointX + label.size.width) > (rect.x + rect.width))) {\n pointX = rect.x + rect.width - label.size.width / 2;\n }\n //secondary axis grid lines\n if (id.indexOf('_SecondaryLabel_') > -1) {\n if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n border = border.concat('M ' + pointXGrid + ' ' + pointY +\n ' L ' + pointXGrid + ' ' + (pointY - label.size.height));\n }\n }\n //smart axis label position,\n if (control.labelIntersectAction === 'Hide' &&\n i !== 0 && this.isIntersect(axis, pointX, label.size.width, prevX, prevLabel.size.width)) {\n continue;\n }\n //labelrender event\n var argsData = void 0;\n var labelStyle = control.labelStyle;\n var style = {\n size: labelStyle.size, color: disabledColor || labelStyle.color || control.themeStyle.labelFontColor,\n fontFamily: labelStyle.fontFamily,\n fontStyle: labelStyle.fontStyle || control.labelStyle.fontStyle,\n fontWeight: labelStyle.fontWeight || control.labelStyle.fontWeight,\n opacity: labelStyle.opacity || control.labelStyle.opacity,\n textAlignment: labelStyle.textAlignment || control.labelStyle.textAlignment,\n textOverflow: labelStyle.textOverflow || control.labelStyle.textOverflow\n };\n argsData = {\n cancel: false, name: 'labelRender',\n text: label.text, value: label.value, labelStyle: style,\n region: new Rect(pointX, pointY, label.size.width, label.size.height)\n };\n control.trigger('labelRender', argsData);\n if (!argsData.cancel) {\n control.labels.push(argsData);\n }\n else {\n continue;\n }\n textElement(new TextOption(this.rangeNavigator.element.id + id + i, pointX, pointY, 'middle', argsData.text), argsData.labelStyle, argsData.labelStyle.color || control.themeStyle.labelFontColor, labelElement).setAttribute('style', axis.valueType === 'DateTime' ? 'cursor: pointer' : 'cursor: default');\n prevX = pointX;\n prevLabel = label;\n }\n return border;\n };\n /**\n * To check label is intersected with successive label or not\n */\n RangeNavigatorAxis.prototype.isIntersect = function (axis, currentX, currentWidth, prevX, prevWidth) {\n return (axis.isInversed) ? (currentX + currentWidth / 2 > prevX - prevWidth / 2) :\n (currentX - currentWidth / 2 < prevX + prevWidth / 2);\n };\n /**\n * To find suitable label format for Quarter and week Interval types\n * @param axis\n * @param control\n */\n RangeNavigatorAxis.prototype.findSuitableFormat = function (axis, control) {\n var labels = axis.visibleLabels;\n var labelLength = labels.length;\n var bounds = control.bounds;\n var prevX;\n var currentX;\n var interval = control.valueType === 'DateTime' ?\n labelLength > 1 ? (labels[1].value - labels[0].value) : axis.visibleRange.interval\n : 0;\n for (var i = 0; i < labelLength; i++) {\n currentX = (valueToCoefficient((labels[i].value + interval / 2), axis) * bounds.width) + bounds.x;\n labels[i].size = measureText(labels[i].text, axis.labelStyle);\n //edgelabelPlacements\n if (i === 0 && currentX < bounds.x) {\n currentX = bounds.x + labels[i].size.width / 2;\n }\n if (axis.actualIntervalType === 'Quarter') {\n if (i !== 0) {\n if ((labels[i].text.indexOf('Quarter') > -1) &&\n (this.isIntersect(axis, currentX, labels[i].size.width, prevX, labels[i - 1].size.width))) {\n labels.every(function (label) {\n label.text = label.text.toString().replace('Quarter', 'QTR');\n return true;\n });\n axis.visibleLabels = labels;\n this.findSuitableFormat(axis, control);\n }\n else {\n if (this.isIntersect(axis, currentX, labels[i].size.width, prevX, labels[i - 1].size.width)) {\n labels.every(function (label) {\n label.text = label.text.toString().replace('QTR', 'Q');\n return true;\n });\n axis.visibleLabels = labels;\n }\n }\n }\n }\n else if (axis.actualIntervalType === 'Weeks') {\n if ((i !== 0) && ((labels[i].text.indexOf('Week') > -1) &&\n (this.isIntersect(axis, currentX, labels[i].size.width, prevX, labels[i - 1].size.width)))) {\n labels.every(function (label) {\n label.text = label.text.toString().replace('Week', 'W');\n return true;\n });\n axis.visibleLabels = labels;\n }\n }\n prevX = currentX;\n }\n };\n /**\n * Alignment position for secondary level labels in date time axis\n * @param axis\n * @param index\n */\n RangeNavigatorAxis.prototype.findAlignment = function (axis, index) {\n var label = axis.visibleLabels[index];\n var nextLabel = axis.visibleLabels[index + 1];\n var bounds = this.rangeNavigator.bounds;\n return (this.rangeNavigator.secondaryLabelAlignment === 'Near' ?\n (valueToCoefficient((label.value), axis) * bounds.width) + bounds.x + label.size.width / 2 :\n (valueToCoefficient((nextLabel ? nextLabel.value : axis.visibleRange.max), axis) * bounds.width) + bounds.x - label.size.width);\n };\n return RangeNavigatorAxis;\n}(DateTime));\nexport { RangeNavigatorAxis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { Border, Animation, Font } from '../../common/model/base';\nimport { Rect } from '../../index';\nimport { RangeNavigatorTheme } from '../utils/theme';\n/**\n * Series class for the range navigator\n */\nvar RangeNavigatorSeries = /** @class */ (function (_super) {\n __extends(RangeNavigatorSeries, _super);\n function RangeNavigatorSeries() {\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 __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"xName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"yName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"query\", void 0);\n __decorate([\n Property('Line')\n ], RangeNavigatorSeries.prototype, \"type\", void 0);\n __decorate([\n Complex({ enable: false }, Animation)\n ], RangeNavigatorSeries.prototype, \"animation\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 2 }, Border)\n ], RangeNavigatorSeries.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], RangeNavigatorSeries.prototype, \"width\", void 0);\n __decorate([\n Property('0')\n ], RangeNavigatorSeries.prototype, \"dashArray\", void 0);\n return RangeNavigatorSeries;\n}(ChildProperty));\nexport { RangeNavigatorSeries };\n/**\n * Thumb settings\n */\nvar ThumbSettings = /** @class */ (function (_super) {\n __extends(ThumbSettings, _super);\n function ThumbSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ThumbSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ThumbSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({ width: 1, color: null }, Border)\n ], ThumbSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], ThumbSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Circle')\n ], ThumbSettings.prototype, \"type\", void 0);\n return ThumbSettings;\n}(ChildProperty));\nexport { ThumbSettings };\n/**\n * Style settings\n */\nvar StyleSettings = /** @class */ (function (_super) {\n __extends(StyleSettings, _super);\n function StyleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, ThumbSettings)\n ], StyleSettings.prototype, \"thumb\", void 0);\n __decorate([\n Property(null)\n ], StyleSettings.prototype, \"selectedRegionColor\", void 0);\n __decorate([\n Property(null)\n ], StyleSettings.prototype, \"unselectedRegionColor\", void 0);\n return StyleSettings;\n}(ChildProperty));\nexport { StyleSettings };\n/**\n * button settings in period selector\n */\nvar Periods = /** @class */ (function (_super) {\n __extends(Periods, _super);\n function Periods() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Years')\n ], Periods.prototype, \"intervalType\", void 0);\n __decorate([\n Property(1)\n ], Periods.prototype, \"interval\", void 0);\n __decorate([\n Property(null)\n ], Periods.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], Periods.prototype, \"selected\", void 0);\n return Periods;\n}(ChildProperty));\nexport { Periods };\n/**\n * Period Selector Settings\n */\nvar PeriodSelectorSettings = /** @class */ (function (_super) {\n __extends(PeriodSelectorSettings, _super);\n function PeriodSelectorSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(43)\n ], PeriodSelectorSettings.prototype, \"height\", void 0);\n __decorate([\n Property('Bottom')\n ], PeriodSelectorSettings.prototype, \"position\", void 0);\n __decorate([\n Collection([], Periods)\n ], PeriodSelectorSettings.prototype, \"periods\", void 0);\n return PeriodSelectorSettings;\n}(ChildProperty));\nexport { PeriodSelectorSettings };\n/*\n * Configures the ToolTips in the chart.\n */\nvar RangeTooltipSettings = /** @class */ (function (_super) {\n __extends(RangeTooltipSettings, _super);\n function RangeTooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], RangeTooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(0.85)\n ], RangeTooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], RangeTooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(null)\n ], RangeTooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Complex(RangeNavigatorTheme.tooltipLabelFont, Font)\n ], RangeTooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], RangeTooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, Border)\n ], RangeTooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Property('OnDemand')\n ], RangeTooltipSettings.prototype, \"displayMode\", void 0);\n return RangeTooltipSettings;\n}(ChildProperty));\nexport { RangeTooltipSettings };\n","export var Theme;\n(function (Theme) {\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.smithchartTitleFont = {\n size: '15px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.smithchartSubtitleFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n})(Theme || (Theme = {}));\n/** @private */\nexport function getSeriesColor(theme) {\n var palette;\n switch (theme) {\n case 'Highcontrast':\n palette = ['#79ECE4', '#E98272', '#DFE6B6', '#C6E773', '#BA98FF',\n '#FA83C3', '#00C27A', '#43ACEF', '#D681EF', '#D8BC6E'];\n break;\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 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 axisLine: '#ffffff',\n majorGridLine: '#BFBFBF',\n minorGridLine: '#969696',\n chartTitle: '#ffffff',\n legendLabel: '#ffffff',\n background: '#000000',\n areaBorder: '#ffffff',\n tooltipFill: '#ffffff',\n dataLabel: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696',\n };\n break;\n default:\n style = {\n axisLabel: '#686868',\n axisLine: '#b5b5b5',\n majorGridLine: '#dbdbdb',\n minorGridLine: '#eaeaea',\n chartTitle: '#424242',\n legendLabel: '#353535',\n background: '#FFFFFF',\n areaBorder: 'Gray',\n tooltipFill: 'rgba(0, 8, 22, 0.75)',\n dataLabel: '#424242',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff'\n };\n break;\n }\n return style;\n}\n","import { Browser, createElement } from '@syncfusion/ej2-base';\nimport { RectOption } from '../../common/utils/helper';\nimport { getXLocation, getExactData, getRangeValueXByPoint, getNearestValue } from '../utils/helper';\nimport { drawSymbol, PathOption, linear } from '../../chart/index';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * Class for slider\n */\nvar RangeSlider = /** @class */ (function () {\n function RangeSlider(range) {\n this.control = range;\n this.points = [];\n this.isIOS = Browser.isIos || Browser.isIos7;\n var thumb = range.navigatorStyleSettings.thumb;\n this.thumbVisible = (range.themeStyle.thumbWidth !== 0 && range.themeStyle.thumbHeight !== 0);\n this.elementId = range.element.id;\n this.thumpPadding = range.themeStyle.thumbWidth / 2;\n this.addEventListener();\n this.thumbColor = range.disableRangeSelector ? 'transparent' :\n (thumb.fill || range.themeStyle.thumbBackground);\n }\n /**\n * Render Slider elements for range navigator\n * @param range\n */\n RangeSlider.prototype.render = function (range) {\n var renderer = range.renderer;\n var style = range.navigatorStyleSettings;\n var disabledColor = (range.disableRangeSelector) ? 'transparent' : null;\n var sliderGroup = renderer.createGroup({\n 'id': this.elementId + '_sliders',\n style: (range.disableRangeSelector) ? 'pointer-events:none;' : ''\n });\n var option = new RectOption(this.elementId + '_leftUnSelectedArea', disabledColor || style.unselectedRegionColor || range.themeStyle.unselectedRectColor, { width: 0 }, 1, {\n x: range.bounds.x, y: range.bounds.y,\n width: range.bounds.width / 3,\n height: range.bounds.height\n });\n this.leftUnSelectedElement = renderer.drawRectangle(option);\n option.id = this.elementId + '_rightUnSelectedArea';\n this.rightUnSelectedElement = renderer.drawRectangle(option);\n option.id = this.elementId + '_SelectedArea';\n option.fill = disabledColor || style.selectedRegionColor || range.themeStyle.selectedRegionColor;\n this.selectedElement = renderer.drawRectangle(option);\n this.selectedElement.setAttribute('style', 'cursor: -webkit-grab');\n this.leftSlider = renderer.createGroup({\n 'id': this.elementId + '_LeftSlider', 'style': 'cursor: ew-resize'\n });\n this.rightSlider = renderer.createGroup({\n 'id': this.elementId + '_RightSlider', 'style': 'cursor: ew-resize'\n });\n this.createThump(renderer, range.bounds, this.leftSlider, this.elementId + '_LeftSlider', sliderGroup);\n this.createThump(renderer, range.bounds, this.rightSlider, this.elementId + '_RightSlider');\n sliderGroup.appendChild(this.leftUnSelectedElement);\n sliderGroup.appendChild(this.rightUnSelectedElement);\n sliderGroup.appendChild(this.selectedElement);\n sliderGroup.appendChild(this.leftSlider);\n sliderGroup.appendChild(this.rightSlider);\n range.svgObject.appendChild(sliderGroup);\n };\n /**\n * Thumb creation performed\n * @param render\n * @param bounds\n * @param parent\n * @param id\n */\n RangeSlider.prototype.createThump = function (render, bounds, parent, id, sliderGroup) {\n var control = this.control;\n var thump = control.navigatorStyleSettings.thumb;\n var style = control.themeStyle;\n var y = bounds.y + bounds.height / 2;\n var x = this.thumpPadding;\n var tickLength = (control.themeStyle.thumbHeight / 2) - 5;\n var disabledColor = control.disableRangeSelector ? 'transparent' : null;\n var lineColor = disabledColor || thump.border.color || style.thumpLineColor;\n var shadowElement;\n parent.appendChild(render.drawPath(new PathOption(id + '_ThumpLine', 'transparent', thump.border.width, control.series.length ? lineColor : 'transparent', 1, null, 'M' + ' ' + (x) + ' ' + (bounds.y) + ' ' + 'L' + ' ' + (x) + ' ' + (bounds.y + bounds.height) + ' ')));\n this.thumpY = y - (control.themeStyle.thumbHeight / 2);\n this.sliderY = bounds.y > this.thumpY ? this.thumpY : bounds.y;\n if (sliderGroup && !control.disableRangeSelector) {\n shadowElement = render.createDefs();\n shadowElement.innerHTML = '' +\n '' +\n '' +\n '' +\n '';\n sliderGroup.appendChild(shadowElement);\n }\n parent.innerHTML += '';\n if (thump.type === 'Circle') {\n parent.appendChild(drawSymbol({ x: x, y: y }, 'Circle', { width: control.themeStyle.thumbWidth, height: control.themeStyle.thumbHeight }, '', new PathOption(id + '_ThumpSymbol', disabledColor || this.thumbColor, thump.border.width, lineColor, 1, null), 'Thumb'));\n }\n else {\n parent.appendChild(render.drawRectangle(new RectOption(id + '_ThumpSymbol', disabledColor || this.thumbColor, { width: thump.border.width, color: lineColor }, 1, {\n x: x - (control.themeStyle.thumbWidth / 2), y: y - (control.themeStyle.thumbHeight / 2),\n width: control.themeStyle.thumbWidth,\n height: control.themeStyle.thumbHeight\n }, 2, 2)));\n }\n if (this.thumbVisible) {\n parent.appendChild(render.drawPath(new PathOption(id + '_ThumpGrip', 'transparent', 1, disabledColor || control.themeStyle.gripColor, 1, null, 'M' + ' ' + (x + 2) + ' ' + (y + tickLength) + ' ' + 'L' + ' ' + (x + 2) + ' ' + (y - tickLength) + ' ' +\n 'M' + ' ' + (x) + ' ' + (y + tickLength) + ' ' + 'L' + ' ' + (x) + ' ' + (y - tickLength) + ' ' +\n 'M' + ' ' + (x - 2) + ' ' + (y + tickLength) + ' ' + 'L' + ' ' + (x - 2) + ' ' + (y - tickLength) + ' ')));\n }\n };\n /**\n * Set slider value for range navigator\n * @param start\n * @param end\n */\n RangeSlider.prototype.setSlider = function (start, end, trigger, showTooltip) {\n var range = this.control;\n var padding = range.bounds.x;\n var axisRange = range.chartSeries.xAxis.actualRange;\n var isLeightWeight = range.series.length === 0;\n if (!(end >= start)) {\n start = [end, end = start][0];\n }\n start = end >= start ? start : [end, end = start][0];\n start = Math.max(start, axisRange.min);\n end = Math.min(end, axisRange.max);\n this.startX = padding + getXLocation(start, axisRange, range.bounds.width, range.enableRtl);\n this.endX = padding + getXLocation(end, axisRange, range.bounds.width, range.enableRtl);\n var selectedX = range.enableRtl ? this.endX : this.startX;\n var rightPadding = range.enableRtl ? this.startX : this.endX;\n this.sliderWidth = Math.abs(this.endX - this.startX);\n this.selectedElement.setAttribute('x', (selectedX) + '');\n this.selectedElement.setAttribute('width', this.sliderWidth + '');\n this.leftUnSelectedElement.setAttribute('width', (selectedX - padding) + '');\n this.rightUnSelectedElement.setAttribute('x', rightPadding + '');\n this.rightUnSelectedElement.setAttribute('width', (range.bounds.width - (rightPadding - padding)) + '');\n this.leftSlider.setAttribute('transform', 'translate(' + (this.startX - this.thumpPadding) + ', 0)');\n this.rightSlider.setAttribute('transform', 'translate(' + (this.endX - this.thumpPadding) + ', 0)');\n var left = this.control.svgObject.getBoundingClientRect().left -\n this.control.element.getBoundingClientRect().left;\n var leftX = this.control.enableRtl ? this.endX : this.startX;\n var rightX = this.control.enableRtl ? this.startX : this.endX;\n this.leftRect = {\n x: isLeightWeight ? left + padding : padding,\n y: isLeightWeight ? 0 : range.bounds.y,\n width: isLeightWeight ? leftX - padding : leftX,\n height: isLeightWeight ? this.thumpY : range.bounds.height\n };\n this.rightRect = {\n x: isLeightWeight ? left + rightX : rightX,\n y: isLeightWeight ? 0 : range.bounds.y,\n width: (range.bounds.width - (rightPadding - padding)),\n height: isLeightWeight ? this.thumpY : range.bounds.height\n };\n this.midRect = {\n x: isLeightWeight ? leftX + left : 0,\n y: isLeightWeight ? 0 : range.bounds.y,\n width: isLeightWeight ? Math.abs(this.endX - this.startX) : rightX,\n height: isLeightWeight ? this.thumpY : range.bounds.height\n };\n this.currentStart = start;\n this.currentEnd = end;\n if (showTooltip) {\n this.control.rangeTooltipModule.renderLeftTooltip(this);\n this.control.rangeTooltipModule.renderRightTooltip(this);\n }\n if (trigger) {\n this.triggerEvent(axisRange);\n }\n };\n /**\n * Trigger changed event\n * @param range\n */\n RangeSlider.prototype.triggerEvent = function (range) {\n var argsData;\n var xAxis = this.control.chartSeries.xAxis;\n var valueType = xAxis.valueType;\n argsData = {\n cancel: false,\n start: valueType === 'DateTime' ? new Date(this.currentStart) :\n (valueType === 'Logarithmic' ? Math.pow(xAxis.logBase, this.currentStart) : this.currentStart),\n end: valueType === 'DateTime' ? new Date(this.currentEnd) :\n (valueType === 'Logarithmic' ? Math.pow(xAxis.logBase, this.currentEnd) : this.currentEnd),\n name: 'changed',\n selectedData: getExactData(this.points, this.currentStart, this.currentEnd),\n zoomPosition: (this.control.enableRtl ? range.max - this.currentEnd :\n this.currentStart - range.min) / range.delta,\n zoomFactor: (this.currentEnd - this.currentStart) / range.delta\n };\n this.control.trigger('changed', argsData);\n };\n /**\n * @hidden\n */\n RangeSlider.prototype.addEventListener = function () {\n if (this.control.isDestroyed) {\n return;\n }\n this.control.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.control.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.control.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.control.on(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseCancelHandler, this);\n };\n /**\n * @hidden\n */\n RangeSlider.prototype.removeEventListener = function () {\n if (this.control.isDestroyed) {\n return;\n }\n this.control.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.control.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.control.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.control.off(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseCancelHandler);\n };\n /**\n * Move move handler perfomed here\n * @hidden\n * @param e\n */\n RangeSlider.prototype.mouseMoveHandler = function (e) {\n var control = this.control;\n var axisRange = control.chartSeries.xAxis.actualRange;\n var bounds = control.bounds;\n var start;\n var end;\n this.getCurrentSlider(e.target.id);\n if (this.isDrag && control.mouseX >= bounds.x) {\n switch (this.currentSlider) {\n case 'Left':\n control.startValue = this.getRangeValue(Math.abs(control.mouseX - bounds.x));\n break;\n case 'Right':\n control.endValue = this.getRangeValue(Math.abs(control.mouseX - bounds.x));\n break;\n case 'Middle':\n start = Math.max(this.getRangeValue(Math.abs(this.startX - (this.previousMoveX - control.mouseX) - bounds.x)), axisRange.min);\n end = Math.min(this.getRangeValue(Math.abs(this.endX - (this.previousMoveX - control.mouseX) - bounds.x)), axisRange.max);\n var currentWidth = Math.floor(Math.abs(getXLocation(end, axisRange, control.bounds.width, control.enableRtl) -\n getXLocation(start, axisRange, control.bounds.width, control.enableRtl)));\n if (currentWidth === Math.floor(this.sliderWidth)) {\n control.startValue = start;\n control.endValue = end;\n }\n break;\n }\n if (e.preventDefault && this.isIOS) {\n e.preventDefault();\n }\n this.setSlider(control.startValue, control.endValue, !control.enableDeferredUpdate, (control.rangeTooltipModule && control.tooltip.enable));\n this.previousMoveX = control.mouseX;\n }\n };\n /**\n * To get the range value\n * @param x\n */\n RangeSlider.prototype.getRangeValue = function (x) {\n var control = this.control;\n var axisRange = control.chartSeries.xAxis.actualRange;\n var bounds = control.bounds;\n return getRangeValueXByPoint(x, bounds.width, axisRange, control.enableRtl);\n };\n /**\n * Moused down handler for slider perform here\n * @param e\n */\n RangeSlider.prototype.mouseDownHandler = function (e) {\n this.currentSlider = this.getCurrentSlider(e.target.id);\n this.selectedElement.setAttribute('style', 'cursor: -webkit-grabbing');\n this.isDrag = !(this.currentSlider === 'UnSelectedArea' || !this.currentSlider);\n this.previousMoveX = this.control.mouseDownX;\n };\n /**\n * To get the current slider element\n * @param id\n */\n RangeSlider.prototype.getCurrentSlider = function (id) {\n var hoverColor = this.control.themeStyle.thumbHoverColor;\n if (id.indexOf(this.elementId + '_LeftSlider') > -1) {\n this.leftSlider.childNodes[2].setAttribute('fill', hoverColor);\n return 'Left';\n }\n else if (id.indexOf(this.elementId + '_RightSlider') > -1) {\n this.rightSlider.childNodes[2].setAttribute('fill', hoverColor);\n return 'Right';\n }\n else if (id.indexOf(this.elementId + '_SelectedArea') > -1) {\n return 'Middle';\n }\n else if (id.indexOf('UnSelectedArea') > -1) {\n this.leftSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n this.rightSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n return 'UnSelectedArea';\n }\n else if (id.indexOf(this.elementId + '_AxisLabel_') > -1 && this.control.valueType === 'DateTime') {\n this.labelIndex = +id.split('_')[2];\n return 'firstLevelLabels';\n }\n else if (id.indexOf(this.elementId + '_SecondaryLabel') > -1 && this.control.valueType === 'DateTime') {\n this.labelIndex = +id.split('_')[2];\n return 'secondLevelLabels';\n }\n else {\n this.leftSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n this.rightSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n if (this.control.periodSelectorModule) {\n this.control.periodSelectorModule.triggerChange = true;\n }\n return null;\n }\n };\n /**\n * Mouse up handler performed here\n * @param e\n */\n RangeSlider.prototype.mouseUpHandler = function (e) {\n var control = this.control;\n var range = control.chartSeries.xAxis.actualRange;\n var trigger = control.enableDeferredUpdate;\n var endbledTooltip = control.tooltip.enable;\n if (this.currentSlider === 'UnSelectedArea') {\n var value = void 0;\n var start = void 0;\n var end = void 0;\n var isRtl = control.enableRtl;\n var difference = control.endValue - control.startValue;\n if (control.mouseDownX < this.startX) {\n value = Math.max(this.getRangeValue((control.mouseDownX - (this.sliderWidth / 2) - control.bounds.x)), range.min);\n end = isRtl ? value : (value + difference);\n start = isRtl ? (value - difference) : value;\n }\n else {\n value = Math.min(this.getRangeValue((control.mouseDownX + (this.sliderWidth / 2) - control.bounds.x)), range.max);\n start = isRtl ? value : (value - difference);\n end = isRtl ? (value + difference) : value;\n }\n this.performAnimation(start, end, control);\n trigger = false;\n }\n else if (this.currentSlider === 'firstLevelLabels' || this.currentSlider === 'secondLevelLabels') {\n var secondLabel = control.rangeAxis[this.currentSlider][this.labelIndex + 1];\n this.performAnimation(control.rangeAxis[this.currentSlider][this.labelIndex].value, (secondLabel ? secondLabel.value : range.max), control);\n trigger = false;\n }\n if (this.isDrag && control.allowSnapping) {\n this.setAllowSnapping(control, this.currentStart, this.currentEnd, trigger, endbledTooltip);\n trigger = false;\n }\n if (trigger) {\n this.setSlider(this.currentStart, this.currentEnd, true, endbledTooltip);\n }\n if (this.currentSlider !== null) {\n if (this.control.periodSelectorSettings.periods.length > 0) {\n this.control.periodSelectorModule.triggerChange = false;\n this.control.periodSelectorModule.datePicker.startDate = new Date(this.currentStart);\n this.control.periodSelectorModule.datePicker.endDate = new Date(this.currentEnd);\n }\n }\n this.selectedElement.setAttribute('style', 'cursor: -webkit-grab');\n control.startValue = this.currentStart;\n control.endValue = this.currentEnd;\n this.isDrag = false;\n this.labelIndex = null;\n this.currentSlider = null;\n };\n /**\n * Allow Snapping perfomed here\n * @param control\n * @param start\n * @param end\n */\n RangeSlider.prototype.setAllowSnapping = function (control, start, end, trigger, tooltip) {\n var values = control.rangeAxis.lowerValues;\n values.push(control.chartSeries.xAxis.actualRange.max);\n this.setSlider(getNearestValue(values, start), getNearestValue(values, end), trigger, tooltip);\n control.startValue = this.currentStart;\n control.endValue = this.currentEnd;\n };\n /**\n * Animation Calculation for slider navigation\n * @param start\n * @param end\n */\n RangeSlider.prototype.performAnimation = function (start, end, control) {\n var _this = this;\n var currentStart = this.currentStart;\n var currentEnd = this.currentEnd;\n var isDeffered = control.enableDeferredUpdate;\n var enableTooltip = control.tooltip.enable;\n new Animation({}).animate(createElement('div'), {\n duration: this.control.animationDuration,\n progress: function (args) {\n _this.setSlider(linear(args.timeStamp, 0, start - currentStart, args.duration) + currentStart, linear(args.timeStamp, 0, end - currentEnd, args.duration) + currentEnd, !isDeffered, enableTooltip);\n },\n end: function (model) {\n if (control.allowSnapping) {\n _this.setAllowSnapping(control, start, end, true, enableTooltip);\n }\n else {\n _this.setSlider(start, end, true, enableTooltip);\n }\n _this.control.startValue = _this.currentStart;\n _this.control.endValue = _this.currentEnd;\n if (_this.control.periodSelectorSettings.periods.length > 0) {\n _this.control.periodSelectorModule.triggerChange = false;\n _this.control.periodSelectorModule.datePicker.startDate = new Date(_this.currentStart);\n _this.control.periodSelectorModule.datePicker.endDate = new Date(_this.currentEnd);\n }\n }\n });\n };\n /**\n * Mouse Cancel Handler\n */\n RangeSlider.prototype.mouseCancelHandler = function () {\n this.isDrag = false;\n this.currentSlider = null;\n this.control.startValue = this.currentStart;\n this.control.endValue = this.currentEnd;\n };\n /**\n * Destroy Method Calling here\n */\n RangeSlider.prototype.destroy = function () {\n this.removeEventListener();\n };\n return RangeSlider;\n}());\nexport { RangeSlider };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, Complex, Collection, Browser } from '@syncfusion/ej2-base';\nimport { EventHandler, remove, Internationalization } from '@syncfusion/ej2-base';\nimport { Event } from '@syncfusion/ej2-base';\nimport { createSvg, Size, Rect, measureText, removeElement } from '../common/utils/helper';\nimport { Border, Margin } from '../common/model/base';\nimport { RangeSeries } from './renderer/chart-render';\nimport { RangeNavigatorAxis } from './renderer/range-axis';\nimport { RangeNavigatorSeries, StyleSettings, RangeTooltipSettings, PeriodSelectorSettings } from './model/range-base';\nimport { RangeSlider } from './renderer/slider';\nimport { RectOption } from '../chart/index';\nimport { getElement, LineSeries } from '../chart/index';\nimport { getRangeThemeColor } from './utils/theme';\nimport { Font } from '../common/model/base';\nimport { MajorGridLines, MajorTickLines } from '../chart/axis/axis';\nimport { RangeNavigatorTheme } from './utils/theme';\nimport { Double } from '../chart/axis/double-axis';\nimport { ExportUtils } from '../common/utils/export';\n/**\n * Range Navigator\n */\nvar RangeNavigator = /** @class */ (function (_super) {\n __extends(RangeNavigator, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function RangeNavigator(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.animateSeries = true;\n _this.chartid = 57725;\n return _this;\n }\n /**\n * Starting point of the control initialization\n */\n RangeNavigator.prototype.preRender = function () {\n this.unWireEvents();\n this.setCulture();\n if (this.element.id === '') {\n var collection = document.getElementsByClassName('e-rangenavigator').length;\n this.element.id = 'rangenavigator_' + this.chartid + '_' + collection;\n }\n this.wireEvents();\n };\n /**\n * To initialize the private variables\n */\n RangeNavigator.prototype.initPrivateVariables = function () {\n this.doubleModule = new Double();\n this.labels = [];\n this.rangeSlider = new RangeSlider(this);\n this.chartSeries = new RangeSeries(this);\n this.lineSeriesModule = new LineSeries();\n this.rangeAxis = new RangeNavigatorAxis(this);\n };\n /**\n * Method to set culture for chart\n */\n RangeNavigator.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * to initialize the slider\n */\n RangeNavigator.prototype.setSliderValue = function () {\n var isDateTime = this.valueType === 'DateTime';\n var range = this.chartSeries.xAxis.actualRange;\n this.startValue = this.startValue ? this.startValue : (!this.value[0] ? range.min :\n (isDateTime ? this.value[0].getTime() : +this.value[0]));\n this.endValue = this.endValue ? this.endValue : (!this.value[1] ? range.max :\n (isDateTime ? this.value[1].getTime() : +this.value[1]));\n };\n /**\n * To render the range navigator\n */\n RangeNavigator.prototype.render = function () {\n this.trigger('load', { rangeNavigator: this });\n this.setTheme();\n this.initPrivateVariables();\n this.createRangeSvg();\n this.calculateBounds();\n this.chartSeries.renderChart(this);\n removeElement('chartmeasuretext');\n };\n /**\n * Theming for rangeNavigator\n */\n RangeNavigator.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getRangeThemeColor(this.theme, this);\n };\n /**\n * Method to create SVG for Range Navigator\n */\n RangeNavigator.prototype.createRangeSvg = function () {\n this.removeSvg();\n createSvg(this);\n this.renderChartBackground();\n };\n /**\n * Bounds calculation for widget performed.\n */\n RangeNavigator.prototype.calculateBounds = function () {\n var labelPadding = this.enableGrouping ? 15 : 8;\n var thumb = this.navigatorStyleSettings.thumb;\n var labelSize = measureText('tempString', this.labelStyle).height;\n var margin = this.margin;\n var isLeightWeight = !this.series.length;\n var tooltipSpace = (!this.disableRangeSelector) &&\n isLeightWeight && this.tooltip.enable ? 35 : 0;\n var selector = this.periodSelectorModule;\n if (this.periodSelectorModule && this.periodSelectorSettings.periods.length > 0) {\n selector.periodSelectorSize = { x: 0, y: 0, height: 0, width: 0 };\n selector.periodSelectorSize.width = this.availableSize.width;\n selector.periodSelectorSize.height = this.periodSelectorSettings.height;\n selector.periodSelectorSize.y = this.periodSelectorSettings.position === 'Bottom' ?\n this.availableSize.height - selector.periodSelectorSize.height : 0;\n }\n var periodSelectorY = this.periodSelectorSettings.position === 'Top' && selector ?\n selector.periodSelectorSize.y + selector.periodSelectorSize.height : 0;\n this.bounds = new Rect((this.themeStyle.thumbWidth / 2 + thumb.border.width + margin.left), margin.top + tooltipSpace + periodSelectorY, this.availableSize.width - this.themeStyle.thumbWidth - (thumb.border.width * 2) - margin.left - margin.right, this.availableSize.height - margin.top - margin.bottom - tooltipSpace - (selector ? selector.periodSelectorSize.height : 0));\n var deductHeight = ((this.labelPosition === 'Outside' || isLeightWeight) ?\n (labelSize + labelPadding) : 0) + ((this.tickPosition === 'Outside' || isLeightWeight) ?\n (this.majorTickLines.height) : 0);\n this.bounds.height -= deductHeight;\n if (isLeightWeight) {\n var height = this.enableGrouping ? this.bounds.height - ((labelSize) + labelPadding) : this.bounds.height;\n this.bounds.y += (this.themeStyle.thumbHeight > height ? (this.themeStyle.thumbHeight - height) / 2 : 0);\n }\n if (this.disableRangeSelector) {\n this.bounds.y = 0;\n this.bounds.height = this.periodSelectorSettings.height;\n }\n };\n /**\n * Creating Chart for range navigator\n */\n RangeNavigator.prototype.renderChart = function () {\n this.chartSeries.renderSeries(this);\n this.rangeAxis.renderGridLines();\n this.rangeAxis.renderAxisLabels();\n this.createSecondaryElement();\n this.setSliderValue();\n this.renderPeriodSelector();\n this.renderSlider();\n this.element.appendChild(this.svgObject);\n this.trigger('loaded', { rangeNavigator: this });\n this.rangeSlider.setSlider(this.startValue, this.endValue, false, this.tooltip.enable && this.tooltip.displayMode === 'Always');\n };\n /**\n * To render period selector value\n */\n RangeNavigator.prototype.renderPeriodSelector = function () {\n if (this.periodSelectorModule) {\n this.periodSelectorModule.renderSelectorElement(this);\n this.periodSelectorModule.renderSelector();\n }\n };\n /**\n * Creating secondary range navigator\n */\n RangeNavigator.prototype.createSecondaryElement = function () {\n // For userInteraction\n if (this.tooltip.enable) {\n var tooltipDiv = this.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n }\n };\n /**\n * Slider Calculation ane rendering performed here\n */\n RangeNavigator.prototype.renderSlider = function () {\n this.rangeSlider.render(this);\n this.rangeSlider.setSlider(this.startValue, this.endValue, true, this.tooltip.enable && this.tooltip.displayMode === 'Always');\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.removeSvg = function () {\n if (getElement(this.element.id + '_Secondary_Element')) {\n remove(getElement(this.element.id + '_Secondary_Element'));\n }\n var removeLength = 0;\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 /** Wire, UnWire and Event releated calculation Started here */\n /**\n * Method to un-bind events for range navigator\n */\n RangeNavigator.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.rangeOnMouseDown);\n EventHandler.remove(this.element, moveEvent, this.mouseMove);\n EventHandler.remove(this.element, stopEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'click', this.rangeOnMouseClick);\n //EventHandler.remove(this.element, 'contextmenu', this.rangeRightClick);\n EventHandler.remove(this.element, cancelEvent, this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.rangeResize);\n };\n /**\n * Method to bind events for range navigator\n */\n RangeNavigator.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.rangeOnMouseDown, 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.rangeOnMouseClick, this);\n //EventHandler.add(this.element, 'contextmenu', this.rangeRightClick, this);\n EventHandler.add(this.element, cancelEvent, this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.rangeResize.bind(this));\n var element = this.element;\n element.style.touchAction = 'none';\n element.style.msTouchAction = 'none';\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 * Handles the widget resize.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.rangeResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n var arg = {\n rangeNavigator: this,\n name: 'resized',\n currentSize: new Size(0, 0),\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n };\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n _this.createRangeSvg();\n arg.currentSize = _this.availableSize;\n _this.trigger('resized', arg);\n _this.calculateBounds();\n _this.chartSeries.renderChart(_this);\n }, 500);\n return false;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.mouseMove = function (e) {\n this.mouseX = this.setMouseX(e);\n this.notify(Browser.touchMoveEvent, e);\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.mouseLeave = function (e) {\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.mouseX = this.setMouseX(e);\n this.notify(cancelEvent, e);\n return false;\n };\n /**\n * Handles the mouse click on range navigator.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.rangeOnMouseClick = function (e) {\n this.notify('click', e);\n return false;\n };\n /**\n * Handles the print method for range navigator control.\n */\n RangeNavigator.prototype.print = function (id) {\n new ExportUtils(this).print(id);\n };\n /**\n * Handles the export method for range navigator control.\n * @param type\n * @param fileName\n */\n RangeNavigator.prototype.export = function (type, fileName, orientation, controls, width, height) {\n controls = controls ? controls : [this];\n new ExportUtils(this).export(type, fileName, orientation, controls, width, height);\n };\n /**\n * Creating a background element to the svg object\n */\n RangeNavigator.prototype.renderChartBackground = function () {\n var rect = new RectOption(this.element.id + '_ChartBorder', this.themeStyle.background, { width: 0, color: 'transparent' }, 1, new Rect(0, 0, this.availableSize.width, this.availableSize.height));\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n };\n /**\n * Handles the mouse down on range navigator.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.rangeOnMouseDown = function (e) {\n this.mouseDownX = this.setMouseX(e);\n this.notify(Browser.touchStartEvent, e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.mouseEnd = function (e) {\n this.mouseX = this.setMouseX(e);\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n // private rangeRightClick(event: MouseEvent | PointerEvent): boolean {\n // if (event.buttons === 2 || event.which === 0 || (event).pointerType === 'touch') {\n // event.preventDefault();\n // event.stopPropagation();\n // return false;\n // }\n // return true;\n // }\n /**\n * To find mouse x, y for aligned range navigator element svg position\n */\n RangeNavigator.prototype.setMouseX = function (e) {\n var pageX = e.type.indexOf('touch') > -1 ?\n e.changedTouches[0].clientX : e.clientX;\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n return (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n };\n /** Wire, UnWire and Event releated calculation End here */\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n RangeNavigator.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * OnProperty change method calling here\n * @param newProp\n * @param oldProp\n */\n RangeNavigator.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n var refreshRange = false;\n this.animateSeries = 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 case 'navigatorBorder':\n case 'enableGrouping':\n case 'labelPosition':\n case 'tickPosition':\n case 'labelStyle':\n refreshBounds = true;\n break;\n case 'series':\n case 'enableRtl':\n case 'dataSource':\n case 'xName':\n case 'yName':\n case 'query':\n case 'minimum':\n case 'maximum':\n case 'interval':\n case 'intervalType':\n case 'logBase':\n case 'valueType':\n case 'majorGridLines':\n case 'minorGridLines':\n case 'navigatorStyleSettings':\n case 'labelFormat':\n case 'skeleton':\n case 'skeletonType':\n case 'secondaryLabelAlignment':\n renderer = true;\n break;\n case 'theme':\n this.animateSeries = true;\n break;\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'value':\n refreshRange = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.chartSeries.renderChart(this);\n }\n if (refreshBounds) {\n this.removeSvg();\n this.calculateBounds();\n this.chartSeries.renderChart(this);\n }\n if (!refreshBounds && !renderer && refreshRange) {\n this.setSliderValue();\n this.rangeSlider.setSlider(this.startValue, this.endValue, true, this.tooltip.enable && this.tooltip.displayMode === 'Always');\n }\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n RangeNavigator.prototype.requiredModules = function () {\n var _this = this;\n var modules = [];\n this.series.map(function (series) {\n modules.push({\n member: series.type + 'Series',\n args: [_this]\n });\n });\n if (this.periodSelectorSettings.periods.length > 0) {\n modules.push({\n member: 'PeriodSelector',\n args: [this]\n });\n }\n if (this.valueType !== 'Double') {\n modules.push({\n member: this.valueType,\n args: [this]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'RangeTooltip',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To get the module name of the widget\n */\n RangeNavigator.prototype.getModuleName = function () {\n return 'rangeNavigator';\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of rangeNavigator\n */\n RangeNavigator.prototype.destroy = function () {\n this.unWireEvents();\n this.rangeSlider.destroy();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-rangenavigator');\n };\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"xName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"yName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"query\", void 0);\n __decorate([\n Collection([], RangeNavigatorSeries)\n ], RangeNavigator.prototype, \"series\", void 0);\n __decorate([\n Complex({}, RangeTooltipSettings)\n ], RangeNavigator.prototype, \"tooltip\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"interval\", void 0);\n __decorate([\n Property('Auto')\n ], RangeNavigator.prototype, \"intervalType\", void 0);\n __decorate([\n Property('Hide')\n ], RangeNavigator.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Property(10)\n ], RangeNavigator.prototype, \"logBase\", void 0);\n __decorate([\n Property('Double')\n ], RangeNavigator.prototype, \"valueType\", void 0);\n __decorate([\n Property('Outside')\n ], RangeNavigator.prototype, \"labelPosition\", void 0);\n __decorate([\n Property(500)\n ], RangeNavigator.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"enableGrouping\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"enableDeferredUpdate\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"disableRangeSelector\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"allowSnapping\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property()\n ], RangeNavigator.prototype, \"groupBy\", void 0);\n __decorate([\n Property('Outside')\n ], RangeNavigator.prototype, \"tickPosition\", void 0);\n __decorate([\n Complex(RangeNavigatorTheme.axisLabelFont, Font)\n ], RangeNavigator.prototype, \"labelStyle\", void 0);\n __decorate([\n Complex({}, MajorGridLines)\n ], RangeNavigator.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, MajorTickLines)\n ], RangeNavigator.prototype, \"majorTickLines\", void 0);\n __decorate([\n Complex({}, StyleSettings)\n ], RangeNavigator.prototype, \"navigatorStyleSettings\", void 0);\n __decorate([\n Complex({}, PeriodSelectorSettings)\n ], RangeNavigator.prototype, \"periodSelectorSettings\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 1 }, Border)\n ], RangeNavigator.prototype, \"navigatorBorder\", void 0);\n __decorate([\n Property('Material')\n ], RangeNavigator.prototype, \"theme\", void 0);\n __decorate([\n Property([])\n ], RangeNavigator.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], RangeNavigator.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('')\n ], RangeNavigator.prototype, \"skeleton\", void 0);\n __decorate([\n Property('DateTime')\n ], RangeNavigator.prototype, \"skeletonType\", void 0);\n __decorate([\n Property('Middle')\n ], RangeNavigator.prototype, \"secondaryLabelAlignment\", void 0);\n __decorate([\n Complex({ top: 5, bottom: 5, right: 5, left: 5 }, Margin)\n ], RangeNavigator.prototype, \"margin\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"resized\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"labelRender\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"selectorRender\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"beforePrint\", void 0);\n RangeNavigator = __decorate([\n NotifyPropertyChanges\n ], RangeNavigator);\n return RangeNavigator;\n}(Component));\nexport { RangeNavigator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_RIGHTOVERLAY = 'e-scroll-right-overlay';\nvar CLS_LEFTOVERLAY = 'e-scroll-left-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n __extends(HScroll, _super);\n /**\n * Initializes a new instance of the HScroll class.\n * @param options - Specifies HScroll model properties as options.\n * @param element - Specifies the element for which horizontal scrolling applies.\n */\n function HScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n HScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var element = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (element.id === '') {\n element.id = getUniqueID('hscroll');\n this.uniqueId = true;\n }\n element.style.display = 'block';\n if (this.enableRtl) {\n element.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n HScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlay(this.element);\n }\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetWidth;\n this.customStep = false;\n }\n };\n HScroll.prototype.initialize = function () {\n var scrollEle = this.createElement('div', { className: CLS_HSCROLLCON });\n var scrollDiv = this.createElement('div', { className: CLS_HSCROLLBAR });\n scrollDiv.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollEle.appendChild(ele_1);\n }\n scrollDiv.appendChild(scrollEle);\n ele.appendChild(scrollDiv);\n scrollDiv.style.overflowX = 'hidden';\n this.scrollEle = scrollDiv;\n this.scrollItems = scrollEle;\n };\n HScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n HScroll.prototype.getModuleName = function () {\n return 'hScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n HScroll.prototype.destroy = function () {\n var ele = this.element;\n ele.style.display = '';\n ele.classList.remove(CLS_ROOT);\n ele.classList.remove(CLS_DEVICE);\n var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n var overlay = selectAll('.' + CLS_OVERLAY, ele);\n overlay.forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n ele.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (nav.length > 0) {\n detach(nav[0]);\n if (!isNullOrUndefined(nav[1])) {\n detach(nav[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the HScroll component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, HScroll will be enabled (false) or disabled (true).\n * @returns void.\n */\n HScroll.prototype.disable = function (value) {\n var navEles = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n value ? this.element.classList.add(CLS_DISABLE) : this.element.classList.remove(CLS_DISABLE);\n navEles.forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n HScroll.prototype.createOverlay = function (element) {\n var id = element.id.concat('_nav');\n var rightOverlayEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_RIGHTOVERLAY });\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var rightEle = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n rightEle.appendChild(navItem);\n var leftEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_LEFTOVERLAY });\n if (this.ieCheck) {\n rightEle.classList.add('e-ie-align');\n }\n element.appendChild(rightOverlayEle);\n element.appendChild(rightEle);\n element.insertBefore(leftEle, element.firstChild);\n this.eventBinding([rightEle]);\n };\n HScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var nav = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n var navEle = this.createElement('div', { id: id.concat('_left'), className: clsLeft + ' ' + CLS_DISABLE });\n navEle.setAttribute('aria-disabled', 'true');\n var navLeftItem = this.createElement('div', { className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navEle.appendChild(navLeftItem);\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n element.insertBefore(navEle, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navEle.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navEle]);\n };\n HScroll.prototype.onKeyPress = function (e) {\n var _this = this;\n if (e.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, e.target, true);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n HScroll.prototype.onKeyUp = function (e) {\n if (e.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n e.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n HScroll.prototype.eventBinding = function (ele) {\n var _this = this;\n ele.forEach(function (el) {\n new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n el.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n });\n };\n HScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n HScroll.prototype.tabHoldHandler = function (e) {\n var _this = this;\n var trgt = e.originalEvent.target;\n trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDis = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDis, trgt, true);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n HScroll.prototype.contains = function (ele, className) {\n return ele.classList.contains(className);\n };\n HScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var element = this.scrollEle;\n var rootEle = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_HSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n scrollDis = -scrollDis;\n }\n var scrlLeft = element.scrollLeft;\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n if (classList.contains(CLS_NAVRIGHTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n else {\n if (classList.contains(CLS_NAVLEFTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n };\n HScroll.prototype.clickEventHandler = function (e) {\n this.eleScrolling(this.scrollStep, e.target, false);\n };\n HScroll.prototype.swipeHandler = function (e) {\n var swipeEle = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceX / (e.velocity * 10);\n }\n else {\n distance = e.distanceX / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Left') {\n swipeEle.scrollLeft += distance * step;\n }\n else if (e.swipeDirection === 'Right') {\n swipeEle.scrollLeft -= distance * step;\n }\n start -= 0.02;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollLeft += scrollVal;\n }\n else {\n this.scrollEle.scrollLeft -= scrollVal;\n }\n };\n HScroll.prototype.frameScrollRequest = function (scrollVal, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollVal, action);\n return;\n }\n if (!this.customStep) {\n selectAll('.' + CLS_OVERLAY, this.element).forEach(function (el) {\n scrollVal -= el.offsetWidth;\n });\n }\n var animate = function () {\n if (scrollVal < step) {\n window.cancelAnimationFrame(step);\n }\n else {\n _this.scrollUpdating(step, action);\n scrollVal -= step;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.touchHandler = function (e) {\n var ele = this.scrollEle;\n var distance;\n distance = e.distanceX;\n if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n distance = -distance;\n }\n if (e.scrollDirection === 'Left') {\n ele.scrollLeft = ele.scrollLeft + distance;\n }\n else if (e.scrollDirection === 'Right') {\n ele.scrollLeft = ele.scrollLeft - distance;\n }\n };\n HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisable) ? removeDisable : addDisable;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisable)) {\n classList(arrowIcon, [CLS_NAVRIGHTARROW], [CLS_NAVLEFTARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVLEFTARROW], [CLS_NAVRIGHTARROW]);\n }\n }\n else {\n addDisable.classList.add(CLS_DISABLE);\n addDisable.setAttribute('aria-disabled', 'true');\n addDisable.removeAttribute('tabindex');\n removeDisable.classList.remove(CLS_DISABLE);\n removeDisable.setAttribute('aria-disabled', 'false');\n removeDisable.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n HScroll.prototype.scrollHandler = function (e) {\n var target = e.target;\n var width = target.offsetWidth;\n var rootEle = this.element;\n var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n var leftOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n var rightOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n var scrollLeft = target.scrollLeft;\n if (scrollLeft <= 0) {\n scrollLeft = -scrollLeft;\n }\n if (this.isDevice) {\n if (this.enableRtl && !(this.browserCheck || this.ieCheck)) {\n leftOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n rightOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n }\n if (scrollLeft < OVERLAY_MAXWID) {\n leftOverlay.style.width = scrollLeft + 'px';\n }\n else {\n leftOverlay.style.width = '40px';\n }\n if ((target.scrollWidth - Math.ceil(width + scrollLeft)) < OVERLAY_MAXWID) {\n rightOverlay.style.width = (target.scrollWidth - Math.ceil(width + scrollLeft)) + 'px';\n }\n else {\n rightOverlay.style.width = '40px';\n }\n }\n if (scrollLeft === 0) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n else {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n }\n else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n else {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n * @param {HScrollModel} newProp\n * @param {HScrollModel} oldProp\n * @returns void\n * @private\n */\n HScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], HScroll.prototype, \"scrollStep\", void 0);\n HScroll = __decorate([\n NotifyPropertyChanges\n ], HScroll);\n return HScroll;\n}(Component));\nexport { HScroll };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, isVisible, closest, attributes, detach, classList, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { selectAll, setStyleAttribute as setStyle } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, getUniqueID, formatUnit, Collection, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Browser } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { HScroll } from '../common/h-scroll';\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';\nvar CLS_MULTIROW = 'e-toolbar-multirow';\nvar CLS_MULTIROW_SEPARATOR = 'e-multirow-separator';\nvar CLS_EXTENDABLE_ITEM = 'e-extended-item';\nvar CLS_EXTENDABLE_SEPARATOR = 'e-extended-separator';\nvar CLS_EXTEANDABLE_TOOLBAR = 'e-extended-toolbar';\nvar CLS_EXTENDABLECLASS = 'e-toolbar-extended';\nvar CLS_EXTENDPOPUP = 'e-expended-nav';\nvar CLS_EXTENDEDPOPOPEN = 'e-tbar-extended';\n/**\n * An item object that is used to configure Toolbar commands.\n */\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], Item.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property('None')\n ], Item.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], Item.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], Item.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], Item.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], Item.prototype, \"align\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n/**\n * The Toolbar control contains a group of commands that are aligned horizontally.\n * ```html\n *
\n * \n * ```\n */\nvar Toolbar = /** @class */ (function (_super) {\n __extends(Toolbar, _super);\n /**\n * Initializes a new instance of the Toolbar class.\n * @param options - Specifies Toolbar model properties as options.\n * @param element - Specifies the element that is rendered as a Toolbar.\n */\n function Toolbar(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Contains the keyboard configuration of the Toolbar.\n */\n _this.keyConfigs = {\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n popupOpen: 'enter',\n popupClose: 'escape',\n tab: 'tab',\n home: 'home',\n end: 'end',\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void.\n */\n Toolbar.prototype.destroy = function () {\n var _this = this;\n var ele = this.element;\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n this.tempId.forEach(function (ele) {\n if (!isNOU(_this.element.querySelector(ele))) {\n document.body.appendChild(_this.element.querySelector(ele)).style.display = 'none';\n }\n });\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n if (this.trgtEle) {\n ele.appendChild(this.ctrlTem);\n }\n this.clearProperty();\n this.popObj = null;\n this.tbarAlign = null;\n this.remove(this.element, 'e-toolpop');\n ele.removeAttribute('style');\n ['aria-disabled', 'aria-orientation', 'aria-haspopup', 'role'].forEach(function (attrb) {\n _this.element.removeAttribute(attrb);\n });\n };\n /**\n * Initialize the event handler\n * @private\n */\n Toolbar.prototype.preRender = function () {\n var eventArgs = { enableCollision: true, scrollStep: this.scrollStep };\n this.trigger('beforeCreate', eventArgs);\n this.enableCollision = eventArgs.enableCollision;\n this.scrollStep = eventArgs.scrollStep;\n this.scrollModule = null;\n this.popObj = null;\n this.tempId = [];\n this.tbarItemsCol = this.items;\n this.popupPriCount = 0;\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n window.addEventListener('resize', this.resize.bind(this));\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n EventHandler.add(this.element, 'keydown', this.docKeyDown, this);\n this.element.setAttribute('tabIndex', '0');\n };\n Toolbar.prototype.docKeyDown = function (e) {\n if (e.target.tagName === 'INPUT') {\n return;\n }\n var popCheck = !isNOU(this.popObj) && isVisible(this.popObj.element) && this.overflowMode !== 'Extended';\n if (e.keyCode === 9 && e.target.classList.contains('e-hor-nav') === true && popCheck) {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n var keyCheck = (e.keyCode === 40 || e.keyCode === 38 || e.keyCode === 35 || e.keyCode === 36);\n if (keyCheck) {\n e.preventDefault();\n }\n };\n Toolbar.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n this.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 && this.overflowMode === 'Popup') {\n this.popObj.hide({ name: 'FadeOut', 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 this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n if (this.popObj) {\n this.popupRefresh(this.popObj.element, true);\n }\n };\n Toolbar.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Toolbar.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n Toolbar.prototype.elementFocus = function (ele) {\n var fChild = ele.firstElementChild;\n if (fChild) {\n fChild.focus();\n this.activeEleSwitch(ele);\n }\n else {\n ele.focus();\n }\n };\n Toolbar.prototype.clstElement = function (tbrNavChk, trgt) {\n var clst;\n if (tbrNavChk && this.popObj && isVisible(this.popObj.element)) {\n clst = this.popObj.element.querySelector('.' + CLS_ITEM);\n }\n else if (this.element === trgt || tbrNavChk) {\n clst = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' )');\n }\n else {\n clst = closest(trgt, '.' + CLS_ITEM);\n }\n return clst;\n };\n Toolbar.prototype.keyHandling = function (clst, e, trgt, navChk, scrollChk) {\n var popObj = this.popObj;\n var rootEle = this.element;\n var popAnimate = { name: 'FadeOut', duration: 100 };\n switch (e.action) {\n case 'moveRight':\n if (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 && this.overflowMode !== 'Extended') {\n popObj.hide(popAnimate);\n }\n break;\n case 'popupOpen':\n if (!navChk) {\n return;\n }\n if (popObj && !isVisible(popObj.element)) {\n popObj.element.style.top = rootEle.offsetHeight + 'px';\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n else {\n popObj.hide(popAnimate);\n }\n break;\n }\n };\n Toolbar.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n if (trgt.tagName === 'INPUT' || trgt.tagName === 'TEXTAREA' || this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n e.preventDefault();\n var clst;\n var tbrNavChk = trgt.classList.contains(CLS_TBARNAV);\n var tbarScrollChk = trgt.classList.contains(CLS_TBARSCRLNAV);\n clst = this.clstElement(tbrNavChk, trgt);\n if (clst || tbarScrollChk) {\n this.keyHandling(clst, e, trgt, tbrNavChk, tbarScrollChk);\n }\n };\n /**\n * Specifies the value to disable/enable the Toolbar component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, Toolbar will be enabled (false) or disabled (true).\n * @returns void.\n */\n Toolbar.prototype.disable = function (value) {\n var rootEle = this.element;\n value ? rootEle.classList.add(CLS_DISABLE) : rootEle.classList.remove(CLS_DISABLE);\n rootEle.setAttribute('tabindex', !value ? '0' : '-1');\n if (this.activeEle) {\n this.activeEle.setAttribute('tabindex', !value ? '0' : '-1');\n }\n if (this.scrollModule) {\n this.scrollModule.disable(value);\n }\n if (this.popObj) {\n if (isVisible(this.popObj.element) && this.overflowMode !== 'Extended') {\n this.popObj.hide();\n }\n rootEle.querySelector('#' + rootEle.id + '_nav').setAttribute('tabindex', !value ? '0' : '-1');\n }\n };\n Toolbar.prototype.eleFocus = function (closest, pos) {\n var sib = Object(closest)[pos + 'ElementSibling'];\n var contains = function (el) {\n return el.classList.contains(CLS_SEPARATOR) || el.classList.contains(CLS_DISABLE);\n };\n if (sib) {\n var skipEle = contains(sib);\n if (skipEle) {\n if (Object(sib)[pos + 'ElementSibling']) {\n sib = Object(sib)[pos + 'ElementSibling'];\n skipEle = contains(sib);\n if (skipEle) {\n this.eleFocus(sib, pos);\n return;\n }\n }\n else {\n return;\n }\n }\n this.elementFocus(sib);\n }\n else if (this.tbarAlign) {\n var elem = Object(closest.parentElement)[pos + 'ElementSibling'];\n if (!isNOU(elem) && elem.children.length === 0) {\n elem = Object(elem)[pos + 'ElementSibling'];\n }\n if (!isNOU(elem) && elem.children.length > 0) {\n if (pos === 'next') {\n var el = elem.querySelector('.' + CLS_ITEM);\n if (contains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n el.firstElementChild.focus();\n this.activeEleSwitch(el);\n }\n }\n else {\n var el = elem.lastElementChild;\n if (contains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n this.elementFocus(el);\n }\n }\n }\n }\n };\n Toolbar.prototype.clickHandler = function (e) {\n var trgt = e.target;\n var clsList = trgt.classList;\n var ele = this.element;\n var isPopupElement = !isNOU(closest(trgt, '.' + CLS_POPUPCLASS));\n var popupNav = closest(trgt, ('.' + CLS_TBARNAV));\n if (!popupNav) {\n popupNav = trgt;\n }\n if (!ele.children[0].classList.contains('e-hscroll') && (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 (!isNOU(this.popObj) && isPopupElement && !eventArgs.cancel && this.overflowMode === 'Popup') {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n };\n ;\n Toolbar.prototype.popupClickHandler = function (ele, popupNav, CLS_RTL) {\n var popObj = this.popObj;\n if (isVisible(popObj.element)) {\n popupNav.classList.remove(CLS_TBARNAVACT);\n popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n else {\n if (ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = true;\n popObj.position = { X: 'left', Y: 'top' };\n }\n if (popObj.offsetX === 0 && !ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = false;\n popObj.position = { X: 'right', Y: 'top' };\n }\n popObj.dataBind();\n popObj.refreshPosition();\n popObj.element.style.top = this.getElementOffsetY() + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '0px';\n }\n popupNav.classList.add(CLS_TBARNAVACT);\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Toolbar.prototype.render = function () {\n this.initialize();\n this.renderControl();\n this.separator();\n this.wireEvents();\n };\n Toolbar.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n if (Browser.info.name !== 'msie' || this.height !== 'auto' || this.overflowMode === 'MultiRow') {\n setStyle(this.element, { 'height': height });\n }\n setStyle(this.element, { 'width': width });\n var ariaAttr = {\n 'role': 'toolbar', 'aria-disabled': 'false', 'aria-haspopup': 'false', '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: this.scrollStep, enableRtl: this.enableRtl });\n this.scrollModule.createElement = this.createElement;\n this.scrollModule.appendTo(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 var style;\n [].slice.call(selectAll('.' + CLS_ITEM, items)).forEach(function (el) {\n if (isVisible(el)) {\n style = window.getComputedStyle(el);\n width += (el.offsetWidth + parseFloat(style.marginRight) + parseFloat(style.marginLeft));\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 = innerItem.offsetWidth;\n if (this.tbarAlign || this.scrollModule || (eleWidth === itemWidth)) {\n itemWidth = this.itemWidthCal(this.scrollModule ? innerItem.querySelector('.e-hscroll-content') : innerItem);\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 if (Browser.info.name === 'msie' && this.height === 'auto') {\n ele.style.height = '';\n }\n switch (this.overflowMode) {\n case 'Scrollable':\n if (isNOU(this.scrollModule)) {\n this.initHScroll(ele, ele.getElementsByClassName(CLS_ITEMS));\n }\n break;\n case 'Popup':\n this.add(this.element, 'e-toolpop');\n if (this.tbarAlign) {\n this.removePositioning();\n }\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n this.element.querySelector('.' + CLS_TBARNAV).setAttribute('tabIndex', '0');\n }\n if (this.tbarAlign) {\n this.add(innerItems, CLS_TBARPOS);\n this.itemPositioning();\n }\n break;\n case 'MultiRow':\n this.add(innerItems, CLS_MULTIROW);\n if (ele.style.overflow === 'hidden') {\n ele.style.overflow = '';\n }\n if (Browser.info.name === 'msie' || ele.style.height !== 'auto') {\n ele.style.height = 'auto';\n }\n break;\n case 'Extended':\n this.add(this.element, CLS_EXTEANDABLE_TOOLBAR);\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n this.element.querySelector('.' + CLS_TBARNAV).setAttribute('tabIndex', '0');\n }\n }\n }\n };\n Toolbar.prototype.separator = function () {\n var element = this.element;\n var eleItem = [].slice.call(element.querySelectorAll('.' + CLS_SEPARATOR));\n var eleInlineItem;\n var multiVar = element.querySelector('.' + CLS_MULTIROW_SEPARATOR);\n var extendVar = element.querySelector('.' + CLS_EXTENDABLE_SEPARATOR);\n eleInlineItem = this.overflowMode === 'MultiRow' ? multiVar : extendVar;\n if (eleInlineItem !== null) {\n if (this.overflowMode === 'MultiRow') {\n eleInlineItem.classList.remove(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleInlineItem.classList.remove(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n for (var i = 0; i <= eleItem.length - 1; i++) {\n if (eleItem[i].offsetLeft < 30 && eleItem[i].offsetLeft !== 0) {\n if (this.overflowMode === 'MultiRow') {\n eleItem[i].classList.add(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleItem[i].classList.add(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n }\n };\n Toolbar.prototype.createPopupEle = function (ele, innerEle) {\n var innerNav = ele.querySelector('.' + CLS_TBARNAV);\n 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, sepHeight) {\n var element = tbarObj.element;\n var nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n var nodeIndex = 0;\n var poppedEle = [].slice.call(selectAll('.' + CLS_POPUP, element.querySelector('.' + CLS_ITEMS)));\n var nodePri = 0;\n poppedEle.forEach(function (el, index) {\n nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n if (el.classList.contains(CLS_TBAROVERFLOW) && nodes.length > 0) {\n if (tbarObj.tbResize && nodes.length > index) {\n ele.insertBefore(el, nodes[index]);\n ++nodePri;\n }\n else {\n ele.insertBefore(el, ele.children[nodes.length]);\n ++nodePri;\n }\n }\n else if (el.classList.contains(CLS_TBAROVERFLOW)) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (tbarObj.tbResize && el.classList.contains(CLS_POPOVERFLOW) && ele.children.length > 0 && nodes.length === 0) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (el.classList.contains(CLS_POPOVERFLOW)) {\n popupPri.push(el);\n }\n else if (tbarObj.tbResize) {\n ele.insertBefore(el, ele.childNodes[nodeIndex + nodePri]);\n ++nodeIndex;\n }\n else {\n ele.appendChild(el);\n }\n if (el.classList.contains(CLS_SEPARATOR)) {\n setStyle(el, { display: '', height: sepHeight + 'px' });\n }\n else {\n setStyle(el, { display: '', height: eleHeight + 'px' });\n }\n });\n popupPri.forEach(function (el) {\n ele.appendChild(el);\n });\n var tbarEle = selectAll('.' + CLS_ITEM, element.querySelector('.' + CLS_ITEMS));\n for (var i = tbarEle.length - 1; i >= 0; i--) {\n var tbarElement = tbarEle[i];\n if (tbarElement.classList.contains(CLS_SEPARATOR) && this.overflowMode !== 'Extended') {\n setStyle(tbarElement, { display: 'none' });\n }\n else {\n break;\n }\n }\n };\n Toolbar.prototype.createPopup = function () {\n var element = this.element;\n var eleHeight;\n var eleItem;\n var sepHeight;\n var sepItem;\n if (this.overflowMode === 'Extended') {\n sepItem = element.querySelector('.' + CLS_SEPARATOR + ':not(.' + CLS_POPUP + ' )');\n sepHeight = (element.style.height === 'auto' || element.style.height === '') ? null : sepItem.offsetHeight;\n }\n eleItem = element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_POPUP + ' )');\n eleHeight = (element.style.height === 'auto' || element.style.height === '') ? null : eleItem.offsetHeight;\n var ele;\n var popupPri = [];\n if (element.querySelector('#' + element.id + '_popup.' + CLS_POPUPCLASS)) {\n ele = element.querySelector('#' + element.id + '_popup.' + CLS_POPUPCLASS);\n }\n else {\n var extendEle = this.createElement('div', {\n id: element.id + '_popup', className: CLS_POPUPCLASS + ' ' + CLS_EXTENDABLECLASS\n });\n var popupEle = this.createElement('div', { id: element.id + '_popup', className: CLS_POPUPCLASS });\n ele = this.overflowMode === 'Extended' ? extendEle : popupEle;\n }\n this.pushingPoppedEle(this, popupPri, ele, eleHeight, sepHeight);\n this.popupInit(element, ele);\n };\n Toolbar.prototype.getElementOffsetY = function () {\n return (this.overflowMode === 'Extended' && window.getComputedStyle(this.element).getPropertyValue('box-sizing') === 'border-box' ?\n this.element.clientHeight : this.element.offsetHeight);\n };\n Toolbar.prototype.popupInit = function (element, ele) {\n if (!this.popObj) {\n element.appendChild(ele);\n setStyle(this.element, { overflow: '' });\n var eleStyles = window.getComputedStyle(this.element);\n var popup = new Popup(null, {\n relateTo: this.element,\n offsetY: this.getElementOffsetY(),\n enableRtl: this.enableRtl,\n open: this.popupOpen.bind(this),\n close: this.popupClose.bind(this),\n collision: { Y: this.enableCollision ? 'flip' : 'none' },\n position: this.enableRtl ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }\n });\n popup.appendTo(ele);\n if (this.overflowMode === 'Extended') {\n popup.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n popup.offsetX = 0;\n }\n EventHandler.add(document, 'scroll', this.docEvent.bind(this));\n EventHandler.add(document, 'click ', this.docEvent.bind(this));\n popup.element.style.maxHeight = popup.element.offsetHeight + 'px';\n popup.hide();\n this.popObj = popup;\n this.element.setAttribute('aria-haspopup', 'true');\n }\n else {\n var popupEle = this.popObj.element;\n setStyle(popupEle, { maxHeight: '', display: 'block' });\n setStyle(popupEle, { maxHeight: popupEle.offsetHeight + 'px', display: '' });\n }\n };\n Toolbar.prototype.tbarPopupHandler = function (isOpen) {\n if (this.overflowMode === 'Extended') {\n isOpen ? this.add(this.element, CLS_EXTENDEDPOPOPEN) : this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n }\n };\n Toolbar.prototype.popupOpen = function (e) {\n var popObj = this.popObj;\n popObj.offsetY = this.getElementOffsetY();\n popObj.dataBind();\n var popupEle = this.popObj.element;\n var toolEle = this.popObj.element.parentElement;\n var popupNav = toolEle.querySelector('.' + CLS_TBARNAV);\n setStyle(popObj.element, { height: 'auto', maxHeight: '' });\n popObj.element.style.maxHeight = popObj.element.offsetHeight + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '';\n }\n var popupElePos = popupEle.offsetTop + popupEle.offsetHeight + calculatePosition(toolEle).top;\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.add(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n this.tbarPopupHandler(true);\n var scrollVal = isNOU(window.scrollY) ? 0 : window.scrollY;\n if (((window.innerHeight + scrollVal) < popupElePos) && (this.element.offsetTop < popupEle.offsetHeight)) {\n var overflowHeight = (popupEle.offsetHeight - ((popupElePos - window.innerHeight - scrollVal) + 5));\n popObj.height = overflowHeight + 'px';\n for (var i = 0; i <= popupEle.childElementCount; i++) {\n var ele = popupEle.children[i];\n if (ele.offsetTop + ele.offsetHeight > overflowHeight) {\n overflowHeight = ele.offsetTop;\n break;\n }\n }\n setStyle(popObj.element, { maxHeight: overflowHeight + 'px' });\n }\n };\n Toolbar.prototype.popupClose = function (e) {\n var element = this.element;\n var popupNav = element.querySelector('.' + CLS_TBARNAV);\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.remove(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPDOWN], [CLS_POPUPICON]);\n this.tbarPopupHandler(false);\n };\n Toolbar.prototype.checkPriority = function (ele, inEle, eleWidth, pre) {\n var popPriority = this.popupPriCount > 0;\n var len = inEle.length;\n var eleWid = eleWidth;\n var 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 (this.overflowMode === 'Extended') {\n if (itemCount === itemPopCount) {\n var sepEle = inEle[i];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[i].classList.add(CLS_POPUP);\n itemPopCount++;\n }\n }\n itemCount++;\n }\n else if (this.overflowMode === 'Popup') {\n if (sepCheck > 0 && itemCount === itemPopCount) {\n var sepEle = inEle[i + itemCount + (sepCheck - 1)];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n setStyle(sepEle, { display: 'none' });\n }\n }\n sepCheck++;\n itemCount = 0;\n itemPopCount = 0;\n }\n }\n else {\n itemCount++;\n }\n if (inEle[i].classList.contains(CLS_TBAROVERFLOW) && pre) {\n eleWidth -= (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 className = this.overflowMode === 'Extended' ? className + ' ' + CLS_EXTENDPOPUP : className;\n var nav = this.createElement('div', { id: id, className: className });\n if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n nav.classList.add('e-ie-align');\n }\n var navItem = this.createElement('div', { className: CLS_POPUPDOWN + ' e-icons' });\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n };\n Toolbar.prototype.tbarPriRef = function (inEle, indx, sepPri, el, des, elWid, wid, ig) {\n var ignoreCount = ig;\n var popEle = this.popObj.element;\n var query = '.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_TBAROVERFLOW + ')';\n var priEleCnt = selectAll('.' + CLS_POPUP + ':not(.' + CLS_TBAROVERFLOW + ')', popEle).length;\n var checkClass = function (ele, val) {\n return ele.classList.contains(val);\n };\n if (selectAll(query, inEle).length === 0) {\n var eleSep = inEle.children[indx - (indx - sepPri) - 1];\n var ignoreCheck = (!isNOU(eleSep) && checkClass(eleSep, CLS_TBARIGNORE));\n if ((!isNOU(eleSep) && checkClass(eleSep, CLS_SEPARATOR) && !isVisible(eleSep)) || ignoreCheck) {\n var sepDisplay = 'none';\n eleSep.style.display = 'inherit';\n var eleSepWidth = eleSep.offsetWidth + (parseFloat(window.getComputedStyle(eleSep).marginRight) * 2);\n var prevSep = eleSep.previousElementSibling;\n if ((elWid + eleSepWidth) < wid || des) {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n if (!isNOU(prevSep)) {\n prevSep.style.display = '';\n }\n }\n else {\n if (prevSep.classList.contains(CLS_SEPARATOR)) {\n prevSep.style.display = sepDisplay;\n }\n }\n eleSep.style.display = '';\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n }\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - priEleCnt]);\n }\n };\n Toolbar.prototype.popupRefresh = function (popupEle, destroy) {\n var _this = this;\n var ele = this.element;\n var 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 var popupEleWidth = 0;\n [].slice.call(popupEle.children).forEach(function (el) {\n popupEleWidth += _this.popupEleWidth(el);\n setStyle(el, { 'position': '' });\n });\n if ((width + popNav.offsetWidth) > (popupEleWidth) && this.popupPriCount === 0) {\n destroy = true;\n }\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 if (this_1.overflowMode !== 'Extended') {\n eleSplice.slice(0, index).forEach(function (el) {\n if (el.classList.contains(CLS_TBAROVERFLOW) || el.classList.contains(CLS_SEPARATOR)) {\n if (el.classList.contains(CLS_SEPARATOR)) {\n el.style.display = '';\n width -= el.offsetWidth;\n }\n sepBeforePri_1++;\n }\n });\n }\n ignoreCount = this_1.ignoreEleFetch(index, innerEle);\n if (el.classList.contains(CLS_TBAROVERFLOW)) {\n this_1.tbarPriRef(innerEle, index, sepBeforePri_1, el, destroy, elWidth, width, ignoreCount);\n width -= el.offsetWidth;\n }\n else if (index === 0) {\n innerEle.insertBefore(el, innerEle.firstChild);\n width -= el.offsetWidth;\n }\n else {\n priEleCnt = selectAll('.' + CLS_TBAROVERFLOW, this_1.popObj.element).length;\n innerEle.insertBefore(el, innerEle.children[(index + ignoreCount) - priEleCnt]);\n width -= el.offsetWidth;\n }\n el.style.height = '';\n }\n else {\n return \"break\";\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = [].slice.call(popupEle.children); _i < _a.length; _i++) {\n var el = _a[_i];\n var state_1 = _loop_1(el);\n if (state_1 === \"break\")\n break;\n }\n checkOverflow = this.checkOverflow(this.element, this.element.getElementsByClassName(CLS_ITEMS)[0]);\n if (checkOverflow && !destroy) {\n this.renderOverflowMode();\n }\n };\n Toolbar.prototype.removePositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n this.remove(item, CLS_TBARPOS);\n var innerItem = [].slice.call(item.childNodes);\n innerItem[1].removeAttribute('style');\n innerItem[2].removeAttribute('style');\n };\n Toolbar.prototype.refreshPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n this.add(item, CLS_TBARPOS);\n this.itemPositioning();\n };\n Toolbar.prototype.itemPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n 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(this.createElement('div', { className: CLS_TBARLEFT }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARCENTER }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARRIGHT }));\n if (pos === 0 && item.align !== 'Left') {\n alignDiv.forEach(function (ele) {\n itemEle.appendChild(ele);\n });\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n else if (item.align !== 'Left') {\n var alignEle = itemEle.childNodes;\n var leftAlign_1 = alignDiv[0];\n [].slice.call(alignEle).forEach(function (el) {\n _this.tbarAlgEle.lefts.push(el);\n leftAlign_1.appendChild(el);\n });\n itemEle.appendChild(leftAlign_1);\n itemEle.appendChild(alignDiv[1]);\n itemEle.appendChild(alignDiv[2]);\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n };\n Toolbar.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.trgtEle.cloneNode(true);\n this.add(this.trgtEle, CLS_ITEMS);\n this.tbarEle = [];\n var innerEle = [].slice.call(this.trgtEle.children);\n innerEle.forEach(function (ele) {\n if (ele.tagName === 'DIV') {\n _this.tbarEle.push(ele);\n ele.setAttribute('aria-disabled', 'false');\n _this.add(ele, CLS_ITEM);\n }\n });\n };\n Toolbar.prototype.renderItems = function () {\n var ele = this.element;\n var itemEleDom;\n var innerItem;\n var innerPos;\n var items = this.items;\n if (ele && ele.children.length > 0) {\n itemEleDom = ele.querySelector('.' + CLS_ITEMS);\n }\n if (this.trgtEle != null) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n if (!itemEleDom) {\n itemEleDom = this.createElement('div', { className: CLS_ITEMS });\n }\n for (var i = 0; i < items.length; i++) {\n innerItem = this.renderSubComponent(items[i], i);\n if (this.tbarEle.indexOf(innerItem) === -1) {\n this.tbarEle.push(innerItem);\n }\n if (!this.tbarAlign) {\n this.tbarItemAlign(items[i], itemEleDom, i);\n }\n innerPos = itemEleDom.querySelector('.e-toolbar-' + items[i].align.toLowerCase());\n if (innerPos) {\n if (!(items[i].showAlwaysInPopup && items[i].overflow !== 'Show')) {\n this.tbarAlgEle[(items[i].align + 's').toLowerCase()].push(innerItem);\n }\n innerPos.appendChild(innerItem);\n }\n else {\n itemEleDom.appendChild(innerItem);\n }\n }\n ele.appendChild(itemEleDom);\n }\n };\n Toolbar.prototype.setAttr = function (attr, element) {\n var key = Object.keys(attr);\n var keyVal;\n for (var i = 0; i < key.length; i++) {\n keyVal = key[i];\n keyVal === 'class' ? this.add(element, attr[keyVal]) : element.setAttribute(keyVal, attr[keyVal]);\n }\n };\n /**\n * Enables or disables the specified Toolbar item.\n * @param {HTMLElement|NodeList} items - DOM element or an array of items to be enabled or disabled.\n * @param {boolean} isEnable - Boolean value that determines whether the command should be enabled or disabled.\n * By default, `isEnable` is set to true.\n * @returns void.\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n var elements = items;\n var len = elements.length;\n if (isNOU(isEnable)) {\n isEnable = true;\n }\n var enable = function (isEnable, ele) {\n if (isEnable) {\n ele.classList.remove(CLS_DISABLE);\n ele.setAttribute('aria-disabled', 'false');\n }\n else {\n ele.classList.add(CLS_DISABLE);\n ele.setAttribute('aria-disabled', 'true');\n }\n };\n if (len && len > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n enable(isEnable, ele);\n }\n isEnable ? removeClass(elements, CLS_DISABLE) : addClass(elements, CLS_DISABLE);\n }\n else {\n var ele = void 0;\n ele = (len && len === 1) ? elements[0] : items;\n enable(isEnable, ele);\n }\n };\n /**\n * Adds new items to the Toolbar that accepts an array as Toolbar items.\n * @param {ItemsModel[]} items - DOM element or an array of items to be added to the Toolbar.\n * @param {number} index - Number value that determines where the command is to be added. By default, index is 0.\n * @returns void.\n */\n Toolbar.prototype.addItems = function (items, index) {\n var innerItems;\n var itemsDiv = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(itemsDiv)) {\n this.itemsRerender(items);\n return;\n }\n var innerEle;\n var itemAgn = 'Left';\n if (isNOU(index)) {\n index = 0;\n }\n items.forEach(function (e) {\n if (!isNOU(e.align) && e.align !== 'Left' && itemAgn === 'Left') {\n itemAgn = e.align;\n }\n });\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n if (isNOU(item.type)) {\n item.type = 'Button';\n }\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n item.align = itemAgn;\n innerEle = this.renderSubComponent(item, index);\n if (this.tbarEle.length >= index && innerItems.length >= 0) {\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var algIndex = item.align[0] === 'L' ? 0 : item.align[0] === 'C' ? 1 : 2;\n var ele = void 0;\n if (!this.tbarAlign && itemAgn !== 'Left') {\n this.tbarItemAlign(item, itemsDiv, 1);\n this.tbarAlign = true;\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n ele.appendChild(innerEle);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].push(innerEle);\n this.refreshPositioning();\n }\n else if (this.tbarAlign) {\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n ele.insertBefore(innerEle, ele.children[index]);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].splice(index, 0, innerEle);\n this.refreshPositioning();\n }\n else if (innerItems.length === 0) {\n innerItems = selectAll('.' + CLS_ITEMS, this.element);\n innerItems[0].appendChild(innerEle);\n }\n else {\n innerItems[0].parentNode.insertBefore(innerEle, innerItems[index]);\n }\n this.items.splice(index, 0, item);\n this.tbarEle.splice(index, 0, innerEle);\n index++;\n this.offsetWid = itemsDiv.offsetWidth;\n }\n }\n itemsDiv.style.width = '';\n this.renderOverflowMode();\n };\n /**\n * Removes the items from the Toolbar. Acceptable arguments are index of item/HTMLElement/node list.\n * @param {number|HTMLElement|NodeList|HTMLElement[]} args\n * Index or DOM element or an Array of item which is to be removed from the Toolbar.\n * @returns void.\n */\n Toolbar.prototype.removeItems = function (args) {\n var elements = args;\n var index;\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (typeof (elements) === 'number') {\n index = parseInt(args.toString(), 10);\n this.removeItemByIndex(index, innerItems);\n }\n else {\n if (elements && elements.length > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n index = this.tbarEle.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n }\n }\n else {\n var ele = (elements && elements.length && elements.length === 1) ? elements[0] : args;\n index = innerItems.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n }\n }\n this.resize();\n };\n Toolbar.prototype.removeItemByIndex = function (index, innerItems) {\n if (this.tbarEle[index] && innerItems[index]) {\n var eleIdx = this.tbarEle.indexOf(innerItems[index]);\n if (this.tbarAlign) {\n var indexAgn = void 0;\n indexAgn = this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].indexOf(this.tbarEle[eleIdx]);\n this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].splice(indexAgn, 1);\n }\n detach(innerItems[index]);\n this.items.splice(eleIdx, 1);\n this.tbarEle.splice(eleIdx, 1);\n }\n };\n Toolbar.prototype.templateRender = function (templateProp, innerEle, item, index) {\n var itemType = item.type;\n var eleObj = templateProp;\n var isComponent;\n if (typeof (templateProp) === 'object') {\n isComponent = typeof (eleObj.appendTo) === 'function';\n }\n if (typeof (templateProp) === 'string' || !isComponent) {\n var templateFn = void 0;\n var val = templateProp;\n val = (typeof (templateProp) === 'string') ? templateProp.trim() : templateProp;\n var e = void 0;\n try {\n if (typeof (templateProp) === 'object' && !isNOU(templateProp.tagName)) {\n innerEle.appendChild(templateProp);\n }\n else if (document.querySelectorAll(val).length) {\n var ele = document.querySelector(val);\n var tempStr = ele.outerHTML.trim();\n innerEle.appendChild(ele);\n ele.style.display = '';\n if (!isNOU(tempStr)) {\n this.tempId.push(val);\n }\n }\n }\n catch (e) {\n templateFn = templateCompiler(val);\n }\n var tempArray = void 0;\n if (!isNOU(templateFn)) {\n tempArray = templateFn({}, this, 'template');\n }\n if (!isNOU(tempArray) && tempArray.length > 0) {\n [].slice.call(tempArray).forEach(function (ele) {\n if (!isNOU(ele.tagName)) {\n ele.style.display = '';\n }\n innerEle.appendChild(ele);\n });\n }\n }\n else if (itemType === 'Input') {\n var ele = this.createElement('input');\n item.id ? (ele.id = item.id) : (ele.id = getUniqueID('tbr-ipt'));\n innerEle.appendChild(ele);\n eleObj.appendTo(ele);\n }\n this.add(innerEle, CLS_TEMPLATE);\n this.tbarEle.push(innerEle);\n };\n Toolbar.prototype.buttonRendering = function (item, innerEle) {\n var dom = this.createElement('button', { className: CLS_TBARBTN });\n dom.setAttribute('type', 'button');\n var textStr = item.text;\n var iconCss;\n var iconPos;\n item.id ? (dom.id = item.id) : dom.id = getUniqueID('e-tbr-btn');\n var btnTxt = this.createElement('div', { className: 'e-tbar-btn-text' });\n if (textStr) {\n btnTxt.innerHTML = textStr;\n dom.appendChild(btnTxt);\n dom.classList.add('e-tbtn-txt');\n }\n else {\n this.add(innerEle, 'e-tbtn-align');\n }\n if (item.prefixIcon || item.suffixIcon) {\n if ((item.prefixIcon && item.suffixIcon) || item.prefixIcon) {\n iconCss = item.prefixIcon + ' e-icons';\n iconPos = 'Left';\n }\n else {\n iconCss = item.suffixIcon + ' e-icons';\n iconPos = 'Right';\n }\n }\n var btnObj = new Button({ iconCss: iconCss, iconPosition: iconPos });\n btnObj.createElement = this.createElement;\n btnObj.appendTo(dom);\n if (item.width) {\n setStyle(dom, { 'width': formatUnit(item.width) });\n }\n return dom;\n };\n Toolbar.prototype.renderSubComponent = function (item, index) {\n var innerEle;\n var dom;\n innerEle = this.createElement('div', { className: CLS_ITEM });\n innerEle.setAttribute('aria-disabled', 'false');\n if (!this.tbarEle) {\n this.tbarEle = [];\n }\n if (item.htmlAttributes) {\n this.setAttr(item.htmlAttributes, innerEle);\n }\n if (item.tooltipText) {\n var tempDom = this.createElement('div', { innerHTML: item.tooltipText });\n innerEle.setAttribute('title', tempDom.textContent);\n }\n if (item.cssClass) {\n innerEle.className = innerEle.className + ' ' + item.cssClass;\n }\n if (item.template) {\n this.templateRender(item.template, innerEle, item, index);\n }\n else {\n switch (item.type) {\n case 'Button':\n dom = this.buttonRendering(item, innerEle);\n dom.setAttribute('tabindex', '-1');\n innerEle.appendChild(dom);\n innerEle.addEventListener('click', this.itemClick.bind(this));\n break;\n case 'Separator':\n this.add(innerEle, CLS_SEPARATOR);\n break;\n }\n }\n if (item.showTextOn) {\n var sTxt = item.showTextOn;\n if (sTxt === 'Toolbar') {\n this.add(innerEle, CLS_POPUPTEXT);\n this.add(innerEle, 'e-tbtn-align');\n }\n else if (sTxt === 'Overflow') {\n this.add(innerEle, CLS_TBARTEXT);\n }\n }\n if (item.overflow) {\n var overflow = item.overflow;\n if (overflow === 'Show') {\n this.add(innerEle, CLS_TBAROVERFLOW);\n }\n else if (overflow === 'Hide') {\n if (!innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPOVERFLOW);\n }\n }\n }\n if (item.overflow !== 'Show' && item.showAlwaysInPopup && !innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPPRI);\n this.popupPriCount++;\n }\n return innerEle;\n };\n Toolbar.prototype.itemClick = function (e) {\n this.activeEleSwitch(e.currentTarget);\n };\n Toolbar.prototype.activeEleSwitch = function (ele) {\n this.activeEleRemove(ele.firstElementChild);\n this.activeEle.focus();\n };\n Toolbar.prototype.activeEleRemove = function (curEle) {\n if (!isNOU(this.activeEle)) {\n this.activeEle.setAttribute('tabindex', '-1');\n }\n this.activeEle = curEle;\n if (isNOU(this.trgtEle) && !curEle.parentElement.classList.contains(CLS_TEMPLATE)) {\n curEle.removeAttribute('tabindex');\n }\n else {\n this.activeEle.setAttribute('tabindex', '0');\n }\n };\n Toolbar.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.itemsRerender = function (newProp) {\n this.items = this.tbarItemsCol;\n this.destroyMode();\n this.destroyItems();\n this.items = newProp;\n this.tbarItemsCol = this.items;\n this.renderItems();\n this.renderOverflowMode();\n };\n Toolbar.prototype.resize = function () {\n var ele = this.element;\n this.tbResize = true;\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.overflowMode === 'Popup') {\n this.popObj.hide();\n }\n var checkOverflow = this.checkOverflow(ele, ele.getElementsByClassName(CLS_ITEMS)[0]);\n if (!checkOverflow) {\n this.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.overflowMode === 'Extended') {\n var eleStyles = window.getComputedStyle(this.element);\n this.popObj.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n }\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.popupRefresh(this.popObj.element, false);\n if (this.tbarAlign) {\n this.refreshPositioning();\n }\n }\n this.offsetWid = ele.offsetWidth;\n this.tbResize = false;\n this.separator();\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n * @param {ToolbarModel} newProp\n * @param {ToolbarModel} oldProp\n * @returns void\n * @private\n */\n Toolbar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var tEle = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProb = Object.keys(newProp.items);\n for (var i = 0; i < changedProb.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[i], 10);\n var property = Object.keys(newProp.items[index])[0];\n var oldProperty = Object(oldProp.items[index])[property];\n var newProperty = Object(newProp.items[index])[property];\n if (this.tbarAlign || property === 'align') {\n this.refresh();\n break;\n }\n var popupPriCheck = property === 'showAlwaysInPopup' && !newProperty;\n var booleanCheck = property === 'overflow' && this.popupPriCount !== 0;\n if ((popupPriCheck) || (this.items[index].showAlwaysInPopup) && booleanCheck) {\n --this.popupPriCount;\n }\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var itemCol = [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, tEle));\n detach(itemCol[index]);\n this.tbarEle.splice(index, 1);\n this.addItems([this.items[index]], index);\n this.items.splice(index, 1);\n if (this.items[index].template) {\n this.tbarEle.splice(this.items.length, 1);\n }\n }\n }\n else {\n this.itemsRerender(newProp.items);\n }\n break;\n case 'width':\n var wid = tEle.offsetWidth;\n setStyle(tEle, { 'width': formatUnit(newProp.width) });\n this.renderOverflowMode();\n if (this.popObj && wid < tEle.offsetWidth) {\n this.popupRefresh(this.popObj.element, false);\n }\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'overflowMode':\n this.destroyMode();\n this.renderOverflowMode();\n if (this.enableRtl) {\n this.add(tEle, CLS_RTL);\n }\n this.refreshOverflow();\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.add(tEle, CLS_RTL) : this.remove(tEle, CLS_RTL);\n if (!isNOU(this.scrollModule)) {\n newProp.enableRtl ? this.add(this.scrollModule.element, CLS_RTL) : this.remove(this.scrollModule.element, CLS_RTL);\n }\n if (!isNOU(this.popObj)) {\n newProp.enableRtl ? this.add(this.popObj.element, CLS_RTL) : this.remove(this.popObj.element, CLS_RTL);\n }\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n break;\n }\n }\n };\n /**\n * Shows or hides the Toolbar item that is in the specified index.\n * @param {number} index - Index value of target item.\n * @param {boolean} value - Based on this Boolean value, item will be hide (true) or show (false). By default, value is false.\n * @returns void.\n */\n Toolbar.prototype.hideItem = function (index, value) {\n if (this.tbarEle[index]) {\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (value === true) {\n innerItems[index].classList.add(CLS_HIDDEN);\n }\n else {\n innerItems[index].classList.remove(CLS_HIDDEN);\n }\n this.refreshOverflow();\n }\n };\n __decorate([\n Collection([], Item)\n ], Toolbar.prototype, \"items\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"height\", void 0);\n __decorate([\n Property('Scrollable')\n ], Toolbar.prototype, \"overflowMode\", void 0);\n __decorate([\n Property(false)\n ], Toolbar.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"beforeCreate\", void 0);\n Toolbar = __decorate([\n NotifyPropertyChanges\n ], Toolbar);\n return Toolbar;\n}(Component));\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, KeyboardEvents, rippleEffect } from '@syncfusion/ej2-base';\nimport { getUniqueID, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { addClass, isVisible, closest, attributes, classList, detach, select } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Collection, Animation } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, selectAll } from '@syncfusion/ej2-base';\nvar CLS_ACRDN_ROOT = 'e-acrdn-root';\nvar CLS_ROOT = 'e-accordion';\nvar CLS_ITEM = 'e-acrdn-item';\nvar CLS_ITEMFOCUS = 'e-item-focus';\nvar CLS_ITEMHIDE = 'e-hide';\nvar CLS_HEADER = 'e-acrdn-header';\nvar CLS_HEADERICN = 'e-acrdn-header-icon';\nvar CLS_HEADERCTN = 'e-acrdn-header-content';\nvar CLS_CONTENT = 'e-acrdn-panel';\nvar CLS_CTENT = 'e-acrdn-content';\nvar CLS_TOOGLEICN = 'e-toggle-icon';\nvar CLS_COLLAPSEICN = 'e-tgl-collapse-icon e-icons';\nvar CLS_EXPANDICN = 'e-expand-icon';\nvar CLS_RTL = 'e-rtl';\nvar CLS_CTNHIDE = 'e-content-hide';\nvar CLS_SLCT = 'e-select';\nvar CLS_SLCTED = 'e-selected';\nvar CLS_ACTIVE = 'e-active';\nvar CLS_ANIMATE = 'e-animate';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_TOGANIMATE = 'e-toggle-animation';\nvar CLS_NEST = 'e-nested';\nvar CLS_EXPANDSTATE = 'e-expand-state';\nvar AccordionActionSettings = /** @class */ (function (_super) {\n __extends(AccordionActionSettings, _super);\n function AccordionActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], AccordionActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AccordionActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], AccordionActionSettings.prototype, \"easing\", void 0);\n return AccordionActionSettings;\n}(ChildProperty));\nexport { AccordionActionSettings };\nvar AccordionAnimationSettings = /** @class */ (function (_super) {\n __extends(AccordionAnimationSettings, _super);\n function AccordionAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, AccordionActionSettings)\n ], AccordionAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, AccordionActionSettings)\n ], AccordionAnimationSettings.prototype, \"expand\", void 0);\n return AccordionAnimationSettings;\n}(ChildProperty));\nexport { AccordionAnimationSettings };\n/**\n * An item object that is used to configure Accordion items.\n */\nvar AccordionItem = /** @class */ (function (_super) {\n __extends(AccordionItem, _super);\n function AccordionItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"content\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"header\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], AccordionItem.prototype, \"expanded\", void 0);\n return AccordionItem;\n}(ChildProperty));\nexport { AccordionItem };\n/**\n * The Accordion is a vertically collapsible content panel that displays one or more panels at a time within the available space.\n * ```html\n *
\n * \n * ```\n */\nvar Accordion = /** @class */ (function (_super) {\n __extends(Accordion, _super);\n /**\n * Initializes a new instance of the Accordion class.\n * @param options - Specifies Accordion model properties as options.\n * @param element - Specifies the element that is rendered as an Accordion.\n */\n function Accordion(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Contains the keyboard configuration of the Accordion.\n */\n _this.keyConfigs = {\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n enter: 'enter',\n space: 'space',\n home: 'home',\n end: 'end',\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n Accordion.prototype.destroy = function () {\n var _this = this;\n var ele = this.element;\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n this.isDestroy = true;\n this.templateEle.forEach(function (eleStr) {\n if (!isNOU(_this.element.querySelector(eleStr))) {\n document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n }\n });\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n if (this.trgtEle) {\n while (this.ctrlTem.firstChild) {\n ele.appendChild(this.ctrlTem.firstChild);\n }\n }\n ele.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 = this.createElement('div', { className: CLS_TOOGLEICN });\n var hdrColIcon = this.createElement('span', { className: CLS_COLLAPSEICN });\n tglIcon.appendChild(hdrColIcon);\n return tglIcon;\n };\n Accordion.prototype.initItemExpand = function () {\n var len = this.initExpand.length;\n if (len === 0) {\n return;\n }\n if (this.expandMode === 'Single') {\n this.expandItem(true, this.initExpand[len - 1]);\n }\n else {\n for (var i = 0; i < len; i++) {\n this.expandItem(true, this.initExpand[i]);\n }\n }\n };\n Accordion.prototype.renderItems = function () {\n var _this = this;\n var ele = this.element;\n var innerItem;\n if (isNOU(this.initExpand)) {\n this.initExpand = [];\n }\n var items = this.items;\n if (!isNOU(this.trgtEle)) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n items.forEach(function (item, index) {\n innerItem = _this.renderInnerItem(item, index);\n ele.appendChild(innerItem);\n if (innerItem.childElementCount > 0) {\n EventHandler.add(innerItem.querySelector('.' + CLS_HEADER), 'focus', _this.focusIn, _this);\n EventHandler.add(innerItem.querySelector('.' + CLS_HEADER), 'blur', _this.focusOut, _this);\n }\n });\n }\n };\n Accordion.prototype.clickHandler = function (e) {\n var _this = this;\n var trgt = e.target;\n var eventArgs = {};\n var index;\n var tglIcon;\n var acrdEle = closest(trgt, '.' + CLS_ROOT);\n if (acrdEle !== this.element) {\n return;\n }\n trgt.classList.add('e-target');\n var acrdnItem = closest(trgt, '.' + CLS_ITEM);\n var acrdnHdr = closest(trgt, '.' + CLS_HEADER);\n var acrdnCtn = closest(trgt, '.' + CLS_CONTENT);\n if (acrdnItem && (isNOU(acrdnHdr) || isNOU(acrdnCtn))) {\n acrdnHdr = acrdnItem.children[0];\n acrdnCtn = acrdnItem.children[1];\n }\n if (acrdnHdr) {\n tglIcon = select('.' + CLS_TOOGLEICN, acrdnHdr);\n }\n var acrdnCtnItem;\n if (acrdnCtn) {\n acrdnCtnItem = closest(acrdnCtn, '.' + CLS_ITEM);\n }\n var acrdActive = [];\n index = this.getIndexByItem(acrdnItem);\n if (acrdnCtnItem) {\n eventArgs.item = this.items[this.getIndexByItem(acrdnCtnItem)];\n }\n eventArgs.originalEvent = e;\n var ctnCheck = !isNOU(tglIcon) && isNOU(this.trgtEle) && acrdnItem.childElementCount <= 1;\n if (ctnCheck && (isNOU(acrdnCtn) || !isNOU(select('.' + CLS_HEADER + ' .' + CLS_TOOGLEICN, acrdnCtnItem)))) {\n acrdnItem.appendChild(this.contentRendering(index));\n this.ariaAttrUpdate(acrdnItem);\n }\n this.trigger('clicked', eventArgs);\n var cntclkCheck = (acrdnCtn && !isNOU(select('.e-target', acrdnCtn)));\n cntclkCheck = cntclkCheck && (isNOU(select('.' + CLS_ROOT, acrdnCtn)) || !(closest(trgt, '.' + CLS_ROOT) === this.element));\n trgt.classList.remove('e-target');\n if (trgt.classList.contains(CLS_CONTENT) || trgt.classList.contains(CLS_CTENT) || cntclkCheck) {\n return;\n }\n [].slice.call(this.element.children).forEach(function (el) {\n if (el.classList.contains(CLS_ACTIVE)) {\n acrdActive.push(el);\n }\n });\n var acrdAniEle = [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM + ' [' + CLS_ANIMATE + ']'));\n if (acrdAniEle.length > 0) {\n for (var _i = 0, acrdAniEle_1 = acrdAniEle; _i < acrdAniEle_1.length; _i++) {\n var el = acrdAniEle_1[_i];\n acrdActive.push(el.parentElement);\n }\n }\n var sameContentCheck = acrdActive.indexOf(acrdnCtnItem) !== -1 && acrdnCtn.getAttribute('e-animate') === 'true';\n var sameHeader = false;\n if (!isNOU(acrdnItem) && !isNOU(acrdnHdr)) {\n var acrdnCtn_1 = select('.' + CLS_CONTENT, acrdnItem);\n var acrdnRoot = closest(acrdnItem, '.' + CLS_ACRDN_ROOT);\n var expandState = acrdnRoot.querySelector('.' + CLS_EXPANDSTATE);\n if (isNOU(acrdnCtn_1)) {\n return;\n }\n sameHeader = (expandState === acrdnItem);\n if (isVisible(acrdnCtn_1) && (!sameContentCheck || acrdnCtnItem.classList.contains(CLS_SLCTED))) {\n this.collapse(acrdnCtn_1);\n }\n else {\n if ((acrdActive.length > 0) && this.expandMode === 'Single' && !sameContentCheck) {\n acrdActive.forEach(function (el) {\n _this.collapse(select('.' + CLS_CONTENT, el));\n el.classList.remove(CLS_EXPANDSTATE);\n });\n }\n this.expand(acrdnCtn_1);\n }\n if (!isNOU(expandState) && !sameHeader) {\n expandState.classList.remove(CLS_EXPANDSTATE);\n }\n }\n };\n Accordion.prototype.eleMoveFocus = function (action, root, trgt) {\n var clst;\n var clstItem = closest(trgt, '.' + CLS_ITEM);\n if (trgt === root) {\n clst = ((action === 'moveUp' ? trgt.lastElementChild : trgt).querySelector('.' + CLS_HEADER));\n }\n else if (trgt.classList.contains(CLS_HEADER)) {\n clstItem = (action === 'moveUp' ? clstItem.previousElementSibling : clstItem.nextElementSibling);\n if (clstItem) {\n clst = select('.' + CLS_HEADER, clstItem);\n }\n }\n if (clst) {\n clst.focus();\n }\n };\n Accordion.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n var header = closest(e.target, CLS_HEADER);\n if (isNOU(header) && !trgt.classList.contains(CLS_ROOT) && !trgt.classList.contains(CLS_HEADER)) {\n return;\n }\n var clst;\n var root = this.element;\n var content;\n switch (e.action) {\n case 'moveUp':\n this.eleMoveFocus(e.action, root, trgt);\n break;\n case 'moveDown':\n this.eleMoveFocus(e.action, root, trgt);\n break;\n case 'space':\n case 'enter':\n content = trgt.nextElementSibling;\n if (!isNOU(content) && content.classList.contains(CLS_CONTENT)) {\n if (content.getAttribute('e-animate') !== 'true') {\n trgt.click();\n }\n }\n else {\n trgt.click();\n }\n break;\n case 'home':\n case 'end':\n clst = e.action === 'home' ? root.firstElementChild.children[0] : root.lastElementChild.children[0];\n clst.focus();\n break;\n }\n };\n Accordion.prototype.headerEleGenerate = function () {\n var header = this.createElement('div', { className: CLS_HEADER, id: getUniqueID('acrdn_header') });\n var ariaAttr = {\n 'tabindex': '0', 'role': 'heading', 'aria-expanded': 'false', 'aria-selected': 'false',\n 'aria-disabled': 'false', 'aria-level': this.items.length.toString()\n };\n attributes(header, ariaAttr);\n return header;\n };\n Accordion.prototype.renderInnerItem = function (item, index) {\n var innerEle;\n innerEle = this.createElement('div', { className: CLS_ITEM });\n innerEle.id = getUniqueID('acrdn_item');\n if (item.header) {\n var ctnEle = this.headerEleGenerate();\n var hdrEle = this.createElement('div', { className: CLS_HEADERCTN });\n ctnEle.appendChild(hdrEle);\n ctnEle.appendChild(this.fetchElement(hdrEle, item.header, index, true));\n innerEle.appendChild(ctnEle);\n }\n var hdr = select('.' + CLS_HEADER, innerEle);\n if (item.expanded && !isNOU(index) && (!this.enablePersistence)) {\n if (this.initExpand.indexOf(index) === -1) {\n this.initExpand.push(index);\n }\n }\n if (item.cssClass) {\n innerEle.classList.add(item.cssClass);\n }\n if (item.iconCss) {\n var hdrIcnEle = this.createElement('div', { className: CLS_HEADERICN });\n var icon = this.createElement('span', { className: item.iconCss + ' e-icons' });\n hdrIcnEle.appendChild(icon);\n if (isNOU(hdr)) {\n hdr = this.headerEleGenerate();\n hdr.appendChild(hdrIcnEle);\n innerEle.appendChild(hdr);\n }\n else {\n hdr.insertBefore(hdrIcnEle, hdr.childNodes[0]);\n }\n }\n if (item.content) {\n var hdrIcon = this.toggleIconGenerate();\n if (isNOU(hdr)) {\n hdr = this.headerEleGenerate();\n innerEle.appendChild(hdr);\n }\n hdr.appendChild(hdrIcon);\n this.add(innerEle, CLS_SLCT);\n }\n return innerEle;\n };\n Accordion.prototype.fetchElement = function (ele, value, index, isHeader) {\n var templateFn;\n var temString;\n try {\n if (document.querySelectorAll(value).length) {\n var eleVal = document.querySelector(value);\n temString = eleVal.outerHTML.trim();\n ele.appendChild(eleVal);\n eleVal.style.display = '';\n }\n }\n catch (e) {\n templateFn = templateCompiler(value);\n }\n var tempArray;\n if (!isNOU(templateFn)) {\n tempArray = templateFn();\n }\n if (!isNOU(tempArray) && tempArray.length > 0 && !(isNOU(tempArray[0].tagName) && tempArray.length === 1)) {\n [].slice.call(tempArray).forEach(function (el) {\n if (!isNOU(el.tagName)) {\n el.style.display = '';\n }\n ele.appendChild(el);\n });\n }\n else if (ele.childElementCount === 0) {\n ele.innerHTML = value;\n }\n if (!isNOU(temString)) {\n this.templateEle.push(value);\n }\n return ele;\n };\n Accordion.prototype.ariaAttrUpdate = function (itemEle) {\n var header = select('.' + CLS_HEADER, itemEle);\n var content = select('.' + CLS_CONTENT, itemEle);\n header.setAttribute('aria-controls', content.id);\n content.setAttribute('aria-labelledby', header.id);\n };\n Accordion.prototype.contentRendering = function (index) {\n var content = this.items[index].content;\n var itemcnt = this.createElement('div', { className: CLS_CONTENT + ' ' + CLS_CTNHIDE, id: getUniqueID('acrdn_panel') });\n attributes(itemcnt, { 'aria-hidden': 'true' });\n var ctn = this.createElement('div', { className: CLS_CTENT });\n itemcnt.appendChild(this.fetchElement(ctn, content, index, false));\n return itemcnt;\n };\n Accordion.prototype.expand = function (trgt) {\n var eventArgs;\n var trgtItemEle = closest(trgt, '.' + CLS_ITEM);\n if (isNOU(trgt) || (isVisible(trgt) && trgt.getAttribute('e-animate') !== 'true') || trgtItemEle.classList.contains(CLS_DISABLE)) {\n return;\n }\n var acrdnRoot = closest(trgtItemEle, '.' + CLS_ACRDN_ROOT);\n var expandState = acrdnRoot.querySelector('.' + CLS_EXPANDSTATE);\n var animation = {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing\n };\n var icon = select('.' + CLS_TOOGLEICN, trgtItemEle).firstElementChild;\n eventArgs = { element: trgtItemEle,\n item: this.items[this.getIndexByItem(trgtItemEle)],\n isExpanded: true };\n var eff = animation.name;\n this.trigger('expanding', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n icon.classList.add(CLS_TOGANIMATE);\n this.expandedItemsPush(trgtItemEle);\n if (!isNOU(expandState)) {\n expandState.classList.remove(CLS_EXPANDSTATE);\n }\n trgtItemEle.classList.add(CLS_EXPANDSTATE);\n if ((animation.name === 'None')) {\n this.expandProgress('begin', icon, trgt, trgtItemEle, eventArgs);\n this.expandProgress('end', icon, trgt, trgtItemEle, eventArgs);\n return;\n }\n this.expandAnimation(eff, icon, trgt, trgtItemEle, animation, eventArgs);\n };\n Accordion.prototype.expandAnimation = function (ef, icn, trgt, trgtItemEle, animate, args) {\n var _this = this;\n var height;\n var trgtHgt;\n this.lastActiveItemId = trgtItemEle.id;\n if (ef === 'SlideDown') {\n animate.begin = function () {\n _this.expandProgress('begin', icn, trgt, trgtItemEle, args);\n trgt.style.position = 'absolute';\n height = trgtItemEle.offsetHeight;\n trgtHgt = trgt.offsetHeight;\n trgt.style.maxHeight = (trgt.offsetHeight) + 'px';\n trgtItemEle.style.maxHeight = '';\n };\n animate.progress = function () {\n trgtItemEle.style.minHeight = (height + trgt.offsetHeight) + 'px';\n };\n animate.end = function () {\n setStyle(trgt, { 'position': '', 'maxHeight': '' });\n trgtItemEle.style.minHeight = '';\n _this.expandProgress('end', icn, trgt, trgtItemEle, args);\n };\n }\n else {\n animate.begin = function () {\n _this.expandProgress('begin', icn, trgt, trgtItemEle, args);\n };\n animate.end = function () {\n _this.expandProgress('end', icn, trgt, trgtItemEle, args);\n };\n }\n new Animation(animate).animate(trgt);\n };\n Accordion.prototype.expandProgress = function (progress, icon, trgt, trgtItemEle, eventArgs) {\n this.remove(trgt, CLS_CTNHIDE);\n this.add(trgtItemEle, CLS_SLCTED);\n this.add(icon, CLS_EXPANDICN);\n if (progress === 'end') {\n this.add(trgtItemEle, CLS_ACTIVE);\n trgt.setAttribute('aria-hidden', 'false');\n attributes(trgt.previousElementSibling, { 'aria-selected': 'true', 'aria-expanded': 'true' });\n icon.classList.remove(CLS_TOGANIMATE);\n this.trigger('expanded', eventArgs);\n }\n };\n Accordion.prototype.expandedItemsPush = function (item) {\n var index = this.getIndexByItem(item);\n if (this.expandedItems.indexOf(index) === -1) {\n this.expandedItems.push(index);\n }\n };\n Accordion.prototype.getIndexByItem = function (item) {\n return [].slice.call(this.element.children).indexOf(item);\n };\n Accordion.prototype.expandedItemsPop = function (item) {\n var index = this.getIndexByItem(item);\n this.expandedItems.splice(this.expandedItems.indexOf(index), 1);\n };\n Accordion.prototype.collapse = function (trgt) {\n var eventArgs;\n var trgtItemEle = closest(trgt, '.' + CLS_ITEM);\n if (isNOU(trgt) || !isVisible(trgt) || trgtItemEle.classList.contains(CLS_DISABLE)) {\n return;\n }\n var animation = {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n };\n var icon = select('.' + CLS_TOOGLEICN, trgtItemEle).firstElementChild;\n eventArgs = { element: trgtItemEle,\n item: this.items[this.getIndexByItem(trgtItemEle)],\n isExpanded: false };\n var eff = animation.name;\n this.trigger('expanding', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.expandedItemsPop(trgtItemEle);\n trgtItemEle.classList.add(CLS_EXPANDSTATE);\n icon.classList.add(CLS_TOGANIMATE);\n if ((animation.name === 'None')) {\n this.collapseProgress('begin', icon, trgt, trgtItemEle, eventArgs);\n this.collapseProgress('end', icon, trgt, trgtItemEle, eventArgs);\n return;\n }\n this.collapseAnimation(eff, trgt, trgtItemEle, icon, animation, eventArgs);\n };\n Accordion.prototype.collapseAnimation = function (ef, trgt, trgtItEl, icn, animate, args) {\n var _this = this;\n var height;\n var trgtHeight;\n var itemHeight;\n var remain;\n this.lastActiveItemId = trgtItEl.id;\n if (ef === 'SlideUp') {\n animate.begin = function () {\n itemHeight = trgtItEl.offsetHeight;\n trgtItEl.style.minHeight = itemHeight + 'px';\n trgt.style.position = 'absolute';\n height = trgtItEl.offsetHeight;\n trgtHeight = trgt.offsetHeight;\n trgt.style.maxHeight = trgtHeight + 'px';\n _this.collapseProgress('begin', icn, trgt, trgtItEl, args);\n };\n animate.progress = function () {\n remain = ((height - (trgtHeight - trgt.offsetHeight)));\n if (remain < itemHeight) {\n trgtItEl.style.minHeight = remain + 'px';\n }\n };\n animate.end = function () {\n trgt.style.display = 'none';\n _this.collapseProgress('end', icn, trgt, trgtItEl, args);\n trgtItEl.style.minHeight = '';\n setStyle(trgt, { 'position': '', 'maxHeight': '', 'display': '' });\n };\n }\n else {\n animate.begin = function () {\n _this.collapseProgress('begin', icn, trgt, trgtItEl, args);\n };\n animate.end = function () {\n _this.collapseProgress('end', icn, trgt, trgtItEl, args);\n };\n }\n new Animation(animate).animate(trgt);\n };\n Accordion.prototype.collapseProgress = function (progress, icon, trgt, trgtItemEle, eventArgs) {\n this.remove(icon, CLS_EXPANDICN);\n this.remove(trgtItemEle, CLS_SLCTED);\n if (progress === 'end') {\n this.add(trgt, CLS_CTNHIDE);\n icon.classList.remove(CLS_TOGANIMATE);\n this.remove(trgtItemEle, CLS_ACTIVE);\n trgt.setAttribute('aria-hidden', 'true');\n attributes(trgt.previousElementSibling, { 'aria-selected': 'false', 'aria-expanded': 'false' });\n this.trigger('expanded', eventArgs);\n }\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Accordion.prototype.getModuleName = function () {\n return 'accordion';\n };\n Accordion.prototype.itemAttribUpdate = function () {\n var itemEle = [].slice.call(this.element.children);\n var itemLen = this.items.length;\n itemEle.forEach(function (ele) {\n select('.' + CLS_HEADER, ele).setAttribute('aria-level', '' + itemLen);\n });\n };\n /**\n * Adds new item to the Accordion with the specified index of the Accordion.\n * @param {AccordionItemModel} item - Item array that is to be added to the Accordion.\n * @param {number} index - Number value that determines where the item should be added.\n * By default, item is added at the last index if the index is not specified.\n * @returns void\n */\n Accordion.prototype.addItem = function (item, index) {\n var ele = this.element;\n if (isNOU(index)) {\n index = this.items.length;\n }\n if (ele.childElementCount >= index) {\n this.items.splice(index, 0, item);\n var innerItemEle = this.renderInnerItem(item, index);\n if (ele.childElementCount === index) {\n ele.appendChild(innerItemEle);\n }\n else {\n ele.insertBefore(innerItemEle, ele.children[index]);\n }\n EventHandler.add(innerItemEle.querySelector('.' + CLS_HEADER), 'focus', this.focusIn, this);\n EventHandler.add(innerItemEle.querySelector('.' + CLS_HEADER), 'blur', this.focusOut, this);\n this.itemAttribUpdate();\n }\n this.expandedItems = [];\n this.expandedItemRefresh(ele);\n if (item.expanded) {\n this.expandItem(true, index);\n }\n };\n Accordion.prototype.expandedItemRefresh = function (ele) {\n var _this = this;\n [].slice.call(ele.children).forEach(function (el) {\n if (el.classList.contains(CLS_SLCTED)) {\n _this.expandedItemsPush(el);\n }\n });\n };\n /**\n * Dynamically removes item from Accordion.\n * @param {number} index - Number value that determines which item should be removed.\n * @returns void.\n */\n Accordion.prototype.removeItem = function (index) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n detach(ele);\n this.items.splice(index, 1);\n this.itemAttribUpdate();\n this.expandedItems = [];\n this.expandedItemRefresh(this.element);\n };\n /**\n * Sets focus to the specified index item header in Accordion.\n * @param {number} index - Number value that determines which item should be focused.\n * @returns void.\n */\n Accordion.prototype.select = function (index) {\n var ele = this.element.children[index];\n if (isNOU(ele) || isNOU(select('.' + CLS_HEADER, ele))) {\n return;\n }\n ele.children[0].focus();\n };\n /**\n * Shows or hides the specified item from Accordion.\n * @param {number} index - Number value that determines which item should be hidden/shown.\n * @param {Boolean} isHidden - Boolean value that determines the action either hide (true) or show (false). Default value is false.\n * If the `isHidden` value is false, the item is shown or else item it is hidden.\n * @returns void.\n */\n Accordion.prototype.hideItem = function (index, isHidden) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n if (isNOU(isHidden)) {\n isHidden = true;\n }\n isHidden ? this.add(ele, CLS_ITEMHIDE) : this.remove(ele, CLS_ITEMHIDE);\n };\n /**\n * Enables/Disables the specified Accordion item.\n * @param {number} index - Number value that determines which item should be enabled/disabled.\n * @param {boolean} isEnable - Boolean value that determines the action as enable (true) or disable (false).\n * If the `isEnable` value is true, the item is enabled or else it is disabled.\n * @returns void.\n */\n Accordion.prototype.enableItem = function (index, isEnable) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n var eleHeader = ele.firstElementChild;\n if (isEnable) {\n this.remove(ele, CLS_DISABLE);\n attributes(eleHeader, { 'tabindex': '0', 'aria-disabled': 'false' });\n eleHeader.focus();\n }\n else {\n if (ele.classList.contains(CLS_ACTIVE)) {\n this.expandItem(false, index);\n this.eleMoveFocus('movedown', this.element, eleHeader);\n }\n this.add(ele, CLS_DISABLE);\n eleHeader.setAttribute('aria-disabled', 'true');\n eleHeader.removeAttribute('tabindex');\n }\n };\n /**\n * Expands/Collapses the specified Accordion item.\n * @param {boolean} isExpand - Boolean value that determines the action as expand or collapse.\n * @param {number} index - Number value that determines which item should be expanded/collapsed.`index` is optional parameter.\n * Without Specifying index, based on the `isExpand` value all Accordion item can be expanded or collapsed.\n * @returns void.\n */\n Accordion.prototype.expandItem = function (isExpand, index) {\n var _this = this;\n var root = this.element;\n if (isNOU(index)) {\n if (this.expandMode === 'Single' && isExpand) {\n var ele = root.children[root.childElementCount - 1];\n this.itemExpand(isExpand, ele, this.getIndexByItem(ele));\n }\n else {\n var item = select('#' + this.lastActiveItemId, this.element);\n [].slice.call(this.element.children).forEach(function (el) {\n _this.itemExpand(isExpand, el, _this.getIndexByItem(el));\n el.classList.remove(CLS_EXPANDSTATE);\n });\n var expandedItem = select('.' + CLS_EXPANDSTATE, this.element);\n if (expandedItem) {\n expandedItem.classList.remove(CLS_EXPANDSTATE);\n }\n if (item) {\n item.classList.add(CLS_EXPANDSTATE);\n }\n }\n }\n else {\n var ele = this.element.children[index];\n if (isNOU(ele) || !ele.classList.contains(CLS_SLCT) || (ele.classList.contains(CLS_ACTIVE) && isExpand)) {\n return;\n }\n else {\n if (this.expandMode === 'Single') {\n this.expandItem(false);\n }\n this.itemExpand(isExpand, ele, index);\n }\n }\n };\n Accordion.prototype.itemExpand = function (isExpand, ele, index) {\n var ctn = ele.children[1];\n if (ele.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (isNOU(ctn) && isExpand) {\n ctn = this.contentRendering(index);\n ele.appendChild(ctn);\n this.ariaAttrUpdate(ele);\n }\n else if (isNOU(ctn)) {\n return;\n }\n isExpand ? this.expand(ctn) : this.collapse(ctn);\n };\n Accordion.prototype.destroyItems = function () {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) { detach(el); });\n };\n Accordion.prototype.updateItem = function (item, index) {\n if (!isNOU(item)) {\n var itemObj = this.items[index];\n this.items.splice(index, 1);\n detach(item);\n this.addItem(itemObj, index);\n }\n };\n Accordion.prototype.getPersistData = function () {\n var keyEntity = ['expandedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n * @param {AccordionModel} newProp\n * @param {AccordionModel} oldProp\n * @returns void\n * @private\n */\n Accordion.prototype.onPropertyChanged = function (newProp, oldProp) {\n var acrdn = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProp = Object.keys(newProp.items);\n for (var j = 0; j < changedProp.length; j++) {\n var index = parseInt(Object.keys(newProp.items)[j], 10);\n var property = Object.keys(newProp.items[index])[0];\n var item = selectAll('.' + CLS_ITEM, this.element)[index];\n var oldVal = Object(oldProp.items[index])[property];\n var newVal = Object(newProp.items[index])[property];\n 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, detach, append, rippleEffect, isVisible, Complex } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { getZindexPartial, calculatePosition, isCollide, fit } from '@syncfusion/ej2-popups';\nimport { getScrollableParent, calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar DOWNARROW = 'downarrow';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar HOME = 'home';\nvar END = 'end';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\nvar RTL = 'e-rtl';\n/**\n * Configures the field options of the Menu.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"itemId\", void 0);\n __decorate([\n Property('parentId')\n ], FieldSettings.prototype, \"parentId\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('url')\n ], FieldSettings.prototype, \"url\", void 0);\n __decorate([\n Property('separator')\n ], FieldSettings.prototype, \"separator\", void 0);\n __decorate([\n Property('items')\n ], FieldSettings.prototype, \"children\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Specifies menu items.\n */\nvar MenuItem = /** @class */ (function (_super) {\n __extends(MenuItem, _super);\n function MenuItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MenuItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], MenuItem.prototype, \"separator\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuItem.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"url\", void 0);\n return MenuItem;\n}(ChildProperty));\nexport { MenuItem };\n/**\n * @private\n * Base class for Menu and ContextMenu components.\n */\nvar MenuBase = /** @class */ (function (_super) {\n __extends(MenuBase, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function MenuBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.navIdx = [];\n _this.animation = new Animation({});\n _this.isTapHold = false;\n return _this;\n }\n /**\n * Initialized third party configuration settings.\n * @private\n */\n MenuBase.prototype.preRender = function () {\n if (this.element.tagName === 'EJS-CONTEXTMENU') {\n this.element.style.display = 'none';\n this.element.classList.remove('e-' + this.getModuleName());\n this.element.classList.remove('e-control');\n var ejInst = getValue('ej2_instances', this.element);\n var ul = this.createElement('ul');\n this.ngElement = this.element;\n this.element = ul;\n this.element.classList.add('e-control');\n this.element.classList.add('e-' + this.getModuleName());\n setValue('ej2_instances', ejInst, this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\n }\n }\n if (this.element.tagName === 'EJS-MENU') {\n var ele = this.element;\n var ejInstance = getValue('ej2_instances', ele);\n var ul = this.createElement('ul');\n var wrapper = this.createElement('EJS-MENU', { className: 'e-' + this.getModuleName() + '-wrapper' });\n wrapper.style.display = 'block';\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n ul.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = ul;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.ngElement = wrapper;\n this.element = ele;\n if (!this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n MenuBase.prototype.render = function () {\n this.initialize();\n this.renderItems();\n this.wireEvents();\n };\n MenuBase.prototype.initialize = function () {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n if (this.isMenu) {\n this.element.parentElement.insertBefore(wrapper, this.element);\n }\n else {\n document.body.appendChild(wrapper);\n }\n }\n if (this.cssClass) {\n wrapper.classList.add(this.cssClass);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n attributes(this.element, { 'role': this.isMenu ? 'menubar' : 'menu', 'tabindex': '0' });\n wrapper.appendChild(this.element);\n this.element.style.zIndex = getZindexPartial(this.element).toString();\n };\n MenuBase.prototype.renderItems = function () {\n if (!this.items.length) {\n var items = ListBase.createJsonFromElement(this.element, { fields: { child: 'items' } });\n this.setProperties({ items: items }, true);\n this.element.innerHTML = '';\n }\n var ul = this.createItems(this.items);\n append(Array.prototype.slice.call(ul.children), this.element);\n this.element.classList.add('e-menu-parent');\n };\n MenuBase.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (Browser.isIos) {\n new Touch(target, { tapHold: this.touchHandler.bind(this) });\n }\n else {\n EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);\n }\n }\n this.targetElement = target;\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollHandler, this);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.isMenu ? document : 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 var keyConfigs = {\n downarrow: DOWNARROW,\n uparrow: UPARROW,\n enter: ENTER,\n leftarrow: LEFTARROW,\n rightarrow: RIGHTARROW,\n escape: ESCAPE\n };\n if (this.isMenu) {\n keyConfigs.home = HOME;\n keyConfigs.end = END;\n }\n new KeyboardEvents(wrapper, {\n keyAction: this.keyBoardHandler.bind(this),\n keyConfigs: keyConfigs\n });\n this.rippleFn = rippleEffect(wrapper, { selector: '.' + ITEM });\n };\n MenuBase.prototype.mouseDownHandler = function (e) {\n if (closest(e.target, '.e-' + this.getModuleName() + '-wrapper') !== this.getWrapper()) {\n this.closeMenu(this.navIdx.length, e);\n }\n };\n MenuBase.prototype.keyBoardHandler = function (e) {\n var actionName = '';\n var actionNeeded = this.isMenu && !this.element.classList.contains('e-vertical') && this.navIdx.length < 1;\n e.preventDefault();\n if (actionNeeded) {\n switch (e.action) {\n case RIGHTARROW:\n actionName = RIGHTARROW;\n e.action = DOWNARROW;\n break;\n case LEFTARROW:\n actionName = LEFTARROW;\n e.action = UPARROW;\n break;\n case DOWNARROW:\n actionName = DOWNARROW;\n e.action = RIGHTARROW;\n break;\n case UPARROW:\n actionName = UPARROW;\n e.action = '';\n break;\n }\n }\n else if (this.enableRtl) {\n switch (e.action) {\n case LEFTARROW:\n actionNeeded = true;\n actionName = LEFTARROW;\n e.action = RIGHTARROW;\n break;\n case RIGHTARROW:\n actionNeeded = true;\n actionName = RIGHTARROW;\n e.action = LEFTARROW;\n break;\n }\n }\n switch (e.action) {\n case DOWNARROW:\n case UPARROW:\n case END:\n case HOME:\n this.upDownKeyHandler(e);\n break;\n case RIGHTARROW:\n this.rightEnterKeyHandler(e);\n break;\n case LEFTARROW:\n this.leftEscKeyHandler(e);\n break;\n case ENTER:\n this.rightEnterKeyHandler(e);\n break;\n case ESCAPE:\n this.leftEscKeyHandler(e);\n break;\n }\n if (actionNeeded) {\n e.action = actionName;\n }\n };\n MenuBase.prototype.upDownKeyHandler = function (e) {\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n var defaultIdx = (e.action === DOWNARROW || e.action === HOME) ? 0 : cul.childElementCount - 1;\n var fliIdx = defaultIdx;\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n if (e.action !== END && e.action !== HOME) {\n fliIdx = this.getIdx(cul, fli);\n }\n fli.classList.remove(FOCUSED);\n if (e.action !== END && e.action !== HOME) {\n e.action === DOWNARROW ? fliIdx++ : fliIdx--;\n if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n fliIdx = defaultIdx;\n }\n }\n }\n var cli = cul.children[fliIdx];\n fliIdx = this.isValidLI(cli, fliIdx, e.action);\n cul.children[fliIdx].classList.add(FOCUSED);\n cul.children[fliIdx].focus();\n };\n MenuBase.prototype.isValidLI = function (cli, index, action) {\n var wrapper = this.getWrapper();\n var cul = 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 MenuBase.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 MenuBase.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 MenuBase.prototype.scrollHandler = function (e) {\n this.closeMenu(null, e);\n };\n MenuBase.prototype.touchHandler = function (e) {\n this.isTapHold = true;\n this.cmenuHandler(e.originalEvent);\n };\n MenuBase.prototype.cmenuHandler = function (e) {\n e.preventDefault();\n this.closeMenu(null, e);\n if (this.canOpen(e.target)) {\n if (e.changedTouches) {\n this.openMenu(null, null, e.changedTouches[0].pageY + 1, e.changedTouches[0].pageX + 1, e);\n }\n else {\n this.openMenu(null, null, e.pageY + 1, e.pageX + 1, e);\n }\n }\n };\n MenuBase.prototype.closeMenu = function (ulIndex, e) {\n if (ulIndex === void 0) { ulIndex = 0; }\n if (e === void 0) { e = null; }\n if (this.isMenuVisible()) {\n var ul = void 0;\n var sli = void 0;\n var item = void 0;\n var items = void 0;\n var closeArgs = void 0;\n var beforeCloseArgs = void 0;\n var wrapper = this.getWrapper();\n for (var cnt = wrapper.childElementCount; cnt > ulIndex; cnt--) {\n ul = wrapper.children[cnt - 1];\n if (this.isMenu && ul.classList.contains('e-menu')) {\n sli = this.getLIByClass(ul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n break;\n }\n item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n items = item ? item.items : this.items;\n beforeCloseArgs = { element: ul, parentItem: item, items: items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n 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 MenuBase.prototype.isMenuVisible = function () {\n return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n };\n MenuBase.prototype.canOpen = function (target) {\n var canOpen = true;\n if (this.filter) {\n canOpen = false;\n var filter = this.filter.split(' ');\n for (var i = 0, len = 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 MenuBase.prototype.openMenu = function (li, item, top, left, e, target) {\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (e === void 0) { e = null; }\n if (target === void 0) { target = this.targetElement; }\n var ul;\n var navIdx;\n var wrapper = this.getWrapper();\n if (li) {\n ul = this.createItems(item[this.getField('children', this.navIdx.length - 1)]);\n if (!this.isMenu && Browser.isDevice) {\n wrapper.lastChild.style.display = 'none';\n var data = {\n text: item[this.getField('text')].toString(), iconCss: ICONS + ' e-previous'\n };\n var hdata = new MenuItem(this.items[0], null, data, true);\n var hli = this.createItems([hdata]).children[0];\n hli.classList.add(HEADER);\n ul.insertBefore(hli, ul.children[0]);\n }\n ul.style.zIndex = this.element.style.zIndex;\n wrapper.appendChild(ul);\n }\n else {\n ul = this.element;\n ul.style.zIndex = getZindexPartial(target ? target : this.element).toString();\n }\n navIdx = this.getIndex(li ? li.id : null, true);\n var items = li ? item[this.getField('children', this.navIdx.length - 1)] : this.items;\n var eventArgs = { 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 MenuBase.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 var offset = void 0;\n var isRelative = this.isMenu && this.element.offsetParent.tagName !== 'BODY';\n if (isRelative) {\n var curPos = calculateRelativeBasedPosition(li, li.parentElement);\n var isHorizontal = !this.element.classList.contains('e-vertical');\n if (this.navIdx.length > 1 || !isHorizontal) {\n top = curPos.top;\n if (this.enableRtl) {\n left = curPos.left - ul.offsetWidth;\n }\n else {\n left = curPos.left + li.offsetWidth;\n }\n }\n else {\n top = isHorizontal ? curPos.top + li.offsetHeight : curPos.top;\n left = this.enableRtl ? (curPos.left + li.offsetWidth) - ul.offsetWidth : curPos.left;\n }\n }\n else if (!this.isMenu && 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 = 'right';\n var y = 'top';\n if (this.isMenu && !this.element.classList.contains('e-vertical') && this.navIdx.length < 2) {\n x = this.enableRtl ? 'right' : 'left';\n y = 'bottom';\n }\n else {\n x = this.enableRtl ? 'left' : 'right';\n }\n offset = calculatePosition(li, x, y);\n top = offset.top;\n left = offset.left;\n }\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 var yCollision = collide.indexOf('bottom') > -1;\n if (xCollision) {\n if (isRelative) {\n offset = calculateRelativeBasedPosition(li, li.parentElement);\n }\n else {\n offset = calculatePosition(li, this.enableRtl ? 'right' : 'left', 'top');\n }\n left = offset.left;\n }\n if (this.enableRtl || xCollision) {\n left = (this.enableRtl && xCollision) ? left : left - ul.offsetWidth;\n if (this.isMenu && xCollision && this.navIdx && this.navIdx.length < 2) {\n left = left + li.getBoundingClientRect().width;\n }\n }\n if (yCollision) {\n if (isRelative) {\n top = (this.enableRtl && yCollision) ? top : top - ul.offsetHeight;\n }\n offset = fit(ul, isRelative ? this.element.offsetParent : null, { X: false, Y: true }, { top: top, left: left });\n top = offset.top;\n }\n if (isRelative && (xCollision || yCollision)) {\n offset = fit(ul, isRelative ? this.element.offsetParent : null, { X: xCollision, Y: yCollision }, { top: top, left: left });\n top = offset.top;\n left = offset.left;\n }\n }\n this.toggleVisiblity(ul, false);\n if (this.isMenu) {\n if (this.element.classList.contains('e-vertical') && this.navIdx && this.navIdx[this.navIdx.length - 1] === 0) {\n top = top - 1;\n }\n else {\n if (this.navIdx && this.navIdx[this.navIdx.length - 1] === 0) {\n if (this.navIdx.length === 1) {\n left = left - 1;\n }\n else {\n top = top - 1;\n }\n }\n }\n }\n ul.style.top = top + px;\n ul.style.left = left + px;\n };\n MenuBase.prototype.toggleVisiblity = function (ul, isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n ul.style.visibility = isVisible ? 'hidden' : '';\n ul.style.display = isVisible ? 'block' : 'none';\n };\n MenuBase.prototype.createItems = function (items) {\n var _this = this;\n var level = this.navIdx ? this.navIdx.length : 0;\n var showIcon = this.hasField(items, this.getField('iconCss', level));\n var id = 'id';\n var listBaseOptions = {\n showIcon: showIcon,\n moduleName: 'menu',\n fields: this.getFields(level),\n template: this.template,\n itemCreating: function (args) {\n if (!args.curData[args.fields[id]]) {\n args.curData[args.fields[id]] = getUniqueID('menuitem');\n _this.clearChanges();\n }\n args.curData.htmlAttributes = {\n role: 'menuitem',\n tabindex: '-1'\n };\n if (_this.isMenu && !args.curData[_this.getField('separator', level)]) {\n args.curData.htmlAttributes['aria-label'] = args.curData[args.fields.text];\n }\n },\n itemCreated: function (args) {\n if (args.curData[_this.getField('separator', level)]) {\n args.item.classList.add(SEPARATOR);\n args.item.removeAttribute('role');\n }\n if (showIcon && !args.curData[args.fields.iconCss]\n && !args.curData[_this.getField('separator', level)]) {\n args.item.classList.add('e-blankicon');\n }\n if (args.curData[args.fields.child]\n && args.curData[args.fields.child].length) {\n var span = _this.createElement('span', { className: ICONS + ' ' + CARET });\n args.item.appendChild(span);\n args.item.setAttribute('aria-haspopup', 'true');\n args.item.setAttribute('aria-expanded', 'false');\n if (!_this.isMenu) {\n args.item.removeAttribute('role');\n }\n args.item.classList.add('e-menu-caret-icon');\n }\n if (_this.isMenu && _this.template) {\n args.item.setAttribute('id', args.curData[args.fields.id].toString());\n args.item.removeAttribute('data-uid');\n }\n var eventArgs = { item: args.curData, element: args.item };\n _this.trigger('beforeItemRender', eventArgs);\n }\n };\n var ul = ListBase.createList(this.createElement, items, listBaseOptions, !this.template);\n ul.setAttribute('tabindex', '0');\n if (this.isMenu) {\n ul.setAttribute('role', 'menu');\n }\n return ul;\n };\n MenuBase.prototype.moverHandler = function (e) {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.getLI(trgt);\n if (cli && closest(cli, '.e-' + this.getModuleName() + '-wrapper')) {\n 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 if (this.isMenu && trgt.parentElement !== wrapper && !cli && this.navIdx.length) {\n this.closeMenu(null, e);\n }\n };\n MenuBase.prototype.getField = function (propName, level) {\n if (level === void 0) { level = 0; }\n var fieldName = this.fields[propName];\n return typeof fieldName === 'string' ? fieldName :\n (!fieldName[level] ? fieldName[fieldName.length - 1].toString() : fieldName[level].toString());\n };\n MenuBase.prototype.getFields = function (level) {\n if (level === void 0) { level = 0; }\n return {\n id: this.getField('itemId', level),\n iconCss: this.getField('iconCss', level),\n text: this.getField('text', level),\n url: this.getField('url', level),\n child: this.getField('children', level),\n separator: this.getField('separator', level)\n };\n };\n MenuBase.prototype.hasField = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][field]) {\n return true;\n }\n }\n return false;\n };\n MenuBase.prototype.clickHandler = function (e) {\n if (this.isTapHold) {\n this.isTapHold = false;\n }\n else {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.getLI(trgt);\n var cliWrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : null;\n var isInstLI = cli && cliWrapper && wrapper.firstElementChild.id === cliWrapper.firstElementChild.id;\n if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n this.setLISelected(cli);\n var navIdx = this.getIndex(cli.id, true);\n var item = this.getItem(navIdx);\n var eventArgs = { element: cli, item: item };\n this.trigger('select', eventArgs);\n }\n if (isInstLI && (e.type === 'mouseover' || Browser.isDevice || this.showItemOnClick)) {\n var ul = void 0;\n if (cli.classList.contains(HEADER)) {\n ul = wrapper.children[this.navIdx.length - 1];\n this.toggleAnimation(ul);\n var sli = this.getLIByClass(ul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n detach(cli.parentNode);\n this.navIdx.pop();\n }\n else {\n if (!cli.classList.contains(SEPARATOR)) {\n var showSubMenu = true;\n var cul = cli.parentNode;\n var cliIdx = this.getIdx(cul, cli);\n if (this.isMenu || !Browser.isDevice) {\n var culIdx = this.getIdx(wrapper, cul);\n if (this.navIdx[culIdx] === cliIdx) {\n showSubMenu = false;\n }\n if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || showSubMenu)) {\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n this.closeMenu(culIdx + 1, e);\n }\n }\n if (showSubMenu) {\n var idx = this.navIdx.concat(cliIdx);\n var item = this.getItem(idx);\n if (item[this.getField('children', idx.length - 1)] &&\n item[this.getField('children', idx.length - 1)].length) {\n if (e.type === 'mouseover' || (Browser.isDevice && this.isMenu)) {\n this.setLISelected(cli);\n }\n cli.setAttribute('aria-expanded', 'true');\n this.navIdx.push(cliIdx);\n if (this.isMenu && !this.element.classList.contains('e-vertical') && this.navIdx.length < 2) {\n var collision = isCollide(cli, this.element);\n if (collision.length) {\n var boundRect = cli.getBoundingClientRect();\n this.element.scroll((collision.indexOf('right') > -1 ? boundRect.right : boundRect.left), 0);\n }\n }\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 MenuBase.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 MenuBase.prototype.getLIByClass = function (ul, classname) {\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classname)) {\n return ul.children[i];\n }\n }\n return null;\n };\n MenuBase.prototype.getItem = function (navIdx) {\n navIdx = navIdx.slice();\n var idx = navIdx.pop();\n var items = this.getItems(navIdx);\n return items[idx];\n };\n MenuBase.prototype.getItems = function (navIdx) {\n var items = this.items;\n for (var i = 0; i < navIdx.length; i++) {\n items = items[navIdx[i]][this.getField('children', i)];\n }\n return items;\n };\n MenuBase.prototype.getIdx = function (ul, li, skipHdr) {\n if (skipHdr === void 0) { skipHdr = true; }\n var idx = Array.prototype.indexOf.call(ul.children, li);\n if (skipHdr && ul.children[0].classList.contains(HEADER)) {\n idx--;\n }\n return idx;\n };\n MenuBase.prototype.getLI = function (elem) {\n if (elem.tagName === 'LI' && elem.classList.contains('e-menu-item')) {\n return elem;\n }\n return closest(elem, 'li.e-menu-item');\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {MenuBaseModel} newProp\n * @param {MenuBaseModel} oldProp\n * @returns void\n */\n MenuBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n var 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 'showItemOnClick':\n this.unWireEvents();\n this.showItemOnClick = newProp.showItemOnClick;\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 MenuBase.prototype.getChangedItemIndex = function (newProp, index, idx) {\n index.push(idx);\n var key = Object.keys(newProp.items[idx]).pop();\n if (key === 'items') {\n var item = newProp.items[idx];\n this.getChangedItemIndex(item, index, Number(Object.keys(item.items).pop()));\n }\n else {\n if (key === 'isParentArray' && index.length > 1) {\n index.pop();\n }\n }\n return index;\n };\n MenuBase.prototype.removeItem = function (item, navIdx, idx) {\n item.splice(idx, 1);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n detach(uls[navIdx.length].children[idx]);\n }\n };\n /**\n * Used to unwire the bind events.\n * @private\n */\n MenuBase.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var touchModule = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (Browser.isIos) {\n touchModule = getInstance(target, Touch);\n if (touchModule) {\n touchModule.destroy();\n }\n }\n else {\n EventHandler.remove(target, 'contextmenu', this.cmenuHandler);\n }\n }\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollHandler);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.remove(this.isMenu ? document : wrapper, 'mouseover', this.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 this.rippleFn();\n };\n MenuBase.prototype.toggleAnimation = function (ul, isMenuOpen) {\n var _this = this;\n if (isMenuOpen === void 0) { isMenuOpen = true; }\n if (this.animationSettings.effect === 'None' || !isMenuOpen) {\n this.end(ul, isMenuOpen);\n }\n else {\n this.animation.animate(ul, {\n name: this.animationSettings.effect,\n duration: this.animationSettings.duration,\n timingFunction: this.animationSettings.easing,\n begin: function (options) {\n options.element.style.display = 'block';\n options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n },\n end: function (options) {\n _this.end(options.element, isMenuOpen);\n }\n });\n }\n };\n MenuBase.prototype.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 = {\n element: ul, parentItem: item, items: item ? item.items : this.items\n };\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 MenuBase.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Get wrapper element.\n * @returns Element\n * @private\n */\n MenuBase.prototype.getWrapper = function () {\n return closest(this.element, '.e-' + this.getModuleName() + '-wrapper');\n };\n MenuBase.prototype.getIndex = function (data, isUniqueId, items, nIndex, isCallBack, level) {\n if (items === void 0) { items = this.items; }\n if (nIndex === void 0) { nIndex = []; }\n if (isCallBack === void 0) { isCallBack = false; }\n if (level === void 0) { level = 0; }\n var item;\n level = isCallBack ? level + 1 : 0;\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i];\n if ((isUniqueId ? item[this.getField('itemId', level)] : item[this.getField('text', level)]) === data) {\n nIndex.push(i);\n break;\n }\n else if (item[this.getField('children', level)]\n && item[this.getField('children', level)].length) {\n nIndex = this.getIndex(data, isUniqueId, item[this.getField('children', level)], nIndex, true, level);\n if (nIndex[nIndex.length - 1] === -1) {\n if (i !== len - 1) {\n nIndex.pop();\n }\n }\n else {\n nIndex.unshift(i);\n break;\n }\n }\n else {\n if (i === len - 1) {\n nIndex.push(-1);\n }\n }\n }\n return (!isCallBack && nIndex[0] === -1) ? [] : nIndex;\n };\n /**\n * This method is used to enable or disable the menu items in the Menu based on the items and enable argument.\n * @param items Text items that needs to be enabled/disabled.\n * @param enable Set `true`/`false` to enable/disable the list items.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n MenuBase.prototype.enableItems = function (items, enable, isUniqueId) {\n if (enable === void 0) { enable = true; }\n var ul;\n var idx;\n var navIdx;\n var disabled = DISABLED;\n var wrapper = this.getWrapper();\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n idx = navIdx.pop();\n ul = wrapper.children[navIdx.length];\n if (ul) {\n if (enable) {\n if (this.isMenu) {\n ul.children[idx].classList.remove(disabled);\n ul.children[idx].removeAttribute('aria-disabled');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.remove(disabled);\n }\n else {\n ul.children[idx].classList.remove(disabled);\n }\n }\n }\n else {\n if (this.isMenu) {\n ul.children[idx].classList.add(disabled);\n ul.children[idx].setAttribute('aria-disabled', 'true');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.add(disabled);\n }\n else {\n ul.children[idx].classList.add(disabled);\n }\n }\n }\n }\n }\n };\n /**\n * This method is used to show the menu items in the Menu based on the items text.\n * @param items Text items that needs to be shown.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n MenuBase.prototype.showItems = function (items, isUniqueId) {\n this.showHideItems(items, false, isUniqueId);\n };\n /**\n * This method is used to hide the menu items in the Menu based on the items text.\n * @param items Text items that needs to be hidden.\n * @returns void\n */\n MenuBase.prototype.hideItems = function (items, isUniqueId) {\n this.showHideItems(items, true, isUniqueId);\n };\n MenuBase.prototype.showHideItems = function (items, ishide, isUniqueId) {\n var ul;\n var index;\n var navIdx;\n var wrapper = this.getWrapper();\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n index = 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[index + 1].classList.add(HIDE);\n }\n else {\n ul.children[index].classList.add(HIDE);\n }\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[index + 1].classList.remove(HIDE);\n }\n else {\n ul.children[index].classList.remove(HIDE);\n }\n }\n }\n }\n };\n /**\n * It is used to remove the menu items from the Menu based on the items text.\n * @param items Text items that needs to be removed.\n * @returns void\n */\n MenuBase.prototype.removeItems = function (items, isUniqueId) {\n var idx;\n var navIdx;\n var iitems;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n this.removeItem(iitems, navIdx, idx);\n }\n };\n /**\n * It is used to insert the menu items after the specified menu item text.\n * @param items Items that needs to be inserted.\n * @param text Text item after that the element to be inserted.\n * @returns void\n */\n MenuBase.prototype.insertAfter = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId);\n };\n /**\n * It is used to insert the menu items before the specified menu item text.\n * @param items Items that needs to be inserted.\n * @param text Text item before that the element to be inserted.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n MenuBase.prototype.insertBefore = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId, false);\n };\n MenuBase.prototype.insertItems = function (items, text, isUniqueId, isAfter) {\n if (isAfter === void 0) { isAfter = true; }\n var li;\n var idx;\n var navIdx;\n var iitems;\n var menuitem;\n var showIcon;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(text, isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n menuitem = new MenuItem(iitems[0], 'items', items[i], true);\n iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n idx = isAfter ? idx + 1 : idx;\n showIcon = this.hasField(iitems, this.getField('iconCss', navIdx.length - 1));\n li = this.createItems(iitems).children[idx];\n uls[navIdx.length].insertBefore(li, uls[navIdx.length].children[idx]);\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n MenuBase.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n if (wrapper) {\n _super.prototype.destroy.call(this);\n this.unWireEvents();\n if (this.ngElement && !this.isMenu) {\n this.ngElement.style.display = 'block';\n }\n else {\n this.closeMenu();\n this.element.innerHTML = '';\n ['top', 'left', 'display', 'z-index'].forEach(function (key) {\n _this.element.style.removeProperty(key);\n });\n ['role', 'tabindex', 'class', 'style'].forEach(function (key) {\n if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n _this.element.removeAttribute(key);\n }\n if (_this.isMenu && key === 'class' && _this.element.classList.contains('e-vertical')) {\n _this.element.classList.remove('e-vertical');\n }\n });\n wrapper.parentNode.insertBefore(this.element, wrapper);\n }\n if (this.isMenu && this.ngElement) {\n detach(this.element);\n wrapper.style.display = '';\n wrapper.classList.remove('e-' + this.getModuleName() + '-wrapper');\n wrapper.removeAttribute('data-ripple');\n }\n else {\n detach(wrapper);\n }\n }\n };\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"created\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"filter\", void 0);\n __decorate([\n Property(null)\n ], MenuBase.prototype, \"template\", void 0);\n __decorate([\n Complex({}, FieldSettings)\n ], MenuBase.prototype, \"fields\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuBase.prototype, \"items\", void 0);\n __decorate([\n Property({ duration: 400, easing: 'ease', effect: 'SlideDown' })\n ], MenuBase.prototype, \"animationSettings\", void 0);\n MenuBase = __decorate([\n NotifyPropertyChanges\n ], MenuBase);\n return MenuBase;\n}(Component));\nexport { MenuBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { MenuBase, MenuItem } from '../common/menu-base';\n/**\n * The ContextMenu is a graphical user interface that appears on the user right click/touch hold operation.\n * ```html\n *
\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar ContextMenu = /** @class */ (function (_super) {\n __extends(ContextMenu, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function ContextMenu(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * For internal use only - prerender processing.\n * @private\n */\n ContextMenu.prototype.preRender = function () {\n this.isMenu = false;\n _super.prototype.preRender.call(this);\n };\n /**\n * This method is used to open the ContextMenu in specified position.\n * @param top - To specify ContextMenu vertical positioning.\n * @param left - To specify ContextMenu horizontal positioning.\n * @param target - To calculate z-index for ContextMenu based upon the specified target.\n * @method open\n * @returns void\n */\n ContextMenu.prototype.open = function (top, left, target) {\n _super.prototype.openMenu.call(this, null, null, top, left, null, target);\n };\n /**\n * Closes the ContextMenu if it is opened.\n */\n ContextMenu.prototype.close = function () {\n _super.prototype.closeMenu.call(this);\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {ContextMenuModel} newProp\n * @param {ContextMenuModel} oldProp\n * @returns void\n */\n ContextMenu.prototype.onPropertyChanged = function (newProp, oldProp) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'filter':\n this.close();\n this.filter = newProp.filter;\n break;\n case 'target':\n this.unWireEvents();\n this.target = newProp.target;\n this.wireEvents();\n break;\n }\n }\n };\n /**\n * Get module name.\n * @returns string\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"filter\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], ContextMenu.prototype, \"items\", void 0);\n ContextMenu = __decorate([\n NotifyPropertyChanges\n ], ContextMenu);\n return ContextMenu;\n}(MenuBase));\nexport { ContextMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, Complex } from '@syncfusion/ej2-base';\nimport { MenuBase, FieldSettings } from '../common/menu-base';\nvar VMENU = 'e-vertical';\nvar SCROLLABLE = 'e-scrollable';\n/**\n * The Menu is a graphical user interface that serve as navigation headers for your application or site.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Menu = /** @class */ (function (_super) {\n __extends(Menu, _super);\n /**\n * Constructor for creating the component.\n * @private\n */\n function Menu(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.tempItems = [];\n return _this;\n }\n /**\n * Get module name.\n * @returns string\n * @private\n */\n Menu.prototype.getModuleName = function () {\n return 'menu';\n };\n /**\n * For internal use only - prerender processing.\n * @private\n */\n Menu.prototype.preRender = function () {\n this.isMenu = true;\n if (this.template) {\n try {\n if (document.querySelectorAll(this.template).length) {\n this.template = document.querySelector(this.template).innerHTML.trim();\n this.clearChanges();\n }\n }\n catch (e) {\n /* action on catch */\n }\n }\n else {\n this.tempItems = this.items;\n this.items = [];\n this.tempItems.map(this.createMenuItems, this);\n this.setProperties({ items: this.items }, true);\n this.tempItems = [];\n }\n _super.prototype.preRender.call(this);\n };\n Menu.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n if (this.orientation === 'Vertical') {\n this.element.classList.add(VMENU);\n this.element.setAttribute('aria-orientation', 'vertical');\n }\n else {\n if (Browser.isDevice) {\n this.element.classList.add(SCROLLABLE);\n }\n }\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {MenuModel} newProp\n * @param {MenuModel} oldProp\n * @returns void\n */\n Menu.prototype.onPropertyChanged = function (newProp, oldProp) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'orientation':\n if (newProp.orientation === 'Vertical') {\n this.element.classList.add(VMENU);\n this.element.setAttribute('aria-orientation', 'vertical');\n }\n else {\n this.element.classList.remove(VMENU);\n this.element.removeAttribute('aria-orientation');\n }\n break;\n }\n }\n };\n Menu.prototype.createMenuItems = function (item, index) {\n var pIdField;\n var record = { items: [] };\n var idx;\n var i;\n var items = this.items;\n var fields = ['itemId', 'text', 'iconCss', 'url', 'separator', 'children'];\n pIdField = this.getField('parentId');\n for (i = 0; i < fields.length; i++) {\n var field = this.getField(fields[i]);\n if (item[field]) {\n record[field] = item[field];\n }\n }\n if (item[pIdField]) {\n idx = this.getIndex(item[pIdField].toString(), true);\n for (i = 0; i < idx.length; i++) {\n if (!items[idx[i]].items) {\n items[idx[i]].items = [];\n }\n items = items[idx[i]].items;\n }\n items.push(record);\n }\n else {\n this.items.push(record);\n }\n };\n __decorate([\n Property('Horizontal')\n ], Menu.prototype, \"orientation\", void 0);\n __decorate([\n Property(null)\n ], Menu.prototype, \"template\", void 0);\n __decorate([\n Complex({}, FieldSettings)\n ], Menu.prototype, \"fields\", void 0);\n Menu = __decorate([\n NotifyPropertyChanges\n ], Menu);\n return Menu;\n}(MenuBase));\nexport { Menu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, closest, Collection, Complex, attributes, detach } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, select, isVisible } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Browser, formatUnit, L10n } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, isNullOrUndefined as isNOU, selectAll } 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.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 _this.lastIndex = 0;\n /**\n * Contains the keyboard configuration of the Tab.\n */\n _this.keyConfigs = {\n tab: 'tab',\n home: 'home',\n end: 'end',\n enter: 'enter',\n space: 'space',\n delete: 'delete',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow'\n };\n return _this;\n }\n /**\n * Removes the component from the DOM and detaches all its related event handlers, attributes and classes.\n * @returns void\n */\n Tab.prototype.destroy = function () {\n var _this = this;\n if (!isNOU(this.tbObj)) {\n this.tbObj.destroy();\n }\n this.unWireEvents();\n ['role', 'aria-disabled', 'aria-activedescendant', 'tabindex', 'aria-orientation'].forEach(function (val) {\n _this.element.removeAttribute(val);\n });\n this.expTemplateContent();\n if (!this.isTemplate) {\n this.element.innerHTML = '';\n }\n else {\n var cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n this.element.classList.remove(CLS_TEMPLATE);\n if (!isNOU(cntEle)) {\n cntEle.innerHTML = this.cnt;\n }\n }\n _super.prototype.destroy.call(this);\n this.trigger('destroyed');\n };\n /**\n * Initialize component\n * @private\n */\n Tab.prototype.preRender = function () {\n var nested = closest(this.element, '.' + CLS_CONTENT);\n this.prevIndex = 0;\n this.isNested = false;\n this.isPopup = false;\n this.initRender = true;\n this.isSwipeed = false;\n this.itemIndexArray = [];\n this.templateEle = [];\n if (!isNOU(nested)) {\n nested.parentElement.classList.add(CLS_NEST);\n this.isNested = true;\n }\n var name = Browser.info.name;\n var css = (name === 'msie') ? 'e-ie' : (name === 'edge') ? 'e-edge' : (name === 'safari') ? 'e-safari' : '';\n setStyle(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.setCssClass(this.element, this.cssClass, true);\n attributes(this.element, { role: 'tablist', 'aria-disabled': 'false', 'aria-activedescendant': '' });\n this.setCssClass(this.element, css, true);\n };\n /**\n * Initialize the component rendering\n * @private\n */\n Tab.prototype.render = function () {\n this.btnCls = this.createElement('span', { className: CLS_ICONS + ' ' + CLS_ICON_CLOSE, attrs: { title: this.title } });\n this.renderContainer();\n this.wireEvents();\n this.initRender = false;\n };\n Tab.prototype.renderContainer = function () {\n var ele = this.element;\n if (this.items.length > 0 && ele.children.length === 0) {\n ele.appendChild(this.createElement('div', { className: CLS_CONTENT }));\n this.setOrientation(this.headerPlacement, this.createElement('div', { className: CLS_HEADER }));\n this.isTemplate = false;\n }\n else if (this.element.children.length > 0) {\n this.isTemplate = true;\n ele.classList.add(CLS_TEMPLATE);\n var header = ele.querySelector('.' + CLS_HEADER);\n if (header && this.headerPlacement === 'Bottom') {\n this.setOrientation(this.headerPlacement, header);\n }\n }\n if (!isNOU(select('.' + CLS_HEADER, this.element)) && !isNOU(select('.' + CLS_CONTENT, this.element))) {\n this.renderHeader();\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n if (!isNOU(this.tbItems)) {\n rippleEffect(this.tbItems, { selector: '.e-tab-wrap' });\n }\n this.renderContent();\n if (selectAll('.' + CLS_TB_ITEM, this.element).length > 0) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.bdrLine = this.createElement('div', { className: CLS_INDICATOR + ' ' + CLS_HIDDEN + ' ' + CLS_IGNORE });\n var scrCnt = select('.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 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(this.createElement('div', { className: CLS_ITEMS }));\n hdrItems.forEach(function (item, index) {\n _this.lastIndex = index;\n var attr = {\n className: CLS_ITEM, id: CLS_ITEM + '_' + index,\n attrs: { role: 'tab', 'aria-controls': CLS_CONTENT + '_' + index, 'aria-selected': 'false' }\n };\n var txt = _this.createElement('span', {\n className: CLS_TEXT, innerHTML: item, attrs: { 'role': 'presentation' }\n }).outerHTML;\n var cont = _this.createElement('div', {\n className: CLS_TEXT_WRAP, innerHTML: txt + _this.btnCls.outerHTML\n }).outerHTML;\n var wrap = _this.createElement('div', { className: CLS_WRAP, innerHTML: cont, attrs: { tabIndex: '-1' } });\n select('.' + CLS_ITEMS, _this.element).appendChild(_this.createElement('div', attr));\n selectAll('.' + CLS_ITEM, _this.element)[index].appendChild(wrap);\n });\n }\n }\n this.tbObj = new Toolbar({\n width: '100%',\n overflowMode: this.overflowMode,\n items: (tabItems.length !== 0) ? tabItems : [],\n clicked: this.clickHandler.bind(this)\n });\n this.tbObj.createElement = this.createElement;\n this.tbObj.appendTo(this.hdrEle);\n 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.reRenderItems = function () {\n this.renderContainer();\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n };\n Tab.prototype.parseObject = function (items, index) {\n var _this = this;\n var tbCount = selectAll('.' + CLS_TB_ITEM, this.element).length;\n var tItems = [];\n var txtWrapEle;\n items.forEach(function (item, i) {\n if (isNOU(item.header) || isNOU(item.header.text)) {\n _this.items.splice(i, 0);\n return;\n }\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 _this.lastIndex = ((tbCount === 0) ? i : ((_this.isReplace) ? (index + i) : (_this.lastIndex + 1)));\n var disabled = (item.disabled) ? ' ' + CLS_DISABLE + ' ' + CLS_OVERLAY : '';\n txtWrapEle = _this.createElement('div', { className: CLS_TEXT, attrs: { 'role': 'presentation' } });\n var tHtml = ((txt instanceof Object) ? txt.outerHTML : txt);\n var txtEmpty = (!isNOU(tHtml) && tHtml !== '');\n if (!isNOU(txt.tagName)) {\n txtWrapEle.appendChild(txt);\n }\n else {\n _this.headerTextCompile(txtWrapEle, txt);\n }\n var tEle;\n var icon = _this.createElement('span', {\n className: CLS_ICONS + ' ' + CLS_TAB_ICON + ' ' + CLS_ICON + '-' + pos + ' ' + css\n });\n var tCont = _this.createElement('div', { className: CLS_TEXT_WRAP });\n tCont.appendChild(txtWrapEle);\n if ((txt === '' || txt === undefined) && css === '') {\n return;\n }\n else {\n if ((txt !== '' && txt !== undefined) && css !== '') {\n if ((pos === 'left' || pos === 'top')) {\n tCont.insertBefore(icon, tCont.firstElementChild);\n }\n else {\n tCont.appendChild(icon);\n }\n tEle = txtWrapEle;\n }\n else {\n tEle = ((css === '') ? txtWrapEle : icon);\n if (tEle === icon) {\n detach(txtWrapEle);\n tCont.appendChild(icon);\n }\n }\n }\n var wrapAttrs = (item.disabled) ? {} : { tabIndex: '-1' };\n tCont.appendChild(_this.btnCls.cloneNode(true));\n var wrap = _this.createElement('div', { className: CLS_WRAP, attrs: wrapAttrs });\n wrap.appendChild(tCont);\n if (_this.itemIndexArray === []) {\n _this.itemIndexArray.push(CLS_ITEM + '_' + _this.lastIndex);\n }\n else {\n _this.itemIndexArray.splice((index + i), 0, CLS_ITEM + '_' + _this.lastIndex);\n }\n var attrObj = {\n id: CLS_ITEM + '_' + _this.lastIndex, role: 'tab', 'aria-selected': 'false'\n };\n var tItem = { htmlAttributes: attrObj, template: wrap };\n tItem.cssClass = item.cssClass + ' ' + disabled + ' ' + ((css !== '') ? 'e-i' + pos : '') + ' ' + ((!txtEmpty) ? CLS_ICON : '');\n if (pos === 'top' || pos === 'bottom') {\n _this.element.classList.add('e-vertical-icon');\n }\n tItems.push(tItem);\n });\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 _this = this;\n var animateObj = this.prevCtnAnimation(prevIndex, this.selectedItem);\n if (!isNOU(animateObj)) {\n animateObj.begin = function () {\n setStyle(oldCnt, { 'position': 'absolute' });\n oldCnt.classList.add(CLS_PROGRESS);\n oldCnt.classList.add('e-view');\n };\n animateObj.end = function () {\n oldCnt.style.display = 'none';\n oldCnt.classList.remove(CLS_ACTIVE);\n oldCnt.classList.remove(CLS_PROGRESS);\n oldCnt.classList.remove('e-view');\n setStyle(oldCnt, { 'display': '', 'position': '' });\n if (oldCnt.childNodes.length === 0 && !_this.isTemplate) {\n detach(oldCnt);\n }\n };\n new Animation(animateObj).animate(oldCnt);\n }\n else {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n };\n Tab.prototype.triggerAnimation = function (id, value) {\n var _this = this;\n var prevIndex = this.prevIndex;\n var itemCollection = [].slice.call(this.element.querySelector('.' + CLS_CONTENT).children);\n var oldCnt;\n itemCollection.forEach(function (item) {\n if (item.id === _this.prevActiveEle) {\n oldCnt = item;\n }\n });\n var prevEle = this.tbItem[prevIndex];\n var no = this.extIndex(this.tbItem[this.selectedItem].id);\n var newCnt = this.getTrgContent(this.cntEle, no);\n if (isNOU(oldCnt) && !isNOU(prevEle)) {\n var idNo = this.extIndex(prevEle.id);\n oldCnt = this.getTrgContent(this.cntEle, idNo);\n }\n this.prevActiveEle = newCnt.id;\n if (this.initRender || value === false || this.animation === {} || isNOU(this.animation)) {\n if (oldCnt && oldCnt !== newCnt) {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n return;\n }\n var cnt = select('.' + CLS_CONTENT, this.element);\n var animateObj;\n if (this.prevIndex > this.selectedItem && !this.isPopup) {\n var openEff = this.animation.previous.effect;\n animateObj = {\n name: ((openEff === 'None') ? '' : ((openEff !== 'SlideLeftIn') ? openEff : 'SlideLeftIn')),\n duration: this.animation.previous.duration,\n timingFunction: this.animation.previous.easing\n };\n }\n else if (this.isPopup || this.prevIndex < this.selectedItem || this.prevIndex === this.selectedItem) {\n var clsEff = this.animation.next.effect;\n animateObj = {\n name: ((clsEff === 'None') ? '' : ((clsEff !== 'SlideRightIn') ? clsEff : 'SlideRightIn')),\n duration: this.animation.next.duration,\n timingFunction: this.animation.next.easing\n };\n }\n animateObj.progress = function () {\n cnt.classList.add(CLS_PROGRESS);\n _this.setActiveBorder();\n };\n animateObj.end = function () {\n cnt.classList.remove(CLS_PROGRESS);\n newCnt.classList.add(CLS_ACTIVE);\n };\n if (!this.initRender && !isNOU(oldCnt)) {\n this.triggerPrevAnimation(oldCnt, prevIndex);\n }\n this.isPopup = false;\n if (animateObj.name === '') {\n newCnt.classList.add(CLS_ACTIVE);\n }\n else {\n new Animation(animateObj).animate(newCnt);\n }\n };\n Tab.prototype.keyPressed = function (trg) {\n var trgParent = closest(trg, '.' + CLS_HEADER + ' .' + CLS_TB_ITEM);\n var trgIndex = this.getEleIndex(trgParent);\n if (!isNOU(this.popEle) && trg.classList.contains('e-hor-nav')) {\n (this.popEle.classList.contains(CLS_POPUP_OPEN)) ? this.popObj.hide(this.hide) : this.popObj.show(this.show);\n }\n else if (trg.classList.contains('e-scroll-nav')) {\n trg.click();\n }\n else {\n if (!isNOU(trgParent) && trgParent.classList.contains(CLS_ACTIVE) === false) {\n this.select(trgIndex);\n if (!isNOU(this.popEle)) {\n this.popObj.hide(this.hide);\n }\n }\n }\n };\n Tab.prototype.getEleIndex = function (item) {\n return Array.prototype.indexOf.call(selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element), item);\n };\n Tab.prototype.extIndex = function (id) {\n return id.replace(CLS_ITEM + '_', '');\n };\n Tab.prototype.expTemplateContent = function () {\n var _this = this;\n this.templateEle.forEach(function (eleStr) {\n if (!isNOU(_this.element.querySelector(eleStr))) {\n document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n }\n });\n };\n Tab.prototype.templateCompile = function (ele, cnt) {\n var tempEle = this.createElement('div');\n this.compileElement(tempEle, cnt, 'content');\n if (tempEle.childNodes.length !== 0) {\n ele.appendChild(tempEle);\n }\n };\n Tab.prototype.compileElement = function (ele, val, prop) {\n if (typeof val === 'string') {\n val = val.trim();\n }\n var templateFn = compile(val);\n var templateFUN;\n if (!isNOU(templateFn)) {\n templateFUN = templateFn({}, this, prop);\n }\n if (!isNOU(templateFn) && templateFUN.length > 0) {\n [].slice.call(templateFUN).forEach(function (el) {\n ele.appendChild(el);\n });\n }\n };\n Tab.prototype.headerTextCompile = function (element, text) {\n this.compileElement(element, text, 'headerText');\n };\n Tab.prototype.getContent = function (ele, cnt, callType) {\n var eleStr;\n if (typeof cnt === 'string' || isNOU(cnt.innerHTML)) {\n if (cnt[0] === '.' || cnt[0] === '#') {\n if (document.querySelectorAll(cnt).length) {\n var eleVal = document.querySelector(cnt);\n eleStr = eleVal.outerHTML.trim();\n if (callType === 'clone') {\n ele.appendChild(eleVal.cloneNode(true));\n }\n else {\n ele.appendChild(eleVal);\n eleVal.style.display = '';\n }\n }\n else {\n this.templateCompile(ele, cnt);\n }\n }\n else {\n this.templateCompile(ele, cnt);\n }\n }\n else {\n ele.appendChild(cnt);\n }\n if (!isNOU(eleStr)) {\n if (this.templateEle.indexOf(cnt.toString()) === -1) {\n this.templateEle.push(cnt.toString());\n }\n }\n };\n Tab.prototype.getTrgContent = function (cntEle, no) {\n var ele;\n if (this.element.classList.contains(CLS_NEST)) {\n ele = select('.' + CLS_NEST + '> .' + CLS_CONTENT + ' > #' + CLS_CONTENT + '_' + no, this.element);\n }\n else {\n ele = this.findEle(cntEle.children, CLS_CONTENT + '_' + no);\n }\n return ele;\n };\n Tab.prototype.findEle = function (items, key) {\n var ele;\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === key) {\n ele = items[i];\n break;\n }\n }\n return ele;\n };\n Tab.prototype.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(this.createElement('div', {\n id: (CLS_CONTENT + '_' + 0), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + 0 }\n }));\n }\n var ele = this.cntEle.children.item(0);\n for (var i = 0; i < this.items.length; i++) {\n this.getContent(ele, this.items[i].content, 'clone');\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(ele));\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n }\n this.templateEle = [];\n this.getContent(ele, this.items[0].content, 'render');\n ele.classList.remove(CLS_ACTIVE);\n }\n setStyle(this.cntEle, { 'height': this.maxHeight + 'px' });\n }\n else {\n setStyle(this.cntEle, { 'height': 'auto' });\n }\n };\n Tab.prototype.getHeight = function (ele) {\n var cs = window.getComputedStyle(ele);\n return ele.offsetHeight + parseFloat(cs.getPropertyValue('padding-top')) + parseFloat(cs.getPropertyValue('padding-bottom')) +\n parseFloat(cs.getPropertyValue('margin-top')) + parseFloat(cs.getPropertyValue('margin-bottom'));\n };\n Tab.prototype.setActiveBorder = function () {\n var trg = 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 if (isNOU(this.prevActiveEle)) {\n this.prevActiveEle = CLS_CONTENT + '_' + no;\n }\n attributes(this.element, { 'aria-activedescendant': id });\n if (this.isTemplate) {\n if (select('.' + CLS_CONTENT, this.element).children.length > 0) {\n var trg_1 = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + '_' + no);\n if (!isNOU(trg_1)) {\n trg_1.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n }\n else {\n this.cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n var item = this.getTrgContent(this.cntEle, this.extIndex(id));\n if (isNOU(item)) {\n this.cntEle.appendChild(this.createElement('div', {\n id: CLS_CONTENT + '_' + this.extIndex(id), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + this.extIndex(id) }\n }));\n var eleTrg = this.getTrgContent(this.cntEle, this.extIndex(id));\n var itemIndex = Array.prototype.indexOf.call(this.itemIndexArray, trg.id);\n this.getContent(eleTrg, this.items[itemIndex].content, 'render');\n }\n else {\n item.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n this.setActiveBorder();\n var curActItem = select('.' + CLS_HEADER + ' #' + id, this.element);\n this.refreshItemVisibility(curActItem);\n curActItem.firstChild.focus();\n var eventArg = {\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: trg,\n selectedIndex: value,\n isSwiped: this.isSwipeed\n };\n if (!this.initRender || this.selectedItem !== 0) {\n this.trigger('selected', eventArg);\n }\n };\n Tab.prototype.setItems = function (items) {\n this.isReplace = true;\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.tbObj.items = this.parseObject(items, 0);\n this.tbObj.dataBind();\n this.isReplace = false;\n };\n Tab.prototype.setRTL = function (value) {\n this.tbObj.enableRtl = value;\n this.tbObj.dataBind();\n this.setCssClass(this.element, CLS_RTL, value);\n this.refreshActiveBorder();\n };\n Tab.prototype.refreshActiveBorder = function () {\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n this.setActiveBorder();\n };\n Tab.prototype.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' && this.selectedItem !== 0) {\n for (var k = this.selectedItem - 1; k >= 0; k--) {\n if (!this.tbItem[k].classList.contains('e-hidden')) {\n this.select(k);\n break;\n }\n }\n }\n else if (e.swipeDirection === 'Left' && (this.selectedItem !== selectAll('.' + CLS_TB_ITEM, this.element).length - 1)) {\n for (var i = this.selectedItem + 1; i < this.tbItem.length; i++) {\n if (!this.tbItem[i].classList.contains('e-hidden')) {\n this.select(i);\n break;\n }\n }\n }\n this.isSwipeed = false;\n };\n Tab.prototype.spaceKeyDown = function (e) {\n if ((e.keyCode === 32 && e.which === 32) || (e.keyCode === 35 && e.which === 35)) {\n var clstHead = closest(e.target, '.' + CLS_HEADER);\n if (!isNOU(clstHead)) {\n e.preventDefault();\n }\n }\n };\n Tab.prototype.keyHandler = function (e) {\n if (this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n this.element.classList.add(CLS_FOCUS);\n var trg = e.target;\n var actEle = select('.' + CLS_HEADER + ' .' + CLS_ACTIVE, this.element);\n var tabItem = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', this.element);\n this.popEle = select('.' + CLS_HEADER + ' .' + CLS_TB_POP, this.element);\n if (!isNOU(this.popEle)) {\n this.popObj = this.popEle.ej2_instances[0];\n }\n switch (e.action) {\n case 'space':\n case 'enter':\n if (trg.parentElement.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (e.action === 'enter' && trg.classList.contains('e-hor-nav')) {\n 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 if (!isNOU(this.items[index])) {\n this.items[index].disabled = !value;\n this.dataBind();\n }\n tbItems.setAttribute('aria-disabled', (value === true) ? 'false' : 'true');\n };\n /**\n * Adds new items to the Tab that accepts an array as Tab items.\n * @param {TabItemsModel[]} items - An array of item that is added to the Tab.\n * @param {number} index - Number value that determines where the items to be added. By default, index is 0.\n * @returns void.\n */\n Tab.prototype.addTab = function (items, index) {\n var _this = this;\n var lastEleIndex = 0;\n if (!this.isReplace) {\n this.trigger('adding', { addedItems: items });\n }\n this.hdrEle = select('.' + CLS_HEADER, this.element);\n if (isNOU(this.hdrEle)) {\n this.items = items;\n this.reRenderItems();\n return;\n }\n var itemsCount = selectAll('.' + CLS_TB_ITEM, this.element).length;\n if (itemsCount !== 0) {\n lastEleIndex = this.lastIndex + 1;\n }\n if (isNOU(index)) {\n index = itemsCount - 1;\n }\n if (itemsCount < index || index < 0 || isNaN(index)) {\n return;\n }\n if (itemsCount === 0 && !isNOU(this.hdrEle)) {\n this.hdrEle.style.display = '';\n }\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n var tabItems = this.parseObject(items, index);\n items.forEach(function (item, place) {\n _this.items.splice((index + place), 0, item);\n if (_this.isTemplate && !isNOU(item.header) && !isNOU(item.header.text)) {\n var no = lastEleIndex + place;\n var ele = _this.createElement('div', {\n id: CLS_CONTENT + '_' + no, className: CLS_ITEM, attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + no }\n });\n _this.cntEle.insertBefore(ele, _this.cntEle.children[(index + place)]);\n var eleTrg = _this.getTrgContent(_this.cntEle, no.toString());\n _this.getContent(eleTrg, item.content, 'render');\n }\n });\n this.tbObj.addItems(tabItems, index);\n if (!this.isReplace) {\n this.trigger('added', { addedItems: items });\n }\n if (this.selectedItem === index) {\n this.select(index);\n }\n else {\n this.setActiveBorder();\n }\n };\n /**\n * Removes the items in the Tab from the specified index.\n * @param {number} index - Index of target item that is going to be removed.\n * @returns void.\n */\n Tab.prototype.removeTab = function (index) {\n var trg = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n var removeArgs = { removedItem: trg, removedIndex: index };\n this.trigger('removing', removeArgs);\n if (isNOU(trg)) {\n return;\n }\n this.tbObj.removeItems(index);\n this.items.splice(index, 1);\n this.itemIndexArray.splice(index, 1);\n this.refreshActiveBorder();\n var cntTrg = select('#' + CLS_CONTENT + '_' + this.extIndex(trg.id), select('.' + CLS_CONTENT, this.element));\n if (!isNOU(cntTrg)) {\n detach(cntTrg);\n }\n this.trigger('removed', removeArgs);\n if (trg.classList.contains(CLS_ACTIVE)) {\n index = (index > selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', this.element).length - 1) ? index - 1 : index;\n this.enableAnimation = false;\n this.selectedItem = index;\n this.select(index);\n }\n if (selectAll('.' + CLS_TB_ITEM, this.element).length === 0) {\n this.hdrEle.style.display = 'none';\n }\n this.enableAnimation = true;\n };\n /**\n * Shows or hides the Tab that is in the specified index.\n * @param {number} index - Index value of target item.\n * @param {boolean} value - Based on this Boolean value, item will be hide (false) or show (true). By default, value is true.\n * @returns void.\n */\n Tab.prototype.hideTab = function (index, value) {\n var items;\n var item = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(item)) {\n return;\n }\n if (isNOU(value)) {\n value = true;\n }\n this.bdrLine.classList.add(CLS_HIDDEN);\n if (value === true) {\n item.classList.add(CLS_HIDDEN);\n items = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_HIDDEN + ')', this.tbItems);\n if (items.length !== 0 && item.classList.contains(CLS_ACTIVE)) {\n if (index !== 0) {\n for (var i = index - 1; i >= 0; i--) {\n if (!this.tbItem[i].classList.contains('e-hidden')) {\n this.select(i);\n break;\n }\n else if (i === 0) {\n for (var k = index + 1; k < this.tbItem.length; k++) {\n if (!this.tbItem[k].classList.contains('e-hidden')) {\n this.select(k);\n break;\n }\n }\n }\n }\n }\n else {\n for (var k = index + 1; k < this.tbItem.length; k++) {\n if (!this.tbItem[k].classList.contains('e-hidden')) {\n this.select(k);\n break;\n }\n }\n }\n }\n else if (items.length === 0) {\n this.element.classList.add(CLS_HIDDEN);\n }\n }\n else {\n this.element.classList.remove(CLS_HIDDEN);\n items = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_HIDDEN + ')', this.tbItems);\n if (items.length === 0) {\n this.select(index);\n }\n item.classList.remove(CLS_HIDDEN);\n }\n this.setActiveBorder();\n item.setAttribute('aria-hidden', '' + value);\n };\n /**\n * Specifies the index or HTMLElement to select an item from the Tab.\n * @param {number | HTMLElement} args - Index or DOM element is used for selecting an item from the Tab.\n * @returns void.\n */\n Tab.prototype.select = function (args) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.tbItem = selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element);\n this.prevItem = this.tbItem[this.prevIndex];\n var trg = this.tbItem[args];\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 selectingItem: trg,\n selectingIndex: args,\n isSwiped: this.isSwipeed\n };\n if (!this.initRender || this.selectedItem !== 0) {\n this.trigger('selecting', eventArg);\n }\n if (eventArg.cancel) {\n return;\n }\n if (typeof args === 'number') {\n if (!isNOU(this.tbItem[args]) && this.tbItem[args].classList.contains(CLS_DISABLE)) {\n for (var i = args + 1; i < this.items.length; i++) {\n if (this.items[i].disabled === false) {\n args = i;\n break;\n }\n else {\n args = 0;\n }\n }\n }\n if (this.tbItem.length > args && args >= 0 && !isNaN(args)) {\n if (!this.tbItem[this.selectedItem].classList.contains('e-hidden')) {\n this.prevIndex = this.selectedItem;\n }\n else {\n for (var i = this.selectedItem; i >= 0; i--) {\n if (!this.tbItem[i].classList.contains('e-hidden')) {\n this.prevIndex = i;\n break;\n }\n }\n }\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.itemIndexArray.splice(index, 1);\n this.tbObj.items.splice(index, 1);\n var isHiddenEle = hdrItem.classList.contains(CLS_HIDDEN);\n detach(hdrItem);\n this.isReplace = true;\n this.addTab(arr, index);\n if (isHiddenEle) {\n this.hideTab(index);\n }\n this.isReplace = false;\n }\n if (property === 'content' && !isNOU(cntItem)) {\n var strVal = typeof newVal === 'string' || isNOU(newVal.innerHTML);\n if (strVal && (newVal[0] === '.' || newVal[0] === '#') && newVal.length) {\n var eleVal = document.querySelector(newVal);\n cntItem.appendChild(eleVal);\n eleVal.style.display = '';\n }\n else if (newVal === '' && oldVal[0] === '#') {\n document.body.appendChild(this.element.querySelector(oldVal)).style.display = 'none';\n cntItem.innerHTML = newVal;\n }\n else {\n cntItem.innerHTML = newVal;\n }\n }\n if (property === 'cssClass') {\n if (!isNOU(hdrItem)) {\n hdrItem.classList.remove(oldVal);\n hdrItem.classList.add(newVal);\n }\n if (!isNOU(cntItem)) {\n cntItem.classList.remove(oldVal);\n cntItem.classList.add(newVal);\n }\n }\n if (property === 'disabled') {\n this.enableTab(index, ((newVal === true) ? false : true));\n }\n }\n }\n else {\n this.lastIndex = 0;\n if (isNOU(this.tbObj)) {\n this.reRenderItems();\n }\n else {\n this.setItems(newProp.items);\n if (this.templateEle.length > 0) {\n this.expTemplateContent();\n }\n this.templateEle = [];\n select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element).innerHTML = '';\n this.select(this.selectedItem);\n }\n }\n 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, append } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined as isNOU, Touch, getValue, setValue } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createCheckBox, rippleMouseHandler } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-treeview';\nvar CONTROL = 'e-control';\nvar COLLAPSIBLE = 'e-icon-collapsible';\nvar EXPANDABLE = 'e-icon-expandable';\nvar LISTITEM = 'e-list-item';\nvar LISTTEXT = 'e-list-text';\nvar PARENTITEM = 'e-list-parent';\nvar HOVER = 'e-hover';\nvar ACTIVE = 'e-active';\nvar LOAD = 'e-icons-spinner';\nvar PROCESS = 'e-process';\nvar ICON = 'e-icons';\nvar TEXTWRAP = 'e-text-content';\nvar INPUT = 'e-input';\nvar INPUTGROUP = 'e-input-group';\nvar TREEINPUT = 'e-tree-input';\nvar EDITING = 'e-editing';\nvar RTL = 'e-rtl';\nvar DRAGITEM = 'e-drag-item';\nvar DROPPABLE = 'e-droppable';\nvar DRAGGING = 'e-dragging';\nvar SIBLING = 'e-sibling';\nvar DROPIN = 'e-drop-in';\nvar DROPNEXT = 'e-drop-next';\nvar DROPOUT = 'e-drop-out';\nvar NODROP = 'e-no-drop';\nvar FULLROWWRAP = 'e-fullrow-wrap';\nvar FULLROW = 'e-fullrow';\nvar SELECTED = 'e-selected';\nvar EXPANDED = 'e-expanded';\nvar NODECOLLAPSED = 'e-node-collapsed';\nvar DISABLE = 'e-disable';\nvar CONTENT = 'e-content';\nvar DOWNTAIL = 'e-downtail';\nvar DROPCOUNT = 'e-drop-count';\nvar CHECK = 'e-check';\nvar INDETERMINATE = 'e-stop';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar FOCUS = 'e-node-focus';\nvar IMAGE = 'e-list-img';\nvar BIGGER = 'e-bigger';\nvar SMALL = 'e-small';\nvar treeAriaAttr = {\n treeRole: 'tree',\n itemRole: 'treeitem',\n listRole: 'group',\n itemText: '',\n wrapperRole: '',\n};\n/**\n * Configures the fields to bind to the properties of node in the TreeView component.\n */\nvar FieldsSettings = /** @class */ (function (_super) {\n __extends(FieldsSettings, _super);\n function FieldsSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('child')\n ], FieldsSettings.prototype, \"child\", void 0);\n __decorate([\n Property([])\n ], FieldsSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('expanded')\n ], FieldsSettings.prototype, \"expanded\", void 0);\n __decorate([\n Property('hasChildren')\n ], FieldsSettings.prototype, \"hasChildren\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldsSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldsSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('id')\n ], FieldsSettings.prototype, \"id\", void 0);\n __decorate([\n Property('imageUrl')\n ], FieldsSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldsSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('parentID')\n ], FieldsSettings.prototype, \"parentID\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"query\", void 0);\n __decorate([\n Property('selected')\n ], FieldsSettings.prototype, \"selected\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"tableName\", void 0);\n __decorate([\n Property('text')\n ], FieldsSettings.prototype, \"text\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldsSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('navigateUrl')\n ], FieldsSettings.prototype, \"navigateUrl\", void 0);\n return FieldsSettings;\n}(ChildProperty));\nexport { FieldsSettings };\n/**\n * Configures animation settings for the TreeView component.\n */\nvar ActionSettings = /** @class */ (function (_super) {\n __extends(ActionSettings, _super);\n function ActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], ActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], ActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], ActionSettings.prototype, \"easing\", void 0);\n return ActionSettings;\n}(ChildProperty));\nexport { ActionSettings };\n/**\n * Configures the animation settings for expanding and collapsing nodes in TreeView.\n */\nvar NodeAnimationSettings = /** @class */ (function (_super) {\n __extends(NodeAnimationSettings, _super);\n function NodeAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"expand\", void 0);\n return NodeAnimationSettings;\n}(ChildProperty));\nexport { NodeAnimationSettings };\n/**\n * The TreeView component is used to represent hierarchical data in a tree like structure with advanced\n * functions to perform edit, drag and drop, selection with check-box, and more.\n * ```html\n *
    \n * ```\n * ```typescript\n * let treeObj: TreeView = new TreeView();\n * treeObj.appendTo('#tree');\n * ```\n */\nvar TreeView = /** @class */ (function (_super) {\n __extends(TreeView, _super);\n function TreeView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.preventExpand = false;\n _this.checkedElement = [];\n _this.mouseDownStatus = false;\n return _this;\n }\n TreeView_1 = TreeView;\n /**\n * Get component name.\n * @returns string\n * @private\n */\n TreeView.prototype.getModuleName = function () {\n return 'treeview';\n };\n /**\n * Initialize the event handler\n */\n TreeView.prototype.preRender = function () {\n var _this = this;\n this.checkActionNodes = [];\n this.dragStartAction = false;\n this.isAnimate = false;\n this.keyConfigs = {\n escape: 'escape',\n end: 'end',\n enter: 'enter',\n f2: 'f2',\n home: 'home',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlDown: 'ctrl+downarrow',\n ctrlUp: 'ctrl+uparrow',\n ctrlEnter: 'ctrl+enter',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n ctrlA: 'ctrl+A',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftEnter: 'shift+enter',\n shiftHome: 'shift+home',\n shiftEnd: 'shift+end',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n csEnter: 'ctrl+shift+enter',\n csHome: 'ctrl+shift+home',\n csEnd: 'ctrl+shift+end',\n space: 'space',\n };\n this.listBaseOption = {\n expandCollapse: true,\n showIcon: true,\n expandIconClass: EXPANDABLE,\n ariaAttributes: treeAriaAttr,\n expandIconPosition: 'Left',\n itemCreated: function (e) {\n _this.beforeNodeCreate(e);\n },\n };\n this.updateListProp(this.fields);\n this.aniObj = new Animation({});\n this.treeList = [];\n this.isLoaded = false;\n this.isInitalExpand = false;\n this.index = 0;\n this.setTouchClass();\n if (isNOU(this.selectedNodes)) {\n this.setProperties({ selectedNodes: [] }, true);\n }\n if (isNOU(this.checkedNodes)) {\n this.setProperties({ checkedNodes: [] }, true);\n }\n if (isNOU(this.expandedNodes)) {\n this.setProperties({ expandedNodes: [] }, true);\n }\n else {\n this.isInitalExpand = true;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n * @hidden\n */\n TreeView.prototype.getPersistData = function () {\n var keyEntity = ['selectedNodes', 'checkedNodes', 'expandedNodes'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n TreeView.prototype.render = function () {\n this.initialRender = true;\n this.initialize();\n this.setDataBinding();\n this.setExpandOnType();\n this.setRipple();\n this.wireEditingEvents(this.allowEditing);\n this.setDragAndDrop(this.allowDragAndDrop);\n this.wireEvents();\n this.initialRender = false;\n };\n TreeView.prototype.initialize = function () {\n this.element.setAttribute('role', 'tree');\n this.element.setAttribute('tabindex', '0');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n this.setCssClass(null, this.cssClass);\n this.setEnableRtl();\n this.setFullRow(this.fullRowSelect);\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n };\n TreeView.prototype.setEnableRtl = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n TreeView.prototype.setRipple = function () {\n var tempStr = '.' + FULLROW + ',.' + TEXTWRAP;\n var rippleModel = {\n selector: tempStr,\n ignore: '.' + TEXTWRAP + ' > .' + ICON + ',.' + INPUTGROUP + ',.' + INPUT + ', .' + CHECKBOXWRAP\n };\n this.rippleFn = rippleEffect(this.element, rippleModel);\n var iconModel = {\n selector: '.' + TEXTWRAP + ' > .' + ICON,\n isCenterRipple: true,\n };\n this.rippleIconFn = rippleEffect(this.element, iconModel);\n };\n TreeView.prototype.setFullRow = function (isEnabled) {\n isEnabled ? addClass([this.element], FULLROWWRAP) : removeClass([this.element], FULLROWWRAP);\n };\n TreeView.prototype.setMultiSelect = function (isEnabled) {\n var firstUl = select('.' + PARENTITEM, this.element);\n if (isEnabled) {\n firstUl.setAttribute('aria-multiselectable', 'true');\n }\n else {\n firstUl.removeAttribute('aria-multiselectable');\n }\n };\n TreeView.prototype.templateComplier = function (template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n };\n TreeView.prototype.setDataBinding = function () {\n var _this = this;\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager) {\n 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 = JSON.parse(JSON.stringify(this.fields.dataSource));\n this.setRootData();\n }\n this.isNumberTypeId = this.getType();\n this.renderItems(false);\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.getQuery = function (mapper, value) {\n if (value === void 0) { value = null; }\n var columns = [];\n var query;\n if (!mapper.query) {\n query = new Query();\n var prop = this.getActualProperties(mapper);\n for (var _i = 0, _a = Object.keys(prop); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col !== 'dataSource' && col !== 'tableName' && col !== 'child' && !!mapper[col]\n && columns.indexOf(mapper[col]) === -1) {\n columns.push(mapper[col]);\n }\n }\n query.select(columns);\n if (prop.hasOwnProperty('tableName')) {\n query.from(mapper.tableName);\n }\n }\n else {\n query = mapper.query.clone();\n }\n ListBase.addSorting(this.sortOrder, mapper.text, query);\n if (!isNOU(value) && !isNOU(mapper.parentID)) {\n query.where(mapper.parentID, 'equal', (this.isNumberTypeId ? parseFloat(value) : value));\n }\n return query;\n };\n TreeView.prototype.getType = function () {\n return this.treeData[0] ? ((typeof getValue(this.fields.id, this.treeData[0]) === 'number') ? true : false) : false;\n };\n TreeView.prototype.setRootData = function () {\n this.dataType = this.getDataType(this.treeData, this.fields);\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n var rootItems = this.getChildNodes(this.treeData, undefined, true);\n if (isNOU(rootItems)) {\n this.rootData = [];\n }\n else {\n this.rootData = rootItems;\n }\n }\n else {\n this.rootData = this.treeData;\n }\n };\n TreeView.prototype.renderItems = function (isSorted) {\n this.listBaseOption.ariaAttributes.level = 1;\n this.ulElement = ListBase.createList(this.createElement, isSorted ? this.rootData : this.getSortedData(this.rootData), this.listBaseOption);\n this.element.appendChild(this.ulElement);\n this.finalizeNode(this.element);\n };\n TreeView.prototype.beforeNodeCreate = function (e) {\n if (this.showCheckBox) {\n var checkboxEle = createCheckBox(this.createElement, true, { cssClass: this.touchClass });\n var icon = select('div.' + ICON, e.item);\n var id = e.item.getAttribute('data-uid');\n e.item.childNodes[0].insertBefore(checkboxEle, e.item.childNodes[0].childNodes[isNOU(icon) ? 0 : 1]);\n var checkValue = getValue(e.fields.isChecked, e.curData);\n if (this.checkedNodes.indexOf(id) > -1) {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else if (!isNOU(checkValue) && checkValue.toString() === 'true') {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else {\n checkboxEle.setAttribute('aria-checked', 'false');\n }\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n EventHandler.add(frame, 'mousedown', this.frameMouseHandler, this);\n EventHandler.add(frame, 'mouseup', this.frameMouseHandler, this);\n }\n if (this.fullRowSelect) {\n this.createFullRow(e.item);\n }\n if (this.allowMultiSelection && !e.item.classList.contains(SELECTED)) {\n e.item.setAttribute('aria-selected', 'false');\n }\n var fields = e.fields;\n this.addActionClass(e, fields.selected, SELECTED);\n this.addActionClass(e, fields.expanded, EXPANDED);\n if (!isNOU(this.nodeTemplateFn)) {\n var textEle = e.item.querySelector('.' + LISTTEXT);\n textEle.innerHTML = '';\n append(this.nodeTemplateFn(e.curData), textEle);\n }\n var eventArgs = {\n node: e.item,\n nodeData: e.curData,\n text: e.text,\n };\n this.trigger('drawNode', eventArgs);\n };\n TreeView.prototype.frameMouseHandler = function (e) {\n var rippleSpan = select('.' + CHECKBOXRIPPLE, e.target.parentElement);\n rippleMouseHandler(e, rippleSpan);\n };\n TreeView.prototype.addActionClass = function (e, action, cssClass) {\n var data = e.curData;\n var actionValue = getValue(action, data);\n if (!isNOU(actionValue) && actionValue.toString() !== 'false') {\n e.item.classList.add(cssClass);\n }\n };\n TreeView.prototype.getDataType = function (ds, mapper) {\n if (this.fields.dataSource instanceof DataManager) {\n for (var i = 0; i < ds.length; i++) {\n if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[i]))) {\n return 1;\n }\n }\n return 2;\n }\n for (var i = 0, len = ds.length; i < len; i++) {\n if ((typeof mapper.child === 'string') && !isNOU(getValue(mapper.child, ds[i]))) {\n return 2;\n }\n if (!isNOU(getValue(mapper.parentID, ds[i])) || !isNOU(getValue(mapper.hasChildren, ds[i]))) {\n return 1;\n }\n }\n return 1;\n };\n TreeView.prototype.getGroupedData = function (dataSource, groupBy) {\n var cusQuery = new Query().group(groupBy);\n var ds = ListBase.getDataSource(dataSource, cusQuery);\n var grpItem = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n grpItem.push(itemObj);\n }\n return grpItem;\n };\n TreeView.prototype.getSortedData = function (list) {\n if (list && this.sortOrder !== 'None') {\n list = ListBase.getDataSource(list, ListBase.addSorting(this.sortOrder, this.fields.text));\n }\n return list;\n };\n TreeView.prototype.finalizeNode = function (element) {\n var iNodes = selectAll('.' + IMAGE, element);\n for (var k = 0; k < iNodes.length; k++) {\n iNodes[k].setAttribute('alt', IMAGE);\n }\n if (this.isLoaded) {\n var sNodes = selectAll('.' + SELECTED, element);\n for (var i = 0; i < sNodes.length; i++) {\n this.selectNode(sNodes[i], null);\n break;\n }\n removeClass(sNodes, SELECTED);\n }\n var cNodes = selectAll('.' + LISTITEM + ':not(.' + EXPANDED + ')', element);\n for (var j = 0; j < cNodes.length; j++) {\n var icon = select('div.' + ICON, cNodes[j]);\n if (icon && icon.classList.contains(EXPANDABLE)) {\n this.disableExpandAttr(cNodes[j]);\n }\n }\n var eNodes = selectAll('.' + EXPANDED, element);\n if (!this.isInitalExpand) {\n for (var i = 0; i < eNodes.length; i++) {\n this.renderChildNodes(eNodes[i]);\n }\n }\n removeClass(eNodes, EXPANDED);\n this.updateList();\n if (this.isLoaded) {\n this.updateCheckedProp();\n }\n };\n TreeView.prototype.updateCheckedProp = function () {\n var _this = this;\n if (this.showCheckBox) {\n var nodes_1 = [].concat([], this.checkedNodes);\n this.checkedNodes.forEach(function (value, index) {\n var checkBox = _this.element.querySelector('[data-uid=\"' + value + '\"]');\n if (isNOU(checkBox)) {\n nodes_1 = nodes_1.filter(function (e) { return e !== value; });\n }\n });\n this.setProperties({ checkedNodes: nodes_1 }, true);\n }\n };\n TreeView.prototype.ensureParentCheckState = function (element) {\n if (!isNOU(element)) {\n if (element.classList.contains(ROOT)) {\n return;\n }\n var ulElement = element;\n if (element.classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, element);\n }\n var checkedNodes = selectAll('.' + CHECK, ulElement);\n var nodes = selectAll('.' + LISTITEM, ulElement);\n var checkBoxEle = element.getElementsByClassName(CHECKBOXWRAP)[0];\n if (nodes.length === checkedNodes.length) {\n this.changeState(checkBoxEle, 'check', null, true, true);\n }\n else if (checkedNodes.length > 0) {\n this.changeState(checkBoxEle, 'indeterminate', null, true, true);\n }\n else if (checkedNodes.length === 0) {\n this.changeState(checkBoxEle, 'uncheck', null, true, true);\n }\n var parentUL = closest(element, '.' + PARENTITEM);\n if (!isNOU(parentUL)) {\n var currentParent = closest(parentUL, '.' + LISTITEM);\n this.ensureParentCheckState(currentParent);\n }\n }\n };\n TreeView.prototype.ensureChildCheckState = function (element, e) {\n if (!isNOU(element)) {\n var childElement = select('.' + PARENTITEM, element);\n var checkBoxes = void 0;\n if (!isNOU(childElement)) {\n checkBoxes = selectAll('.' + CHECKBOXWRAP, childElement);\n var isChecked = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n var checkedState = void 0;\n for (var index = 0; index < checkBoxes.length; index++) {\n if (!isNOU(this.currentLoadData) && !isNOU(getValue(this.fields.isChecked, this.currentLoadData[index]))) {\n checkedState = getValue(this.fields.isChecked, this.currentLoadData[index]) ? 'check' : 'uncheck';\n if (this.ele !== -1) {\n checkedState = isChecked ? 'check' : 'uncheck';\n }\n }\n else {\n var isNodeChecked = checkBoxes[index].getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n checkedState = (!this.isLoaded && isNodeChecked) ? 'check' : (isChecked ? 'check' : 'uncheck');\n }\n this.changeState(checkBoxes[index], checkedState, e, true, true);\n }\n }\n }\n };\n TreeView.prototype.doCheckBoxAction = function (nodes, doCheck) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var checkBox = select('.' + PARENTITEM + ' .' + CHECKBOXWRAP, liEle);\n this.validateCheckNode(checkBox, !doCheck, liEle, null);\n }\n }\n else {\n var checkBoxes = selectAll('.' + CHECKBOXWRAP, this.element);\n for (var index = 0; index < checkBoxes.length; index++) {\n this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck');\n }\n }\n };\n TreeView.prototype.changeState = function (wrapper, state, e, isPrevent, isAdd) {\n var ariaState;\n var eventArgs;\n var currLi = closest(wrapper, '.' + LISTITEM);\n if (!isPrevent) {\n this.checkActionNodes = [];\n eventArgs = this.getCheckEvent(currLi, state, e);\n this.trigger('nodeChecking', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n this.addCheck(currLi);\n ariaState = 'true';\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n this.removeCheck(currLi);\n ariaState = 'false';\n }\n else if (state === 'indeterminate' && !frameSpan.classList.contains(INDETERMINATE)) {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n this.removeCheck(currLi);\n ariaState = 'mixed';\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n if (isAdd) {\n var data = [].concat([], this.checkActionNodes);\n eventArgs = this.getCheckEvent(currLi, state, e);\n if (isUndefined(isPrevent)) {\n eventArgs.data = data;\n }\n }\n if (!isPrevent) {\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n eventArgs.data[0].checked = ariaState;\n this.trigger('nodeChecked', eventArgs);\n this.checkActionNodes = [];\n }\n }\n };\n TreeView.prototype.addCheck = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n };\n TreeView.prototype.removeCheck = function (liEle) {\n var index = this.checkedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.checkedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.getCheckEvent = function (currLi, action, e) {\n this.checkActionNodes.push(this.getNodeData(currLi));\n var nodeData = this.checkActionNodes;\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, data: nodeData };\n };\n TreeView.prototype.finalize = function () {\n var firstUl = select('.' + PARENTITEM, this.element);\n firstUl.setAttribute('role', treeAriaAttr.treeRole);\n this.setMultiSelect(this.allowMultiSelection);\n var firstNode = select('.' + LISTITEM, this.element);\n if (firstNode) {\n addClass([firstNode], FOCUS);\n this.updateIdAttr(null, firstNode);\n }\n this.hasPid = this.rootData[0] ? this.rootData[0].hasOwnProperty(this.fields.parentID) : false;\n this.doExpandAction();\n };\n TreeView.prototype.doExpandAction = function () {\n var eUids = this.expandedNodes;\n if (this.isInitalExpand && eUids.length > 0) {\n this.setProperties({ expandedNodes: [] }, true);\n if (this.fields.dataSource instanceof DataManager) {\n this.expandGivenNodes(eUids);\n }\n else {\n for (var i = 0; i < eUids.length; i++) {\n var eNode = select('[data-uid=\"' + eUids[i] + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null);\n }\n }\n }\n this.afterFinalized();\n }\n }\n else {\n this.afterFinalized();\n }\n };\n TreeView.prototype.expandGivenNodes = function (arr) {\n var proxy = this;\n this.expandCallback(arr[this.index], function () {\n proxy.index++;\n if (proxy.index < arr.length) {\n proxy.expandGivenNodes(arr);\n }\n else {\n proxy.afterFinalized();\n }\n });\n };\n TreeView.prototype.expandCallback = function (eUid, callback) {\n var eNode = select('[data-uid=\"' + eUid + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null, false, callback);\n }\n else {\n callback();\n }\n }\n else {\n callback();\n }\n };\n TreeView.prototype.afterFinalized = function () {\n this.doSelectionAction();\n this.updateCheckedProp();\n this.isLoaded = true;\n this.isAnimate = true;\n this.isInitalExpand = false;\n var eventArgs = { data: this.treeData };\n this.trigger('dataBound', eventArgs);\n };\n TreeView.prototype.doSelectionAction = function () {\n var sNodes = selectAll('.' + SELECTED, this.element);\n var sUids = this.selectedNodes;\n if (sUids.length > 0) {\n this.setProperties({ selectedNodes: [] }, true);\n for (var i = 0; i < sUids.length; i++) {\n var sNode = select('[data-uid=\"' + sUids[i] + '\"]', this.element);\n this.selectNode(sNode, null, true);\n if (!this.allowMultiSelection) {\n break;\n }\n }\n }\n else {\n this.selectGivenNodes(sNodes);\n }\n removeClass(sNodes, SELECTED);\n };\n TreeView.prototype.selectGivenNodes = function (sNodes) {\n for (var i = 0; i < sNodes.length; i++) {\n if (!sNodes[i].classList.contains('e-disable')) {\n this.selectNode(sNodes[i], null, true);\n }\n if (!this.allowMultiSelection) {\n break;\n }\n }\n };\n TreeView.prototype.clickHandler = function (event) {\n var target = event.originalEvent.target;\n EventHandler.remove(this.element, 'contextmenu', this.preventContextMenu);\n if (!target || this.dragStartAction) {\n return;\n }\n else {\n var classList = target.classList;\n var li = closest(target, '.' + LISTITEM);\n if (!li) {\n return;\n }\n else {\n this.removeHover();\n this.setFocusElement(li);\n if (this.showCheckBox && !li.classList.contains('e-disable')) {\n var checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNOU(checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, checkWrapper);\n this.validateCheckNode(checkWrapper, checkElement.classList.contains(CHECK), li, event.originalEvent);\n this.triggerClickEvent(event.originalEvent, li);\n return;\n }\n }\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(li, target, event);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, target, event);\n }\n else {\n if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n this.triggerClickEvent(event.originalEvent, li);\n }\n }\n };\n TreeView.prototype.nodeCheckingEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n this.checkActionNodes = [];\n var ariaState = !isCheck ? 'true' : 'false';\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n var eventArgs = this.getCheckEvent(currLi, isCheck ? 'uncheck' : 'check', e);\n this.trigger('nodeChecking', eventArgs);\n return eventArgs;\n };\n TreeView.prototype.nodeCheckedEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n var eventArgs = this.getCheckEvent(wrapper, isCheck ? 'uncheck' : 'check', e);\n eventArgs.data = eventArgs.data.splice(0, eventArgs.data.length - 1);\n this.trigger('nodeChecked', eventArgs);\n };\n TreeView.prototype.triggerClickEvent = function (e, li) {\n var eventArgs = {\n event: e,\n node: li,\n };\n this.trigger('nodeClicked', eventArgs);\n };\n TreeView.prototype.expandNode = function (currLi, icon) {\n var _this = this;\n if (icon.classList.contains(LOAD)) {\n this.hideSpinner(icon);\n }\n if (!this.initialRender) {\n icon.classList.add('interaction');\n }\n if (this.preventExpand !== true) {\n removeClass([icon], EXPANDABLE);\n addClass([icon], COLLAPSIBLE);\n var start_1 = 0;\n var end_1 = 0;\n var proxy_1 = this;\n var ul_1 = select('.' + PARENTITEM, currLi);\n var liEle_1 = currLi;\n this.setHeight(liEle_1, ul_1);\n if (this.isAnimate) {\n this.aniObj.animate(ul_1, {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing,\n begin: function (args) {\n liEle_1.style.overflow = 'hidden';\n start_1 = liEle_1.offsetHeight;\n end_1 = select('.' + TEXTWRAP, currLi).offsetHeight;\n },\n progress: function (args) {\n args.element.style.display = 'block';\n proxy_1.animateHeight(args, start_1, end_1);\n },\n end: function (args) {\n args.element.style.display = 'block';\n _this.expandedNode(liEle_1, ul_1, icon);\n }\n });\n }\n else {\n this.expandedNode(liEle_1, ul_1, icon);\n }\n }\n else {\n var ul = select('.' + PARENTITEM, currLi);\n ul.style.display = 'none';\n if (this.fields.dataSource instanceof DataManager === true) {\n this.preventExpand = false;\n }\n }\n if (this.initialRender) {\n icon.classList.add('interaction');\n }\n };\n TreeView.prototype.expandedNode = function (currLi, ul, icon) {\n ul.style.display = 'block';\n currLi.style.display = 'block';\n currLi.style.overflow = '';\n currLi.style.height = '';\n removeClass([icon], PROCESS);\n this.addExpand(currLi);\n if (this.isLoaded && this.expandArgs) {\n this.expandArgs = this.getExpandEvent(currLi, null);\n this.trigger('nodeExpanded', this.expandArgs);\n }\n };\n TreeView.prototype.addExpand = function (liEle) {\n liEle.setAttribute('aria-expanded', 'true');\n removeClass([liEle], NODECOLLAPSED);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.expandedNodes.indexOf(id) === -1) {\n this.expandedNodes.push(id);\n }\n };\n TreeView.prototype.collapseNode = function (currLi, icon, e) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n var colArgs;\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeCollapsing', colArgs);\n if (colArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n removeClass([icon], COLLAPSIBLE);\n addClass([icon], EXPANDABLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n if (this.isAnimate) {\n this.aniObj.animate(ul, {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n start = select('.' + TEXTWRAP, currLi).offsetHeight;\n end = liEle.offsetHeight;\n },\n progress: function (args) {\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n args.element.style.display = 'none';\n _this.collapsedNode(liEle, ul, icon, colArgs);\n }\n });\n }\n else {\n this.collapsedNode(liEle, ul, icon, colArgs);\n }\n };\n TreeView.prototype.collapsedNode = function (liEle, ul, icon, colArgs) {\n ul.style.display = 'none';\n liEle.style.overflow = '';\n liEle.style.height = '';\n removeClass([icon], PROCESS);\n this.removeExpand(liEle);\n if (this.isLoaded) {\n this.trigger('nodeCollapsed', colArgs);\n }\n };\n TreeView.prototype.removeExpand = function (liEle, toRemove) {\n if (toRemove) {\n liEle.removeAttribute('aria-expanded');\n }\n else {\n this.disableExpandAttr(liEle);\n }\n var index = this.expandedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.expandedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.disableExpandAttr = function (liEle) {\n liEle.setAttribute('aria-expanded', 'false');\n addClass([liEle], NODECOLLAPSED);\n };\n TreeView.prototype.setHeight = function (currLi, ul) {\n ul.style.display = 'block';\n ul.style.visibility = 'hidden';\n currLi.style.height = currLi.offsetHeight + 'px';\n ul.style.display = 'none';\n ul.style.visibility = '';\n };\n TreeView.prototype.animateHeight = function (args, start, end) {\n var remaining = (args.duration - args.timeStamp) / args.duration;\n var currentHeight = (end - start) * remaining + start;\n args.element.parentElement.style.height = currentHeight + 'px';\n };\n TreeView.prototype.renderChildNodes = function (parentLi, expandChild, callback) {\n var _this = this;\n var eicon = select('div.' + ICON, parentLi);\n if (isNOU(eicon)) {\n return;\n }\n this.showSpinner(eicon);\n var childItems;\n if (this.fields.dataSource instanceof DataManager) {\n var level = this.parents(parentLi, '.' + PARENTITEM).length;\n var mapper_1 = this.getChildFields(this.fields, level, 1);\n if (isNOU(mapper_1) || isNOU(mapper_1.dataSource)) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n return;\n }\n this.treeList.push('false');\n 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 _this.removeExpand(parentLi, true);\n }\n else {\n _this.updateListProp(mapper_1);\n if (_this.fields.dataSource instanceof DataManager && !(_this.fields.dataSource.dataSource.offline &&\n _this.fields.dataSource.dataSource.dataType !== 'json')) {\n var id = parentLi.getAttribute('data-uid');\n var nodeData = _this.getNodeObject(id);\n setValue('child', childItems, nodeData);\n }\n _this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(_this.createElement, childItems, _this.listBaseOption));\n _this.expandNode(parentLi, eicon);\n _this.ensureCheckNode(parentLi);\n _this.finalizeNode(parentLi);\n _this.renderSubChild(parentLi, expandChild);\n }\n if (callback) {\n callback();\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 this.removeExpand(parentLi, true);\n return;\n }\n else {\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.createElement, this.getSortedData(childItems), this.listBaseOption));\n this.expandNode(parentLi, eicon);\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.ele = (this.checkedElement) ? this.checkedElement.indexOf(element.getAttribute('data-uid')) : null;\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) && !currNode.classList.contains('e-disable')) {\n this.addSelect(currNode);\n }\n }\n }\n else {\n this.startNode = li;\n this.addSelect(li);\n }\n this.setFocusElement(li);\n if (this.isLoaded) {\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.unselectNode = function (li, e) {\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'un-select', e);\n this.trigger('nodeSelecting', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n this.removeSelect(li);\n this.setFocusElement(li);\n if (this.isLoaded) {\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.setFocusElement = function (li) {\n if (!isNOU(li)) {\n var focusedNode = this.getFocusedNode();\n if (focusedNode) {\n removeClass([focusedNode], FOCUS);\n }\n addClass([li], FOCUS);\n this.updateIdAttr(focusedNode, li);\n }\n };\n TreeView.prototype.addSelect = function (liEle) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n this.selectedNodes.push(id);\n }\n };\n TreeView.prototype.removeSelect = function (liEle) {\n if (this.allowMultiSelection) {\n liEle.setAttribute('aria-selected', 'false');\n }\n else {\n liEle.removeAttribute('aria-selected');\n }\n removeClass([liEle], ACTIVE);\n var index = this.selectedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.selectedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.removeSelectAll = function () {\n var selectedLI = this.element.querySelectorAll('.' + ACTIVE);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.allowMultiSelection) {\n ele.setAttribute('aria-selected', 'false');\n }\n else {\n ele.removeAttribute('aria-selected');\n }\n }\n removeClass(selectedLI, ACTIVE);\n this.setProperties({ selectedNodes: [] }, true);\n };\n TreeView.prototype.getSelectEvent = function (currLi, action, e) {\n var nodeData = this.getNodeData(currLi);\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData };\n };\n TreeView.prototype.setExpandOnType = function () {\n this.expandOnType = (this.expandOn === 'Auto') ? (Browser.isDevice ? 'Click' : 'DblClick') : this.expandOn;\n };\n TreeView.prototype.expandHandler = function (e) {\n var target = e.originalEvent.target;\n if (!target || target.classList.contains(INPUT) || target.classList.contains(ROOT) ||\n target.classList.contains(PARENTITEM) || target.classList.contains(LISTITEM) ||\n target.classList.contains(ICON) || this.showCheckBox && closest(target, '.' + CHECKBOXWRAP)) {\n return;\n }\n else {\n this.expandCollapseAction(closest(target, '.' + LISTITEM), e);\n }\n };\n TreeView.prototype.expandCollapseAction = function (currLi, e) {\n var icon = select('div.' + ICON, currLi);\n if (!icon || icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n var classList = icon.classList;\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(currLi, icon, e);\n }\n else {\n this.collapseNode(currLi, icon, e);\n }\n }\n };\n TreeView.prototype.expandAction = function (currLi, icon, e, expandChild, callback) {\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n if (this.isLoaded) {\n this.expandArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeExpanding', this.expandArgs);\n if (this.expandArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n var ul = select('.' + PARENTITEM, currLi);\n if (ul && ul.nodeName === 'UL') {\n this.expandNode(currLi, icon);\n }\n else {\n this.renderChildNodes(currLi, expandChild, callback);\n }\n };\n TreeView.prototype.keyActionHandler = function (e) {\n var target = e.target;\n var focusedNode = this.getFocusedNode();\n if (target && target.classList.contains(INPUT)) {\n var inpEle = target;\n if (e.action === 'enter') {\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n else if (e.action === 'escape') {\n inpEle.value = this.oldText;\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n return;\n }\n e.preventDefault();\n var eventArgs = {\n cancel: false,\n event: e,\n node: focusedNode,\n };\n this.trigger('keyPress', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n switch (e.action) {\n case 'space':\n if (this.showCheckBox) {\n this.checkNode(e);\n }\n break;\n case 'moveRight':\n this.openNode(this.enableRtl ? false : true, e);\n break;\n case 'moveLeft':\n this.openNode(this.enableRtl ? true : false, e);\n break;\n case 'shiftDown':\n this.shiftKeySelect(true, e);\n break;\n case 'moveDown':\n case 'ctrlDown':\n case 'csDown':\n this.navigateNode(true);\n break;\n case 'shiftUp':\n this.shiftKeySelect(false, e);\n break;\n case 'moveUp':\n case 'ctrlUp':\n case 'csUp':\n this.navigateNode(false);\n break;\n case 'home':\n case 'shiftHome':\n case 'ctrlHome':\n case 'csHome':\n this.navigateRootNode(true);\n break;\n case 'end':\n case 'shiftEnd':\n case 'ctrlEnd':\n case 'csEnd':\n this.navigateRootNode(false);\n break;\n case 'enter':\n case 'ctrlEnter':\n case 'shiftEnter':\n case 'csEnter':\n this.toggleSelect(focusedNode, e);\n break;\n case 'f2':\n if (this.allowEditing && !focusedNode.classList.contains('e-disable')) {\n this.createTextbox(focusedNode, e);\n }\n break;\n case 'ctrlA':\n if (this.allowMultiSelection) {\n var sNodes = selectAll('.' + LISTITEM + ':not(.' + ACTIVE + ')', this.element);\n this.selectGivenNodes(sNodes);\n }\n break;\n }\n };\n TreeView.prototype.navigateToFocus = function (isUp) {\n var focusNode = this.getFocusedNode().querySelector('.' + TEXTWRAP);\n var pos = focusNode.getBoundingClientRect();\n var parent = this.getScrollParent(this.element);\n if (!isNOU(parent)) {\n var parentPos = parent.getBoundingClientRect();\n if (pos.bottom > parentPos.bottom) {\n parent.scrollTop += pos.bottom - parentPos.bottom;\n }\n else if (pos.top < parentPos.top) {\n parent.scrollTop -= parentPos.top - pos.top;\n }\n }\n var isVisible = this.isVisibleInViewport(focusNode);\n if (!isVisible) {\n focusNode.scrollIntoView(isUp);\n }\n };\n TreeView.prototype.isVisibleInViewport = function (txtWrap) {\n var pos = txtWrap.getBoundingClientRect();\n return (pos.top >= 0 && pos.left >= 0 && pos.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n pos.right <= (window.innerWidth || document.documentElement.clientWidth));\n };\n TreeView.prototype.getScrollParent = function (node) {\n if (isNOU(node)) {\n return null;\n }\n return (node.scrollHeight > node.clientHeight) ? node : this.getScrollParent(node.parentElement);\n };\n TreeView.prototype.shiftKeySelect = function (isTowards, e) {\n if (this.allowMultiSelection) {\n var focusedNode = this.getFocusedNode();\n var nextNode = isTowards ? this.getNextNode(focusedNode) : this.getPrevNode(focusedNode);\n this.removeHover();\n this.setFocusElement(nextNode);\n this.toggleSelect(nextNode, e, false);\n this.navigateToFocus(!isTowards);\n }\n else {\n this.navigateNode(isTowards);\n }\n };\n TreeView.prototype.checkNode = function (e) {\n var focusedNode = this.getFocusedNode();\n var checkWrap = select('.' + CHECKBOXWRAP, focusedNode);\n var isChecked = select(' .' + CHECKBOXFRAME, checkWrap).classList.contains(CHECK);\n if (!focusedNode.classList.contains('e-disable')) {\n this.validateCheckNode(checkWrap, isChecked, focusedNode, e);\n }\n };\n TreeView.prototype.validateCheckNode = function (checkWrap, isCheck, li, e) {\n var eventArgs = this.nodeCheckingEvent(checkWrap, isCheck, e);\n if (eventArgs.cancel) {\n return;\n }\n if (this.checkedElement.indexOf(li.getAttribute('data-uid')) === -1) {\n this.checkedElement.push(li.getAttribute('data-uid'));\n var child = this.getChildNodes(this.treeData, li.getAttribute('data-uid'));\n (child !== null) ? this.allCheckNode(child, this.checkedElement, null, null, false) : child = null;\n }\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true);\n this.ensureChildCheckState(li);\n this.ensureParentCheckState(closest(closest(li, '.' + PARENTITEM), '.' + LISTITEM));\n this.nodeCheckedEvent(checkWrap, isCheck, e);\n };\n //This method can be used to get all child nodes of a parent by passing the children of a parent along with 'validateCheck' set to false\n TreeView.prototype.allCheckNode = function (child, newCheck, checked, childCheck, validateCheck) {\n if (child) {\n for (var length_1 = 0; length_1 < child.length; length_1++) {\n var childId = getValue(this.fields.id, child[length_1]);\n var check = this.element.querySelector('[data-uid=\"' + childId + '\"]');\n //Validates isChecked case while no UI interaction has been performed on the node or it's parent\n if (validateCheck !== false && this.checkedElement.indexOf(childId.toString()) === -1) {\n if (((check === null && !isNOU(child[length_1][this.fields.isChecked]) && newCheck.indexOf(childId.toString()) === -1)\n || childCheck === 0 || checked === 2)) {\n (child[length_1][this.fields.isChecked] !== false || checked === 2) ? newCheck.push(childId.toString())\n : childCheck = null;\n childCheck = (child[length_1][this.fields.isChecked] !== false || checked === 2) ? 0 : null;\n }\n }\n //Pushes child checked node done thro' UI interaction\n if (newCheck.indexOf(childId.toString()) === -1 && isNOU(checked)) {\n newCheck.push(childId.toString());\n }\n //Gets if any next level children are available for child nodes\n if (getValue(this.fields.hasChildren, child[length_1]) === true ||\n getValue(this.fields.child.toString(), child[length_1])) {\n var id = getValue(this.fields.id, child[length_1]);\n var childId_1 = this.getChildNodes(this.treeData, id.toString());\n if (childId_1) {\n (isNOU(validateCheck)) ? this.allCheckNode(childId_1, newCheck, checked, childCheck) :\n this.allCheckNode(childId_1, newCheck, checked, childCheck, validateCheck);\n childCheck = null;\n }\n }\n childCheck = null;\n }\n }\n };\n TreeView.prototype.openNode = function (toBeOpened, e) {\n var focusedNode = this.getFocusedNode();\n var icon = select('div.' + ICON, focusedNode);\n if (toBeOpened) {\n if (!icon) {\n return;\n }\n else if (icon.classList.contains(EXPANDABLE)) {\n this.expandAction(focusedNode, icon, e);\n }\n else {\n this.focusNextNode(focusedNode, true);\n }\n }\n else {\n if (icon && icon.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(focusedNode, icon, e);\n }\n else {\n var parentLi = closest(closest(focusedNode, '.' + PARENTITEM), '.' + LISTITEM);\n if (!parentLi) {\n return;\n }\n else {\n if (!parentLi.classList.contains('e-disable')) {\n this.setFocus(focusedNode, parentLi);\n this.navigateToFocus(true);\n }\n }\n }\n }\n };\n TreeView.prototype.navigateNode = function (isTowards) {\n var focusedNode = this.getFocusedNode();\n this.focusNextNode(focusedNode, isTowards);\n };\n TreeView.prototype.navigateRootNode = function (isBackwards) {\n var focusedNode = this.getFocusedNode();\n var rootNode = isBackwards ? this.getRootNode() : this.getEndNode();\n if (!rootNode.classList.contains('e-disable')) {\n this.setFocus(focusedNode, rootNode);\n this.navigateToFocus(isBackwards);\n }\n };\n TreeView.prototype.getFocusedNode = function () {\n var selectedItem;\n var fNode = select('.' + LISTITEM + '.' + FOCUS, this.element);\n if (isNOU(fNode)) {\n selectedItem = select('.' + LISTITEM, this.element);\n }\n return isNOU(fNode) ? (isNOU(selectedItem) ? this.element.firstElementChild : selectedItem) : fNode;\n };\n TreeView.prototype.focusNextNode = function (li, isTowards) {\n var nextNode = isTowards ? this.getNextNode(li) : this.getPrevNode(li);\n this.setFocus(li, nextNode);\n this.navigateToFocus(!isTowards);\n if (nextNode.classList.contains('e-disable')) {\n var lastChild = nextNode.lastChild;\n if (nextNode.previousSibling == null && nextNode.classList.contains('e-level-1')) {\n this.focusNextNode(nextNode, true);\n }\n else if (nextNode.nextSibling == null && nextNode.classList.contains('e-node-collapsed')) {\n this.focusNextNode(nextNode, false);\n }\n else if (nextNode.nextSibling == null && lastChild.classList.contains('e-text-content')) {\n this.focusNextNode(nextNode, false);\n }\n else {\n this.focusNextNode(nextNode, isTowards);\n }\n }\n };\n TreeView.prototype.getNextNode = function (li) {\n var index = this.liList.indexOf(li);\n var nextNode;\n do {\n index++;\n nextNode = this.liList[index];\n if (isNOU(nextNode)) {\n return li;\n }\n } while (!isVisible(nextNode));\n return nextNode;\n };\n TreeView.prototype.getPrevNode = function (li) {\n var index = this.liList.indexOf(li);\n var prevNode;\n do {\n index--;\n prevNode = this.liList[index];\n if (isNOU(prevNode)) {\n return li;\n }\n } while (!isVisible(prevNode));\n return prevNode;\n };\n TreeView.prototype.getRootNode = function () {\n var index = 0;\n var rootNode;\n do {\n rootNode = this.liList[index];\n index++;\n } while (!isVisible(rootNode));\n return rootNode;\n };\n TreeView.prototype.getEndNode = function () {\n var index = this.liList.length - 1;\n var endNode;\n do {\n endNode = this.liList[index];\n index--;\n } while (!isVisible(endNode));\n return endNode;\n };\n TreeView.prototype.setFocus = function (preNode, nextNode) {\n removeClass([preNode], [HOVER, FOCUS]);\n if (!nextNode.classList.contains('e-disable')) {\n addClass([nextNode], [HOVER, FOCUS]);\n this.updateIdAttr(preNode, nextNode);\n }\n };\n TreeView.prototype.updateIdAttr = function (preNode, nextNode) {\n this.element.removeAttribute('aria-activedescendant');\n if (preNode) {\n preNode.removeAttribute('id');\n }\n nextNode.setAttribute('id', this.element.id + '_active');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n };\n TreeView.prototype.focusIn = function () {\n if (!this.mouseDownStatus) {\n addClass([this.getFocusedNode()], HOVER);\n }\n this.mouseDownStatus = false;\n };\n TreeView.prototype.focusOut = function () {\n removeClass([this.getFocusedNode()], HOVER);\n };\n TreeView.prototype.onMouseOver = function (e) {\n var target = e.target;\n var classList = target.classList;\n var currentLi = closest(target, '.' + LISTITEM);\n if (!currentLi || classList.contains(PARENTITEM) || classList.contains(LISTITEM)) {\n this.removeHover();\n return;\n }\n else {\n if (currentLi && !currentLi.classList.contains('e-disable')) {\n this.setHover(currentLi);\n }\n }\n };\n TreeView.prototype.setHover = function (li) {\n if (!li.classList.contains(HOVER)) {\n this.removeHover();\n addClass([li], HOVER);\n }\n };\n ;\n TreeView.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n TreeView.prototype.removeHover = function () {\n var hoveredNode = selectAll('.' + HOVER, this.element);\n if (hoveredNode && hoveredNode.length) {\n removeClass(hoveredNode, HOVER);\n }\n };\n ;\n TreeView.prototype.getNodeData = function (currLi, fromDS) {\n if (!isNOU(currLi) && currLi.classList.contains(LISTITEM) && closest(currLi, '.' + CONTROL).classList.contains(ROOT)) {\n var id = currLi.getAttribute('data-uid');\n var text = this.getText(currLi, fromDS);\n var pNode = closest(currLi.parentNode, '.' + LISTITEM);\n var pid = pNode ? pNode.getAttribute('data-uid') : null;\n var selected = currLi.classList.contains(ACTIVE);\n var expanded = (currLi.getAttribute('aria-expanded') === 'true') ? true : false;\n var checked = null;\n if (this.showCheckBox) {\n checked = select('.' + CHECKBOXWRAP, currLi).getAttribute('aria-checked');\n }\n return { id: id, text: text, parentID: pid, selected: selected, expanded: expanded, isChecked: checked };\n }\n return { id: '', text: '', parentID: '', selected: '', expanded: '', isChecked: '' };\n };\n TreeView.prototype.getText = function (currLi, fromDS) {\n if (fromDS) {\n var nodeData = this.getNodeObject(currLi.getAttribute('data-uid'));\n var level = parseFloat(currLi.getAttribute('aria-level'));\n var nodeFields = this.getFields(this.fields, level, 1);\n return getValue(nodeFields.text, nodeData);\n }\n return select('.' + LISTTEXT, currLi).textContent;\n };\n TreeView.prototype.getExpandEvent = function (currLi, e) {\n var nodeData = this.getNodeData(currLi);\n return { cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData, event: e };\n };\n TreeView.prototype.reRenderNodes = function () {\n this.element.innerHTML = '';\n this.setTouchClass();\n this.setProperties({ selectedNodes: [], checkedNodes: [], expandedNodes: [] }, true);\n this.isLoaded = false;\n this.setDataBinding();\n };\n TreeView.prototype.setCssClass = function (oldClass, newClass) {\n if (!isNOU(oldClass) && oldClass !== '') {\n removeClass([this.element], oldClass.split(' '));\n }\n if (!isNOU(newClass) && newClass !== '') {\n addClass([this.element], newClass.split(' '));\n }\n };\n TreeView.prototype.editingHandler = function (e) {\n var target = e.target;\n if (!target || target.classList.contains(ROOT) || target.classList.contains(PARENTITEM) ||\n target.classList.contains(LISTITEM) || target.classList.contains(ICON) ||\n target.classList.contains(INPUT) || target.classList.contains(INPUTGROUP)) {\n return;\n }\n else {\n var liEle = closest(target, '.' + LISTITEM);\n this.createTextbox(liEle, e);\n }\n };\n TreeView.prototype.createTextbox = function (liEle, e) {\n var oldInpEle = select('.' + TREEINPUT, this.element);\n if (oldInpEle) {\n oldInpEle.blur();\n }\n var textEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var innerEle = this.createElement('input', { className: TREEINPUT, attrs: { value: this.oldText } });\n var eventArgs = this.getEditEvent(liEle, null, innerEle.outerHTML);\n this.trigger('nodeEditing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var inpWidth = textEle.offsetWidth + 5;\n var style = 'width:' + inpWidth + 'px';\n addClass([liEle], EDITING);\n textEle.innerHTML = eventArgs.innerHtml;\n var inpEle = select('.' + TREEINPUT, textEle);\n this.inputObj = Input.createInput({\n element: inpEle,\n properties: {\n enableRtl: this.enableRtl,\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('style', style);\n inpEle.focus();\n var inputEle = inpEle;\n inputEle.setSelectionRange(0, inputEle.value.length);\n this.wireInputEvents(inpEle);\n };\n TreeView.prototype.updateOldText = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n this.editData = this.getNodeObject(id);\n var level = parseFloat(liEle.getAttribute('aria-level'));\n this.editFields = this.getFields(this.fields, level, 1);\n this.oldText = getValue(this.editFields.text, this.editData);\n };\n TreeView.prototype.inputFocusOut = function (e) {\n if (!select('.' + TREEINPUT, this.element)) {\n return;\n }\n var target = e.target;\n var newText = target.value;\n var txtEle = closest(target, '.' + LISTTEXT);\n var liEle = closest(target, '.' + LISTITEM);\n detach(this.inputObj.container);\n this.appendNewText(liEle, txtEle, newText, true);\n };\n TreeView.prototype.appendNewText = function (liEle, txtEle, newText, isInput) {\n var eventArgs = this.getEditEvent(liEle, newText, null);\n this.trigger('nodeEdited', eventArgs);\n newText = eventArgs.cancel ? eventArgs.oldText : eventArgs.newText;\n var newData = setValue(this.editFields.text, newText, this.editData);\n if (!isNOU(this.nodeTemplateFn)) {\n txtEle.innerHTML = '';\n append(this.nodeTemplateFn(newData), txtEle);\n }\n else {\n txtEle.innerHTML = newText;\n }\n if (isInput) {\n removeClass([liEle], EDITING);\n txtEle.focus();\n }\n if (eventArgs.oldText !== newText) {\n this.triggerEvent();\n }\n };\n TreeView.prototype.getElement = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return this.element.querySelector('[data-uid=\"' + ele + '\"]');\n }\n else if (typeof ele === 'object') {\n return ele;\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getId = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return ele;\n }\n else if (typeof ele === 'object') {\n return ele.getAttribute('data-uid');\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getEditEvent = function (liEle, newText, inpEle) {\n var data = this.getNodeData(liEle);\n return { cancel: false, newText: newText, node: liEle, nodeData: data, oldText: this.oldText, innerHtml: inpEle };\n };\n TreeView.prototype.getNodeObject = function (id) {\n var childNodes;\n if (isNOU(id)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n for (var i = 0, objlen = this.treeData.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, this.treeData[i]);\n if (!isNOU(this.treeData[i]) && !isNOU(dataId) && dataId.toString() === id) {\n return this.treeData[i];\n }\n }\n }\n else {\n return this.getChildNodeObject(this.treeData, this.fields, id);\n }\n return childNodes;\n };\n TreeView.prototype.getChildNodeObject = function (obj, mapper, id) {\n var newList;\n if (isNOU(obj)) {\n return newList;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(mapper.id, obj[i]);\n if (obj[i] && dataId && dataId.toString() === id) {\n return obj[i];\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n newList = this.getChildNodeObject(childData, this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var child = 'child';\n newList = this.getChildNodeObject(getValue(child, obj[i]), this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n }\n return newList;\n };\n TreeView.prototype.setDragAndDrop = function (toBind) {\n if (toBind) {\n this.initializeDrag();\n }\n else {\n this.destroyDrag();\n }\n };\n TreeView.prototype.initializeDrag = function () {\n var _this = this;\n var virtualEle;\n var proxy = this;\n this.dragObj = new Draggable(this.element, {\n enableTailMode: true,\n enableAutoScroll: true,\n dragTarget: '.' + TEXTWRAP,\n helper: function (e) {\n _this.dragTarget = e.sender.target;\n var dragRoot = closest(_this.dragTarget, '.' + ROOT);\n var dragWrap = closest(_this.dragTarget, '.' + TEXTWRAP);\n _this.dragLi = closest(_this.dragTarget, '.' + LISTITEM);\n if (_this.fullRowSelect && !dragWrap && _this.dragTarget.classList.contains(FULLROW)) {\n dragWrap = _this.dragTarget.nextElementSibling;\n }\n if (!_this.dragTarget || !e.element.isSameNode(dragRoot) || !dragWrap ||\n _this.dragTarget.classList.contains(ROOT) || _this.dragTarget.classList.contains(PARENTITEM) ||\n _this.dragTarget.classList.contains(LISTITEM) || _this.dragLi.classList.contains('e-disable')) {\n return false;\n }\n var cloneEle = (dragWrap.cloneNode(true));\n if (isNOU(select('div.' + ICON, cloneEle))) {\n var icon = proxy.createElement('div', { className: ICON + ' ' + EXPANDABLE });\n cloneEle.insertBefore(icon, cloneEle.children[0]);\n }\n var cssClass = DRAGITEM + ' ' + ROOT + ' ' + _this.cssClass + ' ' + (_this.enableRtl ? RTL : '');\n virtualEle = proxy.createElement('div', { className: cssClass });\n virtualEle.appendChild(cloneEle);\n var nLen = _this.selectedNodes.length;\n if (nLen > 1 && _this.allowMultiSelection && _this.dragLi.classList.contains(ACTIVE)) {\n var cNode = proxy.createElement('span', { className: DROPCOUNT, innerHTML: '' + nLen });\n virtualEle.appendChild(cNode);\n }\n document.body.appendChild(virtualEle);\n document.body.style.cursor = '';\n _this.dragData = _this.getNodeData(_this.dragLi);\n return virtualEle;\n },\n dragStart: function (e) {\n addClass([_this.element], DRAGGING);\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, null, e.target, null, virtualEle, level);\n if (eventArgs.draggedNode.classList.contains(EDITING)) {\n eventArgs.cancel = true;\n }\n else {\n _this.trigger('nodeDragStart', eventArgs);\n }\n if (eventArgs.cancel) {\n detach(virtualEle);\n removeClass([_this.element], DRAGGING);\n _this.dragStartAction = false;\n }\n else {\n _this.dragStartAction = true;\n }\n },\n drag: function (e) {\n _this.dragObj.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20 } });\n _this.dragAction(e, virtualEle);\n },\n dragStop: function (e) {\n removeClass([_this.element], DRAGGING);\n _this.removeVirtualEle();\n var dropTarget = e.target;\n var preventTargetExpand = false;\n var dropRoot = (closest(dropTarget, '.' + DROPPABLE));\n if (!dropTarget || !dropRoot) {\n detach(e.helper);\n document.body.style.cursor = '';\n }\n var listItem = closest(dropTarget, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, dropTarget, dropTarget, null, e.helper, level);\n eventArgs.preventTargetExpand = preventTargetExpand;\n _this.trigger('nodeDragStop', eventArgs);\n _this.dragParent = eventArgs.draggedParentNode;\n _this.preventExpand = eventArgs.preventTargetExpand;\n if (eventArgs.cancel) {\n if (e.helper.parentNode) {\n detach(e.helper);\n }\n document.body.style.cursor = '';\n }\n _this.dragStartAction = false;\n }\n });\n this.dropObj = new Droppable(this.element, {\n out: function (e) {\n if (!isNOU(e) && !e.target.classList.contains(SIBLING)) {\n document.body.style.cursor = 'not-allowed';\n }\n },\n over: function (e) {\n document.body.style.cursor = '';\n },\n drop: function (e) {\n _this.dropAction(e);\n }\n });\n };\n TreeView.prototype.dragAction = function (e, virtualEle) {\n var dropRoot = closest(e.target, '.' + DROPPABLE);\n var dropWrap = closest(e.target, '.' + TEXTWRAP);\n var icon = select('div.' + ICON, virtualEle);\n removeClass([icon], [DROPIN, DROPNEXT, DROPOUT, NODROP]);\n this.removeVirtualEle();\n document.body.style.cursor = '';\n var classList = e.target.classList;\n if (this.fullRowSelect && !dropWrap && !isNOU(classList) && classList.contains(FULLROW)) {\n dropWrap = e.target.nextElementSibling;\n }\n if (dropRoot) {\n var dropLi = closest(e.target, '.' + LISTITEM);\n if (!dropRoot.classList.contains(ROOT) || (dropWrap &&\n (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi)))) {\n if (dropLi && e && (e.event.offsetY < 7)) {\n addClass([icon], DROPNEXT);\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (1) : (0);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else if (dropLi && e && (e.target.offsetHeight > 0 && e.event.offsetY > (e.target.offsetHeight - 10))) {\n addClass([icon], DROPNEXT);\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (2) : (1);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else {\n addClass([icon], DROPIN);\n }\n }\n else if (e.target.nodeName === 'LI' && (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi))) {\n addClass([icon], DROPNEXT);\n this.renderVirtualEle(e);\n }\n else if (e.target.classList.contains(SIBLING)) {\n addClass([icon], DROPNEXT);\n }\n else {\n addClass([icon], DROPOUT);\n }\n }\n else {\n addClass([icon], NODROP);\n document.body.style.cursor = 'not-allowed';\n }\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = this.getDragEvent(e.event, this, e.target, e.target, null, virtualEle, level);\n if (eventArgs.dropIndicator) {\n removeClass([icon], eventArgs.dropIndicator);\n }\n this.trigger('nodeDragging', eventArgs);\n if (eventArgs.dropIndicator) {\n addClass([icon], eventArgs.dropIndicator);\n }\n };\n TreeView.prototype.dropAction = function (e) {\n var offsetY = e.event.offsetY;\n var dropTarget = e.target;\n var dragObj;\n var level;\n var drop = false;\n var dragInstance = e.dragData.draggable;\n for (var i = 0; i < dragInstance.ej2_instances.length; i++) {\n if (dragInstance.ej2_instances[i] instanceof TreeView_1) {\n dragObj = dragInstance.ej2_instances[i];\n break;\n }\n }\n if (dragObj && dragObj.dragTarget) {\n var dragTarget = dragObj.dragTarget;\n var dragLi = (closest(dragTarget, '.' + LISTITEM));\n var dropLi = (closest(dropTarget, '.' + LISTITEM));\n if (dropLi == null && dropTarget.classList.contains(ROOT)) {\n dropLi = dropTarget.firstElementChild;\n }\n detach(e.droppedElement);\n document.body.style.cursor = '';\n if (!dropLi || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n return;\n }\n if (dragObj.allowMultiSelection && dragLi.classList.contains(ACTIVE)) {\n var sNodes = selectAll('.' + ACTIVE, dragObj.element);\n for (var i = 0; i < sNodes.length; i++) {\n if (dropLi.isSameNode(sNodes[i]) || this.isDescendant(sNodes[i], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[i], dropLi, e, dragObj, offsetY);\n }\n }\n else {\n this.appendNode(dropTarget, dragLi, dropLi, e, dragObj, offsetY);\n }\n level = parseInt(dragLi.getAttribute('aria-level'), 10);\n drop = true;\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target, e.dragData.draggedElement, null, level, drop));\n this.triggerEvent();\n };\n TreeView.prototype.appendNode = function (dropTarget, dragLi, dropLi, e, dragObj, offsetY) {\n if (!dragLi.classList.contains('e-disable') && !dropLi.classList.contains('e-disable')) {\n if (dropTarget.nodeName === 'LI') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else if (dropTarget.firstElementChild && dropTarget.classList.contains(ROOT)) {\n if (dropTarget.firstElementChild.nodeName === 'UL') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY);\n }\n }\n };\n TreeView.prototype.dropAsSiblingNode = function (dragLi, dropLi, e, dragObj) {\n var dropUl = closest(dropLi, '.' + PARENTITEM);\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var pre;\n if (e.target.offsetHeight > 0 && e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n dropUl.insertBefore(dragLi, pre ? e.target : e.target.nextElementSibling);\n this.moveData(dragLi, dropLi, dropUl, pre, dragObj);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.dropAsChildNode = function (dragLi, dropLi, dragObj, index, e, pos) {\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var dropParentUl = closest(dropLi, '.' + PARENTITEM);\n if (e && (pos < 7)) {\n dropParentUl.insertBefore(dragLi, dropLi);\n this.moveData(dragLi, dropLi, dropParentUl, true, dragObj);\n }\n else if (e && (e.target.offsetHeight > 0 && pos > (e.target.offsetHeight - 10))) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n this.moveData(dragLi, dropLi, dropParentUl, false, dragObj);\n }\n else {\n var dropUl = this.expandParent(dropLi);\n var childLi = dropUl.childNodes[index];\n dropUl.insertBefore(dragLi, childLi);\n this.moveData(dragLi, childLi, dropUl, true, dragObj);\n }\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.moveData = function (dragLi, dropLi, dropUl, pre, dragObj) {\n var dropParentLi = closest(dropUl, '.' + LISTITEM);\n var id = this.getId(dragLi);\n var removedData = dragObj.updateChildField(dragObj.treeData, dragObj.fields, id, null, null, true);\n var refId = this.getId(dropLi);\n var index = this.getDataPos(this.treeData, this.fields, refId);\n var parentId = this.getId(dropParentLi);\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', true);\n var pos = isNOU(index) ? this.treeData.length : (pre ? index : index + 1);\n if (isNOU(parentId) && !this.hasPid) {\n delete removedData[0][this.fields.parentID];\n }\n else {\n var currPid = this.isNumberTypeId ? parseFloat(parentId) : parentId;\n setValue(this.fields.parentID, currPid, removedData[0]);\n }\n this.treeData.splice(pos, 0, removedData[0]);\n if (dragObj.element.id !== this.element.id) {\n var childData = dragObj.removeChildNodes(id);\n pos++;\n for (var i = 0, len = childData.length; i < len; i++) {\n this.treeData.splice(pos, 0, childData[i]);\n pos++;\n }\n dragObj.groupedData = dragObj.getGroupedData(dragObj.treeData, dragObj.fields.parentID);\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n else {\n this.addChildData(this.treeData, this.fields, parentId, removedData, pre ? index : index + 1);\n }\n };\n TreeView.prototype.expandParent = function (dropLi) {\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE) && this.preventExpand !== true) {\n this.expandAction(dropLi, dropIcon, null);\n }\n var dropUl = select('.' + PARENTITEM, dropLi);\n if (this.preventExpand === true && !dropUl && dropIcon) {\n this.renderChildNodes(dropLi);\n }\n dropUl = select('.' + PARENTITEM, dropLi);\n if (isNOU(dropUl) && this.preventExpand === true) {\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n icon.classList.add('e-icon-expandable');\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n removeClass([icon], COLLAPSIBLE);\n dropLi.setAttribute('aria-expanded', 'false');\n dropUl.style.display = 'none';\n }\n if (isNOU(dropUl)) {\n this.trigger('nodeExpanding', this.getExpandEvent(dropLi, null));\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n removeClass([icon], EXPANDABLE);\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n this.addExpand(dropLi);\n this.trigger('nodeExpanded', this.getExpandEvent(dropLi, null));\n }\n return dropUl;\n };\n TreeView.prototype.updateElement = function (dragParentUl, dragParentLi) {\n if (dragParentLi && dragParentUl.childElementCount === 0) {\n var dragIcon = select('div.' + ICON, dragParentLi);\n detach(dragParentUl);\n detach(dragIcon);\n var parentId = this.getId(dragParentLi);\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', null);\n this.removeExpand(dragParentLi, true);\n }\n };\n TreeView.prototype.updateAriaLevel = function (dragLi) {\n var level = this.parents(dragLi, '.' + PARENTITEM).length;\n dragLi.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, dragLi), level + 1);\n };\n TreeView.prototype.updateChildAriaLevel = function (element, level) {\n if (!isNOU(element)) {\n var cNodes = element.childNodes;\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n liEle.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, liEle), level + 1);\n }\n }\n };\n TreeView.prototype.renderVirtualEle = function (e) {\n var pre;\n if (e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (pre ? 1 : 2) : (pre ? 0 : 1);\n e.target.insertBefore(virEle, e.target.children[index]);\n };\n TreeView.prototype.removeVirtualEle = function () {\n var sibEle = select('.' + SIBLING);\n if (sibEle) {\n detach(sibEle);\n }\n };\n TreeView.prototype.destroyDrag = function () {\n if (this.dragObj && this.dropObj) {\n this.dragObj.destroy();\n this.dropObj.destroy();\n }\n };\n TreeView.prototype.getDragEvent = function (event, obj, dropTarget, target, dragNode, cloneEle, level, drop) {\n var dropLi = dropTarget ? closest(dropTarget, '.' + LISTITEM) : null;\n var dropData = dropLi ? this.getNodeData(dropLi) : null;\n var draggedNode = obj ? obj.dragLi : dragNode;\n var draggedNodeData = obj ? obj.dragData : null;\n var newParent = dropTarget ? this.parents(dropTarget, '.' + LISTITEM) : null;\n var dragLiParent = obj.dragLi.parentElement;\n var dragParent = obj.dragLi ? closest(dragLiParent, '.' + LISTITEM) : null;\n var targetParent = null;\n var indexValue = null;\n var iconCss = [DROPNEXT, DROPIN, DROPOUT, NODROP];\n var iconClass = null;\n var node = (drop === true) ? draggedNode : dropLi;\n var index = node ? closest(node, '.e-list-parent') : null;\n var i = 0;\n dragParent = (obj.dragLi && dragParent === null) ? closest(dragLiParent, '.' + ROOT) : dragParent;\n dragParent = (drop === true) ? this.dragParent : dragParent;\n if (cloneEle) {\n while (i < 4) {\n if (select('.' + ICON, cloneEle).classList.contains(iconCss[i])) {\n iconClass = iconCss[i];\n break;\n }\n i++;\n }\n }\n if (index) {\n var dropTar = 0;\n for (i = 0; i < index.childElementCount; i++) {\n dropTar = (drop !== true && index.children[i] === draggedNode && dropLi !== draggedNode) ? ++dropTar : dropTar;\n if ((drop !== true && index.children[i].classList.contains('e-hover'))) {\n indexValue = (event.offsetY >= 23) ? i + 1 : i;\n break;\n }\n else if (index.children[i] === node) {\n indexValue = (event.offsetY >= 23) ? i : i;\n break;\n }\n }\n indexValue = (dropTar !== 0) ? --indexValue : indexValue;\n }\n if (dropTarget) {\n if (newParent.length === 0) {\n targetParent = null;\n }\n else if (dropTarget.classList.contains(LISTITEM)) {\n targetParent = newParent[0];\n }\n else {\n targetParent = newParent[1];\n }\n }\n if (dropLi === draggedNode) {\n targetParent = dropLi;\n }\n if (dropTarget && target.offsetHeight <= 33 && event.offsetY < target.offsetHeight - 10 && event.offsetY > 6) {\n targetParent = dropLi;\n if (drop !== true) {\n level = ++level;\n var parent_1 = targetParent ? select('.e-list-parent', targetParent) : null;\n indexValue = (parent_1) ? parent_1.children.length : 0;\n if (!(this.fields.dataSource instanceof DataManager) && parent_1 === null && targetParent) {\n var parent_2 = targetParent.hasAttribute('data-uid') ?\n this.getChildNodes(this.fields.dataSource, targetParent.getAttribute('data-uid').toString()) : null;\n indexValue = (parent_2) ? parent_2.length : 0;\n }\n }\n }\n return {\n cancel: false,\n clonedNode: cloneEle,\n event: event,\n draggedNode: draggedNode,\n draggedNodeData: draggedNodeData,\n droppedNode: dropLi,\n droppedNodeData: dropData,\n dropIndex: indexValue,\n dropLevel: level,\n draggedParentNode: dragParent,\n dropTarget: targetParent,\n dropIndicator: iconClass,\n target: target,\n };\n };\n TreeView.prototype.addFullRow = function (toAdd) {\n var len = this.liList.length;\n if (toAdd) {\n for (var i = 0; i < len; i++) {\n this.createFullRow(this.liList[i]);\n }\n }\n else {\n for (var i = 0; i < len; i++) {\n var rowDiv = select('.' + FULLROW, this.liList[i]);\n detach(rowDiv);\n }\n }\n };\n TreeView.prototype.createFullRow = function (item) {\n var rowDiv = this.createElement('div', { className: FULLROW });\n item.insertBefore(rowDiv, item.childNodes[0]);\n };\n TreeView.prototype.addMultiSelect = function (toAdd) {\n if (toAdd) {\n var liEles = selectAll('.' + LISTITEM + ':not([aria-selected=\"true\"])', this.element);\n for (var _i = 0, liEles_1 = liEles; _i < liEles_1.length; _i++) {\n var ele = liEles_1[_i];\n ele.setAttribute('aria-selected', 'false');\n }\n }\n else {\n var liEles = selectAll('.' + LISTITEM + '[aria-selected=\"false\"]', this.element);\n for (var _a = 0, liEles_2 = liEles; _a < liEles_2.length; _a++) {\n var ele = liEles_2[_a];\n ele.removeAttribute('aria-selected');\n }\n }\n };\n TreeView.prototype.collapseByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var cNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n var icon = select('.' + COLLAPSIBLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.collapseNode(liEle, icon, null);\n }\n this.collapseByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.collapseAllNodes = function (excludeHiddenNodes) {\n var cIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + COLLAPSIBLE, this.element));\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.collapseNode(liEle, icon, null);\n }\n };\n TreeView.prototype.expandByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var eNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n var liEle = eNodes[i];\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.expandAction(liEle, icon, null);\n }\n this.expandByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.expandAllNodes = function (excludeHiddenNodes) {\n var eIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + EXPANDABLE, this.element));\n for (var i = 0, len = eIcons.length; i < len; i++) {\n var icon = eIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.expandAction(liEle, icon, null, true);\n }\n };\n TreeView.prototype.getVisibleNodes = function (excludeHiddenNodes, nodes) {\n var vNodes = Array.prototype.slice.call(nodes);\n if (excludeHiddenNodes) {\n for (var i = 0; i < vNodes.length; i++) {\n if (!isVisible(vNodes[i])) {\n vNodes.splice(i, 1);\n i--;\n }\n }\n }\n return vNodes;\n };\n TreeView.prototype.removeNode = function (node) {\n var dragParentUl = closest(node, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n detach(node);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateInstance();\n this.removeData(node);\n };\n TreeView.prototype.updateInstance = function () {\n this.updateList();\n this.updateSelectedNodes();\n this.updateExpandedNodes();\n };\n TreeView.prototype.updateList = function () {\n this.liList = Array.prototype.slice.call(selectAll('.' + LISTITEM, this.element));\n };\n TreeView.prototype.updateSelectedNodes = function () {\n this.setProperties({ selectedNodes: [] }, true);\n var sNodes = selectAll('.' + ACTIVE, this.element);\n this.selectGivenNodes(sNodes);\n };\n TreeView.prototype.updateExpandedNodes = function () {\n this.setProperties({ expandedNodes: [] }, true);\n var eNodes = selectAll('[aria-expanded=\"true\"]', this.element);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n this.addExpand(eNodes[i]);\n }\n };\n TreeView.prototype.removeData = function (node) {\n if (this.dataType === 1) {\n var dm = new DataManager(this.treeData);\n var id = this.getId(node);\n var data = {};\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = newId;\n dm.remove(this.fields.id, data);\n this.removeChildNodes(id);\n }\n else {\n var id = this.getId(node);\n this.updateChildField(this.treeData, this.fields, id, null, null, true);\n }\n };\n TreeView.prototype.removeChildNodes = function (parentId) {\n var cNodes = this.getChildGroup(this.groupedData, parentId, false);\n var childData = [];\n if (cNodes) {\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var dm = new DataManager(this.treeData);\n var id = getValue(this.fields.id, cNodes[i]).toString();\n var data = {};\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = currId;\n var nodeData = dm.remove(this.fields.id, data);\n childData.push(nodeData[0]);\n this.removeChildNodes(id);\n }\n }\n return childData;\n };\n TreeView.prototype.doGivenAction = function (nodes, selector, toExpand) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var icon = select('.' + selector, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n toExpand ? this.expandAction(liEle, icon, null) : this.collapseNode(liEle, icon, null);\n }\n }\n };\n TreeView.prototype.addGivenNodes = function (nodes, dropLi, index, isRemote, dropEle) {\n var sNodes = this.getSortedData(nodes);\n var level = dropLi ? parseFloat(dropLi.getAttribute('aria-level')) + 1 : 1;\n if (isRemote) {\n this.updateMapper(level);\n }\n var li = ListBase.createListItemFromJson(this.createElement, sNodes, this.listBaseOption, level);\n var dropUl;\n if (!dropEle) {\n dropUl = dropLi ? this.expandParent(dropLi) : select('.' + PARENTITEM, this.element);\n }\n else {\n dropUl = dropEle;\n }\n var refNode = dropUl.childNodes[index];\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[i], refNode);\n }\n var id = this.getId(dropLi);\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, id, 'hasChildren', true);\n var refId = this.getId(refNode);\n var pos = isNOU(refId) ? this.treeData.length : this.getDataPos(this.treeData, this.fields, refId);\n for (var j = 0; j < nodes.length; j++) {\n if (!isNOU(id)) {\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n setValue(this.fields.parentID, currId, nodes[j]);\n }\n this.treeData.splice(pos, 0, nodes[j]);\n pos++;\n }\n }\n else {\n this.addChildData(this.treeData, this.fields, id, nodes, index);\n }\n this.finalizeNode(dropUl);\n };\n TreeView.prototype.updateMapper = function (level) {\n var mapper = (level === 1) ? this.fields : this.getChildFields(this.fields, level - 1, 1);\n this.updateListProp(mapper);\n };\n TreeView.prototype.updateListProp = function (mapper) {\n var prop = this.getActualProperties(mapper);\n this.listBaseOption.fields = prop;\n this.listBaseOption.fields.url = prop.hasOwnProperty('navigateUrl') ? prop.navigateUrl : 'navigateUrl';\n };\n TreeView.prototype.getDataPos = function (obj, mapper, id) {\n var pos = null;\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n return i;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var data = getValue(mapper.child, obj[i]);\n pos = this.getDataPos(data, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var items = getValue('child', obj[i]);\n pos = this.getDataPos(items, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n }\n return pos;\n };\n TreeView.prototype.addChildData = function (obj, mapper, id, data, index) {\n var updated;\n if (isNOU(id)) {\n index = isNOU(index) ? obj.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n obj.splice(index, 0, data[k]);\n index++;\n }\n return updated;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n if ((typeof mapper.child === 'string' && obj[i].hasOwnProperty(mapper.child)) ||\n (this.fields.dataSource instanceof DataManager && obj[i].hasOwnProperty('child'))) {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n var childData = getValue(key, obj[i]);\n index = isNOU(index) ? childData.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n childData.splice(index, 0, data[k]);\n index++;\n }\n }\n else {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n obj[i][key] = data;\n }\n return true;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childObj = getValue(mapper.child, obj[i]);\n updated = this.addChildData(childObj, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var childData = getValue('child', obj[i]);\n updated = this.addChildData(childData, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n }\n return updated;\n };\n TreeView.prototype.doDisableAction = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n 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.updatePersistProp = function () {\n this.removeField(this.treeData, this.fields, ['selected', 'expanded']);\n var sleNodes = this.selectedNodes;\n for (var l = 0, slelen = sleNodes.length; l < slelen; l++) {\n this.updateField(this.treeData, this.fields, sleNodes[l], 'selected', true);\n }\n var enodes = this.expandedNodes;\n for (var k = 0, nodelen = enodes.length; k < nodelen; k++) {\n this.updateField(this.treeData, this.fields, enodes[k], 'expanded', true);\n }\n if (this.showCheckBox) {\n this.removeField(this.treeData, this.fields, ['isChecked']);\n var cnodes = this.checkedNodes;\n for (var m = 0, nodelen = cnodes.length; m < nodelen; m++) {\n this.updateField(this.treeData, this.fields, cnodes[m], 'isChecked', true);\n }\n }\n };\n TreeView.prototype.removeField = function (obj, mapper, names) {\n if (isNOU(obj) || isNOU(mapper)) {\n return;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n for (var j = 0; j < names.length; j++) {\n var field = this.getMapperProp(mapper, names[j]);\n if (!isNOU(obj[i][field])) {\n delete obj[i][field];\n }\n }\n if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n this.removeField(getValue(mapper.child, obj[i]), this.getChildMapper(mapper), names);\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n this.removeField(getValue('child', obj[i]), this.getChildMapper(mapper), names);\n }\n }\n };\n TreeView.prototype.getMapperProp = function (mapper, fieldName) {\n switch (fieldName) {\n case 'selected':\n return !isNOU(mapper.selected) ? mapper.selected : 'selected';\n case 'expanded':\n return !isNOU(mapper.expanded) ? mapper.expanded : 'expanded';\n case 'isChecked':\n return !isNOU(mapper.isChecked) ? mapper.isChecked : 'isChecked';\n case 'hasChildren':\n return !isNOU(mapper.hasChildren) ? mapper.hasChildren : 'hasChildren';\n default:\n return fieldName;\n }\n };\n TreeView.prototype.updateField = function (obj, mapper, id, key, value) {\n var childNodes;\n if (isNOU(id)) {\n return;\n }\n else if (this.dataType === 1) {\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.id, 'equal', newId, false));\n setValue(this.getMapperProp(mapper, key), value, resultData[0]);\n }\n else {\n this.updateChildField(obj, mapper, id, key, value);\n }\n };\n TreeView.prototype.updateChildField = function (obj, mapper, id, key, value, remove) {\n var removedData;\n if (isNOU(obj)) {\n return removedData;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n if (remove) {\n removedData = obj.splice(i, 1);\n }\n else {\n setValue(this.getMapperProp(mapper, key), value, obj[i]);\n removedData = [];\n }\n return removedData;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n removedData = this.updateChildField(childData, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var childItems = getValue('child', obj[i]);\n removedData = this.updateChildField(childItems, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n }\n return removedData;\n };\n TreeView.prototype.triggerEvent = function () {\n var eventArgs = { data: this.treeData };\n this.trigger('dataSourceChanged', eventArgs);\n };\n TreeView.prototype.wireInputEvents = function (inpEle) {\n EventHandler.add(inpEle, 'blur', this.inputFocusOut, this);\n };\n TreeView.prototype.wireEditingEvents = function (toBind) {\n if (toBind) {\n var proxy_2 = this;\n this.touchEditObj = new Touch(this.element, {\n tap: function (e) {\n if (e.tapCount === 2) {\n e.originalEvent.preventDefault();\n proxy_2.editingHandler(e.originalEvent);\n }\n }\n });\n }\n else {\n if (this.touchEditObj) {\n this.touchEditObj.destroy();\n }\n }\n };\n TreeView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n var proxy_3 = this;\n this.touchClickObj = new Touch(this.element, {\n tap: function (e) {\n e.originalEvent.preventDefault();\n proxy_3.clickHandler(e);\n }\n });\n }\n else {\n if (this.touchClickObj) {\n this.touchClickObj.destroy();\n }\n }\n };\n TreeView.prototype.wireExpandOnEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var proxy_4 = this;\n this.touchExpandObj = new Touch(this.element, {\n tap: function (e) {\n if (_this.expandOnType === 'Click' || (_this.expandOnType === 'DblClick' && e.tapCount === 2)) {\n proxy_4.expandHandler(e);\n }\n }\n });\n }\n else {\n if (this.touchExpandObj) {\n this.touchExpandObj.destroy();\n }\n }\n };\n TreeView.prototype.mouseDownHandler = function (e) {\n this.mouseDownStatus = true;\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (e.ctrlKey && this.allowMultiSelection) {\n EventHandler.add(this.element, 'contextmenu', this.preventContextMenu, this);\n }\n };\n ;\n TreeView.prototype.preventContextMenu = function (e) {\n e.preventDefault();\n };\n TreeView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'mousedown', this.mouseDownHandler, this);\n this.wireClickEvent(true);\n if (this.expandOnType !== 'None') {\n this.wireExpandOnEvent(true);\n }\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.element, 'mouseout', this.onMouseLeave, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n };\n TreeView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'mousedown', this.mouseDownHandler);\n this.wireClickEvent(false);\n this.wireExpandOnEvent(false);\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.element, 'mouseout', this.onMouseLeave);\n this.keyboardModule.destroy();\n };\n TreeView.prototype.parents = function (element, selector) {\n var matched = [];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, selector)) {\n matched.push(el);\n }\n el = el.parentNode;\n }\n return matched;\n };\n TreeView.prototype.isDescendant = function (parent, child) {\n var node = child.parentNode;\n while (!isNOU(node)) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n TreeView.prototype.showSpinner = function (element) {\n addClass([element], LOAD);\n createSpinner({\n target: element,\n width: Browser.isDevice ? 16 : 14\n }, this.createElement);\n showSpinner(element);\n };\n TreeView.prototype.hideSpinner = function (element) {\n hideSpinner(element);\n element.innerHTML = '';\n removeClass([element], LOAD);\n };\n TreeView.prototype.setCheckedNodes = function (nodes) {\n nodes = JSON.parse(JSON.stringify(nodes));\n this.uncheckAll(this.checkedNodes);\n if (nodes.length > 0) {\n this.checkAll(nodes);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {TreeView} newProp\n * @param {TreeView} oldProp\n * @returns void\n * @private\n */\n TreeView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.setDragAndDrop(this.allowDragAndDrop);\n break;\n case 'allowEditing':\n this.wireEditingEvents(this.allowEditing);\n break;\n case 'allowMultiSelection':\n if (this.selectedNodes.length > 1) {\n var sNode = this.getElement(this.selectedNodes[0]);\n this.isLoaded = false;\n this.removeSelectAll();\n this.selectNode(sNode, null);\n this.isLoaded = true;\n }\n this.setMultiSelect(this.allowMultiSelection);\n this.addMultiSelect(this.allowMultiSelection);\n break;\n case 'checkedNodes':\n if (this.showCheckBox) {\n this.checkedNodes = oldProp.checkedNodes;\n this.setCheckedNodes(newProp.checkedNodes);\n }\n break;\n case 'cssClass':\n this.setCssClass(oldProp.cssClass, newProp.cssClass);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'expandedNodes':\n this.isAnimate = false;\n this.setProperties({ expandedNodes: [] }, true);\n this.collapseAll();\n this.isInitalExpand = true;\n this.setProperties({ expandedNodes: isNOU(newProp.expandedNodes) ? [] : newProp.expandedNodes }, true);\n this.doExpandAction();\n this.isInitalExpand = false;\n this.isAnimate = true;\n break;\n case 'expandOn':\n this.wireExpandOnEvent(false);\n this.setExpandOnType();\n if (this.expandOnType !== 'None') {\n this.wireExpandOnEvent(true);\n }\n break;\n case 'fields':\n this.isAnimate = false;\n this.initialRender = true;\n this.updateListProp(this.fields);\n this.reRenderNodes();\n this.initialRender = false;\n this.isAnimate = true;\n break;\n case 'fullRowSelect':\n this.setFullRow(this.fullRowSelect);\n this.addFullRow(this.fullRowSelect);\n break;\n case 'nodeTemplate':\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n this.reRenderNodes();\n break;\n case 'selectedNodes':\n this.removeSelectAll();\n this.setProperties({ selectedNodes: newProp.selectedNodes }, true);\n this.doSelectionAction();\n break;\n case 'showCheckBox':\n this.reRenderNodes();\n break;\n case 'sortOrder':\n this.reRenderNodes();\n break;\n }\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n */\n TreeView.prototype.destroy = function () {\n this.element.removeAttribute('aria-activedescendant');\n this.element.removeAttribute('tabindex');\n this.unWireEvents();\n this.wireEditingEvents(false);\n this.rippleFn();\n this.rippleIconFn();\n this.setCssClass(this.cssClass, null);\n this.setDragAndDrop(false);\n this.setFullRow(false);\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n /**\n * Adds the collection of TreeView nodes based on target and index position. If target node is not specified,\n * then the nodes are added as children of the given parentID or in the root level of TreeView.\n * @param { { [key: string]: Object }[] } nodes - Specifies the array of JSON data that has to be added.\n * @param { string | Element } target - Specifies ID of TreeView node/TreeView node as target element.\n * @param { number } index - Specifies the index to place the newly added nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n */\n TreeView.prototype.addNodes = function (nodes, target, index, preventTargetExpand) {\n if (isNOU(nodes)) {\n return;\n }\n nodes = JSON.parse(JSON.stringify(nodes));\n var dropLi = this.getElement(target);\n this.preventExpand = preventTargetExpand;\n if (this.fields.dataSource instanceof DataManager) {\n var dropUl_1;\n var icon = dropLi ? dropLi.querySelector('.' + ICON) : null;\n var proxy_5 = this;\n if (dropLi && icon && icon.classList.contains(EXPANDABLE) &&\n dropLi.querySelector('.' + PARENTITEM) === null) {\n proxy_5.renderChildNodes(dropLi, null, function () {\n dropUl_1 = dropLi.querySelector('.' + PARENTITEM);\n proxy_5.addGivenNodes(nodes, dropLi, index, true, dropUl_1);\n proxy_5.triggerEvent();\n });\n }\n else {\n this.addGivenNodes(nodes, dropLi, index, true);\n this.triggerEvent();\n }\n }\n else if (this.dataType === 2) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n if (dropLi) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n nodes = this.getSortedData(nodes);\n for (var i = 0; i < nodes.length; i++) {\n var pid = getValue(this.fields.parentID, nodes[i]);\n dropLi = pid ? this.getElement(pid.toString()) : pid;\n this.addGivenNodes([nodes[i]], dropLi, index);\n }\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n this.triggerEvent();\n }\n };\n /**\n * Instead of clicking on the TreeView node for editing, we can enable it by using\n * `beginEdit` property. On passing the node ID or element through this property, the edit textBox\n * will be created for the particular node thus allowing us to edit it.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.beginEdit = function (node) {\n var ele = this.getElement(node);\n if (!isNOU(ele)) {\n this.createTextbox(ele, null);\n }\n };\n /**\n * Checks all the unchecked nodes. You can also check specific nodes by passing array of unchecked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.checkAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, true);\n }\n };\n /**\n * Collapses all the expanded TreeView nodes. You can collapse specific nodes by passing array of nodes as argument to this method.\n * You can also collapse all the nodes excluding the hidden nodes by setting **excludeHiddenNodes** to true. If you want to collapse\n * a specific level of nodes, set **level** as argument to collapseAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/ array of TreeView node.\n * @param {number} level - TreeView nodes will collapse up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes of TreeView when collapsing all nodes.\n */\n TreeView.prototype.collapseAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, COLLAPSIBLE, false);\n }\n else {\n if (level > 0) {\n this.collapseByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.collapseAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Disables the collection of nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.disableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doDisableAction(nodes);\n }\n };\n /**\n * Enables the collection of disabled nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.enableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doEnableAction(nodes);\n }\n };\n /**\n * Ensures visibility of the TreeView node by using node ID or node element.\n * When many TreeView nodes are present and we need to find a particular node, `ensureVisible` property\n * helps bring the node to visibility by expanding the TreeView and scrolling to the specific node.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView nodes.\n */\n TreeView.prototype.ensureVisible = function (node) {\n var liEle = this.getElement(node);\n if (isNOU(liEle)) {\n return;\n }\n var parents = this.parents(liEle, '.' + LISTITEM);\n this.expandAll(parents);\n setTimeout(function () { liEle.scrollIntoView(true); }, 450);\n };\n /**\n * Expands all the collapsed TreeView nodes. You can expand the specific nodes by passing the array of collapsed nodes\n * as argument to this method. You can also expand all the collapsed nodes by excluding the hidden nodes by setting\n * **excludeHiddenNodes** to true to this method. To expand a specific level of nodes, set **level** as argument to expandAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n * @param {number} level - TreeView nodes will expand up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes when expanding all nodes.\n */\n TreeView.prototype.expandAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, EXPANDABLE, true);\n }\n else {\n if (level > 0) {\n this.expandByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.expandAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Gets all the checked nodes including child, whether it is loaded or not.\n */\n TreeView.prototype.getAllCheckedNodes = function () {\n var checkNodes = this.checkedNodes;\n var newCheck = [];\n var i = 0;\n var id = this.fields.id;\n for (i; i < this.treeData.length; i++) {\n //Checks if isChecked is enabled while node is not loaded in DOM\n var checked = null;\n var childNode = null;\n var isLoaded = this.element.querySelector('[data-uid=\"' + this.treeData[i][id].toString() + '\"]');\n if (isLoaded && isLoaded.querySelector('.e-list-item') === null) {\n //Checks if isChecked is enabled for parent\n if (this.treeData[i][this.fields.isChecked] === true\n && this.checkedElement.indexOf(this.treeData[i][id].toString()) === -1) {\n newCheck.push(this.treeData[i][id].toString());\n checked = 2;\n }\n //Checks for child nodes with isChecked enabled\n if (checked !== 2) {\n checked = 1;\n }\n childNode = this.getChildNodes(this.treeData, this.treeData[i][id].toString());\n (childNode !== null) ? this.allCheckNode(childNode, newCheck, checked) : childNode = null;\n }\n }\n i = 0;\n //Gets checked nodes based on UI interaction\n while (i < checkNodes.length) {\n if (newCheck.indexOf(checkNodes[i]) !== -1) {\n i++;\n continue;\n }\n newCheck.push(checkNodes[i]);\n //Gets all child which is not loaded while parent is checked\n var parentNode = this.element.querySelector('[data-uid=\"' + checkNodes[i] + '\"]');\n if (parentNode && parentNode.querySelector('.e-list-item') === null) {\n var child = this.getChildNodes(this.treeData, checkNodes[i].toString());\n (child) ? this.allCheckNode(child, newCheck) : child = null;\n }\n i++;\n }\n return newCheck;\n };\n /**\n * Get the node's data such as id, text, parentID, selected, isChecked, and expanded by passing the node element or it's ID.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.getNode = function (node) {\n var ele = this.getElement(node);\n return this.getNodeData(ele, true);\n };\n /**\n * To get the updated data source of TreeView after performing some operation like drag and drop, node editing,\n * node selecting/unSelecting, node expanding/collapsing, node checking/unChecking, adding and removing node.\n * * If you pass the ID of TreeView node as arguments for this method then it will return the updated data source\n * of the corresponding node otherwise it will return the entire updated data source of TreeView.\n * * The updated data source also contains custom attributes if you specified in data source.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.getTreeData = function (node) {\n var id = this.getId(node);\n this.updatePersistProp();\n if (isNOU(id)) {\n return this.treeData;\n }\n else {\n var data = this.getNodeObject(id);\n return isNOU(data) ? [] : [data];\n }\n };\n /**\n * Moves the collection of nodes within the same TreeView based on target or its index position.\n * @param {string[] | Element[]} sourceNodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {number} index - Specifies the index to place the moved nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n */\n TreeView.prototype.moveNodes = function (sourceNodes, target, index, preventTargetExpand) {\n var dropLi = this.getElement(target);\n if (isNOU(dropLi)) {\n return;\n }\n for (var i = 0; i < sourceNodes.length; i++) {\n var dragLi = this.getElement(sourceNodes[i]);\n if (isNOU(dragLi) || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n continue;\n }\n this.preventExpand = preventTargetExpand;\n this.dropAsChildNode(dragLi, dropLi, this, index);\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n this.triggerEvent();\n };\n /**\n * Removes the collection of TreeView nodes by passing the array of node details as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.removeNodes = function (nodes) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n this.removeNode(liEle);\n }\n this.triggerEvent();\n }\n };\n /**\n * Replaces the text of the TreeView node with the given text.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {string} newText - Specifies the new text of TreeView node.\n */\n TreeView.prototype.updateNode = function (target, newText) {\n if (isNOU(target) || isNOU(newText) || !this.allowEditing) {\n return;\n }\n var liEle = this.getElement(target);\n if (isNOU(liEle)) {\n return;\n }\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var eventArgs = this.getEditEvent(liEle, null, null);\n this.trigger('nodeEditing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.appendNewText(liEle, txtEle, newText, false);\n };\n /**\n * Unchecks all the checked nodes. You can also uncheck the specific nodes by passing array of checked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.uncheckAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, false);\n }\n };\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Complex({}, NodeAnimationSettings)\n ], TreeView.prototype, \"animation\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"checkedNodes\", void 0);\n __decorate([\n Property('')\n ], TreeView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"expandedNodes\", void 0);\n __decorate([\n Property('Auto')\n ], TreeView.prototype, \"expandOn\", void 0);\n __decorate([\n Complex({}, FieldsSettings)\n ], TreeView.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"fullRowSelect\", void 0);\n __decorate([\n Property()\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, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"drawNode\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"keyPress\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecking\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeClicked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragging\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStart\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStop\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDropped\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEdited\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEditing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanded\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanding\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelected\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelecting\", void 0);\n TreeView = TreeView_1 = __decorate([\n NotifyPropertyChanges\n ], TreeView);\n return TreeView;\n var TreeView_1;\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, Touch } from '@syncfusion/ej2-base';\nvar CONTROL = 'e-control';\nvar ROOT = 'e-sidebar';\nvar DOCKER = 'e-dock';\nvar CLOSE = 'e-close';\nvar OPEN = 'e-open';\nvar TRASITION = 'e-transition';\nvar DEFAULTBACKDROP = 'e-sidebar-overlay';\nvar CONTEXTBACKDROP = 'e-backdrop';\nvar RTL = 'e-rtl';\nvar RIGHT = 'e-right';\nvar LEFT = 'e-left';\nvar OVER = 'e-over';\nvar PUSH = 'e-push';\nvar SLIDE = 'e-slide';\nvar VISIBILITY = 'e-visibility';\nvar MAINCONTENTANIMATION = 'e-content-animation';\nvar DISABLEANIMATION = 'e-disable-animation';\nvar CONTEXT = 'e-sidebar-context';\nvar SIDEBARABSOLUTE = 'e-sidebar-absolute';\n/**\n * Sidebar is an expandable or collapsible\n * component that typically act as a side container to place the primary or secondary content alongside of the main content.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Sidebar = /** @class */ (function (_super) {\n __extends(Sidebar, _super);\n function Sidebar(options, element) {\n return _super.call(this, options, element) || this;\n }\n Sidebar.prototype.preRender = function () {\n this.setWidth();\n };\n Sidebar.prototype.render = function () {\n this.initialize();\n this.wireEvents();\n };\n Sidebar.prototype.initialize = function () {\n this.setTarget();\n this.addClass();\n this.setZindex();\n if (this.enableDock) {\n this.setDock();\n }\n if (this.isOpen) {\n this.show();\n }\n else {\n this.setMediaQuery();\n }\n this.setType(this.type);\n this.setCloseOnDocumentClick();\n this.setEnableRTL();\n };\n Sidebar.prototype.setEnableRTL = function () {\n this.enableRtl ? (addClass([this.element], RTL)) :\n (removeClass([this.element], RTL));\n };\n Sidebar.prototype.setTarget = function () {\n if (typeof (this.target) === 'string') {\n this.setProperties({ target: document.querySelector(this.target) }, true);\n }\n if (this.target) {\n this.target.insertBefore(this.element, this.target.children[0]);\n addClass([this.element], SIDEBARABSOLUTE);\n addClass([this.target], CONTEXT);\n }\n };\n Sidebar.prototype.setCloseOnDocumentClick = function () {\n if (this.closeOnDocumentClick) {\n EventHandler.add(document, 'mousedown touchstart', this.documentclickHandler, this);\n }\n else {\n EventHandler.remove(document, 'mousedown touchstart', this.documentclickHandler);\n }\n };\n Sidebar.prototype.setWidth = function () {\n if (this.enableDock && this.position === 'Left') {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n else if (this.enableDock && this.position === 'Right') {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n else if (!this.enableDock) {\n setStyle(this.element, { 'width': this.setDimension(this.width) });\n }\n };\n Sidebar.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n Sidebar.prototype.setZindex = function () {\n setStyle(this.element, { 'z-index': '' + this.zIndex });\n };\n Sidebar.prototype.addClass = function () {\n var classELement = document.querySelector('.e-main-content');\n if (!isNullOrUndefined((classELement ||\n this.element.nextElementSibling))) {\n addClass([classELement || this.element.nextElementSibling], [MAINCONTENTANIMATION]);\n }\n if (!this.enableDock && this.type !== 'Auto') {\n addClass([this.element], [VISIBILITY]);\n }\n removeClass([this.element], [OPEN, CLOSE, RIGHT, LEFT, SLIDE, PUSH, OVER]);\n this.element.classList.add(ROOT);\n addClass([this.element], (this.position === 'Right') ? RIGHT : LEFT);\n if (this.type === 'Auto' && !Browser.isDevice && !this.enableDock) {\n addClass([this.element], OPEN);\n }\n else {\n addClass([this.element], CLOSE);\n }\n };\n Sidebar.prototype.destroyBackDrop = function () {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (this.target && this.showBackdrop && sibling) {\n removeClass([sibling], CONTEXTBACKDROP);\n }\n else if (this.showBackdrop && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n /**\n * Hide the Sidebar component, if it is in an open state.\n * @returns void\n */\n Sidebar.prototype.hide = function () {\n var closeArguments = { model: this, element: this.element, cancel: false };\n this.trigger('close', closeArguments);\n if (!closeArguments.cancel) {\n if (this.element.classList.contains(CLOSE)) {\n return;\n }\n if (this.element.classList.contains(OPEN)) {\n var changeArguments = { name: 'change', element: this.element };\n this.trigger('change', changeArguments);\n }\n addClass([this.element], CLOSE);\n removeClass([this.element], OPEN);\n this.enableDock ? setStyle(this.element, { 'width': formatUnit(this.dockSize) }) :\n setStyle(this.element, { 'width': formatUnit(this.width) });\n this.setDock();\n this.setType(this.type);\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (!this.enableDock && sibling) {\n sibling.style.transform = 'translateX(' + 0 + 'px)';\n this.position === 'Left' ? sibling.style.marginLeft = '0px' : sibling.style.marginRight = '0px';\n }\n this.destroyBackDrop();\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.remove('e-sidebar-overflow');\n }\n this.setProperties({ isOpen: false }, true);\n }\n };\n /**\n * Shows the Sidebar component, if it is in closed state.\n * @returns void\n */\n Sidebar.prototype.show = function () {\n var openArguments = { model: this, element: this.element, cancel: false };\n this.trigger('open', openArguments);\n if (!openArguments.cancel) {\n removeClass([this.element], VISIBILITY);\n if (this.element.classList.contains(OPEN)) {\n return;\n }\n if (this.element.classList.contains(CLOSE)) {\n var changeArguments = { name: 'change', element: this.element };\n this.trigger('change', changeArguments);\n }\n addClass([this.element], [OPEN, TRASITION]);\n setStyle(this.element, { 'transform': '' });\n removeClass([this.element], CLOSE);\n setStyle(this.element, { 'width': formatUnit(this.width) });\n var elementWidth = this.element.getBoundingClientRect().width;\n this.setType(this.type);\n this.createBackDrop();\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.add('e-sidebar-overflow');\n }\n this.setProperties({ isOpen: true }, true);\n }\n };\n Sidebar.prototype.setAnimation = function () {\n if (this.animate) {\n removeClass([this.element], DISABLEANIMATION);\n }\n else {\n addClass([this.element], DISABLEANIMATION);\n }\n };\n Sidebar.prototype.setDock = function () {\n if (this.enableDock && this.position === 'Left' && !this.getState()) {\n setStyle(this.element, { 'transform': 'translateX(' + -100 + '%) translateX(' + this.setDimension(this.dockSize) + ')' });\n }\n else if (this.enableDock && this.position === 'Right' && !this.getState()) {\n setStyle(this.element, { 'transform': 'translateX(' + 100 + '%) translateX(' + '-' + this.setDimension(this.dockSize) + ')' });\n }\n if (this.element.classList.contains(CLOSE) && this.enableDock) {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n };\n Sidebar.prototype.createBackDrop = function () {\n if (this.target && this.showBackdrop) {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n addClass([sibling], CONTEXTBACKDROP);\n }\n else if (this.showBackdrop && !this.modal && this.getState()) {\n this.modal = this.createElement('div');\n this.modal.className = DEFAULTBACKDROP;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n };\n Sidebar.prototype.getPersistData = function () {\n return this.addOnPersist(['type', 'position', 'isOpen']);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Sidebar.prototype.getModuleName = function () {\n return 'sidebar';\n };\n /**\n * Shows or hides the Sidebar based on the current state.\n * @returns void\n */\n Sidebar.prototype.toggle = function (e) {\n this.element.classList.contains(OPEN) ? this.hide() : this.show();\n };\n Sidebar.prototype.getState = function () {\n return this.element.classList.contains(OPEN) ? true : false;\n };\n Sidebar.prototype.setMediaQuery = function () {\n if (this.mediaQuery && this.mediaQuery.matches) {\n this.show();\n }\n else if (this.mediaQuery && this.getState()) {\n this.hide();\n }\n };\n Sidebar.prototype.resize = function (e) {\n if (this.type === 'Auto') {\n if (Browser.isDevice) {\n addClass([this.element], OVER);\n }\n else {\n addClass([this.element], PUSH);\n }\n }\n this.setMediaQuery();\n };\n Sidebar.prototype.documentclickHandler = function (e) {\n if (closest(e.target, '.' + CONTROL + '' + '.' + ROOT)) {\n return;\n }\n this.hide();\n };\n Sidebar.prototype.enableGestureHandler = function (args) {\n if (this.position === 'Left' && args.swipeDirection === 'Right' &&\n (args.startX <= 20 && args.distanceX >= 50 && args.velocity >= 0.5)) {\n this.show();\n }\n else if (this.position === 'Left' && args.swipeDirection === 'Left') {\n this.hide();\n }\n else if (this.position === 'Right' && args.swipeDirection === 'Right') {\n this.hide();\n }\n else if (this.position === 'Right' && args.swipeDirection === 'Left'\n && (window.innerWidth - args.startX <= 20 && args.distanceX >= 50 && args.velocity >= 0.5)) {\n this.show();\n }\n };\n Sidebar.prototype.setEnableGestures = function () {\n if (this.enableGestures) {\n this.mainContentEle = new Touch(document.body, { swipe: this.enableGestureHandler.bind(this) });\n this.sidebarEle = new Touch(this.element, { swipe: this.enableGestureHandler.bind(this) });\n }\n else {\n if (this.mainContentEle && this.sidebarEle) {\n this.mainContentEle.destroy();\n this.sidebarEle.destroy();\n }\n }\n };\n Sidebar.prototype.wireEvents = function () {\n this.setEnableGestures();\n window.addEventListener('resize', this.resize.bind(this));\n };\n Sidebar.prototype.unWireEvents = function () {\n window.removeEventListener('resize', this.resize.bind(this));\n EventHandler.remove(document, 'mousedown touchstart', this.documentclickHandler);\n if (this.mainContentEle) {\n this.mainContentEle.destroy();\n }\n if (this.sidebarEle) {\n this.sidebarEle.destroy();\n }\n };\n Sidebar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'isOpen':\n this.isOpen ? this.show() : this.hide();\n break;\n case 'width':\n this.setWidth();\n if (!this.getState()) {\n this.setDock();\n }\n break;\n case 'animate':\n this.setAnimation();\n break;\n case 'type':\n removeClass([this.element], [VISIBILITY]);\n this.addClass();\n this.setType(this.type);\n break;\n case 'position':\n this.element.style.transform = '';\n this.setDock();\n if (sibling) {\n this.position === 'Left' ? sibling.style.marginRight = '0px' : sibling.style.marginLeft = '0px';\n }\n if (this.position === 'Right') {\n removeClass([this.element], LEFT);\n addClass([this.element], RIGHT);\n }\n else {\n removeClass([this.element], RIGHT);\n addClass([this.element], LEFT);\n }\n this.setType(this.type);\n break;\n case 'showBackdrop':\n if (this.showBackdrop) {\n this.createBackDrop();\n }\n else {\n if (this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n }\n break;\n case 'target':\n if (typeof (this.target) === 'string') {\n this.setProperties({ target: document.querySelector(this.target) }, true);\n }\n if (isNullOrUndefined(this.target)) {\n removeClass([this.element], SIDEBARABSOLUTE);\n removeClass([oldProp.target], CONTEXT);\n setStyle(sibling, { 'margin-left': 0, 'margin-right': 0 });\n document.body.insertAdjacentElement('afterbegin', this.element);\n }\n else {\n _super.prototype.refresh.call(this);\n }\n break;\n case 'closeOnDocumentClick':\n this.setCloseOnDocumentClick();\n break;\n case 'enableDock':\n if (!this.getState()) {\n this.setDock();\n }\n break;\n case 'zIndex':\n this.setZindex();\n break;\n case 'mediaQuery':\n this.setMediaQuery();\n break;\n case 'enableGestures':\n this.setEnableGestures();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n }\n }\n };\n Sidebar.prototype.setType = function (type) {\n var elementWidth = this.element.getBoundingClientRect().width;\n this.setZindex();\n if (this.enableDock) {\n addClass([this.element], DOCKER);\n }\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (sibling) {\n sibling.style.transform = 'translateX(' + 0 + 'px)';\n if (!Browser.isDevice && this.type !== 'Auto') {\n this.position === 'Left' ? sibling.style.marginLeft = '0px' : sibling.style.marginRight = '0px';\n }\n }\n var margin = this.position === 'Left' ? elementWidth + 'px' : elementWidth + 'px';\n var eleWidth = this.position === 'Left' ? elementWidth : -(elementWidth);\n removeClass([this.element], [PUSH, OVER, SLIDE]);\n switch (type) {\n case 'Push':\n addClass([this.element], [PUSH]);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n break;\n case 'Slide':\n addClass([this.element], [SLIDE]);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n sibling.style.transform = 'translateX(' + eleWidth + 'px)';\n }\n break;\n case 'Over':\n addClass([this.element], [OVER]);\n if (this.enableDock && this.element.classList.contains(CLOSE)) {\n if (sibling) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n }\n break;\n case 'Auto':\n addClass([this.element], [TRASITION]);\n if (Browser.isDevice) {\n if (sibling && (this.enableDock) && !this.getState()) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n addClass([this.element], PUSH);\n }\n else {\n addClass([this.element], OVER);\n }\n }\n else {\n addClass([this.element], PUSH);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n this.setProperties({ isOpen: true }, true);\n }\n this.createBackDrop();\n }\n };\n /**\n * Removes the control from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @returns void\n */\n Sidebar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], [OPEN, CLOSE, PUSH, SLIDE, OVER, LEFT, RIGHT, TRASITION]);\n if (this.target) {\n removeClass([this.element], SIDEBARABSOLUTE);\n removeClass([this.target], CONTEXT);\n }\n this.destroyBackDrop();\n this.element.style.width = '';\n this.element.style.zIndex = '';\n this.element.style.transform = '';\n var sibling = document.querySelector('.e-main-content')\n || this.element.nextElementSibling;\n if (!isNullOrUndefined(sibling)) {\n sibling.style.margin = '';\n sibling.style.transform = '';\n }\n this.unWireEvents();\n };\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"dockSize\", void 0);\n __decorate([\n Property(null)\n ], Sidebar.prototype, \"mediaQuery\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enableDock\", void 0);\n __decorate([\n Property('en-US')\n ], Sidebar.prototype, \"locale\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], Sidebar.prototype, \"enableGestures\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"isOpen\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], Sidebar.prototype, \"animate\", void 0);\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"closeOnDocumentClick\", void 0);\n __decorate([\n Property('Left')\n ], Sidebar.prototype, \"position\", void 0);\n __decorate([\n Property(null)\n ], Sidebar.prototype, \"target\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"showBackdrop\", void 0);\n __decorate([\n Property('Auto')\n ], Sidebar.prototype, \"type\", void 0);\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], Sidebar.prototype, \"zIndex\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"destroyed\", void 0);\n Sidebar = __decorate([\n NotifyPropertyChanges\n ], Sidebar);\n return Sidebar;\n}(Component));\nexport { Sidebar };\n","import { createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DateRangePicker } from '@syncfusion/ej2-calendars';\nimport { getElement } from '../../common/utils/helper';\n/**\n * Period selector class\n */\nvar PeriodSelector = /** @class */ (function () {\n //constructor for period selector\n function PeriodSelector(rangeNavigator) {\n this.control = rangeNavigator;\n }\n /**\n * renderSelector div\n * @param control\n */\n PeriodSelector.prototype.renderSelectorElement = function (control) {\n //render border\n var periodSelectorSize = this.periodSelectorSize;\n var thumbSize = control.themeStyle.thumbWidth;\n this.periodSelectorDiv = createElement('div', {\n id: control.element.id + '_Secondary_Element',\n styles: 'width: ' + (this.periodSelectorSize.width - thumbSize) + 'px;height: ' +\n this.periodSelectorSize.height + 'px;top:' +\n this.periodSelectorSize.y + 'px;left:' +\n (this.periodSelectorSize.x + thumbSize / 2) + 'px; position: absolute'\n });\n this.control.element.appendChild(this.periodSelectorDiv);\n };\n /**\n * renderSelector elements\n */\n PeriodSelector.prototype.renderSelector = function () {\n var _this = this;\n var selectorElement = createElement('div', { id: this.control.element.id + '_selector' });\n this.periodSelectorDiv.appendChild(selectorElement);\n //render toolbar\n var selector = [];\n var buttons = this.control.periodSelectorSettings.periods;\n for (var i = 0; i < buttons.length; i++) {\n selector.push({ align: 'Left', text: buttons[i].text });\n }\n this.calendarId = this.control.element.id + '_calendar';\n selector.push({ template: '
    ', align: 'Right' });\n var selctorArgs = {\n selector: selector,\n name: 'RangeSelector',\n cancel: false,\n enableCustomFormat: false,\n content: ''\n };\n this.control.trigger('selectorRender', selctorArgs);\n this.toolbar = new Toolbar({\n items: selctorArgs.selector, height: this.periodSelectorSize.height,\n clicked: function (args) {\n _this.buttonClick(args, _this.control);\n }, created: function () {\n _this.nodes = _this.toolbar.element.querySelectorAll('.e-toolbar-left')[0];\n if (isNullOrUndefined(_this.selectedIndex)) {\n buttons.map(function (period, index) {\n if (period.selected) {\n _this.control.startValue = _this.changedRange(period.intervalType, _this.control.endValue, period.interval).getTime();\n _this.selectedIndex = (_this.nodes.childNodes.length - buttons.length) + index;\n }\n });\n }\n _this.setSelectedStyle(_this.selectedIndex);\n }\n });\n this.toolbar.appendTo(selectorElement);\n this.triggerChange = true;\n //render calendar\n this.datePicker = new DateRangePicker({\n min: new Date(this.control.chartSeries.xMin),\n max: new Date(this.control.chartSeries.xMax),\n format: 'dd\\'\\/\\'MM\\'\\/\\'yyyy',\n placeholder: 'Select a range',\n showClearButton: false,\n startDate: new Date(this.control.startValue),\n endDate: new Date(this.control.endValue),\n created: function (args) {\n if (selctorArgs.enableCustomFormat) {\n var datePickerElement = document.getElementsByClassName('e-date-range-wrapper')[0];\n datePickerElement.style.display = 'none';\n datePickerElement.insertAdjacentElement('afterend', createElement('div', { id: 'customRange',\n innerHTML: selctorArgs.content, className: 'e-btn e-small' }));\n getElement('customRange').insertAdjacentElement('afterbegin', (createElement('span', { id: 'dateIcon',\n className: 'e-input-group-icon e-range-icon e-icons', styles: 'margin-right: 10px' })));\n document.getElementById('customRange').onclick = function () {\n _this.datePicker.show(getElement('customRange'));\n };\n }\n },\n change: function (args) {\n if (_this.triggerChange) {\n _this.control.rangeSlider.performAnimation(args.startDate.getTime(), args.endDate.getTime(), _this.control);\n }\n }\n });\n this.datePicker.appendTo('#' + this.calendarId);\n };\n /**\n * To set and deselect the acrive style\n * @param buttons\n */\n PeriodSelector.prototype.setSelectedStyle = function (selectedIndex) {\n if (this.control.disableRangeSelector) {\n for (var i = 0, length_1 = this.nodes.childNodes.length; i < length_1; i++) {\n this.nodes.childNodes[i].childNodes[0].classList.remove('e-active');\n this.nodes.childNodes[i].childNodes[0].classList.remove('e-active');\n }\n this.nodes.childNodes[selectedIndex].childNodes[0].classList.add('e-flat');\n this.nodes.childNodes[selectedIndex].childNodes[0].classList.add('e-active');\n }\n };\n /**\n * Button click handling\n */\n PeriodSelector.prototype.buttonClick = function (args, control) {\n var _this = this;\n var toolBarItems = this.toolbar.items;\n var clickedEle = args.item;\n var slider = control.rangeSlider;\n var updatedStart;\n var updatedEnd;\n var buttons = control.periodSelectorSettings.periods;\n var button = buttons.filter(function (btn) { return (btn.text === clickedEle.text); });\n buttons.map(function (period, index) {\n if (period.text === args.item.text) {\n _this.selectedIndex = (_this.nodes.childNodes.length - buttons.length) + index;\n }\n });\n this.setSelectedStyle(this.selectedIndex);\n if (clickedEle.text.toLowerCase() === 'all') {\n updatedStart = control.chartSeries.xMin;\n updatedEnd = control.chartSeries.xMax;\n slider.performAnimation(updatedStart, updatedEnd, control);\n }\n else if (clickedEle.text.toLowerCase() === 'ytd') {\n updatedStart = new Date(new Date(slider.currentEnd).getFullYear().toString()).getTime();\n updatedEnd = slider.currentEnd;\n slider.performAnimation(updatedStart, updatedEnd, control);\n }\n else if (clickedEle.text.toLowerCase() !== '') {\n updatedStart = this.changedRange(button[0].intervalType, slider.currentEnd, button[0].interval).getTime();\n updatedEnd = slider.currentEnd;\n slider.performAnimation(updatedStart, updatedEnd, control);\n }\n if (getElement(this.calendarId + '_popup') && !Browser.isDevice) {\n var element = getElement(this.calendarId + '_popup');\n element.querySelectorAll('.e-range-header')[0].style.display = 'none';\n }\n };\n /**\n *\n * @param type updatedRange for selector\n * @param end\n * @param interval\n */\n PeriodSelector.prototype.changedRange = function (type, end, interval) {\n var result = new Date(end);\n switch (type) {\n case 'Quarter':\n result.setMonth(result.getMonth() - (3 * interval));\n break;\n case 'Months':\n result.setMonth(result.getMonth() - interval);\n break;\n case 'Weeks':\n result.setDate(result.getDate() - (interval * 7));\n break;\n case 'Days':\n result.setDate(result.getDate() - interval);\n break;\n case 'Hours':\n result.setHours(result.getHours() - interval);\n break;\n case 'Minutes':\n result.setMinutes(result.getMinutes() - interval);\n break;\n case 'Seconds':\n result.setSeconds(result.getSeconds() - interval);\n break;\n default:\n result.setFullYear(result.getFullYear() - interval);\n break;\n }\n return result;\n };\n ;\n /**\n * Get module name\n */\n PeriodSelector.prototype.getModuleName = function () {\n return 'PeriodSelector';\n };\n /**\n * To destroy the period selector.\n * @return {void}\n * @private\n */\n PeriodSelector.prototype.destroy = function () {\n /**\n * destroy method\n */\n };\n return PeriodSelector;\n}());\nexport { PeriodSelector };\n","import { Tooltip as SVGTooltip } from '@syncfusion/ej2-svg-base';\nimport { getElement } from '../../common/utils/helper';\nimport { stopTimer } from '../../common/utils/helper';\nimport { firstToLowerCase } from '../../index';\nimport { measureText, createTemplate } from '../../index';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `Tooltip` module is used to render the tooltip for chart series.\n */\nvar RangeTooltip = /** @class */ (function () {\n /**\n * Constructor for tooltip module.\n * @private.\n */\n function RangeTooltip(range) {\n this.control = range;\n this.elementId = range.element.id;\n }\n /**\n * Left tooltip method called here\n * @param rangeSlider\n */\n RangeTooltip.prototype.renderLeftTooltip = function (rangeSlider) {\n this.fadeOutTooltip();\n var content = this.getTooltipContent(rangeSlider.currentStart);\n var contentWidth = this.getContentSize(content);\n var rect = this.control.enableRtl ? rangeSlider.rightRect : rangeSlider.leftRect;\n if (contentWidth > rect.width) {\n rect = rangeSlider.midRect;\n }\n this.leftTooltip = this.renderTooltip(rect, this.createElement('_leftTooltip'), rangeSlider.startX, content);\n };\n /**\n * get the content size\n * @param value\n */\n RangeTooltip.prototype.getContentSize = function (value) {\n var width;\n var font = this.control.tooltip.textStyle;\n if (this.control.tooltip.template) {\n width = createTemplate(createElement('div', {\n id: 'measureElement',\n styles: 'position: absolute;'\n }), 0, this.control.tooltip.template, this.control).getBoundingClientRect().width;\n }\n else {\n // 20 for tooltip padding\n width = measureText(value[0], font).width + 20;\n }\n return width;\n };\n /**\n * Right tooltip method called here\n * @param rangeSlider\n */\n RangeTooltip.prototype.renderRightTooltip = function (rangeSlider) {\n this.fadeOutTooltip();\n var content = this.getTooltipContent(rangeSlider.currentEnd);\n var contentWidth = this.getContentSize(content);\n var rect = this.control.enableRtl ? rangeSlider.leftRect : rangeSlider.rightRect;\n if (contentWidth > rect.width) {\n rect = rangeSlider.midRect;\n rect.x = !this.control.series.length ? rect.x : 0;\n }\n this.rightTooltip = this.renderTooltip(rect, this.createElement('_rightTooltip'), rangeSlider.endX, content);\n };\n /**\n * Tooltip element creation\n * @param id\n */\n RangeTooltip.prototype.createElement = function (id) {\n if (getElement(this.elementId + id)) {\n return getElement(this.elementId + id);\n }\n else {\n var element = document.createElement('div');\n element.id = this.elementId + id;\n element.className = 'ejSVGTooltip';\n element.setAttribute('style', 'pointer-events:none; position:absolute;z-index: 1');\n getElement(this.elementId + '_Secondary_Element').appendChild(element);\n return element;\n }\n };\n /**\n * Tooltip render called here\n * @param bounds\n * @param parent\n * @param pointX\n * @param value\n */\n RangeTooltip.prototype.renderTooltip = function (bounds, parent, pointX, content) {\n var control = this.control;\n var tooltip = control.tooltip;\n var argsData = {\n cancel: false, name: 'tooltipRender', text: content,\n textStyle: tooltip.textStyle\n };\n this.control.trigger('tooltipRender', argsData);\n var left = control.svgObject.getBoundingClientRect().left -\n control.element.getBoundingClientRect().left;\n if (!argsData.cancel) {\n return new SVGTooltip({\n location: { x: pointX, y: control.rangeSlider.sliderY },\n content: argsData.text, marginX: 2,\n enableShadow: false,\n marginY: 2, arrowPadding: 8, rx: 0, ry: 0,\n inverted: control.series.length > 0,\n areaBounds: bounds, fill: tooltip.fill,\n theme: this.control.theme,\n //enableShadow: false,\n clipBounds: { x: left },\n border: tooltip.border, opacity: tooltip.opacity,\n template: tooltip.template,\n textStyle: argsData.textStyle,\n data: {\n 'start': this.getTooltipContent(this.control.startValue)[0],\n 'end': this.getTooltipContent(this.control.endValue)[0],\n 'value': content[0]\n }\n }, parent);\n }\n else {\n return null;\n }\n };\n /**\n * Tooltip content processed here\n * @param value\n */\n RangeTooltip.prototype.getTooltipContent = function (value) {\n var control = this.control;\n var tooltip = control.tooltip;\n var xAxis = control.chartSeries.xAxis;\n var text;\n var format = tooltip.format || xAxis.labelFormat;\n var isCustom = format.match('{value}') !== null;\n var valueType = xAxis.valueType;\n if (valueType === 'DateTime') {\n text = (control.intl.getDateFormat({\n format: format || 'MM/dd/yyyy',\n type: firstToLowerCase(control.skeletonType),\n skeleton: control.dateTimeModule.getSkeleton(xAxis, null, null)\n }))(new Date(value));\n }\n else {\n xAxis.format = control.intl.getNumberFormat({\n format: isCustom ? '' : format,\n useGrouping: control.useGroupingSeparator\n });\n text = control.doubleModule.formatValue(xAxis, isCustom, format, valueType === 'Logarithmic' ? Math.pow(xAxis.logBase, value) : value);\n }\n return [text];\n };\n /**\n * Fadeout animation performed here\n */\n RangeTooltip.prototype.fadeOutTooltip = function () {\n var _this = this;\n var tooltip = this.control.tooltip;\n if (tooltip.displayMode === 'OnDemand') {\n stopTimer(this.toolTipInterval);\n if (this.rightTooltip) {\n this.toolTipInterval = setTimeout(function () {\n _this.leftTooltip.fadeOut();\n _this.rightTooltip.fadeOut();\n }, 1000);\n }\n }\n };\n /**\n * Get module name.\n */\n RangeTooltip.prototype.getModuleName = function () {\n return 'RangeTooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n RangeTooltip.prototype.destroy = function (chart) {\n // Destroy method called here\n };\n return RangeTooltip;\n}());\nexport { RangeTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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';\nvar SmithchartFont = /** @class */ (function (_super) {\n __extends(SmithchartFont, _super);\n function SmithchartFont() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Segoe UI')\n ], SmithchartFont.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], SmithchartFont.prototype, \"fontStyle\", void 0);\n __decorate([\n Property('Regular')\n ], SmithchartFont.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('')\n ], SmithchartFont.prototype, \"color\", void 0);\n __decorate([\n Property('12px')\n ], SmithchartFont.prototype, \"size\", void 0);\n __decorate([\n Property(1)\n ], SmithchartFont.prototype, \"opacity\", void 0);\n return SmithchartFont;\n}(ChildProperty));\nexport { SmithchartFont };\nvar SmithchartMargin = /** @class */ (function (_super) {\n __extends(SmithchartMargin, _super);\n function SmithchartMargin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"bottom\", void 0);\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"left\", void 0);\n return SmithchartMargin;\n}(ChildProperty));\nexport { SmithchartMargin };\nvar SmithchartBorder = /** @class */ (function (_super) {\n __extends(SmithchartBorder, _super);\n function SmithchartBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], SmithchartBorder.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], SmithchartBorder.prototype, \"opacity\", void 0);\n __decorate([\n Property('transparent')\n ], SmithchartBorder.prototype, \"color\", void 0);\n return SmithchartBorder;\n}(ChildProperty));\nexport { SmithchartBorder };\n/**\n * Internal use of type rect\n */\nvar SmithchartRect = /** @class */ (function () {\n function SmithchartRect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return SmithchartRect;\n}());\nexport { SmithchartRect };\nvar LabelCollection = /** @class */ (function () {\n function LabelCollection() {\n }\n return LabelCollection;\n}());\nexport { LabelCollection };\nvar LegendSeries = /** @class */ (function () {\n function LegendSeries() {\n }\n return LegendSeries;\n}());\nexport { LegendSeries };\nvar LabelRegion = /** @class */ (function () {\n function LabelRegion() {\n }\n return LabelRegion;\n}());\nexport { LabelRegion };\nvar HorizontalLabelCollection = /** @class */ (function (_super) {\n __extends(HorizontalLabelCollection, _super);\n function HorizontalLabelCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return HorizontalLabelCollection;\n}(LabelCollection));\nexport { HorizontalLabelCollection };\nvar RadialLabelCollections = /** @class */ (function (_super) {\n __extends(RadialLabelCollections, _super);\n function RadialLabelCollections() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return RadialLabelCollections;\n}(HorizontalLabelCollection));\nexport { RadialLabelCollections };\nvar LineSegment = /** @class */ (function () {\n function LineSegment() {\n }\n return LineSegment;\n}());\nexport { LineSegment };\nvar PointRegion = /** @class */ (function () {\n function PointRegion() {\n }\n return PointRegion;\n}());\nexport { PointRegion };\n/**\n * Smithchart internal class for point\n */\nvar Point = /** @class */ (function () {\n function Point() {\n }\n return Point;\n}());\nexport { Point };\nvar ClosestPoint = /** @class */ (function () {\n function ClosestPoint() {\n }\n return ClosestPoint;\n}());\nexport { ClosestPoint };\nvar MarkerOptions = /** @class */ (function () {\n function MarkerOptions(id, fill, borderColor, borderWidth, opacity) {\n this.id = id;\n this.fill = fill;\n this.borderColor = borderColor;\n this.borderWidth = borderWidth;\n this.opacity = opacity;\n }\n return MarkerOptions;\n}());\nexport { MarkerOptions };\nvar SmithchartLabelPosition = /** @class */ (function () {\n function SmithchartLabelPosition() {\n }\n return SmithchartLabelPosition;\n}());\nexport { SmithchartLabelPosition };\nvar Direction = /** @class */ (function () {\n function Direction() {\n this.counterclockwise = 0;\n this.clockwise = 1;\n }\n return Direction;\n}());\nexport { Direction };\nvar DataLabelTextOptions = /** @class */ (function () {\n function DataLabelTextOptions() {\n }\n return DataLabelTextOptions;\n}());\nexport { DataLabelTextOptions };\nvar LabelOption = /** @class */ (function () {\n function LabelOption() {\n }\n return LabelOption;\n}());\nexport { LabelOption };\n/** @private */\nvar SmithchartSize = /** @class */ (function () {\n function SmithchartSize(width, height) {\n this.width = width;\n this.height = height;\n }\n return SmithchartSize;\n}());\nexport { SmithchartSize };\nvar GridArcPoints = /** @class */ (function () {\n function GridArcPoints() {\n }\n return GridArcPoints;\n}());\nexport { GridArcPoints };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\nvar LegendTitle = /** @class */ (function (_super) {\n __extends(LegendTitle, _super);\n function LegendTitle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], LegendTitle.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], LegendTitle.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], LegendTitle.prototype, \"description\", void 0);\n __decorate([\n Property('Center')\n ], LegendTitle.prototype, \"textAlignment\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, SmithchartFont)\n ], LegendTitle.prototype, \"textStyle\", void 0);\n return LegendTitle;\n}(ChildProperty));\nexport { LegendTitle };\nvar LegendLocation = /** @class */ (function (_super) {\n __extends(LegendLocation, _super);\n function LegendLocation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], LegendLocation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], LegendLocation.prototype, \"y\", void 0);\n return LegendLocation;\n}(ChildProperty));\nexport { LegendLocation };\nvar LegendItemStyleBorder = /** @class */ (function (_super) {\n __extends(LegendItemStyleBorder, _super);\n function LegendItemStyleBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], LegendItemStyleBorder.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], LegendItemStyleBorder.prototype, \"color\", void 0);\n return LegendItemStyleBorder;\n}(ChildProperty));\nexport { LegendItemStyleBorder };\nvar LegendItemStyle = /** @class */ (function (_super) {\n __extends(LegendItemStyle, _super);\n function LegendItemStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], LegendItemStyle.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], LegendItemStyle.prototype, \"height\", void 0);\n __decorate([\n Complex({}, LegendItemStyleBorder)\n ], LegendItemStyle.prototype, \"border\", void 0);\n return LegendItemStyle;\n}(ChildProperty));\nexport { LegendItemStyle };\nvar LegendBorder = /** @class */ (function (_super) {\n __extends(LegendBorder, _super);\n function LegendBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], LegendBorder.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], LegendBorder.prototype, \"color\", void 0);\n return LegendBorder;\n}(ChildProperty));\nexport { LegendBorder };\nvar SmithchartLegendSettings = /** @class */ (function (_super) {\n __extends(SmithchartLegendSettings, _super);\n function SmithchartLegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SmithchartLegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('bottom')\n ], SmithchartLegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property('Center')\n ], SmithchartLegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property('circle')\n ], SmithchartLegendSettings.prototype, \"shape\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"rowCount\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"columnCount\", void 0);\n __decorate([\n Property(8)\n ], SmithchartLegendSettings.prototype, \"itemPadding\", void 0);\n __decorate([\n Property(5)\n ], SmithchartLegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Property('')\n ], SmithchartLegendSettings.prototype, \"description\", void 0);\n __decorate([\n Property(true)\n ], SmithchartLegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Complex({}, LegendTitle)\n ], SmithchartLegendSettings.prototype, \"title\", void 0);\n __decorate([\n Complex({}, LegendLocation)\n ], SmithchartLegendSettings.prototype, \"location\", void 0);\n __decorate([\n Complex({}, LegendItemStyle)\n ], SmithchartLegendSettings.prototype, \"itemStyle\", void 0);\n __decorate([\n Complex({}, LegendBorder)\n ], SmithchartLegendSettings.prototype, \"border\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, SmithchartFont)\n ], SmithchartLegendSettings.prototype, \"textStyle\", void 0);\n return SmithchartLegendSettings;\n}(ChildProperty));\nexport { SmithchartLegendSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\n/**\n * Configures the major Grid lines in the `axis`.\n */\nvar SmithchartMajorGridLines = /** @class */ (function (_super) {\n __extends(SmithchartMajorGridLines, _super);\n function SmithchartMajorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SmithchartMajorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], SmithchartMajorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(true)\n ], SmithchartMajorGridLines.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], SmithchartMajorGridLines.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], SmithchartMajorGridLines.prototype, \"opacity\", void 0);\n return SmithchartMajorGridLines;\n}(ChildProperty));\nexport { SmithchartMajorGridLines };\n/**\n * Configures the major grid lines in the `axis`.\n */\nvar SmithchartMinorGridLines = /** @class */ (function (_super) {\n __extends(SmithchartMinorGridLines, _super);\n function SmithchartMinorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SmithchartMinorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], SmithchartMinorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(false)\n ], SmithchartMinorGridLines.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], SmithchartMinorGridLines.prototype, \"color\", void 0);\n __decorate([\n Property(8)\n ], SmithchartMinorGridLines.prototype, \"count\", void 0);\n return SmithchartMinorGridLines;\n}(ChildProperty));\nexport { SmithchartMinorGridLines };\n/**\n * Configures the axis lines in the `axis`.\n */\nvar SmithchartAxisLine = /** @class */ (function (_super) {\n __extends(SmithchartAxisLine, _super);\n function SmithchartAxisLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SmithchartAxisLine.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], SmithchartAxisLine.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], SmithchartAxisLine.prototype, \"color\", void 0);\n __decorate([\n Property('')\n ], SmithchartAxisLine.prototype, \"dashArray\", void 0);\n return SmithchartAxisLine;\n}(ChildProperty));\nexport { SmithchartAxisLine };\nvar SmithchartAxis = /** @class */ (function (_super) {\n __extends(SmithchartAxis, _super);\n function SmithchartAxis() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SmithchartAxis.prototype, \"visible\", void 0);\n __decorate([\n Property('Outside')\n ], SmithchartAxis.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('Hide')\n ], SmithchartAxis.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Complex({}, SmithchartMajorGridLines)\n ], SmithchartAxis.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, SmithchartMinorGridLines)\n ], SmithchartAxis.prototype, \"minorGridLines\", void 0);\n __decorate([\n Complex({}, SmithchartAxisLine)\n ], SmithchartAxis.prototype, \"axisLine\", void 0);\n __decorate([\n Complex(Theme.axisLabelFont, SmithchartFont)\n ], SmithchartAxis.prototype, \"labelStyle\", void 0);\n return SmithchartAxis;\n}(ChildProperty));\nexport { SmithchartAxis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\nvar Subtitle = /** @class */ (function (_super) {\n __extends(Subtitle, _super);\n function Subtitle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Subtitle.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], Subtitle.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Subtitle.prototype, \"description\", void 0);\n __decorate([\n Property('Far')\n ], Subtitle.prototype, \"textAlignment\", void 0);\n __decorate([\n Property(true)\n ], Subtitle.prototype, \"enableTrim\", void 0);\n __decorate([\n Property(null)\n ], Subtitle.prototype, \"maximumWidth\", void 0);\n __decorate([\n Complex(Theme.smithchartSubtitleFont, SmithchartFont)\n ], Subtitle.prototype, \"textStyle\", void 0);\n return Subtitle;\n}(ChildProperty));\nexport { Subtitle };\nvar Title = /** @class */ (function (_super) {\n __extends(Title, _super);\n function Title() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Title.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], Title.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Title.prototype, \"description\", void 0);\n __decorate([\n Property('Center')\n ], Title.prototype, \"textAlignment\", void 0);\n __decorate([\n Property(true)\n ], Title.prototype, \"enableTrim\", void 0);\n __decorate([\n Property(null)\n ], Title.prototype, \"maximumWidth\", void 0);\n __decorate([\n Complex({}, Subtitle)\n ], Title.prototype, \"subtitle\", void 0);\n __decorate([\n Complex(Theme.smithchartTitleFont, SmithchartFont)\n ], Title.prototype, \"font\", void 0);\n __decorate([\n Complex(Theme.smithchartTitleFont, SmithchartFont)\n ], Title.prototype, \"textStyle\", void 0);\n return Title;\n}(ChildProperty));\nexport { Title };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\nvar SeriesTooltipBorder = /** @class */ (function (_super) {\n __extends(SeriesTooltipBorder, _super);\n function SeriesTooltipBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SeriesTooltipBorder.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], SeriesTooltipBorder.prototype, \"color\", void 0);\n return SeriesTooltipBorder;\n}(ChildProperty));\nexport { SeriesTooltipBorder };\nvar SeriesTooltip = /** @class */ (function (_super) {\n __extends(SeriesTooltip, _super);\n function SeriesTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SeriesTooltip.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], SeriesTooltip.prototype, \"fill\", void 0);\n __decorate([\n Property(0.95)\n ], SeriesTooltip.prototype, \"opacity\", void 0);\n __decorate([\n Property('')\n ], SeriesTooltip.prototype, \"template\", void 0);\n __decorate([\n Complex({}, SeriesTooltipBorder)\n ], SeriesTooltip.prototype, \"border\", void 0);\n return SeriesTooltip;\n}(ChildProperty));\nexport { SeriesTooltip };\nvar SeriesMarkerBorder = /** @class */ (function (_super) {\n __extends(SeriesMarkerBorder, _super);\n function SeriesMarkerBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(3)\n ], SeriesMarkerBorder.prototype, \"width\", void 0);\n __decorate([\n Property('white')\n ], SeriesMarkerBorder.prototype, \"color\", void 0);\n return SeriesMarkerBorder;\n}(ChildProperty));\nexport { SeriesMarkerBorder };\nvar SeriesMarkerDataLabelBorder = /** @class */ (function (_super) {\n __extends(SeriesMarkerDataLabelBorder, _super);\n function SeriesMarkerDataLabelBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.1)\n ], SeriesMarkerDataLabelBorder.prototype, \"width\", void 0);\n __decorate([\n Property('white')\n ], SeriesMarkerDataLabelBorder.prototype, \"color\", void 0);\n return SeriesMarkerDataLabelBorder;\n}(ChildProperty));\nexport { SeriesMarkerDataLabelBorder };\nvar SeriesMarkerDataLabelConnectorLine = /** @class */ (function (_super) {\n __extends(SeriesMarkerDataLabelConnectorLine, _super);\n function SeriesMarkerDataLabelConnectorLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SeriesMarkerDataLabelConnectorLine.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], SeriesMarkerDataLabelConnectorLine.prototype, \"color\", void 0);\n return SeriesMarkerDataLabelConnectorLine;\n}(ChildProperty));\nexport { SeriesMarkerDataLabelConnectorLine };\nvar SeriesMarkerDataLabel = /** @class */ (function (_super) {\n __extends(SeriesMarkerDataLabel, _super);\n function SeriesMarkerDataLabel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SeriesMarkerDataLabel.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], SeriesMarkerDataLabel.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], SeriesMarkerDataLabel.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesMarkerDataLabel.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, SeriesMarkerDataLabelBorder)\n ], SeriesMarkerDataLabel.prototype, \"border\", void 0);\n __decorate([\n Complex({}, SeriesMarkerDataLabelConnectorLine)\n ], SeriesMarkerDataLabel.prototype, \"connectorLine\", void 0);\n __decorate([\n Complex(Theme.dataLabelFont, SmithchartFont)\n ], SeriesMarkerDataLabel.prototype, \"textStyle\", void 0);\n return SeriesMarkerDataLabel;\n}(ChildProperty));\nexport { SeriesMarkerDataLabel };\nvar SeriesMarker = /** @class */ (function (_super) {\n __extends(SeriesMarker, _super);\n function SeriesMarker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SeriesMarker.prototype, \"visible\", void 0);\n __decorate([\n Property('circle')\n ], SeriesMarker.prototype, \"shape\", void 0);\n __decorate([\n Property(6)\n ], SeriesMarker.prototype, \"width\", void 0);\n __decorate([\n Property(6)\n ], SeriesMarker.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], SeriesMarker.prototype, \"imageUrl\", void 0);\n __decorate([\n Property('')\n ], SeriesMarker.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesMarker.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, SeriesMarkerBorder)\n ], SeriesMarker.prototype, \"border\", void 0);\n __decorate([\n Complex({}, SeriesMarkerDataLabel)\n ], SeriesMarker.prototype, \"dataLabel\", void 0);\n return SeriesMarker;\n}(ChildProperty));\nexport { SeriesMarker };\nvar SmithchartSeries = /** @class */ (function (_super) {\n __extends(SmithchartSeries, _super);\n function SmithchartSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('visible')\n ], SmithchartSeries.prototype, \"visibility\", void 0);\n __decorate([\n Property([])\n ], SmithchartSeries.prototype, \"points\", void 0);\n __decorate([\n Property('')\n ], SmithchartSeries.prototype, \"resistance\", void 0);\n __decorate([\n Property('')\n ], SmithchartSeries.prototype, \"reactance\", void 0);\n __decorate([\n Property(null)\n ], SmithchartSeries.prototype, \"dataSource\", void 0);\n __decorate([\n Property('')\n ], SmithchartSeries.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], SmithchartSeries.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], SmithchartSeries.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('2000ms')\n ], SmithchartSeries.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(false)\n ], SmithchartSeries.prototype, \"enableSmartLabels\", void 0);\n __decorate([\n Property(1)\n ], SmithchartSeries.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], SmithchartSeries.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, SeriesMarker)\n ], SmithchartSeries.prototype, \"marker\", void 0);\n __decorate([\n Complex({}, SeriesTooltip)\n ], SmithchartSeries.prototype, \"tooltip\", void 0);\n return SmithchartSeries;\n}(ChildProperty));\nexport { SmithchartSeries };\n","import { measureText } from '../../smithchart/utils/helper';\n/* tslint:disable:no-string-literal */\nvar AreaBounds = /** @class */ (function () {\n function AreaBounds() {\n }\n AreaBounds.prototype.calculateAreaBounds = function (smithchart, title, bounds) {\n var x;\n var y;\n var width;\n var height;\n var rightSpace;\n var margin = smithchart.margin;\n var border = smithchart.border;\n var spaceValue = this.getLegendSpace(smithchart, bounds);\n x = spaceValue['leftLegendWidth'] + margin.left + border.width;\n rightSpace = spaceValue['rightLegendWidth'] + margin.left + margin.right + (2 * border.width);\n width = smithchart.availableSize['width'] - (x + rightSpace);\n y = margin['top'] + (2 * smithchart.elementSpacing) + spaceValue['modelTitleHeight'] +\n spaceValue['modelsubTitleHeight'] + spaceValue['topLegendHeight'] + border.width;\n height = smithchart.availableSize['height'] - (spaceValue['modelTitleHeight'] +\n (2 * smithchart.elementSpacing) + spaceValue['modelsubTitleHeight'] + margin['top'] +\n spaceValue['topLegendHeight'] + spaceValue['bottomLegendHeight']);\n return { x: x, y: y, width: width, height: height };\n };\n AreaBounds.prototype.getLegendSpace = function (smithchart, bounds) {\n var title = smithchart.title;\n var legend = smithchart.legendSettings;\n var position = legend.position.toLowerCase();\n var subtitleHeight = 0;\n var modelsubTitleHeight = 0;\n var titleHeight = 0;\n var font = smithchart.font;\n var modelTitleHeight = 0;\n var itemPadding = 10;\n var legendBorder = legend.border.width;\n var leftLegendWidth = 0;\n var rightLegendWidth = 0;\n var topLegendHeight = 0;\n var bottomLegendHeight = 0;\n var ltheight = 0;\n var space;\n if (legend['visible']) {\n space = (bounds.width + (itemPadding / 2) + smithchart.elementSpacing + (2 * legendBorder));\n leftLegendWidth = position === 'left' ? space : 0;\n rightLegendWidth = position === 'right' ? space : 0;\n ltheight = legend['title'].visible ? measureText(legend['title'].text, font)['height'] : 0;\n topLegendHeight = position === 'top' ? smithchart.elementSpacing + bounds.height + ltheight : 0;\n bottomLegendHeight = position === 'bottom' ? smithchart.elementSpacing + bounds.height + ltheight : 0;\n }\n subtitleHeight = measureText(title.subtitle.text, font)['height'];\n modelTitleHeight = (title.text === '' || !title['visible']) ? 0 : (titleHeight);\n modelsubTitleHeight = (title['subtitle'].text === '' || !title['subtitle'].visible) ? 0 : (subtitleHeight);\n return {\n leftLegendWidth: leftLegendWidth, rightLegendWidth: rightLegendWidth,\n topLegendHeight: topLegendHeight, bottomLegendHeight: bottomLegendHeight,\n modelTitleHeight: modelTitleHeight, modelsubTitleHeight: modelsubTitleHeight\n };\n };\n return AreaBounds;\n}());\nexport { AreaBounds };\n","import { measureText } from '../../smithchart/utils/helper';\nimport { HorizontalLabelCollection, LabelRegion, Point, Direction } from '../../smithchart/utils/utils';\nimport { GridArcPoints, RadialLabelCollections } from '../../smithchart/utils/utils';\nimport { PathOption, TextOption, renderTextElement, _getEpsilonValue } from '../../smithchart/utils/helper';\n/* tslint:disable:no-string-literal */\nvar AxisRender = /** @class */ (function () {\n function AxisRender() {\n this.radialLabels = [-50, -20, -10, -5, -4, -3, -2, -1.5, -1, -0.8, -0.6, -0.4, -0.2,\n 0, 0.2, 0.4, 0.6, 0.8, 1, 1.5, 2, 3, 4, 5, 10, 20, 50];\n this.radialLabelCollections = [];\n this.horizontalLabelCollections = [];\n this.labelCollections = [];\n this.direction = new Direction();\n }\n AxisRender.prototype.renderArea = function (smithchart, bounds) {\n this.calculateChartArea(smithchart, bounds);\n this.calculateCircleMargin(smithchart, bounds);\n this.calculateXAxisRange(smithchart);\n this.calculateRAxisRange(smithchart);\n this.measureHorizontalAxis(smithchart);\n this.measureRadialAxis(smithchart);\n if (smithchart.horizontalAxis.visible) {\n this.updateHAxis(smithchart);\n }\n if (smithchart.radialAxis.visible) {\n this.updateRAxis(smithchart);\n }\n if (smithchart.horizontalAxis.visible) {\n this.drawHAxisLabels(smithchart);\n }\n if (smithchart.radialAxis.visible) {\n this.drawRAxisLabels(smithchart);\n }\n };\n AxisRender.prototype.updateHAxis = function (smithchart) {\n var majorGridLines = smithchart.horizontalAxis.majorGridLines;\n var minorGridLines = smithchart.horizontalAxis.minorGridLines;\n var axisLine = smithchart.horizontalAxis.axisLine;\n if (majorGridLines.visible) {\n this.updateHMajorGridLines(smithchart);\n }\n if (minorGridLines.visible) {\n this.updateHMinorGridLines(smithchart);\n }\n if (axisLine.visible) {\n this.updateHAxisLine(smithchart);\n }\n };\n AxisRender.prototype.updateRAxis = function (smithchart) {\n var majorGridLines = smithchart.radialAxis.majorGridLines;\n var minorGridLines = smithchart.radialAxis.minorGridLines;\n var axisLine = smithchart.radialAxis.axisLine;\n if (majorGridLines.visible) {\n this.updateRMajorGridLines(smithchart);\n }\n if (minorGridLines.visible) {\n this.updateRMinorGridLines(smithchart);\n }\n if (axisLine.visible) {\n this.updateRAxisLine(smithchart);\n }\n };\n AxisRender.prototype.measureHorizontalAxis = function (smithchart) {\n var majorGridLines = smithchart.horizontalAxis.majorGridLines;\n var minorGridLines = smithchart.horizontalAxis.minorGridLines;\n this.measureHMajorGridLines(smithchart);\n if (minorGridLines.visible) {\n this.measureHMinorGridLines(smithchart);\n }\n };\n AxisRender.prototype.measureRadialAxis = function (smithchart) {\n var majorGridLines = smithchart.radialAxis.majorGridLines;\n var minorGridLines = smithchart.radialAxis.minorGridLines;\n this.measureRMajorGridLines(smithchart);\n if (minorGridLines.visible) {\n this.measureRMinorGridLines(smithchart);\n }\n };\n AxisRender.prototype.calculateChartArea = function (smithchart, bounds) {\n var chartAreaWidth;\n var chartAreaHeight;\n var width = smithchart.availableSize.width;\n var height = smithchart.availableSize.height;\n var x;\n var y;\n width = bounds.width;\n height = bounds.height;\n chartAreaWidth = Math.min(width, height);\n chartAreaHeight = Math.min(width, height);\n x = bounds.x + (bounds.width / 2 - chartAreaWidth / 2);\n y = bounds.y + ((height - chartAreaHeight) / 2 > 0 ? (height - chartAreaHeight) / 2 : 0);\n smithchart.chartArea = { x: x, y: y, width: chartAreaWidth, height: chartAreaHeight };\n };\n AxisRender.prototype.calculateCircleMargin = function (smithchart, bounds) {\n var padding = 10;\n var maxLabelWidth = 0;\n var width = smithchart.chartArea.width;\n var radius = smithchart.radius;\n maxLabelWidth = this.maximumLabelLength(smithchart);\n var labelMargin = (smithchart.radialAxis.labelPosition === 'Outside') ? (maxLabelWidth + padding) : padding;\n var diameter = width - labelMargin * 2 > 0 ? width - labelMargin * 2 : 0;\n var actualRadius = diameter / 2;\n var circleCoefficient = radius > 1 ? 1 : (radius < 0.1 ? 0.1 : radius);\n this.areaRadius = actualRadius * circleCoefficient;\n this.circleLeftX = smithchart.chartArea.x + labelMargin + (actualRadius * (1 - circleCoefficient));\n this.circleTopY = smithchart.chartArea.y + labelMargin + (actualRadius * (1 - circleCoefficient));\n this.circleCenterX = this.circleLeftX + this.areaRadius;\n this.circleCenterY = bounds.y + bounds.height / 2;\n };\n AxisRender.prototype.maximumLabelLength = function (smithchart) {\n var maximumLabelLength = 0;\n var font = smithchart.horizontalAxis.labelStyle;\n var label;\n var textSize;\n for (var i = 0; i < this.radialLabels.length; i++) {\n label = this.radialLabels[i].toString();\n textSize = measureText(label, font);\n if (maximumLabelLength < textSize.width) {\n maximumLabelLength = textSize.width;\n }\n }\n return maximumLabelLength;\n };\n AxisRender.prototype.calculateAxisLabels = function () {\n var spacingBetweenGridLines = 30;\n var previousR = 0;\n var j = 0;\n var labels = [];\n var diameter = this.areaRadius * 2;\n for (var i = 0; i < 2; i = i + 0.1) {\n i = Math.round(i * 10) / 10;\n var coeff = 1 / (i + 1);\n var isOverlap1 = false;\n var isOverlap2 = false;\n var radius = ((diameter * coeff) / 2) * 2;\n if (previousR === 0.0 || i === 1) {\n previousR = radius;\n labels[j] = i;\n j++;\n continue;\n }\n if (i < 1) {\n isOverlap1 = this.isOverlap(1, diameter, radius, spacingBetweenGridLines);\n }\n if (i > 1) {\n isOverlap2 = this.isOverlap(2, diameter, radius, spacingBetweenGridLines);\n }\n if (isOverlap1 || isOverlap2) {\n continue;\n }\n if (previousR - radius >= spacingBetweenGridLines) {\n labels[j] = i;\n j++;\n previousR = radius;\n }\n }\n var staticlabels = [2, 3, 4, 5, 10, 20, 50];\n for (var k = 0; k < staticlabels.length; k++) {\n labels[j] = staticlabels[k];\n j++;\n }\n return labels;\n };\n AxisRender.prototype.isOverlap = function (x, d, previousR, spacingBetweenGridLines) {\n var coeff;\n var radius;\n coeff = 1 / (x + 1); // (1 / 1+r) find the radius for the x value\n radius = ((d * coeff) / 2) * 2;\n return previousR - radius < spacingBetweenGridLines;\n };\n AxisRender.prototype.calculateXAxisRange = function (smithchart) {\n var previousR = 0;\n var x;\n var coeff;\n var radius;\n var cx;\n var diameter = this.areaRadius * 2;\n var horizontalAxisLabels = this.calculateAxisLabels();\n var cy = this.circleCenterY;\n var circleStartX = this.circleLeftX;\n var leftX = this.circleLeftX;\n for (var i = 0; i < horizontalAxisLabels.length; i++) {\n x = horizontalAxisLabels[i];\n coeff = 1 / (x + 1);\n radius = (diameter * coeff) / 2;\n if (smithchart.renderType === 'Impedance') {\n leftX = circleStartX + diameter - (radius * 2);\n }\n cx = leftX + radius;\n this.horizontalLabelCollections.push({\n centerX: cx, centerY: cy, radius: radius, value: x, region: null\n });\n }\n };\n AxisRender.prototype.calculateRAxisRange = function (smithchart) {\n var arcCy;\n var arcRadius;\n var diameter = this.areaRadius * 2;\n var y;\n var point = new Point();\n if (smithchart.renderType === 'Impedance') {\n point.x = this.circleLeftX + diameter;\n point.y = this.circleTopY + this.areaRadius;\n }\n else {\n point.x = this.circleLeftX;\n point.y = this.circleTopY + this.areaRadius;\n }\n for (var i = 0; i < this.radialLabels.length; i++) {\n y = this.radialLabels[i];\n arcRadius = Math.abs(((1 / y) * diameter) / 2);\n if (smithchart.renderType === 'Impedance') {\n arcCy = y > 0 ? point.y - arcRadius : point.y + arcRadius;\n }\n else {\n arcCy = y < 0 ? point.y - arcRadius : point.y + arcRadius;\n }\n this.radialLabelCollections.push({\n centerX: point.x, centerY: arcCy, radius: arcRadius, value: y\n });\n }\n };\n AxisRender.prototype.measureHMajorGridLines = function (smithchart) {\n var arcPoints = [];\n var startPoint;\n var endPoint;\n var radialPoint1;\n var radialPoint2;\n var size;\n this.majorHGridArcPoints = [];\n for (var i = 0; i < this.horizontalLabelCollections.length; i++) {\n var circlePoint = new HorizontalLabelCollection();\n circlePoint = this.horizontalLabelCollections[i];\n arcPoints = this.calculateHMajorArcStartEndPoints(circlePoint.value);\n if (smithchart.renderType === 'Impedance') {\n radialPoint1 = arcPoints[0];\n radialPoint2 = arcPoints[1];\n }\n else {\n radialPoint1 = arcPoints[1];\n radialPoint2 = arcPoints[0];\n }\n size = { width: circlePoint.radius, height: circlePoint.radius };\n if (circlePoint.value !== 0.0 && circlePoint.value !== 50.0) {\n startPoint = this.intersectingCirclePoints(radialPoint1[0].centerX, radialPoint1[0].centerY, radialPoint1[0].radius, circlePoint.centerX, circlePoint.centerY, circlePoint.radius, smithchart.renderType);\n endPoint = this.intersectingCirclePoints(radialPoint2[0].centerX, radialPoint2[0].centerY, radialPoint2[0].radius, circlePoint.centerX, circlePoint.centerY, circlePoint.radius, smithchart.renderType);\n this.majorHGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: (smithchart.renderType === 'Impedance') ?\n this.direction['counterclockwise'] : this.direction['clockwise'],\n isLargeArc: true,\n size: size\n });\n }\n else {\n startPoint = { x: circlePoint.centerX + circlePoint.radius, y: circlePoint.centerY };\n endPoint = { x: circlePoint.centerX + circlePoint.radius, y: circlePoint.centerY - 0.05 };\n this.majorHGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: this.direction['clockwise'],\n isLargeArc: true,\n size: size\n });\n }\n }\n };\n AxisRender.prototype.measureRMajorGridLines = function (smithchart) {\n var epsilon;\n var radialPoint;\n var y;\n var arcPoints = [];\n var innerInterSectPoint;\n var outerInterSectPoint;\n var outterInterSectRadian;\n var outterInterSectAngle;\n var startPoint;\n var endPoint;\n var size;\n var sweepDirection;\n this.majorRGridArcPoints = [];\n this.labelCollections = [];\n epsilon = _getEpsilonValue();\n for (var i = 0; i < this.radialLabelCollections.length; i++) {\n radialPoint = this.radialLabelCollections[i];\n if (radialPoint.radius <= epsilon) {\n continue;\n }\n y = radialPoint.value;\n arcPoints = this.calculateMajorArcStartEndPoints(radialPoint, Math.abs(y), smithchart);\n innerInterSectPoint = arcPoints[0];\n outerInterSectPoint = arcPoints[1];\n outterInterSectRadian = this.circleXYRadianValue(this.circleCenterX, this.circleCenterY, outerInterSectPoint.x, outerInterSectPoint.y);\n outterInterSectAngle = outterInterSectRadian * (180 / Math.PI);\n if (y !== 0.0) {\n startPoint = { x: innerInterSectPoint.x, y: innerInterSectPoint.y };\n endPoint = { x: outerInterSectPoint.x, y: outerInterSectPoint.y };\n size = { width: radialPoint.radius, height: radialPoint.radius };\n sweepDirection = y > 0 ? this.direction['clockwise'] : this.direction['counterclockwise'];\n this.majorRGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n size: size,\n rotationAngle: 2 * Math.PI,\n isLargeArc: false,\n sweepDirection: sweepDirection\n });\n this.labelCollections.push({\n centerX: outerInterSectPoint.x,\n centerY: outerInterSectPoint.y,\n angle: outterInterSectAngle,\n value: y,\n radius: this.areaRadius,\n region: null\n });\n }\n else {\n startPoint = { x: this.circleLeftX, y: this.circleCenterY };\n endPoint = { x: this.circleCenterX + this.areaRadius, y: this.circleCenterY };\n this.majorRGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n size: null,\n rotationAngle: null,\n isLargeArc: null,\n sweepDirection: null\n });\n this.labelCollections.push({\n centerX: (smithchart.renderType === 'Impedance') ?\n (this.circleCenterX - this.areaRadius) : (this.circleCenterX + this.areaRadius),\n centerY: this.circleCenterY,\n angle: (smithchart.renderType === 'Impedance') ?\n 180 : 360,\n value: y,\n radius: this.areaRadius,\n region: null\n });\n }\n }\n };\n AxisRender.prototype.circleXYRadianValue = function (centerX, centerY, outterX, outterY) {\n var radian;\n radian = Math.atan2(outterY - centerY, outterX - centerX);\n radian = radian < 0 ? (radian + (360 * Math.PI / 180)) : radian;\n return radian;\n };\n AxisRender.prototype.calculateMajorArcStartEndPoints = function (radialPoint, value, smithchart) {\n var arcPoints = [];\n var circlePoint = [];\n var cx;\n var cy;\n cx = this.circleCenterX;\n cy = this.circleCenterY;\n if (value >= 10) {\n arcPoints[0] = (smithchart.renderType === 'Impedance') ?\n { x: cx + this.areaRadius, y: cy } : { x: cx - this.areaRadius, y: cy };\n }\n else if (value >= 3) {\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c.value === 10; });\n }\n else if (value >= 1) {\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c.value === 5; });\n }\n else {\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c.value === 3; });\n }\n if (circlePoint.length > 0) {\n arcPoints[0] = this.intersectingCirclePoints(radialPoint.centerX, radialPoint.centerY, radialPoint.radius, circlePoint[0].centerX, circlePoint[0].centerY, circlePoint[0].radius, smithchart.renderType);\n }\n arcPoints[1] = this.intersectingCirclePoints(radialPoint.centerX, radialPoint.centerY, radialPoint.radius, cx, cy, this.areaRadius, smithchart.renderType);\n return arcPoints;\n };\n AxisRender.prototype.calculateHMajorArcStartEndPoints = function (value) {\n var arcHPoints = [];\n var calValue1;\n var calValue2;\n if (value <= 0.3) {\n calValue1 = 2.0;\n calValue2 = -2.0;\n }\n else if (value <= 1.0) {\n calValue1 = 3.0;\n calValue2 = -3.0;\n }\n else if (value <= 2.0) {\n calValue1 = 5.0;\n calValue2 = -5.0;\n }\n else if (value <= 5.0) {\n calValue1 = 10.0;\n calValue2 = -10.0;\n }\n else {\n calValue1 = 50.0;\n calValue2 = -50.0;\n }\n arcHPoints[0] = this.radialLabelCollections.filter(function (c) { return c.value === calValue1; });\n arcHPoints[1] = this.radialLabelCollections.filter(function (c) { return c.value === calValue2; });\n return arcHPoints;\n };\n AxisRender.prototype.calculateMinorArcStartEndPoints = function (value) {\n var calValue1;\n var calValue2;\n var marcHPoints = [];\n if (value <= 0.1) {\n calValue1 = 1.0;\n calValue2 = -1.0;\n }\n else if (value <= 0.2) {\n calValue1 = 0.8;\n calValue2 = -0.8;\n }\n else if (value <= 0.3) {\n calValue1 = 0.4;\n calValue2 = -0.4;\n }\n else if (value <= 0.6) {\n calValue1 = 1.0;\n calValue2 = -1.0;\n }\n else if (value <= 1.0) {\n calValue1 = 1.5;\n calValue2 = -1.5;\n }\n else if (value <= 1.5) {\n calValue1 = 2.0;\n calValue2 = -2.0;\n }\n else if (value <= 2.0) {\n calValue1 = 1.0;\n calValue2 = -1.0;\n }\n else if (value <= 5.0) {\n calValue1 = 3.0;\n calValue2 = -3.0;\n }\n else {\n calValue1 = 10.0;\n calValue2 = -10.0;\n }\n marcHPoints[0] = this.radialLabelCollections.filter(function (c) { return c['value'] === calValue1; });\n marcHPoints[1] = this.radialLabelCollections.filter(function (c) { return c['value'] === calValue2; });\n return marcHPoints;\n };\n AxisRender.prototype.intersectingCirclePoints = function (x1, y1, r1, x2, y2, r2, renderType) {\n var cx;\n var cy;\n var midRadius;\n var radiusSquare;\n var a;\n var radiusSquare2;\n var c;\n var fx;\n var gx;\n var ix1;\n var ix2;\n var fy;\n var gy;\n var iy1;\n var iy2;\n var point = { x: 0, y: 0 };\n cx = x1 - x2;\n cy = y1 - y2;\n midRadius = Math.sqrt(cx * cx + cy * cy);\n radiusSquare = midRadius * midRadius;\n a = (r1 * r1 - r2 * r2) / (2 * radiusSquare);\n radiusSquare2 = (r1 * r1 - r2 * r2);\n c = Math.sqrt(2 * (r1 * r1 + r2 * r2) / radiusSquare - (radiusSquare2 * radiusSquare2) / (radiusSquare * radiusSquare) - 1);\n fx = (x1 + x2) / 2 + a * (x2 - x1);\n gx = c * (y2 - y1) / 2;\n ix1 = fx + gx;\n ix2 = fx - gx;\n fy = (y1 + y2) / 2 + a * (y2 - y1);\n gy = c * (x1 - x2) / 2;\n iy1 = fy + gy;\n iy2 = fy - gy;\n if (renderType === 'Impedance') {\n if (ix2 < ix1) {\n point.x = ix2;\n point.y = iy2;\n }\n else {\n point.x = ix1;\n point.y = iy1;\n }\n }\n else {\n if (ix1 > ix2) {\n point.x = ix1;\n point.y = iy1;\n }\n else {\n point.x = ix2;\n point.y = iy2;\n }\n }\n return { x: point.x, y: point.y };\n };\n AxisRender.prototype.updateHMajorGridLines = function (smithchart) {\n var majorGridLine = smithchart.horizontalAxis.majorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_horizontalAxisMajorGridLines' });\n path = this.calculateGridLinesPath(this.majorHGridArcPoints);\n var haxismgoptions = new PathOption(smithchart.element.id + '_horizontalAxisMajorGridLines', 'none', majorGridLine['width'], majorGridLine.color ? majorGridLine.color : smithchart.themeStyle.majorGridLine, majorGridLine['opacity'], majorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(haxismgoptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateRMajorGridLines = function (smithchart) {\n var majorGridLine = smithchart.radialAxis.majorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_radialAxisMajorGridLines' });\n path = this.calculateGridLinesPath(this.majorRGridArcPoints);\n var raxismgoptions = new PathOption(smithchart.element.id + '_radialAxisMajorGridLines', 'none', majorGridLine['width'], majorGridLine.color ? majorGridLine.color : smithchart.themeStyle.majorGridLine, majorGridLine['opacity'], majorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(raxismgoptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateHAxisLine = function (smithchart) {\n var radius = this.areaRadius;\n var point1;\n var point2;\n var size;\n var sweep;\n var isLargeArc;\n var angle;\n var axisLine = smithchart.horizontalAxis.axisLine;\n var direction;\n var groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_hAxisLine' });\n point1 = { x: this.circleCenterX + radius, y: this.circleCenterY };\n point2 = { x: this.circleCenterX + radius, y: (this.circleCenterY - 0.05) };\n size = { width: radius, height: radius };\n sweep = this.direction['clockwise'];\n isLargeArc = 1;\n angle = Math.PI * 2;\n direction = 'M' + '' + point1.x + ' ' + point1.y + ' ' + 'A' + ' ' + size.width +\n ' ' + size.height + ' ' + angle + ' ' + isLargeArc + ' ' + sweep + ' ' + point2.x + ' ' + point2.y + '';\n var options = new PathOption(smithchart.element.id + '_horizontalAxisLine', 'none', axisLine.width, axisLine.color ? axisLine.color : smithchart.themeStyle.axisLine, 1, axisLine.dashArray, direction);\n var element = smithchart.renderer.drawPath(options);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateRAxisLine = function (smithchart) {\n var radius = this.areaRadius;\n var point1;\n var point2;\n var size;\n var sweep;\n var isLargeArc;\n var angle;\n var axisLine = smithchart.radialAxis.axisLine;\n var direction;\n point1 = { x: this.circleCenterX - radius, y: this.circleCenterY };\n point2 = { x: this.circleCenterX + radius, y: this.circleCenterY };\n size = { width: 0, height: 0 };\n sweep = this.direction['counterclockwise'];\n isLargeArc = 0;\n angle = 0;\n direction = 'M' + ' ' + point1.x + ' ' + point1.y + ' ' + 'A' + ' ' +\n size.width + ' ' + size.height + ' ' + angle + ' ' + isLargeArc + ' ' + sweep + ' ' +\n point2.x + ' ' + point2.y + '';\n var options = new PathOption(smithchart.element.id + '_radialAxisLine', 'none', axisLine.width, axisLine.color ? axisLine.color : smithchart.themeStyle.axisLine, 1, axisLine.dashArray, direction);\n var groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_rAxisLine' });\n var element = smithchart.renderer.drawPath(options);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.drawHAxisLabels = function (smithchart) {\n var hAxis = smithchart.horizontalAxis;\n var font = smithchart.horizontalAxis.labelStyle;\n var circleAxis;\n var label;\n var x;\n var y;\n var textSize;\n var curLabel;\n var curLabelBounds;\n var curWidth;\n var curX;\n var preLabel;\n var preLabelBounds;\n var preWidth;\n var preX;\n var groupEle = smithchart.renderer.createGroup({ id: smithchart.element.id + '_HAxisLabels' });\n for (var i = 0; i < this.horizontalLabelCollections.length; i++) {\n circleAxis = this.horizontalLabelCollections[i];\n label = this.horizontalLabelCollections[i].value.toString();\n if (circleAxis.value !== 0.0) {\n x = (smithchart.renderType === 'Impedance') ?\n circleAxis.centerX - circleAxis.radius : circleAxis.centerX + circleAxis.radius;\n y = circleAxis.centerY;\n textSize = measureText(label, font);\n x = (smithchart.renderType === 'Impedance') ? x - textSize.width : x;\n if (hAxis.labelPosition === 'Outside') {\n y -= textSize.height / 4;\n }\n else {\n y += textSize.height;\n }\n this.horizontalLabelCollections[i].region = this.calculateRegion(label, textSize, x, y);\n if (hAxis.labelIntersectAction === 'Hide') {\n curLabel = this.horizontalLabelCollections[i];\n curLabelBounds = curLabel.region.bounds;\n curWidth = curLabelBounds.width;\n curX = curLabelBounds.x;\n for (var j = 1; j < i; j++) {\n preLabel = this.horizontalLabelCollections[j];\n preLabelBounds = preLabel.region.bounds;\n preWidth = preLabelBounds.width;\n preX = preLabelBounds.x;\n if ((smithchart.renderType === 'Impedance') &&\n (preX + preWidth) > (curX)) {\n label = '';\n }\n if ((smithchart.renderType === 'Admittance') &&\n (preX) < curX + curWidth) {\n label = '';\n }\n }\n }\n var axisLabelRenderEventArgs = { text: label.toString(), x: x, y: y,\n name: 'axisLabelRender', cancel: false };\n smithchart.trigger('axisLabelRender', axisLabelRenderEventArgs);\n var options = new TextOption(smithchart.element.id + '_HLabel_' + i, axisLabelRenderEventArgs.x, axisLabelRenderEventArgs.y, 'none', axisLabelRenderEventArgs.text);\n var color = font.color ? font.color : smithchart.themeStyle.axisLabel;\n var element = renderTextElement(options, font, color, groupEle);\n groupEle.appendChild(element);\n }\n }\n smithchart.svgObject.appendChild(groupEle);\n };\n AxisRender.prototype.drawRAxisLabels = function (smithchart) {\n var paddingRadius = 2;\n var font = smithchart.radialAxis.labelStyle;\n var interSectPoint = new RadialLabelCollections();\n var label;\n var textSize;\n var angle;\n var position;\n var textPosition;\n var curX;\n var curY;\n var curWidth;\n var curHeight;\n var curLabel;\n var curLabelBounds;\n var preX;\n var preY;\n var preWidth;\n var preHeight;\n var preLabel;\n var preLabelBounds;\n var rAxis = smithchart.radialAxis;\n var groupEle = smithchart.renderer.createGroup({ id: smithchart.element.id + '_RAxisLabels' });\n for (var i = 0; i < this.labelCollections.length; i++) {\n interSectPoint = this.labelCollections[i];\n label = interSectPoint.value.toString();\n textSize = measureText(label, font);\n angle = Math.round(interSectPoint.angle * 100) / 100;\n if (rAxis.labelPosition === 'Outside') {\n position = this.circlePointPosition(this.circleCenterX, this.circleCenterY, interSectPoint['angle'], this.areaRadius + paddingRadius);\n textPosition = this.setLabelsOutsidePosition(angle, position.x, position.y, textSize);\n }\n else {\n position = this.circlePointPosition(this.circleCenterX, this.circleCenterY, interSectPoint['angle'], this.areaRadius - paddingRadius);\n textPosition = this.setLabelsInsidePosition(angle, position.x, position.y, textSize);\n }\n this.labelCollections[i]['region'] = this.calculateRegion(label, textSize, textPosition.x, textPosition.y);\n if (rAxis.labelIntersectAction === 'Hide') {\n curLabel = this.labelCollections[i];\n curLabelBounds = curLabel['region']['bounds'];\n curWidth = curLabelBounds['width'];\n curHeight = curLabelBounds['height'];\n curX = curLabelBounds['x'];\n curY = curLabelBounds['y'];\n for (var j = 0; j < i; j++) {\n preLabel = this.labelCollections[j];\n preLabelBounds = preLabel['region']['bounds'];\n preWidth = preLabelBounds['width'];\n preHeight = preLabelBounds['height'];\n preX = preLabelBounds['x'];\n preY = preLabelBounds['y'];\n if ((preX <= curX + curWidth) && (curX <= preX + preWidth) && (preY <= curY + curHeight)\n && (curY <= preY + preHeight)) {\n label = ' ';\n }\n }\n }\n var axisLabelRenderEventArgs = { text: label.toString(), x: textPosition.x,\n y: textPosition.y, name: 'axisLabelRender', cancel: false };\n smithchart.trigger('axisLabelRender', axisLabelRenderEventArgs);\n var options = new TextOption(smithchart.element.id + '_RLabel_' + i, axisLabelRenderEventArgs.x, axisLabelRenderEventArgs.y, 'none', axisLabelRenderEventArgs.text);\n var color = font.color ? font.color : smithchart.themeStyle.axisLabel;\n var element = renderTextElement(options, font, color, groupEle);\n groupEle.appendChild(element);\n }\n smithchart.svgObject.appendChild(groupEle);\n };\n AxisRender.prototype.calculateRegion = function (label, textSize, textPositionX, textPositionY) {\n var xAxisLabelRegions = new LabelRegion();\n var bounds = { x: textPositionX, y: textPositionY, width: textSize.width, height: textSize.height };\n xAxisLabelRegions = { bounds: bounds, labelText: label };\n return xAxisLabelRegions;\n };\n AxisRender.prototype.updateHMinorGridLines = function (smithchart) {\n var minorGridLine = smithchart.horizontalAxis.minorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_horizontalAxisMinorGridLines' });\n path = this.calculateGridLinesPath(this.minorHGridArcPoints);\n var haxismioptions = new PathOption(smithchart.element.id + '_horizontalAxisMinorGridLines', 'none', minorGridLine['width'], minorGridLine.color ? minorGridLine.color : smithchart.themeStyle.minorGridLine, minorGridLine['opacity'], minorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(haxismioptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateRMinorGridLines = function (smithchart) {\n var minorGridLine = smithchart.radialAxis.minorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_radialAxisMinorGridLines' });\n path = this.calculateGridLinesPath(this.minorGridArcPoints);\n var raxismioptions = new PathOption(smithchart.element.id + '_radialAxisMinorGridLines', 'none', minorGridLine['width'], minorGridLine.color ? minorGridLine.color : smithchart.themeStyle.minorGridLine, minorGridLine['opacity'], minorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(raxismioptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.calculateGridLinesPath = function (points) {\n var x1;\n var y1;\n var x2;\n var y2;\n var r1;\n var r2;\n var pathSegment = new GridArcPoints();\n var angle;\n var isLargeArc;\n var sweep;\n var sb = '';\n var path;\n for (var i = 0; i < points.length; i++) {\n pathSegment = points[i];\n x1 = pathSegment.startPoint.x;\n y1 = pathSegment.startPoint.y;\n x2 = pathSegment.endPoint.x;\n y2 = pathSegment.endPoint.y;\n r1 = pathSegment.size ? pathSegment.size.width : 0;\n r2 = pathSegment.size ? pathSegment.size.height : 0;\n angle = pathSegment.rotationAngle ? pathSegment.rotationAngle : 0;\n isLargeArc = pathSegment.isLargeArc ? 1 : 0;\n sweep = pathSegment.sweepDirection ? pathSegment.sweepDirection : 0;\n sb = sb + ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + r1 + ' ' + r2 + ' ' +\n angle + ' ' + isLargeArc + ' ' + sweep + ' ' + x2 + ' ' + y2 + ' ');\n }\n path = sb.toString();\n return path;\n };\n AxisRender.prototype.measureHMinorGridLines = function (smithchart) {\n var radialPoint1;\n var radialPoint2;\n var k = 0;\n var arcPoints = [];\n var isLargeArc;\n var startPoint;\n var endPoint;\n var size;\n var cx;\n var maxCount = smithchart.horizontalAxis.minorGridLines.count;\n var diameter;\n var previous;\n var next;\n var space;\n var count;\n var interval;\n var radius;\n var leftX;\n this.minorHGridArcPoints = [];\n diameter = this.areaRadius * 2;\n for (var i = 0; i < this.horizontalLabelCollections.length - 3; i++) {\n previous = this.horizontalLabelCollections[i];\n next = this.horizontalLabelCollections[i + 1];\n space = (previous['radius'] - next['radius']) * 2;\n count = Math.floor((maxCount / 100) * space);\n interval = space / count;\n for (var j = 0; j < count; j++) {\n radius = next['radius'] + (j * interval) / 2;\n leftX = (smithchart.renderType === 'Impedance') ?\n (this.circleLeftX + diameter) - (radius * 2) : this.circleLeftX;\n cx = leftX + radius;\n isLargeArc = next['value'] > 5;\n arcPoints = this.calculateMinorArcStartEndPoints(next['value']);\n if (smithchart.renderType === 'Impedance') {\n radialPoint1 = arcPoints[0];\n radialPoint2 = arcPoints[1];\n }\n else {\n radialPoint1 = arcPoints[1];\n radialPoint2 = arcPoints[0];\n }\n startPoint = this.intersectingCirclePoints(radialPoint1[0].centerX, radialPoint1[0].centerY, radialPoint1[0].radius, cx, previous['centerY'], radius, smithchart.renderType);\n endPoint = this.intersectingCirclePoints(radialPoint2[0].centerX, radialPoint2[0].centerY, radialPoint2[0].radius, cx, previous['centerY'], radius, smithchart.renderType);\n size = { width: radius, height: radius };\n this.minorHGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: (smithchart.renderType === 'Impedance') ?\n this.direction['counterclockwise'] : this.direction['clockwise'],\n isLargeArc: isLargeArc,\n size: size\n });\n k++;\n }\n }\n };\n AxisRender.prototype.measureRMinorGridLines = function (smithchart) {\n var maxCount = smithchart.radialAxis.minorGridLines.count;\n var arcCx;\n var nextAngle;\n var k = 0;\n var betweenAngle;\n var circlePoint;\n var circumference;\n var arcStartX;\n var arcStartY;\n var arcStartPoint;\n var previous;\n var next;\n var size;\n var distance;\n var count;\n var interval;\n var centerValue;\n circumference = Math.PI * (this.areaRadius * 2);\n arcStartX = arcCx = (smithchart.renderType === 'Impedance') ?\n this.circleCenterX + this.areaRadius : this.circleCenterX - this.areaRadius;\n arcStartY = this.circleCenterY;\n this.minorGridArcPoints = [];\n arcStartPoint = { x: arcStartX, y: arcStartY };\n for (var i = 2; i < this.labelCollections.length - 3; i++) {\n previous = this.labelCollections[i];\n next = this.labelCollections[i + 1];\n if (smithchart.renderType === 'Impedance') {\n nextAngle = next['angle'] === 360 ? 0 : next['angle'];\n betweenAngle = Math.abs(nextAngle - previous['angle']);\n }\n else {\n nextAngle = previous['angle'] === 360 ? 0 : previous['angle'];\n betweenAngle = Math.abs(nextAngle - next['angle']);\n }\n distance = (circumference / 360) * betweenAngle;\n count = Math.floor((maxCount / 100) * distance);\n interval = betweenAngle / count;\n centerValue = next['value'] > 0 ? next['value'] : previous['value'];\n circlePoint = this.minorGridLineArcIntersectCircle(Math.abs(centerValue));\n for (var j = 1; j < count; j++) {\n var outterInterSectAngle = (interval * j) + (previous['angle'] === 360 ? nextAngle : previous['angle']);\n var outerInterSectPoint = this.circlePointPosition(this.circleCenterX, this.circleCenterY, outterInterSectAngle, this.areaRadius);\n var radius = this.arcRadius(arcStartPoint, outerInterSectPoint, outterInterSectAngle);\n var arcCy = outterInterSectAngle > 180 ? this.circleCenterY - radius : this.circleCenterY + radius;\n var innerInterSectPoint = this.intersectingCirclePoints(arcCx, arcCy, radius, circlePoint[0].centerX, circlePoint[0].centerY, circlePoint[0].radius, smithchart.renderType);\n var startPoint = { x: innerInterSectPoint.x, y: innerInterSectPoint.y };\n var endPoint = { x: outerInterSectPoint.x, y: outerInterSectPoint.y };\n size = { width: radius, height: radius };\n var sweepDirection = previous['value'] >= 0 ? this.direction['clockwise'] : this.direction['counterclockwise'];\n this.minorGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: sweepDirection,\n isLargeArc: false,\n size: size\n });\n k++;\n }\n }\n };\n AxisRender.prototype.minorGridLineArcIntersectCircle = function (centerValue) {\n var circlePoint;\n var calValue;\n if (centerValue >= 3) {\n calValue = 20;\n }\n else if (centerValue >= 1.5) {\n calValue = 10;\n }\n else if (centerValue >= 0.6) {\n calValue = 3;\n }\n else {\n calValue = 2;\n }\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c['value'] === calValue; });\n return circlePoint;\n };\n AxisRender.prototype.circlePointPosition = function (cx, cy, angle, r) {\n var pointX;\n var pointY;\n var radian;\n radian = angle * (Math.PI / 180);\n pointX = cx + r * Math.cos(radian);\n pointY = cy + r * Math.sin(radian);\n return { x: pointX, y: pointY };\n };\n AxisRender.prototype.setLabelsInsidePosition = function (angle, px, py, textSize) {\n var x = px;\n var y = py;\n if (angle === 0 || angle === 360) {\n x -= textSize.width;\n y -= textSize.height / 2;\n }\n else if (angle === 90) {\n x -= textSize.width;\n y += textSize.height / 8;\n }\n else if (angle === 180) {\n y += textSize.height;\n }\n else if (angle === 270) {\n y += textSize.height / 2;\n }\n else if (angle > 0 && angle <= 20) {\n x -= (textSize.width);\n }\n else if (angle > 20 && angle <= 60) {\n x -= (textSize.width + textSize.width / 2);\n y += textSize.height / 2;\n }\n else if (angle > 60 && angle < 90) {\n x -= (textSize.width + textSize.width / 4);\n y += textSize.height / 4;\n }\n else if (angle > 90 && angle <= 135) {\n x -= (textSize.width / 2);\n y += (textSize.height) / 16;\n }\n else if (angle > 135 && angle <= 150) {\n x += (textSize.width / 2);\n y += (textSize.height / 2);\n }\n else if (angle > 150 && angle < 180) {\n x += (textSize.width / 2);\n y += (textSize.height);\n }\n else if (angle > 180 && angle <= 210) {\n x += (textSize.width / 6);\n y += (textSize.height / 6);\n }\n else if (angle > 210 && angle < 240) {\n y += (textSize.height / 4);\n }\n else if (angle > 225 && angle < 270) {\n y += (textSize.height / 3);\n }\n else if (angle > 270 && angle <= 300) {\n x -= (textSize.width + textSize.width / 4);\n y += (textSize.height / 4);\n }\n else if (angle > 300 && angle <= 330) {\n x -= (textSize.width + textSize.width / 3);\n y += (textSize.height / 4);\n }\n else if (angle > 330 && angle <= 340) {\n x -= (textSize.width + textSize.width / 2);\n y += textSize.height / 4;\n }\n else if (angle > 340) {\n x -= textSize.width;\n y += textSize.height / 8;\n }\n return { x: x, y: y };\n };\n AxisRender.prototype.setLabelsOutsidePosition = function (angle, px, py, textSize) {\n var x = px;\n var y = py;\n if (angle === 90) {\n x -= textSize.width / 2;\n y += textSize.height;\n }\n else if (angle === 180) {\n x -= (textSize.width + 5);\n y -= textSize.height / 4;\n }\n else if (angle === 270) {\n x -= textSize.width / 2;\n y -= textSize.height / 4;\n }\n else if (angle === 360) {\n x += 5;\n y -= textSize.height / 2;\n }\n else if (angle > 0 && angle <= 30) {\n x += textSize.width / 4;\n y += textSize.height / 8;\n }\n else if (angle > 30 && angle <= 60) {\n x += textSize.width / 2;\n y += textSize.height / 4;\n }\n else if (angle > 60 && angle <= 90) {\n x -= textSize.width / 2;\n y += textSize.height;\n }\n else if (angle > 90 && angle <= 135) {\n x -= textSize.width;\n y += textSize.height;\n }\n else if (angle > 135 && angle <= 180) {\n x -= (textSize.width + textSize.width / 4);\n y += textSize.height / 4;\n }\n else if (angle > 180 && angle <= 210) {\n x -= textSize.width + textSize.width / 4;\n y -= textSize.height / 4;\n }\n else if (angle > 210 && angle <= 270) {\n x -= textSize.width;\n y -= textSize.height / 4;\n }\n else if (angle > 270 && angle <= 340) {\n y -= textSize.height / 4;\n }\n else if (angle > 340) {\n y += textSize.height / 4;\n x += textSize.width / 6;\n }\n return { x: x, y: y };\n };\n AxisRender.prototype.arcRadius = function (startPoint, endPoint, angle) {\n var mx;\n var my;\n var u;\n var t;\n var cy;\n var radius;\n var radian;\n radian = angle > 180 ? (90 * Math.PI / 180) : (270 * Math.PI / 180); // Angle 90 and 270 used for calculating upper and lower circle\n mx = (endPoint.x - startPoint.x) / 2;\n my = (endPoint.y - startPoint.y) / 2;\n u = (Math.cos(radian) * my - Math.sin(radian) * mx) / (Math.cos(radian) * mx + Math.sin(radian) * my);\n t = (my - mx * u) / Math.sin(radian);\n cy = startPoint.y + Math.sin(radian) * t;\n radius = Math.abs(startPoint.y - cy);\n return radius;\n };\n return AxisRender;\n}());\nexport { AxisRender };\n","import { CircleOption, PathOption } from '../../smithchart/utils/helper';\nimport { SmithchartSize, MarkerOptions } from '../../smithchart/utils/utils';\n/* tslint:disable:no-string-literal */\nvar Marker = /** @class */ (function () {\n function Marker() {\n }\n Marker.prototype.drawMarker = function (smithchart, seriesindex, groupElement, pointsRegion) {\n if (smithchart.series[seriesindex].marker.visible) {\n var marker = smithchart.series[seriesindex].marker;\n var count = smithchart.series[seriesindex].points.length - 1;\n var width = marker.width;\n var height = marker.height;\n var symbolName = marker.shape;\n var gmEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' +\n '_series' + seriesindex + '_Marker' });\n groupElement.appendChild(gmEle);\n var borderWidth = marker.border.width;\n var borderColor = marker.border.color;\n var opacity = marker.opacity;\n var fill = marker.fill ? marker.fill : (smithchart.series[seriesindex].fill ||\n smithchart.seriesColors[seriesindex % smithchart.seriesColors.length]);\n for (var i = 0; i < count + 1; i++) {\n var location_1 = pointsRegion[i]['point'];\n var pointIndex = i;\n var options = new MarkerOptions(smithchart.element.id + '_Series' + seriesindex + '_Points' + pointIndex + '_Marker' + pointIndex, fill, borderColor, borderWidth, opacity);\n gmEle.appendChild(this.drawSymbol(symbolName, marker.imageUrl, location_1, new SmithchartSize(width, height), options, smithchart));\n }\n }\n };\n Marker.prototype.drawSymbol = function (symbolName, url, location, size, options, smithchart) {\n var markerEle;\n var shape = symbolName.toLowerCase();\n var circleOptions;\n var pathOptions;\n var path;\n var border = { color: options['borderColor'], width: options['borderWidth'] };\n var opacity = options.opacity;\n var startX = location.x;\n var startY = location.y;\n var radius = Math.sqrt(size.height * size.height + size.width * size.width) / 2;\n switch (shape) {\n case 'circle':\n circleOptions = new CircleOption(options['id'], options['fill'], border, opacity, location.x, location.y, radius, null);\n markerEle = smithchart.renderer.drawCircle(circleOptions);\n break;\n case 'rectangle':\n path = 'M' + ' ' + (startX + (-size.width / 2)) + ' ' + (startY + (-size.height / 2)) +\n ' ' + 'L' + ' ' + (startX + (size.width / 2)) + ' ' + (startY + (-size.height / 2)) + ' ' +\n 'L' + ' ' + (startX + (size.width / 2)) + ' ' + (startY + (size.height / 2)) +\n ' ' + 'L' + ' ' + (startX + (-size.width / 2)) +\n ' ' + (startY + (size.height / 2)) + ' ' + 'L' + ' ' +\n (startX + (-size.width / 2)) + ' ' + (startY + (-size.height / 2)) + 'z';\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'triangle':\n path = 'M' + ' ' + (startX + (-size.width / 2)) + ' ' + (startY + (size.height / 2)) + ' ' + 'L' + ' ' + (startX) + ' ' +\n (startY + (-size.height / 2)) + ' ' + 'L' + ' ' + (startX + (size.width / 2)) + ' ' +\n (startY + (size.height / 2)) + ' ' + 'L' + ' ' +\n (startX + (-size.width / 2)) + ' ' + (startY + (size.height / 2)) + 'z';\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'diamond':\n path = 'M' + ' ' + (startX + (-size.width / 2)) + ' ' + (startY) + ' ' + 'L' + ' ' +\n (startX) + ' ' + (startY + (-size.height / 2)) + ' ' + 'L' + ' ' + (startX + (size.width / 2)) + ' ' +\n (startY) + ' ' + 'L' + ' ' + (startX) + ' ' + (startY + (size.height / 2)) + ' ' + 'L' + ' ' +\n (startX + (-size.width / 2)) + ' ' + (startY) + 'z';\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'pentagon':\n var eq = 72;\n for (var i = 0; i <= 5; i++) {\n var xValue = radius * Math.cos((Math.PI / 180) * (i * eq));\n var yValue = radius * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (startX + xValue) + ' ' + (startY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (startX + xValue) + ' ' + (startY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n }\n return markerEle;\n };\n return Marker;\n}());\nexport { Marker };\n","/**\n *\n */\nimport { createElement } from '@syncfusion/ej2-base';\nimport { measureText } from '../../smithchart/utils/helper';\nimport { getTemplateFunction, convertElementFromLabel, PathOption } from '../../smithchart/utils/helper';\nimport { SmithchartLabelPosition } from '../../smithchart/utils/utils';\nimport { LabelOption } from '../../smithchart/utils/utils';\n/* tslint:disable:no-string-literal */\nvar DataLabel = /** @class */ (function () {\n function DataLabel() {\n this.textOptions = [];\n this.labelOptions = [];\n this.allPoints = [];\n }\n DataLabel.prototype.drawDataLabel = function (smithchart, seriesindex, groupElement, pointsRegion, bounds) {\n this.textOptions = [];\n this.allPoints = [];\n var margin = smithchart.margin;\n var pointIndex;\n var marker = smithchart.series[seriesindex].marker;\n var region;\n var labelPosition;\n var labelText;\n var textSize;\n var dataLabel = marker.dataLabel;\n var font = dataLabel.textStyle;\n var count = pointsRegion.length;\n for (var i = 0; i < count; i++) {\n labelText = smithchart.series[seriesindex].points[i].reactance.toString();\n textSize = measureText(labelText, font);\n region = pointsRegion[i]['point'];\n var xPos = region.x - textSize.width / 2;\n var yPos = region.y - (textSize.height + marker['height'] + (margin.top));\n var width = textSize.width + (margin.left / 2) + (margin.right / 2);\n var height = textSize.height + (margin.top / 2) + (margin.bottom / 2);\n pointIndex = i;\n labelPosition = new SmithchartLabelPosition();\n labelPosition = { textX: xPos + (margin.left / 2), textY: yPos + (height / 2) + margin.top / 2, x: xPos, y: yPos };\n this.textOptions[i] = {\n id: smithchart.element.id + '_Series' + seriesindex + '_Points' + pointIndex + '_dataLabel' + '_displayText' + i,\n x: labelPosition['textX'],\n y: labelPosition['textY'],\n fill: 'black',\n text: labelText,\n font: font,\n xPosition: xPos,\n yPosition: yPos,\n width: width,\n height: height,\n location: region,\n labelOptions: labelPosition,\n visible: true,\n connectorFlag: null\n };\n }\n var labelOption = new LabelOption();\n labelOption.textOptions = this.textOptions;\n this.labelOptions.push(labelOption);\n this.drawDatalabelSymbol(smithchart, seriesindex, dataLabel, groupElement, bounds, pointsRegion);\n };\n DataLabel.prototype.calculateSmartLabels = function (points, seriesIndex) {\n var length = points['textOptions'].length;\n var count = 0;\n for (var k = 0; k < length; k++) {\n this.allPoints[this.allPoints.length] = points['textOptions'][k];\n this.connectorFlag = false;\n this.compareDataLabels(k, points, count, seriesIndex);\n this.labelOptions[seriesIndex]['textOptions'][k] = points['textOptions'][k];\n this.labelOptions[seriesIndex]['textOptions'][k].connectorFlag = this.connectorFlag;\n }\n };\n DataLabel.prototype.compareDataLabels = function (i, points, count, m) {\n var length = this.allPoints.length;\n var padding = 10;\n var collide;\n var currentLabel;\n var prevLabel;\n for (var j = 0; j < length; j++) {\n prevLabel = this.allPoints[j];\n currentLabel = this.allPoints[length - 1];\n collide = this.isCollide(prevLabel, currentLabel);\n if (collide) {\n this.connectorFlag = true;\n switch (count) {\n case 0:\n // Right\n this.resetValues(currentLabel);\n this.prevLabel = prevLabel;\n currentLabel['xPosition'] = this.prevLabel['xPosition'] + (this.prevLabel['width'] / 2 +\n currentLabel['width'] / 2 + padding);\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 1:\n // Right Bottom\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] + this.prevLabel['width'] / 2 +\n currentLabel['width'] / 2 + padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = currentLabel['location'].y + currentLabel['height'] / 2 + padding / 2;\n currentLabel['y'] = currentLabel['yPosition'] + ((currentLabel['height'] / 2)) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 2:\n // Bottom\n this.resetValues(currentLabel);\n currentLabel['yPosition'] = currentLabel['location'].y + currentLabel['height'] / 2 + padding / 2;\n currentLabel['y'] = currentLabel['yPosition'] + (currentLabel['height'] / 2) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 3:\n // Left Bottom\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] - this.prevLabel['width'] / 2\n - currentLabel['width'] / 2 - padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = currentLabel['height'] / 2 + currentLabel['location'].y + padding / 2;\n currentLabel['y'] = currentLabel['yPosition'] + ((currentLabel['height'] / 2)) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 4:\n // Left\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = (this.prevLabel['xPosition'] - this.prevLabel['width'] / 2 -\n currentLabel['width'] / 2 - padding);\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 5:\n //Left Top\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] - this.prevLabel['width'] / 2 -\n currentLabel['width'] / 2 - padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = this.prevLabel['yPosition'] - currentLabel['height'] - padding;\n currentLabel['y'] = currentLabel['yPosition'] + currentLabel['height'] / 2 + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 6:\n // Top\n this.resetValues(currentLabel);\n currentLabel['yPosition'] = (this.prevLabel['yPosition']) - (currentLabel['height'] + padding);\n currentLabel['y'] = currentLabel['yPosition'] + (currentLabel['height'] / 2) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 7:\n // Right Top\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] + this.prevLabel['width'] / 2 +\n currentLabel['width'] / 2 + padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = this.prevLabel['yPosition'] - currentLabel['height'] - padding;\n currentLabel['y'] = currentLabel['yPosition'] + (currentLabel['height'] / 2) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 8:\n count = 0;\n this.compareDataLabels(i, points, count, m);\n break;\n }\n }\n }\n };\n DataLabel.prototype.isCollide = function (dataLabel1, dataLabel2) {\n var state = false;\n if (dataLabel1 !== dataLabel2) {\n state = !(((dataLabel1['y'] + dataLabel1['height']) < (dataLabel2['y'])) ||\n (dataLabel1['y'] > (dataLabel2['y'] + dataLabel2['height'])) ||\n ((dataLabel1['x'] + dataLabel1['width'] / 2) < dataLabel2['x'] - dataLabel2['width'] / 2) ||\n (dataLabel1['x'] - dataLabel1['width'] / 2 > (dataLabel2['x'] + dataLabel2['width'] / 2)));\n }\n return state;\n };\n DataLabel.prototype.resetValues = function (currentPoint) {\n currentPoint['xPosition'] = currentPoint['labelOptions']['x'];\n currentPoint['yPosition'] = currentPoint['labelOptions']['y'];\n currentPoint['x'] = currentPoint['labelOptions']['textX'];\n currentPoint['y'] = currentPoint['labelOptions']['textY'];\n };\n DataLabel.prototype.drawConnectorLines = function (smithchart, seriesIndex, index, currentPoint, groupElement) {\n var xPos = currentPoint['xPosition'];\n var yPos = currentPoint['yPosition'];\n var location = currentPoint['location'];\n var endY;\n if (location.y > currentPoint['y']) {\n endY = (currentPoint['y']);\n }\n else {\n endY = (currentPoint['y'] - currentPoint['height'] / 2); // bottom\n }\n var connectorDirection = 'M' + ' ' + (location.x) + ' ' + (location.y) + ' ' + 'L' + ' ' +\n (currentPoint['x']) + ' ' + (endY);\n var connectorLineValues = smithchart.series[seriesIndex].marker.dataLabel.connectorLine;\n var stroke = connectorLineValues.color ? connectorLineValues.color :\n (smithchart.series[seriesIndex].fill ||\n smithchart.seriesColors[seriesIndex % smithchart.seriesColors.length]);\n var options = new PathOption(smithchart.element.id + '_dataLabelConnectorLine' + '_series' + seriesIndex + '_point' + index, 'none', connectorLineValues.width, stroke, 1, 'none', connectorDirection);\n var element = smithchart.renderer.drawPath(options);\n groupElement.appendChild(element);\n };\n DataLabel.prototype.drawDatalabelSymbol = function (smithchart, seriesindex, dataLabel, groupElement, bounds, pointsRegion) {\n for (var i = 0; i < smithchart.series[seriesindex].points.length; i++) {\n if (dataLabel.template) {\n var labelTemplateElement = createElement('div', {\n id: smithchart.element.id + '_seriesIndex_' + seriesindex + '_Label_Template_Group',\n className: 'template',\n styles: 'position: absolute;'\n /* 'top:' + bounds['x'] + 'px;' +\n 'left:' + bounds['y'] + 'px;' +\n 'height:' + smithchart.availableSize.height + 'px;' +\n 'width:' + smithchart.availableSize.width + 'px;'*/\n });\n document.getElementById(smithchart.element.id + '_Secondary_Element').appendChild(labelTemplateElement);\n var templateFn = void 0;\n var labelElement = void 0;\n var id = dataLabel.template + '_seriesIndex' + seriesindex + '_pointIndex' + i + smithchart.element.id;\n var data = { point: smithchart.series[seriesindex].points[i].reactance };\n templateFn = getTemplateFunction(dataLabel.template);\n var templateElement = templateFn(smithchart);\n labelElement = convertElementFromLabel(templateElement, id, data, seriesindex, smithchart);\n labelTemplateElement.appendChild(labelElement);\n labelElement.style.left = pointsRegion[i].point.x - labelElement.offsetWidth / 2 + 'px';\n labelElement.style.top = pointsRegion[i].point.y - labelElement.offsetHeight -\n smithchart.series[seriesindex].marker.height / 2 + 'px';\n var left = parseInt(labelElement.style.left, 10);\n var top_1 = parseInt(labelElement.style.top, 10);\n var width = labelElement.offsetWidth;\n var height = labelElement.offsetHeight;\n var region = pointsRegion[i]['point'];\n var labelPosition = { textX: left, textY: top_1,\n x: left, y: top_1 };\n this.labelOptions[seriesindex]['textOptions'][i] = {\n id: id,\n x: left,\n y: top_1,\n fill: 'black',\n text: '',\n font: dataLabel.textStyle,\n xPosition: left,\n yPosition: top_1,\n width: width,\n height: height,\n location: region,\n labelOptions: labelPosition,\n visible: true,\n connectorFlag: null\n };\n }\n }\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { Marker } from './marker';\nimport { TextOption, renderTextElement } from '../../smithchart/utils/helper';\nimport { SmithchartRect, LineSegment, PointRegion, DataLabelTextOptions } from '../../smithchart/utils/utils';\nimport { _getEpsilonValue, PathOption, RectOption, getAnimationFunction, templateAnimate } from '../../smithchart/utils/helper';\nimport { animationComplete } from '../../smithchart/model/constant';\nimport { DataLabel } from '../../smithchart/series/datalabel';\nimport { Animation } from '@syncfusion/ej2-base';\n/* tslint:disable:no-string-literal */\nvar SeriesRender = /** @class */ (function () {\n function SeriesRender() {\n this.xValues = [];\n this.yValues = [];\n this.pointsRegion = [];\n this.lineSegments = [];\n this.location = [];\n this.dataLabel = new DataLabel();\n }\n SeriesRender.prototype.processData = function (series) {\n var dataArray = series.dataSource;\n var resistance = series.resistance;\n var reactance = series.reactance;\n series.points = [];\n for (var i = 0; i < dataArray.length; i++) {\n series.points.push({ resistance: dataArray[i][resistance],\n reactance: dataArray[i][reactance] });\n }\n };\n // tslint:disable:max-func-body-length\n SeriesRender.prototype.draw = function (smithchart, axisRender, bounds) {\n var groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_seriesCollections' });\n var resistantCx;\n var reactanceCy;\n var series = smithchart.series;\n var seriesLength = series.length;\n var chartAreaRadius = axisRender.areaRadius;\n var interSectPoint;\n var index;\n for (var m = 0; m < seriesLength; m++) {\n var seriesIndex = m;\n if (series[m].dataSource && series[m].resistance && series[m].reactance) {\n this.processData(series[m]);\n }\n this.pointsRegion[m] = [];\n this.location[m] = [];\n for (var j = 0; j < series[m].points.length; j++) {\n this.xValues[j] = series[m].points[j]['resistance'];\n this.yValues[j] = series[m].points[j]['reactance'];\n }\n var chartAreaCx = axisRender.circleCenterX;\n var chartAreaCy = axisRender.circleCenterY;\n var diameter = axisRender.areaRadius * 2;\n var reactanceStartPoint = { x: chartAreaCx + ((smithchart.renderType === 'Impedance') ?\n chartAreaRadius : -chartAreaRadius), y: chartAreaCy };\n var resistantCy = chartAreaCy;\n var reactanceCx = reactanceStartPoint.x;\n for (var k = 0; k < series[m].points.length; k++) {\n var resistance = this.xValues[k];\n var resistantR = (diameter * (1 / (resistance + 1))) / 2;\n var reactance = this.yValues[k];\n var reactanceR = Math.abs(((1 / reactance) * diameter) / 2);\n if (smithchart.renderType === 'Impedance') {\n reactanceCy = reactance > 0 ? chartAreaCy - reactanceR : chartAreaCy + reactanceR;\n resistantCx = (axisRender.circleLeftX + diameter - resistantR);\n }\n else {\n reactanceCy = reactance < 0 ? chartAreaCy - reactanceR : chartAreaCy + reactanceR;\n resistantCx = (axisRender.circleLeftX + resistantR);\n }\n interSectPoint = axisRender.intersectingCirclePoints(reactanceCx, reactanceCy, reactanceR, resistantCx, resistantCy, resistantR, smithchart.renderType);\n var epsilon = _getEpsilonValue();\n if (Math.abs(reactance) < epsilon) {\n interSectPoint.x = (smithchart.renderType === 'Impedance') ?\n resistantCx - resistantR : resistantCx + resistantR;\n interSectPoint.y = chartAreaCy;\n }\n this.pointsRegion[m][k] = new PointRegion();\n this.pointsRegion[m][k] = { point: interSectPoint, x: resistance, y: reactance };\n this.location[m][k] = { x: interSectPoint.x, y: interSectPoint.y };\n }\n for (var i = 0; i < series[m].points.length - 1; i++) {\n index = i + 1;\n this.lineSegments[i] = new LineSegment();\n this.lineSegments[i] = { x1: this.xValues[i], y1: this.yValues[i], x2: this.xValues[index], y2: this.yValues[index] };\n }\n smithchart.svgObject.appendChild(groupElement);\n this.drawSeries(smithchart, seriesIndex, groupElement, bounds);\n }\n for (var j = 0; j < smithchart.series.length; j++) {\n if (smithchart.series[j].enableSmartLabels && smithchart.series[j].marker.dataLabel.visible) {\n var gdlcEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg'\n + '_series' + j + '_Datalabel' + '_connectorLines' });\n var element = document.getElementById(smithchart.element.id + '_svg' + '_seriesCollection' + j);\n if (element) {\n element.appendChild(gdlcEle);\n }\n this.dataLabel.calculateSmartLabels(this.dataLabel.labelOptions[j], j);\n for (var k = 0; k < smithchart.series[j].points.length; k++) {\n var currentPoint = this.dataLabel.labelOptions[j]['textOptions'][k];\n if ((currentPoint.xPosition + currentPoint.width) > (smithchart.chartArea.x + smithchart.chartArea.width)\n || currentPoint.xPosition < smithchart.chartArea.x || currentPoint.yPosition < smithchart.chartArea.y ||\n currentPoint.yPosition + currentPoint.height > smithchart.chartArea.y + smithchart.chartArea.height) {\n this.dataLabel.labelOptions[j].textOptions[k].connectorFlag = false;\n this.dataLabel.labelOptions[j].textOptions[k].visible = false;\n }\n if (currentPoint['connectorFlag']) {\n this.dataLabel.drawConnectorLines(smithchart, j, k, currentPoint, gdlcEle);\n }\n }\n }\n }\n for (var j = 0; j < smithchart.series.length; j++) {\n var dataLabel = smithchart.series[j].marker.dataLabel;\n if (smithchart.series[j].marker.dataLabel.visible) {\n var element = document.getElementById(smithchart.element.id + '_svg' + '_seriesCollection' + j);\n var gdEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg'\n + '_series' + j + '_Datalabel' });\n if (element) {\n element.appendChild(gdEle);\n }\n for (var k = 0; k < smithchart.series[j].points.length; k++) {\n var currentPoint = this.dataLabel.labelOptions[j]['textOptions'][k];\n if (!dataLabel.template && currentPoint.visible) {\n var options = new DataLabelTextOptions();\n options = this.dataLabel.labelOptions[j]['textOptions'][k];\n var font = dataLabel.textStyle;\n var x = options['xPosition'];\n var y = options['yPosition'];\n var id = smithchart.element.id + '_Series' + j + '_Points' + k + '_dataLabel' + '_symbol' + k;\n var fill = dataLabel['fill'] ? dataLabel['fill'] : (smithchart.series[j].fill ||\n smithchart.seriesColors[j % smithchart.seriesColors.length]);\n var border = smithchart.series[j].marker.dataLabel.border;\n var rectOptions = new RectOption(id, fill, border, options['opacity'], new SmithchartRect(x, y, options['width'], options['height']));\n var dataEle = smithchart.renderer.drawRectangle(rectOptions);\n gdEle.appendChild(dataEle);\n var textRenderEventArgs = { text: options['text'], x: options['x'], y: options['y'], seriesIndex: j,\n pointIndex: k, name: 'textRender', cancel: false };\n smithchart.trigger('textRender', textRenderEventArgs);\n var textoptions = new TextOption(options['id'], textRenderEventArgs.x, textRenderEventArgs.y, 'start', textRenderEventArgs.text);\n var color = font.color ? font.color : smithchart.themeStyle.dataLabel;\n var element_1 = renderTextElement(textoptions, font, color, gdEle);\n gdEle.appendChild(element_1);\n }\n else if (dataLabel.template) {\n var element_2 = document.getElementById(dataLabel.template + '_seriesIndex' + j + '_pointIndex' +\n k + smithchart.element.id);\n element_2.style.left = this.dataLabel.labelOptions[j]['textOptions'][k].xPosition + 'px';\n element_2.style.top = this.dataLabel.labelOptions[j]['textOptions'][k].yPosition + 'px';\n }\n }\n }\n }\n for (var i = 0; i < smithchart.series.length; i++) {\n if (smithchart.series[i].enableAnimation && smithchart.animateSeries) {\n if (smithchart.series[i].marker.dataLabel.template) {\n this.animateDataLabelTemplate(i, smithchart);\n }\n var element = document.getElementById(smithchart.element.id + '_svg' + '_seriesCollection' + i);\n this.performAnimation(smithchart, element, i);\n }\n }\n };\n SeriesRender.prototype.drawSeries = function (smithchart, seriesindex, groupElement, bounds) {\n var gsEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_seriesCollection' + seriesindex,\n 'clip-path': 'url(#' + smithchart.element.id + '_ChartSeriesClipRect_' +\n seriesindex + ')' });\n gsEle.setAttribute('visibility', smithchart.series[seriesindex].visibility);\n groupElement.appendChild(gsEle);\n var sb = '';\n var path;\n var marker = smithchart.series[seriesindex].marker;\n var element;\n var count = smithchart.series[seriesindex].points.length - 1;\n for (var i = 0; i < count; i++) {\n var point1 = this.pointsRegion[seriesindex][i]['point'];\n var point2 = this.pointsRegion[seriesindex][i + 1]['point'];\n sb = sb + ('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ' + 'L' +\n ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n path = sb.toString();\n var fill = smithchart.series[seriesindex].fill || smithchart.seriesColors[seriesindex % smithchart.seriesColors.length];\n var seriesEventArgs = { text: smithchart.series[seriesindex].name, fill: fill,\n name: 'seriesRender', cancel: false };\n smithchart.trigger('seriesRender', seriesEventArgs);\n var options = new PathOption(smithchart.element.id + '_series' + seriesindex + '_points', 'none', smithchart.series[seriesindex].width, seriesEventArgs.fill, smithchart.series[seriesindex].opacity, 'none', path);\n this.clipRectElement = smithchart.renderer.drawClipPath(new RectOption(smithchart.element.id + '_ChartSeriesClipRect_' + seriesindex, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: bounds.x, y: bounds.y,\n width: smithchart.availableSize.width,\n height: smithchart.availableSize.height\n }));\n gsEle.appendChild(this.clipRectElement);\n var gspEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + seriesindex });\n element = smithchart.renderer.drawPath(options);\n gspEle.appendChild(element);\n gsEle.appendChild(gspEle);\n var markerrender = new Marker();\n markerrender.drawMarker(smithchart, seriesindex, gsEle, this.pointsRegion[seriesindex]);\n this.dataLabel.drawDataLabel(smithchart, seriesindex, gsEle, this.pointsRegion[seriesindex], bounds);\n };\n SeriesRender.prototype.animateDataLabelTemplate = function (seriesindex, smithchart) {\n var length = smithchart.series[seriesindex].points.length;\n var opacity = 0;\n var delay = 0;\n var duration = parseFloat(smithchart.series[seriesindex].animationDuration);\n for (var i = 0; i < length; i++) {\n var element = document.getElementById(smithchart.series[seriesindex].marker.dataLabel.template +\n '_seriesIndex' + seriesindex + '_pointIndex' + i + smithchart.element.id);\n element.style.visibility = 'hidden';\n templateAnimate(smithchart, element, delay, duration, 'FadeIn');\n // this.fadein(element);\n }\n };\n /*private fadein(element: HTMLElement): void {\n let op: number = 0.1;\n element.style.display = 'block';\n let timer: number = setInterval( (): void => {\n if (op >= 1) {\n clearInterval(timer);\n }\n element.style.opacity = op.toString();\n element.style.filter = 'alpha(opacity=' + op * 100 + ')';\n op += op * 0.1;\n }, 50);\n \n }*/\n SeriesRender.prototype.performAnimation = function (smithchart, gsEle, seriesIndex) {\n var animation = new Animation({});\n var element = document.getElementById('container_svg_seriesCollections');\n var clipRect = gsEle.childNodes[0].childNodes[0].childNodes[0];\n var effect = getAnimationFunction('Linear');\n var reveffect = getAnimationFunction('Reverse');\n var width = +clipRect.getAttribute('width');\n var x = +clipRect.getAttribute('x');\n var value;\n animation.animate(clipRect, {\n duration: parseFloat(smithchart.series[seriesIndex].animationDuration),\n progress: function (args) {\n if (smithchart.renderType === 'Impedance') {\n value = effect(args.timeStamp - args.delay, 0, width, args.duration);\n clipRect.setAttribute('width', value.toString());\n }\n else {\n value = reveffect(args.timeStamp - args.delay, width, 0, args.duration);\n clipRect.setAttribute('x', value.toString());\n }\n },\n end: function (model) {\n if (smithchart.renderType === 'Impedance') {\n clipRect.setAttribute('width', width.toString());\n }\n else {\n clipRect.setAttribute('x', x.toString());\n }\n var event = {\n cancel: false, name: animationComplete, smithchart: smithchart\n };\n smithchart.trigger(animationComplete, event);\n }\n });\n };\n SeriesRender.prototype.getLocation = function (seriesindex, pointIndex) {\n var x;\n var y;\n x = this.location[seriesindex][pointIndex].x;\n y = this.location[seriesindex][pointIndex].y;\n return { x: x, y: y };\n };\n return SeriesRender;\n}());\nexport { SeriesRender };\n","/**\n * Specifies smithchart animationComplete event name.\n * @private\n */\nexport var animationComplete = 'animationComplete';\n/**\n * Specifies smithchart legendRender event name.\n * @private\n */\nexport var legendRender = 'legendRender';\n/**\n * Specifies smithchart titleRender event name.\n * @private\n */\nexport var titleRender = 'titleRender';\n/**\n * Specifies smithchart subtitleRender event name.\n * @private\n */\nexport var subtitleRender = 'subtitleRender';\n/**\n * Specifies smithchart textRender event name.\n * @private\n */\nexport var textRender = 'textRender';\n","import { print as smithchartPrint, createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { smithchartBeforePrint } from '../utils/enum';\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.smithchartPrint = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.smithchartPrint.moveTo(0, 0);\n this.smithchartPrint.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: smithchartBeforePrint\n };\n this.control.trigger(smithchartBeforePrint, argsData);\n if (!argsData.cancel) {\n smithchartPrint(argsData.htmlContent, this.smithchartPrint);\n }\n };\n /**\n * To get the html string of the Maps\n * @param svgElements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (svgElements) {\n var div = createElement('div');\n if (svgElements) {\n if (svgElements instanceof Array) {\n svgElements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (svgElements instanceof Element) {\n div.appendChild(svgElements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(svgElements).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 (exportType, fileName, orientation) {\n var _this = this;\n var canvas = 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(exportType === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(this.control.svgObject)], { type: 'image/svg+xml' }));\n if (exportType === 'SVG') {\n this.triggerDownload(fileName, exportType, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = canvas.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (exportType === 'PDF') {\n var document_1 = new PdfDocument();\n var imageString = canvas.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, exportType, canvas.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, exportType, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + exportType.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","/**\n * Specifies TreeMap beforePrint event name.\n * @private\n */\nexport var smithchartBeforePrint = 'beforePrint';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, Complex, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { createElement, remove, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { createSvg, RectOption, measureText, TextOption, renderTextElement } from '../smithchart/utils/helper';\nimport { removeElement, textTrim } from '../smithchart/utils/helper';\nimport { SmithchartRect } from '../smithchart/utils/utils';\nimport { SmithchartMargin, SmithchartBorder, SmithchartFont } from '../smithchart/utils/utils';\nimport { getThemeColor } from '../smithchart/model/theme';\nimport { SmithchartLegendSettings } from '../smithchart/legend/legend';\nimport { SmithchartAxis } from '../smithchart/axis/axis';\nimport { Title } from '../smithchart/title/title';\nimport { SmithchartSeries } from '../smithchart/series/series';\nimport { AreaBounds } from '../smithchart/utils/area';\nimport { AxisRender } from '../smithchart/axis/axisrender';\nimport { SeriesRender } from '../smithchart/series/seriesrender';\nimport { Collection } from '@syncfusion/ej2-base';\nimport { getSeriesColor } from '../smithchart/model/theme';\nimport { ExportUtils } from '../smithchart/utils/export';\nimport { titleRender, subtitleRender } from '../smithchart/model/constant';\n/* tslint:disable:no-string-literal */\n/**\n * Represents the Smithchart control.\n * ```html\n *
    \n * \n * ```\n */\nvar Smithchart = /** @class */ (function (_super) {\n __extends(Smithchart, _super);\n /**\n * Constructor for creating the Smithchart widget\n */\n function Smithchart(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Get component name\n */\n Smithchart.prototype.getModuleName = function () {\n return 'smithchart';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Smithchart.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Method to create SVG element.\n */\n Smithchart.prototype.createChartSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n Smithchart.prototype.renderTitle = function (title, type, groupEle) {\n var font = title.font ? title.font : title.textStyle;\n var textSize = measureText(title.text, font);\n var x;\n var y;\n var textAlignment = title.textAlignment;\n var titleText = title.text;\n var maxTitleWidth = (isNullOrUndefined(title.maximumWidth)) ?\n Math.abs(this.margin.left + this.margin.right - (this.availableSize.width)) :\n title.maximumWidth;\n var titleWidthEnable = textSize.width > maxTitleWidth ? true : false;\n if (textSize.width > this.availableSize.width) {\n x = this.margin.left + this.border.width;\n }\n else {\n x = textAlignment === 'Center' ? (this.availableSize.width / 2 - textSize['width'] / 2) :\n (textAlignment === 'Near' ? (this.margin.left + this.elementSpacing + this.border.width) : (this.availableSize.width\n - textSize['width'] - (this.margin.right + this.elementSpacing + this.border.width)));\n }\n y = this.margin.top + textSize['height'] / 2 + this.elementSpacing;\n if (title.enableTrim && titleWidthEnable) {\n titleText = textTrim(maxTitleWidth, title.text, font);\n textSize = measureText(titleText, font);\n }\n groupEle = this.renderer.createGroup({ id: this.element.id + '_Title_Group' });\n var titleEventArgs = { text: titleText, x: x, y: y, name: 'titleRender', cancel: false };\n this.trigger(titleRender, titleEventArgs);\n var options = new TextOption(this.element.id + '_Smithchart_' + type, titleEventArgs.x, titleEventArgs.y, 'start', titleEventArgs.text);\n var element = renderTextElement(options, font, this.themeStyle.chartTitle, groupEle);\n element.setAttribute('aria-label', title.description || title.text);\n var titleLocation = { x: x, y: y, textSize: textSize };\n this.svgObject.appendChild(groupEle);\n if (title.subtitle.text !== '' && title.subtitle.visible) {\n this.renderSubtitle(title, type, textSize, this.availableSize, titleLocation, groupEle);\n }\n };\n Smithchart.prototype.renderSubtitle = function (title, type, textSize, size, titleLocation, groupEle) {\n var x;\n var y;\n var font = title.subtitle.textStyle;\n var subTitle = title.subtitle;\n var subTitleSize = measureText(subTitle.text, font);\n var textAnchor;\n var subTitleText = subTitle.text;\n var maxSubTitleWidth = isNullOrUndefined(subTitle.maximumWidth) ?\n (this.bounds.width * 0.75) : subTitle.maximumWidth;\n if (subTitle.enableTrim && subTitleSize.width > maxSubTitleWidth) {\n subTitleText = textTrim(maxSubTitleWidth, subTitle.text, font);\n }\n x = title['subtitle'].textAlignment === 'Far' ? (titleLocation.x + (titleLocation.textSize.width)) :\n (title['subtitle'].textAlignment === 'Near') ? titleLocation.x :\n (titleLocation.x + (titleLocation.textSize.width / 2));\n y = titleLocation.y + (2 * this.elementSpacing);\n textAnchor = title['subtitle'].textAlignment === 'Far' ? 'end' :\n (title['subtitle'].textAlignment === 'Near') ? 'start' : 'middle';\n var subtitleEventArgs = { text: subTitleText, x: x, y: y, name: 'subtitleRender', cancel: false };\n this.trigger(subtitleRender, subtitleEventArgs);\n var options = new TextOption(this.element.id + '_Smithchart_' + type, subtitleEventArgs.x, subtitleEventArgs.y, textAnchor, subtitleEventArgs.text);\n var element = renderTextElement(options, font, this.themeStyle.chartTitle, groupEle);\n element.setAttribute('aria-label', subTitle.description || subTitle.text);\n groupEle.appendChild(element);\n };\n /**\n * @private\n * Render the smithchart border\n */\n Smithchart.prototype.renderBorder = function () {\n var border = this.border;\n var color = this.theme === 'Highcontrast' ? '#000000' : '#FFFFFF';\n this.background = this.background ? this.background : color;\n var borderRect = new RectOption(this.element.id + '_SmithchartBorder', this.background, border, 1, new SmithchartRect(border.width / 2, border.width / 2, this.availableSize.width - border.width, this.availableSize.height - border.width));\n this.svgObject.appendChild(this.renderer.drawRectangle(borderRect));\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Smithchart.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.animateSeries = false;\n var renderer = 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 renderer = true;\n break;\n case 'size':\n this.createChartSvg();\n renderer = true;\n break;\n case 'theme':\n this.animateSeries = true;\n renderer = true;\n break;\n case 'border':\n renderer = true;\n break;\n }\n }\n if (renderer) {\n this.render();\n }\n };\n /**\n * Initialize the event handler.\n */\n Smithchart.prototype.preRender = function () {\n this.trigger('load', { smithchart: this });\n this.unWireEVents();\n this.initPrivateVariable();\n this.wireEVents();\n };\n Smithchart.prototype.initPrivateVariable = function () {\n this.animateSeries = true;\n };\n /**\n * To Initialize the control rendering.\n */\n Smithchart.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getThemeColor(this.theme);\n this.seriesColors = getSeriesColor(this.theme);\n // let count: number = colors.length;\n // for (let i: number = 0; i < this.series.length; i++) {\n // this.series[i].fill = this.series[i].fill ? this.series[i].fill : colors[i % count];\n // }\n };\n Smithchart.prototype.render = function () {\n this.createChartSvg();\n this.element.appendChild(this.svgObject);\n this.setTheme();\n this.createSecondaryElement();\n this.renderBorder();\n if (this.smithchartLegendModule && this.legendSettings.visible) {\n this.legendBounds = this.smithchartLegendModule.renderLegend(this);\n }\n this.legendBounds = this.legendBounds ? this.legendBounds : { x: 0, y: 0, width: 0, height: 0 };\n var areaBounds = new AreaBounds();\n this.bounds = areaBounds.calculateAreaBounds(this, this.title, this.legendBounds);\n if (this.title.text !== '' && this.title.visible) {\n this.renderTitle(this.title, 'title', null);\n }\n var axisRender = new AxisRender();\n axisRender.renderArea(this, this.bounds);\n this.seriesrender = new SeriesRender();\n this.seriesrender.draw(this, axisRender, this.bounds);\n this.trigger('loaded', { smithchart: this });\n };\n Smithchart.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 var rect = this.element.getBoundingClientRect();\n var svgRect = document.getElementById(this.element.id + '_svg');\n if (svgRect) {\n var svgClientRect = svgRect.getBoundingClientRect();\n secondaryElement.style.left = Math.max(svgClientRect.left - rect.left, 0) + 'px';\n secondaryElement.style.top = Math.max(svgClientRect.top - rect.top, 0) + 'px';\n }\n }\n else {\n removeElement(this.element.id + '_Secondary_Element');\n }\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of smithChart\n */\n Smithchart.prototype.destroy = function () {\n this.unWireEVents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-smithchart');\n };\n /**\n * To bind event handlers for smithchart.\n */\n Smithchart.prototype.wireEVents = function () {\n EventHandler.add(this.element, 'click', this.smithchartOnClick, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.smithchartOnResize.bind(this));\n };\n Smithchart.prototype.mouseMove = function (e) {\n if (e.type === 'touchmove') {\n this.isTouch = true;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2' || this.isTouch;\n }\n if (this.tooltipRenderModule && !this.isTouch) {\n this.tooltipRenderModule.smithchartMouseMove(this, e);\n }\n };\n Smithchart.prototype.mouseEnd = function (e) {\n if (e.type === 'touchend') {\n this.isTouch = true;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n }\n if (this.tooltipRenderModule && this.isTouch) {\n var tooltipElement_1 = this.tooltipRenderModule.smithchartMouseMove(this, e);\n if (tooltipElement_1) {\n this.fadeoutTo = setTimeout(function () {\n tooltipElement_1.fadeOut();\n }, 2000);\n }\n }\n };\n /**\n * To handle the click event for the smithchart.\n */\n /* tslint:disable:no-string-literal */\n Smithchart.prototype.smithchartOnClick = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var parentElement = document.getElementById(targetId).parentElement;\n var grpElement = document.getElementById(parentElement.id).parentElement;\n if (grpElement.id === 'containerlegendItem_Group' && this.legendSettings.toggleVisibility) {\n var childElement = parentElement.childNodes[1];\n var circleElement = parentElement.childNodes[0];\n var legendText = childElement.textContent;\n var seriesIndex = void 0;\n var fill = void 0;\n for (var i = 0; i < this.smithchartLegendModule.legendSeries.length; i++) {\n if (legendText === this.smithchartLegendModule.legendSeries[i]['text']) {\n seriesIndex = this.smithchartLegendModule.legendSeries[i].seriesIndex;\n fill = this.smithchartLegendModule.legendSeries[i].fill;\n }\n }\n var seriesElement = document.getElementById(this.element.id + '_svg' + '_seriesCollection' + seriesIndex);\n if (seriesElement.getAttribute('visibility') === 'visible') {\n circleElement.setAttribute('fill', 'gray');\n seriesElement.setAttribute('visibility', 'hidden');\n this.series[seriesIndex].visibility = 'hidden';\n }\n else {\n circleElement.setAttribute('fill', fill);\n seriesElement.setAttribute('visibility', 'visible');\n this.series[seriesIndex].visibility = 'visible';\n }\n }\n };\n /**\n * To unbind event handlers from smithchart.\n */\n Smithchart.prototype.unWireEVents = function () {\n EventHandler.remove(this.element, 'click', this.smithchartOnClick);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.smithchartOnResize);\n };\n Smithchart.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 Smithchart.prototype.export = function (type, fileName, orientation) {\n var exportMap = new ExportUtils(this);\n exportMap.export(type, fileName, orientation);\n };\n /**\n * To handle the window resize event on smithchart.\n */\n Smithchart.prototype.smithchartOnResize = 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 _this.render();\n }, 500);\n return false;\n };\n /**\n * To provide the array of modules needed for smithchart rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Smithchart.prototype.requiredModules = function () {\n var modules = [];\n if (this.legendSettings.visible) {\n modules.push({\n member: 'SmithchartLegend',\n args: [this]\n });\n }\n for (var i = 0; i < this.series.length; i++) {\n if (this.series[i].tooltip.visible) {\n modules.push({\n member: 'TooltipRender',\n args: [this]\n });\n break;\n }\n }\n return modules;\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n Smithchart.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n var removeLength = 0;\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 __decorate([\n Property('Impedance')\n ], Smithchart.prototype, \"renderType\", void 0);\n __decorate([\n Property('')\n ], Smithchart.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Smithchart.prototype, \"height\", void 0);\n __decorate([\n Property('Material')\n ], Smithchart.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, SmithchartMargin)\n ], Smithchart.prototype, \"margin\", void 0);\n __decorate([\n Complex({}, SmithchartFont)\n ], Smithchart.prototype, \"font\", void 0);\n __decorate([\n Complex({}, SmithchartBorder)\n ], Smithchart.prototype, \"border\", void 0);\n __decorate([\n Complex({}, Title)\n ], Smithchart.prototype, \"title\", void 0);\n __decorate([\n Collection([{}], SmithchartSeries)\n ], Smithchart.prototype, \"series\", void 0);\n __decorate([\n Complex({}, SmithchartLegendSettings)\n ], Smithchart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, SmithchartAxis)\n ], Smithchart.prototype, \"horizontalAxis\", void 0);\n __decorate([\n Complex({}, SmithchartAxis)\n ], Smithchart.prototype, \"radialAxis\", void 0);\n __decorate([\n Property(null)\n ], Smithchart.prototype, \"background\", void 0);\n __decorate([\n Property(10)\n ], Smithchart.prototype, \"elementSpacing\", void 0);\n __decorate([\n Property(1)\n ], Smithchart.prototype, \"radius\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"titleRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"subtitleRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"seriesRender\", void 0);\n Smithchart = __decorate([\n NotifyPropertyChanges\n ], Smithchart);\n return Smithchart;\n}(Component));\nexport { Smithchart };\n","import { ClosestPoint, SmithchartRect } from '../../smithchart/utils/utils';\nimport { Tooltip } from '@syncfusion/ej2-svg-base';\nimport { isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\n/**\n * To render tooltip\n */\nvar TooltipRender = /** @class */ (function () {\n function TooltipRender() {\n }\n TooltipRender.prototype.smithchartMouseMove = function (smithchart, e) {\n var touchArg;\n var pageX;\n var pageY;\n if (e.type === 'touchend' || e.type === 'touchmove') {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n this.tooltipElement = undefined;\n }\n else {\n pageY = e.clientY;\n pageX = e.clientX;\n }\n this.setMouseXY(smithchart, pageX, pageY);\n for (var i = 0; i < smithchart.series.length; i++) {\n var series = smithchart.series[i];\n var seriesIndex = i;\n var closestPoint = new ClosestPoint();\n closestPoint = this.closestPointXY(smithchart, this.mouseX, this.mouseY, series, seriesIndex);\n if (closestPoint.location && series.tooltip.visible && series.visibility === 'visible') {\n this.createTooltip(smithchart, e, closestPoint.index, seriesIndex, series);\n break;\n }\n else if (this.tooltipElement && this.tooltipElement.enable && !series.tooltip.template) {\n this.tooltipElement.fadeOut();\n this.tooltipElement.enable = false;\n }\n else if (series.tooltip.template) {\n this.tooltipElement.fadeOut();\n }\n }\n return this.tooltipElement;\n };\n TooltipRender.prototype.setMouseXY = function (smithchart, pageX, pageY) {\n var rect = smithchart.element.getBoundingClientRect();\n var svgRect = document.getElementById(smithchart.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 TooltipRender.prototype.createTooltip = function (smithchart, e, pointindex, seriesindex, series) {\n var pointX = series.points[pointindex].resistance;\n var pointY = series.points[pointindex].reactance;\n var tooltipText = [pointX + ' ' + ':' + ' ' + '' + pointY + ''];\n var markerHeight = smithchart.series[seriesindex].marker.height / 2;\n var div = document.getElementById(smithchart.element.id + '_smithchart_tooltip_div');\n if (isNullOrUndefined(div)) {\n div = createElement('div', { id: smithchart.element.id + '_smithchart_tooltip_div',\n styles: 'pointer-events: none; position: absolute;z-index:1;' });\n document.getElementById(smithchart.element.id + '_Secondary_Element').appendChild(div);\n }\n this.tooltipElement = new Tooltip({\n enable: true,\n header: '' + series.name + '',\n content: tooltipText,\n border: series.tooltip.border,\n fill: smithchart.themeStyle.tooltipFill,\n data: { reactance: pointY },\n template: series.tooltip.template,\n location: { x: this.locationX + smithchart.element.offsetLeft,\n y: this.locationY - markerHeight + smithchart.element.offsetTop },\n shared: false,\n areaBounds: new SmithchartRect(smithchart.bounds.x, smithchart.bounds.y, smithchart.bounds.width, smithchart.bounds.height),\n palette: [series.fill || smithchart.seriesColors[seriesindex % smithchart.seriesColors.length]],\n shapes: ['Circle'],\n theme: smithchart.theme\n });\n this.tooltipElement.textStyle.fontFamily = 'Roboto, Segoe UI, Noto, Sans-serif';\n this.tooltipElement.appendTo(div);\n };\n TooltipRender.prototype.closestPointXY = function (smithchart, x, y, series, seriesindex) {\n var pointIndex;\n var chartPoint;\n var closePoint;\n for (var j = 0; j < series.points.length; j++) {\n chartPoint = smithchart.seriesrender.getLocation(seriesindex, j);\n this.locationX = chartPoint.x;\n this.locationY = chartPoint.y;\n pointIndex = j;\n var a = x - chartPoint.x;\n var b = y - chartPoint.y;\n var distance = Math.abs(Math.sqrt((a * a) + (b * b)));\n if (distance < series.marker.width) {\n closePoint = chartPoint;\n pointIndex = j;\n break;\n }\n }\n return { location: closePoint, index: pointIndex };\n };\n /**\n * Get module name.\n */\n TooltipRender.prototype.getModuleName = function () {\n return 'TooltipRender';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n TooltipRender.prototype.destroy = function (smithchart) {\n /**\n * Destroy method performed here\n */\n };\n return TooltipRender;\n}());\nexport { TooltipRender };\n","import { measureText, TextOption, renderTextElement, CircleOption, PathOption, RectOption } from '../../smithchart/utils/helper';\nimport { SmithchartRect, LegendSeries } from '../../smithchart/utils/utils';\n/* tslint:disable:no-string-literal */\nvar SmithchartLegend = /** @class */ (function () {\n function SmithchartLegend() {\n this.legendSeries = [];\n }\n SmithchartLegend.prototype.renderLegend = function (smithchart) {\n this.calculateLegendBounds(smithchart);\n this._drawLegend(smithchart);\n return this.legendActualBounds;\n };\n SmithchartLegend.prototype.calculateLegendBounds = function (smithchart) {\n var legendSeries = new LegendSeries();\n this.legendSeries = [];\n var padding = 10;\n var legend = smithchart.legendSettings;\n var legendSizeHeight = legend.height;\n var legendSizeWidth = legend.width;\n var itemPadding = legend.itemPadding > 0 ? legend.itemPadding : 0;\n var position = legend.position.toLowerCase();\n var font = legend.title.textStyle;\n var width = 0;\n var height = 0;\n var legendItemWidth = 0;\n var legendItemHeight = 0;\n var legendHeight = 0;\n var svgObjectWidth = smithchart.availableSize.width - ((smithchart.elementSpacing * 4) - (legend.border.width * 2)\n + (smithchart.border.width * 2));\n var svgObjectHeight = smithchart.availableSize.height - ((smithchart.elementSpacing * 4) - (legend.border.width * 2)\n + (smithchart.border.width * 2));\n var rowCount = legend.rowCount;\n var columnCount = legend.columnCount;\n var titleSize = measureText(smithchart.legendSettings['title']['text'], font);\n var maxRowWidth = 0;\n var totalRowHeight = 0;\n var curRowWidth = 0;\n var curRowHeight = 0;\n var allowItems;\n var itemsCountRow = 0;\n var length = smithchart.series.length;\n var legendBounds;\n if (smithchart.legendSettings.visible && length !== 0) {\n if (position === 'bottom' || position === 'top' || position === 'custom') {\n if ((rowCount && columnCount) && (rowCount <= columnCount)) {\n rowCount = length / columnCount;\n }\n else if (rowCount == null && columnCount != null) {\n rowCount = length / columnCount;\n }\n else if (rowCount == null && columnCount == null) {\n rowCount = 1;\n }\n if (rowCount) {\n allowItems = Math.ceil(length / rowCount);\n }\n }\n else {\n if ((rowCount && columnCount) && (rowCount <= columnCount)) {\n columnCount = length / rowCount;\n }\n else if (rowCount != null && columnCount == null) {\n columnCount = length / rowCount;\n }\n else if (rowCount == null && columnCount == null) {\n columnCount = 1;\n }\n if (columnCount) {\n allowItems = columnCount;\n }\n }\n for (var i = 0; i < length; i++) {\n this.legendSeries.push({\n text: smithchart.series[i]['name'] ? smithchart.series[i]['name'] : 'series' + i,\n seriesIndex: i,\n shape: smithchart.legendSettings.shape,\n fill: smithchart.series[i].fill || smithchart.seriesColors[i % smithchart.seriesColors.length],\n bounds: null\n });\n var legendsize = this._getLegendSize(smithchart, this.legendSeries[i]);\n legendItemWidth = Math.max(legendsize['width'], legendItemWidth);\n legendItemHeight = Math.max(legendsize['height'], legendItemHeight);\n this.legendSeries[i]['bounds'] = { width: legendItemWidth, height: legendItemHeight };\n itemsCountRow = itemsCountRow + 1;\n curRowWidth = curRowWidth + legendItemWidth + itemPadding;\n curRowHeight = Math.max(legendItemHeight, curRowHeight);\n if (position === 'top' || position === 'bottom' || position === 'custom') {\n if (curRowWidth > svgObjectWidth) {\n curRowWidth -= legendsize.width + itemPadding;\n maxRowWidth = Math.max(maxRowWidth, curRowWidth);\n curRowWidth = legendsize.width + itemPadding;\n totalRowHeight = totalRowHeight + curRowHeight + itemPadding;\n }\n }\n if (itemsCountRow === allowItems || i === length - 1) {\n maxRowWidth = Math.max(maxRowWidth, curRowWidth);\n totalRowHeight = totalRowHeight + curRowHeight + itemPadding;\n legendHeight = totalRowHeight;\n itemsCountRow = 0;\n curRowHeight = 0;\n curRowWidth = 0;\n }\n }\n width = (titleSize.width) > maxRowWidth - itemPadding ? (titleSize.width + padding * 2 + itemPadding) :\n maxRowWidth + padding * 2 - (smithchart.border.width * 2);\n height = legendHeight + smithchart.elementSpacing;\n legendBounds = { x: 0, y: 0, width: width, height: height };\n }\n this.legendActualBounds = legendBounds;\n if (legendSizeWidth != null) {\n this.legendActualBounds.width = legendSizeWidth;\n }\n if (legendSizeHeight != null) {\n this.legendActualBounds.height = legendSizeHeight;\n }\n };\n SmithchartLegend.prototype._getLegendSize = function (smithchart, series) {\n var legend = smithchart.legendSettings;\n var symbolWidth = legend.itemStyle.width;\n var symbolHeight = legend.itemStyle.height;\n var textSize = measureText(series.text, legend.textStyle);\n var width = symbolWidth + textSize.width + legend.shapePadding;\n var height = Math.max(symbolHeight, textSize.height);\n return { width: width, height: height };\n };\n // tslint:disable:max-func-body-length\n SmithchartLegend.prototype._drawLegend = function (smithchart) {\n var legend = smithchart.legendSettings;\n var legendPosition = legend.position.toLowerCase();\n var alignment = legend.alignment;\n var legendBounds = this.legendActualBounds;\n var maxWidth = 0;\n var startX;\n var startY;\n var titleFont = smithchart.title.font ? smithchart.title.font : smithchart.title.textStyle;\n var smithchartTitleHeight = measureText(smithchart.title.text, titleFont).height;\n var smithchartSubtitleHeight = measureText(smithchart.title.subtitle.text, smithchart.title.subtitle.textStyle).height;\n var elementSpacing = smithchart.elementSpacing;\n var offset = smithchartTitleHeight + smithchartSubtitleHeight + elementSpacing + smithchart.margin.top;\n var itemPadding = legend.itemPadding > 0 ? legend.itemPadding : 0;\n var svgObjectWidth = smithchart.availableSize.width;\n var svgObjectHeight = smithchart.availableSize.height;\n var legendBorder = legend.border.width;\n var legendWidth = 0;\n var titleSize = measureText(legend['title']['text'], legend.title.textStyle);\n var legendTitleHeight = titleSize.height;\n var borderSize = smithchart.border.width;\n var svgWidth = svgObjectWidth - ((borderSize * 2));\n var svgHeight = svgObjectHeight - ((borderSize * 2));\n legendBounds.height += legendTitleHeight;\n if (legendPosition !== 'custom') {\n switch (legendPosition) {\n case 'bottom':\n legendBounds.y = svgHeight - (legendBounds.height + (legendBorder) + elementSpacing);\n break;\n case 'top':\n legendBounds.y = borderSize + offset;\n break;\n case 'right':\n legendBounds.x = svgWidth - legendBounds.width - (elementSpacing * 2);\n break;\n case 'left':\n legendBounds.x = borderSize + (elementSpacing * 2);\n break;\n }\n if (legendPosition === 'left' || legendPosition === 'right') {\n switch (alignment) {\n case 'Center':\n legendBounds.y = (svgHeight / 2) - ((legendBounds.height + legendBorder * 2) / 2) + (elementSpacing / 2);\n break;\n case 'Near':\n legendBounds.y = borderSize + (elementSpacing * 2) + offset;\n break;\n case 'Far':\n legendBounds.y = svgHeight - (legendBounds.height + (legendBorder)) - (elementSpacing * 2);\n break;\n }\n }\n else {\n switch (alignment) {\n case 'Center':\n legendBounds.x = (svgWidth / 2) - ((legendBounds.width + legendBorder * 2) / 2) + (elementSpacing / 2);\n break;\n case 'Near':\n legendBounds.x = borderSize + (elementSpacing * 2);\n break;\n case 'Far':\n legendBounds.x = svgWidth - (legendBounds.width + (legendBorder)) - (elementSpacing * 2);\n break;\n }\n }\n }\n else {\n legendBounds.y = (legend.location.y < svgHeight) ? legend.location.y : 0;\n legendBounds.x = (legend.location.x < svgWidth) ? legend.location.x : 0;\n }\n if (legendPosition === 'bottom' || legendPosition === 'top') {\n for (var i = 0; i < this.legendSeries.length; i++) {\n legendWidth += this.legendSeries[i].bounds.width + itemPadding;\n if (legendWidth > svgWidth) {\n legendBounds.x = (svgWidth / 2) - ((legendBounds.width + legendBorder * 2) / 2) + (elementSpacing / 2);\n break;\n }\n }\n }\n var gLegendEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_legend_group' });\n smithchart.svgObject.appendChild(gLegendEle);\n this.legendItemGroup = smithchart.renderer.createGroup({ 'id': smithchart.element.id + 'legendItem_Group' });\n var currentX = startX = elementSpacing;\n var currentY = startY = elementSpacing;\n if (legend.title.text !== '' && legend.title.visible) {\n gLegendEle.appendChild(this.drawLegendTitle(smithchart, legend, legendBounds, gLegendEle));\n currentY = startY = elementSpacing + legendTitleHeight;\n }\n for (var k = 0; k < this.legendSeries.length; k++) {\n if ((legend.rowCount < legend.columnCount || legend.rowCount === legend.columnCount) &&\n (legendPosition === 'top' || legendPosition === 'bottom' || legendPosition === 'custom')) {\n if ((currentX + this.legendSeries[k]['bounds'].width) > legendBounds.width + startX) {\n currentX = elementSpacing;\n currentY += this.legendSeries[k]['bounds'].height + itemPadding;\n }\n this.legendGroup = this.drawLegendItem(smithchart, legend, this.legendSeries[k], k, currentX, (currentY), legendBounds);\n gLegendEle.appendChild(this.legendGroup);\n currentX += this.legendSeries[k]['bounds'].width + itemPadding;\n }\n else {\n if (((currentY + this.legendSeries[k]['bounds'].height + itemPadding) +\n legendTitleHeight + borderSize > legendBounds.height + startY)) {\n currentY = startY;\n currentX += maxWidth + (itemPadding);\n }\n this.legendGroup = this.drawLegendItem(smithchart, legend, this.legendSeries[k], k, (currentX), (currentY), legendBounds);\n gLegendEle.appendChild(this.legendGroup);\n currentY += this.legendSeries[k]['bounds'].height + itemPadding;\n maxWidth = Math.max(maxWidth, this.legendSeries[k]['bounds'].width);\n }\n }\n gLegendEle.setAttribute('transform', 'translate(' + legendBounds.x.toString() + ',' + legendBounds.y.toString() + ')');\n this.drawLegendBorder(gLegendEle, smithchart, legend, legendBounds);\n };\n SmithchartLegend.prototype.drawLegendBorder = function (gLegendEle, smithchart, legend, legendBounds) {\n var borderRect = new RectOption(smithchart.element.id + '_svg' + '_legendRect', 'none', legend.border, 1, new SmithchartRect(0, 0, legendBounds.width, legendBounds.height));\n gLegendEle.appendChild(smithchart.renderer.drawRectangle(borderRect));\n };\n SmithchartLegend.prototype.drawLegendTitle = function (smithchart, legend, legendBounds, gLegendEle) {\n var elementSpacing = smithchart.elementSpacing;\n var titleSize = measureText(legend.title.text, legend.title.textStyle);\n var titleWidth = titleSize.width;\n var titleHeight = titleSize.height;\n var textAlignment = legend.title.textAlignment;\n var startX = 0;\n var legendBoundsWidth = legendBounds.width;\n var startY = elementSpacing + (titleHeight / 2);\n switch (textAlignment) {\n case 'Far':\n startX = legendBoundsWidth - titleWidth - startX;\n break;\n case 'Center':\n startX = legendBoundsWidth / 2 - (titleWidth) / 2;\n break;\n }\n if (startX < 0) {\n startX = 0;\n legendBoundsWidth = titleWidth;\n }\n if (legendBoundsWidth < titleWidth + startX) {\n legendBoundsWidth = titleWidth + startX;\n }\n var options = new TextOption(smithchart.element.id + '_LegendTitleText', startX, startY, 'start', legend.title.text);\n var element = renderTextElement(options, legend.title.textStyle, smithchart.themeStyle.legendLabel, gLegendEle);\n element.setAttribute('aria-label', legend.title.description || legend.title.text);\n return element;\n };\n SmithchartLegend.prototype.drawLegendItem = function (smithchart, legend, legendSeries, k, x, y, legendBounds) {\n var location;\n var radius;\n var symbol = legend.itemStyle;\n var itemPadding = legend.itemPadding;\n var textHeight;\n radius = Math.sqrt(symbol['width'] * symbol['width'] + symbol['height'] * symbol['height']) / 2;\n textHeight = measureText(legendSeries['text'], legend.textStyle).height;\n location = {\n x: x + symbol['width'] / 2,\n y: (y + (textHeight > symbol['height'] ? textHeight : symbol['height']) / 2)\n };\n var legendGroup = smithchart.renderer.createGroup({ id: smithchart.element.id + '_svg' + '_Legend' + k.toString() });\n legendGroup['style']['cursor'] = legend.toggleVisibility ? 'pointer' : 'default';\n var legendEventArgs = { text: legendSeries['text'], fill: legendSeries['fill'],\n shape: legendSeries['shape'], name: 'legendRender', cancel: false };\n smithchart.trigger('legendRender', legendEventArgs);\n var shape = this.drawLegendShape(smithchart, legendSeries, location.x, location.y, k, legend, legendEventArgs);\n legendGroup.appendChild(shape);\n var options = new TextOption(smithchart.element.id + '_LegendItemText' + k.toString(), location.x + symbol['width'] / 2 + legend.shapePadding, location.y + textHeight / 4, 'start', legendEventArgs.text);\n var element = renderTextElement(options, legend.textStyle, smithchart.themeStyle.legendLabel, legendGroup);\n element.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + options.text + ' series');\n legendGroup.appendChild(element);\n this.legendItemGroup.appendChild(legendGroup);\n return this.legendItemGroup;\n };\n SmithchartLegend.prototype.drawLegendShape = function (smithchart, legendSeries, locX, locY, index, legend, legendEventArgs) {\n var element;\n var circleOptions;\n var pathOptions;\n var path;\n var symbol = legend.itemStyle;\n var width = symbol['width'];\n var height = symbol['height'];\n var x = locX + (-width / 2);\n var y = locY + (-height / 2);\n var border = { color: symbol.border.color, width: symbol.border.width };\n var opacity = 1;\n var fill = (smithchart.series[index].visibility === 'visible') ? legendEventArgs.fill : 'grey';\n var shape = legendEventArgs.shape.toLowerCase();\n var radius = Math.sqrt(height * height + width * width) / 2;\n switch (shape) {\n case 'circle':\n circleOptions = new CircleOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border, opacity, locX, locY, radius, null);\n element = smithchart.renderer.drawCircle(circleOptions);\n break;\n case 'rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + ((width / 2) + locX) + ' ' + (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 pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + ((width / 2) + locX) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'pentagon':\n var eq = 72;\n for (var j = 0; j <= 5; j++) {\n var xValue = radius * Math.cos((Math.PI / 180) * (j * eq));\n var yValue = radius * Math.sin((Math.PI / 180) * (j * eq));\n if (j === 0) {\n path = 'M' + ' ' + (xValue + locX) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'triangle':\n path = 'M' + ' ' + x + ' ' + ((height / 2) + locY) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' Z';\n pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n }\n return element;\n };\n /**\n * Get module name.\n */\n SmithchartLegend.prototype.getModuleName = function () {\n return 'SmithchartLegend';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n SmithchartLegend.prototype.destroy = function (smithchart) {\n /**\n * Destroy method performed here\n */\n };\n return SmithchartLegend;\n}());\nexport { SmithchartLegend };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 * Sparkline base API Class declarations.\n */\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Configures the borders in the Sparkline.\n */\nvar SparklineBorder = /** @class */ (function (_super) {\n __extends(SparklineBorder, _super);\n function SparklineBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], SparklineBorder.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], SparklineBorder.prototype, \"width\", void 0);\n return SparklineBorder;\n}(ChildProperty));\nexport { SparklineBorder };\n/**\n * Configures the fonts in sparklines.\n */\nvar SparklineFont = /** @class */ (function (_super) {\n __extends(SparklineFont, _super);\n function SparklineFont() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"color\", void 0);\n __decorate([\n Property('Roboto, Segoe UI, Noto, Sans-serif')\n ], SparklineFont.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"fontWeight\", void 0);\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], SparklineFont.prototype, \"opacity\", void 0);\n return SparklineFont;\n}(ChildProperty));\nexport { SparklineFont };\n/**\n * To configure the tracker line settings.\n */\nvar TrackLineSettings = /** @class */ (function (_super) {\n __extends(TrackLineSettings, _super);\n function TrackLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TrackLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], TrackLineSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], TrackLineSettings.prototype, \"width\", void 0);\n return TrackLineSettings;\n}(ChildProperty));\nexport { TrackLineSettings };\n/**\n * To configure the tooltip settings for sparkline.\n */\nvar SparklineTooltipSettings = /** @class */ (function (_super) {\n __extends(SparklineTooltipSettings, _super);\n function SparklineTooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SparklineTooltipSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], SparklineTooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], SparklineTooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], SparklineTooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, SparklineBorder)\n ], SparklineTooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ size: '13px', fontWeight: 'Normal', fontStyle: 'Normal', fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif' }, SparklineFont)\n ], SparklineTooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({}, TrackLineSettings)\n ], SparklineTooltipSettings.prototype, \"trackLineSettings\", void 0);\n return SparklineTooltipSettings;\n}(ChildProperty));\nexport { SparklineTooltipSettings };\n/**\n * To configure the sparkline container area customization\n */\nvar ContainerArea = /** @class */ (function (_super) {\n __extends(ContainerArea, _super);\n function ContainerArea() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('transparent')\n ], ContainerArea.prototype, \"background\", void 0);\n __decorate([\n Complex({}, SparklineBorder)\n ], ContainerArea.prototype, \"border\", void 0);\n return ContainerArea;\n}(ChildProperty));\nexport { ContainerArea };\n/**\n * To configure axis line settings\n */\nvar LineSettings = /** @class */ (function (_super) {\n __extends(LineSettings, _super);\n function LineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], LineSettings.prototype, \"color\", void 0);\n __decorate([\n Property('')\n ], LineSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property(1)\n ], LineSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], LineSettings.prototype, \"opacity\", void 0);\n return LineSettings;\n}(ChildProperty));\nexport { LineSettings };\n/**\n * To configure the sparkline rangeband\n */\nvar RangeBandSettings = /** @class */ (function (_super) {\n __extends(RangeBandSettings, _super);\n function RangeBandSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"startRange\", void 0);\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"endRange\", void 0);\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"opacity\", void 0);\n return RangeBandSettings;\n}(ChildProperty));\nexport { RangeBandSettings };\n/**\n * To configure the sparkline axis\n */\nvar AxisSettings = /** @class */ (function (_super) {\n __extends(AxisSettings, _super);\n function AxisSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"minX\", void 0);\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"maxX\", void 0);\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"minY\", void 0);\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"maxY\", void 0);\n __decorate([\n Property(0)\n ], AxisSettings.prototype, \"value\", void 0);\n __decorate([\n Complex({}, LineSettings)\n ], AxisSettings.prototype, \"lineSettings\", void 0);\n return AxisSettings;\n}(ChildProperty));\nexport { AxisSettings };\n/**\n * To configure the sparkline padding.\n */\nvar Padding = /** @class */ (function (_super) {\n __extends(Padding, _super);\n function Padding() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(5)\n ], Padding.prototype, \"left\", void 0);\n __decorate([\n Property(5)\n ], Padding.prototype, \"right\", void 0);\n __decorate([\n Property(5)\n ], Padding.prototype, \"bottom\", void 0);\n __decorate([\n Property(5)\n ], Padding.prototype, \"top\", void 0);\n return Padding;\n}(ChildProperty));\nexport { Padding };\n/**\n * To configure the sparkline marker options.\n */\nvar SparklineMarkerSettings = /** @class */ (function (_super) {\n __extends(SparklineMarkerSettings, _super);\n function SparklineMarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SparklineMarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], SparklineMarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(5)\n ], SparklineMarkerSettings.prototype, \"size\", void 0);\n __decorate([\n Property('#00bdae')\n ], SparklineMarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ width: 1 }, SparklineBorder)\n ], SparklineMarkerSettings.prototype, \"border\", void 0);\n return SparklineMarkerSettings;\n}(ChildProperty));\nexport { SparklineMarkerSettings };\n/**\n * To configure the datalabel offset\n */\nvar LabelOffset = /** @class */ (function (_super) {\n __extends(LabelOffset, _super);\n function LabelOffset() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], LabelOffset.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], LabelOffset.prototype, \"y\", void 0);\n return LabelOffset;\n}(ChildProperty));\nexport { LabelOffset };\n/**\n * To configure the sparkline dataLabel options.\n */\nvar SparklineDataLabelSettings = /** @class */ (function (_super) {\n __extends(SparklineDataLabelSettings, _super);\n function SparklineDataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SparklineDataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], SparklineDataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('transparent')\n ], SparklineDataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], SparklineDataLabelSettings.prototype, \"format\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, SparklineBorder)\n ], SparklineDataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ size: '14px', fontWeight: 'Medium', fontStyle: 'Medium', fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif' }, SparklineFont)\n ], SparklineDataLabelSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({}, LabelOffset)\n ], SparklineDataLabelSettings.prototype, \"offset\", void 0);\n __decorate([\n Property('None')\n ], SparklineDataLabelSettings.prototype, \"edgeLabelMode\", void 0);\n return SparklineDataLabelSettings;\n}(ChildProperty));\nexport { SparklineDataLabelSettings };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { PathOption, drawPath, drawRectangle, RectOption, Rect, CircleOption, drawCircle } from '../utils/helper';\nimport { measureText, renderTextElement, TextOption } from '../utils/helper';\n/**\n * Sparkline rendering calculation file\n */\nvar SparklineRenderer = /** @class */ (function () {\n /**\n * Sparkline data calculations\n * @param sparkline\n */\n function SparklineRenderer(sparkline) {\n this.sparkline = sparkline;\n }\n /**\n * To process the sparkline data\n */\n SparklineRenderer.prototype.processData = function (data) {\n if (data === void 0) { data = this.sparkline.dataSource; }\n if (!this.sparkline.dataSource.length) {\n return;\n }\n else if (!isNaN(data[0]) || this.sparkline.valueType === 'Numeric') {\n this.sparkline.sparklineData = data; // extend([], data) as Object[];\n }\n else {\n this['process' + this.sparkline.valueType]();\n }\n this.axisCalculation();\n };\n /**\n * To process sparkline category data.\n */\n SparklineRenderer.prototype.processCategory = function (data, x, y) {\n var _this = this;\n if (data === void 0) { data = this.sparkline.dataSource; }\n if (x === void 0) { x = this.sparkline.xName; }\n if (y === void 0) { y = this.sparkline.yName; }\n var temp = [];\n var xValues = [];\n data.forEach(function (value, index) {\n if (xValues.indexOf(value[x]) === -1) {\n xValues.push(value[x]);\n }\n var currentData = {};\n currentData[_this.sparkline.xName] = xValues.indexOf(value[x]);\n currentData[_this.sparkline.yName] = value[y];\n temp.push(currentData);\n });\n this.sparkline.sparklineData = temp;\n };\n /**\n * To process sparkline DateTime data.\n */\n SparklineRenderer.prototype.processDateTime = function (data, x, y) {\n if (data === void 0) { data = this.sparkline.dataSource; }\n if (x === void 0) { x = this.sparkline.xName; }\n if (y === void 0) { y = this.sparkline.yName; }\n var temp = [];\n data.forEach(function (value, index) {\n var currentData = {};\n currentData[x] = value[x].getTime();\n currentData[y] = value[y];\n temp.push(currentData);\n });\n this.sparkline.sparklineData = temp;\n };\n /**\n * To render sparkline series.\n * @private\n */\n SparklineRenderer.prototype.renderSeries = function () {\n var spark = this.sparkline;\n this.clipId = spark.element.id + '_sparkline_clip_path';\n this.drawAxis();\n var args = {\n name: 'seriesRendering', cancel: false, lineWidth: spark.lineWidth, border: spark.border, fill: spark.fill, sparkline: spark\n };\n spark.trigger(args.name, args);\n if (!this.visiblePoints || args.cancel) {\n return;\n }\n if (spark.type !== 'Pie' && spark.type !== 'WinLoss' && spark.rangeBandSettings.length) {\n var group = this.sparkline.renderer.createGroup({ id: this.sparkline.element.id + '_sparkline_rangeband_g' });\n for (var i = 0; i < spark.rangeBandSettings.length; i++) {\n if ((spark.axisSettings.minY <= spark.rangeBandSettings[i].startRange) ||\n (spark.axisSettings.maxY >= spark.rangeBandSettings[i].endRange)) {\n this.rangeBand(spark.rangeBandSettings[i], group, i);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n }\n this['render' + spark.type](this.visiblePoints, args);\n this.renderMarker(this.visiblePoints);\n this.renderLabel(this.visiblePoints);\n };\n /**\n * To render a range band\n */\n SparklineRenderer.prototype.rangeBand = function (rangeBandSettings, group, index) {\n var model = this.sparkline;\n var height = (model.availableSize.height) - model.padding.top * 2;\n var width = (model.availableSize.width) - model.padding.left * 2;\n var stValue = rangeBandSettings.startRange;\n var edValue = rangeBandSettings.endRange;\n var stHeight = (height - ((height / this.unitY) * (stValue - this.min))) + model.padding.top;\n var edHeight = (height - ((height / this.unitY) * (edValue - this.min))) + model.padding.top;\n if (edHeight > (height + model.padding.top)) {\n edHeight = (height + model.padding.top);\n }\n else if (edHeight < (0 + model.padding.top)) {\n edHeight = (0 + model.padding.top);\n }\n if (stHeight > (height + model.padding.top)) {\n stHeight = (height + model.padding.top);\n }\n else if (stHeight < (0 + model.padding.top)) {\n stHeight = (0 + model.padding.top);\n }\n var path = 'M ' + (model.padding.left) + ' ' + stHeight + ' L ' + (width + (model.padding.left)) + ' ' + stHeight +\n ' L ' + (width + (model.padding.left)) + ' ' + edHeight + ' L ' + (model.padding.left) + ' ' + edHeight + ' Z ';\n var pathOption = {\n 'id': model.element.id + '_rangeBand_' + index,\n 'fill': rangeBandSettings.color,\n 'opacity': rangeBandSettings.opacity,\n 'stroke': 'transparent',\n 'stroke-width': model.lineWidth,\n 'd': path,\n 'stroke-dasharray': ''\n };\n drawPath(this.sparkline, pathOption, group);\n };\n /**\n * To render line series\n */\n SparklineRenderer.prototype.renderLine = function (points, args) {\n var spark = this.sparkline;\n var g = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var pathOption = new PathOption(spark.element.id + '_sparkline_line', 'transparent', args.lineWidth, args.fill, spark.opacity);\n var d = '';\n for (var i = 0, len = points.length; i < len; i++) {\n if (i === 0) {\n d = 'M ' + points[0].x + ' ' + points[i].y + ' ';\n }\n d += 'L ' + points[i].x + ' ' + points[i].y + ' ';\n }\n pathOption.d = d;\n drawPath(this.sparkline, pathOption, g);\n this.sparkline.svgObject.appendChild(g);\n };\n /**\n * To render pie series\n */\n /* tslint:disable:no-string-literal */\n SparklineRenderer.prototype.renderPie = function (points, args) {\n var spark = this.sparkline;\n var height = spark.availableSize.height - (spark.padding.top + spark.padding.bottom);\n var width = spark.availableSize.width - (spark.padding.left + spark.padding.right);\n var area = (height <= width) ? height / 2 : width / 2;\n var X = spark.availableSize.width / 2; // center position of x\n var Y = spark.availableSize.height / 2; // center position of y\n var deg = 0;\n var stRad;\n var edRad;\n var stroke = args.border.color;\n var opacity = spark.opacity;\n var strokeWidth = args.border.width;\n var colors = (spark.palette.length) ? spark.palette : ['#00bdae', '#404041', '#357cd2', '#e56590', '#f8b883',\n '#70ad47', '#dd8abd', '#7f84e8', '#7bb4eb', '#ea7a57'];\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g' });\n var low;\n var high;\n var locations = extend([], [], points);\n if (spark.highPointColor || spark.lowPointColor) {\n var pointsYvalues = locations.map(function (a) { return a.yVal; });\n low = Math.min.apply(null, pointsYvalues);\n high = Math.max.apply(null, pointsYvalues);\n }\n this.negativePointIndexes = [];\n for (var i = 0, stDeg = 90, edDeg = void 0, flag = void 0; i < points.length; i++) {\n stDeg += deg;\n deg = points[i]['degree'];\n edDeg = stDeg + deg;\n stRad = (stDeg - 90) * Math.PI / 180.0;\n edRad = (edDeg - 90) * Math.PI / 180.0;\n points[i]['stAng'] = stRad;\n points[i]['endAng'] = edRad;\n flag = (deg < 180) ? '0' : '1';\n var temp = points[i]['coordinates'] = {\n sX: X + (area * Math.cos(stRad)), sY: Y +\n (area * Math.sin(stRad)), eX: X + (area * Math.cos(edRad)), eY: Y + (area * Math.sin(edRad))\n };\n var pathArc = 'M ' + X + ' ' + Y + ' L ' + temp['eX'] + ' ' + temp['eY'] + ' A ' + area + ' ' +\n area + ' 0 ' + flag + ',0 ' + temp['sX'] + ' ' + temp['sY'] + ' Z';\n var pathOption = {\n 'id': spark.element.id + '_sparkline_pie_' + i,\n 'opacity': opacity,\n 'fill': colors[i % colors.length],\n 'stroke': stroke,\n 'stroke-width': strokeWidth,\n 'd': pathArc,\n 'stroke-dasharray': ''\n };\n this.getPieSpecialPoint(points[i], spark, pathOption, i, high, low, points.length);\n var pointArgs = this.triggerPointRender('pointRendering', i, pathOption.fill, { color: stroke, width: strokeWidth });\n pathOption.fill = pointArgs.fill;\n pathOption.stroke = pointArgs.border.color;\n pathOption['stroke-width'] = pointArgs.border.width;\n if (!pointArgs.cancel) {\n var element = drawPath(this.sparkline, pathOption, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n var diffRadian = edRad - stRad;\n var mid = {\n x: X + ((area / 2) * Math.cos(stRad + (diffRadian / 2))),\n y: Y + ((area / 2) * Math.sin(stRad + (diffRadian / 2)))\n };\n points[i].location.x = mid.x;\n points[i].location.y = mid.y;\n }\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To get special point color and option for Pie series.\n */\n SparklineRenderer.prototype.getPieSpecialPoint = function (temp, spark, option, i, high, low, length) {\n if (temp.yVal < 0 && spark.negativePointColor) {\n option.fill = spark.negativePointColor;\n this.negativePointIndexes.push(i);\n }\n if (i === 0 && spark.startPointColor) {\n option.fill = spark.startPointColor;\n this.startPointIndex = i;\n }\n else if ((i === (length - 1)) && spark.endPointColor) {\n option.fill = spark.endPointColor;\n this.endPointIndex = i;\n }\n if (temp.yVal === high && spark.highPointColor) {\n option.fill = spark.highPointColor;\n this.highPointIndex = i;\n }\n else if (temp.yVal === low && spark.lowPointColor) {\n option.fill = spark.lowPointColor;\n this.lowPointIndex = i;\n }\n };\n /**\n * To render area series\n */\n SparklineRenderer.prototype.renderArea = function (points, args) {\n var spark = this.sparkline;\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var pathOption = new PathOption(spark.element.id + '_sparkline_area', args.fill, 0, 'transparent', spark.opacity);\n var d = '';\n var str = '';\n for (var i = 0, len = points.length; i < len; i++) {\n if (i !== 0) {\n str += 'L ' + points[i].x + ' ' + points[i].y + ' ';\n }\n else {\n d = 'M ' + points[i].x + ' ' + this.axisHeight + ' ';\n str = 'M ' + points[i].x + ' ' + points[i].y + ' ';\n }\n d += 'L ' + points[i].x + ' ' + points[i].y + ' ';\n if (i === (len - 1)) {\n d += 'L ' + points[i].x + ' ' + this.axisHeight + ' Z';\n }\n }\n pathOption.d = d;\n drawPath(this.sparkline, pathOption, group);\n pathOption = new PathOption(spark.element.id + '_sparkline_area_str', 'transparent', args.border.width, args.border.color, spark.opacity, '', str);\n drawPath(this.sparkline, pathOption, group);\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To render column series\n */\n SparklineRenderer.prototype.renderColumn = function (points, args) {\n var spark = this.sparkline;\n var locations = extend([], [], points);\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var lowPos;\n var highPos;\n if (this.sparkline.highPointColor || this.sparkline.lowPointColor) {\n var pointsYPos = locations.map(function (a) { return a.markerPosition; });\n highPos = Math.min.apply(null, pointsYPos);\n lowPos = Math.max.apply(null, pointsYPos);\n }\n var id = spark.element.id + '_sparkline_column_';\n var rectOptions = new RectOption(id, '', args.border, spark.opacity, null);\n var paletteLength = spark.palette.length;\n var temp;\n var len = points.length;\n this.negativePointIndexes = [];\n for (var i = 0; i < len; i++) {\n temp = points[i];\n rectOptions.id = id + i;\n rectOptions.fill = (paletteLength) ? spark.palette[i % paletteLength] : args.fill;\n rectOptions.rect = new Rect(temp.x, temp.y, temp.width, temp.height);\n this.getSpecialPoint(true, temp, spark, rectOptions, i, highPos, lowPos, len);\n temp.location.y = (temp.markerPosition <= this.axisHeight) ? temp.y : (temp.y + temp.height);\n temp.location.x = temp.x + (temp.width / 2);\n rectOptions.stroke = args.border.color ? (args.border.color) : rectOptions.fill;\n var pointArgs = this.triggerPointRender('pointRendering', i, rectOptions.fill, { color: rectOptions.stroke, width: args.border.width });\n rectOptions.fill = pointArgs.fill;\n rectOptions.stroke = pointArgs.border.color;\n rectOptions['stroke-width'] = pointArgs.border.width;\n if (!pointArgs.cancel) {\n var element = drawRectangle(spark, rectOptions, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To render WinLoss series\n */\n SparklineRenderer.prototype.renderWinLoss = function (points, args) {\n var spark = this.sparkline;\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var id = spark.element.id + '_sparkline_winloss_';\n var options = new RectOption(id, '', args.border, spark.opacity, null);\n var temp;\n var len = points.length;\n var paletteLength = spark.palette.length;\n for (var i = 0; i < len; i++) {\n temp = points[i];\n options.id = id + i;\n options.fill = (paletteLength) ? spark.palette[i % paletteLength] : ((temp.yVal === this.axisValue) ?\n (this.sparkline.tiePointColor || '#a216f3') : ((temp.yVal > this.axisValue) ? args.fill :\n (spark.negativePointColor || '#e20f07')));\n options.stroke = (args.border.color) ? (args.border.color) : options.fill;\n options.rect = new Rect(temp.x, temp.y, temp.width, temp.height);\n temp.location.x = temp.x + (temp.width / 2);\n temp.location.y = (temp.yVal >= this.axisValue) ? (temp.y) : (temp.y + temp.height);\n var pointArgs = this.triggerPointRender('pointRendering', i, options.fill, { color: options.stroke, width: args.border.width });\n options.fill = pointArgs.fill;\n options.stroke = pointArgs.border.color;\n options['stroke-width'] = pointArgs.border.width;\n if (!pointArgs.cancel) {\n var element = drawRectangle(spark, options, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n SparklineRenderer.prototype.renderMarker = function (points) {\n var spark = this.sparkline;\n var marker = spark.markerSettings;\n if ((spark.type === 'Pie' || spark.type === 'WinLoss' || !marker.visible.length)) {\n return;\n }\n var locations = extend([], [], points);\n var group = this.sparkline.renderer.createGroup({\n id: spark.element.id + '_sparkline_marker_g',\n 'clip-path': 'url(#' + this.clipId + ')'\n });\n var temp;\n var id = spark.element.id + '_sparkline_marker_';\n var option = new CircleOption('', marker.fill, marker.border, marker.opacity, 0, 0, marker.size / 2, '');\n var highPos;\n var lowPos;\n var visible = marker.visible.join();\n if ((visible.toLowerCase().indexOf('high') > -1) || (visible.toLowerCase().indexOf('low') > -1)) {\n var pointsYPos = locations.map(function (a) { return a.markerPosition; });\n highPos = Math.min.apply(null, pointsYPos);\n lowPos = Math.max.apply(null, pointsYPos);\n }\n this.negativePointIndexes = [];\n for (var i = 0, length_1 = points.length; i < length_1; i++) {\n temp = points[i];\n option.id = id + i;\n option.cx = temp.location.x;\n option.cy = temp.location.y;\n option.fill = marker.fill;\n var render = (visible.toLowerCase().indexOf('all') > -1);\n render = this.getSpecialPoint(render, temp, spark, option, i, highPos, lowPos, length_1, visible.toLowerCase());\n option.stroke = marker.border.color || option.fill;\n var markerArgs = {\n name: 'markerRendering', cancel: false, border: { color: option.stroke, width: marker.border.width }, fill: option.fill,\n pointIndex: i, sparkline: this.sparkline, x: option.cx, y: option.cy, size: marker.size\n };\n this.sparkline.trigger(markerArgs.name, markerArgs);\n if (render && !markerArgs.cancel) {\n option.fill = markerArgs.fill;\n option.stroke = markerArgs.border.color;\n option['stroke-width'] = markerArgs.border.width;\n option.r = markerArgs.size / 2;\n var element = drawCircle(spark, option, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To get special point color and option.\n */\n SparklineRenderer.prototype.getSpecialPoint = function (render, temp, spark, option, i, highPos, lowPos, length, visible) {\n if (visible === void 0) { visible = ''; }\n if (temp.markerPosition > this.axisHeight) {\n option.fill = spark.negativePointColor || option.fill;\n this.negativePointIndexes.push(i);\n render = render || (visible.indexOf('negative') > -1);\n }\n if (i === 0) {\n option.fill = spark.startPointColor || option.fill;\n this.startPointIndex = i;\n render = render || (visible.indexOf('start') > -1);\n }\n else if ((i === (length - 1))) {\n option.fill = spark.endPointColor || option.fill;\n this.endPointIndex = i;\n render = render || (visible.indexOf('end') > -1);\n }\n if (temp.markerPosition === highPos) {\n option.fill = spark.highPointColor || option.fill;\n this.highPointIndex = i;\n render = render || (visible.indexOf('high') > -1);\n }\n else if (temp.markerPosition === lowPos) {\n option.fill = spark.lowPointColor || option.fill;\n this.lowPointIndex = i;\n render = render || (visible.indexOf('low') > -1);\n }\n return render;\n };\n /**\n * To render data label for sparkline.\n */\n SparklineRenderer.prototype.renderLabel = function (points) {\n var spark = this.sparkline;\n var dataLabel = spark.dataLabelSettings;\n var color = (spark.theme === 'Highcontrast') ? '#FFFFFF' : '#424242';\n color = (dataLabel.textStyle.color) ? dataLabel.textStyle.color : color;\n if ((spark.type === 'WinLoss' || !dataLabel.visible.length)) {\n return;\n }\n var locations = extend([], [], points);\n var id = spark.element.id + '_sparkline_label_';\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_label_g',\n style: 'pointer-events: none;' });\n var g;\n var temp;\n var textId = id + 'text_';\n var rectId = id + 'rect_';\n var option = new TextOption('', 0, 0, 'middle', '', 'middle');\n var labelStyle = dataLabel.textStyle;\n var pointsYPos = locations.map(function (a) { return a.markerPosition; });\n var highPos = Math.min.apply(null, pointsYPos);\n var lowPos = Math.max.apply(null, pointsYPos);\n var space = 1;\n var padding = (dataLabel.fill !== 'transparent' || dataLabel.border.width) ? 2 : 0;\n var size = measureText('sparkline_measure_text', labelStyle);\n var rectOptions = new RectOption('', dataLabel.fill, dataLabel.border, dataLabel.opacity, null);\n var edgeLabelOption;\n for (var i = 0, length_2 = points.length; i < length_2; i++) {\n temp = points[i];\n option.id = textId + i;\n option.x = temp.location.x + dataLabel.offset.x;\n option.y = ((spark.type === 'Pie') ? temp.location.y : ((temp.markerPosition > this.axisHeight) ? (temp.location.y +\n (size.height / 2) + space + padding) : (temp.location.y - (size.height / 2) - space - padding))) + dataLabel.offset.y;\n option.text = (dataLabel.format !== '') ? this.formatter(dataLabel.format, this.sparkline.dataSource[i]) :\n temp.yVal.toString();\n var labelArgs = {\n name: 'dataLabelRendering', cancel: false, border: dataLabel.border, fill: dataLabel.fill, pointIndex: i,\n sparkline: this.sparkline, x: option.x, y: option.y, text: option.text, color: color\n };\n this.sparkline.trigger(labelArgs.name, labelArgs);\n size = measureText(labelArgs.text, labelStyle);\n option.text = labelArgs.text;\n var render = (dataLabel.visible.join().toLowerCase().indexOf('all') > -1);\n render = this.getLabelVisible(render, temp, i, dataLabel, length_2, highPos, lowPos);\n edgeLabelOption = this.arrangeLabelPosition(dataLabel.edgeLabelMode, render, labelArgs.x, i, length_2, size, padding);\n if (render && !labelArgs.cancel && edgeLabelOption.render) {\n rectOptions.id = rectId + i;\n rectOptions.fill = labelArgs.fill;\n rectOptions.stroke = labelArgs.border.color;\n rectOptions['stroke-width'] = labelArgs.border.width;\n option.x = edgeLabelOption.x;\n option.y = labelArgs.y;\n rectOptions.rect = new Rect(option.x - ((size.width / 2) + padding), (option.y - padding - (size.height / 1.75)), size.width + (padding * 2), size.height + (padding * 2));\n g = this.sparkline.renderer.createGroup({ id: id + 'g' + i });\n drawRectangle(spark, rectOptions, g);\n renderTextElement(option, labelStyle, labelArgs.color, g);\n group.appendChild(g);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n SparklineRenderer.prototype.arrangeLabelPosition = function (edgeLabel, render, x, index, length, size, padding) {\n if (edgeLabel === 'None') {\n return { x: x, render: render };\n }\n if (index === 0 && ((x - (size.width / 2) - padding) <= 0)) {\n if (edgeLabel === 'Hide') {\n render = false;\n }\n else {\n x = this.sparkline.padding.left + padding + (size.width / 2);\n }\n }\n else if (index === length - 1 && ((x + (size.width / 2) + padding) >= this.sparkline.availableSize.width)) {\n if (edgeLabel === 'Hide') {\n render = false;\n }\n else {\n x -= (size.width / 2 + padding);\n }\n }\n return { x: x, render: render };\n };\n /**\n * To get special point color and option.\n */\n SparklineRenderer.prototype.getLabelVisible = function (render, temp, i, label, length, highPos, lowPos) {\n var labelVisible = label.visible.join().toLowerCase();\n if (temp.markerPosition > this.axisHeight) {\n render = render || (labelVisible.indexOf('negative') > -1);\n }\n if (i === 0) {\n render = render || (labelVisible.indexOf('start') > -1);\n }\n else if ((i === (length - 1))) {\n render = render || (labelVisible.indexOf('end') > -1);\n }\n if (temp.markerPosition === highPos) {\n render = render || (labelVisible.indexOf('high') > -1);\n }\n else if (temp.markerPosition === lowPos) {\n render = render || (labelVisible.indexOf('low') > -1);\n }\n return render;\n };\n /**\n * To format text\n */\n SparklineRenderer.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 * To calculate min max for x and y axis\n */\n SparklineRenderer.prototype.axisCalculation = function () {\n this.findRanges(this.sparkline.sparklineData);\n };\n /**\n * To find x axis interval.\n */\n SparklineRenderer.prototype.getInterval = function (data, x, type) {\n var interval = 1;\n var x1 = data[0][x];\n var x2 = isNullOrUndefined(data[1]) ? undefined : data[1][x];\n if (!isNullOrUndefined(x1) && !isNullOrUndefined(x2)) {\n var temp = extend([], data);\n var validData_1 = [];\n temp.forEach(function (value) {\n if (!isNullOrUndefined(value[x])) {\n validData_1.push(value);\n }\n });\n validData_1.sort(function (a, b) {\n if (isNullOrUndefined(a[x]) || isNullOrUndefined(b[x])) {\n return 0;\n }\n return a[x] - b[x];\n });\n interval = validData_1[1][x] - validData_1[0][x];\n }\n return interval;\n };\n /**\n * To calculate axis ranges internally.\n */\n // tslint:disable-next-line:max-func-body-length\n SparklineRenderer.prototype.findRanges = function (data) {\n var model = this.sparkline;\n var max;\n var min;\n var minX;\n var maxX;\n var maxPointsLength = data.length;\n var temp;\n var sumofValues = 0;\n var isNumericArray = Array.isArray(data) && typeof data[0] !== 'object';\n if (isNumericArray) {\n if (model.type === 'Pie') {\n for (var i = 0; i < maxPointsLength; i++) {\n sumofValues += Math.abs(data[i]);\n }\n }\n else {\n max = Math.max.apply(null, data);\n min = Math.min.apply(null, data);\n minX = 0;\n maxX = maxPointsLength - 1;\n }\n }\n else {\n if (model.type === 'Pie') {\n for (var i = 0; i < maxPointsLength; i++) {\n sumofValues += Math.abs(data[i][model.yName]);\n }\n }\n else {\n if (isNullOrUndefined(data[0][model.xName])) {\n var x_1 = data.map(function (z) { return z[model.yName]; });\n max = Math.max.apply(null, x_1);\n min = Math.min.apply(null, x_1);\n }\n else {\n temp = extend([], data);\n temp = temp.sort(function (a, b) { return a[model.yName] - b[model.yName]; });\n max = temp[temp.length - 1][model.yName];\n min = temp[0][model.yName];\n }\n if (!isNullOrUndefined(data[0][model.xName])) {\n temp = temp.sort(function (a, b) { return a[model.xName] - b[model.xName]; });\n maxX = temp[temp.length - 1][model.xName];\n minX = temp[0][model.xName];\n }\n else {\n minX = 0;\n maxX = maxPointsLength - 1;\n }\n }\n }\n var y2;\n var height;\n var width;\n var x1 = 0;\n var y1;\n var padding = model.padding;\n var point;\n var axis = model.axisSettings;\n var value = axis.value;\n if (model.type !== 'Pie') {\n this.maxLength = maxPointsLength;\n height = model.availableSize.height - (padding.bottom + padding.top);\n width = model.availableSize.width - (padding.left + padding.right);\n maxX = isNullOrUndefined(axis.maxX) ? maxX : axis.maxX;\n minX = isNullOrUndefined(axis.minX) ? minX : axis.minX;\n max = isNullOrUndefined(axis.maxY) ? max : axis.maxY;\n min = isNullOrUndefined(axis.minY) ? min : axis.minY;\n var color = (model.theme === 'Highcontrast') ? '#FFFFFF' : '#000000';\n color = (axis.lineSettings.color) ? axis.lineSettings.color : color;\n var eventArgs = {\n name: 'axisRendering', cancel: false, sparkline: model, maxX: maxX, minX: minX, maxY: max, minY: min,\n value: axis.value, lineColor: color, lineWidth: axis.lineSettings.width\n };\n model.trigger('axisRendering', eventArgs);\n if (eventArgs.cancel) {\n this.visiblePoints = [];\n return;\n }\n maxX = eventArgs.maxX;\n minX = eventArgs.minX;\n max = eventArgs.maxY;\n min = eventArgs.minY;\n value = this.axisValue = eventArgs.value;\n this.axisColor = eventArgs.lineColor;\n this.axisWidth = eventArgs.lineWidth;\n var unitX = maxX - minX;\n var unitY = max - min;\n unitX = (unitX === 0) ? 1 : unitX;\n unitY = (unitY === 0) ? 1 : unitY;\n this.unitX = unitX;\n this.unitY = unitY;\n this.min = min;\n x1 = 0;\n y1 = height - ((height / unitY) * (-min));\n y1 = (min < 0 && max <= 0) ? 0 : (min < 0 && max > 0) ? y1 : height;\n if (value >= min && value <= max) {\n y1 = height - Math.round(height * ((value - min) / this.unitY));\n }\n this.axisHeight = y1 + padding.top;\n }\n var percent;\n var x;\n var y;\n var visiblePoints = [];\n var interval = this.getInterval(data, model.xName, model.valueType);\n for (var i = 0; i < maxPointsLength; i++) {\n if (isNullOrUndefined(data[i][model.xName]) && isNullOrUndefined(data[i][model.yName]) && ((data[i][model.yName]) !== 0)\n && isNumericArray) {\n x = i;\n y = data[i];\n }\n else if (isNullOrUndefined(data[i][model.xName])) {\n x = i;\n y = data[i][model.yName];\n }\n else {\n x = data[i][model.xName];\n y = data[i][model.yName];\n }\n if (isNullOrUndefined(x) || isNullOrUndefined(y)) {\n continue;\n }\n if (model.type === 'Line' || model.type === 'Area') {\n y2 = (min !== max && maxPointsLength !== 1) ? height - Math.round(height * ((y - min) / this.unitY)) : padding.top;\n point = { x: (minX !== maxX) ? Math.round(width * ((x - minX) / this.unitX)) : width / 2, y: y2, markerPosition: y2 };\n }\n else if (model.type === 'Column' || model.type === 'WinLoss') {\n var colWidth = width / (((maxX - minX) / interval) + 1);\n var calSpace = 0.5;\n var space = (calSpace * 2); //calspace is default space for column and winloss\n colWidth -= (space);\n x1 = (((x - minX) / interval) * (colWidth + space)) + (space / 2);\n if (model.type === 'WinLoss') {\n // win or gain column height half of the height , draw(zero) height factor\n var winLossFactor = 0.5;\n var drawHeightFactor = 40;\n y2 = (y > value) ? (height / 4) : (y < value) ? (height * winLossFactor) :\n ((height * winLossFactor) - (height / drawHeightFactor));\n point = { x: x1, y: y2, height: (y !== value) ? (height / 4) : height / 20, width: colWidth,\n markerPosition: (y2 > y1) ? (y1 + Math.abs(y2 - y1)) : y2 };\n }\n else {\n var z = ((height / this.unitY) * (y - min));\n var z1 = (y === min && y > value) ? ((maxPointsLength !== 1 && this.unitY !== 1) ?\n (height / this.unitY) * (min / 2) : (z | 1)) :\n (y === max && y < value && maxPointsLength !== 1 && this.unitY !== 1) ? (height / this.unitY) * (-max / 2) : z;\n y2 = Math.abs(height - z1);\n point = {\n x: x1, y: (y2 > y1) ? y1 : y2, height: Math.abs(y2 - y1),\n width: colWidth, markerPosition: (y2 > y1) ? (y1 + Math.abs(y2 - y1)) : y2\n };\n }\n }\n else if (model.type === 'Pie') {\n percent = (Math.abs(y) / sumofValues) * 100;\n point = {\n percent: percent, degree: ((Math.abs(y) / sumofValues) * 360)\n };\n }\n if (model.type !== 'Pie') {\n point.x += padding.left;\n point.y += padding.top;\n }\n if (model.type !== 'WinLoss') {\n point.markerPosition += padding.top;\n }\n point.location = { x: point.x, y: point.y };\n point.xVal = x;\n point.yVal = y;\n visiblePoints.push(point);\n }\n visiblePoints.sort(function (a, b) {\n return a.x - b.x;\n });\n this.visiblePoints = visiblePoints;\n };\n /**\n * To render the sparkline axis\n */\n SparklineRenderer.prototype.drawAxis = function () {\n var spark = this.sparkline;\n var height = this.axisHeight;\n if ((spark.type !== 'WinLoss') && (spark.type !== 'Pie') && spark.axisSettings.lineSettings.visible) {\n var xAxis = {\n 'id': spark.element.id + '_Sparkline_XAxis',\n 'x1': spark.padding.left, 'y1': height,\n 'x2': spark.availableSize.width - spark.padding.right, 'y2': height,\n 'stroke': this.axisColor,\n 'opacity': spark.axisSettings.lineSettings.opacity,\n 'stroke-dasharray': spark.axisSettings.lineSettings.dashArray,\n 'stroke-width': this.axisWidth,\n 'clip-path': 'url(#' + this.clipId + ')'\n };\n spark.svgObject.appendChild(spark.renderer.drawLine(xAxis));\n }\n };\n /**\n * To trigger point render event\n */\n SparklineRenderer.prototype.triggerPointRender = function (name, i, fill, border) {\n var args = {\n name: name, cancel: false, border: border, fill: fill, sparkline: this.sparkline, pointIndex: i\n };\n this.sparkline.trigger(name, args);\n return args;\n };\n return SparklineRenderer;\n}());\nexport { SparklineRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, Complex } from '@syncfusion/ej2-base';\nimport { remove, L10n, Internationalization, Event, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Browser, EventHandler, Touch, Collection } from '@syncfusion/ej2-base';\nimport { SparklineBorder, SparklineTooltipSettings, ContainerArea, AxisSettings, Padding, SparklineMarkerSettings } from './model/base';\nimport { SparklineDataLabelSettings, RangeBandSettings } from './model/base';\nimport { Size, createSvg, RectOption, Rect, drawRectangle, getIdElement, withInBounds, removeElement } from './utils/helper';\nimport { SparklineRenderer } from './rendering/sparkline-renderer';\n//tslint:disable: no-duplicate-lines\n/**\n * Represents the Sparkline control.\n * ```html\n *
    \n * \n * ```\n */\nvar Sparkline = /** @class */ (function (_super) {\n __extends(Sparkline, _super);\n // Sparkline rendering starts from here.\n /**\n * Constructor for creating the Sparkline widget\n */\n function Sparkline(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.isDevice = Browser.isDevice;\n return _this;\n }\n /**\n * Initializing pre-required values for sparkline.\n */\n Sparkline.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger('load', { sparkline: this });\n this.sparklineRenderer = new SparklineRenderer(this);\n this.createSVG();\n this.wireEvents();\n this.setCulture();\n };\n /**\n * Sparkline Elements rendering starting.\n */\n Sparkline.prototype.render = function () {\n // Sparkline rendering splitted into rendering and calculations\n this.sparklineRenderer.processData();\n this.renderSparkline();\n this.element.appendChild(this.svgObject);\n this.setSecondaryElementPosition();\n this.trigger('loaded', { sparkline: this });\n };\n /**\n * To render sparkline elements\n */\n Sparkline.prototype.renderSparkline = function () {\n // To render the sparkline elements\n this.renderBorder();\n this.createDiv();\n this.sparklineRenderer.renderSeries();\n };\n /**\n * Create secondary element for the tooltip\n */\n Sparkline.prototype.createDiv = function () {\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 this.element.style.display = 'block';\n this.element.style.position = 'relative';\n };\n /**\n * To set the left and top position for data label template for sparkline\n */\n Sparkline.prototype.setSecondaryElementPosition = function () {\n var element = getIdElement(this.element.id + '_Secondary_Element');\n if (!element) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getIdElement(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 /**\n * @private\n * Render the sparkline border\n */\n Sparkline.prototype.renderBorder = function () {\n var width = this.containerArea.border.width;\n var borderRect;\n if (width > 0 || this.containerArea.background !== 'transparent') {\n borderRect = new RectOption(this.element.id + '_SparklineBorder', this.containerArea.background, this.containerArea.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.svgObject.appendChild(drawRectangle(this, borderRect));\n }\n // Used to create clip path sparkline\n var padding = this.padding;\n borderRect = new RectOption(this.element.id + '_sparkline_clip_rect', 'transparent', { color: 'transparent', width: 0 }, 1, new Rect(padding.left, padding.top, this.availableSize.width - (padding.left + padding.right), this.availableSize.height - (padding.top + padding.bottom)));\n var clipPath = this.renderer.createClipPath({ id: this.element.id + '_sparkline_clip_path' });\n drawRectangle(this, borderRect, clipPath);\n this.svgObject.appendChild(clipPath);\n };\n /**\n * To create svg element for sparkline\n */\n Sparkline.prototype.createSVG = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the Sparkline SVG object\n */\n Sparkline.prototype.removeSvg = function () {\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(this.element.id + '_Secondary_Element');\n if (this.sparklineTooltipModule) {\n this.sparklineTooltipModule.removeTooltipElements();\n }\n };\n /**\n * Method to set culture for sparkline\n */\n Sparkline.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * To provide the array of modules needed for sparkline rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Sparkline.prototype.requiredModules = function () {\n var modules = [];\n if (this.tooltipSettings.visible || this.tooltipSettings.trackLineSettings.visible) {\n modules.push({\n member: 'SparklineTooltip',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Method to unbind events for sparkline chart\n */\n Sparkline.prototype.unWireEvents = function () {\n var move = Browser.touchMoveEvent;\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.sparklineMove);\n EventHandler.remove(this.element, cancel, this.sparklineMouseLeave);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.sparklineMouseEnd);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.sparklineResize);\n };\n /**\n * Method to bind events for the sparkline\n */\n Sparkline.prototype.wireEvents = function () {\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchMoveEvent, this.sparklineMove, this);\n EventHandler.add(this.element, 'click', this.sparklineClick, this);\n EventHandler.add(this.element, cancel, this.sparklineMouseLeave, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.sparklineMouseEnd, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.sparklineResize.bind(this));\n new Touch(this.element);\n };\n /**\n * Sparkline resize event.\n * @private\n */\n Sparkline.prototype.sparklineResize = function (e) {\n var _this = this;\n var args = {\n name: 'resize',\n previousSize: this.availableSize,\n sparkline: this,\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 _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 return false;\n };\n /**\n * Handles the mouse move on sparkline.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineMove = function (e) {\n this.setSparklineMouseXY(e);\n this.notify(Browser.touchMoveEvent, e);\n var args = {\n name: 'sparklineMouseMove', cancel: false, sparkline: this, event: e\n };\n this.trigger(args.name, args);\n var pointClick = this.isPointRegion(e);\n if (pointClick.isPointRegion) {\n var pointArgs = {\n name: 'pointRegionMouseMove', cancel: false, event: e, sparkline: this, pointIndex: pointClick.pointIndex\n };\n this.trigger(pointArgs.name, pointArgs);\n }\n return false;\n };\n /**\n * Handles the mouse click on sparkline.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineClick = function (e) {\n this.setSparklineMouseXY(e);\n var args = {\n name: 'sparklineMouseClick', cancel: false, sparkline: this, event: e\n };\n this.trigger(args.name, args);\n var pointClick = this.isPointRegion(e);\n if (pointClick.isPointRegion) {\n var pointArgs = {\n name: 'pointRegionMouseClick', cancel: false, event: e, sparkline: this, pointIndex: pointClick.pointIndex\n };\n this.trigger(pointArgs.name, pointArgs);\n }\n return false;\n };\n /**\n * To check mouse event target is point region or not.\n */\n Sparkline.prototype.isPointRegion = function (e) {\n var _this = this;\n var startId = this.element.id + '_';\n var id = e.target.id.replace(startId, '').split('_');\n if (id[1] === this.type.toLowerCase()) {\n var index_1 = parseInt(id[2], 10);\n if ((isNullOrUndefined(index_1) || isNaN(index_1)) && (this.type === 'Line' || this.type === 'Area')) {\n this.sparklineRenderer.visiblePoints.forEach(function (point, i) {\n if (withInBounds(_this.mouseX, _this.mouseY, new Rect(point.x - 5, point.y - 5, 10, 10))) {\n index_1 = i;\n return;\n }\n });\n }\n return { isPointRegion: true, pointIndex: index_1 };\n }\n return { isPointRegion: false, pointIndex: null };\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineMouseEnd = function (e) {\n this.setSparklineMouseXY(e);\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /**\n * Handles the mouse leave on sparkline.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineMouseLeave = function (e) {\n this.setSparklineMouseXY(e);\n this.notify(Browser.isPointer ? 'pointerleave' : 'mouseleave', e);\n return false;\n };\n /**\n * Method to set mouse x, y from events\n */\n Sparkline.prototype.setSparklineMouseXY = function (e) {\n var pageY;\n var pageX;\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var 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 pageY = e.clientY;\n pageX = e.clientX;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getIdElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n };\n /**\n * To change rendering while property value modified.\n * @private\n */\n Sparkline.prototype.onPropertyChanged = function (newProp, oldProp) {\n var render = false;\n var refresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'xName':\n case 'yName':\n case 'dataSource':\n case 'axisSettings':\n case 'type':\n case 'valueType':\n refresh = true;\n break;\n case 'border':\n case 'markerSettings':\n case 'dataLabelSettings':\n case 'tooltipSettings':\n case 'startPointColor':\n case 'highPointColor':\n case 'lowPointColor':\n case 'endPointColor':\n case 'negativePointColor':\n case 'theme':\n render = true;\n break;\n }\n }\n if (refresh) {\n this.createSVG();\n this.sparklineRenderer.processData();\n this.refreshSparkline();\n }\n else if (render) {\n this.createSVG();\n this.refreshSparkline();\n }\n };\n /**\n * To render sparkline series and appending.\n */\n Sparkline.prototype.refreshSparkline = function () {\n // Issue fix. React had native render method. So OnProperty change used render method won't wrok. \n this.renderSparkline();\n this.element.appendChild(this.svgObject);\n this.setSecondaryElementPosition();\n };\n /**\n * Get component name\n */\n Sparkline.prototype.getModuleName = function () {\n return 'sparkline';\n };\n /**\n * Destroy the component\n */\n Sparkline.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Sparkline.prototype.getPersistData = function () {\n return '';\n };\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"height\", void 0);\n __decorate([\n Complex({}, SparklineBorder)\n ], Sparkline.prototype, \"border\", void 0);\n __decorate([\n Property('Line')\n ], Sparkline.prototype, \"type\", void 0);\n __decorate([\n Property([])\n ], Sparkline.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Numeric')\n ], Sparkline.prototype, \"valueType\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"xName\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"yName\", void 0);\n __decorate([\n Property('#00bdae')\n ], Sparkline.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"highPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"lowPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"startPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"endPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"negativePointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"tiePointColor\", void 0);\n __decorate([\n Property([])\n ], Sparkline.prototype, \"palette\", void 0);\n __decorate([\n Property(1)\n ], Sparkline.prototype, \"lineWidth\", void 0);\n __decorate([\n Property(1)\n ], Sparkline.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"format\", void 0);\n __decorate([\n Property(false)\n ], Sparkline.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Complex({}, SparklineTooltipSettings)\n ], Sparkline.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, ContainerArea)\n ], Sparkline.prototype, \"containerArea\", void 0);\n __decorate([\n Collection([], RangeBandSettings)\n ], Sparkline.prototype, \"rangeBandSettings\", void 0);\n __decorate([\n Complex({}, AxisSettings)\n ], Sparkline.prototype, \"axisSettings\", void 0);\n __decorate([\n Complex({}, SparklineMarkerSettings)\n ], Sparkline.prototype, \"markerSettings\", void 0);\n __decorate([\n Complex({}, SparklineDataLabelSettings)\n ], Sparkline.prototype, \"dataLabelSettings\", void 0);\n __decorate([\n Complex({}, Padding)\n ], Sparkline.prototype, \"padding\", void 0);\n __decorate([\n Property('Material')\n ], Sparkline.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"tooltipInitialize\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"seriesRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"axisRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"pointRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"pointRegionMouseMove\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"pointRegionMouseClick\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"sparklineMouseMove\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"sparklineMouseClick\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"dataLabelRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"markerRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"resize\", void 0);\n Sparkline = __decorate([\n NotifyPropertyChanges\n ], Sparkline);\n return Sparkline;\n}(Component));\nexport { Sparkline };\n","import { PathOption, drawPath, getIdElement, Rect, withInBounds } from '../utils/helper';\nimport { Browser, extend, isNullOrUndefined, remove, createElement } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-svg-base';\n/**\n * Sparkline Tooltip Module\n */\nvar SparklineTooltip = /** @class */ (function () {\n function SparklineTooltip(sparkline) {\n this.sparkline = sparkline;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n SparklineTooltip.prototype.addEventListener = function () {\n if (this.sparkline.isDestroyed) {\n return;\n }\n // this.sparkline.on('mouseleave', this.mouseLeaveHandler, this);\n this.sparkline.on(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseLeaveHandler, this);\n this.sparkline.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.sparkline.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n SparklineTooltip.prototype.mouseLeaveHandler = function (e) {\n this.removeTooltipElements();\n };\n SparklineTooltip.prototype.mouseUpHandler = function (e) {\n if (!this.sparkline.isTouch) {\n return;\n }\n this.processTooltip(e);\n this.fadeOut();\n };\n SparklineTooltip.prototype.fadeOut = function () {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(this.removeTooltipElements.bind(this), 5000);\n };\n /**\n * To remove tooltip and tracker elements.\n * @private\n */\n SparklineTooltip.prototype.removeTooltipElements = function () {\n this.removeTooltip();\n this.removeTracker();\n };\n SparklineTooltip.prototype.mouseMoveHandler = function (e) {\n this.processTooltip(e);\n };\n SparklineTooltip.prototype.processTooltip = function (e) {\n var pointIndex;\n var spark = this.sparkline;\n var visiblePoints = spark.sparklineRenderer.visiblePoints;\n var mouseX = spark.mouseX;\n var mouseY = spark.mouseY;\n if (spark.type !== 'Pie') {\n var locations = extend([], [], visiblePoints);\n var trackerPositions = locations.map(function (point) { return point.location.x; });\n var temp = Infinity;\n var mousePosition = void 0;\n for (var i = 0, diff = void 0, len = trackerPositions.length; i < len; i++) {\n diff = Math.abs(mouseX - trackerPositions[i]);\n if (temp > diff) {\n temp = diff;\n mousePosition = trackerPositions[i];\n pointIndex = i;\n }\n }\n }\n else {\n var target = e.target.id;\n pointIndex = parseInt(target.split('_pie_')[1], 10);\n }\n if (isNaN(pointIndex) || !withInBounds(mouseX, mouseY, new Rect(0, 0, spark.availableSize.width, spark.availableSize.height))) {\n this.removeTracker();\n this.removeTooltip();\n return;\n }\n if (this.pointIndex === pointIndex) {\n return;\n }\n this.pointIndex = pointIndex;\n this.renderTrackerLine(visiblePoints[pointIndex]);\n this.renderTooltip(visiblePoints[pointIndex]);\n };\n /**\n * To render tracker line\n */\n SparklineTooltip.prototype.renderTrackerLine = function (points) {\n var spark = this.sparkline;\n var tracker = spark.tooltipSettings.trackLineSettings;\n var color = (spark.theme === 'Highcontrast') ? '#FFFFFF' : '#000000';\n color = (tracker.color) ? tracker.color : color;\n if (!tracker.visible || spark.type === 'Pie') {\n return;\n }\n var group = getIdElement(spark.element.id + '_sparkline_tracker_g');\n if (isNullOrUndefined(group)) {\n group = spark.renderer.createGroup({ id: spark.element.id + '_sparkline_tracker_g' });\n spark.svgObject.appendChild(group);\n }\n var pathEle = getIdElement(spark.element.id + '_sparkline_tracker');\n var d = 'M ' + points.location.x + ' ' + spark.padding.top + ' L ' + points.location.x + ' ' +\n (spark.availableSize.height - spark.padding.bottom);\n if (isNullOrUndefined(pathEle)) {\n var pathOption = new PathOption(spark.element.id + '_sparkline_tracker', 'transparent', tracker.width, color, 1);\n pathOption.d = d;\n drawPath(spark, pathOption, group);\n }\n else {\n pathEle.setAttribute('d', d);\n pathEle.setAttribute('stroke-width', tracker.width.toString());\n pathEle.setAttribute('stroke', color);\n }\n };\n /**\n * To render line series\n */\n SparklineTooltip.prototype.renderTooltip = function (points) {\n var spark = this.sparkline;\n var tooltip = spark.tooltipSettings;\n if (!tooltip.visible) {\n return;\n }\n var div = getIdElement(spark.element.id + '_sparkline_tooltip_div');\n if (isNullOrUndefined(div)) {\n div = createElement('div', { id: spark.element.id + '_sparkline_tooltip_div',\n styles: 'pointer-events: none; position: absolute;z-index:1;' });\n getIdElement(spark.element.id + '_Secondary_Element').appendChild(div);\n }\n var size = (spark.markerSettings.visible.length) ? spark.markerSettings.size : 0;\n var x = points.xVal.toString();\n if (spark.valueType === 'Category') {\n x = spark.dataSource[points.xVal][spark.xName];\n }\n else if (spark.valueType === 'DateTime') {\n x = new Date(points.xVal).toDateString();\n }\n var y = points.yVal.toString();\n var text = this.getFormat(spark.tooltipSettings.format, spark, x, this.formatValue(points.yVal, spark).toString());\n var location = { x: points.location.x, y: points.location.y };\n location = spark.type === 'Pie' ? { x: points.location.x, y: points.location.y } : location;\n var tooltipEvent = {\n name: 'tooltipInitialize', cancel: false, text: text,\n textStyle: {\n size: tooltip.textStyle.size,\n opacity: tooltip.textStyle.opacity,\n fontWeight: tooltip.textStyle.fontWeight,\n fontStyle: tooltip.textStyle.fontStyle,\n fontFamily: tooltip.textStyle.fontFamily,\n color: tooltip.textStyle.color,\n }\n };\n spark.trigger(tooltipEvent.name, tooltipEvent);\n if (tooltipEvent.cancel) {\n return;\n }\n var element = new Tooltip({\n content: tooltipEvent.text,\n border: tooltip.border,\n template: tooltip.template,\n data: spark.dataSource[this.pointIndex],\n fill: tooltip.fill,\n textStyle: tooltipEvent.textStyle,\n enableAnimation: false,\n location: { x: location.x, y: location.y },\n shared: false,\n areaBounds: new Rect(0, 0, spark.availableSize.width, spark.availableSize.height),\n theme: spark.theme\n });\n element.appendTo(div);\n };\n /**\n * To get tooltip format.\n */\n SparklineTooltip.prototype.getFormat = function (format, spark, x, y) {\n if (isNullOrUndefined(format) || format === '') {\n return [y];\n }\n var text = format;\n text = text.split('${' + spark.xName + '}').join(x).split('${' + spark.yName + '}').join(y);\n return [text];\n };\n SparklineTooltip.prototype.formatValue = function (value, sparkline) {\n var formatValue;\n var formatFunction;\n if (sparkline.format && !isNaN(Number(value))) {\n formatFunction = sparkline.intl.getNumberFormat({ format: sparkline.format, useGrouping: sparkline.useGroupingSeparator });\n formatValue = formatFunction(value);\n }\n else {\n formatValue = value;\n }\n return formatValue;\n };\n /**\n * To remove tracker line.\n */\n SparklineTooltip.prototype.removeTracker = function () {\n var tracker = this.sparkline.element.querySelector('#' + this.sparkline.element.id + '_sparkline_tracker_g');\n return tracker ? remove(tracker) : null;\n };\n /**\n * To remove tooltip element.\n */\n SparklineTooltip.prototype.removeTooltip = function () {\n this.pointIndex = null;\n var tooltip = this.sparkline.element.querySelector('#' + this.sparkline.element.id + '_sparkline_tooltip_div');\n return tooltip ? remove(tooltip) : null;\n };\n /**\n * Get module name.\n */\n SparklineTooltip.prototype.getModuleName = function () {\n return 'SparklineTooltip';\n };\n /**\n * To destroy the tooltip.\n */\n SparklineTooltip.prototype.destroy = function (sparkline) {\n // To remove tooltip module\n };\n return SparklineTooltip;\n}());\nexport { SparklineTooltip };\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.ScrollBar,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.HistogramSeries,index.ErrorBar,index.Trendlines,index.DateTimeCategory,index.MultiColoredLineSeries,index.MultiColoredAreaSeries,index.MultiLevelLabel,index.ParetoSeries);\nindex.AccumulationChart.Inject( index.PieSeries,index.FunnelSeries,index.PyramidSeries,index.AccumulationTooltip,index.AccumulationLegend,index.AccumulationSelection,index.AccumulationDataLabel,index.AccumulationAnnotation);\nindex.RangeNavigator.Inject( index.RangeTooltip,index.PeriodSelector,index.AreaSeries,index.StepLineSeries,index.DateTime,index.Logarithmic);\nindex.Sparkline.Inject( index.SparklineTooltip);\nindex.Smithchart.Inject( index.SmithchartLegend,index.TooltipRender);\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('#000000')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#ffffff', 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({}, 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 __decorate([\n Property(0)\n ], Range.prototype, \"roundedCornerRadius\", 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(0)\n ], Pointer.prototype, \"roundedCornerRadius\", 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 * @aspDefaultValueIgnore\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 { Tooltip } from '@syncfusion/ej2-svg-base';\nimport { getPointer, Rect } from '../utils/helper';\nimport { getAngleFromValue, getLabelFormat, getLocationFromAngle } from '../utils/helper';\nimport { Browser, createElement } from '@syncfusion/ej2-base';\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.tooltipId = this.gauge.element.id + '_CircularGauge_Tooltip';\n this.tooltip = gauge.tooltip;\n this.textStyle = this.tooltip.textStyle;\n this.borderStyle = this.tooltip.border;\n this.addEventListener();\n }\n /**\n * Method to render the tooltip for circular gauge.\n */\n /* tslint:disable:no-string-literal */\n GaugeTooltip.prototype.renderTooltip = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var tooltipContent = [];\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n target = e.target;\n }\n if (target.id.indexOf('_Pointer_') >= 0) {\n var currentPointer = getPointer(target.id, this.gauge);\n this.currentAxis = this.gauge.axes[currentPointer.axisIndex];\n this.currentPointer = (this.currentAxis.pointers)[currentPointer.pointerIndex];\n var 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 var location_1 = getLocationFromAngle(angle, this.currentAxis.currentRadius, this.gauge.midPoint);\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 if (document.getElementById(this.tooltipId)) {\n this.tooltipEle = document.getElementById(this.tooltipId);\n }\n else {\n this.tooltipEle = createElement('div', {\n id: this.tooltipId,\n className: 'EJ2-CircularGauge-Tooltip',\n styles: 'position: absolute;pointer-events:none;'\n });\n document.getElementById(this.gauge.element.id + '_Secondary_Element').appendChild(this.tooltipEle);\n }\n var content = customLabelFormat ?\n tooltipFormat.replace(new RegExp('{value}', 'g'), format(this.currentPointer.currentValue)) :\n format(this.currentPointer.currentValue);\n location_1.x = (this.tooltip.template && ((angle >= 150 && angle <= 250) || (angle >= 330 && angle <= 360) ||\n (angle >= 0 && angle <= 45))) ? (location_1.x + 10) : location_1.x;\n this.findPosition(angle, content, location_1);\n var tooltipArgs = {\n name: tooltipRender, cancel: false, content: content, location: location_1, axis: this.currentAxis,\n tooltip: this.tooltip, pointer: this.currentPointer, event: e, gauge: this.gauge\n };\n this.gauge.trigger(tooltipRender, tooltipArgs);\n var template = tooltipArgs.tooltip.template;\n if (template !== null && Object.keys(template).length === 1) {\n template = template[Object.keys(template)[0]];\n }\n if (!tooltipArgs.cancel) {\n tooltipArgs['tooltip']['properties']['textStyle']['color'] = (this.gauge.theme === 'Highcontrast') ? '#00000' : '#FFFFFF';\n this.svgTooltip = new Tooltip({\n enable: true,\n header: '',\n data: { value: tooltipArgs.content },\n template: template,\n enableAnimation: tooltipArgs.tooltip.enableAnimation,\n content: [tooltipArgs.content],\n shapes: [],\n location: tooltipArgs.location,\n palette: [],\n inverted: this.arrowInverted,\n areaBounds: this.tooltipRect,\n fill: (this.gauge.theme === 'Highcontrast') ? '#FFFFFF' : tooltipArgs.tooltip.fill,\n textStyle: tooltipArgs.tooltip.textStyle,\n border: tooltipArgs.tooltip.border,\n theme: this.gauge.theme\n });\n this.svgTooltip.appendTo(this.tooltipEle);\n }\n else {\n this.removeTooltip();\n }\n }\n else {\n this.removeTooltip();\n }\n };\n /**\n * Method to find the position of the tooltip anchor for circular gauge.\n */\n GaugeTooltip.prototype.findPosition = function (angle, text, location) {\n var svgRect = this.gauge.svgObject.getBoundingClientRect();\n var elementRect = this.gauge.element.getBoundingClientRect();\n var addLeft;\n var addTop;\n var addHeight;\n var addWidth;\n var rect = new Rect(Math.abs(elementRect.left - svgRect.left), Math.abs(elementRect.top - svgRect.top), svgRect.width, svgRect.height);\n switch (true) {\n case (angle >= 0 && angle < 45):\n this.arrowInverted = true;\n addLeft = (angle >= 15 && angle <= 30) ? location.y : 0;\n this.tooltipRect = new Rect(rect.x, rect.y + addTop, rect.width, rect.height);\n this.tooltipPosition = 'RightBottom';\n break;\n case (angle >= 45 && angle < 90):\n this.arrowInverted = false;\n this.tooltipRect = new Rect(rect.x, rect.y + location.y, rect.width, rect.height);\n this.tooltipPosition = 'BottomRight';\n break;\n case (angle >= 90 && angle < 135):\n this.arrowInverted = false;\n this.tooltipRect = new Rect(rect.x, rect.y + location.y, rect.width, rect.height);\n this.tooltipPosition = 'BottomLeft';\n break;\n case (angle >= 135 && angle < 180):\n this.arrowInverted = true;\n addTop = (angle >= 150 && angle <= 160) ? location.y : 0;\n this.tooltipRect = new Rect(rect.x - rect.width, rect.y + addTop, rect.width, rect.height);\n this.tooltipPosition = 'LeftBottom';\n break;\n case (angle >= 180 && angle < 225):\n this.arrowInverted = true;\n addHeight = (angle >= 200 && angle <= 225) ? Math.abs(rect.y - location.y) : rect.height;\n this.tooltipRect = new Rect(rect.x - rect.width, rect.y, rect.width, addHeight);\n this.tooltipPosition = 'LeftTop';\n break;\n case (angle >= 225 && angle < 270):\n this.arrowInverted = false;\n addWidth = (angle >= 250 && angle <= 290) ? rect.width : Math.abs(rect.x - location.x);\n this.tooltipRect = new Rect(rect.x, rect.y, addWidth, rect.height);\n this.tooltipPosition = 'TopLeft';\n break;\n case (angle >= 270 && angle < 315):\n this.arrowInverted = false;\n addLeft = (angle >= 270 && angle > 290) ? location.x : 0;\n this.tooltipRect = new Rect(rect.x + addLeft, rect.y, rect.width, rect.height);\n this.tooltipPosition = 'TopRight';\n break;\n case (angle >= 315 && angle <= 360):\n this.arrowInverted = true;\n addHeight = (angle >= 315 && angle <= 340) ? Math.abs(rect.y - location.y) : rect.height;\n this.tooltipRect = new Rect(rect.x, rect.y, rect.width, addHeight);\n this.tooltipPosition = 'RightTop';\n break;\n }\n };\n GaugeTooltip.prototype.removeTooltip = function () {\n if (document.getElementsByClassName('EJ2-CircularGauge-Tooltip').length > 0) {\n document.getElementsByClassName('EJ2-CircularGauge-Tooltip')[0].remove();\n }\n };\n GaugeTooltip.prototype.mouseUpHandler = function (e) {\n this.renderTooltip(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeTooltip.bind(this), 2000);\n };\n /**\n * To bind events for tooltip module\n */\n GaugeTooltip.prototype.addEventListener = function () {\n if (this.gauge.isDestroyed) {\n return;\n }\n this.gauge.on(Browser.touchMoveEvent, this.renderTooltip, this);\n this.gauge.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * To unbind events for tooltip module\n */\n GaugeTooltip.prototype.removeEventListener = function () {\n if (this.gauge.isDestroyed) {\n return;\n }\n this.gauge.off(Browser.touchMoveEvent, this.renderTooltip);\n this.gauge.off(Browser.touchEndEvent, this.mouseUpHandler);\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 this.removeEventListener();\n };\n return GaugeTooltip;\n}());\nexport { GaugeTooltip };\n","import { getLocationFromAngle, PathOption, stringToNumber, TextOption, textElement, appendPath, toPixel } from '../utils/helper';\nimport { getAngleFromValue, isCompleteAngle, getPathArc, getRoundedPathArc, 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 var roundedStartAngle;\n var roundedEndAngle;\n var oldStart;\n var oldEnd;\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 oldStart = ((((range.currentRadius - (startWidth / 2)) * ((startAngle * Math.PI) / 180) -\n (range.roundedCornerRadius / 4)) / (range.currentRadius - (startWidth / 2))) * 180) / Math.PI;\n oldEnd = ((((range.currentRadius - (endWidth / 2)) * ((endAngle * Math.PI) / 180) +\n (range.roundedCornerRadius / 4)) / (range.currentRadius - (endWidth / 2))) * 180) / Math.PI;\n roundedStartAngle = ((((range.currentRadius) * ((startAngle * Math.PI) / 180) +\n range.roundedCornerRadius) / (range.currentRadius)) * 180) / Math.PI;\n roundedEndAngle = ((((range.currentRadius) * ((endAngle * Math.PI) / 180) -\n range.roundedCornerRadius) / (range.currentRadius)) * 180) / Math.PI;\n if (range.roundedCornerRadius) {\n appendPath(new PathOption(gauge.element.id + '_Axis_' + index + '_Range_' + rangeIndex, range.rangeColor, 0, range.rangeColor, 1, '0', getRoundedPathArc(gauge.midPoint, Math.floor(roundedStartAngle), Math.ceil(roundedEndAngle), Math.floor(oldStart), Math.ceil(oldEnd), range.currentRadius, startWidth, endWidth), '', 'pointer-events:none;'), rangeElement, gauge);\n }\n else {\n appendPath(new PathOption(gauge.element.id + '_Axis_' + index + '_Range_' + rangeIndex, range.rangeColor, 0, range.rangeColor, 1, '0', getPathArc(gauge.midPoint, Math.floor(startAngle), Math.ceil(endAngle), range.currentRadius, startWidth, endWidth), '', 'pointer-events:none;'), rangeElement, gauge);\n }\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, getRoundedPathArc } 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 var roundedStartAngle;\n var roundedEndAngle;\n var oldStart;\n var oldEnd;\n oldStart = ((((pointer.currentRadius - (pointer.pointerWidth / 2)) * ((startAngle * Math.PI) / 180) -\n (pointer.roundedCornerRadius / 4)) / (pointer.currentRadius - (pointer.pointerWidth / 2))) * 180) / Math.PI;\n oldEnd = ((((pointer.currentRadius - (pointer.pointerWidth / 2)) * ((endAngle * Math.PI) / 180) +\n (pointer.roundedCornerRadius / 4)) / (pointer.currentRadius - (pointer.pointerWidth / 2))) * 180) / Math.PI;\n roundedStartAngle = ((((pointer.currentRadius) * ((startAngle * Math.PI) / 180) +\n pointer.roundedCornerRadius) / (pointer.currentRadius)) * 180) / Math.PI;\n roundedEndAngle = ((((pointer.currentRadius) * ((endAngle * Math.PI) / 180) -\n pointer.roundedCornerRadius) / (pointer.currentRadius)) * 180) / Math.PI;\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n if (pointer.roundedCornerRadius) {\n element.setAttribute('d', getRoundedPathArc(location, roundedStartAngle, roundedEndAngle, oldStart, oldEnd, pointer.currentRadius, pointer.pointerWidth, pointer.pointerWidth));\n }\n else {\n element.setAttribute('d', getCompleteArc(location, startAngle, endAngle, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth)));\n }\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.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 this.notify(Browser.touchMoveEvent, e);\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 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 this.activeAxis = null;\n this.activePointer = null;\n }\n this.svgObject.setAttribute('cursor', 'auto');\n this.notify(Browser.touchEndEvent, e);\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","/**\n * Size defines and processes the size(width/height) of the objects\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n Size.prototype.isEmpty = function () {\n return this.height === 0 && this.width === 0;\n };\n // public static get empty(): Size {\n // return new Size();\n // }\n // public get isEmpty(): boolean {\n // return this.equals(Size.empty);\n // }\n // public equals(size2: Size): boolean {\n // return this.width === size2.width && this.height === size2.height;\n // }\n // public union(size: Size): void {\n // size.width = Math.max(size.width, this.width);\n // size.height = Math.max(size.height, this.height);\n // }\n Size.prototype.clone = function () {\n return new Size(this.width, this.height);\n };\n return Size;\n}());\nexport { Size };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines and processes coordinates\n */\nvar Point = /** @class */ (function (_super) {\n __extends(Point, _super);\n function Point() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Point.equals = function (point1, point2) {\n if (point1 === point2) {\n return true;\n }\n if (!point1 || !point2) {\n return false;\n }\n return !point1 || !point2 || point1.x === point2.x && point1.y === point2.y;\n };\n /**\n * check whether the points are given\n */\n Point.isEmptyPoint = function (point) {\n if (point.x && point.y) {\n return false;\n }\n return true;\n };\n // public add(point1: PointModel, point2: PointModel): PointModel {\n // return { x: point1.x + point2.x, y: point1.y + point2.y };\n // }\n // public subtract(point1: PointModel, point2: PointModel): PointModel {\n // return { x: point1.x - point2.x, y: point1.y - point2.y };\n // }\n // public multiply(point1: PointModel, point2: PointModel): PointModel {\n // return {\n // x: point1.x * point2.x, y: point1.y * point2.y\n // };\n // }\n // public crossProduct(point1: PointModel, point2: PointModel): PointModel {\n // return {\n // x: point1.x * point2.y, y: point2.x * point1.y\n // };\n // }\n // public offset(offsetX: number, offsetY: number): void {\n // this.x += offsetX;\n // this.y += offsetY;\n // }\n // public rotate(angle: number): PointModel {\n // let c: number = Math.cos(angle);\n // let s: number = Math.sin(angle);\n // return {\n // x: c * this.x - s * this.y, y: s * this.x + c * this.y\n // };\n // }\n // public distance(point2: PointModel): number {\n // return Math.sqrt(Math.pow(this.x - point2.x, 2) + Math.pow(this.y - point2.y, 2));\n // }\n Point.transform = function (point, angle, length) {\n var pt = { x: 0, y: 0 };\n pt.x = Math.round((point.x + length * Math.cos(angle * Math.PI / 180)) * 100) / 100;\n pt.y = Math.round((point.y + length * Math.sin(angle * Math.PI / 180)) * 100) / 100;\n return pt;\n };\n Point.findLength = function (s, e) {\n var length = Math.sqrt(Math.pow((s.x - e.x), 2) + Math.pow((s.y - e.y), 2));\n return length;\n };\n Point.findAngle = function (point1, point2) {\n var angle = Math.atan2(point2.y - point1.y, point2.x - point1.x);\n angle = (180 * angle / Math.PI);\n angle %= 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n };\n Point.distancePoints = function (pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n };\n Point.getLengthFromListOfPoints = function (points) {\n var length = 0;\n for (var j = 0; j < points.length - 1; j++) {\n length += this.distancePoints(points[j], points[j + 1]);\n }\n return length;\n };\n Point.adjustPoint = function (source, target, isStart, length) {\n var pt = isStart ? { x: source.x, y: source.y } : { x: target.x, y: target.y };\n var angle;\n if (source.x === target.x) {\n if (source.y < target.y && isStart || source.y > target.y && !isStart) {\n pt.y += length;\n }\n else {\n pt.y -= length;\n }\n }\n else if (source.y === target.y) {\n if (source.x < target.x && isStart || source.x > target.x && !isStart) {\n pt.x += length;\n }\n else {\n pt.x -= length;\n }\n }\n else {\n if (isStart) {\n angle = this.findAngle(source, target);\n pt = this.transform(source, angle, length);\n }\n else {\n angle = this.findAngle(target, source);\n pt = this.transform(target, angle, length);\n }\n }\n return pt;\n };\n Point.direction = function (pt1, pt2) {\n if (Math.abs(pt2.x - pt1.x) > Math.abs(pt2.y - pt1.y)) {\n return pt1.x < pt2.x ? 'Right' : 'Left';\n }\n else {\n return pt1.y < pt2.y ? 'Bottom' : 'Top';\n }\n };\n __decorate([\n Property(0)\n ], Point.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Point.prototype, \"y\", void 0);\n return Point;\n}(ChildProperty));\nexport { Point };\n","/**\n * Rect defines and processes rectangular regions\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n /**\n * Sets the x-coordinate of the starting point of a rectangular region\n * @default 0\n */\n this.x = Number.MAX_VALUE;\n /**\n * Sets the y-coordinate of the starting point of a rectangular region\n * @default 0\n */\n this.y = Number.MAX_VALUE;\n /**\n * Sets the width of a rectangular region\n * @default 0\n */\n this.width = 0;\n /**\n * Sets the height of a rectangular region\n * @default 0\n */\n this.height = 0;\n if (x === undefined || y === undefined) {\n x = y = Number.MAX_VALUE;\n width = height = 0;\n }\n else {\n if (width === undefined) {\n width = 0;\n }\n if (height === undefined) {\n height = 0;\n }\n }\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n Object.defineProperty(Rect.prototype, \"left\", {\n get: function () {\n return this.x;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"right\", {\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"top\", {\n get: function () {\n return this.y;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottom\", {\n get: function () {\n return this.y + this.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"topLeft\", {\n get: function () {\n return { x: this.left, y: this.top };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"topRight\", {\n get: function () {\n return { x: this.right, y: this.top };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottomLeft\", {\n get: function () {\n return { x: this.left, y: this.bottom };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottomRight\", {\n get: function () {\n return { x: this.right, y: this.bottom };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"middleLeft\", {\n get: function () {\n return { x: this.left, y: this.y + this.height / 2 };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"middleRight\", {\n get: function () {\n return { x: this.right, y: this.y + this.height / 2 };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"topCenter\", {\n get: function () {\n return { x: this.x + this.width / 2, y: this.top };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottomCenter\", {\n get: function () {\n return { x: this.x + this.width / 2, y: this.bottom };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"center\", {\n get: function () {\n return { x: this.x + this.width / 2, y: this.y + this.height / 2 };\n },\n enumerable: true,\n configurable: true\n });\n Rect.prototype.equals = function (rect1, rect2) {\n return rect1.x === rect2.x && rect1.y === rect2.y && rect1.width === rect2.width && rect1.height === rect2.height;\n };\n Rect.prototype.uniteRect = function (rect) {\n var right = Math.max(Number.NaN === this.right || this.x === Number.MAX_VALUE ? rect.right : this.right, rect.right);\n var bottom = Math.max(Number.NaN === this.bottom || this.y === Number.MAX_VALUE ? rect.bottom : this.bottom, rect.bottom);\n this.x = Math.min(this.left, rect.left);\n this.y = Math.min(this.top, rect.top);\n this.width = right - this.x;\n this.height = bottom - this.y;\n return this;\n };\n Rect.prototype.unitePoint = function (point) {\n if (this.x === Number.MAX_VALUE) {\n this.x = point.x;\n this.y = point.y;\n return;\n }\n var x = Math.min(this.left, point.x);\n var y = Math.min(this.top, point.y);\n var right = Math.max(this.right, point.x);\n var bottom = Math.max(this.bottom, point.y);\n this.x = x;\n this.y = y;\n this.width = right - this.x;\n this.height = bottom - this.y;\n };\n // public intersection(rect: Rect): Rect {\n // if (this.intersects(rect)) {\n // let left: number = Math.max(this.left, rect.left);\n // let top: number = Math.max(this.top, rect.top);\n // let right: number = Math.min(this.right, rect.right);\n // let bottom: number = Math.min(this.bottom, rect.bottom);\n // return new Rect(left, top, right - left, bottom - top);\n // }\n // return Rect.empty;\n // }\n Rect.prototype.Inflate = function (padding) {\n this.x -= padding;\n this.y -= padding;\n this.width += padding * 2;\n this.height += padding * 2;\n return this;\n };\n //public Inflate(size: Size): Rect {\n // this.x -= size.Width;\n // this.y -= size.Height;\n // this.width += size.Width * 2;\n // this.height += size.Height * 2;\n // return this;\n //}\n // public inflate(width: number, height: number): void {\n // this.x -= width;\n // this.y -= height;\n // this.width += width * 2;\n // this.height += height * 2;\n // }\n Rect.prototype.intersects = function (rect) {\n if (this.right < rect.left || this.left > rect.right || this.top > rect.bottom || this.bottom < rect.top) {\n return false;\n }\n return true;\n };\n Rect.prototype.containsRect = function (rect) {\n return this.left <= rect.left && this.right >= rect.right && this.top <= rect.top && this.bottom >= rect.bottom;\n };\n Rect.prototype.containsPoint = function (point, padding) {\n if (padding === void 0) { padding = 0; }\n return this.left - padding <= point.x && this.right + padding >= point.x\n && this.top - padding <= point.y && this.bottom + padding >= point.y;\n };\n // public toPoints(): PointModel[] {\n // let points: PointModel[] = [];\n // points.push(this.topLeft);\n // points.push(this.topRight);\n // points.push(this.bottomLeft);\n // points.push(this.bottomRight);\n // return points;\n // }\n Rect.toBounds = function (points) {\n var rect = new Rect();\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var pt = points_1[_i];\n rect.unitePoint(pt);\n }\n return rect;\n };\n Rect.empty = new Rect(Number.MAX_VALUE, Number.MIN_VALUE, 0, 0);\n return Rect;\n}());\nexport { Rect };\n","/**\n * enum module defines the public enumerations\n */\n/**\n * Constraints to define when a port has to be visible\n * Visible - Always shows the port\n * Hidden - Always hides the port\n * Hover - Shows the port when the mouse hovers over a node\n * Connect - Shows the port when a connection end point is dragged over a node\n * Default - By default the ports will be visible when a node is hovered and being tried to connect\n * @aspNumberEnum\n */\nexport var PortVisibility;\n(function (PortVisibility) {\n /** Always shows the port */\n PortVisibility[PortVisibility[\"Visible\"] = 1] = \"Visible\";\n /** Always hides the port */\n PortVisibility[PortVisibility[\"Hidden\"] = 2] = \"Hidden\";\n /** Shows the port when the mouse hovers over a node */\n PortVisibility[PortVisibility[\"Hover\"] = 4] = \"Hover\";\n /** Shows the port when a connection end point is dragged over a node */\n PortVisibility[PortVisibility[\"Connect\"] = 8] = \"Connect\";\n})(PortVisibility || (PortVisibility = {}));\n/**\n * Defines the constraints to Enables / Disables some features of Snapping.\n * None - Snapping does not happen\n * ShowHorizontalLines - Displays only the horizontal gridlines in diagram.\n * ShowVerticalLines - Displays only the Vertical gridlines in diagram.\n * ShowLines - Display both Horizontal and Vertical gridlines.\n * SnapToHorizontalLines - Enables the object to snap only with horizontal gridlines.\n * SnapToVerticalLines - Enables the object to snap only with horizontal gridlines.\n * SnapToLines - Enables the object to snap with both horizontal and Vertical gridlines.\n * snapToObject - Enables the object to snap with the other objects in the diagram.\n * @IgnoreSingular\n * @aspNumberEnum\n */\nexport var SnapConstraints;\n(function (SnapConstraints) {\n /** None - Snapping does not happen */\n SnapConstraints[SnapConstraints[\"None\"] = 0] = \"None\";\n /** ShowHorizontalLines - Displays only the horizontal gridlines in diagram. */\n SnapConstraints[SnapConstraints[\"ShowHorizontalLines\"] = 1] = \"ShowHorizontalLines\";\n /** ShowVerticalLines - Displays only the Vertical gridlines in diagram */\n SnapConstraints[SnapConstraints[\"ShowVerticalLines\"] = 2] = \"ShowVerticalLines\";\n /** ShowLines - Display both Horizontal and Vertical gridlines */\n SnapConstraints[SnapConstraints[\"ShowLines\"] = 3] = \"ShowLines\";\n /** SnapToHorizontalLines - Enables the object to snap only with horizontal gridlines */\n SnapConstraints[SnapConstraints[\"SnapToHorizontalLines\"] = 4] = \"SnapToHorizontalLines\";\n /** SnapToVerticalLines - Enables the object to snap only with horizontal gridlines */\n SnapConstraints[SnapConstraints[\"SnapToVerticalLines\"] = 8] = \"SnapToVerticalLines\";\n /** SnapToLines - Enables the object to snap with both horizontal and Vertical gridlines */\n SnapConstraints[SnapConstraints[\"SnapToLines\"] = 12] = \"SnapToLines\";\n /** SnapToObject - Enables the object to snap with the other objects in the diagram. */\n SnapConstraints[SnapConstraints[\"SnapToObject\"] = 16] = \"SnapToObject\";\n /** Shows gridlines and enables snapping */\n SnapConstraints[SnapConstraints[\"All\"] = 31] = \"All\";\n})(SnapConstraints || (SnapConstraints = {}));\n/**\n * Defines the visibility of the selector handles\n * None - Hides all the selector elements\n * ConnectorSourceThumb - Shows/hides the source thumb of the connector\n * ConnectorTargetThumb - Shows/hides the target thumb of the connector\n * ResizeSouthEast - Shows/hides the bottom right resize handle of the selector\n * ResizeSouthWest - Shows/hides the bottom left resize handle of the selector\n * ResizeNorthEast - Shows/hides the top right resize handle of the selector\n * ResizeNorthWest - Shows/hides the top left resize handle of the selector\n * ResizeEast - Shows/hides the middle right resize handle of the selector\n * ResizeWest - Shows/hides the middle left resize handle of the selector\n * ResizeSouth - Shows/hides the bottom center resize handle of the selector\n * ResizeNorth - Shows/hides the top center resize handle of the selector\n * Rotate - Shows/hides the rotate handle of the selector\n * UserHandles - Shows/hides the user handles of the selector\n * Resize - Shows/hides all resize handles of the selector\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var SelectorConstraints;\n(function (SelectorConstraints) {\n /** Hides all the selector elements */\n SelectorConstraints[SelectorConstraints[\"None\"] = 1] = \"None\";\n /** Shows/hides the source thumb of the connector */\n SelectorConstraints[SelectorConstraints[\"ConnectorSourceThumb\"] = 2] = \"ConnectorSourceThumb\";\n /** Shows/hides the target thumb of the connector */\n SelectorConstraints[SelectorConstraints[\"ConnectorTargetThumb\"] = 4] = \"ConnectorTargetThumb\";\n /** Shows/hides the bottom right resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeSouthEast\"] = 8] = \"ResizeSouthEast\";\n /** Shows/hides the bottom left resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeSouthWest\"] = 16] = \"ResizeSouthWest\";\n /** Shows/hides the top right resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeNorthEast\"] = 32] = \"ResizeNorthEast\";\n /** Shows/hides the top left resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeNorthWest\"] = 64] = \"ResizeNorthWest\";\n /** Shows/hides the middle right resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeEast\"] = 128] = \"ResizeEast\";\n /** Shows/hides the middle left resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeWest\"] = 256] = \"ResizeWest\";\n /** Shows/hides the bottom center resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeSouth\"] = 512] = \"ResizeSouth\";\n /** Shows/hides the top center resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeNorth\"] = 1024] = \"ResizeNorth\";\n /** Shows/hides the rotate handle of the selector */\n SelectorConstraints[SelectorConstraints[\"Rotate\"] = 2048] = \"Rotate\";\n /** Shows/hides the user handles of the selector */\n SelectorConstraints[SelectorConstraints[\"UserHandle\"] = 4096] = \"UserHandle\";\n /** Shows/hides the default tooltip of nodes and connectors */\n SelectorConstraints[SelectorConstraints[\"ToolTip\"] = 8192] = \"ToolTip\";\n /** Shows/hides all resize handles of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeAll\"] = 2046] = \"ResizeAll\";\n /** Shows all handles of the selector */\n SelectorConstraints[SelectorConstraints[\"All\"] = 16382] = \"All\";\n})(SelectorConstraints || (SelectorConstraints = {}));\n/**\n * Defines the constraints to enable/disable certain features of connector.\n * * None - Interaction of the connectors cannot be done.\n * * Select - Selects the connector.\n * * Delete - Delete the connector.\n * * Drag - Drag the connector.\n * * DragSourceEnd - Drag the source end of the connector.\n * * DragTargetEnd - Drag the target end of the connector.\n * * DragSegmentThump - Drag the segment thumb of the connector.\n * * AllowDrop - Allow to drop a node.\n * * Bridging - Creates bridge on intersection of two connectors.\n * * BridgeObstacle -\n * * InheritBridging - Creates bridge on intersection of two connectors.\n * * PointerEvents - Sets the pointer events.\n * * Tooltip - Displays a tooltip for the connectors.\n * * InheritToolTip - Displays a tooltip for the connectors.\n * * Interaction - Features of the connector used for interaction.\n * * ReadOnly - Enables ReadOnly\n * * Default - Default features of the connector.\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var ConnectorConstraints;\n(function (ConnectorConstraints) {\n /** Disable all connector Constraints. */\n ConnectorConstraints[ConnectorConstraints[\"None\"] = 1] = \"None\";\n /** Enables connector to be selected. */\n ConnectorConstraints[ConnectorConstraints[\"Select\"] = 2] = \"Select\";\n /** Enables connector to be Deleted. */\n ConnectorConstraints[ConnectorConstraints[\"Delete\"] = 4] = \"Delete\";\n /** Enables connector to be Dragged. */\n ConnectorConstraints[ConnectorConstraints[\"Drag\"] = 8] = \"Drag\";\n /** Enables connectors source end to be selected. */\n ConnectorConstraints[ConnectorConstraints[\"DragSourceEnd\"] = 16] = \"DragSourceEnd\";\n /** Enables connectors target end to be selected. */\n ConnectorConstraints[ConnectorConstraints[\"DragTargetEnd\"] = 32] = \"DragTargetEnd\";\n /** Enables control point and end point of every segment in a connector for editing. */\n ConnectorConstraints[ConnectorConstraints[\"DragSegmentThumb\"] = 64] = \"DragSegmentThumb\";\n /** Enables AllowDrop constraints to the connector. */\n ConnectorConstraints[ConnectorConstraints[\"AllowDrop\"] = 128] = \"AllowDrop\";\n /** Enables bridging to the connector. */\n ConnectorConstraints[ConnectorConstraints[\"Bridging\"] = 256] = \"Bridging\";\n /** Enables or Disables Bridge Obstacles with overlapping of connectors. */\n ConnectorConstraints[ConnectorConstraints[\"BridgeObstacle\"] = 512] = \"BridgeObstacle\";\n /** Enables bridging to the connector. */\n ConnectorConstraints[ConnectorConstraints[\"InheritBridging\"] = 1024] = \"InheritBridging\";\n /** Used to set the pointer events. */\n ConnectorConstraints[ConnectorConstraints[\"PointerEvents\"] = 2048] = \"PointerEvents\";\n /** Enables or disables tool tip for the connectors */\n ConnectorConstraints[ConnectorConstraints[\"Tooltip\"] = 4096] = \"Tooltip\";\n /** Enables or disables tool tip for the connectors */\n ConnectorConstraints[ConnectorConstraints[\"InheritTooltip\"] = 8192] = \"InheritTooltip\";\n /** Enables Interaction. */\n ConnectorConstraints[ConnectorConstraints[\"Interaction\"] = 4218] = \"Interaction\";\n /** Enables ReadOnly */\n ConnectorConstraints[ConnectorConstraints[\"ReadOnly\"] = 16384] = \"ReadOnly\";\n /** Enables all constraints. */\n ConnectorConstraints[ConnectorConstraints[\"Default\"] = 11838] = \"Default\";\n})(ConnectorConstraints || (ConnectorConstraints = {}));\n/**\n * Enables/Disables the annotation constraints\n * ReadOnly - Enables/Disables the ReadOnly Constraints\n * InheritReadOnly - Enables/Disables the InheritReadOnly Constraints\n * Select -Enables/Disable select support for the annotation\n * Drag - Enables/Disable drag support for the annotation\n * Resize - Enables/Disable resize support for the annotation\n * Rotate - Enables/Disable rotate support for the annotation\n * Interaction - Enables annotation to inherit the interaction option\n * None - Disable all annotation constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var AnnotationConstraints;\n(function (AnnotationConstraints) {\n /** Enables/Disables the ReadOnly Constraints */\n AnnotationConstraints[AnnotationConstraints[\"ReadOnly\"] = 2] = \"ReadOnly\";\n /** Enables/Disables the InheritReadOnly Constraints */\n AnnotationConstraints[AnnotationConstraints[\"InheritReadOnly\"] = 4] = \"InheritReadOnly\";\n /** Enables/Disable select support for the annotation */\n AnnotationConstraints[AnnotationConstraints[\"Select\"] = 8] = \"Select\";\n /** Enables/Disable drag support for the annotation */\n AnnotationConstraints[AnnotationConstraints[\"Drag\"] = 16] = \"Drag\";\n /** Enables/Disable resize support for the annotation */\n AnnotationConstraints[AnnotationConstraints[\"Resize\"] = 32] = \"Resize\";\n /** Enables/Disable rotate support for the annotation */\n AnnotationConstraints[AnnotationConstraints[\"Rotate\"] = 64] = \"Rotate\";\n /** Enables annotation to inherit the interaction option */\n AnnotationConstraints[AnnotationConstraints[\"Interaction\"] = 120] = \"Interaction\";\n /** Disable all annotation Constraints */\n AnnotationConstraints[AnnotationConstraints[\"None\"] = 0] = \"None\";\n})(AnnotationConstraints || (AnnotationConstraints = {}));\n/**\n * Enables/Disables certain features of node\n * None - Disable all node Constraints\n * Select - Enables node to be selected\n * Drag - Enables node to be Dragged\n * Rotate - Enables node to be Rotate\n * Shadow - Enables node to display shadow\n * PointerEvents - Enables node to provide pointer option\n * Delete - Enables node to delete\n * InConnect - Enables node to provide in connect option\n * OutConnect - Enables node to provide out connect option\n * Individual - Enables node to provide individual resize option\n * Expandable - Enables node to provide Expandable option\n * AllowDrop - Enables node to provide allow to drop option\n * Inherit - Enables node to inherit the interaction option\n * ResizeNorthEast - Enable ResizeNorthEast of the node\n * ResizeEast - Enable ResizeEast of the node\n * ResizeSouthEast - Enable ResizeSouthEast of the node\n * ResizeSouth - Enable ResizeSouthWest of the node\n * ResizeSouthWest - Enable ResizeSouthWest of the node\n * ResizeSouth - Enable ResizeSouth of the node\n * ResizeSouthWest - Enable ResizeSouthWest of the node\n * ResizeWest - Enable ResizeWest of the node\n * ResizeNorth - Enable ResizeNorth of the node\n * Resize - Enables the Aspect ratio fo the node\n * AspectRatio - Enables the Aspect ratio fo the node\n * Tooltip - Enables or disables tool tip for the Nodes\n * InheritTooltip - Enables or disables tool tip for the Nodes\n * ReadOnly - Enables the ReadOnly support for Annotation\n * Default - Enables all constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var NodeConstraints;\n(function (NodeConstraints) {\n /** Disable all node Constraints. */\n NodeConstraints[NodeConstraints[\"None\"] = 0] = \"None\";\n /** Enables node to be selected. */\n NodeConstraints[NodeConstraints[\"Select\"] = 2] = \"Select\";\n /** Enables node to be Dragged. */\n NodeConstraints[NodeConstraints[\"Drag\"] = 4] = \"Drag\";\n /** Enables node to be Rotate. */\n NodeConstraints[NodeConstraints[\"Rotate\"] = 8] = \"Rotate\";\n /** Enables node to display shadow. */\n NodeConstraints[NodeConstraints[\"Shadow\"] = 16] = \"Shadow\";\n /** Enables node to provide pointer option */\n NodeConstraints[NodeConstraints[\"PointerEvents\"] = 32] = \"PointerEvents\";\n /** Enables node to delete */\n NodeConstraints[NodeConstraints[\"Delete\"] = 64] = \"Delete\";\n /** Enables node to provide in connect option */\n NodeConstraints[NodeConstraints[\"InConnect\"] = 128] = \"InConnect\";\n /** Enables node to provide out connect option */\n NodeConstraints[NodeConstraints[\"OutConnect\"] = 256] = \"OutConnect\";\n /** Enables node to provide individual resize option */\n NodeConstraints[NodeConstraints[\"Individual\"] = 512] = \"Individual\";\n /** Enables node to provide Expandable option */\n NodeConstraints[NodeConstraints[\"Expandable\"] = 1024] = \"Expandable\";\n /** Enables node to provide allow to drop option */\n NodeConstraints[NodeConstraints[\"AllowDrop\"] = 2048] = \"AllowDrop\";\n /** Enables node to inherit the interaction option */\n NodeConstraints[NodeConstraints[\"Inherit\"] = 78] = \"Inherit\";\n /** Enable ResizeNorthEast of the node */\n NodeConstraints[NodeConstraints[\"ResizeNorthEast\"] = 4096] = \"ResizeNorthEast\";\n /** Enable ResizeEast of the node */\n NodeConstraints[NodeConstraints[\"ResizeEast\"] = 8192] = \"ResizeEast\";\n /** Enable ResizeSouthEast of the node */\n NodeConstraints[NodeConstraints[\"ResizeSouthEast\"] = 16384] = \"ResizeSouthEast\";\n /** Enable ResizeSouth of the node */\n NodeConstraints[NodeConstraints[\"ResizeSouth\"] = 32768] = \"ResizeSouth\";\n /** Enable ResizeSouthWest of the node */\n NodeConstraints[NodeConstraints[\"ResizeSouthWest\"] = 65536] = \"ResizeSouthWest\";\n /** Enable ResizeWest of the node */\n NodeConstraints[NodeConstraints[\"ResizeWest\"] = 131072] = \"ResizeWest\";\n /** Enable ResizeNorthWest of the node */\n NodeConstraints[NodeConstraints[\"ResizeNorthWest\"] = 262144] = \"ResizeNorthWest\";\n /** Enable ResizeNorth of the node */\n NodeConstraints[NodeConstraints[\"ResizeNorth\"] = 524288] = \"ResizeNorth\";\n /** Enable Resize of the node */\n NodeConstraints[NodeConstraints[\"Resize\"] = 1044480] = \"Resize\";\n /** Enables the Aspect ratio fo the node */\n NodeConstraints[NodeConstraints[\"AspectRatio\"] = 1048576] = \"AspectRatio\";\n /** Enables or disables tool tip for the Nodes */\n NodeConstraints[NodeConstraints[\"Tooltip\"] = 2097152] = \"Tooltip\";\n /** Enables or disables tool tip for the Nodes */\n NodeConstraints[NodeConstraints[\"InheritTooltip\"] = 4194304] = \"InheritTooltip\";\n /** Enables the ReadOnly support for Annotation */\n NodeConstraints[NodeConstraints[\"ReadOnly\"] = 8388608] = \"ReadOnly\";\n /** Enables all constraints */\n NodeConstraints[NodeConstraints[\"Default\"] = 5240814] = \"Default\";\n})(NodeConstraints || (NodeConstraints = {}));\n/** Enables/Disables the handles of the selector\n * Rotate - Enable Rotate Thumb\n * ConnectorSource - Enable Connector source point\n * ConnectorTarget - Enable Connector target point\n * ResizeNorthEast - Enable ResizeNorthEast Resize\n * ResizeEast - Enable ResizeEast Resize\n * ResizeSouthEast - Enable ResizeSouthEast Resize\n * ResizeSouth - Enable ResizeSouth Resize\n * ResizeSouthWest - Enable ResizeSouthWest Resize\n * ResizeWest - Enable ResizeWest Resize\n * ResizeNorthWest - Enable ResizeNorthWest Resize\n * ResizeNorth - Enable ResizeNorth Resize\n * Default - Enables all constraints\n * @private\n */\nexport var ThumbsConstraints;\n(function (ThumbsConstraints) {\n /** Enable Rotate Thumb */\n ThumbsConstraints[ThumbsConstraints[\"Rotate\"] = 2] = \"Rotate\";\n /** Enable Connector source point */\n ThumbsConstraints[ThumbsConstraints[\"ConnectorSource\"] = 4] = \"ConnectorSource\";\n /** Enable Connector target point */\n ThumbsConstraints[ThumbsConstraints[\"ConnectorTarget\"] = 8] = \"ConnectorTarget\";\n /** Enable ResizeNorthEast Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeNorthEast\"] = 16] = \"ResizeNorthEast\";\n /** Enable ResizeEast Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeEast\"] = 32] = \"ResizeEast\";\n /** Enable ResizeSouthEast Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeSouthEast\"] = 64] = \"ResizeSouthEast\";\n /** Enable ResizeSouth Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeSouth\"] = 128] = \"ResizeSouth\";\n /** Enable ResizeSouthWest Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeSouthWest\"] = 256] = \"ResizeSouthWest\";\n /** Enable ResizeWest Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeWest\"] = 512] = \"ResizeWest\";\n /** Enable ResizeNorthWest Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeNorthWest\"] = 1024] = \"ResizeNorthWest\";\n /** Enable ResizeNorth Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeNorth\"] = 2048] = \"ResizeNorth\";\n /** Enables all constraints */\n ThumbsConstraints[ThumbsConstraints[\"Default\"] = 4094] = \"Default\";\n})(ThumbsConstraints || (ThumbsConstraints = {}));\n/**\n * Enables/Disables certain features of diagram\n * None - Disable DiagramConstraints constraints\n * Bridging - Enables/Disable Bridging support for connector\n * UndoRedo - Enables/Disable the Undo/Redo support\n * Tooltip - Enables/Disable Tooltip support\n * UserInteraction - Enables/Disable UserInteraction support for the diagram\n * ApiUpdate - Enables/Disable ApiUpdate support for the diagram\n * PageEditable - Enables/Disable PageEditable support for the diagram\n * Zoom - Enables/Disable Zoom support for the diagram\n * PanX - Enables/Disable PanX support for the diagram\n * PanY - Enables/Disable PanY support for the diagram\n * Pan - Enables/Disable Pan support the diagram\n * ZoomTextEdit - Enables/Disables zooming the text box while editing the text\n * Default - Enables/Disable all constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var DiagramConstraints;\n(function (DiagramConstraints) {\n /** Disable DiagramConstraints constraints */\n DiagramConstraints[DiagramConstraints[\"None\"] = 1] = \"None\";\n /** Enables/Disable Bridging support for connector */\n DiagramConstraints[DiagramConstraints[\"Bridging\"] = 2] = \"Bridging\";\n /** Enables/Disable the Undo/Redo support */\n DiagramConstraints[DiagramConstraints[\"UndoRedo\"] = 4] = \"UndoRedo\";\n /** Enables/Disable Tooltip support */\n DiagramConstraints[DiagramConstraints[\"Tooltip\"] = 8] = \"Tooltip\";\n /** Enables/Disable UserInteraction support for the diagram */\n DiagramConstraints[DiagramConstraints[\"UserInteraction\"] = 16] = \"UserInteraction\";\n /** Enables/Disable ApiUpdate support for the diagram */\n DiagramConstraints[DiagramConstraints[\"ApiUpdate\"] = 32] = \"ApiUpdate\";\n /** Enables/Disable PageEditable support for the diagram */\n DiagramConstraints[DiagramConstraints[\"PageEditable\"] = 48] = \"PageEditable\";\n /** Enables/Disable Zoom support for the diagram */\n DiagramConstraints[DiagramConstraints[\"Zoom\"] = 64] = \"Zoom\";\n /** Enables/Disable PanX support for the diagram */\n DiagramConstraints[DiagramConstraints[\"PanX\"] = 128] = \"PanX\";\n /** Enables/Disable PanY support for the diagram */\n DiagramConstraints[DiagramConstraints[\"PanY\"] = 256] = \"PanY\";\n /** Enables/Disable Pan support the diagram */\n DiagramConstraints[DiagramConstraints[\"Pan\"] = 384] = \"Pan\";\n /** Enables/Disables zooming the text box while editing the text */\n DiagramConstraints[DiagramConstraints[\"ZoomTextEdit\"] = 512] = \"ZoomTextEdit\";\n /** Enables/Disable all constraints */\n DiagramConstraints[DiagramConstraints[\"Default\"] = 500] = \"Default\";\n})(DiagramConstraints || (DiagramConstraints = {}));\n/**\n * Activates the diagram tools\n * None - Enables/Disable single select support for the diagram\n * SingleSelect - Enables/Disable single select support for the diagram\n * MultipleSelect - Enables/Disable MultipleSelect select support for the diagram\n * ZoomPan - Enables/Disable ZoomPan support for the diagram\n * DrawOnce - Enables/Disable continuousDraw support for the diagram\n * ContinuousDraw - Enables/Disable continuousDraw support for the diagram\n * Default - Enables/Disable all constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var DiagramTools;\n(function (DiagramTools) {\n /** Disable all constraints */\n DiagramTools[DiagramTools[\"None\"] = 0] = \"None\";\n /** Enables/Disable single select support for the diagram */\n DiagramTools[DiagramTools[\"SingleSelect\"] = 1] = \"SingleSelect\";\n /** Enables/Disable MultipleSelect select support for the diagram */\n DiagramTools[DiagramTools[\"MultipleSelect\"] = 2] = \"MultipleSelect\";\n /** Enables/Disable ZoomPan support for the diagram */\n DiagramTools[DiagramTools[\"ZoomPan\"] = 4] = \"ZoomPan\";\n /** Enables/Disable DrawOnce support for the diagram */\n DiagramTools[DiagramTools[\"DrawOnce\"] = 8] = \"DrawOnce\";\n /** Enables/Disable continuousDraw support for the diagram */\n DiagramTools[DiagramTools[\"ContinuousDraw\"] = 16] = \"ContinuousDraw\";\n /** Enables/Disable all constraints */\n DiagramTools[DiagramTools[\"Default\"] = 3] = \"Default\";\n})(DiagramTools || (DiagramTools = {}));\n/**\n * Defines the container/canvas transform\n * Self - Sets the transform type as Self\n * Parent - Sets the transform type as Parent\n */\nexport var Transform;\n(function (Transform) {\n /** Self - Sets the transform type as Self */\n Transform[Transform[\"Self\"] = 1] = \"Self\";\n /** Parent - Sets the transform type as Parent */\n Transform[Transform[\"Parent\"] = 2] = \"Parent\";\n})(Transform || (Transform = {}));\n/**\n * Defines the rendering mode for diagram\n * Canvas - Sets the rendering mode type as Canvas\n * Svg - Sets the rendering mode type as Svg\n */\nexport var RenderMode;\n(function (RenderMode) {\n /** Canvas - Sets the rendering mode type as Canvas */\n RenderMode[RenderMode[\"Canvas\"] = 0] = \"Canvas\";\n /** Svg - Sets the rendering mode type as Svg */\n RenderMode[RenderMode[\"Svg\"] = 1] = \"Svg\";\n})(RenderMode || (RenderMode = {}));\n/**\n * Sets a combination of key modifiers, on recognition of which the command will be executed.They are\n * * None - no modifiers are pressed\n * * Control - ctrl key\n * * Meta - meta key im mac\n * * Alt - alt key\n * * Shift - shift key\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var KeyModifiers;\n(function (KeyModifiers) {\n /** No modifiers are pressed */\n KeyModifiers[KeyModifiers[\"None\"] = 0] = \"None\";\n /** The CTRL key */\n KeyModifiers[KeyModifiers[\"Control\"] = 1] = \"Control\";\n /** The Meta key pressed in Mac */\n KeyModifiers[KeyModifiers[\"Meta\"] = 1] = \"Meta\";\n /** The ALT key */\n KeyModifiers[KeyModifiers[\"Alt\"] = 2] = \"Alt\";\n /** The Shift key */\n KeyModifiers[KeyModifiers[\"Shift\"] = 4] = \"Shift\";\n})(KeyModifiers || (KeyModifiers = {}));\n/**\n * Sets the key value, on recognition of which the command will be executed. They are\n * * none - no key\n * * Number0 = The 0 key\n * * Number1 = The 1 key\n * * Number2 = The 2 key\n * * Number3 = The 3 key\n * * Number4 = The 4 key\n * * Number5 = The 5 key\n * * Number6 = The 6 key\n * * Number7 = The 7 key\n * * Number8 = The 8 key\n * * Number9 = The 9 key\n * * Number0 = The 0 key\n * * BackSpace = The BackSpace key\n * * F1 = The f1 key\n * * F2 = The f2 key\n * * F3 = The f3 key\n * * F4 = The f4 key\n * * F5 = The f5 key\n * * F6 = The f6 key\n * * F7 = The f7 key\n * * F8 = The f8 key\n * * F9 = The f9 key\n * * F10 = The f10 key\n * * F11 = The f11 key\n * * F12 = The f12 key\n * * A = The a key\n * * B = The b key\n * * C = The c key\n * * D = The d key\n * * E = The e key\n * * F = The f key\n * * G = The g key\n * * H = The h key\n * * I = The i key\n * * J = The j key\n * * K = The k key\n * * L = The l key\n * * M = The m key\n * * N = The n key\n * * O = The o key\n * * P = The p key\n * * Q = The q key\n * * R = The r key\n * * S = The s key\n * * T = The t key\n * * U = The u key\n * * V = The v key\n * * W = The w key\n * * X = The x key\n * * Y = The y key\n * * Z = The z key\n * * Left = The left key\n * * Right = The right key\n * * Top = The top key\n * * Bottom = The bottom key\n * * Escape = The Escape key\n * * Tab = The tab key\n * * Delete = The delete key\n * * Enter = The enter key\n * * The Space key\n * * The page up key\n * * The page down key\n * * The end key\n * * The home key\n * * The Minus\n * * The Plus\n * * The Star\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var Keys;\n(function (Keys) {\n /** No key pressed */\n Keys[Keys[\"None\"] = null] = \"None\";\n /** The 0 key */\n Keys[Keys[\"Number0\"] = 0] = \"Number0\";\n /** The 1 key */\n Keys[Keys[\"Number1\"] = 1] = \"Number1\";\n /** The 2 key */\n Keys[Keys[\"Number2\"] = 2] = \"Number2\";\n /** The 3 key */\n Keys[Keys[\"Number3\"] = 3] = \"Number3\";\n /** The 4 key */\n Keys[Keys[\"Number4\"] = 4] = \"Number4\";\n /** The 5 key */\n Keys[Keys[\"Number5\"] = 5] = \"Number5\";\n /** The 6 key */\n Keys[Keys[\"Number6\"] = 6] = \"Number6\";\n /** The 7 key */\n Keys[Keys[\"Number7\"] = 7] = \"Number7\";\n /** The 8 key */\n Keys[Keys[\"Number8\"] = 8] = \"Number8\";\n /** The 9 key */\n Keys[Keys[\"Number9\"] = 9] = \"Number9\";\n /** The A key */\n Keys[Keys[\"A\"] = 65] = \"A\";\n /** The B key */\n Keys[Keys[\"B\"] = 66] = \"B\";\n /** The C key */\n Keys[Keys[\"C\"] = 67] = \"C\";\n /** The D key */\n Keys[Keys[\"D\"] = 68] = \"D\";\n /** The E key */\n Keys[Keys[\"E\"] = 69] = \"E\";\n /** The F key */\n Keys[Keys[\"F\"] = 70] = \"F\";\n /** The G key */\n Keys[Keys[\"G\"] = 71] = \"G\";\n /** The H key */\n Keys[Keys[\"H\"] = 72] = \"H\";\n /** The I key */\n Keys[Keys[\"I\"] = 73] = \"I\";\n /** The J key */\n Keys[Keys[\"J\"] = 74] = \"J\";\n /** The K key */\n Keys[Keys[\"K\"] = 75] = \"K\";\n /** The L key */\n Keys[Keys[\"L\"] = 76] = \"L\";\n /** The M key */\n Keys[Keys[\"M\"] = 77] = \"M\";\n /** The N key */\n Keys[Keys[\"N\"] = 78] = \"N\";\n /** The O key */\n Keys[Keys[\"O\"] = 79] = \"O\";\n /** The P key */\n Keys[Keys[\"P\"] = 80] = \"P\";\n /** The Q key */\n Keys[Keys[\"Q\"] = 81] = \"Q\";\n /** The R key */\n Keys[Keys[\"R\"] = 82] = \"R\";\n /** The S key */\n Keys[Keys[\"S\"] = 83] = \"S\";\n /** The T key */\n Keys[Keys[\"T\"] = 84] = \"T\";\n /** The U key */\n Keys[Keys[\"U\"] = 85] = \"U\";\n /** The V key */\n Keys[Keys[\"V\"] = 86] = \"V\";\n /** The W key */\n Keys[Keys[\"W\"] = 87] = \"W\";\n /** The X key */\n Keys[Keys[\"X\"] = 88] = \"X\";\n /** The Y key */\n Keys[Keys[\"Y\"] = 89] = \"Y\";\n /** The Z key */\n Keys[Keys[\"Z\"] = 90] = \"Z\";\n /** The left arrow key */\n Keys[Keys[\"Left\"] = 37] = \"Left\";\n /** The up arrow key */\n Keys[Keys[\"Up\"] = 38] = \"Up\";\n /** The right arrow key */\n Keys[Keys[\"Right\"] = 39] = \"Right\";\n /** The down arrow key */\n Keys[Keys[\"Down\"] = 40] = \"Down\";\n /** The Escape key */\n Keys[Keys[\"Escape\"] = 27] = \"Escape\";\n /** The Space key */\n Keys[Keys[\"Space\"] = 32] = \"Space\";\n /** The page up key */\n Keys[Keys[\"PageUp\"] = 33] = \"PageUp\";\n /** The Space key */\n Keys[Keys[\"PageDown\"] = 34] = \"PageDown\";\n /** The Space key */\n Keys[Keys[\"End\"] = 35] = \"End\";\n /** The Space key */\n Keys[Keys[\"Home\"] = 36] = \"Home\";\n /** The delete key */\n Keys[Keys[\"Delete\"] = 46] = \"Delete\";\n /** The tab key */\n Keys[Keys[\"Tab\"] = 9] = \"Tab\";\n /** The enter key */\n Keys[Keys[\"Enter\"] = 13] = \"Enter\";\n /** The BackSpace key */\n Keys[Keys[\"BackSpace\"] = 8] = \"BackSpace\";\n /** The F1 key */\n Keys[Keys[\"F1\"] = 112] = \"F1\";\n /** The F2 key */\n Keys[Keys[\"F2\"] = 113] = \"F2\";\n /** The F3 key */\n Keys[Keys[\"F3\"] = 114] = \"F3\";\n /** The F4 key */\n Keys[Keys[\"F4\"] = 115] = \"F4\";\n /** The F5 key */\n Keys[Keys[\"F5\"] = 116] = \"F5\";\n /** The F6 key */\n Keys[Keys[\"F6\"] = 117] = \"F6\";\n /** The F7 key */\n Keys[Keys[\"F7\"] = 118] = \"F7\";\n /** The F8 key */\n Keys[Keys[\"F8\"] = 119] = \"F8\";\n /** The F9 key */\n Keys[Keys[\"F9\"] = 120] = \"F9\";\n /** The F10 key */\n Keys[Keys[\"F10\"] = 121] = \"F10\";\n /** The F111 key */\n Keys[Keys[\"F11\"] = 122] = \"F11\";\n /** The F12 key */\n Keys[Keys[\"F12\"] = 123] = \"F12\";\n /** The Star */\n Keys[Keys[\"Star\"] = 56] = \"Star\";\n /** The Plus */\n Keys[Keys[\"Plus\"] = 187] = \"Plus\";\n /** The Minus */\n Keys[Keys[\"Minus\"] = 189] = \"Minus\";\n})(Keys || (Keys = {}));\n/**\n * Enables/Disables certain actions of diagram\n * * Render - Indicates the diagram is in render state.\n * * PublicMethod - Indicates the diagram public method is in action.\n * * ToolAction - Indicates the diagram Tool is in action.\n * * UndoRedo - Indicates the diagram undo/redo is in action.\n * * TextEdit - Indicates the text editing is in progress.\n * * Group - Indicates the group is in progress.\n * * Clear - Indicates diagram have clear all.\n */\nexport var DiagramAction;\n(function (DiagramAction) {\n /** Indicates the diagram is in render state.r */\n DiagramAction[DiagramAction[\"Render\"] = 2] = \"Render\";\n /** Indicates the diagram public method is in action. */\n DiagramAction[DiagramAction[\"PublicMethod\"] = 4] = \"PublicMethod\";\n /** Indicates the diagram Tool is in action. */\n DiagramAction[DiagramAction[\"ToolAction\"] = 8] = \"ToolAction\";\n /** Indicates the diagram undo/redo is in action. */\n DiagramAction[DiagramAction[\"UndoRedo\"] = 16] = \"UndoRedo\";\n /** Indicates the text editing is in progress. */\n DiagramAction[DiagramAction[\"TextEdit\"] = 32] = \"TextEdit\";\n /** Indicates the group is in progress. */\n DiagramAction[DiagramAction[\"Group\"] = 64] = \"Group\";\n /** Indicates diagram have clear all. */\n DiagramAction[DiagramAction[\"Clear\"] = 128] = \"Clear\";\n})(DiagramAction || (DiagramAction = {}));\nexport var RealAction;\n(function (RealAction) {\n RealAction[RealAction[\"None\"] = 0] = \"None\";\n RealAction[RealAction[\"PreventDrag\"] = 2] = \"PreventDrag\";\n RealAction[RealAction[\"PreventScale\"] = 4] = \"PreventScale\";\n})(RealAction || (RealAction = {}));\n/** @private */\nexport var NoOfSegments;\n(function (NoOfSegments) {\n NoOfSegments[NoOfSegments[\"Zero\"] = 0] = \"Zero\";\n NoOfSegments[NoOfSegments[\"One\"] = 1] = \"One\";\n NoOfSegments[NoOfSegments[\"Two\"] = 2] = \"Two\";\n NoOfSegments[NoOfSegments[\"Three\"] = 3] = \"Three\";\n NoOfSegments[NoOfSegments[\"Four\"] = 4] = \"Four\";\n NoOfSegments[NoOfSegments[\"Five\"] = 5] = \"Five\";\n})(NoOfSegments || (NoOfSegments = {}));\n/**\n * events of diagram\n * @private\n */\nexport var DiagramEvent;\n(function (DiagramEvent) {\n DiagramEvent[DiagramEvent[\"collectionChange\"] = 0] = \"collectionChange\";\n DiagramEvent[DiagramEvent[\"rotateChange\"] = 1] = \"rotateChange\";\n DiagramEvent[DiagramEvent[\"positionChange\"] = 2] = \"positionChange\";\n DiagramEvent[DiagramEvent[\"propertyChange\"] = 3] = \"propertyChange\";\n DiagramEvent[DiagramEvent[\"selectionChange\"] = 4] = \"selectionChange\";\n DiagramEvent[DiagramEvent[\"sizeChange\"] = 5] = \"sizeChange\";\n DiagramEvent[DiagramEvent[\"drop\"] = 6] = \"drop\";\n DiagramEvent[DiagramEvent[\"sourcePointChange\"] = 7] = \"sourcePointChange\";\n DiagramEvent[DiagramEvent[\"targetPointChange\"] = 8] = \"targetPointChange\";\n DiagramEvent[DiagramEvent[\"connectionChange\"] = 9] = \"connectionChange\";\n DiagramEvent[DiagramEvent[\"animationComplete\"] = 10] = \"animationComplete\";\n DiagramEvent[DiagramEvent[\"click\"] = 11] = \"click\";\n DiagramEvent[DiagramEvent[\"doubleClick\"] = 12] = \"doubleClick\";\n DiagramEvent[DiagramEvent[\"scrollChange\"] = 13] = \"scrollChange\";\n DiagramEvent[DiagramEvent[\"dragEnter\"] = 14] = \"dragEnter\";\n DiagramEvent[DiagramEvent[\"dragLeave\"] = 15] = \"dragLeave\";\n DiagramEvent[DiagramEvent[\"dragOver\"] = 16] = \"dragOver\";\n DiagramEvent[DiagramEvent[\"textEdit\"] = 17] = \"textEdit\";\n DiagramEvent[DiagramEvent[\"paletteSelectionChange\"] = 18] = \"paletteSelectionChange\";\n DiagramEvent[DiagramEvent[\"historyChange\"] = 19] = \"historyChange\";\n DiagramEvent[DiagramEvent[\"mouseEnter\"] = 20] = \"mouseEnter\";\n DiagramEvent[DiagramEvent[\"mouseLeave\"] = 21] = \"mouseLeave\";\n DiagramEvent[DiagramEvent[\"mouseOver\"] = 22] = \"mouseOver\";\n})(DiagramEvent || (DiagramEvent = {}));\n/** Enables/Disables certain features of port connection\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var PortConstraints;\n(function (PortConstraints) {\n /** Disable all constraints */\n PortConstraints[PortConstraints[\"None\"] = 1] = \"None\";\n /** Enables connections with connector */\n PortConstraints[PortConstraints[\"Drag\"] = 2] = \"Drag\";\n /** Enables to create the connection when mouse hover on the port */\n PortConstraints[PortConstraints[\"Draw\"] = 4] = \"Draw\";\n})(PortConstraints || (PortConstraints = {}));\n/**\n * Defines the context menu click\n * contextMenuClick - Sets the context menu click as contextMenuClick\n */\nexport var contextMenuClick = \n/** contextMenuClick - Sets the context menu click as contextMenuClick */\n'contextMenuClick';\n/**\n * Defines the context menu open\n * contextMenuOpen - Sets the context menu open as contextMenuOpen\n */\nexport var contextMenuOpen = \n/** contextMenuOpen - Sets the context menu open as contextMenuOpen */\n'contextMenuOpen';\n","import { Transform } from '../../enum/enum';\nimport { Size } from '../../primitives/size';\nimport { Rect } from '../../primitives/rect';\nimport { getBounds, randomId } from '../../utility/base-util';\n/**\n * DiagramElement module defines the basic unit of diagram\n */\nvar DiagramElement = /** @class */ (function () {\n function DiagramElement() {\n /**\n * Sets/Gets the reference point of the element\n * ```html\n *
    \n * ```\n * ```typescript\n * let stackPanel: StackPanel = new StackPanel();\n * stackPanel.offsetX = 300; stackPanel.offsetY = 200;\n * stackPanel.width = 100; stackPanel.height = 100;\n * stackPanel.style.fill = 'red';\n * stackPanel.pivot = { x: 0.5, y: 0.5 };\n * let diagram: Diagram = new Diagram({\n * ...\n * basicElements: [stackPanel],\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\n this.pivot = { x: 0.5, y: 0.5 };\n /**\n * Sets or gets whether the content of the element needs to be measured\n */\n this.isDirt = true;\n /**\n * Sets or gets whether the content of the element to be visible\n */\n this.visible = true;\n /**\n * Sets/Gets the x-coordinate of the element\n */\n this.offsetX = 0;\n /**\n * Sets/Gets the y-coordinate of the element\n */\n this.offsetY = 0;\n /**\n * Set the corner of the element\n */\n this.cornerRadius = 0;\n /**\n * Sets/Gets the minimum height of the element\n */\n this.minHeight = undefined;\n /**\n * Sets/Gets the minimum width of the element\n */\n this.minWidth = undefined;\n /**\n * Sets/Gets the maximum width of the element\n */\n this.maxWidth = undefined;\n /**\n * Sets/Gets the maximum height of the element\n */\n this.maxHeight = undefined;\n /**\n * Sets/Gets the width of the element\n */\n this.width = undefined;\n /**\n * Sets/Gets the height of the element\n */\n this.height = undefined;\n /**\n * Sets/Gets the rotate angle of the element\n */\n this.rotateAngle = 0;\n /**\n * Sets/Gets the margin of the element\n */\n this.margin = { left: 0, right: 0, top: 0, bottom: 0 };\n /**\n * Sets/Gets how the element has to be horizontally arranged with respect to its immediate parent\n * * Stretch - Stretches the diagram element throughout its immediate parent\n * * Left - Aligns the diagram element at the left of its immediate parent\n * * Right - Aligns the diagram element at the right of its immediate parent\n * * Center - Aligns the diagram element at the center of its immediate parent\n * * Auto - Aligns the diagram element based on the characteristics of its immediate parent\n */\n this.horizontalAlignment = 'Auto';\n /**\n * Sets/Gets how the element has to be vertically arranged with respect to its immediate parent\n * * Stretch - Stretches the diagram element throughout its immediate parent\n * * Top - Aligns the diagram element at the top of its immediate parent\n * * Bottom - Aligns the diagram element at the bottom of its immediate parent\n * * Center - Aligns the diagram element at the center of its immediate parent\n * * Auto - Aligns the diagram element based on the characteristics of its immediate parent\n */\n this.verticalAlignment = 'Auto';\n /**\n * Sets whether the element has to be aligned with respect to a point/with respect to its immediate parent\n * * Point - Diagram elements will be aligned with respect to a point\n * * Object - Diagram elements will be aligned with respect to its immediate parent\n */\n this.relativeMode = 'Point';\n /**\n * Sets whether the element has to be transformed based on its parent or not\n * * Self - Sets the transform type as Self\n * * Parent - Sets the transform type as Parent\n */\n this.transform = Transform.Self | Transform.Parent;\n /**\n * Sets the style of the element\n */\n this.style = { fill: 'white', strokeColor: 'black', opacity: 1, strokeWidth: 1 };\n /**\n * Gets the minimum size that is required by the element\n */\n this.desiredSize = new Size();\n /**\n * Gets the size that the element will be rendered\n */\n this.actualSize = new Size();\n /**\n * Gets the rotate angle that is set to the immediate parent of the element\n */\n this.parentTransform = 0;\n this.isSvgRender = false;\n /**\n * Gets/Sets the boundary of the element\n */\n this.bounds = new Rect(0, 0, 0, 0);\n /**\n * Defines the appearance of the shadow of the element\n */\n this.shadow = null;\n /**\n * Defines the description of the diagram element\n */\n this.description = '';\n /**\n * Defines whether the element has to be measured or not\n */\n this.staticSize = false;\n this.isRectElement = false;\n //private variables\n this.position = undefined;\n this.unitMode = undefined;\n this.float = false;\n this.floatingBounds = undefined;\n this.id = randomId();\n }\n /**\n * Sets the offset of the element with respect to its parent\n * @param x\n * @param y\n * @param mode\n */\n DiagramElement.prototype.setOffsetWithRespectToBounds = function (x, y, mode) {\n this.unitMode = mode;\n this.position = { x: x, y: y };\n };\n /**\n * Gets the position of the element with respect to its parent\n * @param size\n */\n DiagramElement.prototype.getAbsolutePosition = function (size) {\n if (this.position !== undefined) {\n if (this.unitMode === 'Absolute') {\n return this.position;\n }\n else {\n return {\n x: this.position.x * size.width, y: this.position.y * size.height\n };\n }\n }\n return undefined;\n };\n Object.defineProperty(DiagramElement.prototype, \"outerBounds\", {\n get: function () {\n return this.floatingBounds || this.bounds;\n },\n set: function (bounds) {\n this.floatingBounds = bounds;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Measures the minimum space that the element requires\n * @param availableSize\n */\n DiagramElement.prototype.measure = function (availableSize) {\n var width = this.width !== undefined ? this.width : (availableSize.width || 0) - this.margin.left - this.margin.right;\n var height = this.height !== undefined ? this.height : (availableSize.height || 0) - this.margin.top - this.margin.bottom;\n this.desiredSize = new Size(width, height);\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the element\n * @param desiredSize\n */\n DiagramElement.prototype.arrange = function (desiredSize) {\n this.actualSize = desiredSize;\n this.updateBounds();\n return this.actualSize;\n };\n /**\n * Updates the bounds of the element\n */\n DiagramElement.prototype.updateBounds = function () {\n this.bounds = getBounds(this);\n };\n /**\n * Validates the size of the element with respect to its minimum and maximum size\n * @param desiredSize\n * @param availableSize\n */\n DiagramElement.prototype.validateDesiredSize = function (desiredSize, availableSize) {\n //Empty canvas\n if (this.isRectElement && !this.width && !this.minWidth && !this.maxWidth) {\n desiredSize.width = 50;\n }\n if (this.isRectElement && !this.height && !this.minHeight && !this.maxHeight) {\n desiredSize.height = 50;\n }\n if (desiredSize === undefined || this.width !== undefined &&\n this.height !== undefined) {\n desiredSize = desiredSize || new Size();\n desiredSize.width = this.width === undefined ? (availableSize.width || 0)\n - this.margin.left - this.margin.right : this.width;\n desiredSize.height = this.height === undefined ? (availableSize.height || 0)\n - this.margin.top - this.margin.bottom : this.height;\n }\n //Considering min values\n if (this.minWidth !== undefined) {\n desiredSize.width = Math.max(desiredSize.width, this.minWidth);\n }\n if (this.minHeight !== undefined) {\n desiredSize.height = Math.max(desiredSize.height, this.minHeight);\n }\n //Considering max values\n if (this.maxWidth !== undefined) {\n desiredSize.width = Math.min(desiredSize.width, this.maxWidth);\n }\n if (this.maxHeight !== undefined) {\n desiredSize.height = Math.min(desiredSize.height, this.maxHeight);\n }\n return desiredSize;\n };\n return DiagramElement;\n}());\nexport { DiagramElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, ComplexFactory } from '@syncfusion/ej2-base';\nvar getGradientType = function (obj) {\n switch (obj.type) {\n case 'Linear':\n return LinearGradient;\n case 'Radial':\n return RadialGradient;\n default:\n return LinearGradient;\n }\n};\n/**\n * Layout Model module defines the styles and types to arrange objects in containers\n */\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/**\n * Defines the space to be left between an object and its immediate parent\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(0)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(0)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(0)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Defines the Shadow appearance of the objects\n * ```html\n *
    \n * ```\n * ```typescript\n * let nodes: NodeModel[] = [{ id: 'node2', width: 100, height: 100,\n * constraints: NodeConstraints.Default | NodeConstraints.Shadow,\n * shadow: { angle: 45, distance: 5, opacity: 0.7, color: 'grey'}\n * }];\n * let diagram: Diagram = new Diagram({\n * ...\n * nodes: nodes,\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar Shadow = /** @class */ (function (_super) {\n __extends(Shadow, _super);\n function Shadow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(45)\n ], Shadow.prototype, \"angle\", void 0);\n __decorate([\n Property(5)\n ], Shadow.prototype, \"distance\", void 0);\n __decorate([\n Property(0.7)\n ], Shadow.prototype, \"opacity\", void 0);\n __decorate([\n Property('lightgrey')\n ], Shadow.prototype, \"color\", void 0);\n return Shadow;\n}(ChildProperty));\nexport { Shadow };\n/**\n * Defines the different colors and the region of color transitions\n * ```html\n *
    \n * ```\n * ```typescript\n * let stopscol: StopModel[] = [];\n * let stops1: StopModel = { color: 'white', offset: 0, opacity: 0.7 };\n * stopscol.push(stops1);\n * let stops2: StopModel = { color: 'red', offset: 0, opacity: 0.3 };\n * stopscol.push(stops2);\n * let gradient: RadialGradientModel = { cx: 50, cy: 50, fx: 50, fy: 50, stops: stopscol, type: 'Radial' };\n * let nodes: NodeModel[] = [{ id: 'node1', width: 100, height: 100,\n * style: { gradient: gradient }\n * }];\n * let diagram: Diagram = new Diagram({\n * ...\n * nodes: nodes,\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar Stop = /** @class */ (function (_super) {\n __extends(Stop, _super);\n function Stop() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Stop.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Stop.prototype, \"offset\", void 0);\n __decorate([\n Property(1)\n ], Stop.prototype, \"opacity\", void 0);\n return Stop;\n}(ChildProperty));\nexport { Stop };\n/**\n * Paints the node with a smooth transition from one color to another color\n */\nvar Gradient = /** @class */ (function (_super) {\n __extends(Gradient, _super);\n function Gradient() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Stop)\n ], Gradient.prototype, \"stops\", void 0);\n __decorate([\n Property('None')\n ], Gradient.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Gradient.prototype, \"id\", void 0);\n return Gradient;\n}(ChildProperty));\nexport { Gradient };\n/**\n * Defines the linear gradient of styles\n * ```html\n *
    \n * ```\n * ```typescript\n * let stopscol: StopModel[] = [];\n * let stops1: StopModel = { color: 'white', offset: 0, opacity: 0.7 };\n * stopscol.push(stops1);\n * let stops2: StopModel = { color: 'red', offset: 0, opacity: 0.3 };\n * stopscol.push(stops2);\n * let gradient: LinearGradientModel = { x1: 0, x2: 50, y1: 0, y2: 50, stops: stopscol, type: 'Linear' };\n * let nodes: NodeModel[] = [{ id: 'node1', width: 100, height: 100,\n * style: { gradient: gradient }\n * }];\n * let diagram: Diagram = new Diagram({\n * ...\n * nodes: nodes,\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\n/**\n * Paints the node with linear color transitions\n */\nvar LinearGradient = /** @class */ (function (_super) {\n __extends(LinearGradient, _super);\n function LinearGradient() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"x1\", void 0);\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"x2\", void 0);\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"y1\", void 0);\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"y2\", void 0);\n return LinearGradient;\n}(Gradient));\nexport { LinearGradient };\n/**\n * A focal point defines the beginning of the gradient, and a circle defines the end point of the gradient\n * ```html\n *
    \n * ```\n * ```typescript\n * let stopscol: StopModel[] = [];\n * let stops1: StopModel = { color: 'white', offset: 0, opacity: 0.7 };\n * stopscol.push(stops1);\n * let stops2: StopModel = { color: 'red', offset: 0, opacity: 0.3 };\n * stopscol.push(stops2);\n * let gradient: RadialGradientModel = { cx: 50, cy: 50, fx: 50, fy: 50, stops: stopscol, type: 'Radial' };\n * let nodes: NodeModel[] = [{ id: 'node1', width: 100, height: 100,\n * style: { gradient: gradient }\n * }];\n * let diagram: Diagram = new Diagram({\n * ...\n * nodes: nodes,\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar RadialGradient = /** @class */ (function (_super) {\n __extends(RadialGradient, _super);\n function RadialGradient() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"cx\", void 0);\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"cy\", void 0);\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"fx\", void 0);\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"fy\", void 0);\n __decorate([\n Property(50)\n ], RadialGradient.prototype, \"r\", void 0);\n return RadialGradient;\n}(Gradient));\nexport { RadialGradient };\n/**\n * Defines the style of shape/path\n */\nvar ShapeStyle = /** @class */ (function (_super) {\n __extends(ShapeStyle, _super);\n function ShapeStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('white')\n ], ShapeStyle.prototype, \"fill\", void 0);\n __decorate([\n Property('black')\n ], ShapeStyle.prototype, \"strokeColor\", void 0);\n __decorate([\n Property('')\n ], ShapeStyle.prototype, \"strokeDashArray\", void 0);\n __decorate([\n Property(1)\n ], ShapeStyle.prototype, \"strokeWidth\", void 0);\n __decorate([\n Property(1)\n ], ShapeStyle.prototype, \"opacity\", void 0);\n __decorate([\n ComplexFactory(getGradientType)\n ], ShapeStyle.prototype, \"gradient\", void 0);\n return ShapeStyle;\n}(ChildProperty));\nexport { ShapeStyle };\n/**\n * Defines the stroke style of a path\n */\nvar StrokeStyle = /** @class */ (function (_super) {\n __extends(StrokeStyle, _super);\n function StrokeStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('transparent')\n ], StrokeStyle.prototype, \"fill\", void 0);\n return StrokeStyle;\n}(ShapeStyle));\nexport { StrokeStyle };\n/**\n * Defines the appearance of text\n * ```html\n *
    \n * ```\n * ```typescript\n * let style: TextStyleModel = { strokeColor: 'black', opacity: 0.5, whiteSpace:'CollapseSpace', strokeWidth: 1 };\n * let node: NodeModel;\n * node = {\n * ...\n * id: 'node', width: 100, height: 100, offsetX: 100, offsetY: 100,\n * annotations : [{\n * content: 'text', style: style }];\n * ...\n * };\n * let diagram: Diagram = new Diagram({\n * ...\n * nodes: [node],\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar TextStyle = /** @class */ (function (_super) {\n __extends(TextStyle, _super);\n function TextStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('black')\n ], TextStyle.prototype, \"color\", void 0);\n __decorate([\n Property('Arial')\n ], TextStyle.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(12)\n ], TextStyle.prototype, \"fontSize\", void 0);\n __decorate([\n Property(false)\n ], TextStyle.prototype, \"italic\", void 0);\n __decorate([\n Property(false)\n ], TextStyle.prototype, \"bold\", void 0);\n __decorate([\n Property('CollapseSpace')\n ], TextStyle.prototype, \"whiteSpace\", void 0);\n __decorate([\n Property('WrapWithOverflow')\n ], TextStyle.prototype, \"textWrapping\", void 0);\n __decorate([\n Property('Center')\n ], TextStyle.prototype, \"textAlign\", void 0);\n __decorate([\n Property('None')\n ], TextStyle.prototype, \"textDecoration\", void 0);\n __decorate([\n Property('Wrap')\n ], TextStyle.prototype, \"textOverflow\", void 0);\n return TextStyle;\n}(ShapeStyle));\nexport { TextStyle };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DiagramElement } from '../elements/diagram-element';\nimport { Thickness } from '../appearance';\nimport { Size } from '../../primitives/size';\nimport { Rect } from '../../primitives/rect';\nimport { rotatePoint, getOffset } from '../../utility/base-util';\n/**\n * Container module is used to group related objects\n */\nvar Container = /** @class */ (function (_super) {\n __extends(Container, _super);\n function Container() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Gets/Sets the space between the container and its immediate children\n */\n _this.padding = new Thickness(0, 0, 0, 0);\n //private members \n _this.desiredBounds = undefined;\n /** @private */\n _this.measureChildren = true;\n _this.prevRotateAngle = 0;\n return _this;\n }\n /**\n * returns whether the container has child elements or not\n */\n Container.prototype.hasChildren = function () {\n if (this.children !== undefined && this.children.length > 0) {\n return true;\n }\n return false;\n };\n /**\n * Measures the minimum space that the container requires\n *\n * @param availableSize\n */\n Container.prototype.measure = function (availableSize) {\n // measure the element and find the desired size\n this.desiredBounds = undefined;\n var desired = undefined;\n var child;\n var center = { x: 0, y: 0 };\n var y;\n var x;\n var childBounds;\n if (this.hasChildren()) {\n //Measuring the children\n for (var i = 0; i < this.children.length; i++) {\n child = this.children[i];\n var force = child.horizontalAlignment === 'Stretch' || child.verticalAlignment === 'Stretch';\n if (this.measureChildren || force || (child instanceof Container && child.measureChildren !== undefined)) {\n child.measure(availableSize);\n }\n childBounds = this.GetChildrenBounds(child);\n if (child.horizontalAlignment !== 'Stretch' && child.verticalAlignment !== 'Stretch') {\n if (this.desiredBounds === undefined) {\n this.desiredBounds = childBounds;\n }\n else {\n this.desiredBounds.uniteRect(childBounds);\n }\n }\n }\n if (this.desiredBounds !== undefined && this.rotateAngle !== 0) {\n var offsetPt = {\n x: this.desiredBounds.x + this.desiredBounds.width * this.pivot.x,\n y: this.desiredBounds.y + this.desiredBounds.height * this.pivot.y\n };\n var newPoint = rotatePoint(this.rotateAngle, undefined, undefined, offsetPt);\n this.desiredBounds.x = newPoint.x - this.desiredBounds.width * this.pivot.x;\n this.desiredBounds.y = newPoint.y - this.desiredBounds.height * this.pivot.y;\n }\n if (this.desiredBounds) {\n desired = new Size(this.desiredBounds.width, this.desiredBounds.height);\n }\n }\n desired = this.validateDesiredSize(desired, availableSize);\n this.stretchChildren(desired);\n this.desiredSize = desired;\n return desired;\n };\n /**\n * Arranges the container and its children\n * @param desiredSize\n */\n Container.prototype.arrange = function (desiredSize) {\n var child;\n var bounds;\n var childBounds = this.desiredBounds;\n if (childBounds) {\n var x = this.offsetX;\n var y = this.offsetY;\n this.offsetX = childBounds.x + childBounds.width * this.pivot.x;\n this.offsetY = childBounds.y + childBounds.height * this.pivot.y;\n // container has rotateAngle\n if (this.hasChildren()) {\n //Measuring the children\n for (var i = 0; i < this.children.length; i++) {\n child = this.children[i];\n var arrange = false;\n if (child.horizontalAlignment === 'Stretch') {\n child.offsetX = this.offsetX;\n child.parentTransform = this.parentTransform + this.rotateAngle;\n arrange = true;\n }\n if (child.verticalAlignment === 'Stretch') {\n child.offsetY = this.offsetY;\n child.parentTransform = this.parentTransform + this.rotateAngle;\n arrange = true;\n }\n if (arrange || this.measureChildren || (child instanceof Container && child.measureChildren !== undefined)) {\n child.arrange(child.desiredSize);\n }\n }\n }\n }\n this.actualSize = desiredSize;\n this.updateBounds();\n this.prevRotateAngle = this.rotateAngle;\n return desiredSize;\n };\n //protected methods\n /**\n * Stretches the child elements based on the size of the container\n * @param size\n */\n Container.prototype.stretchChildren = function (size) {\n if (this.hasChildren()) {\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.horizontalAlignment === 'Stretch' || child.desiredSize.width === undefined) {\n child.desiredSize.width = size.width - child.margin.left - child.margin.right;\n }\n if (child.verticalAlignment === 'Stretch' || child.desiredSize.height === undefined) {\n child.desiredSize.height = size.height - child.margin.top - child.margin.bottom;\n }\n if (child instanceof Container) {\n child.stretchChildren(child.desiredSize);\n }\n }\n }\n };\n /**\n * Considers the padding of the element when measuring its desired size\n * @param size\n */\n Container.prototype.applyPadding = function (size) {\n size.width += this.padding.left + this.padding.right;\n size.height += this.padding.top + this.padding.bottom;\n };\n /**\n * Finds the offset of the child element with respect to the container\n * @param child\n * @param center\n */\n Container.prototype.findChildOffsetFromCenter = function (child, center) {\n var topLeft = { x: center.x - child.desiredSize.width / 2, y: center.y - child.desiredSize.height / 2 };\n var offset = getOffset(topLeft, child);\n //Rotate based on child rotate angle\n offset = rotatePoint(child.rotateAngle, center.x, center.y, offset);\n //Rotate based on parent pivot\n offset = rotatePoint(this.rotateAngle + this.parentTransform, this.offsetX, this.offsetY, offset);\n child.offsetX = offset.x;\n child.offsetY = offset.y;\n };\n //private methods - check its need\n Container.prototype.GetChildrenBounds = function (child) {\n var childBounds;\n var childSize;\n childSize = child.desiredSize.clone();\n var diffAngle = child.rotateAngle - this.rotateAngle;\n var refPoint = { x: child.offsetX, y: child.offsetY };\n var left = refPoint.x - childSize.width * child.pivot.x;\n var top = refPoint.y - childSize.height * child.pivot.y;\n var right = left + childSize.width;\n var bottom = top + childSize.height;\n var topLeft = { x: left, y: top };\n var topRight = { x: right, y: top };\n var bottomLeft = { x: left, y: bottom };\n var bottomRight = { x: right, y: bottom };\n topLeft = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, topLeft);\n topRight = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, topRight);\n bottomLeft = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, bottomLeft);\n bottomRight = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, bottomRight);\n if (this.rotateAngle !== 0) {\n topLeft = rotatePoint(-this.rotateAngle, undefined, undefined, topLeft);\n topRight = rotatePoint(-this.rotateAngle, undefined, undefined, topRight);\n bottomLeft = rotatePoint(-this.rotateAngle, undefined, undefined, bottomLeft);\n bottomRight = rotatePoint(-this.rotateAngle, undefined, undefined, bottomRight);\n }\n return Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n };\n return Container;\n}(DiagramElement));\nexport { Container };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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 } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { Rect } from '../../primitives/rect';\nimport { measurePath, findSegmentPoints, translatePoints } from './../../utility/dom-util';\nimport { processPathData, splitArrayCollection, transformPath, getPathString } from '../../utility/path-util';\n/**\n * PathElement takes care of how to align the path based on offsetX and offsetY\n */\nvar PathElement = /** @class */ (function (_super) {\n __extends(PathElement, _super);\n /**\n * set the id for each element\n */\n function PathElement() {\n var _this = _super.call(this) || this;\n /**\n * Gets or sets the geometry of the path element\n */\n _this.pathData = '';\n /**\n * Gets/Sets whether the path has to be transformed to fit the given x,y, width, height\n */\n _this.transformPath = true;\n /**\n * Gets/Sets the equivalent path, that will have the origin as 0,0\n */\n _this.absolutePath = '';\n //Private variables\n _this.absoluteBounds = new Rect();\n return _this;\n }\n Object.defineProperty(PathElement.prototype, \"data\", {\n get: function () {\n return this.pathData;\n },\n set: function (value) {\n if (this.pathData !== value) {\n this.pathData = value;\n this.isDirt = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n PathElement.prototype.getPoints = function () {\n var _this = this;\n if (!this.pointTimer) {\n this.pointTimer = setTimeout(function () {\n _this.points = null;\n _this.pointTimer = null;\n }, 200);\n }\n this.points = this.points || findSegmentPoints(this);\n return translatePoints(this, this.points);\n };\n /**\n * Measures the minimum space that is required to render the element\n * @param availableSize\n */\n PathElement.prototype.measure = function (availableSize) {\n //Performance issue - Avoiding measuring the connector path\n if (this.staticSize && this.width !== undefined && this.height !== undefined) {\n this.absoluteBounds = new Rect(this.offsetX - this.width * this.pivot.x, this.offsetY - this.height * this.pivot.y, this.width, this.height);\n }\n else if (this.isDirt && (this.transformPath || (this.width === undefined || this.height === undefined))) {\n //Measure the element only whent the path data is changed/ size is not specified\n this.absoluteBounds = measurePath(this.data ? this.data : '');\n }\n if (this.width === undefined) {\n this.desiredSize = new Size(this.absoluteBounds.width, this.height || this.absoluteBounds.height);\n }\n else if (this.height === undefined) {\n this.desiredSize = new Size(this.width || this.absoluteBounds.width, this.absoluteBounds.height);\n }\n else {\n this.desiredSize = new Size(this.width, this.height);\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the path element\n * @param desiredSize\n */\n PathElement.prototype.arrange = function (desiredSize) {\n if (this.isDirt || this.actualSize.width !== desiredSize.width || this.actualSize.height !== desiredSize.height) {\n this.isDirt = true;\n this.absolutePath = this.updatePath(this.data, this.absoluteBounds, desiredSize);\n if (!this.staticSize) {\n this.points = null;\n }\n }\n this.actualSize = this.desiredSize;\n this.updateBounds();\n this.isDirt = false;\n return this.actualSize;\n };\n /**\n * Translates the path to 0,0 and scales the path based on the actual size\n * @param pathData\n * @param bounds\n * @param actualSize\n */\n PathElement.prototype.updatePath = function (pathData, bounds, actualSize) {\n var isScale = false;\n var newPathString = '';\n var scaleX = -bounds.x;\n var scaleY = -bounds.y;\n var arrayCollection = [];\n if (actualSize.width !== bounds.width || actualSize.height !== bounds.height) {\n scaleX = actualSize.width / Number(bounds.width ? bounds.width : 1);\n scaleY = actualSize.height / Number(bounds.height ? bounds.height : 1);\n isScale = true;\n }\n arrayCollection = processPathData(pathData);\n arrayCollection = splitArrayCollection(arrayCollection);\n if ((isScale || this.isDirt) && this.transformPath) {\n newPathString = transformPath(arrayCollection, scaleX, scaleY, isScale, bounds.x, bounds.y, 0, 0);\n }\n else {\n newPathString = getPathString(arrayCollection);\n }\n isScale = false;\n return newPathString;\n };\n return PathElement;\n}(DiagramElement));\nexport { PathElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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 } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { measureNativeContent, getContent, measureNativeSvg } from './../../utility/dom-util';\n/**\n * NativeElement defines the basic native elements\n */\nvar DiagramNativeElement = /** @class */ (function (_super) {\n __extends(DiagramNativeElement, _super);\n /**\n * set the id for each element\n */\n function DiagramNativeElement(nodeId, diagramId) {\n var _this = _super.call(this) || this;\n _this.data = '';\n _this.nodeId = '';\n _this.diagramId = '';\n /**\n * sets scaling factor of the Native Element\n */\n _this.scale = 'Stretch';\n _this.diagramId = diagramId;\n _this.nodeId = nodeId;\n return _this;\n }\n Object.defineProperty(DiagramNativeElement.prototype, \"content\", {\n /**\n * Gets or sets the geometry of the native element\n */\n get: function () {\n return this.data;\n },\n set: function (value) {\n this.data = value;\n this.template = getContent(this, false);\n this.isDirt = true;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Measures minimum space that is required to render the Native Element\n * @param availableSize\n */\n DiagramNativeElement.prototype.measure = function (availableSize) {\n if (this.isDirt) {\n var rect = measureNativeContent(this.template);\n this.contentSize = new Size();\n this.contentSize.width = rect.width;\n this.contentSize.height = rect.height;\n var x = rect.x;\n var y = rect.y;\n this.templatePosition = { x: x, y: y };\n this.isDirt = false;\n }\n if (this.width === undefined || this.height === undefined) {\n var getAvailableSize = measureNativeSvg(this.template);\n this.desiredSize = new Size(getAvailableSize.width, getAvailableSize.height);\n }\n else {\n this.desiredSize = new Size(this.width, this.height);\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the Native Element\n * @param desiredSize\n */\n DiagramNativeElement.prototype.arrange = function (desiredSize) {\n this.actualSize = new Size(this.desiredSize.width, this.desiredSize.height);\n this.updateBounds();\n return this.actualSize;\n };\n return DiagramNativeElement;\n}(DiagramElement));\nexport { DiagramNativeElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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 } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { measureText } from './../../utility/dom-util';\n/**\n * TextElement is used to display text/annotations\n */\nvar TextElement = /** @class */ (function (_super) {\n __extends(TextElement, _super);\n /**\n * set the id for each element\n */\n function TextElement() {\n var _this = _super.call(this) || this;\n /**\n * sets or gets the image source\n */\n _this.textContent = '';\n _this.hyperlink = {\n color: 'blue'\n };\n /** @private */\n _this.doWrap = true;\n _this.textNodes = [];\n /**\n * Defines the appearance of the text element\n */\n _this.style = {\n color: 'black', fill: 'white', strokeColor: 'black',\n strokeWidth: 1, fontFamily: 'Arial', fontSize: 12, whiteSpace: 'CollapseSpace',\n textWrapping: 'WrapWithOverflow', textAlign: 'Center', italic: false, bold: false,\n textDecoration: 'None', strokeDashArray: '', opacity: 5, gradient: null,\n textOverflow: 'Wrap'\n };\n _this.style.fill = 'transparent';\n _this.style.strokeColor = 'transparent';\n return _this;\n }\n Object.defineProperty(TextElement.prototype, \"content\", {\n get: function () {\n return this.textContent;\n },\n set: function (value) {\n if (this.textContent !== value) {\n this.textContent = value;\n this.isDirt = true;\n this.doWrap = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextElement.prototype, \"childNodes\", {\n get: function () {\n return this.textNodes;\n },\n set: function (value) {\n this.textNodes = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextElement.prototype, \"wrapBounds\", {\n get: function () {\n return this.textWrapBounds;\n },\n set: function (value) {\n this.textWrapBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n TextElement.prototype.refreshTextElement = function () {\n this.isDirt = true;\n };\n /**\n * Measures the minimum size that is required for the text element\n * @param availableSize\n */\n TextElement.prototype.measure = function (availableSize) {\n var size;\n if (this.isDirt) {\n size = measureText(this, this.style, this.content, this.width);\n }\n else {\n size = this.desiredSize;\n }\n if (this.width === undefined || this.height === undefined) {\n this.desiredSize = new Size(size.width, size.height);\n }\n else {\n this.desiredSize = new Size(this.width, this.height);\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the text element\n * @param desiredSize\n */\n TextElement.prototype.arrange = function (desiredSize) {\n if (desiredSize.width !== this.actualSize.width || desiredSize.height !== this.actualSize.height || this.isDirt) {\n this.doWrap = true;\n }\n this.actualSize = desiredSize;\n this.updateBounds();\n this.isDirt = false;\n return this.actualSize;\n };\n return TextElement;\n}(DiagramElement));\nexport { TextElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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 } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { measureImage } from './../../utility/dom-util';\n/**\n * ImageElement defines a basic image elements\n */\nvar ImageElement = /** @class */ (function (_super) {\n __extends(ImageElement, _super);\n /**\n * set the id for each element\n */\n function ImageElement() {\n var _this = _super.call(this) || this;\n /**\n * sets or gets the image source\n */\n _this.imageSource = '';\n /**\n * sets scaling factor of the image\n */\n _this.imageScale = 'None';\n /**\n * sets the alignment of the image\n */\n _this.imageAlign = 'None';\n /**\n * Sets how to stretch the image\n */\n _this.stretch = 'Stretch';\n return _this;\n }\n Object.defineProperty(ImageElement.prototype, \"source\", {\n get: function () {\n return this.imageSource;\n },\n set: function (value) {\n this.imageSource = value;\n this.isDirt = true;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Measures minimum space that is required to render the image\n * @param availableSize\n */\n ImageElement.prototype.measure = function (availableSize) {\n if (this.isDirt && (this.stretch !== 'Stretch' || this.width === undefined && this.height === undefined)) {\n this.contentSize = measureImage(this.source, this.contentSize);\n this.isDirt = false;\n }\n if (this.width !== undefined && this.height !== undefined) {\n this.desiredSize = new Size(this.width, this.height);\n this.contentSize = this.desiredSize;\n }\n else {\n this.desiredSize = this.contentSize;\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the image\n * @param desiredSize\n */\n ImageElement.prototype.arrange = function (desiredSize) {\n this.actualSize = new Size(this.desiredSize.width, this.desiredSize.height);\n this.updateBounds();\n return this.actualSize;\n };\n return ImageElement;\n}(DiagramElement));\nexport { ImageElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Container } from './container';\nimport { rotateSize } from '../../utility/base-util';\nimport { Transform } from '../../enum/enum';\nimport { Size } from '../../primitives/size';\nimport { Rect } from '../../primitives/rect';\n/**\n * Canvas module is used to define a plane(canvas) and to arrange the children based on margin\n */\nvar Canvas = /** @class */ (function (_super) {\n __extends(Canvas, _super);\n function Canvas() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Not applicable for canvas\n * @private\n */\n _this.measureChildren = undefined;\n return _this;\n }\n /**\n * Measures the minimum space that the canvas requires\n * @param availableSize\n */\n Canvas.prototype.measure = function (availableSize) {\n var desired = undefined;\n var desiredBounds = undefined;\n if (this.hasChildren()) {\n //Measuring the children\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.measure(availableSize);\n var childSize = child.desiredSize.clone();\n if (child.rotateAngle !== 0) {\n childSize = rotateSize(childSize, child.rotateAngle);\n }\n var right = childSize.width + child.margin.right;\n var bottom = childSize.height + child.margin.bottom;\n var childBounds = new Rect(child.margin.left, child.margin.top, right, bottom);\n if (child.float) {\n var position = child.getAbsolutePosition(childSize);\n if (position !== undefined) {\n continue;\n }\n }\n if (desiredBounds === undefined) {\n desiredBounds = childBounds;\n }\n else {\n desiredBounds.uniteRect(childBounds);\n }\n }\n if (desiredBounds) {\n var leftMargin = 0;\n var topMargin = 0;\n leftMargin = Math.max(desiredBounds.left, 0);\n topMargin = Math.max(desiredBounds.top, 0);\n desired = new Size(desiredBounds.width + leftMargin, desiredBounds.height + topMargin);\n }\n }\n desired = _super.prototype.validateDesiredSize.call(this, desired, availableSize);\n _super.prototype.stretchChildren.call(this, desired);\n //Considering padding values\n desired.width += this.padding.left + this.padding.right;\n desired.height += this.padding.top + this.padding.bottom;\n this.desiredSize = desired;\n return desired;\n };\n /**\n * Arranges the child elements of the canvas\n */\n Canvas.prototype.arrange = function (desiredSize) {\n this.outerBounds = new Rect();\n if (this.hasChildren()) {\n var y = void 0;\n var x = void 0;\n y = this.offsetY - desiredSize.height * this.pivot.y + this.padding.top;\n x = this.offsetX - desiredSize.width * this.pivot.x + this.padding.left;\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if ((child.transform & Transform.Parent) !== 0) {\n child.parentTransform = this.parentTransform + this.rotateAngle;\n var childSize = child.desiredSize.clone();\n if (child.rotateAngle !== 0) {\n childSize = rotateSize(childSize, child.rotateAngle);\n }\n var topLeft = void 0;\n var center = { x: 0, y: 0 };\n var childX = x;\n var childY = y;\n if (child.relativeMode === 'Point') {\n var position = child.getAbsolutePosition(desiredSize);\n if (position !== undefined) {\n childX += position.x;\n childY += position.y;\n }\n }\n if (child.relativeMode === 'Object') {\n topLeft = this.alignChildBasedOnParent(child, childSize, desiredSize, childX, childY);\n }\n else {\n topLeft = this.alignChildBasedOnaPoint(child, childX, childY, childSize);\n }\n center = { x: topLeft.x + childSize.width / 2, y: topLeft.y + childSize.height / 2 };\n _super.prototype.findChildOffsetFromCenter.call(this, child, center);\n }\n child.arrange(child.desiredSize);\n this.outerBounds.uniteRect(child.outerBounds);\n }\n }\n this.actualSize = desiredSize;\n this.updateBounds();\n this.outerBounds.uniteRect(this.bounds);\n return desiredSize;\n };\n /**\n * Aligns the child element based on its parent\n * @param child\n * @param childSize\n * @param parentSize\n * @param x\n * @param y\n */\n Canvas.prototype.alignChildBasedOnParent = function (child, childSize, parentSize, x, y) {\n switch (child.horizontalAlignment) {\n case 'Auto':\n case 'Left':\n x += child.margin.left;\n break;\n case 'Right':\n x += parentSize.width - childSize.width - child.margin.right;\n break;\n case 'Stretch':\n case 'Center':\n x += parentSize.width / 2 - childSize.width / 2;\n break;\n }\n switch (child.verticalAlignment) {\n case 'Auto':\n case 'Top':\n y += child.margin.top;\n break;\n case 'Bottom':\n y += parentSize.height - childSize.height - child.margin.bottom;\n break;\n case 'Stretch':\n case 'Center':\n y += parentSize.height / 2 - childSize.height / 2;\n break;\n }\n return { x: x, y: y };\n };\n /**\n * Aligns the child elements based on a point\n * @param child\n * @param x\n * @param y\n */\n Canvas.prototype.alignChildBasedOnaPoint = function (child, x, y, childSize) {\n x += child.margin.left - child.margin.right;\n y += child.margin.top - child.margin.bottom;\n switch (child.horizontalAlignment) {\n case 'Auto':\n case 'Left':\n x = x;\n break;\n case 'Stretch':\n case 'Center':\n x -= childSize.width * child.pivot.x;\n break;\n case 'Right':\n x -= childSize.width;\n break;\n }\n switch (child.verticalAlignment) {\n case 'Auto':\n case 'Top':\n y = y;\n break;\n case 'Stretch':\n case 'Center':\n y -= childSize.height * child.pivot.y;\n break;\n case 'Bottom':\n y -= childSize.height;\n break;\n }\n return { x: x, y: y };\n };\n return Canvas;\n}(Container));\nexport { Canvas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { ShapeStyle, Margin } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { PortConstraints, PortVisibility } from '../enum/enum';\n/**\n * Defines the behavior of connection ports\n */\nvar Port = /** @class */ (function (_super) {\n __extends(Port, _super);\n function Port() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Port.prototype, \"id\", void 0);\n __decorate([\n Property('Center')\n ], Port.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], Port.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Port.prototype, \"margin\", void 0);\n __decorate([\n Property(12)\n ], Port.prototype, \"width\", void 0);\n __decorate([\n Property(12)\n ], Port.prototype, \"height\", void 0);\n __decorate([\n Complex({}, ShapeStyle)\n ], Port.prototype, \"style\", void 0);\n __decorate([\n Property('Square')\n ], Port.prototype, \"shape\", void 0);\n __decorate([\n Property(PortVisibility.Connect)\n ], Port.prototype, \"visibility\", void 0);\n __decorate([\n Property('')\n ], Port.prototype, \"pathData\", void 0);\n __decorate([\n Property(PortConstraints.None)\n ], Port.prototype, \"constraints\", void 0);\n __decorate([\n Property()\n ], Port.prototype, \"addInfo\", void 0);\n return Port;\n}(ChildProperty));\nexport { Port };\n/**\n * Defines the behavior of a port, that sticks to a point\n */\nvar PointPort = /** @class */ (function (_super) {\n __extends(PointPort, _super);\n // tslint:disable-next-line:no-any\n function PointPort(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], PointPort.prototype, \"offset\", void 0);\n return PointPort;\n}(Port));\nexport { PointPort };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { TextStyle, Margin } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { AnnotationConstraints } from '../enum/enum';\n/**\n * Defines the hyperlink for the annotations in the nodes/connectors\n */\nvar Hyperlink = /** @class */ (function (_super) {\n __extends(Hyperlink, _super);\n function Hyperlink() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('blue')\n ], Hyperlink.prototype, \"color\", void 0);\n __decorate([\n Property('')\n ], Hyperlink.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], Hyperlink.prototype, \"link\", void 0);\n __decorate([\n Property('None')\n ], Hyperlink.prototype, \"textDecoration\", void 0);\n return Hyperlink;\n}(ChildProperty));\nexport { Hyperlink };\n/**\n * Defines the textual description of nodes/connectors\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(true)\n ], Annotation.prototype, \"visibility\", void 0);\n __decorate([\n Property(AnnotationConstraints.InheritReadOnly)\n ], Annotation.prototype, \"constraints\", void 0);\n __decorate([\n Complex(undefined, Hyperlink)\n ], Annotation.prototype, \"hyperlink\", void 0);\n __decorate([\n Property('')\n ], Annotation.prototype, \"id\", void 0);\n __decorate([\n Property()\n ], Annotation.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], Annotation.prototype, \"height\", void 0);\n __decorate([\n Property(0)\n ], Annotation.prototype, \"rotateAngle\", void 0);\n __decorate([\n Complex({ strokeWidth: 0, strokeColor: 'transparent', fill: 'transparent' }, TextStyle)\n ], Annotation.prototype, \"style\", void 0);\n __decorate([\n Property('Center')\n ], Annotation.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], Annotation.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Annotation.prototype, \"margin\", void 0);\n __decorate([\n Property('Shape')\n ], Annotation.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Annotation.prototype, \"addInfo\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Defines the textual description of nodes/connectors with respect to bounds\n */\nvar ShapeAnnotation = /** @class */ (function (_super) {\n __extends(ShapeAnnotation, _super);\n // tslint:disable-next-line:no-any\n function ShapeAnnotation(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], ShapeAnnotation.prototype, \"offset\", void 0);\n return ShapeAnnotation;\n}(Annotation));\nexport { ShapeAnnotation };\n/**\n * Defines the connector annotation\n */\nvar PathAnnotation = /** @class */ (function (_super) {\n __extends(PathAnnotation, _super);\n // tslint:disable-next-line:no-any\n function PathAnnotation(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Property(0.5)\n ], PathAnnotation.prototype, \"offset\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], PathAnnotation.prototype, \"displacement\", void 0);\n __decorate([\n Property('Center')\n ], PathAnnotation.prototype, \"alignment\", void 0);\n __decorate([\n Property(false)\n ], PathAnnotation.prototype, \"segmentAngle\", void 0);\n return PathAnnotation;\n}(Annotation));\nexport { PathAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { Margin } from '../core/appearance';\nimport { Point } from '../primitives/point';\n/**\n * Defines the behavior of default IconShapes\n */\nvar IconShape = /** @class */ (function (_super) {\n __extends(IconShape, _super);\n function IconShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], IconShape.prototype, \"shape\", void 0);\n __decorate([\n Property('white')\n ], IconShape.prototype, \"fill\", void 0);\n __decorate([\n Property('Auto')\n ], IconShape.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Auto')\n ], IconShape.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(10)\n ], IconShape.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], IconShape.prototype, \"height\", void 0);\n __decorate([\n Complex({ x: 0.5, y: 1 }, Point)\n ], IconShape.prototype, \"offset\", void 0);\n __decorate([\n Property('#1a1a1a')\n ], IconShape.prototype, \"borderColor\", void 0);\n __decorate([\n Property(1)\n ], IconShape.prototype, \"borderWidth\", void 0);\n __decorate([\n Complex({}, Margin)\n ], IconShape.prototype, \"margin\", void 0);\n __decorate([\n Property('')\n ], IconShape.prototype, \"pathData\", void 0);\n __decorate([\n Property('')\n ], IconShape.prototype, \"content\", void 0);\n __decorate([\n Property(0)\n ], IconShape.prototype, \"cornerRadius\", void 0);\n __decorate([\n Complex({ left: 2, right: 2, top: 2, bottom: 2 }, Margin)\n ], IconShape.prototype, \"padding\", void 0);\n return IconShape;\n}(ChildProperty));\nexport { IconShape };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { Margin } from '../core/appearance';\nimport { IconShape } from './icon';\nimport { DiagramTooltip } from './tooltip';\nimport { PointPort } from './port';\n/**\n * Defines the common behavior of nodes, connectors and groups\n */\nvar NodeBase = /** @class */ (function (_super) {\n __extends(NodeBase, _super);\n function NodeBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], NodeBase.prototype, \"id\", void 0);\n __decorate([\n Property(-1)\n ], NodeBase.prototype, \"zIndex\", void 0);\n __decorate([\n Complex({}, Margin)\n ], NodeBase.prototype, \"margin\", void 0);\n __decorate([\n Property(true)\n ], NodeBase.prototype, \"visible\", void 0);\n __decorate([\n Collection([], PointPort)\n ], NodeBase.prototype, \"ports\", void 0);\n __decorate([\n Property(true)\n ], NodeBase.prototype, \"isExpanded\", void 0);\n __decorate([\n Complex({}, DiagramTooltip)\n ], NodeBase.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, IconShape)\n ], NodeBase.prototype, \"expandIcon\", void 0);\n __decorate([\n Complex({}, IconShape)\n ], NodeBase.prototype, \"collapseIcon\", void 0);\n __decorate([\n Property(false)\n ], NodeBase.prototype, \"excludeFromLayout\", void 0);\n __decorate([\n Property()\n ], NodeBase.prototype, \"addInfo\", void 0);\n return NodeBase;\n}(ChildProperty));\nexport { NodeBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, Complex } from '@syncfusion/ej2-base';\nimport { Container } from '../core/containers/container';\nimport { Node } from '../objects/node';\nimport { Connector } from '../objects/connector';\nimport { Point } from '../primitives/point';\nimport { Size } from '../primitives/size';\nimport { SelectorConstraints } from '../enum/enum';\nimport { Margin } from '../core/appearance';\n/**\n * A collection of frequently used commands that will be added around the selector\n * ```html\n *
    \n * ```\n * ```typescript\n * let nodes: NodeModel[] = [{\n * id: 'node1', width: 100, height: 100, offsetX: 100, offsetY: 100,\n * annotations: [{ content: 'Default Shape' }]\n * },\n * {\n * id: 'node2', width: 100, height: 100, offsetX: 300, offsetY: 100,\n * shape: {\n * type: 'Basic', shape: 'Ellipse'\n * },\n * annotations: [{ content: 'Path Element' }]\n * }\n * ];\n * let connectors: ConnectorModel[] = [{\n * id: 'connector1',\n * type: 'Straight',\n * sourcePoint: { x: 100, y: 300 },\n * targetPoint: { x: 200, y: 400 },\n * }];\n * let handle: UserHandleModel[] = [\n * { name: 'handle', margin: { top: 0, bottom: 0, left: 0, right: 0 }, offset: 0,\n * pathData: 'M 376.892,225.284L 371.279,211.95L 376.892,198.617L 350.225,211.95L 376.892,225.284 Z',\n * side: 'Top', horizontalAlignment: 'Center', verticalAlignment: 'Center',\n * pathColor: 'yellow' }];\n * let diagram: Diagram = new Diagram({\n * ...\n * connectors: connectors, nodes: nodes,\n * selectedItems: { constraints: SelectorConstraints.All, userHandles: handle },\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n * @default {}\n */\nvar UserHandle = /** @class */ (function (_super) {\n __extends(UserHandle, _super);\n function UserHandle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UserHandle.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], UserHandle.prototype, \"pathData\", void 0);\n __decorate([\n Property('#000000')\n ], UserHandle.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('top')\n ], UserHandle.prototype, \"side\", void 0);\n __decorate([\n Property('')\n ], UserHandle.prototype, \"borderColor\", void 0);\n __decorate([\n Property(0.5)\n ], UserHandle.prototype, \"borderWidth\", void 0);\n __decorate([\n Property(25)\n ], UserHandle.prototype, \"size\", void 0);\n __decorate([\n Property('white')\n ], UserHandle.prototype, \"pathColor\", void 0);\n __decorate([\n Property(10)\n ], UserHandle.prototype, \"displacement\", void 0);\n __decorate([\n Property(true)\n ], UserHandle.prototype, \"visible\", void 0);\n __decorate([\n Property(0)\n ], UserHandle.prototype, \"offset\", void 0);\n __decorate([\n Complex({}, Margin)\n ], UserHandle.prototype, \"margin\", void 0);\n __decorate([\n Property('Center')\n ], UserHandle.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], UserHandle.prototype, \"verticalAlignment\", void 0);\n return UserHandle;\n}(ChildProperty));\nexport { UserHandle };\n/**\n * Defines the size and position of selected items and defines the appearance of selector\n */\nvar Selector = /** @class */ (function (_super) {\n __extends(Selector, _super);\n function Selector() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the UI of the container\n */\n Selector.prototype.init = function (diagram) {\n var container = new Container();\n container.measureChildren = false;\n var consize = new Size();\n container.children = [];\n if (this.annotation) {\n var object = (this.nodes.length > 0) ? diagram.nameTable[this.nodes[0].id].wrapper :\n diagram.nameTable[this.connectors[0].id].wrapper;\n var wrapper = diagram.getWrapper(object, this.annotation.id);\n container.children.push(wrapper);\n }\n else {\n if (this.nodes || this.connectors) {\n for (var i = 0; i < this.nodes.length; i++) {\n var node = diagram.nameTable[this.nodes[i].id];\n var wrapper = node.wrapper;\n // this.width = wrapper.actualSize.width; \n // this.height = wrapper.actualSize.height;\n // this.rotateAngle = wrapper.rotateAngle;\n // this.offsetX = wrapper.offsetX;\n // this.offsetY = wrapper.offsetY;\n container.children.push(wrapper);\n }\n for (var j = 0; j < this.connectors.length; j++) {\n var connector = diagram.nameTable[this.connectors[j].id];\n var wrapper = connector.wrapper;\n // this.width = wrapper.actualSize.width; this.height = wrapper.actualSize.height;\n // this.rotateAngle = wrapper.rotateAngle; this.offsetX = wrapper.offsetX;\n // this.offsetY = wrapper.offsetY;\n container.children.push(wrapper);\n }\n }\n }\n this.wrapper = container;\n return container;\n };\n __decorate([\n Property(null)\n ], Selector.prototype, \"wrapper\", void 0);\n __decorate([\n Collection([], Node)\n ], Selector.prototype, \"nodes\", void 0);\n __decorate([\n Collection([], Connector)\n ], Selector.prototype, \"connectors\", void 0);\n __decorate([\n Property()\n ], Selector.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], Selector.prototype, \"height\", void 0);\n __decorate([\n Property(0)\n ], Selector.prototype, \"rotateAngle\", void 0);\n __decorate([\n Property(0)\n ], Selector.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Selector.prototype, \"offsetY\", void 0);\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], Selector.prototype, \"pivot\", void 0);\n __decorate([\n Property('CompleteIntersect')\n ], Selector.prototype, \"rubberBandSelectionMode\", void 0);\n __decorate([\n Collection([], UserHandle)\n ], Selector.prototype, \"userHandles\", void 0);\n __decorate([\n Property(SelectorConstraints.All)\n ], Selector.prototype, \"constraints\", void 0);\n return Selector;\n}(ChildProperty));\nexport { Selector };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DiagramElement } from './diagram-element';\nimport { getContent } from '../../utility/dom-util';\n/**\n * HTMLElement defines the basic html elements\n */\nvar DiagramHtmlElement = /** @class */ (function (_super) {\n __extends(DiagramHtmlElement, _super);\n /**\n * set the id for each element\n */\n function DiagramHtmlElement(nodeId, diagramId) {\n var _this = _super.call(this) || this;\n _this.data = '';\n _this.nodeId = '';\n _this.diagramId = '';\n _this.diagramId = diagramId;\n _this.nodeId = nodeId;\n return _this;\n }\n Object.defineProperty(DiagramHtmlElement.prototype, \"content\", {\n /**\n * Gets or sets the geometry of the html element\n */\n get: function () {\n return this.data;\n },\n set: function (value) {\n this.data = value;\n this.template = getContent(this, true);\n this.isDirt = true;\n },\n enumerable: true,\n configurable: true\n });\n return DiagramHtmlElement;\n}(DiagramElement));\nexport { DiagramHtmlElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, Collection, ChildProperty, ComplexFactory } from '@syncfusion/ej2-base';\nimport { Margin, TextStyle, Shadow } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { Size } from '../primitives/size';\nimport { Container } from '../core/containers/container';\nimport { Canvas } from '../core/containers/canvas';\nimport { getBasicShape } from './dictionary/basic-shapes';\nimport { DiagramElement } from '../core/elements/diagram-element';\nimport { PathElement } from '../core/elements/path-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { ImageElement } from '../core/elements/image-element';\nimport { DiagramNativeElement } from '../core/elements/native-element';\nimport { PointPort } from './port';\nimport { ShapeAnnotation } from './annotation';\nimport { getPortShape, getIconShape } from './dictionary/common';\nimport { getFlowShape } from './dictionary/flow-shapes';\nimport { NodeConstraints } from '../enum/enum';\nimport { checkPortRestriction } from './../utility/diagram-util';\nimport { randomId, getFunction } from './../utility/base-util';\nimport { NodeBase } from './node-base';\nimport { canShadow } from './../utility/constraints-util';\nimport { PortVisibility } from '../enum/enum';\nimport { measurePath } from './../utility/dom-util';\nimport { getPolygonPath } from './../utility/path-util';\nimport { DiagramHtmlElement } from '../core/elements/html-element';\nvar getShapeType = function (obj) {\n switch (obj.type) {\n case 'Basic':\n return BasicShape;\n case 'Flow':\n return FlowShape;\n case 'Path':\n return Path;\n case 'Image':\n return Image;\n case 'Text':\n return Text;\n case 'Bpmn':\n return BpmnShape;\n case 'Native':\n return Native;\n case 'HTML':\n return Html;\n default:\n return BasicShape;\n }\n};\n/**\n * Defines the behavior of default shape\n */\nvar Shape = /** @class */ (function (_super) {\n __extends(Shape, _super);\n function Shape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Basic')\n ], Shape.prototype, \"type\", void 0);\n return Shape;\n}(ChildProperty));\nexport { Shape };\n/**\n * Defines the behavior of path shape\n */\nvar Path = /** @class */ (function (_super) {\n __extends(Path, _super);\n function Path() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Path')\n ], Path.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Path.prototype, \"data\", void 0);\n return Path;\n}(Shape));\nexport { Path };\n/**\n * Defines the behavior of Native shape\n */\nvar Native = /** @class */ (function (_super) {\n __extends(Native, _super);\n function Native() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Native')\n ], Native.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Native.prototype, \"content\", void 0);\n __decorate([\n Property('Stretch')\n ], Native.prototype, \"scale\", void 0);\n return Native;\n}(Shape));\nexport { Native };\n/**\n * Defines the behavior of html shape\n */\nvar Html = /** @class */ (function (_super) {\n __extends(Html, _super);\n function Html() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('HTML')\n ], Html.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Html.prototype, \"content\", void 0);\n return Html;\n}(Shape));\nexport { Html };\n/**\n * Defines the behavior of image shape\n */\nvar Image = /** @class */ (function (_super) {\n __extends(Image, _super);\n function Image() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Image')\n ], Image.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Image.prototype, \"source\", void 0);\n __decorate([\n Property('')\n ], Image.prototype, \"scale\", void 0);\n __decorate([\n Property('None')\n ], Image.prototype, \"align\", void 0);\n return Image;\n}(Shape));\nexport { Image };\n/**\n * Defines the behavior of the text shape\n */\nvar Text = /** @class */ (function (_super) {\n __extends(Text, _super);\n function Text() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Text')\n ], Text.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Text.prototype, \"content\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Text.prototype, \"margin\", void 0);\n return Text;\n}(Shape));\nexport { Text };\n/**\n * Defines the behavior of the basic shape\n */\nvar BasicShape = /** @class */ (function (_super) {\n __extends(BasicShape, _super);\n function BasicShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Basic')\n ], BasicShape.prototype, \"type\", void 0);\n __decorate([\n Property('Rectangle')\n ], BasicShape.prototype, \"shape\", void 0);\n __decorate([\n Property(0)\n ], BasicShape.prototype, \"cornerRadius\", void 0);\n __decorate([\n Collection([], Point)\n ], BasicShape.prototype, \"points\", void 0);\n return BasicShape;\n}(Shape));\nexport { BasicShape };\n/**\n * Defines the behavior of the flow shape\n */\nvar FlowShape = /** @class */ (function (_super) {\n __extends(FlowShape, _super);\n function FlowShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Flow')\n ], FlowShape.prototype, \"type\", void 0);\n __decorate([\n Property('Terminator')\n ], FlowShape.prototype, \"shape\", void 0);\n return FlowShape;\n}(Shape));\nexport { FlowShape };\n/**\n * Defines the behavior of the bpmn gateway shape\n */\nvar BpmnGateway = /** @class */ (function (_super) {\n __extends(BpmnGateway, _super);\n function BpmnGateway() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnGateway.prototype, \"type\", void 0);\n return BpmnGateway;\n}(ChildProperty));\nexport { BpmnGateway };\n/**\n * Defines the behavior of the bpmn data object\n */\nvar BpmnDataObject = /** @class */ (function (_super) {\n __extends(BpmnDataObject, _super);\n function BpmnDataObject() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnDataObject.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], BpmnDataObject.prototype, \"collection\", void 0);\n return BpmnDataObject;\n}(ChildProperty));\nexport { BpmnDataObject };\n/**\n * Defines the behavior of the bpmn task shape\n */\nvar BpmnTask = /** @class */ (function (_super) {\n __extends(BpmnTask, _super);\n function BpmnTask() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnTask.prototype, \"type\", void 0);\n __decorate([\n Property('None')\n ], BpmnTask.prototype, \"loop\", void 0);\n __decorate([\n Property(false)\n ], BpmnTask.prototype, \"call\", void 0);\n __decorate([\n Property(false)\n ], BpmnTask.prototype, \"compensation\", void 0);\n return BpmnTask;\n}(ChildProperty));\nexport { BpmnTask };\n/**\n * Defines the behavior of the bpmn Event shape\n */\nvar BpmnEvent = /** @class */ (function (_super) {\n __extends(BpmnEvent, _super);\n function BpmnEvent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Start')\n ], BpmnEvent.prototype, \"event\", void 0);\n __decorate([\n Property('None')\n ], BpmnEvent.prototype, \"trigger\", void 0);\n return BpmnEvent;\n}(ChildProperty));\nexport { BpmnEvent };\n/**\n * Defines the behavior of the bpmn sub event\n */\nvar BpmnSubEvent = /** @class */ (function (_super) {\n __extends(BpmnSubEvent, _super);\n function BpmnSubEvent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnSubEvent.prototype, \"trigger\", void 0);\n __decorate([\n Property('Start')\n ], BpmnSubEvent.prototype, \"event\", void 0);\n __decorate([\n Property('')\n ], BpmnSubEvent.prototype, \"id\", void 0);\n __decorate([\n Complex({}, Point)\n ], BpmnSubEvent.prototype, \"offset\", void 0);\n __decorate([\n Collection([], ShapeAnnotation)\n ], BpmnSubEvent.prototype, \"annotations\", void 0);\n __decorate([\n Collection([], PointPort)\n ], BpmnSubEvent.prototype, \"ports\", void 0);\n __decorate([\n Property()\n ], BpmnSubEvent.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], BpmnSubEvent.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Margin)\n ], BpmnSubEvent.prototype, \"margin\", void 0);\n __decorate([\n Property('Center')\n ], BpmnSubEvent.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], BpmnSubEvent.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(true)\n ], BpmnSubEvent.prototype, \"visible\", void 0);\n return BpmnSubEvent;\n}(ChildProperty));\nexport { BpmnSubEvent };\nvar BpmnTransactionSubProcess = /** @class */ (function (_super) {\n __extends(BpmnTransactionSubProcess, _super);\n function BpmnTransactionSubProcess() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ id: 'success', event: 'End', offset: { x: 1, y: 0.5 } }, BpmnSubEvent)\n ], BpmnTransactionSubProcess.prototype, \"success\", void 0);\n __decorate([\n Complex({ id: 'failure', event: 'Intermediate', trigger: 'Error', offset: { x: 0.25, y: 1 } }, BpmnSubEvent)\n ], BpmnTransactionSubProcess.prototype, \"failure\", void 0);\n __decorate([\n Complex({ id: 'cancel', event: 'Intermediate', trigger: 'Cancel', offset: { x: 0.75, y: 1 } }, BpmnSubEvent)\n ], BpmnTransactionSubProcess.prototype, \"cancel\", void 0);\n return BpmnTransactionSubProcess;\n}(ChildProperty));\nexport { BpmnTransactionSubProcess };\n/**\n * Defines the behavior of the BPMNSubProcess\n */\nvar BpmnSubProcess = /** @class */ (function (_super) {\n __extends(BpmnSubProcess, _super);\n function BpmnSubProcess() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnSubProcess.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], BpmnSubProcess.prototype, \"adhoc\", void 0);\n __decorate([\n Property('Default')\n ], BpmnSubProcess.prototype, \"boundary\", void 0);\n __decorate([\n Property(false)\n ], BpmnSubProcess.prototype, \"compensation\", void 0);\n __decorate([\n Property('None')\n ], BpmnSubProcess.prototype, \"loop\", void 0);\n __decorate([\n Property(true)\n ], BpmnSubProcess.prototype, \"collapsed\", void 0);\n __decorate([\n Collection([], BpmnSubEvent)\n ], BpmnSubProcess.prototype, \"events\", void 0);\n __decorate([\n Complex({}, BpmnTransactionSubProcess)\n ], BpmnSubProcess.prototype, \"transaction\", void 0);\n __decorate([\n Property(undefined)\n ], BpmnSubProcess.prototype, \"processes\", void 0);\n return BpmnSubProcess;\n}(ChildProperty));\nexport { BpmnSubProcess };\n/**\n * Defines the behavior of the bpmn activity shape\n */\nvar BpmnActivity = /** @class */ (function (_super) {\n __extends(BpmnActivity, _super);\n function BpmnActivity() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Task')\n ], BpmnActivity.prototype, \"activity\", void 0);\n __decorate([\n Complex({}, BpmnTask)\n ], BpmnActivity.prototype, \"task\", void 0);\n __decorate([\n Complex({}, BpmnSubProcess)\n ], BpmnActivity.prototype, \"subProcess\", void 0);\n return BpmnActivity;\n}(ChildProperty));\nexport { BpmnActivity };\n/**\n * Defines the behavior of the bpmn annotation\n */\nvar BpmnAnnotation = /** @class */ (function (_super) {\n __extends(BpmnAnnotation, _super);\n // tslint:disable-next-line:no-any\n function BpmnAnnotation(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Property('')\n ], BpmnAnnotation.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BpmnAnnotation.prototype, \"id\", void 0);\n __decorate([\n Property(0)\n ], BpmnAnnotation.prototype, \"angle\", void 0);\n __decorate([\n Property()\n ], BpmnAnnotation.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], BpmnAnnotation.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], BpmnAnnotation.prototype, \"length\", void 0);\n return BpmnAnnotation;\n}(ChildProperty));\nexport { BpmnAnnotation };\n/**\n * Defines the behavior of the bpmn shape\n */\nvar BpmnShape = /** @class */ (function (_super) {\n __extends(BpmnShape, _super);\n function BpmnShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Bpmn')\n ], BpmnShape.prototype, \"type\", void 0);\n __decorate([\n Property('Event')\n ], BpmnShape.prototype, \"shape\", void 0);\n __decorate([\n Complex({}, BpmnEvent)\n ], BpmnShape.prototype, \"event\", void 0);\n __decorate([\n Complex({}, BpmnGateway)\n ], BpmnShape.prototype, \"gateway\", void 0);\n __decorate([\n Complex({}, BpmnDataObject)\n ], BpmnShape.prototype, \"dataObject\", void 0);\n __decorate([\n Complex({}, BpmnActivity)\n ], BpmnShape.prototype, \"activity\", void 0);\n __decorate([\n Complex({}, BpmnAnnotation)\n ], BpmnShape.prototype, \"annotation\", void 0);\n __decorate([\n Collection([], BpmnAnnotation)\n ], BpmnShape.prototype, \"annotations\", void 0);\n return BpmnShape;\n}(Shape));\nexport { BpmnShape };\n/**\n * Defines the behavior of nodes\n */\nvar Node = /** @class */ (function (_super) {\n __extends(Node, _super);\n // tslint:disable-next-line:no-any\n function Node(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n /** @private */\n _this.parentId = '';\n /** @private */\n _this.processId = '';\n /** @private */\n _this.outEdges = [];\n /** @private */\n _this.inEdges = [];\n if (_this.children && _this.children.length > 0) {\n var nodeDefault = defaultValue;\n if (!nodeDefault.style || !nodeDefault.style.fill) {\n _this.style.fill = 'transparent';\n }\n if (!nodeDefault.style || !nodeDefault.style.strokeColor) {\n _this.style.strokeColor = 'transparent';\n }\n }\n return _this;\n }\n Object.defineProperty(Node.prototype, \"actualSize\", {\n /** @private */\n get: function () {\n if (this.wrapper !== null) {\n return this.wrapper.actualSize;\n }\n else {\n return new Size(this.width || 0, this.height || 0);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Allows to initialize the UI of a node\n */\n /** @private */\n /* tslint:disable */\n Node.prototype.init = function (diagram) {\n var content = new DiagramElement();\n var textStyle;\n var changedProperties = 'changedProperties';\n var oldProperties = 'oldProperties';\n this.shape[changedProperties] = {};\n this.shape[oldProperties] = {};\n switch (this.shape.type) {\n case 'Path':\n var pathContent = new PathElement();\n pathContent.data = this.shape.data;\n content = pathContent;\n break;\n case 'Image':\n var imageContent = new ImageElement();\n imageContent.source = this.shape.source;\n imageContent.imageAlign = this.shape.align;\n imageContent.imageScale = this.shape.scale;\n content = imageContent;\n break;\n case 'Text':\n var textContent = new TextElement();\n textContent.content = this.shape.content;\n content = textContent;\n textStyle = this.style;\n content.style = textStyle;\n break;\n case 'Basic':\n if (this.shape.shape === 'Rectangle') {\n var basicshape = new DiagramElement();\n content = basicshape;\n content.cornerRadius = this.shape.cornerRadius;\n }\n else if (this.shape.shape === 'Polygon') {\n var path = new PathElement();\n path.data = getPolygonPath(this.shape.points);\n content = path;\n }\n else {\n var basicshape = new PathElement();\n var basicshapedata = getBasicShape(this.shape.shape);\n basicshape.data = basicshapedata;\n content = basicshape;\n }\n break;\n case 'Flow':\n var flowshape = new PathElement();\n var flowshapedata = getFlowShape(this.shape.shape);\n flowshape.data = flowshapedata;\n content = flowshape;\n break;\n case 'Bpmn':\n if (diagram.bpmnModule) {\n content = diagram.bpmnModule.initBPMNContent(content, this, diagram);\n var subProcess = this.shape.activity.subProcess;\n if (subProcess.processes && subProcess.processes.length) {\n var children = this.shape.activity.subProcess.processes;\n for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n var i = children_1[_i];\n if (diagram.nameTable[i] && (!diagram.nameTable[i].processId || diagram.nameTable[i].processId === this.id)) {\n diagram.nameTable[i].processId = this.id;\n if (subProcess.collapsed) {\n diagram.updateElementVisibility(diagram.nameTable[i].wrapper, diagram.nameTable[i], !subProcess.collapsed);\n }\n content.children.push(diagram.nameTable[i].wrapper);\n }\n }\n }\n }\n break;\n case 'Native':\n var nativeContent = new DiagramNativeElement(this.id, diagram.element.id);\n nativeContent.content = this.shape.content;\n nativeContent.scale = this.shape.scale;\n content = nativeContent;\n break;\n case 'HTML':\n var htmlContent = new DiagramHtmlElement(this.id, diagram.element.id);\n htmlContent.content = this.shape.content;\n content = htmlContent;\n break;\n }\n content.id = this.id + '_content';\n content.relativeMode = 'Object';\n if (this.width !== undefined) {\n content.width = this.width;\n }\n content.horizontalAlignment = 'Stretch';\n if (this.height !== undefined) {\n content.height = this.height;\n }\n if (this.minHeight !== undefined) {\n content.minHeight = this.minHeight;\n }\n if (this.maxHeight !== undefined) {\n content.maxHeight = this.maxHeight;\n }\n if (this.minWidth !== undefined) {\n content.minWidth = this.minWidth;\n }\n if (this.maxWidth !== undefined) {\n content.maxWidth = this.maxWidth;\n }\n if (this.shape.shape === 'Rectangle' && !this.shape.cornerRadius) {\n content.isRectElement = true;\n }\n content.verticalAlignment = 'Stretch';\n if (this.shape instanceof Text) {\n content.margin = this.shape.margin;\n }\n if (canShadow(this)) {\n if ((this.constraints & NodeConstraints.Shadow) !== 0) {\n content.shadow = this.shadow;\n }\n }\n if (this.shape.type !== 'Bpmn' || this.shape.shape === 'Message' ||\n this.shape.shape === 'DataSource') {\n if (this.shape.type !== 'Text') {\n content.style = this.style;\n }\n }\n return content;\n };\n /* tslint:enable */\n /** @private */\n Node.prototype.initContainer = function () {\n if (!this.id) {\n this.id = randomId();\n }\n // Creates canvas element\n var canvas = this.children ? new Container() : new Canvas();\n canvas.id = this.id;\n canvas.offsetX = this.offsetX;\n canvas.offsetY = this.offsetY;\n canvas.visible = this.visible;\n canvas.style.fill = this.backgroundColor;\n canvas.style.strokeColor = this.borderColor;\n canvas.style.strokeWidth = this.borderWidth;\n canvas.rotateAngle = this.rotateAngle;\n canvas.minHeight = this.minHeight;\n canvas.minWidth = this.minWidth;\n canvas.maxHeight = this.maxHeight;\n canvas.maxWidth = this.maxWidth;\n canvas.pivot = this.pivot;\n canvas.margin = this.margin;\n this.wrapper = canvas;\n return canvas;\n };\n /** @private */\n Node.prototype.initPorts = function (accessibilityContent, container) {\n var canvas = this.wrapper;\n var port;\n for (var i = 0; this.ports !== undefined, i < this.ports.length; i++) {\n port = this.initPortWrapper(this.ports[i]);\n // tslint:disable-next-line:no-any\n var wrapperContent = void 0;\n var contentAccessibility = getFunction(accessibilityContent);\n if (contentAccessibility) {\n wrapperContent = contentAccessibility(port, this);\n }\n port.description = wrapperContent ? wrapperContent : port.id;\n container.children.push(port);\n }\n };\n Node.prototype.getIconOffet = function (layout, icon) {\n var x;\n var y;\n if (layout.orientation === 'BottomToTop') {\n x = icon.offset.x;\n y = 1 - icon.offset.y;\n }\n else if (layout.orientation === 'LeftToRight') {\n x = icon.offset.y;\n y = icon.offset.x;\n }\n else if (layout.orientation === 'RightToLeft') {\n x = 1 - icon.offset.y;\n y = icon.offset.x;\n }\n else {\n x = icon.offset.x;\n y = icon.offset.y;\n }\n return { x: x, y: y };\n };\n /** @private */\n Node.prototype.initIcons = function (accessibilityContent, layout, container, diagramId) {\n var canvas = this.wrapper;\n var offset;\n var icon = this.isExpanded ? this.expandIcon : this.collapseIcon;\n if (icon.shape !== 'None') {\n var iconContainer = new Canvas();\n iconContainer.float = true;\n var children = [];\n iconContainer.id = this.id + '_icon_content';\n iconContainer.children = children;\n iconContainer.height = icon.height;\n iconContainer.width = icon.width;\n iconContainer.style.strokeColor = 'transparent';\n iconContainer.margin = icon.margin;\n iconContainer.horizontalAlignment = 'Center';\n iconContainer.verticalAlignment = 'Center';\n iconContainer.visible = this.visible;\n offset = this.getIconOffet(layout, icon);\n iconContainer.setOffsetWithRespectToBounds(offset.x, offset.y, 'Fraction');\n iconContainer.relativeMode = 'Point';\n this.initIconSymbol(icon, iconContainer, accessibilityContent, diagramId);\n // tslint:disable-next-line:no-any\n var wrapperContent = void 0;\n var contentAccessibility = getFunction(accessibilityContent);\n if (contentAccessibility) {\n wrapperContent = contentAccessibility(icon, this);\n }\n iconContainer.description = wrapperContent ? wrapperContent : iconContainer.id;\n container.children.push(iconContainer);\n }\n };\n /** @private */\n Node.prototype.initAnnotations = function (accessibilityContent, container) {\n var annotation;\n for (var i = 0; this.annotations !== undefined, i < this.annotations.length; i++) {\n annotation = this.initAnnotationWrapper(this.annotations[i]);\n // tslint:disable-next-line:no-any\n var wrapperContent = void 0;\n var contentAccessibility = getFunction(accessibilityContent);\n if (contentAccessibility) {\n wrapperContent = contentAccessibility(annotation, this);\n }\n annotation.description = wrapperContent ? wrapperContent : annotation.id;\n container.children.push(annotation);\n }\n };\n /** @private */\n Node.prototype.initPortWrapper = function (ports) {\n ports.id = ports.id || randomId();\n // Creates port element\n var portContent = new PathElement();\n portContent.height = ports.height;\n portContent.width = ports.width;\n var pathdata = (ports.shape === 'Custom') ? ports.pathData : getPortShape(ports.shape);\n portContent.id = this.id + '_' + (ports.id);\n portContent.margin = ports.margin;\n portContent.data = pathdata;\n var style = ports.style;\n portContent.style = {\n fill: style.fill, strokeColor: style.strokeColor, gradient: null,\n opacity: style.opacity, strokeDashArray: style.strokeDashArray, strokeWidth: style.strokeWidth\n };\n portContent.horizontalAlignment = ports.horizontalAlignment;\n portContent.verticalAlignment = ports.verticalAlignment;\n portContent.setOffsetWithRespectToBounds(ports.offset.x, ports.offset.y, 'Fraction');\n if (this.width !== undefined || this.height !== undefined) {\n portContent.float = true;\n }\n portContent.relativeMode = 'Point';\n portContent.visible = checkPortRestriction(ports, PortVisibility.Visible) &&\n !checkPortRestriction(ports, PortVisibility.Hover) && !checkPortRestriction(ports, PortVisibility.Connect) ? true : false;\n return portContent;\n };\n /** @private */\n Node.prototype.initAnnotationWrapper = function (annotation) {\n annotation.id = annotation.id || randomId();\n var label = annotation;\n var annotationcontent = new TextElement();\n annotationcontent.constraints = annotation.constraints;\n annotationcontent.height = annotation.height;\n annotationcontent.width = annotation.width;\n annotationcontent.visible = annotation.visibility;\n annotationcontent.rotateAngle = annotation.rotateAngle;\n annotationcontent.id = this.id + '_' + annotation.id;\n var style = annotation.style;\n var link = annotation.hyperlink.link ? annotation.hyperlink : undefined;\n annotationcontent.style = {\n fill: style.fill, strokeColor: style.strokeColor, strokeWidth: style.strokeWidth,\n bold: style.bold, textWrapping: style.textWrapping,\n color: link ? link.color || annotationcontent.hyperlink.color : style.color, whiteSpace: style.whiteSpace,\n fontFamily: style.fontFamily, fontSize: style.fontSize, italic: style.italic, gradient: null, opacity: style.opacity,\n strokeDashArray: style.strokeDashArray, textAlign: style.textAlign, textOverflow: annotation.style.textOverflow,\n textDecoration: link ? link.textDecoration || annotationcontent.hyperlink.textDecoration : style.textDecoration,\n };\n annotationcontent.hyperlink.link = annotation.hyperlink.link || undefined;\n annotationcontent.hyperlink.content = annotation.hyperlink.content || undefined;\n annotationcontent.hyperlink.textDecoration = annotation.hyperlink.textDecoration || undefined;\n annotationcontent.content = link ? link.content || annotationcontent.hyperlink.link : annotation.content;\n if (this.width !== undefined) {\n if (annotation.width === undefined || (annotation.width > this.width &&\n (annotation.style.textWrapping === 'Wrap' || annotation.style.textWrapping === 'WrapWithOverflow'))) {\n annotationcontent.width = this.width;\n }\n }\n annotationcontent.margin = annotation.margin;\n annotationcontent.horizontalAlignment = annotation.horizontalAlignment;\n annotationcontent.verticalAlignment = annotation.verticalAlignment;\n annotationcontent.setOffsetWithRespectToBounds(label.offset.x, label.offset.y, 'Fraction');\n if (this.width !== undefined || this.height !== undefined) {\n annotationcontent.float = true;\n }\n annotationcontent.relativeMode = 'Point';\n return annotationcontent;\n };\n Node.prototype.initIconContainer = function (options, iconContainer) {\n var rect = new DiagramElement();\n rect.id = iconContainer.id + '_rect';\n rect.height = options.height;\n rect.width = options.width;\n rect.visible = iconContainer.visible;\n rect.margin = options.margin;\n rect.cornerRadius = options.cornerRadius;\n rect.style = {\n fill: options.fill, strokeColor: options.borderColor,\n strokeWidth: options.borderWidth\n };\n rect.setOffsetWithRespectToBounds(0.5, 0.5, 'Fraction');\n rect.horizontalAlignment = 'Center';\n rect.verticalAlignment = 'Center';\n rect.relativeMode = 'Object';\n rect.description = rect.description || 'Click here to expand or collapse';\n return rect;\n };\n Node.prototype.initIconSymbol = function (options, iconContainer, accessibilityContent, diagramId) {\n var iconContent;\n iconContainer.children.push(this.initIconContainer(options, iconContainer));\n if (options.shape === 'Template') {\n iconContent = new DiagramNativeElement(this.id, diagramId);\n iconContent.content = options.content;\n iconContent.height = 10;\n iconContent.width = 10;\n }\n else {\n iconContent = new PathElement();\n iconContent.data = getIconShape(options);\n var iconContentBounds = measurePath(iconContent.data);\n iconContent.height =\n iconContentBounds.height < 10 ? iconContentBounds.height : 10 - (options.padding.bottom + options.padding.top);\n iconContent.width =\n iconContentBounds.width < 10 ? iconContentBounds.width : 10 - (options.padding.left + options.padding.right);\n }\n iconContent.id = iconContainer.id + '_shape';\n iconContent.horizontalAlignment = 'Center';\n iconContent.verticalAlignment = 'Center';\n iconContent.visible = iconContainer.visible;\n iconContent.visible = iconContainer.visible;\n iconContent.style = {\n fill: 'black', strokeColor: options.borderColor,\n strokeWidth: options.borderWidth\n };\n iconContent.setOffsetWithRespectToBounds(0.5, 0.5, 'Fraction');\n iconContent.relativeMode = 'Object';\n iconContent.description = iconContainer.description || 'Click here to expand or collapse';\n iconContainer.children.push(iconContent);\n };\n __decorate([\n Collection([], ShapeAnnotation)\n ], Node.prototype, \"annotations\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"offsetY\", void 0);\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], Node.prototype, \"pivot\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"minWidth\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"minHeight\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"maxWidth\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"maxHeight\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"rotateAngle\", void 0);\n __decorate([\n Complex({}, TextStyle)\n ], Node.prototype, \"style\", void 0);\n __decorate([\n Property('transparent')\n ], Node.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('none')\n ], Node.prototype, \"borderColor\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"borderWidth\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"data\", void 0);\n __decorate([\n ComplexFactory(getShapeType)\n ], Node.prototype, \"shape\", void 0);\n __decorate([\n Property(null)\n ], Node.prototype, \"wrapper\", void 0);\n __decorate([\n Property(NodeConstraints.Default)\n ], Node.prototype, \"constraints\", void 0);\n __decorate([\n Complex({}, Shadow)\n ], Node.prototype, \"shadow\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"children\", void 0);\n return Node;\n}(NodeBase));\nexport { Node };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 } from '@syncfusion/ej2-base';\nimport { createSvgElement, createHtmlElement, setAttributeSvg } from '../diagram/utility/dom-util';\nimport { Size } from '../diagram/primitives/size';\nimport { getFunction } from '../diagram/utility/base-util';\n/**\n * Represents the Ruler component that measures the Diagram objects, indicate positions, and align Diagram elements.\n * ```html\n *
    Show Ruler
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Ruler = /** @class */ (function (_super) {\n __extends(Ruler, _super);\n /**\n * Constructor for creating the Ruler Component\n */\n function Ruler(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.offset = 0;\n _this.scale = 1;\n return _this;\n }\n /**\n * Initializes the values of private members.\n * @private\n */\n Ruler.prototype.preRender = function () {\n this.unWireEvents();\n this.wireEvents();\n };\n /**\n * Renders the rulers.\n * @private\n */\n Ruler.prototype.render = function () {\n this.updateRulerGeometry();\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Ruler.prototype.getModuleName = function () {\n return 'Ruler';\n };\n /**\n * To destroy the ruler\n * @return {void}\n */\n Ruler.prototype.destroy = function () {\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-ruler');\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n Ruler.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Refreshes the ruler when the Ruler properties are updated\n * @param options\n */\n Ruler.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 'length':\n case 'interval':\n case 'segmentWidth':\n case 'tickAlignment':\n case 'markerColor':\n case 'thickness':\n this.updateRuler();\n break;\n }\n }\n };\n Ruler.prototype.updateRulerGeometry = function () {\n this.element.style.textAlign = 'left';\n this.renderRulerSpace();\n this.updateRuler();\n };\n Ruler.prototype.renderRulerSpace = function () {\n var rulerGeometry = this.getRulerGeometry();\n var div = document.getElementById(this.element.id + '_ruler_space');\n if (!div) {\n div = createHtmlElement('div', {\n 'id': this.element.id + '_ruler_space',\n 'style': 'height:' + rulerGeometry.height + 'px;width:' + rulerGeometry.width + 'px;cssFloat:' + 'left;'\n });\n this.element.appendChild(div);\n }\n return div;\n };\n Ruler.prototype.updateRuler = function () {\n var rulerSize = this.getRulerSize();\n var rulerGeometry = this.getRulerGeometry();\n var length = 0;\n var offset = 0;\n var availableSize = new Size();\n var svg = this.getRulerSVG(rulerGeometry);\n if (svg) {\n length = this.length;\n availableSize.height = rulerSize;\n offset = this.offset;\n if (length && length !== Infinity) {\n var unitLength = length + this.segmentWidth;\n var unitOffset = offset;\n this.updateSegments(unitOffset, (unitLength + Math.abs(unitOffset)), svg, rulerSize);\n }\n }\n };\n Ruler.prototype.updateSegments = function (start, end, svg, rulerSize) {\n var run = start;\n var trans = { trans: 0 };\n while (run < end) {\n var rulerSegment = this.getNewSegment(run, svg);\n if (rulerSegment) {\n svg.appendChild(rulerSegment.segment);\n run = this.updateSegment(start, end, rulerSegment, run, trans, rulerSize);\n }\n }\n };\n Ruler.prototype.updateSegment = function (start, end, rulerSegment, run, trans, rulerSize) {\n var segWidth = this.updateSegmentWidth(this.scale);\n if (run === start) {\n this.startValue = Math.floor(start / segWidth) * segWidth / this.scale;\n this.startValue = (this.startValue % 1) !== 0 ? Number((this.startValue).toFixed(1)) : this.startValue;\n rulerSegment.label.textContent = this.startValue.toString();\n this.defStartValue = run = this.startValue * this.scale;\n if (this.orientation === 'Horizontal') {\n this.hRulerOffset = start - run;\n }\n else {\n this.vRulerOffset = start - run;\n }\n }\n else {\n this.startValue = (run / this.scale);\n this.startValue = (this.startValue % 1) !== 0 ? Number((this.startValue).toFixed(1)) : this.startValue;\n rulerSegment.label.textContent = this.startValue.toString();\n }\n this.updateTickLabel(rulerSegment, rulerSize);\n var translate = (this.orientation === 'Horizontal') ? ((trans.trans + 0.5) + ',0.5') : ('0.5,' + (trans.trans + 0.5));\n rulerSegment.segment.setAttribute('transform', 'translate(' + translate + ')');\n trans.trans += segWidth;\n run += segWidth;\n return run;\n };\n Ruler.prototype.updateTickLabel = function (rulerSegment, rulerSize) {\n var bBox = rulerSegment.segment.lastChild.getBBox();\n var isHorizontal = (this.orientation === 'Horizontal') ? true : false;\n var isRightOrBottom = (this.tickAlignment === 'RightOrBottom') ? true : false;\n var x = isHorizontal ? 2 : 0;\n var y = isHorizontal ? (isRightOrBottom ? (rulerSize / 2 + (11 / 2) - (11 / 2)) :\n (rulerSize / 2 + (11 / 2))) : bBox.height;\n var translate = isRightOrBottom ? (-(bBox.width + 2) + ',' + ((rulerSize / 2) - bBox.height)) :\n (-(bBox.width + 2) + ',' + ((rulerSize / 2) - bBox.height / 2));\n var attr = isHorizontal ? { 'x': x, 'y': y } :\n { 'x': x, 'y': y, 'transform': 'rotate(270)' + 'translate(' + translate + ')' };\n setAttributeSvg(rulerSegment.segment.lastChild, attr);\n };\n Ruler.prototype.getNewSegment = function (run, svg) {\n var segment = this.createNewTicks(run, svg);\n var label = this.createTickLabel(svg, segment);\n return { segment: segment, label: label };\n };\n Ruler.prototype.createNewTicks = function (run, svg) {\n var tick;\n var tickInterval;\n var segmentWidth = this.updateSegmentWidth(this.scale);\n var g;\n var attr = { 'class': 'e-ruler-segment' };\n g = createSvgElement('g', attr);\n for (var i = 0; i < this.interval; i++) {\n tickInterval = segmentWidth / this.interval;\n tick = this.createTick(svg, tickInterval, i + 1, run);\n g.appendChild(tick);\n }\n return g;\n };\n Ruler.prototype.getLinePoint = function (svg, tickInterval, length) {\n var segmentWidth = this.updateSegmentWidth(this.scale);\n var rulerSize = this.getRulerSize();\n tickInterval = tickInterval * (length - 1);\n length = ((tickInterval % segmentWidth) === 0) ? rulerSize : rulerSize * 0.3;\n return length;\n };\n Ruler.prototype.createTick = function (svg, tickInterval, length, run) {\n var ruler;\n var line;\n var linePoint = this.getLinePoint(svg, tickInterval, length);\n var rulerSize = this.getRulerSize();\n var args;\n var attr;\n var isHorizontal = (this.orientation === 'Horizontal') ? true : false;\n var isRightOrBottom = (this.tickAlignment === 'RightOrBottom') ? true : false;\n var arrangeTick = getFunction(this.arrangeTick);\n args = { ruler: ruler, tickLength: linePoint, tickInterval: ((this.segmentWidth / this.interval) * (length - 1)) };\n if (arrangeTick) {\n arrangeTick(args);\n }\n linePoint = args.tickLength;\n var point = tickInterval * (length - 1);\n var x1 = isHorizontal ? point : (isRightOrBottom ? rulerSize : 0);\n var x2 = isHorizontal ? point : (isRightOrBottom ? (rulerSize - linePoint) : (rulerSize - (rulerSize - linePoint)));\n var y1 = isHorizontal ? (isRightOrBottom ? rulerSize : (rulerSize - (rulerSize - linePoint))) : point;\n var y2 = isHorizontal ? (isRightOrBottom ? (rulerSize - linePoint) : 0) : point;\n attr = { 'x1': x1, 'y1': y1, 'x2': x2, 'y2': y2, 'stroke-width': '1', 'stroke': 'black' };\n line = createSvgElement('line', attr);\n line.setAttribute('class', 'e-ruler-tick');\n return line;\n };\n Ruler.prototype.createTickLabel = function (svg, segment) {\n var text;\n if (segment) {\n var attr = { 'class': 'e-ruler-tick-label' };\n text = createSvgElement('text', attr);\n segment.appendChild(text);\n }\n return text;\n };\n /**\n * @private\n * @param scale\n */\n Ruler.prototype.updateSegmentWidth = function (scale) {\n if (this.segmentWidth !== 100) {\n return this.segmentWidth;\n }\n var five = 25;\n var multiples = 1;\n var div;\n var scaleRound;\n var fifty = 100;\n scaleRound = Math.pow(2, Math.round(Math.log(scale) / Math.log(2)));\n div = fifty;\n div = (fifty / scaleRound);\n while (div > 100) {\n multiples /= 10;\n div /= 10;\n }\n while (div < 25) {\n multiples *= 10;\n div *= 10;\n }\n if (div >= five && div % five !== 0) {\n div = Math.round(div / five) * five;\n }\n return div * scale / multiples;\n };\n Ruler.prototype.createMarkerLine = function (rulerSvg, rulerObj, attr) {\n var line;\n if (rulerObj) {\n line = rulerSvg.getElementById(rulerObj.id + '_marker');\n if (line) {\n line.parentNode.removeChild(line);\n }\n line = createSvgElement('line', attr);\n }\n return line;\n };\n /**\n * @private\n * @param rulerObj\n * @param currentPoint\n */\n Ruler.prototype.drawRulerMarker = function (rulerObj, currentPoint, offset) {\n var rulerSvg;\n var rulerSize;\n var scale;\n var diff;\n var i;\n var attr;\n var line;\n var isHorizontal = this.orientation === 'Horizontal' ? true : false;\n var rulerSvgElements = rulerObj.getElementsByTagName('svg');\n for (i = 0; i < rulerSvgElements.length; i++) {\n if (rulerSvgElements[i]) {\n rulerSvg = rulerSvgElements[i];\n }\n break;\n }\n if (rulerSvg) {\n rulerSize = this.getRulerSize();\n attr = {\n 'id': rulerObj.id + '_marker', 'x1': 0, 'y1': 0, 'x2': (isHorizontal ? 0 : rulerSize),\n 'y2': (isHorizontal ? rulerSize : 0), 'stroke': this.markerColor, 'stroke-width': 1.5,\n 'class': 'e-d-ruler-marker'\n };\n line = this.createMarkerLine(rulerSvg, rulerObj, attr);\n scale = this.scale;\n diff = this.offset - this.defStartValue;\n var point = isHorizontal ? currentPoint.x : currentPoint.y;\n var move = (point * scale) + offset + diff;\n line.setAttribute('transform', 'translate(' + (isHorizontal ? ((move + 0.5) + ' 0.5') : ('0.5 ' + (move + 0.5))) + ')');\n rulerSvg.appendChild(line);\n }\n };\n Ruler.prototype.getRulerGeometry = function () {\n return new Size(this.element ? this.element.getBoundingClientRect().width : 0, this.element ? this.element.getBoundingClientRect().height : 0);\n };\n Ruler.prototype.getRulerSize = function () {\n return this.thickness;\n };\n Ruler.prototype.getRulerSVG = function (rulerGeometry) {\n var rulerSpace;\n var rulerSize = this.getRulerSize();\n var svg;\n if (this.element) {\n rulerSpace = document.getElementById(this.element.id + '_ruler_space');\n if (rulerSpace) {\n var attr = {\n 'id': this.element.id + '_Ruler_svg',\n width: this.orientation === 'Horizontal' ? (rulerGeometry.width + 200) : rulerSize + 'px',\n height: this.orientation === 'Horizontal' ? rulerSize : (rulerGeometry.height + 200) + 'px',\n style: 'position:inherit;'\n };\n svg = createSvgElement('svg', attr);\n if (rulerSpace.childNodes.length > 0) {\n for (var i = rulerSpace.childNodes.length - 1; i >= 0; i--) {\n rulerSpace.childNodes[i].parentNode.removeChild(rulerSpace.childNodes[i]);\n }\n }\n rulerSpace.appendChild(svg);\n }\n }\n return svg;\n };\n /**\n * Method to bind events for the ruler\n */\n Ruler.prototype.wireEvents = function () {\n //wire Events\n };\n /**\n * Method to unbind events for the ruler\n */\n Ruler.prototype.unWireEvents = function () {\n //unWire Events\n };\n __decorate([\n Property(5)\n ], Ruler.prototype, \"interval\", void 0);\n __decorate([\n Property(100)\n ], Ruler.prototype, \"segmentWidth\", void 0);\n __decorate([\n Property('Horizontal')\n ], Ruler.prototype, \"orientation\", void 0);\n __decorate([\n Property('RightOrBottom')\n ], Ruler.prototype, \"tickAlignment\", void 0);\n __decorate([\n Property('red')\n ], Ruler.prototype, \"markerColor\", void 0);\n __decorate([\n Property(25)\n ], Ruler.prototype, \"thickness\", void 0);\n __decorate([\n Property(null)\n ], Ruler.prototype, \"arrangeTick\", void 0);\n __decorate([\n Property(400)\n ], Ruler.prototype, \"length\", void 0);\n return Ruler;\n}(Component));\nexport { Ruler };\n","import { Size } from './../primitives/size';\nimport { Point } from './../primitives/point';\nimport { processPathData, pathSegmentCollection, getRectanglePath } from './../utility/path-util';\nimport { overFlow } from './../utility/base-util';\nimport { createHtmlElement } from './../utility/dom-util';\n/**\n * Canvas Renderer\n */\n/** @private */\nvar CanvasRenderer = /** @class */ (function () {\n function CanvasRenderer() {\n }\n CanvasRenderer.getContext = function (canvas) {\n return canvas.getContext('2d');\n };\n CanvasRenderer.setCanvasSize = function (canvas, width, height) {\n if (canvas) {\n canvas.setAttribute('width', width.toString());\n canvas.setAttribute('height', height.toString());\n }\n };\n ;\n CanvasRenderer.prototype.renderGradient = function (options, ctx, x, y) {\n var max;\n var min;\n var grd;\n if (options.gradient.type !== 'None') {\n for (var i = 0; i < options.gradient.stops.length; i++) {\n max = max !== undefined ? options.gradient.stops[i].offset : Math.max(max, options.gradient.stops[i].offset);\n min = min !== undefined ? options.gradient.stops[i].offset : Math.min(min, options.gradient.stops[i].offset);\n }\n if (options.gradient.type === 'Linear') {\n var linear = options.gradient;\n grd = ctx.createLinearGradient(x + linear.x1, y + linear.y1, x + linear.x2, y + linear.y2);\n }\n else {\n var radial = options.gradient;\n grd = ctx.createRadialGradient(x + radial.fx, y + radial.fy, 0, x + radial.cx, y + radial.cy, radial.r);\n }\n for (var i = 0; i < options.gradient.stops.length; i++) {\n var stop_1 = options.gradient.stops[i];\n var offset = min < 0 ? (max + stop_1.offset) / (2 * max) : stop_1.offset / max;\n grd.addColorStop(offset, stop_1.color);\n }\n ctx.fillStyle = grd;\n }\n return ctx;\n };\n CanvasRenderer.prototype.renderShadow = function (options, canvas, collection) {\n if (collection === void 0) { collection = null; }\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.save();\n ctx.beginPath();\n ctx.strokeStyle = ctx.fillStyle = options.shadow.color;\n ctx.globalAlpha = options.shadow.opacity;\n var ptModel = { x: 0, y: 0 };\n var point = Point.transform(ptModel, options.shadow.angle, options.shadow.distance);\n var transX = options.x + point.x;\n var transY = options.y + point.y;\n var pivotX = transX + options.width * options.pivotX;\n var pivotY = transY + options.height * options.pivotY;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n if (collection) {\n ctx.translate(transX, transY);\n this.renderPath(canvas, options, collection);\n ctx.translate(-transX, -transY);\n }\n else {\n ctx.rect(transX, transY, options.width, options.height);\n ctx.fillRect(transX, transY, options.width, options.height);\n }\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n ctx.restore();\n };\n CanvasRenderer.createCanvas = function (id, width, height) {\n var canvasObj = createHtmlElement('canvas', { 'id': id });\n this.setCanvasSize(canvasObj, width, height);\n return canvasObj;\n };\n ;\n CanvasRenderer.prototype.setStyle = function (canvas, style) {\n var ctx = CanvasRenderer.getContext(canvas);\n if (style.fill === 'none') {\n style.fill = 'transparent';\n }\n if (style.stroke === 'none') {\n style.stroke = 'transparent';\n }\n ctx.strokeStyle = style.stroke;\n ctx.lineWidth = style.strokeWidth;\n if (style.strokeWidth === 0) {\n ctx.strokeStyle = 'transparent';\n }\n ctx.globalAlpha = style.opacity;\n var dashArray = [];\n if (style.dashArray) {\n dashArray = this.parseDashArray(style.dashArray);\n }\n ctx.setLineDash(dashArray);\n if (style.gradient && style.gradient.type !== 'None') {\n this.renderGradient(style, ctx, 0, 0);\n }\n else {\n ctx.fillStyle = style.fill;\n }\n };\n CanvasRenderer.prototype.rotateContext = function (canvas, angle, x, y) {\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.translate(x, y);\n ctx.rotate(angle * Math.PI / 180);\n ctx.translate(-x, -y);\n };\n CanvasRenderer.prototype.setFontStyle = function (canvas, text) {\n var ctx = CanvasRenderer.getContext(canvas);\n var font = '';\n if (text.italic) {\n font += 'italic ';\n }\n if (text.bold) {\n font += 'bold ';\n }\n font += (text.fontSize) + 'px ';\n font += text.fontFamily;\n ctx.font = font;\n };\n CanvasRenderer.prototype.parseDashArray = function (dashArray) {\n var dashes = [];\n var separator = dashArray.indexOf(' ') !== -1 ? ' ' : ',';\n var splittedDashes = dashArray.split(separator);\n for (var _i = 0, splittedDashes_1 = splittedDashes; _i < splittedDashes_1.length; _i++) {\n var i = splittedDashes_1[_i];\n dashes.push(Number(i));\n }\n return dashes;\n };\n //Rendering Part\n CanvasRenderer.prototype.drawRectangle = function (canvas, options) {\n if (options.visible === true) {\n if (options.cornerRadius) {\n options.data = getRectanglePath(options.cornerRadius, options.height, options.width);\n this.drawPath(canvas, options);\n }\n else {\n var ctx = CanvasRenderer.getContext(canvas);\n if (options.shadow) {\n this.renderShadow(options, canvas);\n }\n ctx.save();\n ctx.beginPath();\n var cornerRadius = options.cornerRadius;\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n this.setStyle(canvas, options);\n ctx.rect(options.x, options.y, options.width, options.height);\n ctx.fillRect(options.x, options.y, options.width, options.height);\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n ctx.restore();\n }\n }\n };\n // public updateSelectionRegion(canvas: HTMLCanvasElement, options: RectAttributes): void {\n // this.drawRectangle(canvas, options);\n // }\n // public drawLine(canvas: HTMLCanvasElement, options: LineAttributes): void {\n // let ctx: CanvasRenderingContext2D = CanvasRenderer.getContext(canvas);\n // ctx.save();\n // ctx.beginPath();\n // let pivotX: number = options.x + options.width * options.pivotX;\n // let pivotY: number = options.y + options.height * options.pivotY;\n // this.rotateContext(canvas, options.angle, pivotX, pivotY);\n // this.setStyle(canvas, options as StyleAttributes);\n // ctx.translate(options.x, options.y);\n // ctx.moveTo(options.startPoint.x, options.startPoint.y);\n // ctx.lineTo(options.endPoint.x, options.endPoint.y);\n // ctx.translate(-options.x, -options.y);\n // ctx.stroke();\n // ctx.closePath();\n // ctx.restore();\n // }\n // public drawCircle(canvas: HTMLCanvasElement, options: CircleAttributes): void {\n // let ctx: CanvasRenderingContext2D = CanvasRenderer.getContext(canvas);\n // ctx.save();\n // ctx.beginPath();\n // let pivotY: number = options.y + options.height * options.pivotY;\n // let pivotX: number = options.x + options.width * options.pivotX;\n // this.setStyle(canvas, options as StyleAttributes);\n // this.rotateContext(canvas, options.angle, pivotX, pivotY);\n // ctx.arc(options.centerX, options.centerY, options.radius, 0, 2 * Math.PI);\n // ctx.fill();\n // ctx.stroke();\n // ctx.closePath();\n // ctx.restore();\n // }\n CanvasRenderer.prototype.drawPath = function (canvas, options) {\n var collection = [];\n collection = processPathData(options.data);\n collection = pathSegmentCollection(collection);\n if (options.shadow) {\n this.renderShadow(options, canvas, collection);\n }\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.save();\n ctx.beginPath();\n var pivotY = options.y + options.height * options.pivotY;\n var pivotX = options.x + options.width * options.pivotX;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n this.setStyle(canvas, options);\n ctx.translate(options.x, options.y);\n this.renderPath(canvas, options, collection);\n ctx.fill();\n ctx.translate(-options.x, -options.y);\n ctx.stroke();\n ctx.restore();\n };\n CanvasRenderer.prototype.renderPath = function (canvas, options, collection) {\n if (options.visible === true) {\n var ctx = CanvasRenderer.getContext(canvas);\n var x0 = void 0;\n var y0 = void 0;\n var x1 = void 0;\n var y1 = void 0;\n var x2 = void 0;\n var y2 = void 0;\n var x = void 0;\n var y = void 0;\n var length_1;\n var i = void 0;\n var newSeg = void 0;\n var segs = collection;\n for (x = 0, y = 0, i = 0, length_1 = segs.length; i < length_1; ++i) {\n var obj = segs[i];\n var seg = obj;\n var char = seg.command;\n if ('x1' in seg) {\n x1 = seg.x1;\n }\n if ('x2' in seg) {\n x2 = seg.x2;\n }\n if ('y1' in seg) {\n y1 = seg.y1;\n }\n if ('y2' in seg) {\n y2 = seg.y2;\n }\n if ('x' in seg) {\n x = seg.x;\n }\n if ('y' in seg) {\n y = seg.y;\n }\n switch (char) {\n case 'M':\n ctx.moveTo(x, y);\n seg.x = x;\n seg.y = y;\n break;\n case 'L':\n ctx.lineTo(x, y);\n seg.x = x;\n seg.y = y;\n break;\n case 'C':\n ctx.bezierCurveTo(x1, y1, x2, y2, x, y);\n seg.x = x;\n seg.y = y;\n seg.x1 = x1;\n seg.y1 = y1;\n seg.x2 = x2;\n seg.y2 = y2;\n break;\n case 'Q':\n ctx.quadraticCurveTo(x1, y1, x, y);\n seg.x = x;\n seg.y = y;\n seg.x1 = x1;\n seg.y1 = y1;\n break;\n case 'A':\n var curr = { x: x0, y: y0 };\n var rx = seg.r1;\n var ry = seg.r2;\n var xAxisRotation = seg.angle * (Math.PI / 180.0);\n var largeArc = seg.largeArc;\n var sweep = seg.sweep;\n var cp = { x: x, y: y };\n var currp = {\n x: Math.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0,\n y: -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0\n };\n var l = Math.pow(currp.x, 2) / Math.pow(rx, 2) + Math.pow(currp.y, 2) / Math.pow(ry, 2);\n if (l > 1) {\n rx *= Math.sqrt(l);\n ry *= Math.sqrt(l);\n }\n var k = (Math.pow(ry, 2) * Math.pow(currp.x, 2));\n var s = (largeArc === sweep ? -1 : 1) * Math.sqrt(((Math.pow(rx, 2) * Math.pow(ry, 2)) - (Math.pow(rx, 2) * Math.pow(currp.y, 2)) - k) /\n (Math.pow(rx, 2) * Math.pow(currp.y, 2) + Math.pow(ry, 2) * Math.pow(currp.x, 2)));\n if (isNaN(s)) {\n s = 0;\n }\n var cpp = { x: s * rx * currp.y / ry, y: s * -ry * currp.x / rx };\n var centp = {\n x: (curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y,\n y: (curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y\n };\n var a1 = this.a([1, 0], [(currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry]);\n var u = [(currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry];\n var v = [(-currp.x - cpp.x) / rx, (-currp.y - cpp.y) / ry];\n var ad = this.a(u, v);\n if (this.r(u, v) <= -1) {\n ad = Math.PI;\n }\n if (this.r(u, v) >= 1) {\n ad = 0;\n }\n var dir = !sweep ? -1.0 : 1.0;\n var ah = a1 + dir * (ad / 2.0);\n var halfWay = {\n x: centp.x + rx * Math.cos(ah),\n y: centp.y + ry * Math.sin(ah)\n };\n seg.centp = centp;\n seg.xAxisRotation = xAxisRotation;\n seg.rx = rx;\n seg.ry = ry;\n seg.a1 = a1;\n seg.ad = ad;\n seg.sweep = sweep;\n if (ctx != null) {\n var ra = rx > ry ? rx : ry;\n var sx = rx > ry ? 1 : rx / ry;\n var sy = rx > ry ? ry / rx : 1;\n ctx.save();\n ctx.translate(centp.x, centp.y);\n ctx.rotate(xAxisRotation);\n ctx.scale(sx, sy);\n ctx.arc(0, 0, ra, a1, a1 + ad, !sweep);\n ctx.scale(1 / sx, 1 / sy);\n ctx.rotate(-xAxisRotation);\n ctx.translate(-centp.x, -centp.y);\n ctx.restore();\n }\n break;\n case 'Z':\n case 'z':\n ctx.closePath();\n x = x0;\n y = y0;\n break;\n }\n x0 = x;\n y0 = y;\n }\n }\n };\n CanvasRenderer.prototype.drawText = function (canvas, options) {\n if (options.content && options.visible === true) {\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.save();\n this.setStyle(canvas, options);\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n this.setFontStyle(canvas, options);\n var i = 0;\n var childNodes = [];\n childNodes = options.childNodes;\n var wrapBounds = options.wrapBounds;\n ctx.fillStyle = options.color;\n if (wrapBounds) {\n var position = this.labelAlign(options, wrapBounds, childNodes);\n for (i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n var offsetX = position.x + child.x - wrapBounds.x;\n var offsetY = position.y + child.dy * i + ((options.fontSize) * 0.8);\n if (wrapBounds.width > options.width && options.textOverflow !== 'Wrap') {\n child.text = overFlow(child.text, options);\n }\n ctx.fillText(child.text, offsetX, offsetY);\n if (options.textDecoration === 'Underline'\n || options.textDecoration === 'Overline'\n || options.textDecoration === 'LineThrough') {\n var startPointX = offsetX;\n var startPointY = void 0;\n var textlength = ctx.measureText(child.text).width;\n var endPointX = offsetX + textlength;\n var endPointY = void 0;\n switch (options.textDecoration) {\n case 'Underline':\n startPointY = offsetY + 2;\n endPointY = offsetY + 2;\n break;\n case 'Overline':\n startPointY = (position.y + child.dy * i);\n endPointY = (position.y + child.dy * i);\n break;\n case 'LineThrough':\n startPointY = ((offsetY + position.y + child.dy * i) / 2) + 2;\n endPointY = ((offsetY + position.y + child.dy * i) / 2) + 2;\n }\n ctx.beginPath();\n ctx.moveTo(startPointX, startPointY);\n ctx.lineTo(endPointX, endPointY);\n ctx.strokeStyle = options.color;\n ctx.lineWidth = options.fontSize * .08;\n ctx.globalAlpha = options.opacity;\n ctx.stroke();\n }\n }\n }\n ctx.restore();\n }\n };\n CanvasRenderer.prototype.loadImage = function (ctx, obj) {\n ctx.rotate(obj.angle * Math.PI / 180);\n var image = new Image();\n image.src = obj.source;\n this.image(ctx, image, obj.x, obj.y, obj.width, obj.height, obj);\n ctx.rotate(-(obj.angle * Math.PI / 180));\n };\n CanvasRenderer.prototype.drawImage = function (canvas, obj, parentSvg, fromPalette) {\n var _this = this;\n if (obj.visible) {\n var ctx_1 = CanvasRenderer.getContext(canvas);\n ctx_1.save();\n var pivotX = obj.x + obj.width * obj.pivotX;\n var pivotY = obj.y + obj.height * obj.pivotY;\n var imageObj = new Image();\n imageObj.src = obj.source;\n /**\n * Since Clipping portion for node with slice option is not calculated properly\n * if (obj.sourceX !== undefined && obj.sourceY !== undefined && obj.sourceWidth !== undefined\n * && obj.sourceHeight !== undefined) {\n * ctx.drawImage(imageObj, obj.sourceX, obj.sourceY, obj.sourceWidth, obj.sourceHeight, obj.x, obj.y, obj.width, obj.height);\n * } else {\n * ctx.drawImage(imageObj, obj.x, obj.y, obj.width, obj.height);\n * }\n */\n if (!fromPalette) {\n this.loadImage(ctx_1, obj);\n }\n else {\n imageObj.onload = function () {\n _this.loadImage(ctx_1, obj);\n };\n }\n ctx_1.restore();\n }\n };\n CanvasRenderer.prototype.image = function (ctx, image, x, y, width, height, alignOptions) {\n ctx.beginPath();\n var srcWidth = image.width;\n var srcHeight = image.height;\n var destinationW = width;\n var destinationH = height;\n var resultWidth = 0;\n var resultHeight = 0;\n if (alignOptions && alignOptions.alignment !== 'None') {\n var xalign = alignOptions.alignment.toLowerCase().substr(1, 3);\n var yalign = alignOptions.alignment.toLowerCase().substr(5, 3);\n if (alignOptions.scale === 'Slice') {\n var a = function () {\n resultWidth = destinationW;\n resultHeight = srcHeight * destinationW / srcWidth;\n };\n var b = function () {\n resultWidth = srcWidth * destinationH / srcHeight;\n resultHeight = destinationH;\n };\n if (destinationW > destinationH) {\n a();\n if (destinationH > resultHeight) {\n b();\n }\n }\n else if (destinationW === destinationH) {\n if (srcWidth > srcHeight) {\n b();\n }\n else {\n a();\n }\n }\n else {\n b();\n if (destinationW > resultWidth) {\n a();\n }\n }\n var x1 = this.getSliceOffset(xalign, resultWidth, destinationW, srcWidth);\n var y1 = this.getSliceOffset(yalign, resultHeight, destinationH, srcHeight);\n var sWidth = srcWidth - x1;\n var sHeight = srcHeight - y1;\n var dWidth = resultWidth - (x1 * (resultWidth / srcWidth));\n var dHeight = resultHeight - (y1 * (resultHeight / srcHeight));\n var canvas1 = createHtmlElement('canvas', { 'width': width.toString(), 'height': height.toString() });\n var ctx1 = canvas1.getContext('2d');\n ctx1.drawImage(image, x1, y1, sWidth, sHeight, 0, 0, dWidth, dHeight);\n ctx.drawImage(canvas1, x, y, width, height);\n }\n else if (alignOptions.scale === 'Meet') {\n var srcRatio = (srcHeight / srcWidth);\n var destRatio = (destinationH / destinationW);\n resultWidth = destRatio > srcRatio ? destinationW : destinationH / srcRatio;\n resultHeight = destRatio > srcRatio ? destinationW * srcRatio : destinationH;\n x += this.getMeetOffset(xalign, resultWidth, destinationW);\n y += this.getMeetOffset(yalign, resultHeight, destinationH);\n ctx.drawImage(image, 0, 0, srcWidth, srcHeight, x, y, resultWidth, resultHeight);\n }\n else {\n ctx.drawImage(image, x, y, width, height);\n }\n }\n else {\n ctx.drawImage(image, x, y, width, height);\n }\n ctx.closePath();\n };\n CanvasRenderer.prototype.getSliceOffset = function (arg, res, dest, src) {\n switch (arg) {\n case 'min': return 0;\n case 'mid': return (res - dest) / 2 * src / res;\n case 'max': return (res - dest) * src / res;\n default: return 0;\n }\n };\n CanvasRenderer.prototype.getMeetOffset = function (arg, res, dest) {\n var max = Math.max(res, dest);\n var min = Math.min(res, dest);\n switch (arg) {\n case 'min': return 0;\n case 'mid': return (max - min) / 2;\n case 'max': return max - min;\n default: return 0;\n }\n };\n //end region\n // vector magnitude\n CanvasRenderer.prototype.m = function (v) { return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2)); };\n // ratio between two vectors\n CanvasRenderer.prototype.r = function (u, v) { return (u[0] * v[0] + u[1] * v[1]) / (this.m(u) * this.m(v)); };\n // angle between two vectors\n CanvasRenderer.prototype.a = function (u, v) { return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(this.r(u, v)); };\n // text utility\n CanvasRenderer.prototype.labelAlign = function (text, wrapBounds, childNodes) {\n var bounds = new Size(wrapBounds.width, childNodes.length * (text.fontSize * 1.2));\n var position = { x: 0, y: 0 };\n var labelX = text.x;\n var labelY = text.y;\n var offsetx = text.width * 0.5;\n var offsety = text.height * 0.5;\n var pointx = offsetx;\n var pointy = offsety;\n if (text.textAlign === 'left') {\n pointx = 0;\n }\n else if (text.textAlign === 'center') {\n if (wrapBounds.width > text.width && (text.textOverflow === 'Ellipsis' || text.textOverflow === 'Clip')) {\n pointx = 0;\n }\n else {\n pointx = text.width * 0.5;\n }\n }\n else if (text.textAlign === 'right') {\n pointx = (text.width * 1);\n }\n position.x = labelX + pointx + (wrapBounds ? wrapBounds.x : 0);\n position.y = labelY + pointy - bounds.height / 2;\n return position;\n };\n return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","import { Point } from './../primitives/point';\nimport { Size } from './../primitives/size';\nimport { pathSegmentCollection, processPathData } from './../utility/path-util';\nimport { setAttributeSvg } from './../utility/dom-util';\nimport { overFlow, wordBreakToString, cornersPointsBeforeRotation } from './../utility/base-util';\nimport { CanvasRenderer } from './../rendering/canvas-renderer';\nimport { createSvgElement, createHtmlElement, getBackgroundLayerSvg } from '../utility/dom-util';\n/**\n * SVG Renderer\n */\n/** @private */\nvar SvgRenderer = /** @class */ (function () {\n function SvgRenderer() {\n }\n SvgRenderer.prototype.renderShadow = function (options, canvas, collection, parentSvg) {\n if (collection === void 0) { collection = null; }\n var pointModel = { x: 0, y: 0 };\n var point = Point.transform(pointModel, options.shadow.angle, options.shadow.distance);\n var tX = options.x + point.x;\n var tY = options.y + point.y;\n var pivotX = tX + options.width * options.pivotX;\n var pivotY = tY + options.height * options.pivotY;\n var type;\n var shadowElement;\n if (parentSvg) {\n shadowElement = parentSvg.getElementById(canvas.id + '_shadow');\n }\n if (!shadowElement) {\n type = collection ? 'path' : 'rect';\n shadowElement = document.createElementNS('http://www.w3.org/2000/svg', type);\n canvas.appendChild(shadowElement);\n }\n var attr = {\n 'id': canvas.id + '_shadow', 'fill': options.shadow.color, 'stroke': options.shadow.color,\n 'opacity': options.shadow.opacity.toString(),\n 'transform': 'rotate(' + options.angle + ',' + (options.x + options.width * options.pivotX) + ','\n + (options.y + options.height * options.pivotY) + ')' +\n 'translate(' + (options.x + point.x) + ',' + (options.y + point.y) + ')'\n };\n if (parentSvg) {\n var svgContainer = parentSvg.getElementById(canvas.id);\n if (svgContainer) {\n svgContainer.insertBefore(shadowElement, svgContainer.firstChild);\n }\n }\n setAttributeSvg(shadowElement, attr);\n if (!collection) {\n setAttributeSvg(shadowElement, { 'width': options.width, 'height': options.height });\n }\n else if (collection) {\n this.renderPath(shadowElement, options, collection);\n }\n };\n SvgRenderer.prototype.parseDashArray = function (dashArray) {\n var dashes = [];\n return dashes;\n };\n SvgRenderer.prototype.drawRectangle = function (svg, options, diagramId, onlyRect, isSelector, parentSvg, ariaLabel) {\n if (options.shadow && !onlyRect) {\n this.renderShadow(options, svg, undefined, parentSvg);\n }\n var id;\n if (options.id === svg.id) {\n id = options.id + '_container';\n }\n else {\n id = options.id;\n }\n var rect;\n if (parentSvg) {\n rect = parentSvg.getElementById(id);\n }\n if (!rect || isSelector) {\n rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n svg.appendChild(rect);\n }\n var shadowElement;\n if (parentSvg && !options.shadow) {\n shadowElement = parentSvg.getElementById(options.id + '_groupElement_shadow');\n if (shadowElement) {\n shadowElement.parentNode.removeChild(shadowElement);\n }\n }\n var attr = {\n 'id': id, 'x': options.x.toString(), 'y': options.y.toString(), 'width': options.width.toString(),\n 'height': options.height.toString(), 'visibility': options.visible ? 'visible' : 'hidden',\n 'transform': 'rotate(' + options.angle + ','\n + (options.x + options.width * options.pivotX) + ',' + (options.y + options.height * options.pivotY) + ')',\n 'rx': options.cornerRadius || 0, 'ry': options.cornerRadius || 0, 'opacity': options.opacity,\n 'aria-label': ariaLabel ? ariaLabel : ''\n };\n if (options.class) {\n attr['class'] = options.class;\n }\n var poiterEvents = 'pointer-events';\n if (!ariaLabel) {\n attr[poiterEvents] = 'none';\n }\n setAttributeSvg(rect, attr);\n this.setSvgStyle(rect, options, diagramId);\n };\n SvgRenderer.prototype.updateSelectionRegion = function (gElement, options) {\n var rect;\n rect = gElement.parentNode.getElementById(options.id);\n var attr;\n attr = {\n 'id': options.id, 'x': options.x.toString(), 'y': options.y.toString(), 'width': options.width.toString(),\n 'height': options.height.toString(), 'transform': 'rotate(' + options.angle + ','\n + (options.x + options.width * options.pivotX) + ',' + (options.y + options.height * options.pivotY) + ')',\n class: 'e-diagram-selected-region'\n };\n if (!rect) {\n rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n gElement.appendChild(rect);\n }\n this.setSvgStyle(rect, options);\n setAttributeSvg(rect, attr);\n };\n SvgRenderer.prototype.createGElement = function (elementType, attribute) {\n var gElement = createSvgElement(elementType, attribute);\n return gElement;\n };\n /** @private */\n SvgRenderer.prototype.drawLine = function (gElement, options) {\n var line = document.createElementNS('http://www.w3.org/2000/svg', 'line');\n this.setSvgStyle(line, options);\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n var kk = '';\n var attr = {\n 'id': options.id,\n 'x1': options.startPoint.x + options.x,\n 'y1': options.startPoint.y + options.y,\n 'x2': options.endPoint.x + options.x,\n 'y2': options.endPoint.y + options.y,\n 'stroke': options.stroke,\n 'stroke-width': options.strokeWidth.toString(), 'opacity': options.opacity.toString(),\n 'transform': 'rotate(' + options.angle + ' ' + pivotX + ' ' + pivotY + ')',\n 'visibility': options.visible ? 'visible' : 'hidden',\n };\n if (options.class) {\n attr['class'] = options.class;\n }\n setAttributeSvg(line, attr);\n gElement.appendChild(line);\n };\n /** @private */\n SvgRenderer.prototype.drawCircle = function (gElement, options, enableSelector, ariaLabel) {\n var circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n this.setSvgStyle(circle, options);\n var classval = options.class || '';\n if (!enableSelector) {\n classval += ' e-disabled';\n }\n var attr = {\n 'id': options.id,\n 'cx': options.centerX,\n 'cy': options.centerY,\n 'r': options.radius,\n 'visibility': options.visible ? 'visible' : 'hidden',\n 'class': classval,\n 'aria-label': ariaLabel ? ariaLabel['aria-label'] : ''\n };\n circle.style.display = options.visible ? 'block' : 'none';\n setAttributeSvg(circle, attr);\n gElement.appendChild(circle);\n };\n SvgRenderer.prototype.drawPath = function (svg, options, diagramId, isSelector, parentSvg, ariaLabel) {\n var id;\n var x = Math.floor((Math.random() * 10) + 1);\n id = svg.id + '_shape' + x.toString();\n var collection = [];\n collection = processPathData(options.data);\n collection = pathSegmentCollection(collection);\n if (options.shadow) {\n this.renderShadow(options, svg, collection, parentSvg);\n }\n var shadowElement;\n if (parentSvg && !options.shadow) {\n shadowElement = parentSvg.getElementById(options.id + '_groupElement_shadow');\n if (shadowElement) {\n shadowElement.parentNode.removeChild(shadowElement);\n }\n }\n var path;\n if (parentSvg) {\n path = parentSvg.getElementById(options.id);\n }\n if (!path || isSelector) {\n path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n svg.appendChild(path);\n }\n this.renderPath(path, options, collection);\n var attr = {\n 'id': options.id, 'transform': 'rotate(' + options.angle + ',' + (options.x + options.width * options.pivotX) + ','\n + (options.y + options.height * options.pivotY) + ')' + 'translate(' + (options.x) + ',' + (options.y) + ')',\n 'visibility': options.visible ? 'visible' : 'hidden', 'opacity': options.opacity,\n 'aria-label': ariaLabel ? ariaLabel : ''\n };\n if (options.class) {\n attr['class'] = options.class;\n }\n setAttributeSvg(path, attr);\n this.setSvgStyle(path, options, diagramId);\n };\n SvgRenderer.prototype.renderPath = function (svg, options, collection) {\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n var segments = collection;\n var d = '';\n for (x = 0, y = 0, i = 0, length = segments.length; i < length; ++i) {\n var obj = segments[i];\n var segment = obj;\n var char = segment.command;\n if ('x1' in segment) {\n x1 = segment.x1;\n }\n if ('x2' in segment) {\n x2 = segment.x2;\n }\n if ('y1' in segment) {\n y1 = segment.y1;\n }\n if ('y2' in segment) {\n y2 = segment.y2;\n }\n if ('x' in segment) {\n x = segment.x;\n }\n if ('y' in segment) {\n y = segment.y;\n }\n switch (char) {\n case 'M':\n d = d + 'M' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'L':\n d = d + 'L' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'C':\n d = d + 'C' + x1.toString() + ',' + y1.toString() + ',' + x2.toString() + ',' + y2.toString() + ',';\n d += x.toString() + ',' + y.toString() + ' ';\n break;\n case 'Q':\n d = d + 'Q' + x1.toString() + ',' + y1.toString() + ',' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'A':\n d = d + 'A' + segment.r1.toString() + ',' + segment.r2.toString() + ',' + segment.angle.toString() + ',';\n d += segment.largeArc.toString() + ',' + segment.sweep + ',' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'Z':\n case 'z':\n d = d + 'Z' + ' ';\n break;\n }\n }\n svg.setAttribute('d', d);\n };\n SvgRenderer.prototype.setSvgFontStyle = function (text, options) {\n text.style.fontStyle = options.italic ? 'italic' : 'normal';\n text.style.fontWeight = options.bold ? 'bold' : 'normal';\n text.style.fontSize = options.fontSize.toString() + 'px';\n text.style.fontFamily = options.fontFamily;\n };\n SvgRenderer.prototype.drawText = function (canvas, options, parentSvg, ariaLabel, diagramId) {\n if (options.content !== undefined) {\n var textNode = void 0;\n var childNodes = void 0;\n var wrapBounds = void 0;\n var position = void 0;\n var child = void 0;\n var tspanElement = void 0;\n var offsetX = 0;\n var offsetY = 0;\n var i = 0;\n var text = void 0;\n if (parentSvg) {\n text = parentSvg.getElementById(options.id + '_text');\n }\n if (text) {\n if (options.doWrap) {\n while (text.firstChild) {\n text.removeChild(text.firstChild);\n }\n }\n }\n else {\n options.doWrap = true;\n text = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n if (options.whiteSpace === 'pre-wrap') {\n text.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n }\n canvas.appendChild(text);\n }\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n if (options.doWrap) {\n this.setSvgStyle(text, options, diagramId);\n this.setSvgFontStyle(text, options);\n textNode = document.createTextNode(options.content);\n childNodes = options.childNodes;\n wrapBounds = options.wrapBounds;\n position = this.svgLabelAlign(options, wrapBounds, childNodes);\n if (wrapBounds.width > options.width && options.textOverflow !== 'Wrap') {\n childNodes[0].text = overFlow(options.content, options);\n }\n for (i = 0; i < childNodes.length; i++) {\n tspanElement = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n textNode = document.createTextNode(childNodes[i].text);\n child = childNodes[i];\n offsetX = position.x + child.x - wrapBounds.x;\n offsetY = position.y + child.dy * (i) + ((options.fontSize) * 0.8);\n setAttributeSvg(tspanElement, { 'x': offsetX.toString(), 'y': offsetY.toString() });\n text.setAttribute('fill', child.text);\n tspanElement.appendChild(textNode);\n text.appendChild(tspanElement);\n }\n }\n if (options.textDecoration && options.textDecoration === 'LineThrough') {\n options.textDecoration = wordBreakToString(options.textDecoration);\n }\n var attr = {\n 'id': options.id + '_text', 'fill': options.color, 'visibility': options.visible ? 'visible' : 'hidden',\n 'text-decoration': options.textDecoration, 'transform': 'rotate(' + options.angle + ','\n + (pivotX) + ',' + (pivotY) + ')'\n + 'translate(' + (options.x) + ',' + (options.y) + ')', 'opacity': options.opacity,\n 'aria-label': ariaLabel ? ariaLabel : ''\n };\n setAttributeSvg(text, attr);\n }\n };\n SvgRenderer.prototype.drawImage = function (canvas, obj, parentSvg, fromPalette) {\n var id = obj.id + '_image';\n var image;\n if (parentSvg) {\n image = parentSvg.getElementById(obj.id + 'image');\n }\n if (!image) {\n image = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n canvas.appendChild(image);\n }\n var imageObj = new Image();\n imageObj.src = obj.source;\n var scale = obj.scale !== 'None' ? obj.scale : '';\n var imgAlign = obj.alignment;\n var aspectRatio = imgAlign.charAt(0).toLowerCase() + imgAlign.slice(1);\n if (scale) {\n aspectRatio += ' ' + scale.charAt(0).toLowerCase() + scale.slice(1);\n }\n var attr = {\n 'id': obj.id + 'image', 'x': obj.x.toString(), 'y': obj.y.toString(), 'transform': 'rotate(' + obj.angle + ','\n + (obj.x + obj.width * obj.pivotX) + ',' + (obj.y + obj.height * obj.pivotY) + ')',\n 'width': obj.width.toString(), 'visibility': obj.visible ? 'visible' : 'hidden',\n 'height': obj.height.toString(), 'preserveAspectRatio': aspectRatio\n };\n setAttributeSvg(image, attr);\n image.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', imageObj.src.toString());\n };\n /** @private */\n SvgRenderer.prototype.drawHTMLContent = function (element, canvas, transform, value) {\n var htmlElement;\n if (canvas) {\n var i = void 0;\n for (i = 0; i < canvas.childNodes.length; i++) {\n if (canvas.childNodes[i].id === element.id + '_html_element') {\n htmlElement = canvas.childNodes[i];\n }\n }\n }\n if (!htmlElement) {\n var attr = {\n 'id': element.id + '_html_element',\n 'class': 'foreign-object'\n };\n htmlElement = createHtmlElement('div', attr);\n htmlElement.appendChild(element.template.cloneNode(true));\n canvas.appendChild(htmlElement);\n }\n var point = cornersPointsBeforeRotation(element).topLeft;\n htmlElement.setAttribute('style', 'height:' + (element.actualSize.height) + 'px; width:' + (element.actualSize.width) +\n 'px;left:' + point.x + 'px; top:' + point.y + 'px;' +\n 'position:absolute;transform:rotate(' + element.parentTransform + 'deg);' +\n 'pointer-events:' + (value ? 'all' : 'none')\n + ';visibility:' + ((element.visible) ? 'visible' : 'hidden') + ';opacity:' + element.style.opacity + ';');\n };\n /** @private */\n SvgRenderer.prototype.drawNativeContent = function (element, canvas, height, width, parentSvg) {\n var nativeElement;\n var clipPath;\n if (parentSvg) {\n nativeElement = parentSvg.getElementById(element.id + '_native_element');\n clipPath = parentSvg.getElementById(element.id + '_clip');\n }\n if (!nativeElement) {\n nativeElement = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n nativeElement.setAttribute('id', element.id + '_native_element');\n nativeElement.appendChild(element.template.cloneNode(true));\n canvas.appendChild(nativeElement);\n }\n if (clipPath) {\n nativeElement.removeChild(clipPath);\n }\n nativeElement.setAttribute('style', 'visibility:' +\n ((element.visible) ? 'visible' : 'hidden') + ';opacity:' + element.style.opacity + ';');\n this.setNativTransform(element, nativeElement, height, width);\n if (element.scale === 'Slice') {\n this.drawClipPath(element, nativeElement, height, width, parentSvg);\n }\n setAttributeSvg(nativeElement, element.description ? { 'aria-label': element.description } : {});\n };\n SvgRenderer.prototype.setNativTransform = function (element, nativeElement, height, width) {\n var contentWidth = element.contentSize.width !== 0 ? element.contentSize.width : 1;\n var contentHeight = element.contentSize.height !== 0 ? element.contentSize.height : 1;\n var x = element.templatePosition.x * width / contentWidth;\n var y = element.templatePosition.y * height / contentHeight;\n nativeElement.setAttribute('transform', 'rotate(' + element.parentTransform + ',' + element.offsetX + ',' + element.offsetY +\n ') translate(' + (element.offsetX - x - width * element.pivot.x) + ',' + (element.offsetY - y - height * element.pivot.y) +\n ') scale(' + (width / contentWidth) + ',' + (height / contentHeight) + ')');\n };\n /**\n * used to crop the given native element into a rectangle of the given size\n * @private\n * @param node\n * @param group\n * @param height\n * @param width\n * @param parentSvg\n */\n SvgRenderer.prototype.drawClipPath = function (node, group, height, width, parentSvg) {\n var contentWidth = node.contentSize.width;\n var contentHeight = node.contentSize.height;\n var actualWidth = node.actualSize.width;\n var actualHeight = node.actualSize.height;\n var clipWidth = node.width / (width / contentWidth);\n var clipHeight = node.height / (height / contentHeight);\n var x = node.templatePosition.x + (node.width >= node.height ? 0 : (contentWidth - clipWidth) / 2);\n var y = node.templatePosition.y + (node.height >= node.width ? 0 : (contentHeight - clipHeight) / 2);\n var clipPath = parentSvg.getElementById(node.id + '_clip');\n clipPath = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath');\n clipPath.setAttribute('id', node.id + '_clip');\n group.appendChild(clipPath);\n var rect = parentSvg.getElementById(node.id + '_clip_rect');\n rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n clipPath.appendChild(rect);\n var attr = {\n 'id': node.id + '_clip_rect', 'width': clipWidth.toString(), 'height': clipHeight.toString(),\n 'x': x.toString(), 'y': y.toString()\n };\n setAttributeSvg(rect, attr);\n group.setAttribute('clip-path', 'url(#' + node.id + '_clip)');\n return group;\n };\n SvgRenderer.prototype.renderGradient = function (options, svg, diagramId) {\n var max;\n var min;\n var grd;\n var svgContainer = getBackgroundLayerSvg(diagramId);\n var defs = svgContainer.getElementById(diagramId + 'gradient_pattern');\n if (!defs) {\n defs = createSvgElement('defs', { id: diagramId + 'gradient_pattern' });\n svgContainer.insertBefore(defs, svgContainer.firstChild);\n }\n var radial;\n var linear;\n var stop;\n var offset;\n if (options.gradient.type !== 'None') {\n for (var i = 0; i < options.gradient.stops.length; i++) {\n max = !max ? options.gradient.stops[i].offset : Math.max(max, options.gradient.stops[i].offset);\n min = !min ? options.gradient.stops[i].offset : Math.min(min, options.gradient.stops[i].offset);\n }\n if (options.gradient.type === 'Linear') {\n linear = options.gradient;\n linear.id = svg.id + '_linear';\n grd = svgContainer.getElementById(svg.id + '_linear');\n if (grd) {\n grd.parentNode.removeChild(grd);\n }\n grd = this.createLinearGradient(linear);\n defs.appendChild(grd);\n }\n else {\n radial = options.gradient;\n radial.id = svg.id + '_radial';\n grd = svgContainer.getElementById(svg.id + '_radial');\n grd = svgContainer.getElementById(svg.id + '_linear');\n if (grd) {\n grd.parentNode.removeChild(grd);\n }\n grd = this.createRadialGradient(radial);\n defs.appendChild(grd);\n }\n for (var i = 0; i < options.gradient.stops.length; i++) {\n var stop_1 = options.gradient.stops[i];\n var offset_1 = min < 0 ? (max + stop_1.offset) / (2 * max) : stop_1.offset / max;\n var stopElement = document.createElementNS('http://www.w3.org/2000/svg', 'stop');\n setAttributeSvg(stopElement, { 'offset': offset_1.toString(), 'style': 'stop-color:' + stop_1.color });\n grd.appendChild(stopElement);\n }\n }\n return grd;\n };\n SvgRenderer.prototype.createLinearGradient = function (linear) {\n var lineargradient = document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient');\n var attr = {\n 'id': linear.id, 'x1': linear.x1 + '%', 'y1': linear.y1 + '%', 'x2': linear.x2 + '%', 'y2': linear.y2 + '%'\n };\n setAttributeSvg(lineargradient, attr);\n return lineargradient;\n };\n SvgRenderer.prototype.createRadialGradient = function (radial) {\n var radialgradient = document.createElementNS('http://www.w3.org/2000/svg', 'radialGradient');\n var attr = {\n 'id': radial.id, 'cx': radial.cx + '%', 'cy': radial.cy + '%', 'r': radial.r + '%', 'fx': radial.fx + '%', 'fy': radial.fy + '%'\n };\n setAttributeSvg(radialgradient, attr);\n return radialgradient;\n };\n SvgRenderer.prototype.setSvgStyle = function (svg, style, diagramId) {\n if (style.fill === 'none') {\n style.fill = 'transparent';\n }\n if (style.stroke === 'none') {\n style.stroke = 'transparent';\n }\n var dashArray = [];\n var fill;\n if (style.dashArray !== undefined) {\n var canvasRenderer = new CanvasRenderer();\n dashArray = canvasRenderer.parseDashArray(style.dashArray);\n }\n if (style.gradient && style.gradient.type !== 'None') {\n var grd = this.renderGradient(style, svg, diagramId);\n fill = 'url(#' + grd.id + ')';\n }\n else {\n fill = style.fill;\n }\n if (style.stroke) {\n svg.setAttribute('stroke', style.stroke);\n }\n if (style.strokeWidth !== undefined && style.strokeWidth !== null) {\n svg.setAttribute('stroke-width', style.strokeWidth.toString());\n }\n if (dashArray) {\n svg.setAttribute('stroke-dasharray', dashArray.toString());\n }\n if (fill) {\n svg.setAttribute('fill', fill);\n }\n };\n //end region\n // text utility\n SvgRenderer.prototype.svgLabelAlign = function (text, wrapBound, childNodes) {\n var bounds = new Size(wrapBound.width, childNodes.length * (text.fontSize * 1.2));\n var pos = { x: 0, y: 0 };\n var x = 0;\n var y = 1.2;\n var offsetX = text.width * 0.5;\n var offsety = text.height * 0.5;\n var pointX = offsetX;\n var pointY = offsety;\n if (text.textAlign === 'left') {\n pointX = 0;\n }\n else if (text.textAlign === 'center') {\n if (wrapBound.width > text.width && (text.textOverflow === 'Ellipsis' || text.textOverflow === 'Clip')) {\n pointX = 0;\n }\n else {\n pointX = text.width * 0.5;\n }\n }\n else if (text.textAlign === 'right') {\n pointX = (text.width * 1);\n }\n pos.x = x + pointX + (wrapBound ? wrapBound.x : 0);\n pos.y = y + pointY - bounds.height / 2;\n return pos;\n };\n return SvgRenderer;\n}());\nexport { SvgRenderer };\n","import { PathElement } from '../core/elements/path-element';\nimport { ImageElement } from '../core/elements/image-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { Container } from '../core/containers/container';\nimport { rotateMatrix, identityMatrix, transformPointByMatrix } from '../primitives/matrix';\nimport { Size } from '../primitives/size';\nimport { wordBreakToString, whiteSpaceToString, textAlignToString } from '../utility/base-util';\nimport { getUserHandlePosition, canShowCorner } from '../utility/diagram-util';\nimport { getDiagramElement, getAdornerLayer, getGridLayer, getHTMLLayer } from '../utility/dom-util';\nimport { measurePath, getBackgroundLayerSvg, getBackgroundImageLayer, setAttributeSvg } from '../utility/dom-util';\nimport { SnapConstraints } from '../enum/enum';\nimport { ThumbsConstraints, SelectorConstraints } from '../enum/enum';\nimport { SvgRenderer } from './svg-renderer';\nimport { CanvasRenderer } from './canvas-renderer';\nimport { processPathData, splitArrayCollection, transformPath } from '../utility/path-util';\nimport { isDiagramChild } from '../utility/diagram-util';\nimport { DiagramNativeElement } from '../core/elements/native-element';\nimport { DiagramHtmlElement } from '../core/elements/html-element';\nimport { Point } from '../primitives/point';\n/**\n * Renderer module is used to render basic diagram elements\n */\n/** @private */\nvar DiagramRenderer = /** @class */ (function () {\n function DiagramRenderer(name, svgRender, isSvgMode) {\n this.renderer = null;\n /** @private */\n this.isSvgMode = true;\n this.transform = { x: 0, y: 0 };\n this.diagramId = name;\n this.element = getDiagramElement(this.diagramId);\n this.svgRenderer = svgRender;\n this.isSvgMode = isSvgMode;\n this.renderer = isSvgMode ? new SvgRenderer() : new CanvasRenderer();\n }\n DiagramRenderer.prototype.setCursor = function (canvas, cursor) {\n canvas.style.cursor = cursor;\n };\n /** @private */\n DiagramRenderer.prototype.setLayers = function () {\n this.iconSvgLayer = this.element.getElementsByClassName('e-ports-expand-layer')[0];\n this.adornerSvgLayer = this.element.getElementsByClassName('e-adorner-layer')[0];\n this.nativeSvgLayer = this.element.getElementsByClassName('e-native-layer')[0];\n this.diagramSvgLayer = this.element.getElementsByClassName('e-diagram-layer')[0];\n };\n DiagramRenderer.prototype.getAdornerLayer = function () {\n var adornerLayer = getAdornerLayer(this.diagramId);\n return adornerLayer;\n };\n DiagramRenderer.prototype.getParentSvg = function (element, targetElement, canvas) {\n if (this.diagramId && element && element.id) {\n if (element.id.split('_icon_content').length > 1 || element.id.split('_nodeport').length > 1) {\n return this.iconSvgLayer;\n }\n if (targetElement && targetElement === 'selector') {\n return this.adornerSvgLayer;\n }\n else if (element instanceof DiagramNativeElement) {\n return this.nativeSvgLayer;\n }\n else {\n return this.diagramSvgLayer;\n }\n }\n return canvas;\n };\n DiagramRenderer.prototype.getParentElement = function (element, defaultParent, svgElement) {\n var layerGElement = defaultParent;\n if (svgElement && this.diagramId && element && element.id) {\n if (element.id.split('_icon_content').length > 1) {\n layerGElement = svgElement.getElementById(this.diagramId + '_diagramExpander');\n defaultParent = null;\n }\n else if (element.id.split('_nodeport').length > 1) {\n layerGElement = svgElement.getElementById(this.diagramId + '_diagramPorts');\n }\n else if (element instanceof DiagramNativeElement) {\n layerGElement = svgElement.getElementById(this.diagramId + '_nativeLayer');\n defaultParent = null;\n }\n else {\n layerGElement = svgElement.getElementById(this.diagramId + '_diagramLayer');\n }\n var groupElement = this.getGroupElement(element, defaultParent || layerGElement);\n layerGElement = groupElement.g;\n if (groupElement.svg) {\n svgElement = groupElement.svg;\n }\n }\n return { g: layerGElement, svg: svgElement };\n };\n DiagramRenderer.prototype.getGroupElement = function (element, canvas) {\n var gElement;\n var parentSvg = this.getParentSvg(element);\n var svgElement;\n if (canvas && parentSvg) {\n if (parentSvg) {\n gElement = parentSvg.getElementById(element.id + '_groupElement');\n if (!gElement && parentSvg !== this.nativeSvgLayer) {\n var nativeSvg = this.nativeSvgLayer;\n gElement = nativeSvg.getElementById(element.id + '_groupElement');\n svgElement = nativeSvg;\n }\n }\n if (!gElement) {\n gElement = this.svgRenderer.createGElement('g', { id: element.id + '_groupElement' });\n canvas.appendChild(gElement);\n }\n }\n return { g: gElement, svg: svgElement };\n };\n DiagramRenderer.prototype.renderElement = function (element, canvas, htmlLayer, transform, parentSvg, createParent, fromPalette) {\n if (element instanceof Container) {\n this.renderContainer(element, canvas, htmlLayer, transform, parentSvg, createParent, fromPalette);\n }\n else if (element instanceof ImageElement) {\n this.renderImageElement(element, canvas, transform, parentSvg, fromPalette);\n }\n else if (element instanceof PathElement) {\n this.renderPathElement(element, canvas, transform, parentSvg, fromPalette);\n }\n else if (element instanceof TextElement) {\n this.renderTextElement(element, canvas, transform, parentSvg, fromPalette);\n }\n else if (element instanceof DiagramNativeElement) {\n this.renderNativeElement(element, canvas, transform, parentSvg, fromPalette);\n }\n else if (element instanceof DiagramHtmlElement) {\n this.renderHTMLElement(element, canvas, htmlLayer, transform, parentSvg, fromPalette);\n }\n else {\n this.renderRect(element, canvas, transform, parentSvg);\n }\n };\n DiagramRenderer.prototype.drawSelectionRectangle = function (x, y, w, h, canvas, t) {\n x = (x + t.tx) * t.scale;\n y = (y + t.ty) * t.scale;\n var options = {\n width: w * t.scale, height: h * t.scale,\n x: x + 0.5, y: y + 0.5, fill: 'transparent', stroke: 'gray', angle: 0,\n pivotX: 0.5, pivotY: 0.5, strokeWidth: 1,\n dashArray: '6 3', opacity: 1,\n visible: true, id: canvas.id + '_selected_region'\n };\n var adornerLayer = this.getAdornerLayer();\n this.svgRenderer.updateSelectionRegion(adornerLayer, options);\n };\n /**\n * @private\n */\n DiagramRenderer.prototype.renderHighlighter = function (element, canvas, transform) {\n var width = element.actualSize.width || 2;\n var height = element.actualSize.height || 2;\n var x = element.offsetX - width * element.pivot.x;\n var y = element.offsetY - height * element.pivot.y;\n x = (x + transform.tx) * transform.scale;\n y = (y + transform.ty) * transform.scale;\n var options = {\n width: width * transform.scale, height: height * transform.scale,\n x: x, y: y, fill: 'transparent', stroke: '#8CC63F', angle: element.rotateAngle,\n pivotX: element.pivot.x, pivotY: element.pivot.y, strokeWidth: 4,\n dashArray: '', opacity: 1, cornerRadius: 0,\n visible: true, id: canvas.id + '_highlighter', class: 'e-diagram-highlighter'\n };\n this.svgRenderer.drawRectangle(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.drawLine = function (canvas, options) {\n this.svgRenderer.drawLine(canvas, options);\n };\n DiagramRenderer.prototype.drawPath = function (canvas, options) {\n this.svgRenderer.drawPath(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.renderResizeHandle = function (element, canvas, constraints, currentZoom, selectorConstraints, transform, canMask, enableNode) {\n var left = element.offsetX - element.actualSize.width * element.pivot.x;\n var top = element.offsetY - element.actualSize.height * element.pivot.y;\n var height = element.actualSize.height;\n var width = element.actualSize.width;\n if (constraints & ThumbsConstraints.Rotate) {\n this.renderPivotLine(element, canvas, transform, selectorConstraints, canMask);\n this.renderRotateThumb(element, canvas, transform, selectorConstraints, canMask);\n }\n this.renderBorder(element, canvas, transform, enableNode);\n var nodeWidth = element.actualSize.width * currentZoom;\n var nodeHeight = element.actualSize.height * currentZoom;\n if (nodeWidth >= 40 && nodeHeight >= 40) {\n //Hide corners when the size is less than 40\n if (selectorConstraints & SelectorConstraints.ResizeNorthWest) {\n this.renderCircularHandle('resizeNorthWest', element, left, top, canvas, canShowCorner(selectorConstraints, 'ResizeNorthWest'), constraints & ThumbsConstraints.ResizeNorthWest, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on top left side direction' }, undefined, 'e-diagram-resize-handle e-northwest');\n }\n if (selectorConstraints & SelectorConstraints.ResizeNorthEast) {\n this.renderCircularHandle('resizeNorthEast', element, left + width, top, canvas, canShowCorner(selectorConstraints, 'ResizeNorthEast'), constraints & ThumbsConstraints.ResizeNorthEast, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on top right side direction' }, undefined, 'e-diagram-resize-handle e-northeast');\n }\n if (selectorConstraints & SelectorConstraints.ResizeSouthWest) {\n this.renderCircularHandle('resizeSouthWest', element, left, top + height, canvas, canShowCorner(selectorConstraints, 'ResizeSouthWest'), constraints & ThumbsConstraints.ResizeSouthWest, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on bottom left side direction' }, undefined, 'e-diagram-resize-handle e-southwest');\n }\n if (selectorConstraints & SelectorConstraints.ResizeSouthEast) {\n this.renderCircularHandle('resizeSouthEast', element, left + width, top + height, canvas, canShowCorner(selectorConstraints, 'ResizeSouthEast'), constraints & ThumbsConstraints.ResizeSouthEast, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on bottom right side direction' }, undefined, 'e-diagram-resize-handle e-southeast');\n }\n }\n if (selectorConstraints & SelectorConstraints.ResizeNorth) {\n this.renderCircularHandle('resizeNorth', element, left + width / 2, top, canvas, canShowCorner(selectorConstraints, 'ResizeNorth'), constraints & ThumbsConstraints.ResizeNorth, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on top side direction' }, undefined, 'e-diagram-resize-handle e-north');\n }\n if (selectorConstraints & SelectorConstraints.ResizeSouth) {\n this.renderCircularHandle('resizeSouth', element, left + width / 2, top + height, canvas, canShowCorner(selectorConstraints, 'ResizeSouth'), constraints & ThumbsConstraints.ResizeSouth, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on bottom side direction' }, undefined, 'e-diagram-resize-handle e-south');\n }\n if (selectorConstraints & SelectorConstraints.ResizeWest) {\n this.renderCircularHandle('resizeWest', element, left, top + height / 2, canvas, canShowCorner(selectorConstraints, 'ResizeWest'), constraints & ThumbsConstraints.ResizeWest, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on left side direction' }, undefined, 'e-diagram-resize-handle e-west');\n }\n if (selectorConstraints & SelectorConstraints.ResizeEast) {\n this.renderCircularHandle('resizeEast', element, left + width, top + height / 2, canvas, canShowCorner(selectorConstraints, 'ResizeEast'), constraints & ThumbsConstraints.ResizeEast, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on right side direction' }, undefined, 'e-diagram-resize-handle e-east');\n }\n };\n DiagramRenderer.prototype.renderEndPointHandle = function (selector, canvas, constraints, selectorConstraints, transform, connectedSource, connectedTarget, isSegmentEditing) {\n var sourcePoint = selector.sourcePoint;\n var targetPoint = selector.targetPoint;\n var wrapper = selector.wrapper;\n var i;\n var segment;\n this.renderCircularHandle('connectorSourceThumb', wrapper, sourcePoint.x, sourcePoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorSourceThumb'), constraints & ThumbsConstraints.ConnectorSource, transform, connectedSource, undefined, { 'aria-label': 'Thumb to move the source point of the connector' }, undefined, 'e-diagram-endpoint-handle e-targetend');\n this.renderCircularHandle('connectorTargetThumb', wrapper, targetPoint.x, targetPoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorTargetThumb'), constraints & ThumbsConstraints.ConnectorTarget, transform, connectedTarget, undefined, { 'aria-label': 'Thumb to move the target point of the connector' }, undefined, 'e-diagram-endpoint-handle e-targetend');\n if (isSegmentEditing) {\n if ((selector.type === 'Straight' || selector.type === 'Bezier') && selector.segments.length > 0) {\n for (i = 0; i < selector.segments.length - 1; i++) {\n segment = selector.segments[i];\n this.renderCircularHandle(('segementThumb_' + (i + 1)), wrapper, segment.point.x, segment.point.y, canvas, true, constraints & ThumbsConstraints.ConnectorSource, transform, connectedSource, null, null, i);\n }\n }\n else {\n for (i = 0; i < selector.segments.length; i++) {\n var seg = selector.segments[i];\n this.renderOrthogonalThumbs('orthoThumb_' + (i + 1), wrapper, seg, canvas, canShowCorner(selectorConstraints, 'ConnectorSourceThumb'), transform);\n }\n }\n }\n if (selector.type === 'Bezier') {\n for (i = 0; i < selector.segments.length; i++) {\n var segment_1 = selector.segments[i];\n var bezierPoint = !Point.isEmptyPoint(segment_1.point1) ? segment_1.point1\n : segment_1.bezierPoint1;\n this.renderCircularHandle('bezierPoint_' + (i + 1) + '_1', wrapper, bezierPoint.x, bezierPoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorSourceThumb'), constraints & ThumbsConstraints.ConnectorSource, transform, undefined, undefined, { 'aria-label': 'Thumb to move the source point of the connector' }, undefined, 'e-diagram-bezier-handle e-source');\n if (canShowCorner(selectorConstraints, 'ConnectorSourceThumb')) {\n this.renderBezierLine('bezierLine_' + (i + 1) + '_1', wrapper, canvas, segment_1.points[0], !Point.isEmptyPoint(segment_1.point1) ? segment_1.point1 : segment_1.bezierPoint1, transform);\n }\n bezierPoint = !Point.isEmptyPoint(segment_1.point2) ? segment_1.point2 : segment_1.bezierPoint2;\n this.renderCircularHandle('bezierPoint_' + (i + 1) + '_2', wrapper, bezierPoint.x, bezierPoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorTargetThumb'), constraints & ThumbsConstraints.ConnectorTarget, transform, undefined, undefined, { 'aria-label': 'Thumb to move the target point of the connector' }, undefined, 'e-diagram-bezier-handle e-target');\n if (canShowCorner(selectorConstraints, 'ConnectorTargetThumb')) {\n this.renderBezierLine('bezierLine_' + (i + 1) + '_2', wrapper, canvas, segment_1.points[1], !Point.isEmptyPoint(segment_1.point2) ? segment_1.point2 : segment_1.bezierPoint2, transform);\n }\n }\n }\n };\n DiagramRenderer.prototype.renderOrthogonalThumbs = function (id, selector, segment, canvas, visibility, t) {\n var orientation;\n var visible;\n var length;\n var j = 0;\n for (j = 0; j < segment.points.length - 1; j++) {\n length = Point.distancePoints(segment.points[j], segment.points[j + 1]);\n orientation = (segment.points[j].y.toFixed(2) === segment.points[j + 1].y.toFixed(2)) ? 'horizontal' : 'vertical';\n visible = (length >= 50) ? true : false;\n this.renderOrthogonalThumb((id + '_' + (j + 1)), selector, (((segment.points[j].x + segment.points[j + 1].x) / 2)), (((segment.points[j].y + segment.points[j + 1].y) / 2)), canvas, visible, orientation, t);\n }\n };\n DiagramRenderer.prototype.renderOrthogonalThumb = function (id, selector, x, y, canvas, visible, orientation, t) {\n var path;\n var h;\n var v;\n if (orientation === 'horizontal') {\n path = 'M0,7 L15,0 L30,7 L15,14 z';\n h = -15;\n v = -7;\n }\n else {\n path = 'M7,0 L0,15 L7,30 L14,15 z';\n h = -7;\n v = -15;\n }\n var options = {\n x: ((x + t.tx) * t.scale) + h, y: ((y + t.ty) * t.scale) + v, angle: 0,\n fill: '#e2e2e2', stroke: 'black', strokeWidth: 1, dashArray: '', data: path,\n width: 20, height: 20, pivotX: 0, pivotY: 0, opacity: 1, visible: visible, id: id\n };\n this.svgRenderer.drawPath(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.renderPivotLine = function (element, canvas, transform, selectorConstraints, canMask) {\n var wrapper = element;\n var dashArray = '2,3';\n var visible = (selectorConstraints & SelectorConstraints.Rotate) ? true : false;\n if (canMask) {\n visible = false;\n }\n var options = this.getBaseAttributes(wrapper, transform);\n options.fill = 'None';\n options.stroke = 'black';\n options.strokeWidth = 1;\n options.dashArray = dashArray;\n options.visible = visible;\n var scale = transform.scale;\n options.x *= scale;\n options.y *= scale;\n options.width *= scale;\n options.height *= scale;\n options.id = 'pivotLine';\n options.class = 'e-diagram-pivot-line';\n var startPoint = { x: wrapper.actualSize.width * wrapper.pivot.x * scale, y: -20 };\n var endPoint = { x: wrapper.actualSize.width * wrapper.pivot.x * scale, y: 0 };\n options.startPoint = startPoint;\n options.endPoint = endPoint;\n this.svgRenderer.drawLine(canvas, options);\n };\n DiagramRenderer.prototype.renderBezierLine = function (id, wrapper, canvas, start, end, transform) {\n var dashArray = '3,3';\n var options = this.getBaseAttributes(wrapper, transform);\n options.id = id;\n options.stroke = 'black';\n options.strokeWidth = 1;\n options.dashArray = dashArray;\n options.fill = 'None';\n options.class = 'e-diagram-bezier-line';\n options.x = 0;\n options.y = 0;\n var scale = transform.scale;\n var x1 = (start.x + transform.tx) * scale;\n var y1 = (start.y + transform.ty) * scale;\n var x2 = (end.x + transform.tx) * scale;\n var y2 = (end.y + transform.ty) * scale;\n var startPoint = { x: x1, y: y1 };\n var endPoint = { x: x2, y: y2 };\n options.startPoint = startPoint;\n options.endPoint = endPoint;\n this.svgRenderer.drawLine(canvas, options);\n };\n DiagramRenderer.prototype.renderCircularHandle = function (id, selector, cx, cy, canvas, visible, enableSelector, t, connected, canMask, ariaLabel, count, className) {\n var wrapper = selector;\n var radius = 7;\n var newPoint = { x: cx, y: cy };\n if (wrapper.rotateAngle !== 0 || wrapper.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, wrapper.rotateAngle + wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY);\n newPoint = transformPointByMatrix(matrix, newPoint);\n }\n var options = this.getBaseAttributes(wrapper);\n options.stroke = 'black';\n options.strokeWidth = 1;\n if (count !== undefined) {\n radius = 5;\n options.id = 'segmentEnd_' + count;\n options.fill = '#e2e2e2';\n }\n else {\n radius = 7;\n options.fill = connected ? '#8CC63F' : 'white';\n }\n options.centerX = (newPoint.x + t.tx) * t.scale;\n options.centerY = (newPoint.y + t.ty) * t.scale;\n options.radius = radius;\n options.angle = 0;\n options.id = id;\n options.visible = visible;\n options.class = className;\n if (connected) {\n options.class += ' e-connected';\n }\n if (canMask) {\n options.visible = false;\n }\n this.svgRenderer.drawCircle(canvas, options, enableSelector, ariaLabel);\n };\n DiagramRenderer.prototype.renderBorder = function (selector, canvas, transform, enableNode) {\n var wrapper = selector;\n var options = this.getBaseAttributes(wrapper, transform);\n options.x *= transform.scale;\n options.y *= transform.scale;\n options.width *= transform.scale;\n options.height *= transform.scale;\n options.fill = 'transparent';\n options.stroke = '#097F7F';\n options.strokeWidth = 0.6;\n options.dashArray = '6,3';\n options.class = 'e-diagram-border';\n options.id = 'borderRect';\n if (!enableNode) {\n options.class += ' e-disabled';\n }\n options.cornerRadius = 0;\n var parentSvg = this.getParentSvg(selector, 'selector');\n this.svgRenderer.drawRectangle(canvas, options, this.diagramId, undefined, true, parentSvg);\n };\n DiagramRenderer.prototype.renderUserHandler = function (selectorItem, canvas, transform) {\n var wrapper = selectorItem.wrapper;\n for (var _i = 0, _a = selectorItem.userHandles; _i < _a.length; _i++) {\n var obj = _a[_i];\n var element = new PathElement();\n var newPoint = void 0;\n var data = obj.pathData;\n newPoint = getUserHandlePosition(selectorItem, obj, transform);\n newPoint.x = (newPoint.x + transform.tx) * transform.scale;\n newPoint.y = (newPoint.y + transform.ty) * transform.scale;\n if (obj.visible) {\n obj.visible = (selectorItem.constraints & SelectorConstraints.UserHandle) ? true : false;\n }\n var option = this.getBaseAttributes(wrapper);\n option.id = obj.name + '_userhandle';\n option.fill = obj.backgroundColor;\n option.stroke = obj.borderColor;\n option.strokeWidth = obj.borderWidth;\n option.centerX = newPoint.x;\n option.centerY = newPoint.y;\n option.radius = obj.size * 0.5;\n option.class = 'e-diagram-userhandle-circle';\n option.angle = 0;\n option.visible = obj.visible;\n option.opacity = 1;\n this.svgRenderer.drawCircle(canvas, option, 1, { 'aria-label': obj.name + 'user handle' });\n var pathPading = 5;\n var arrayCollection = [];\n arrayCollection = processPathData(data);\n arrayCollection = splitArrayCollection(arrayCollection);\n var pathSize = measurePath(data);\n //requiredSize/contentSize\n var scaleX = (obj.size - 0.45 * obj.size) / pathSize.width;\n var scaleY = (obj.size - 0.45 * obj.size) / pathSize.height;\n var newData = transformPath(arrayCollection, scaleX, scaleY, true, pathSize.x, pathSize.y, 0, 0);\n pathSize = measurePath(newData);\n var options = {\n x: newPoint.x - pathSize.width / 2,\n y: newPoint.y - pathSize.height / 2,\n angle: 0, id: '',\n class: 'e-diagram-userhandle-path',\n fill: obj.pathColor, stroke: obj.backgroundColor, strokeWidth: 0.5, dashArray: '', data: newData,\n width: obj.size - pathPading, height: obj.size - pathPading, pivotX: 0, pivotY: 0, opacity: 1, visible: obj.visible\n };\n this.svgRenderer.drawPath(canvas, options, this.diagramId, undefined, undefined, { 'aria-label': obj.name + 'user handle' });\n }\n };\n DiagramRenderer.prototype.renderRotateThumb = function (wrapper, canvas, transform, selectorConstraints, canMask) {\n var element = new PathElement();\n var newPoint;\n var size = new Size();\n size.width = 18;\n size.height = 16;\n var top = wrapper.offsetY - wrapper.actualSize.height * wrapper.pivot.y;\n var left = wrapper.offsetX - wrapper.actualSize.width * wrapper.pivot.x;\n var visible = (selectorConstraints & SelectorConstraints.Rotate) ? true : false;\n if (canMask) {\n visible = false;\n }\n var data = 'M 16.856144362449648 10.238890446662904 L 18.000144362449646 3.437890446662903' +\n 'L 15.811144362449646 4.254890446662903 C 14.837144362449646 2.5608904466629028 13.329144362449647 ' +\n ' 1.2598904466629026 11.485144362449645 0.5588904466629026 C 9.375144362449646 - 0.24510955333709716 7.071144362449646 ' +\n ' - 0.18010955333709716 5.010144362449646 0.7438904466629028 C 2.942144362449646 1.6678904466629028 1.365144362449646' +\n ' 3.341890446662903 0.558144362449646 5.452890446662903 C - 0.244855637550354 7.567890446662903 - 0.17985563755035394' +\n ' 9.866890446662904 0.7431443624496461 11.930890446662904 C 1.6681443624496461 13.994890446662904 3.343144362449646' +\n ' 15.575890446662903 5.457144362449647 16.380890446662903 C 6.426144362449647 16.7518904466629 7.450144362449647' +\n ' 16.9348904466629 8.470144362449647 16.9348904466629 C 9.815144362449647 16.9348904466629 11.155144362449647 ' +\n '16.6178904466629 12.367144362449647 15.986890446662901 L 11.351144362449647 14.024890446662901 C 9.767144362449647' +\n ' 14.8468904466629 7.906144362449647 14.953890446662902 6.237144362449647 14.3178904466629 C 4.677144362449647' +\n ' 13.7218904466629 3.444144362449647 12.5558904466629 2.758144362449647 11.028890446662901 C 2.078144362449646 ' +\n '9.501890446662903 2.031144362449646 7.802890446662903 2.622144362449646 6.243890446662903 C 3.216144362449646' +\n ' 4.6798904466629025 4.387144362449646 3.442890446662903 5.914144362449646 2.760890446662903 C 7.437144362449646 ' +\n '2.078890446662903 9.137144362449646 2.0298904466629026 10.700144362449645 2.6258904466629027 C 11.946144362449646 ' +\n '3.100890446662903 12.971144362449646 3.9538904466629026 13.686144362449646 5.049890446662903 L 11.540144362449645 ' +\n '5.850890446662903 L 16.856144362449648 10.238890446662904 Z';\n var pivotX = left + wrapper.pivot.x * wrapper.actualSize.width;\n var pivotY = top;\n pivotX = (pivotX + transform.tx) * transform.scale;\n pivotY = (pivotY + transform.ty) * transform.scale;\n newPoint = { x: pivotX - size.width * 0.5, y: pivotY - 30 - size.height * 0.5 };\n if (wrapper.rotateAngle !== 0 || wrapper.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, wrapper.rotateAngle + wrapper.parentTransform, (transform.tx + wrapper.offsetX) * transform.scale, (transform.ty + wrapper.offsetY) * transform.scale);\n newPoint = transformPointByMatrix(matrix, newPoint);\n }\n var options = {\n x: newPoint.x,\n y: newPoint.y,\n angle: wrapper.rotateAngle + wrapper.parentTransform,\n fill: '#231f20', stroke: 'black', strokeWidth: 0.5, dashArray: '', data: data,\n width: 20, height: 20, pivotX: 0, pivotY: 0, opacity: 1, visible: visible, id: wrapper.id, class: 'e-diagram-rotate-handle'\n };\n options.id = 'rotateThumb';\n this.svgRenderer.drawPath(canvas, options, this.diagramId, true, undefined, { 'aria-label': 'Thumb to rotate the selected object' });\n };\n DiagramRenderer.prototype.renderPathElement = function (element, canvas, transform, parentSvg, fromPalette) {\n var options = this.getBaseAttributes(element, transform);\n options.data = element.absolutePath;\n options.data = element.absolutePath;\n var ariaLabel = element.description ? element.description : element.id;\n this.renderer.drawPath(canvas, options, this.diagramId, undefined, parentSvg, ariaLabel);\n };\n DiagramRenderer.prototype.renderSvgGridlines = function (snapSettings, gridSvg, t, rulerSettings, hRuler, vRuler) {\n //render gridlines\n var pattern = document.createElementNS('http://www.w3.org/2000/svg', 'pattern');\n var defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n defs.setAttribute('id', this.diagramId + '_grid_pattern_defn');\n if (snapSettings.constraints & SnapConstraints.ShowHorizontalLines ||\n snapSettings.constraints & SnapConstraints.ShowVerticalLines) {\n pattern.setAttribute('id', this.diagramId + '_pattern');\n }\n var hWidth = 0;\n var hHeight = 0;\n var hSegmentwidth = 0;\n var vSegmentwidth = 0;\n var scale = 1;\n var isRulerGrid = false;\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && hRuler && vRuler) {\n hSegmentwidth = vRuler.updateSegmentWidth(t.scale);\n vSegmentwidth = hRuler.updateSegmentWidth(t.scale);\n snapSettings.horizontalGridlines.scaledIntervals = [hSegmentwidth / hRuler.interval];\n snapSettings.verticalGridlines.scaledIntervals = [vSegmentwidth / vRuler.interval];\n isRulerGrid = true;\n }\n else {\n for (var _i = 0, _a = snapSettings.verticalGridlines.lineIntervals; _i < _a.length; _i++) {\n var entry = _a[_i];\n hWidth += entry;\n }\n for (var _b = 0, _c = snapSettings.horizontalGridlines.lineIntervals; _b < _c.length; _b++) {\n var entry = _c[_b];\n hHeight += entry;\n }\n scale = this.scaleSnapInterval(snapSettings, t.scale);\n }\n hWidth = isRulerGrid ? vSegmentwidth : hWidth * scale;\n hHeight = isRulerGrid ? hSegmentwidth : hHeight * scale;\n var attr = {\n id: this.diagramId + '_pattern', x: 0, y: 0, width: hWidth,\n height: hHeight, patternUnits: 'userSpaceOnUse'\n };\n setAttributeSvg(pattern, attr);\n this.horizontalSvgGridlines(pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, vRuler, isRulerGrid);\n this.verticalSvgGridlines(pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, hRuler, isRulerGrid);\n defs.appendChild(pattern);\n gridSvg.appendChild(defs);\n };\n DiagramRenderer.prototype.horizontalSvgGridlines = function (pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, vRuler, isRulerGrid) {\n var space = 0;\n var dashArray = [];\n var hLine;\n if (snapSettings.constraints & SnapConstraints.ShowHorizontalLines) {\n var intervals = snapSettings.horizontalGridlines.lineIntervals;\n var strokestyle = snapSettings.horizontalGridlines.lineColor;\n if (snapSettings.horizontalGridlines.lineDashArray) {\n dashArray = this.renderer.parseDashArray(snapSettings.horizontalGridlines.lineDashArray);\n }\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && vRuler) {\n intervals = this.updateLineIntervals(intervals, rulerSettings, vRuler, hHeight);\n }\n for (var i = 0; i < intervals.length; i = i + 2) {\n hLine = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n var d = space + intervals[i] / 2;\n d = isRulerGrid ? d : d * scale;\n var attr = {\n 'stroke-width': intervals[i], 'stroke': snapSettings.horizontalGridlines.lineColor,\n 'd': 'M0,' + (d) + ' L' + hWidth + ',' + (d) + ' Z',\n 'dashArray': dashArray.toString(),\n 'class': intervals[i] === 1.25 ? 'e-diagram-thick-grid' : 'e-diagram-thin-grid'\n };\n setAttributeSvg(hLine, attr);\n pattern.appendChild(hLine);\n space += intervals[i + 1] + intervals[i];\n }\n }\n };\n DiagramRenderer.prototype.verticalSvgGridlines = function (pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, hRuler, isRulerGrid) {\n var space = 0;\n var dashArray = [];\n var vLine;\n if (snapSettings.constraints & SnapConstraints.ShowVerticalLines) {\n var intervals = snapSettings.verticalGridlines.lineIntervals;\n var strokestyle = snapSettings.verticalGridlines.lineColor;\n if (snapSettings.verticalGridlines.lineDashArray) {\n dashArray = this.renderer.parseDashArray(snapSettings.verticalGridlines.lineDashArray);\n }\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && hRuler) {\n intervals = this.updateLineIntervals(intervals, rulerSettings, hRuler, hWidth);\n }\n for (var i = 0; i < intervals.length; i = i + 2) {\n vLine = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n var d = space + intervals[i] / 2;\n d = isRulerGrid ? d : d * scale;\n var attr = {\n 'stroke-width': intervals[i], 'stroke': snapSettings.verticalGridlines.lineColor,\n 'd': 'M' + (d) + ',0 L' + (d) + ',' + hHeight + ' Z',\n 'dashArray': dashArray.toString(),\n 'class': intervals[i] === 1.25 ? 'e-diagram-thick-grid' : 'e-diagram-thin-grid'\n };\n setAttributeSvg(vLine, attr);\n pattern.appendChild(vLine);\n space += intervals[i + 1] + intervals[i];\n }\n }\n };\n DiagramRenderer.prototype.updateGrid = function (snapSettings, svgGrid, transform, rulerSettings, hRuler, vRuler) {\n var grid = svgGrid.getElementById(this.diagramId + '_grid_rect');\n var i;\n var isRulerGrid = false;\n if (grid) {\n var pattern = svgGrid.getElementById(this.diagramId + '_pattern');\n if (pattern) {\n pattern.parentNode.removeChild(pattern);\n }\n var hSegmentwidth = 0;\n var vSegmentwidth = 0;\n var scale = 1;\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && vRuler && hRuler) {\n hSegmentwidth = vRuler.updateSegmentWidth(transform.scale);\n vSegmentwidth = hRuler.updateSegmentWidth(transform.scale);\n isRulerGrid = true;\n snapSettings.horizontalGridlines.scaledIntervals = [hSegmentwidth / hRuler.interval];\n snapSettings.verticalGridlines.scaledIntervals = [vSegmentwidth / vRuler.interval];\n }\n else {\n scale = this.scaleSnapInterval(snapSettings, transform.scale);\n }\n var height = 0;\n for (i = 0; i < snapSettings.horizontalGridlines.lineIntervals.length; i++) {\n height += snapSettings.horizontalGridlines.lineIntervals[i];\n }\n var width = 0;\n for (i = 0; i < snapSettings.verticalGridlines.lineIntervals.length; i++) {\n width += snapSettings.verticalGridlines.lineIntervals[i];\n }\n var attr = {\n x: -transform.tx * transform.scale,\n y: -transform.ty * transform.scale\n };\n setAttributeSvg(grid, attr);\n width = isRulerGrid ? vSegmentwidth : width * scale;\n height = isRulerGrid ? hSegmentwidth : height * scale;\n attr = {\n id: this.diagramId + '_pattern', x: 0, y: 0, width: width,\n height: height, patternUnits: 'userSpaceOnUse'\n };\n pattern = document.createElementNS('http://www.w3.org/2000/svg', 'pattern');\n setAttributeSvg(pattern, attr);\n this.horizontalSvgGridlines(pattern, width, height, scale, snapSettings, rulerSettings, vRuler, isRulerGrid);\n this.verticalSvgGridlines(pattern, width, height, scale, snapSettings, rulerSettings, hRuler, isRulerGrid);\n var defs = svgGrid.getElementById(this.diagramId + '_grid_pattern_defn');\n defs.appendChild(pattern);\n }\n };\n DiagramRenderer.prototype.updateLineIntervals = function (intervals, rulerSettings, ruler, segmentWidth) {\n var newInterval = [];\n var tickInterval = segmentWidth / ruler.interval;\n for (var i = 0; i < ruler.interval * 2; i++) {\n if (i % 2 === 0) {\n newInterval[i] = (i === 0) ? 1.25 : 0.25;\n }\n else {\n newInterval[i] = tickInterval - newInterval[i - 1];\n }\n }\n return newInterval;\n };\n DiagramRenderer.prototype.scaleSnapInterval = function (snapSettings, scale) {\n if (scale >= 2) {\n while (scale >= 2) {\n scale /= 2;\n }\n }\n else if (scale <= 0.5) {\n while (scale <= 0.5) {\n scale *= 2;\n }\n }\n var i;\n snapSettings.horizontalGridlines.scaledIntervals = snapSettings.horizontalGridlines.snapIntervals;\n snapSettings.verticalGridlines.scaledIntervals = snapSettings.verticalGridlines.snapIntervals;\n if (scale !== 1) {\n var gridlines = snapSettings.horizontalGridlines;\n gridlines.scaledIntervals = [];\n for (i = 0; i < gridlines.snapIntervals.length; i++) {\n gridlines.scaledIntervals[i] = gridlines.snapIntervals[i] * scale;\n }\n gridlines = snapSettings.verticalGridlines;\n gridlines.scaledIntervals = [];\n for (i = 0; i < gridlines.snapIntervals.length; i++) {\n gridlines.scaledIntervals[i] = gridlines.snapIntervals[i] * scale;\n }\n }\n return scale;\n };\n DiagramRenderer.prototype.renderTextElement = function (element, canvas, transform, parentSvg, fromPalette) {\n var options = this.getBaseAttributes(element, transform);\n options.cornerRadius = 0;\n options.whiteSpace = whiteSpaceToString(element.style.whiteSpace, element.style.textWrapping);\n options.content = element.content;\n options.breakWord = wordBreakToString(element.style.textWrapping);\n options.textAlign = textAlignToString(element.style.textAlign);\n options.color = element.style.color;\n options.italic = element.style.italic;\n options.bold = element.style.bold;\n options.fontSize = element.style.fontSize;\n options.fontFamily = element.style.fontFamily;\n options.textOverflow = element.style.textOverflow;\n options.textDecoration = element.style.textDecoration;\n options.doWrap = element.doWrap;\n options.wrapBounds = element.wrapBounds;\n options.childNodes = element.childNodes;\n options.dashArray = '';\n options.strokeWidth = 0;\n options.fill = 'transparent';\n var ariaLabel = element.description ? element.description : element.content ? element.content : element.id;\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n this.renderer.drawText(canvas, options, parentSvg, ariaLabel, this.diagramId);\n if (this.isSvgMode) {\n element.doWrap = false;\n }\n };\n DiagramRenderer.prototype.renderNativeElement = function (element, canvas, transform, parentSvg, fromPalette) {\n var templateWidth;\n var templateHeight;\n var nativeSvg = this.getParentSvg(element, undefined, canvas) || parentSvg;\n var nativeLayer = this.getParentElement(element, canvas, nativeSvg).g || canvas;\n var options = this.getBaseAttributes(element, transform);\n options.fill = 'transparent';\n options.cornerRadius = element.cornerRadius;\n options.stroke = 'transparent';\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n switch (element.scale) {\n case 'None':\n templateWidth = element.contentSize.width;\n templateHeight = element.contentSize.height;\n break;\n case 'Stretch':\n templateWidth = element.actualSize.width;\n templateHeight = element.actualSize.height;\n break;\n case 'Meet':\n if (element.actualSize.width <= element.actualSize.height) {\n templateWidth = templateHeight = element.actualSize.width;\n }\n else {\n templateWidth = templateHeight = element.actualSize.height;\n }\n break;\n case 'Slice':\n if (element.actualSize.width >= element.actualSize.height) {\n templateWidth = templateHeight = element.actualSize.width;\n }\n else {\n templateWidth = templateHeight = element.actualSize.height;\n }\n break;\n }\n if (this.svgRenderer) {\n this.svgRenderer.drawNativeContent(element, nativeLayer, templateHeight, templateWidth, nativeSvg);\n }\n };\n DiagramRenderer.prototype.renderHTMLElement = function (element, canvas, htmlLayer, transform, parentSvg, fromPalette) {\n var options = this.getBaseAttributes(element, transform);\n options.fill = 'transparent';\n options.cornerRadius = element.cornerRadius;\n options.stroke = 'transparent';\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n if (this.svgRenderer) {\n this.svgRenderer.drawHTMLContent(element, htmlLayer.children[0], transform, isDiagramChild(htmlLayer));\n }\n };\n DiagramRenderer.prototype.renderImageElement = function (element, canvas, transform, parentSvg, fromPalette) {\n var options = this.getBaseAttributes(element, transform);\n options.cornerRadius = 0;\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n // let sx: number; let sy: number;\n var imageWidth;\n var imageHeight;\n var sourceWidth;\n var sourceHeight;\n if (element.stretch === 'Stretch') {\n imageWidth = element.actualSize.width;\n imageHeight = element.actualSize.height;\n }\n else {\n var contentWidth = element.contentSize.width;\n var contentHeight = element.contentSize.height;\n var widthRatio = options.width / contentWidth;\n var heightRatio = options.height / contentHeight;\n var ratio = void 0;\n switch (element.stretch) {\n case 'Meet':\n ratio = Math.min(widthRatio, heightRatio);\n imageWidth = contentWidth * ratio;\n imageHeight = contentHeight * ratio;\n options.x += Math.abs(options.width - imageWidth) / 2;\n options.y += Math.abs(options.height - imageHeight) / 2;\n break;\n case 'Slice':\n widthRatio = options.width / contentWidth;\n heightRatio = options.height / contentHeight;\n ratio = Math.max(widthRatio, heightRatio);\n imageWidth = contentWidth * ratio;\n imageHeight = contentHeight * ratio;\n sourceWidth = options.width / imageWidth * contentWidth;\n sourceHeight = options.height / imageHeight * contentHeight;\n break;\n case 'None':\n imageWidth = contentWidth;\n imageHeight = contentHeight;\n break;\n }\n }\n options.width = imageWidth;\n options.height = imageHeight;\n //Commented for code coverage\n //(options as ImageAttributes).sourceX = sx;\n //(options as ImageAttributes).sourceY = sy;\n options.sourceWidth = sourceWidth;\n options.sourceHeight = sourceHeight;\n options.source = element.source;\n options.alignment = element.imageAlign;\n options.scale = element.imageScale;\n options.description = element.description ? element.description : element.id;\n this.renderer.drawImage(canvas, options, parentSvg, fromPalette);\n };\n DiagramRenderer.prototype.renderContainer = function (group, canvas, htmlLayer, transform, parentSvg, createParent, fromPalette) {\n var svgParent = { svg: parentSvg, g: canvas };\n if (this.diagramId) {\n parentSvg = this.getParentSvg(group) || parentSvg;\n if (this.isSvgMode) {\n var groupElement = void 0;\n groupElement = this.getParentElement(group, canvas, parentSvg).g || canvas;\n parentSvg = this.getParentSvg(this.hasNativeParent(group.children)) || parentSvg;\n var svgNativeParent = this.getParentElement(this.hasNativeParent(group.children), groupElement, parentSvg);\n svgParent.svg = svgNativeParent.svg || parentSvg;\n svgParent.g = svgNativeParent.g || groupElement;\n if (createParent) {\n if (parentSvg) {\n if (!parentSvg.getElementById(svgParent.g.id)) {\n canvas.appendChild(svgParent.g);\n }\n }\n canvas = svgParent.g;\n }\n else {\n canvas = svgParent.g;\n }\n }\n }\n this.renderRect(group, canvas, transform, parentSvg);\n if (group.hasChildren()) {\n var parentG = void 0;\n var svgParent_1;\n for (var _i = 0, _a = group.children; _i < _a.length; _i++) {\n var child = _a[_i];\n parentSvg = this.getParentSvg(this.hasNativeParent(group.children) || child) || parentSvg;\n if (this.isSvgMode) {\n svgParent_1 = this.getParentElement(this.hasNativeParent(group.children) || child, canvas, parentSvg);\n parentG = svgParent_1.g || canvas;\n if (svgParent_1.svg) {\n parentSvg = svgParent_1.svg;\n }\n }\n this.renderElement(child, parentG || canvas, htmlLayer, transform, parentSvg, true, fromPalette);\n }\n }\n };\n DiagramRenderer.prototype.hasNativeParent = function (children, count) {\n if (children && children.length > 0 && (count || 0 < 3)) {\n var child = children[0];\n if (child instanceof DiagramNativeElement) {\n return child;\n }\n else if (child.children && child.children.length) {\n this.hasNativeParent(child.children, count++ || 0);\n }\n }\n return undefined;\n };\n DiagramRenderer.prototype.renderRect = function (element, canvas, transform, parentSvg) {\n var options = this.getBaseAttributes(element, transform);\n options.cornerRadius = element.cornerRadius || 0;\n var ariaLabel = element.description ? element.description : element.id;\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg, ariaLabel);\n };\n DiagramRenderer.prototype.drawRect = function (canvas, options) {\n options.cornerRadius = 0;\n this.svgRenderer.drawRectangle(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.getBaseAttributes = function (element, transform) {\n var options = {\n width: element.actualSize.width, height: element.actualSize.height,\n x: element.offsetX - element.actualSize.width * element.pivot.x + 0.5,\n y: element.offsetY - element.actualSize.height * element.pivot.y + 0.5,\n fill: element.style.fill, stroke: element.style.strokeColor, angle: element.rotateAngle + element.parentTransform,\n pivotX: element.pivot.x, pivotY: element.pivot.y, strokeWidth: element.style.strokeWidth,\n dashArray: element.style.strokeDashArray || '', opacity: element.style.opacity, shadow: element.shadow,\n gradient: element.style.gradient, visible: element.visible, id: element.id, description: element.description,\n };\n if (transform) {\n options.x += transform.tx;\n options.y += transform.ty;\n }\n return options;\n };\n DiagramRenderer.renderSvgBackGroundImage = function (background, diagramElement, x, y, width, height) {\n var container = document.getElementById(diagramElement.id);\n var backgroundLayer = getBackgroundLayerSvg(diagramElement.id);\n var target = backgroundLayer.getElementById(diagramElement.id + '_image');\n if (!target && background.source) {\n var bgimageLayer = getBackgroundImageLayer(diagramElement.id);\n target = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n target.setAttribute('id', diagramElement.id + '_image');\n bgimageLayer.appendChild(target);\n }\n if (target) {\n target.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', background.source);\n var scale = background.scale !== 'None' ? background.scale : '';\n var imgAlign = background.align;\n var aspectRatio = imgAlign.charAt(0).toLowerCase() + imgAlign.slice(1) + ' '\n + scale.charAt(0).toLowerCase() + scale.slice(1);\n var container_1 = document.getElementById(diagramElement.id);\n var attr = {\n 'id': diagramElement.id + '_image', 'x': x, 'y': y,\n 'width': width, 'height': height,\n 'preserveAspectRatio': aspectRatio\n };\n setAttributeSvg(target, attr);\n }\n };\n DiagramRenderer.prototype.transformLayers = function (transform, svgMode) {\n var tx = transform.tx * transform.scale;\n var ty = transform.ty * transform.scale;\n if (tx !== this.transform.x || ty !== this.transform.y || (tx === 0 || ty === 0)) {\n //diagram layer\n if (svgMode) {\n var diagramLayer = this.diagramSvgLayer.getElementById(this.diagramId + '_diagramLayer');\n diagramLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n }\n //background\n //gridline\n var gridLayer = getGridLayer(this.diagramId);\n gridLayer.setAttribute('transform', 'translate(' + (transform.tx * transform.scale) + ','\n + (transform.ty * transform.scale) + ')');\n //portslayer \n var portsLayer = this.iconSvgLayer.getElementById(this.diagramId + '_diagramPorts');\n portsLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n //expandlayer\n var expandLayer = this.iconSvgLayer.getElementById(this.diagramId + '_diagramExpander');\n expandLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n //nativelayer\n var nativeLayer = this.nativeSvgLayer.getElementById(this.diagramId + '_nativeLayer');\n nativeLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n //htmlLayer\n var htmlLayer = getHTMLLayer(this.diagramId).children[0];\n htmlLayer.style.transform = 'translate('\n + (transform.tx * transform.scale) + 'px,' + (transform.ty * transform.scale) + 'px)scale('\n + transform.scale + ')';\n this.transform = { x: transform.tx * transform.scale, y: transform.ty * transform.scale };\n return true;\n }\n return false;\n };\n /** @private */\n DiagramRenderer.prototype.updateNode = function (element, diagramElementsLayer, htmlLayer, transform) {\n this.renderElement(element, diagramElementsLayer, htmlLayer, transform, this.getParentSvg(element));\n };\n return DiagramRenderer;\n}());\nexport { DiagramRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { Margin } from '../core/appearance';\n/**\n * Defines the size and appearance of the diagram page\n */\nvar Background = /** @class */ (function (_super) {\n __extends(Background, _super);\n function Background() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Background.prototype, \"source\", void 0);\n __decorate([\n Property('transparent')\n ], Background.prototype, \"color\", void 0);\n __decorate([\n Property('None')\n ], Background.prototype, \"scale\", void 0);\n __decorate([\n Property('None')\n ], Background.prototype, \"align\", void 0);\n return Background;\n}(ChildProperty));\nexport { Background };\n/**\n * Defines the size and appearance of diagram page\n * ```html\n *
    \n * ```\n * ```typescript\n * let diagram: Diagram = new Diagram({\n * ...\n * pageSettings: { width: 800, height: 600, orientation: 'Landscape',\n * background: { color: 'blue' }, boundaryConstraints: 'Infinity',\n * multiplePage: true, showPageBreaks: true, },\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n * @default {}\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(null)\n ], PageSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Margin)\n ], PageSettings.prototype, \"margin\", void 0);\n __decorate([\n Property('Landscape')\n ], PageSettings.prototype, \"orientation\", void 0);\n __decorate([\n Property('Infinity')\n ], PageSettings.prototype, \"boundaryConstraints\", void 0);\n __decorate([\n Complex({}, Background)\n ], PageSettings.prototype, \"background\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"multiplePage\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"showPageBreaks\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n/**\n * Diagram ScrollSettings module handles the scroller properties of the diagram\n */\nvar ScrollSettings = /** @class */ (function (_super) {\n __extends(ScrollSettings, _super);\n function ScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"horizontalOffset\", void 0);\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"verticalOffset\", void 0);\n __decorate([\n Property(1)\n ], ScrollSettings.prototype, \"currentZoom\", void 0);\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"viewPortWidth\", void 0);\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"viewPortHeight\", void 0);\n __decorate([\n Property(0.2)\n ], ScrollSettings.prototype, \"minZoom\", void 0);\n __decorate([\n Property(30)\n ], ScrollSettings.prototype, \"maxZoom\", void 0);\n __decorate([\n Property('Diagram')\n ], ScrollSettings.prototype, \"scrollLimit\", void 0);\n __decorate([\n Property()\n ], ScrollSettings.prototype, \"scrollableArea\", void 0);\n __decorate([\n Property(false)\n ], ScrollSettings.prototype, \"canAutoScroll\", void 0);\n __decorate([\n Complex({ left: 15, right: 15, top: 15, bottom: 15 }, Margin)\n ], ScrollSettings.prototype, \"autoScrollBorder\", void 0);\n return ScrollSettings;\n}(ChildProperty));\nexport { ScrollSettings };\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 this.services[name] = type;\n };\n ServiceLocator.prototype.getService = function (name) {\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { SnapConstraints } from '../enum/enum';\n/**\n * Provides a visual guidance while dragging or arranging the objects on the Diagram surface\n */\nvar Gridlines = /** @class */ (function (_super) {\n __extends(Gridlines, _super);\n function Gridlines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('lightgray')\n ], Gridlines.prototype, \"lineColor\", void 0);\n __decorate([\n Property('')\n ], Gridlines.prototype, \"lineDashArray\", void 0);\n __decorate([\n Property([1.25, 18.75, 0.25, 19.75, 0.25, 19.75, 0.25, 19.75, 0.25, 19.75])\n ], Gridlines.prototype, \"lineIntervals\", void 0);\n __decorate([\n Property([20])\n ], Gridlines.prototype, \"snapIntervals\", void 0);\n return Gridlines;\n}(ChildProperty));\nexport { Gridlines };\n/**\n * Defines the gridlines and defines how and when the objects have to be snapped\n * @default {}\n */\nvar SnapSettings = /** @class */ (function (_super) {\n __extends(SnapSettings, _super);\n function SnapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Gridlines)\n ], SnapSettings.prototype, \"horizontalGridlines\", void 0);\n __decorate([\n Complex({}, Gridlines)\n ], SnapSettings.prototype, \"verticalGridlines\", void 0);\n __decorate([\n Property(SnapConstraints.All)\n ], SnapSettings.prototype, \"constraints\", void 0);\n __decorate([\n Property(5)\n ], SnapSettings.prototype, \"snapAngle\", void 0);\n __decorate([\n Property(5)\n ], SnapSettings.prototype, \"snapObjectDistance\", void 0);\n return SnapSettings;\n}(ChildProperty));\nexport { SnapSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 * Defines the properties of both horizontal and vertical guides/rulers to measure the diagram area.\n */\nvar DiagramRuler = /** @class */ (function (_super) {\n __extends(DiagramRuler, _super);\n function DiagramRuler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(5)\n ], DiagramRuler.prototype, \"interval\", void 0);\n __decorate([\n Property(100)\n ], DiagramRuler.prototype, \"segmentWidth\", void 0);\n __decorate([\n Property('Horizontal')\n ], DiagramRuler.prototype, \"orientation\", void 0);\n __decorate([\n Property('RightOrBottom')\n ], DiagramRuler.prototype, \"tickAlignment\", void 0);\n __decorate([\n Property('red')\n ], DiagramRuler.prototype, \"markerColor\", void 0);\n __decorate([\n Property(25)\n ], DiagramRuler.prototype, \"thickness\", void 0);\n __decorate([\n Property(null)\n ], DiagramRuler.prototype, \"arrangeTick\", void 0);\n return DiagramRuler;\n}(ChildProperty));\nexport { DiagramRuler };\n/**\n * Defines the ruler settings of diagram\n * ```html\n *
    \n * ```\n * ```typescript\n * let diagram: Diagram = new Diagram({\n * ...\n * rulerSettings: { showRulers: true,\n * horizontalRuler: { segmentWidth: 50,interval: 10 },\n * verticalRuler: {segmentWidth: 200,interval: 20}\n * },\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n * @default {}\n */\nvar RulerSettings = /** @class */ (function (_super) {\n __extends(RulerSettings, _super);\n function RulerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], RulerSettings.prototype, \"showRulers\", void 0);\n __decorate([\n Property(true)\n ], RulerSettings.prototype, \"dynamicGrid\", void 0);\n __decorate([\n Complex({ orientation: 'Horizontal' }, DiagramRuler)\n ], RulerSettings.prototype, \"horizontalRuler\", void 0);\n __decorate([\n Complex({ orientation: 'Vertical' }, DiagramRuler)\n ], RulerSettings.prototype, \"verticalRuler\", void 0);\n return RulerSettings;\n}(ChildProperty));\nexport { RulerSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 data source that is to be bound with diagram\n * ```html\n *
    \n * ```\n * ```typescript\n * let data: object[] = [\n * { Name: \"Elizabeth\", Role: \"Director\" },\n * { Name: \"Christina\", ReportingPerson: \"Elizabeth\", Role: \"Manager\" },\n * { Name: \"Yoshi\", ReportingPerson: \"Christina\", Role: \"Lead\" },\n * { Name: \"Philip\", ReportingPerson: \"Christina\", Role: \"Lead\" },\n * { Name: \"Yang\", ReportingPerson: \"Elizabeth\", Role: \"Manager\" },\n * { Name: \"Roland\", ReportingPerson: \"Yang\", Role: \"Lead\" },\n * { Name: \"Yvonne\", ReportingPerson: \"Yang\", Role: \"Lead\" }\n * ];\n * let items: DataManager = new DataManager(data as JSON[]);\n * let diagram: Diagram = new Diagram({\n * ...\n * layout: {\n * type: 'OrganizationalChart'\n * },\n * dataSourceSettings: {\n * id: 'Name', parentId: 'ReportingPerson', dataManager: items,\n * }\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar DataSource = /** @class */ (function (_super) {\n __extends(DataSource, _super);\n function DataSource() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], DataSource.prototype, \"id\", void 0);\n __decorate([\n Property(null)\n ], DataSource.prototype, \"dataManager\", void 0);\n __decorate([\n Property('')\n ], DataSource.prototype, \"root\", void 0);\n __decorate([\n Property('')\n ], DataSource.prototype, \"parentId\", void 0);\n __decorate([\n Property()\n ], DataSource.prototype, \"data\", void 0);\n __decorate([\n Property()\n ], DataSource.prototype, \"doBinding\", void 0);\n return DataSource;\n}(ChildProperty));\nexport { DataSource };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { Margin } from '../core/appearance';\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines the behavior of the automatic layouts\n */\nvar Layout = /** @class */ (function (_super) {\n __extends(Layout, _super);\n function Layout() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Layout.prototype, \"fixedNode\", void 0);\n __decorate([\n Property(30)\n ], Layout.prototype, \"horizontalSpacing\", void 0);\n __decorate([\n Property(30)\n ], Layout.prototype, \"verticalSpacing\", void 0);\n __decorate([\n Property(30)\n ], Layout.prototype, \"maxIteration\", void 0);\n __decorate([\n Property(40)\n ], Layout.prototype, \"springFactor\", void 0);\n __decorate([\n Property(50)\n ], Layout.prototype, \"springLength\", void 0);\n __decorate([\n Complex({ left: 50, top: 50, right: 0, bottom: 0 }, Margin)\n ], Layout.prototype, \"margin\", void 0);\n __decorate([\n Property('Auto')\n ], Layout.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Auto')\n ], Layout.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('TopToBottom')\n ], Layout.prototype, \"orientation\", void 0);\n __decorate([\n Property('Auto')\n ], Layout.prototype, \"connectionDirection\", void 0);\n __decorate([\n Property('Default')\n ], Layout.prototype, \"connectorSegments\", void 0);\n __decorate([\n Property('None')\n ], Layout.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Layout.prototype, \"getLayoutInfo\", void 0);\n __decorate([\n Property()\n ], Layout.prototype, \"getBranch\", void 0);\n __decorate([\n Property()\n ], Layout.prototype, \"bounds\", void 0);\n __decorate([\n Property(true)\n ], Layout.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('')\n ], Layout.prototype, \"root\", void 0);\n return Layout;\n}(ChildProperty));\nexport { Layout };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Node } from '../objects/node';\nimport { Connector, StraightSegment } from '../objects/connector';\nimport { Point } from '../primitives/point';\nimport { BpmnSubEvent } from '../objects/node';\nimport { PointPort } from '../objects/port';\nimport { rotatePoint, cloneObject } from '../utility/base-util';\nimport { Rect } from '../primitives/rect';\nimport { getPolygonPath } from '../utility/path-util';\nimport { canOutConnect, canInConnect, canAllowDrop } from '../utility/constraints-util';\nimport { transformPointByMatrix, rotateMatrix, identityMatrix } from '../primitives/matrix';\nimport { NodeConstraints, DiagramEvent } from './../enum/enum';\nimport { TextElement } from '../core/elements/text-element';\nimport { contains } from './actions';\n/**\n * Defines the interactive tools\n */\nvar ToolBase = /** @class */ (function () {\n /**\n * Initializes the tool\n * @param command Command that is corresponding to the current action\n */\n function ToolBase(command, protectChange) {\n if (protectChange === void 0) { protectChange = false; }\n /**\n * Command that is corresponding to the current action\n */\n this.commandHandler = null;\n /**\n * Sets/Gets whether the interaction is being done\n */\n this.inAction = false;\n /**\n * Sets/Gets the protect change\n */\n this.isProtectChange = false;\n /**\n * Sets/Gets the current element that is under mouse\n */\n this.currentElement = null;\n this.blocked = false;\n this.isTooltipVisible = false;\n /** @private */\n this.childTable = {};\n /**\n * Sets/Gets the previous object when mouse down\n */\n this.undoElement = { nodes: [], connectors: [] };\n this.undoParentElement = { nodes: [], connectors: [] };\n this.commandHandler = command;\n this.isProtectChange = protectChange;\n }\n ToolBase.prototype.startAction = function (currentElement) {\n this.currentElement = currentElement;\n this.inAction = true;\n };\n ToolBase.prototype.mouseDown = function (args) {\n this.currentElement = args.source;\n this.startPosition = this.currentPosition = this.prevPosition = args.position;\n this.isTooltipVisible = true;\n this.startAction(args.source);\n this.commandHandler.startTransaction(this.isProtectChange);\n };\n ToolBase.prototype.mouseMove = function (args) {\n this.currentPosition = args.position;\n //this.currentElement = currentElement;\n return !this.blocked;\n };\n ToolBase.prototype.mouseUp = function (args) {\n this.currentPosition = args.position;\n // this.currentElement = currentElement;\n this.isTooltipVisible = false;\n this.commandHandler.endTransaction(this.isProtectChange);\n //At the end\n this.endAction();\n };\n ToolBase.prototype.endAction = function () {\n if (!this.isTooltipVisible) {\n this.commandHandler.closeTooltip();\n }\n this.commandHandler = null;\n this.currentElement = null;\n this.currentPosition = null;\n this.inAction = false;\n this.blocked = false;\n };\n ToolBase.prototype.mouseWheel = function (args) {\n this.currentPosition = args.position;\n };\n ToolBase.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n ToolBase.prototype.updateSize = function (shape, startPoint, endPoint, corner, initialBounds, angle) {\n var horizontalsnap = { snapped: false, offset: 0, left: false, right: false };\n var verticalsnap = { snapped: false, offset: 0, top: false, bottom: false };\n var difx = this.currentPosition.x - this.startPosition.x;\n var dify = this.currentPosition.y - this.startPosition.y;\n var snapEnabled = (!(shape instanceof TextElement)) && this.commandHandler.snappingModule\n && this.commandHandler.snappingModule.canSnap();\n var snapLine = snapEnabled ? this.commandHandler.snappingModule.getLayer() : null;\n var rotateAngle = (shape instanceof TextElement) ? angle : shape.rotateAngle;\n var matrix;\n matrix = identityMatrix();\n rotateMatrix(matrix, -rotateAngle, 0, 0);\n var x = shape.offsetX;\n var y = shape.offsetY;\n var w = shape.width;\n var h = shape.height;\n x = x - w * shape.pivot.x;\n y = y - h * shape.pivot.y;\n var deltaWidth = 0;\n var deltaHeight = 0;\n var diff;\n var width = (shape instanceof TextElement) ? shape.actualSize.width : shape.width;\n var height = (shape instanceof TextElement) ? shape.actualSize.height : shape.height;\n switch (corner) {\n case 'ResizeWest':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n deltaHeight = 1;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapLeft(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) : difx;\n dify = 0;\n deltaWidth = (initialBounds.width - difx) / width;\n break;\n case 'ResizeEast':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapRight(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) :\n difx;\n dify = 0;\n deltaWidth = (initialBounds.width + difx) / width;\n deltaHeight = 1;\n break;\n case 'ResizeNorth':\n deltaWidth = 1;\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapTop(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) :\n dify;\n deltaHeight = (initialBounds.height - dify) / height;\n break;\n case 'ResizeSouth':\n deltaWidth = 1;\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapBottom(horizontalsnap, verticalsnap, snapLine, diff.x, diff.y, shape, endPoint === startPoint, initialBounds) :\n dify;\n deltaHeight = (initialBounds.height + dify) / height;\n break;\n case 'ResizeNorthEast':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapRight(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) :\n difx;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapTop(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) :\n dify;\n deltaWidth = (initialBounds.width + difx) / width;\n deltaHeight = (initialBounds.height - dify) / height;\n break;\n case 'ResizeNorthWest':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = !snapEnabled ? dify : this.commandHandler.snappingModule.snapTop(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds);\n difx = !snapEnabled ? difx : this.commandHandler.snappingModule.snapLeft(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds);\n deltaWidth = (initialBounds.width - difx) / width;\n deltaHeight = (initialBounds.height - dify) / height;\n break;\n case 'ResizeSouthEast':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = !snapEnabled ? dify : this.commandHandler.snappingModule.snapBottom(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds);\n difx = !snapEnabled ? difx : this.commandHandler.snappingModule.snapRight(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds);\n deltaHeight = (initialBounds.height + dify) / height;\n deltaWidth = (initialBounds.width + difx) / width;\n break;\n case 'ResizeSouthWest':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapBottom(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) : dify;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapLeft(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) : difx;\n deltaWidth = (initialBounds.width - difx) / width;\n deltaHeight = (initialBounds.height + dify) / height;\n break;\n }\n return { width: deltaWidth, height: deltaHeight };\n };\n ToolBase.prototype.getPivot = function (corner) {\n switch (corner) {\n case 'ResizeWest':\n return { x: 1, y: 0.5 };\n case 'ResizeEast':\n return { x: 0, y: 0.5 };\n case 'ResizeNorth':\n return { x: 0.5, y: 1 };\n case 'ResizeSouth':\n return { x: 0.5, y: 0 };\n case 'ResizeNorthEast':\n return { x: 0, y: 1 };\n case 'ResizeNorthWest':\n return { x: 1, y: 1 };\n case 'ResizeSouthEast':\n return { x: 0, y: 0 };\n case 'ResizeSouthWest':\n return { x: 1, y: 0 };\n }\n return { x: 0.5, y: 0.5 };\n };\n return ToolBase;\n}());\nexport { ToolBase };\n/**\n * Helps to select the objects\n */\nvar SelectTool = /** @class */ (function (_super) {\n __extends(SelectTool, _super);\n function SelectTool(commandHandler, protectChange, action) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.action = action;\n return _this;\n }\n SelectTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n _super.prototype.mouseDown.call(this, args);\n };\n SelectTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n //draw selected region\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n this.commandHandler.drawSelectionRectangle(rect.x, rect.y, rect.width, rect.height);\n }\n return !this.blocked;\n };\n SelectTool.prototype.mouseUp = function (args) {\n //rubber band selection\n if (Point.equals(this.currentPosition, this.prevPosition) === false && this.inAction) {\n var region = Rect.toBounds([this.prevPosition, this.currentPosition]);\n this.commandHandler.doRubberBandSelection(region);\n }\n else {\n //single selection\n var arrayNodes = this.commandHandler.getSelectedObject();\n if (!this.commandHandler.hasSelection() || !args.info || !args.info.ctrlKey) {\n this.commandHandler.clearSelection(args.source === null ? true : false);\n if (this.action === 'LabelSelect') {\n this.commandHandler.labelSelect(args.source, args.sourceWrapper);\n }\n else if (args.source) {\n this.commandHandler.selectObjects([args.source], false, arrayNodes);\n }\n }\n else {\n //handling multiple selection\n if (args && args.source) {\n if (!this.commandHandler.isSelected(args.source)) {\n this.commandHandler.selectObjects([args.source], true);\n }\n else {\n if (args.clickCount === 1) {\n this.commandHandler.unSelect(args.source);\n }\n }\n }\n }\n }\n this.inAction = false;\n _super.prototype.mouseUp.call(this, args);\n };\n SelectTool.prototype.mouseLeave = function (args) {\n if (this.inAction) {\n this.mouseUp(args);\n }\n };\n return SelectTool;\n}(ToolBase));\nexport { SelectTool };\n/**\n * Helps to edit the selected connectors\n */\nvar ConnectTool = /** @class */ (function (_super) {\n __extends(ConnectTool, _super);\n function ConnectTool(commandHandler, endPoint) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.endPoint = endPoint;\n return _this;\n }\n ConnectTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n this.undoElement = undefined;\n if (!(this instanceof ConnectorDrawingTool)) {\n this.undoElement = cloneObject(args.source);\n }\n _super.prototype.mouseDown.call(this, args);\n var oldValue;\n var connectors;\n if (args.source && args.source.connectors) {\n oldValue = { x: this.prevPosition.x, y: this.prevPosition.y };\n connectors = args.source.connectors[0];\n }\n // Sets the selected segment \n if (this.endPoint === 'BezierSourceThumb' || this.endPoint === 'BezierTargetThumb') {\n for (var i = 0; i < connectors.segments.length; i++) {\n var segment = connectors.segments[i];\n var segmentpoint1 = !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1;\n var segmentpoint2 = !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2;\n if (contains(this.currentPosition, segmentpoint1, connectors.hitPadding) ||\n contains(this.currentPosition, segmentpoint2, connectors.hitPadding)) {\n this.selectedSegment = segment;\n }\n }\n }\n this.currentPosition = args.position;\n };\n ConnectTool.prototype.mouseUp = function (args) {\n this.commandHandler.updateSelector();\n this.commandHandler.removeSnap();\n this.commandHandler.changeAnnotationDrag(args);\n if ((!(this instanceof ConnectorDrawingTool)) && ((this.endPoint === 'ConnectorSourceEnd' &&\n args.source.connectors.length &&\n ((!Point.equals(args.source.connectors[0].sourcePoint, this.undoElement.connectors[0].sourcePoint) ||\n (args.source.connectors[0].sourceID !== this.undoElement.connectors[0].sourceID)))) ||\n (this.endPoint === 'ConnectorTargetEnd' &&\n ((!Point.equals(args.source.connectors[0].targetPoint, this.undoElement.connectors[0].targetPoint))\n || (args.source.connectors[0].targetID !== this.undoElement.connectors[0].targetID))))) {\n var oldValues = void 0;\n var connector = void 0;\n if (args.source && args.source.connectors) {\n oldValues = {\n x: this.prevPosition.x, y: this.prevPosition.y\n };\n connector = args.source.connectors[0];\n }\n var targetPortName = void 0;\n var targetNodeNode = void 0;\n if (args.target) {\n var target = this.commandHandler.findTarget(args.targetWrapper, args.target, this.endPoint === 'ConnectorSourceEnd', true);\n (target instanceof PointPort) ? targetPortName = target.id : targetNodeNode = target.id;\n }\n var arg = {\n connector: connector, state: 'Completed', targetNode: targetNodeNode,\n oldValue: oldValues, newValue: oldValues, cancel: false, targetPort: targetPortName\n };\n var trigger = this.endPoint === 'ConnectorSourceEnd' ? DiagramEvent.sourcePointChange : DiagramEvent.targetPointChange;\n this.commandHandler.triggerEvent(trigger, arg);\n this.commandHandler.removeTerminalSegment(connector, true);\n if (this.undoElement && args.source) {\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'ConnectionChanged', redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement),\n category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n }\n }\n else if (!(this instanceof ConnectorDrawingTool) &&\n (this.endPoint === 'BezierTargetThumb' || this.endPoint === 'BezierSourceThumb')) {\n if (this.undoElement && args.source) {\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'SegmentChanged', redoObject: obj, undoObject: this.undoElement, category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n }\n }\n _super.prototype.mouseUp.call(this, args);\n };\n ConnectTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if ((!(this instanceof ConnectorDrawingTool)) && ((this.endPoint === 'ConnectorSourceEnd' &&\n Point.equals(args.source.connectors[0].sourcePoint, this.undoElement.connectors[0].sourcePoint)) ||\n (this.endPoint === 'ConnectorTargetEnd' &&\n Point.equals(args.source.connectors[0].targetPoint, this.undoElement.connectors[0].targetPoint)))) {\n var oldValue = void 0;\n var connectors = void 0;\n if (args.source && args.source.connectors) {\n oldValue = { x: this.prevPosition.x, y: this.prevPosition.y };\n connectors = args.source.connectors[0];\n }\n var targetPort = void 0;\n var targetNode = void 0;\n if (args.target) {\n targetNode = args.target.id;\n var target = this.commandHandler.findTarget(args.targetWrapper, args.target, this.endPoint === 'ConnectorSourceEnd', true);\n (target instanceof PointPort || target instanceof BpmnSubEvent) ? targetPort = target.id : targetNode = target.id;\n }\n var arg = {\n connector: connectors, state: 'Start', targetNode: targetNode,\n oldValue: oldValue, newValue: oldValue, cancel: false, targetPort: targetPort\n };\n var trigger = this.endPoint === 'ConnectorSourceEnd' ?\n DiagramEvent.sourcePointChange : DiagramEvent.targetPointChange;\n this.commandHandler.triggerEvent(trigger, arg);\n }\n this.currentPosition = args.position;\n if (this.currentPosition && this.prevPosition) {\n var diffX = this.currentPosition.x - this.prevPosition.x;\n var diffY = this.currentPosition.y - this.prevPosition.y;\n var newValue = void 0;\n var oldValue = void 0;\n this.currentPosition = this.commandHandler.snapConnectorEnd(this.currentPosition);\n var connector = void 0;\n if (args.source && args.source.connectors) {\n newValue = {\n x: this.currentPosition.x, y: this.currentPosition.y,\n };\n oldValue = {\n x: this.prevPosition.x, y: this.prevPosition.y\n };\n connector = args.source.connectors[0];\n }\n var targetPortId = void 0;\n var targetNodeId = void 0;\n if (args.target) {\n var target = this.commandHandler.findTarget(args.targetWrapper, args.target, this.endPoint === 'ConnectorSourceEnd', true);\n (target instanceof PointPort) ? targetPortId = target.id : targetNodeId = target.id;\n }\n var arg = {\n connector: connector, state: 'Progress', targetNode: targetNodeId,\n oldValue: oldValue, newValue: newValue, cancel: false, targetPort: targetPortId\n };\n if (!(this instanceof ConnectorDrawingTool)) {\n var trigger = this.endPoint === 'ConnectorSourceEnd' ?\n DiagramEvent.sourcePointChange : DiagramEvent.targetPointChange;\n this.commandHandler.triggerEvent(trigger, arg);\n }\n if (!arg.cancel && this.inAction && this.endPoint !== undefined && diffX !== 0 || diffY !== 0) {\n this.blocked = !this.commandHandler.dragConnectorEnds(this.endPoint, args.source, this.currentPosition, this.selectedSegment, args.target, targetPortId);\n this.commandHandler.updateSelector();\n if (args.target && ((this.endPoint === 'ConnectorSourceEnd' && canOutConnect(args.target))\n || (this.endPoint === 'ConnectorTargetEnd' && canInConnect(args.target)))) {\n if (this.commandHandler.canDisconnect(this.endPoint, args, targetPortId, targetNodeId)) {\n this.commandHandler.disConnect(args.source, this.endPoint);\n }\n this.commandHandler.connect(this.endPoint, args);\n }\n else if (this.endPoint.indexOf('Bezier') === -1) {\n this.commandHandler.disConnect(args.source, this.endPoint);\n this.commandHandler.updateSelector();\n }\n }\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.position);\n this.commandHandler.showTooltip(args.source, args.position, content, 'ConnectTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n ConnectTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n ConnectTool.prototype.getTooltipContent = function (position) {\n return 'X:' + Math.round(position.x) + ' ' + 'Y:' + Math.round(position.y);\n };\n ConnectTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n this.prevPosition = null;\n this.endPoint = null;\n };\n return ConnectTool;\n}(ToolBase));\nexport { ConnectTool };\n/**\n * Drags the selected objects\n */\nvar MoveTool = /** @class */ (function (_super) {\n __extends(MoveTool, _super);\n function MoveTool(commandHandler, objType) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.currentTarget = null;\n _this.objectType = objType;\n return _this;\n }\n MoveTool.prototype.mouseDown = function (args) {\n if (args.source instanceof Node || args.source instanceof Connector) {\n this.commandHandler.selectObjects([args.source], args.info && args.info.ctrlKey);\n var selectedObject = { nodes: [], connectors: [] };\n if (args.source instanceof Node) {\n selectedObject.nodes.push(cloneObject(args.source));\n }\n else {\n selectedObject.connectors.push(cloneObject(args.source));\n }\n this.undoElement = cloneObject(selectedObject);\n }\n else {\n this.undoElement = cloneObject(args.source);\n }\n this.undoParentElement = this.commandHandler.getSubProcess(args.source);\n if (this.objectType === 'Port') {\n this.portId = args.sourceWrapper.id;\n }\n _super.prototype.mouseDown.call(this, args);\n this.initialOffset = { x: 0, y: 0 };\n };\n MoveTool.prototype.mouseUp = function (args) {\n var obj;\n var historyAdded = false;\n var redoObject = { nodes: [], connectors: [] };\n if (this.objectType !== 'Port') {\n if (args.source instanceof Node || args.source instanceof Connector) {\n if (args.source instanceof Node) {\n redoObject.nodes.push(cloneObject(args.source));\n }\n else {\n redoObject.connectors.push(cloneObject(args.source));\n }\n obj = cloneObject(redoObject);\n var wrapper = args.source.wrapper;\n obj.offsetX = wrapper.offsetX;\n obj.offsetY = wrapper.offsetY;\n }\n else {\n obj = cloneObject(args.source);\n }\n if (obj.offsetX !== this.undoElement.offsetX || obj.offsetY !== this.undoElement.offsetY) {\n var oldValues = void 0;\n var newValues = void 0;\n if (args.source) {\n newValues = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n oldValues = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n }\n var arg = {\n source: args.source, state: 'Completed', oldValue: oldValues, newValue: newValues,\n target: this.currentTarget, targetPosition: this.currentPosition, allowDrop: true, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.positionChange, arg);\n this.commandHandler.startGroupAction();\n historyAdded = true;\n var entry = {\n type: 'PositionChanged',\n redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement), category: 'Internal'\n };\n if (obj.nodes[0] && obj.nodes[0].processId) {\n var entry_1 = {\n type: 'SizeChanged', category: 'Internal',\n undoObject: this.undoParentElement, redoObject: this.commandHandler.getSubProcess(args.source)\n };\n this.commandHandler.addHistoryEntry(entry_1);\n }\n this.commandHandler.addHistoryEntry(entry);\n }\n var snappedPoint = this.commandHandler.snapPoint(this.prevPosition, this.currentPosition, 0, 0);\n this.commandHandler.removeSnap();\n this.commandHandler.removeHighlighter();\n if (args.source && this.currentTarget && canAllowDrop(this.currentTarget) &&\n this.commandHandler.isDroppable(args.source, this.currentTarget)) {\n this.commandHandler.drop(this.currentElement, this.currentTarget, this.currentPosition);\n var arg = {\n element: args.source, target: this.currentTarget, position: this.currentPosition, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.drop, arg);\n }\n if (args.source && this.currentTarget) {\n this.commandHandler.dropAnnotation(args.source, this.currentTarget);\n }\n this.commandHandler.updateSelector();\n if (historyAdded) {\n this.commandHandler.endGroupAction();\n }\n }\n else {\n redoObject.nodes.push(cloneObject(args.source));\n obj = cloneObject(redoObject);\n var entry = {\n type: 'PortPositionChanged', changeObjectId: this.portId,\n redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement), category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n }\n _super.prototype.mouseUp.call(this, args);\n };\n MoveTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n var isSame = false;\n if (args.source instanceof Node || args.source instanceof Connector) {\n if (args.source instanceof Node) {\n if (args.source.offsetX === this.undoElement.nodes[0].offsetX &&\n args.source.offsetY === this.undoElement.nodes[0].offsetY) {\n isSame = true;\n }\n }\n else {\n if (Point.equals(args.source.sourcePoint, this.undoElement.connectors[0].sourcePoint) &&\n Point.equals(args.source.targetPoint, this.undoElement.connectors[0].targetPoint)) {\n isSame = true;\n }\n }\n }\n else {\n if (args.source.wrapper.offsetX === this.undoElement.wrapper.offsetX &&\n args.source.wrapper.offsetY === this.undoElement.wrapper.offsetY) {\n isSame = true;\n }\n }\n var oldValues;\n if (args.source) {\n oldValues = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n }\n var arg = {\n source: args.source, state: 'Start', oldValue: oldValues, newValue: oldValues,\n target: args.target, targetPosition: args.position, allowDrop: true, cancel: false\n };\n if (isSame) {\n this.commandHandler.triggerEvent(DiagramEvent.positionChange, arg);\n }\n this.currentPosition = args.position;\n if (this.objectType !== 'Port') {\n var x = this.currentPosition.x - this.prevPosition.x;\n var y = this.currentPosition.y - this.prevPosition.y;\n var diffX = this.initialOffset.x + (this.currentPosition.x - this.prevPosition.x);\n var diffY = this.initialOffset.y + (this.currentPosition.y - this.prevPosition.y);\n this.commandHandler.dragOverElement(args, this.currentPosition);\n this.commandHandler.disConnect(args.source);\n this.commandHandler.removeSnap();\n var oldValues_1;\n var newValues = void 0;\n var snappedPoint = this.commandHandler.snapPoint(this.prevPosition, this.currentPosition, diffX, diffY);\n this.initialOffset.x = diffX - snappedPoint.x;\n this.initialOffset.y = diffY - snappedPoint.y;\n if (args.source) {\n oldValues_1 = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n newValues = {\n offsetX: args.source.wrapper.offsetX + snappedPoint.x,\n offsetY: args.source.wrapper.offsetY + snappedPoint.y\n };\n }\n if (this.currentTarget && args.target !== this.currentTarget) {\n this.commandHandler.removeChildFromBPmn(args.source, args.target, this.currentTarget);\n }\n this.currentTarget = args.target;\n var arg_1 = {\n source: args.source, state: 'Progress', oldValue: oldValues_1, newValue: newValues,\n target: args.target, targetPosition: args.position, allowDrop: true, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.positionChange, arg_1);\n if (!arg_1.cancel) {\n this.blocked = !this.commandHandler.dragSelectedObjects(snappedPoint.x, snappedPoint.y);\n var blocked = !(this.commandHandler.mouseOver(this.currentElement, this.currentTarget, this.currentPosition));\n this.blocked = this.blocked || blocked;\n }\n if (this.currentTarget && (args.source !== this.currentTarget) &&\n this.commandHandler.isDroppable(args.source, this.currentTarget)) {\n this.commandHandler.drawHighlighter(this.currentTarget);\n }\n else {\n this.commandHandler.removeHighlighter();\n }\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.source);\n this.commandHandler.showTooltip(args.source, args.position, content, 'MoveTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n }\n else {\n this.commandHandler.portDrag(args.source, args.sourceWrapper, args.position.x - this.prevPosition.x, args.position.y - this.prevPosition.y);\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n MoveTool.prototype.getTooltipContent = function (node) {\n return 'X:' + Math.round(node.wrapper.bounds.x) + ' ' + 'Y:' + Math.round(node.wrapper.bounds.y);\n };\n MoveTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n MoveTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n this.currentTarget = null;\n this.prevPosition = null;\n };\n return MoveTool;\n}(ToolBase));\nexport { MoveTool };\n/**\n * Rotates the selected objects\n */\nvar RotateTool = /** @class */ (function (_super) {\n __extends(RotateTool, _super);\n function RotateTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n RotateTool.prototype.mouseDown = function (args) {\n this.undoElement = cloneObject(args.source);\n if (this.undoElement.nodes[0] && this.undoElement.nodes[0].children) {\n var objects = [];\n var nodes = this.commandHandler.getAllDescendants(this.undoElement.nodes[0], objects);\n for (var i = 0; i < nodes.length; i++) {\n var node = this.commandHandler.cloneChild(nodes[i].id);\n this.childTable[nodes[i].id] = cloneObject(node);\n }\n }\n _super.prototype.mouseDown.call(this, args);\n };\n RotateTool.prototype.mouseUp = function (args) {\n if (this.undoElement.rotateAngle !== args.source.wrapper.rotateAngle) {\n var oldValue = { rotateAngle: args.source.wrapper.rotateAngle };\n var arg = {\n source: args.source, state: 'Completed', oldValue: oldValue,\n newValue: oldValue, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.rotateChange, arg);\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'RotationChanged', redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement), category: 'Internal',\n childTable: this.childTable\n };\n this.commandHandler.addHistoryEntry(entry);\n this.commandHandler.updateSelector();\n }\n _super.prototype.mouseUp.call(this, args);\n };\n RotateTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.undoElement.rotateAngle === args.source.wrapper.rotateAngle) {\n var oldValue_1 = { rotateAngle: args.source.wrapper.rotateAngle };\n var arg_2 = {\n source: args.source, state: 'Start', oldValue: oldValue_1, newValue: oldValue_1, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.rotateChange, arg_2);\n }\n this.currentPosition = args.position;\n var refPoint = { x: this.currentElement.wrapper.offsetX, y: this.currentElement.wrapper.offsetY };\n var angle = Point.findAngle(refPoint, this.currentPosition) + 90;\n var snapAngle = this.commandHandler.snapAngle(angle);\n angle = snapAngle !== 0 ? snapAngle : angle;\n angle = (angle + 360) % 360;\n var oldValue = { rotateAngle: args.source.wrapper.rotateAngle };\n var newValue = { rotateAngle: angle };\n var arg = {\n source: args.source, state: 'Progress', oldValue: oldValue,\n newValue: newValue, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.rotateChange, arg);\n if (!arg.cancel) {\n this.blocked = !(this.commandHandler.rotateSelectedItems(angle - this.currentElement.wrapper.rotateAngle));\n }\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.source);\n this.commandHandler.showTooltip(args.source, args.position, content, 'RotateTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n return !this.blocked;\n };\n RotateTool.prototype.getTooltipContent = function (node) {\n return Math.round((node.rotateAngle % 360)).toString() + '\\xB0';\n };\n RotateTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n RotateTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n return RotateTool;\n}(ToolBase));\nexport { RotateTool };\n/**\n * Scales the selected objects\n */\nvar ResizeTool = /** @class */ (function (_super) {\n __extends(ResizeTool, _super);\n function ResizeTool(commandHandler, corner) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.initialBounds = new Rect();\n _this.corner = corner;\n return _this;\n }\n ResizeTool.prototype.mouseDown = function (args) {\n this.undoElement = cloneObject(args.source);\n this.undoParentElement = this.commandHandler.getSubProcess(args.source);\n _super.prototype.mouseDown.call(this, args);\n if (this.undoElement.nodes[0] && this.undoElement.nodes[0].children) {\n var elements = [];\n var nodes = this.commandHandler.getAllDescendants(this.undoElement.nodes[0], elements);\n for (var i = 0; i < nodes.length; i++) {\n var node = this.commandHandler.cloneChild(nodes[i].id);\n this.childTable[nodes[i].id] = cloneObject(node);\n }\n }\n _super.prototype.mouseDown.call(this, args);\n this.initialBounds.x = args.source.wrapper.offsetX;\n this.initialBounds.y = args.source.wrapper.offsetY;\n this.initialBounds.height = args.source.wrapper.actualSize.height;\n this.initialBounds.width = args.source.wrapper.actualSize.width;\n };\n ResizeTool.prototype.mouseUp = function (args) {\n this.commandHandler.removeSnap();\n if (this.undoElement.offsetX !== args.source.wrapper.offsetX || this.undoElement.offsetY !== args.source.wrapper.offsetY) {\n var deltaValues = this.updateSize(args.source, this.currentPosition, this.prevPosition, this.corner, this.initialBounds);\n this.blocked = this.scaleObjects(deltaValues.width, deltaValues.height, this.corner, this.currentPosition, this.prevPosition, args.source);\n var oldValue = {\n offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY,\n width: args.source.wrapper.actualSize.width, height: args.source.wrapper.actualSize.height\n };\n var arg = {\n source: args.source, state: 'Completed',\n oldValue: oldValue, newValue: oldValue, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.sizeChange, arg);\n var obj = cloneObject(args.source);\n var entry = {\n type: 'SizeChanged', redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement), category: 'Internal',\n childTable: this.childTable\n };\n this.commandHandler.startGroupAction();\n this.commandHandler.addHistoryEntry(entry);\n if (obj.nodes[0] && obj.nodes[0].processId) {\n var entry_2 = {\n type: 'SizeChanged', redoObject: this.commandHandler.getSubProcess(args.source),\n undoObject: this.undoParentElement, category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry_2);\n }\n this.commandHandler.endGroupAction();\n }\n _super.prototype.mouseUp.call(this, args);\n return !this.blocked;\n };\n ResizeTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.undoElement.offsetX === args.source.wrapper.offsetX && this.undoElement.offsetY === args.source.wrapper.offsetY) {\n var oldValue = {\n offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY,\n width: args.source.wrapper.actualSize.width, height: args.source.wrapper.actualSize.height\n };\n var arg = {\n source: args.source, state: 'Start', oldValue: oldValue, newValue: this.currentElement, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.sizeChange, arg);\n }\n this.currentPosition = args.position;\n var x = this.currentPosition.x - this.startPosition.x;\n var y = this.currentPosition.y - this.startPosition.y;\n var changes = { x: x, y: y };\n changes = rotatePoint(-this.currentElement.wrapper.rotateAngle, undefined, undefined, changes);\n var sx = (this.currentElement.wrapper.actualSize.width + changes.x) / this.currentElement.wrapper.actualSize.width;\n var sy = (this.currentElement.wrapper.actualSize.height + changes.y) / this.currentElement.wrapper.actualSize.height;\n changes = this.getChanges(changes);\n this.commandHandler.removeSnap();\n var deltaValues = this.updateSize(args.source, this.startPosition, this.currentPosition, this.corner, this.initialBounds);\n this.blocked = !(this.scaleObjects(deltaValues.width, deltaValues.height, this.corner, this.startPosition, this.currentPosition, args.source));\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.source);\n this.commandHandler.showTooltip(args.source, args.position, content, 'ResizeTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n ResizeTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n ResizeTool.prototype.getTooltipContent = function (node) {\n return 'W:' + Math.round(node.wrapper.bounds.width) + ' ' + 'H:' + Math.round(node.wrapper.bounds.height);\n };\n ResizeTool.prototype.getChanges = function (change) {\n switch (this.corner) {\n case 'ResizeEast':\n return { x: change.x, y: 0 };\n case 'ResizeSouthEast':\n return change;\n case 'ResizeSouth':\n return { x: 0, y: change.y };\n case 'ResizeNorth':\n return { x: 0, y: -change.y };\n case 'ResizeNorthEast':\n return { x: change.x, y: -change.y };\n case 'ResizeNorthWest':\n return { x: -change.x, y: -change.y };\n case 'ResizeWest':\n return { x: -change.x, y: 0 };\n case 'ResizeSouthWest':\n return { x: -change.x, y: change.y };\n }\n return change;\n };\n /**\n * Updates the size with delta width and delta height using scaling.\n */\n /**\n * Aspect ratio used to resize the width or height based on resizing the height or width\n */\n ResizeTool.prototype.scaleObjects = function (deltaWidth, deltaHeight, corner, startPoint, endPoint, source) {\n if (source.nodes.length === 1 && source.nodes[0].constraints & NodeConstraints.AspectRatio) {\n if (corner === 'ResizeWest' || corner === 'ResizeEast' || corner === 'ResizeNorth' || corner === 'ResizeSouth') {\n if (!(deltaHeight === 1 && deltaWidth === 1)) {\n deltaHeight = deltaWidth = Math.max(deltaHeight === 1 ? 0 : deltaHeight, deltaWidth === 1 ? 0 : deltaWidth);\n }\n }\n else if (startPoint !== endPoint) {\n deltaHeight = deltaWidth = Math.max(deltaHeight, deltaWidth);\n }\n else {\n deltaHeight = deltaWidth = 0;\n }\n }\n var oldValue = {\n offsetX: source.offsetX, offsetY: source.offsetY,\n width: source.width, height: source.height\n };\n this.blocked = this.commandHandler.scaleSelectedItems(deltaWidth, deltaHeight, this.getPivot(this.corner));\n var newValue = {\n offsetX: source.offsetX, offsetY: source.offsetY,\n width: source.width, height: source.height\n };\n var arg = { source: source, state: 'Progress', oldValue: oldValue, newValue: newValue, cancel: false };\n this.commandHandler.triggerEvent(DiagramEvent.sizeChange, arg);\n if (arg.cancel) {\n this.commandHandler.scaleSelectedItems(1 / deltaWidth, 1 / deltaHeight, this.getPivot(this.corner));\n }\n return this.blocked;\n };\n return ResizeTool;\n}(ToolBase));\nexport { ResizeTool };\n/**\n * Draws a node that is defined by the user\n */\nvar NodeDrawingTool = /** @class */ (function (_super) {\n __extends(NodeDrawingTool, _super);\n function NodeDrawingTool(commandHandler, sourceObject) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.sourceObject = sourceObject;\n return _this;\n }\n NodeDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n };\n NodeDrawingTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n var checkBoundaryConstraints;\n var node = {\n offsetX: this.currentPosition.x, width: 3, height: 3,\n offsetY: this.currentPosition.y\n };\n if (!this.drawingObject) {\n this.drawingObject = this.commandHandler.drawObject(node);\n }\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, rect);\n if (checkBoundaryConstraints) {\n this.commandHandler.updateNodeDimension(this.drawingObject, rect);\n }\n }\n return checkBoundaryConstraints;\n };\n NodeDrawingTool.prototype.mouseUp = function (args) {\n var checkBoundaryConstraints;\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, rect);\n if (this.drawingObject && this.drawingObject instanceof Node) {\n this.commandHandler.addObjectToDiagram(this.drawingObject);\n this.drawingObject = null;\n }\n _super.prototype.mouseUp.call(this, args);\n this.inAction = false;\n };\n NodeDrawingTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n NodeDrawingTool.prototype.mouseLeave = function (args) {\n if (this.inAction) {\n this.mouseUp(args);\n }\n };\n return NodeDrawingTool;\n}(ToolBase));\nexport { NodeDrawingTool };\n/**\n * Draws a connector that is defined by the user\n */\nvar ConnectorDrawingTool = /** @class */ (function (_super) {\n __extends(ConnectorDrawingTool, _super);\n function ConnectorDrawingTool(commandHandler, endPoint, sourceObject) {\n var _this = _super.call(this, commandHandler, endPoint) || this;\n _this.sourceObject = sourceObject;\n return _this;\n }\n ConnectorDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n };\n ConnectorDrawingTool.prototype.mouseMove = function (args) {\n if (this.inAction) {\n var connector = {\n sourcePoint: this.currentPosition, targetPoint: this.currentPosition,\n };\n if (!this.drawingObject) {\n this.drawingObject = this.commandHandler.drawObject(connector);\n }\n args.source = this.drawingObject;\n if (args.target) {\n this.commandHandler.connect(this.endPoint, args);\n }\n this.endPoint = 'ConnectorTargetEnd';\n }\n if (!this.inAction) {\n this.commandHandler.updateSelector();\n if (args.source && args.sourceWrapper) {\n this.commandHandler.renderHighlighter(args, true);\n }\n }\n _super.prototype.mouseMove.call(this, args);\n return !this.blocked;\n };\n ConnectorDrawingTool.prototype.mouseUp = function (args) {\n if (this.drawingObject && this.drawingObject instanceof Connector) {\n this.commandHandler.addObjectToDiagram(this.drawingObject);\n this.drawingObject = null;\n }\n this.inAction = false;\n _super.prototype.mouseUp.call(this, args);\n };\n ConnectorDrawingTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n ConnectorDrawingTool.prototype.mouseLeave = function (args) {\n if (this.inAction) {\n this.mouseUp(args);\n }\n };\n return ConnectorDrawingTool;\n}(ConnectTool));\nexport { ConnectorDrawingTool };\nvar TextDrawingTool = /** @class */ (function (_super) {\n __extends(TextDrawingTool, _super);\n function TextDrawingTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n TextDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.commandHandler.clearSelection();\n var node = {\n shape: { type: 'Text' },\n offsetX: this.currentPosition.x, width: 50, height: 20,\n offsetY: this.currentPosition.y\n };\n if (!args.source) {\n this.drawingNode = this.commandHandler.drawObject(node);\n }\n };\n TextDrawingTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (!this.drawingNode) {\n var node = {\n shape: { type: 'Text' }, offsetX: this.currentPosition.x, width: 30, height: 30,\n style: { strokeDashArray: '2 2', fill: 'transparent' }, offsetY: this.currentPosition.y\n };\n this.drawingNode = this.commandHandler.drawObject(node);\n }\n else {\n this.drawingNode.style.strokeColor = 'black';\n this.drawingNode.style.strokeDashArray = '2 2';\n this.drawingNode.style.fill = 'transparent';\n }\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n this.commandHandler.updateNodeDimension(this.drawingNode, rect);\n }\n return !this.blocked;\n };\n TextDrawingTool.prototype.mouseUp = function (args) {\n if (this.drawingNode) {\n this.drawingNode.style.strokeColor = 'none';\n this.drawingNode.style.fill = 'none';\n }\n else {\n this.drawingNode = args.source;\n }\n if (this.drawingNode && (this.drawingNode instanceof Node || this.drawingNode instanceof Connector)) {\n this.commandHandler.addText(this.drawingNode, this.currentPosition);\n }\n _super.prototype.mouseUp.call(this, args);\n this.inAction = false;\n };\n TextDrawingTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n return TextDrawingTool;\n}(ToolBase));\nexport { TextDrawingTool };\n/**\n * Pans the diagram control on drag\n */\nvar ZoomPanTool = /** @class */ (function (_super) {\n __extends(ZoomPanTool, _super);\n function ZoomPanTool(commandHandler, zoom) {\n var _this = _super.call(this, commandHandler) || this;\n _this.zooming = zoom;\n return _this;\n }\n ZoomPanTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n };\n ZoomPanTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n if (!this.zooming && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var difX = this.currentPosition.x - this.prevPosition.x;\n var difY = this.currentPosition.y - this.prevPosition.y;\n this.commandHandler.scroll(difX, difY, this.currentPosition);\n }\n else if (args.moveTouches.length >= 2) {\n var startTouch0 = args.startTouches[0];\n var startTouch1 = args.startTouches[1];\n var moveTouch0 = args.moveTouches[0];\n var moveTouch1 = args.moveTouches[1];\n var scale = this.getDistance(moveTouch0, moveTouch1) / this.getDistance(startTouch0, startTouch1);\n var focusPoint = args.position;\n this.commandHandler.zoom(scale, 0, 0, focusPoint);\n this.updateTouch(startTouch0, moveTouch0);\n this.updateTouch(startTouch1, moveTouch1);\n }\n }\n return !this.blocked;\n };\n ZoomPanTool.prototype.mouseUp = function (args) {\n _super.prototype.mouseUp.call(this, args);\n this.inAction = false;\n };\n ZoomPanTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n ZoomPanTool.prototype.getDistance = function (touch1, touch2) {\n var x = touch2.pageX - touch1.pageX;\n var y = touch2.pageY - touch1.pageY;\n return Math.sqrt((x * x) + (y * y));\n };\n ZoomPanTool.prototype.updateTouch = function (startTouch, moveTouch) {\n startTouch.pageX = moveTouch.pageX;\n startTouch.pageY = moveTouch.pageY;\n };\n return ZoomPanTool;\n}(ToolBase));\nexport { ZoomPanTool };\n/**\n * Animate the layout during expand and collapse\n */\nvar ExpandTool = /** @class */ (function (_super) {\n __extends(ExpandTool, _super);\n function ExpandTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n ExpandTool.prototype.mouseUp = function (args) {\n this.commandHandler.initExpand(args);\n _super.prototype.mouseUp.call(this, args);\n };\n return ExpandTool;\n}(ToolBase));\nexport { ExpandTool };\n/**\n * Opens the annotation hypeLink at mouse up\n */\nvar LabelTool = /** @class */ (function (_super) {\n __extends(LabelTool, _super);\n function LabelTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n LabelTool.prototype.mouseUp = function (args) {\n var win = window.open(args.sourceWrapper.hyperlink.link, '_blank');\n win.focus();\n _super.prototype.mouseUp.call(this, args);\n };\n return LabelTool;\n}(ToolBase));\nexport { LabelTool };\n/**\n * Draws a Polygon shape node dynamically using polygon Tool\n */\nvar PolygonDrawingTool = /** @class */ (function (_super) {\n __extends(PolygonDrawingTool, _super);\n function PolygonDrawingTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n PolygonDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n if (!this.drawingObject) {\n this.startPoint = { x: this.startPosition.x, y: this.startPosition.y };\n var node = {\n offsetX: this.currentPosition.x,\n offsetY: this.currentPosition.y,\n width: 5, height: 5,\n style: { strokeColor: 'black', strokeWidth: 1 },\n shape: {\n type: 'Basic',\n shape: 'Polygon',\n points: [{ x: this.startPoint.x, y: this.startPoint.y }, { x: this.currentPosition.x, y: this.currentPosition.y }]\n }\n };\n this.drawingObject = this.commandHandler.drawObject(node);\n }\n else {\n var pt = void 0;\n var obj = this.drawingObject.shape;\n pt = obj.points[obj.points.length - 1];\n pt = { x: pt.x, y: pt.y };\n this.drawingObject.shape.points.push(pt);\n }\n };\n PolygonDrawingTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n var obj = this.drawingObject.shape;\n if (this.drawingObject && this.currentPosition) {\n obj.points[obj.points.length - 1].x = this.currentPosition.x;\n obj.points[obj.points.length - 1].y = this.currentPosition.y;\n this.drawingObject.wrapper.children[0].data = getPolygonPath(this.drawingObject.shape.points);\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var region = Rect.toBounds(this.drawingObject.shape.points);\n this.commandHandler.updateNodeDimension(this.drawingObject, region);\n }\n }\n }\n return true;\n };\n PolygonDrawingTool.prototype.mouseUp = function (args, dblClickArgs) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n this.inAction = false;\n if (this.drawingObject) {\n this.commandHandler.addObjectToDiagram(this.drawingObject);\n }\n }\n this.endAction();\n };\n PolygonDrawingTool.prototype.mouseWheel = function (args) {\n _super.prototype.mouseWheel.call(this, args);\n this.mouseMove(args);\n };\n PolygonDrawingTool.prototype.endAction = function () {\n this.inAction = false;\n this.drawingObject = null;\n };\n return PolygonDrawingTool;\n}(ToolBase));\nexport { PolygonDrawingTool };\n/**\n * Draws a PolyLine Connector dynamically using PolyLine Drawing Tool\n */\nvar PolyLineDrawingTool = /** @class */ (function (_super) {\n __extends(PolyLineDrawingTool, _super);\n function PolyLineDrawingTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n PolyLineDrawingTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n var obj = this.drawingObject;\n obj.targetPoint = this.currentPosition;\n this.commandHandler.updateConnectorPoints(obj);\n }\n return true;\n };\n PolyLineDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n if (!this.drawingObject) {\n var connector = {\n id: 'Connector',\n type: 'Straight',\n sourcePoint: this.currentPosition,\n targetPoint: this.currentPosition\n };\n this.drawingObject = this.commandHandler.drawObject(connector);\n }\n else {\n var drawObject = this.drawingObject;\n var segment = void 0;\n segment = new StraightSegment(drawObject, 'segments', { type: 'Straight' }, true);\n segment.point = this.currentPosition;\n drawObject.segments[drawObject.segments.length - 1] = segment;\n }\n };\n PolyLineDrawingTool.prototype.mouseWheel = function (args) {\n _super.prototype.mouseWheel.call(this, args);\n this.mouseMove(args);\n };\n PolyLineDrawingTool.prototype.mouseUp = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n if (this.drawingObject) {\n this.commandHandler.addObjectToDiagram(this.drawingObject);\n }\n }\n this.endAction();\n };\n PolyLineDrawingTool.prototype.endAction = function () {\n this.drawingObject = null;\n this.inAction = false;\n };\n return PolyLineDrawingTool;\n}(ToolBase));\nexport { PolyLineDrawingTool };\nvar LabelDragTool = /** @class */ (function (_super) {\n __extends(LabelDragTool, _super);\n function LabelDragTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n LabelDragTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n this.undoElement = cloneObject(args.source);\n this.annotationId = args.sourceWrapper.id;\n _super.prototype.mouseDown.call(this, args);\n };\n LabelDragTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n var difx = this.currentPosition.x - this.prevPosition.x;\n var dify = this.currentPosition.y - this.prevPosition.y;\n var node = args.source;\n if (node instanceof Node) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, -node.rotateAngle, 0, 0);\n var diff = transformPointByMatrix(matrix, { x: difx, y: dify });\n difx = diff.x;\n dify = diff.y;\n }\n if (this.inAction) {\n this.commandHandler.labelDrag(args.source, args.sourceWrapper, difx, dify);\n this.commandHandler.updateSelector();\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n LabelDragTool.prototype.mouseUp = function (args) {\n var redoValue = args.source;\n this.inAction = false;\n var entryValue = {\n type: 'AnnotationPropertyChanged',\n changeObjectId: this.annotationId, undoObject: cloneObject(this.undoElement),\n category: 'Internal', redoObject: cloneObject(redoValue)\n };\n this.commandHandler.addHistoryEntry(entryValue);\n _super.prototype.mouseUp.call(this, args);\n };\n LabelDragTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n return LabelDragTool;\n}(ToolBase));\nexport { LabelDragTool };\nvar LabelResizeTool = /** @class */ (function (_super) {\n __extends(LabelResizeTool, _super);\n function LabelResizeTool(commandHandler, corner) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.corner = corner;\n return _this;\n }\n LabelResizeTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n var object = (args.source.nodes.length) ?\n args.source.nodes[0] : args.source.connectors[0];\n this.annotationId = args.source.wrapper.children[0].id;\n this.undoElement = cloneObject(object);\n var annotation = args.source.wrapper.children[0];\n this.initialBounds = {\n x: annotation.offsetX,\n y: annotation.offsetY,\n width: annotation.actualSize.width,\n height: annotation.actualSize.height\n };\n _super.prototype.mouseDown.call(this, args);\n };\n LabelResizeTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n this.resizeObject(args);\n }\n return !this.blocked;\n };\n LabelResizeTool.prototype.mouseUp = function (args) {\n var redoObject = (args.source.nodes.length) ?\n args.source.nodes[0] : args.source.connectors[0];\n this.inAction = false;\n var entry = {\n type: 'AnnotationPropertyChanged', changeObjectId: this.annotationId,\n redoObject: cloneObject(redoObject), undoObject: cloneObject(this.undoElement), category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n _super.prototype.mouseUp.call(this, args);\n };\n LabelResizeTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n LabelResizeTool.prototype.resizeObject = function (args) {\n var object;\n object = (args.source.nodes.length) ? args.source.nodes[0] : args.source.connectors[0];\n var textElement = args.source.wrapper.children[0];\n var deltaWidth;\n var deltaHeight;\n var center = { x: textElement.offsetX, y: textElement.offsetY };\n var rotateAngle = textElement.rotateAngle;\n rotateAngle += (object instanceof Node) ? object.rotateAngle : 0;\n rotateAngle = (rotateAngle + 360) % 360;\n var trans = identityMatrix();\n rotateMatrix(trans, rotateAngle, center.x, center.y);\n var corner = this.corner.slice(5);\n var pivot = this.updateSize(textElement, this.startPosition, this.currentPosition, corner, this.initialBounds, rotateAngle);\n var x = textElement.offsetX - textElement.actualSize.width * textElement.pivot.x;\n var y = textElement.offsetY - textElement.actualSize.height * textElement.pivot.y;\n var pivotPoint = this.getPivot(corner);\n pivotPoint = { x: x + textElement.actualSize.width * pivotPoint.x, y: y + textElement.actualSize.height * pivotPoint.y };\n var point = transformPointByMatrix(trans, pivotPoint);\n pivot.x = point.x;\n pivot.y = point.y;\n deltaWidth = pivot.width;\n deltaHeight = pivot.height;\n deltaWidth = (deltaWidth < 0) ? 1 : deltaWidth;\n deltaHeight = (deltaHeight < 0) ? 1 : deltaHeight;\n this.commandHandler.labelResize(object, args.source.annotation, deltaWidth, deltaHeight, pivot, args.source);\n this.commandHandler.updateSelector();\n };\n return LabelResizeTool;\n}(ToolBase));\nexport { LabelResizeTool };\nvar LabelRotateTool = /** @class */ (function (_super) {\n __extends(LabelRotateTool, _super);\n function LabelRotateTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n LabelRotateTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n this.annotationId = args.source.wrapper.children[0].id;\n var object = (args.source.nodes.length) ?\n args.source.nodes[0] : args.source.connectors[0];\n this.undoElement = cloneObject(object);\n _super.prototype.mouseDown.call(this, args);\n };\n LabelRotateTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (args.source) {\n if (this.inAction) {\n var object = args.source.nodes[0] ? args.source.nodes[0] :\n args.source.connectors[0];\n var annotation = void 0;\n annotation = (args.source.annotation);\n this.commandHandler.labelRotate(object, annotation, this.currentPosition, args.source);\n this.commandHandler.updateSelector();\n }\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n LabelRotateTool.prototype.mouseUp = function (args) {\n this.inAction = false;\n var redoEntry = (args.source.nodes.length) ?\n args.source.nodes[0] : args.source.connectors[0];\n var entryObject = {\n type: 'AnnotationPropertyChanged', changeObjectId: this.annotationId,\n redoObject: cloneObject(redoEntry),\n undoObject: cloneObject(this.undoElement), category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entryObject);\n _super.prototype.mouseUp.call(this, args);\n };\n LabelRotateTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n return LabelRotateTool;\n}(ToolBase));\nexport { LabelRotateTool };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Point } from '../primitives/point';\nimport { Rect } from '../primitives/rect';\nimport { intersect3 } from '../utility/diagram-util';\nimport { cloneObject } from '../utility/base-util';\nimport { contains } from './actions';\nimport { getOppositeDirection } from '../utility/connector';\nimport { StraightSegment, OrthogonalSegment } from '../objects/connector';\nimport { ToolBase } from './tool';\n/**\n * Multiple segments editing for Connector\n */\nvar ConnectorEditing = /** @class */ (function (_super) {\n __extends(ConnectorEditing, _super);\n function ConnectorEditing(commandHandler, endPoint) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.endPoint = endPoint;\n return _this;\n }\n ConnectorEditing.prototype.mouseDown = function (args) {\n this.inAction = true;\n this.undoElement = cloneObject(args.source);\n _super.prototype.mouseDown.call(this, args);\n var connectors;\n if (args.source && args.source.connectors) {\n connectors = args.source.connectors[0];\n }\n // Sets the selected segment \n for (var i = 0; i < connectors.segments.length; i++) {\n var segment = connectors.segments[i];\n if (this.endPoint === 'OrthoThumb') {\n for (var j = 0; j < segment.points.length - 1; j++) {\n var segPoint = { x: 0, y: 0 };\n segPoint.x = ((segment.points[j].x + segment.points[j + 1].x) / 2);\n segPoint.y = ((segment.points[j].y + segment.points[j + 1].y) / 2);\n if (contains(this.currentPosition, segPoint, 30)) {\n this.selectedSegment = segment;\n this.segmentIndex = j;\n }\n }\n }\n else {\n if (contains(this.currentPosition, segment.point, 10)) {\n this.selectedSegment = segment;\n }\n }\n }\n };\n ConnectorEditing.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n this.currentPosition = args.position;\n if (this.currentPosition && this.prevPosition) {\n var diffY = this.currentPosition.y - this.prevPosition.y;\n var diffX = this.currentPosition.x - this.prevPosition.x;\n this.currentPosition = this.commandHandler.snapConnectorEnd(this.currentPosition);\n var connector = void 0;\n if (args.source && args.source.connectors) {\n connector = args.source.connectors[0];\n }\n if (this.inAction && this.endPoint !== undefined && diffX !== 0 || diffY !== 0) {\n if (this.endPoint === 'OrthoThumb') {\n this.blocked = !this.dragOrthogonalSegment(connector, this.selectedSegment, this.currentPosition, this.segmentIndex);\n }\n else {\n var tx = this.currentPosition.x - this.selectedSegment.point.x;\n var ty = this.currentPosition.y - this.selectedSegment.point.y;\n var index = connector.segments.indexOf(this.selectedSegment);\n this.blocked = !this.commandHandler.dragControlPoint(connector, tx, ty, false, index);\n }\n this.commandHandler.updateSelector();\n }\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n ConnectorEditing.prototype.mouseUp = function (args) {\n var connector;\n if (args.source && args.source.connectors) {\n connector = args.source.connectors[0];\n }\n if (args && args.source && args.info && args.info.ctrlKey && args.info.shiftKey && connector.type === 'Straight') {\n this.addOrRemoveSegment(connector, this.currentPosition);\n }\n else {\n if (this.endPoint === 'OrthoThumb' && this.selectedSegment) {\n var index = connector.segments.indexOf(this.selectedSegment);\n var prev = connector.segments[index - 1];\n var next = connector.segments[index + 1];\n if (index === connector.segments.length - 2\n && this.updateLastSegment(connector, this.selectedSegment)) {\n connector.segments.splice(connector.segments.length - 2, 1);\n }\n else {\n if (prev && Math.abs(prev.length) < 5) {\n if (index !== 1) {\n this.removePrevSegment(connector, index);\n }\n }\n else if (next) {\n var len = Point.distancePoints(next.points[0], next.points[1]);\n var length_1 = ((next.length || next.length === 0) ? next.length : len);\n if ((Math.abs(length_1) <= 5)) {\n this.removeNextSegment(connector, index);\n }\n }\n }\n this.commandHandler.updateEndPoint(connector);\n }\n }\n if (this.undoElement) {\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'SegmentChanged', redoObject: obj, undoObject: this.undoElement, category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n }\n _super.prototype.mouseUp.call(this, args);\n };\n ConnectorEditing.prototype.removePrevSegment = function (connector, index) {\n var first = connector.segments[index - 2];\n var next = connector.segments[index + 1];\n var length = (next.length || next.length === 0) ? next.length : Point.distancePoints(next.points[0], next.points[1]);\n if (!(length <= 5)) {\n var last = connector.segments[index + 1];\n connector.segments.splice(index - 1, 2);\n var segment = this.selectedSegment;\n if (segment.direction === 'Left' || segment.direction === 'Right') {\n first.points[first.points.length - 1].x = last.points[0].x;\n last.points[0].y = first.points[first.points.length - 1].y;\n }\n else {\n first.points[first.points.length - 1].y = last.points[0].y;\n last.points[0].x = first.points[first.points.length - 1].x;\n }\n if (segment.length || segment.length === 0) {\n this.findSegmentDirection(first);\n }\n this.findSegmentDirection(last);\n }\n };\n ConnectorEditing.prototype.findSegmentDirection = function (segment) {\n if (segment.direction && (segment.length || segment.length === 0)) {\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n segment.direction = Point.direction(segment.points[0], segment.points[segment.points.length - 1]);\n }\n };\n ConnectorEditing.prototype.removeNextSegment = function (connector, index) {\n var segment = this.selectedSegment;\n var first = connector.segments[index - 1];\n var last = connector.segments[index + 2];\n var next = connector.segments[index + 1];\n if (next.length || next.length === 0) {\n connector.segments.splice(index, 2);\n if (segment.direction === 'Top' || segment.direction === 'Bottom') {\n last.points[0].y = segment.points[0].y;\n first.points[first.points.length - 1].x = last.points[0].x;\n }\n else {\n last.points[0].x = segment.points[0].x;\n first.points[first.points.length - 1].y = last.points[0].y;\n }\n }\n else {\n connector.segments.splice(index + 1, 1);\n if (segment.direction === 'Top' || segment.direction === 'Bottom') {\n first.points[first.points.length - 1].x = next.points[next.points.length - 1].x;\n }\n else {\n first.points[first.points.length - 1].y = next.points[next.points.length - 1].y;\n }\n this.findSegmentDirection(first);\n segment.length = segment.direction = null;\n }\n if (first && last) {\n first.length = Point.distancePoints(first.points[0], last.points[0]);\n first.direction = Point.direction(first.points[0], last.points[0]);\n if (last.length || last.length === 0) {\n last.length = Point.distancePoints(first.points[first.points.length - 1], last.points[last.points.length - 1]);\n var point1 = first.points;\n var point2 = last.points;\n last.direction = Point.direction(point1[point1.length - 1], point2[point2.length - 1]);\n }\n }\n };\n ConnectorEditing.prototype.addOrRemoveSegment = function (connector, point) {\n var updateSeg;\n var segmentIndex;\n for (var i = 0; i < connector.segments.length; i++) {\n var segment = (connector.segments)[i];\n if (contains(point, segment.point, connector.hitPadding)) {\n segmentIndex = i;\n updateSeg = true;\n }\n }\n if (updateSeg && segmentIndex !== undefined) {\n if (connector.segments && connector.segments[segmentIndex] && connector.segments[segmentIndex].type === 'Straight') {\n var segment = connector.segments[segmentIndex];\n var previous = connector.segments[segmentIndex + 1];\n if (previous) {\n connector.segments.splice(segmentIndex, 1);\n previous.points[0] = segment.points[0];\n }\n }\n }\n else {\n var index = this.findIndex(connector, point);\n if (connector.segments && connector.segments[index] && connector.segments[index].type === 'Straight') {\n var segment = connector.segments[index];\n var newseg = new StraightSegment(connector, 'segments', { type: 'Straight', point: point }, true);\n newseg.points[0] = segment.points[0];\n newseg.points[1] = point;\n segment.points[0] = point;\n connector.segments.splice(index, 0, newseg);\n updateSeg = true;\n }\n }\n if (updateSeg) {\n this.commandHandler.updateEndPoint(connector);\n }\n };\n ConnectorEditing.prototype.findIndex = function (connector, point) {\n var intersectingSegs = [];\n for (var i = 0; i < connector.segments.length; i++) {\n var segment = connector.segments[i];\n var rect = Rect.toBounds([segment.points[0], segment.points[1]]);\n rect.Inflate(connector.hitPadding);\n if (rect.containsPoint(point)) {\n intersectingSegs.push(segment);\n }\n }\n if (intersectingSegs.length === 1) {\n return connector.segments.indexOf(intersectingSegs[0]);\n }\n else {\n var ratio = void 0;\n var min = void 0;\n var index = void 0;\n var seg = void 0;\n var v = void 0;\n var h = void 0;\n for (var i = 0; i < intersectingSegs.length; i++) {\n seg = intersectingSegs[i];\n v = (point.y - seg.points[0].y) / (seg.points[1].y - point.y);\n h = (point.x - seg.points[0].x) / (seg.points[1].x - point.x);\n ratio = Math.abs(v - h);\n if (i === 0) {\n min = ratio;\n index = 0;\n }\n if (ratio < min) {\n min = ratio;\n index = i;\n }\n }\n return connector.segments.indexOf(intersectingSegs[index]);\n }\n };\n ConnectorEditing.prototype.dragOrthogonalSegment = function (obj, segment, point, segmentIndex) {\n var segmentPoint = { x: 0, y: 0 };\n segmentPoint.x = ((segment.points[segmentIndex].x + segment.points[segmentIndex + 1].x) / 2);\n segmentPoint.y = ((segment.points[segmentIndex].y + segment.points[segmentIndex + 1].y) / 2);\n var ty = point.y - segmentPoint.y;\n var tx = point.x - segmentPoint.x;\n var index = obj.segments.indexOf(segment);\n var update = false;\n var orientation = (segment.points[0].y.toFixed(2) === segment.points[1].y.toFixed(2)) ? 'horizontal' : 'vertical';\n var prevSegment;\n var nextSegment;\n if (index !== -1) {\n if (index === 0 && obj.segments.length === 1 && segment.points.length === 2) {\n index = this.addSegments(obj, segment, tx, ty, index);\n update = true;\n }\n else if (index === obj.segments.length - 1 && (segment.direction === null || segment.length === null)) {\n index = this.addTerminalSegment(obj, segment, tx, ty, segmentIndex);\n update = true;\n }\n else if (index === 0) {\n index = this.insertFirstSegment(obj, segment, tx, ty, index);\n update = true;\n }\n if (update) {\n this.selectedSegment = segment = obj.segments[index];\n this.segmentIndex = 0;\n }\n this.updateAdjacentSegments(obj, index, tx, ty);\n this.commandHandler.updateEndPoint(obj);\n }\n return true;\n };\n ConnectorEditing.prototype.addSegments = function (obj, segment, tx, ty, coll) {\n var index;\n var direction;\n var segments = [];\n var len;\n var length = Point.distancePoints(segment.points[0], segment.points[1]);\n var segmentDirection = Point.direction(segment.points[0], segment.points[1]);\n segments.push(new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: segmentDirection, length: length / 4 }, true));\n direction = (segment.points[0].y === segment.points[1].y) ? ((ty > 0) ? 'Bottom' : 'Top') : ((tx > 0) ? 'Right' : 'Left');\n len = (segment.points[0].x === segment.points[1].x) ? ty : tx;\n segments.push(new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: direction, length: len }, true));\n segments.push(new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: segmentDirection, length: length / 2 }, true));\n obj.segments = segments.concat(obj.segments);\n index = coll + 2;\n return index;\n };\n ConnectorEditing.prototype.insertFirstSegment = function (obj, segment, tx, ty, coll) {\n var direction;\n var length;\n var segments = [];\n var segValues;\n var index;\n var insertseg;\n if (obj.sourcePortID && segment.length && obj.segments[0].points.length > 2) {\n obj.segments.splice(0, 1);\n var prev = void 0;\n for (var i = 0; i < segment.points.length - 1; i++) {\n var len = Point.distancePoints(segment.points[i], segment.points[i + 1]);\n var dir = Point.direction(segment.points[i], segment.points[i + 1]);\n insertseg = new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: dir, length: len }, true);\n if (insertseg.length === 0) {\n if (prev && (prev.direction === 'Top' || prev.direction === 'Bottom')) {\n insertseg.direction = tx > 0 ? 'Right' : 'Left';\n }\n else {\n insertseg.direction = ty > 0 ? 'Bottom' : 'Top';\n }\n }\n prev = insertseg;\n segments.push(insertseg);\n }\n obj.segments = segments.concat(obj.segments);\n index = 1;\n }\n else {\n segValues = { type: 'Orthogonal', direction: segment.direction, length: segment.length / 3 };\n segments.push(new OrthogonalSegment(obj, 'segments', segValues, true));\n if (segment.direction === 'Bottom' || segment.direction === 'Top') {\n length = Math.abs(tx);\n direction = tx > 0 ? 'Right' : 'Left';\n }\n else {\n length = Math.abs(ty);\n direction = ty > 0 ? 'Bottom' : 'Top';\n }\n insertseg = new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: direction, length: length }, true);\n segments.push(insertseg);\n var nextseg = obj.segments[1];\n if (nextseg && nextseg.length) {\n nextseg.length = (direction !== nextseg.direction) ? nextseg.length + length : nextseg.length - length;\n }\n index = 2;\n segment.length = 2 * segment.length / 3;\n obj.segments = segments.concat(obj.segments);\n }\n return index;\n };\n ConnectorEditing.prototype.updateAdjacentSegments = function (obj, index, tx, ty) {\n var current = obj.segments[index];\n var endPoint = current.points[current.points.length - 1];\n var startPoint = current.points[0];\n var isNextUpdate = true;\n if (current.type === 'Orthogonal') {\n current.points[0] = startPoint;\n current.points[current.points.length - 1] = endPoint;\n var prev = obj.segments[index - 1];\n if (prev) {\n isNextUpdate = this.updatePreviousSegment(tx, ty, obj, index);\n }\n if (obj.segments.length - 1 > index && isNextUpdate) {\n var nextSegment = obj.segments[index + 1];\n this.updateNextSegment(obj, current, nextSegment, tx, ty);\n }\n }\n };\n ConnectorEditing.prototype.addTerminalSegment = function (connector, segment, tx, ty, segmentIndex) {\n var index = connector.segments.indexOf(segment);\n var first;\n var insertseg;\n var len;\n var dir;\n connector.segments.pop();\n var last = connector.segments[connector.segments.length - 1];\n first = (last && last.type === 'Orthogonal') ? last : null;\n for (var i = 0; i < segment.points.length - 2; i++) {\n len = Point.distancePoints(segment.points[i], segment.points[i + 1]);\n dir = Point.direction(segment.points[i], segment.points[i + 1]);\n insertseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: len, direction: dir }, true);\n connector.segments.push(insertseg);\n first = insertseg;\n }\n var sec = segmentIndex;\n if (segment.points.length === 2 || sec === segment.points.length - 2) {\n if (first) {\n first.length += 5;\n }\n if (sec !== undefined) {\n var newseg = void 0;\n len = 2 * Point.distancePoints(segment.points[segment.points.length - 2], segment.points[segment.points.length - 1]) / 3;\n dir = Point.direction(segment.points[segment.points.length - 2], segment.points[segment.points.length - 1]);\n newseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: len, direction: dir });\n connector.segments.push(newseg);\n }\n }\n var lastseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n connector.segments.push(lastseg);\n this.commandHandler.updateEndPoint(connector);\n index = index + segmentIndex;\n return index;\n };\n ConnectorEditing.prototype.updatePortSegment = function (prev, connector, index, tx, ty) {\n if (index === 1 && prev.points.length === 2 && prev.length < 0) {\n var source = connector.sourceWrapper.corners;\n var current = connector.segments[index];\n var next = connector.segments[index + 1];\n var newseg = void 0;\n var segment = [];\n newseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: 13, direction: prev.direction });\n segment.push(newseg);\n var len = void 0;\n if (current.direction === 'Left') {\n len = (current.points[0].x - (source.middleLeft.x - 20));\n }\n else if (current.direction === 'Right') {\n len = ((source.middleRight.x + 20) - current.points[0].x);\n }\n else if (current.direction === 'Bottom') {\n len = ((source.bottomCenter.y + 20) - current.points[0].y);\n }\n else {\n len = (current.points[0].y - (source.topCenter.y - 20));\n }\n var dir = current.direction;\n newseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: len, direction: current.direction });\n segment.push(newseg);\n current.length = current.length - len;\n if (next && next.length && next.direction) {\n if (next.direction === prev.direction) {\n next.length -= 13;\n }\n else if (next.direction === getOppositeDirection(prev.direction)) {\n next.length += 13;\n }\n }\n connector.segments = segment.concat(connector.segments);\n this.selectedSegment = connector.segments[3];\n }\n };\n ConnectorEditing.prototype.updatePreviousSegment = function (tx, ty, connector, index) {\n var current = connector.segments[index];\n var prev = connector.segments[index - 1];\n var firstSegment = (index === 1) ? true : false;\n prev.points[prev.points.length - 1] = current.points[0];\n var isSourceNode = (connector.sourceID && connector.sourcePortID === '') ? false : true;\n var isNextUpdate = true;\n if (prev.type === 'Orthogonal') {\n if (prev.direction === 'Bottom') {\n prev.length += ty;\n }\n else if (prev.direction === 'Top') {\n prev.length -= ty;\n }\n else if (prev.direction === 'Right') {\n prev.length += tx;\n }\n else {\n prev.length -= tx;\n }\n if (connector.sourcePortID !== '' && prev.length < 0) {\n this.updatePortSegment(prev, connector, index, tx, ty);\n }\n else if (connector.sourceID && connector.sourcePortID === '' && prev.length < 0 && index === 1) {\n isNextUpdate = false;\n this.updateFirstSegment(connector, current);\n }\n if (isSourceNode) {\n this.changeSegmentDirection(prev);\n }\n }\n return isNextUpdate;\n };\n ConnectorEditing.prototype.changeSegmentDirection = function (segment) {\n if (segment.length < 0) {\n segment.direction = getOppositeDirection(segment.direction);\n segment.length *= -1;\n }\n };\n ConnectorEditing.prototype.updateNextSegment = function (obj, current, next, tx, ty) {\n var pt = current.points[current.points.length - 1];\n next.points[0] = current.points[current.points.length - 1];\n if (next && next.type === 'Orthogonal') {\n if (next.length || next.length === 0) {\n if (next.direction === 'Left' || next.direction === 'Right') {\n if (tx !== 0) {\n next.length = (next.direction === 'Right') ? next.length - tx : next.length + tx;\n if (next.length || next.length === 0) {\n this.changeSegmentDirection(next);\n }\n }\n }\n else {\n if (ty !== 0) {\n next.length = (next.direction === 'Bottom') ? next.length - ty : next.length + ty;\n if (next.length || next.length === 0) {\n this.changeSegmentDirection(next);\n }\n }\n }\n }\n }\n };\n ConnectorEditing.prototype.updateFirstSegment = function (connector, selectedSegment) {\n var index = connector.segments.indexOf(selectedSegment);\n var insertfirst = false;\n var current = connector.segments[index];\n var prev = connector.segments[index - 1];\n var con = connector;\n var sourcePoint;\n if (prev.length < 0 && connector.sourceID) {\n var sourceNode = connector.sourceWrapper.corners;\n var segments = [];\n var segValues = void 0;\n var removeCurrentPrev = false;\n this.changeSegmentDirection(current);\n var next = connector.segments[index + 1];\n var nextNext = connector.segments[index + 2];\n if (next) {\n this.changeSegmentDirection(next);\n }\n if (nextNext) {\n this.changeSegmentDirection(nextNext);\n }\n switch (prev.direction) {\n case 'Top':\n case 'Bottom':\n sourcePoint = (current.length > 0 && current.direction === 'Left') ? sourceNode.middleLeft : sourceNode.middleRight;\n if (current.length > sourceNode.width / 2) {\n if (Math.abs(prev.length) < sourceNode.height / 2) {\n prev.length = Point.distancePoints(sourceNode.center, prev.points[prev.points.length - 1]);\n current.points[0].x = sourcePoint.x;\n current.length = Point.distancePoints(current.points[0], current.points[current.points.length - 1]);\n current.length -= 20;\n insertfirst = true;\n }\n }\n else {\n if (next && next.direction && next.length) {\n next.points[0].y = sourcePoint.y;\n next.points[0].x = next.points[next.points.length - 1].x = (current.direction === 'Right') ?\n sourcePoint.x + 20 : sourcePoint.x - 20;\n }\n insertfirst = true;\n removeCurrentPrev = true;\n }\n break;\n case 'Left':\n case 'Right':\n sourcePoint = (current.length > 0 && current.direction === 'Top') ? sourceNode.topCenter : sourceNode.bottomCenter;\n if (current.length > sourceNode.height / 2) {\n if (Math.abs(prev.length) < sourceNode.width / 2) {\n prev.length = Point.distancePoints(sourceNode.center, prev.points[prev.points.length - 1]);\n current.points[0].y = sourcePoint.y;\n current.length = Point.distancePoints(current.points[0], current.points[current.points.length - 1]);\n current.length -= 20;\n insertfirst = true;\n }\n }\n else {\n if (next && next.direction && next.length) {\n next.points[0].x = sourcePoint.x;\n next.points[0].y = next.points[next.points.length - 1].y = (current.direction === 'Bottom') ?\n sourcePoint.y + 20 : sourcePoint.y - 20;\n }\n insertfirst = true;\n removeCurrentPrev = true;\n }\n break;\n }\n this.changeSegmentDirection(prev);\n this.changeSegmentDirection(current);\n if (insertfirst) {\n segValues = { type: 'Orthogonal', direction: current.direction, length: 20 };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n if (removeCurrentPrev) {\n if (next && next.direction && next.length) {\n next.length = Point.distancePoints(next.points[0], next.points[next.points.length - 1]);\n }\n if (nextNext && nextNext.direction && nextNext.length) {\n nextNext.length = Point.distancePoints(next.points[next.points.length - 1], nextNext.points[nextNext.points.length - 1]);\n }\n connector.segments.splice(index - 1, 2);\n }\n connector.segments = segments.concat(connector.segments);\n }\n this.selectedSegment = ((removeCurrentPrev) ? connector.segments[index - 1] :\n connector.segments[index + 1]);\n this.commandHandler.updateEndPoint(connector);\n }\n };\n ConnectorEditing.prototype.updateLastSegment = function (connector, selectedSegment) {\n if (connector.targetID && connector.targetPortID === '') {\n var line1Start = void 0;\n var line1End = void 0;\n var line2Start = void 0;\n var line2End = void 0;\n var corners = connector.targetWrapper.corners;\n var firstSegPoint = selectedSegment.points[0];\n var lastSegPoint = selectedSegment.points[selectedSegment.points.length - 1];\n if (selectedSegment.direction === 'Right' || selectedSegment.direction === 'Left') {\n line1Start = { x: firstSegPoint.x, y: firstSegPoint.y };\n line1End = {\n x: (selectedSegment.direction === 'Left') ? lastSegPoint.x - corners.width / 2 : lastSegPoint.x + corners.width / 2,\n y: lastSegPoint.y\n };\n line2Start = { x: corners.center.x, y: corners.center.y - corners.height };\n line2End = { x: corners.center.x, y: corners.center.y + corners.height };\n }\n else {\n line1Start = { x: firstSegPoint.x, y: firstSegPoint.y };\n line1End = {\n x: lastSegPoint.x,\n y: (selectedSegment.direction === 'Bottom') ? lastSegPoint.y + corners.height / 2 : lastSegPoint.y - corners.height / 2\n };\n line2Start = { x: corners.center.x - corners.width, y: corners.center.y };\n line2End = { x: corners.center.x + corners.width, y: corners.center.y };\n }\n var line1 = { x1: line1Start.x, y1: line1Start.y, x2: line1End.x, y2: line1End.y };\n var line2 = { x1: line2Start.x, y1: line2Start.y, x2: line2End.x, y2: line2End.y };\n return (intersect3(line1, line2).enabled);\n }\n return false;\n };\n /**\n * To destroy the connector editing module\n * @return {void}\n * @private\n */\n ConnectorEditing.prototype.destroy = function () {\n /**\n * Destroys the connector editing module\n */\n };\n /**\n * Get module name.\n */\n ConnectorEditing.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'ConnectorEditingTool';\n };\n return ConnectorEditing;\n}(ToolBase));\nexport { ConnectorEditing };\n","import { Point } from '../primitives/point';\nimport { Container } from '../core/containers/container';\nimport { Connector } from '../objects/connector';\nimport { NodeDrawingTool, ConnectorDrawingTool, TextDrawingTool, PolygonDrawingTool, PolyLineDrawingTool } from './tool';\nimport { Node } from '../objects/node';\nimport { SelectTool, MoveTool, ResizeTool, RotateTool, ConnectTool, ExpandTool, LabelTool, ZoomPanTool } from './tool';\nimport { LabelDragTool, LabelResizeTool, LabelRotateTool } from './tool';\nimport { ConnectorEditing } from './connector-editing';\nimport { Selector } from './selector';\nimport { findToolToActivate, isSelected, getCursor, contains } from './actions';\nimport { DiagramAction, KeyModifiers, Keys, DiagramEvent, DiagramTools } from '../enum/enum';\nimport { isPointOverConnector, findObjectType, insertObject, getObjectFromCollection, getTooltipOffset } from '../utility/diagram-util';\nimport { getObjectType } from '../utility/diagram-util';\nimport { canZoomPan, canDraw, canDrag, canZoomTextEdit } from './../utility/constraints-util';\nimport { canMove, canEnablePointerEvents, canSelect, canEnableToolTip } from './../utility/constraints-util';\nimport { canOutConnect, canInConnect, canAllowDrop, canUserInteract, defaultTool } from './../utility/constraints-util';\nimport { updateTooltip } from '../objects/tooltip';\nimport { PortVisibility, NodeConstraints, ConnectorConstraints } from '../enum/enum';\nimport { addTouchPointer, measureHtmlText } from '../utility/dom-util';\nimport { TextElement } from '../core/elements/text-element';\nimport { Size } from '../primitives/size';\nimport { Rect } from '../primitives/rect';\nimport { identityMatrix, rotateMatrix, transformPointByMatrix } from './../primitives/matrix';\nimport { removeRulerMarkers, drawRulerMarkers, getRulerSize, updateRuler } from '../ruler/ruler';\nimport { canContinuousDraw, canDrawOnce } from '../utility/constraints-util';\nimport { getFunction, cornersPointsBeforeRotation } from '../utility/base-util';\n/**\n * This module handles the mouse and touch events\n */\nvar DiagramEventHandler = /** @class */ (function () {\n /** @private */\n function DiagramEventHandler(diagram, commandHandler) {\n this.currentAction = 'None';\n this.focus = false;\n this.isBlocked = false;\n this.isMouseDown = false;\n this.inAction = false;\n this.doingAutoScroll = false;\n this.diagram = null;\n this.objectFinder = null;\n this.tool = null;\n this.eventArgs = null;\n this.diagram = diagram;\n this.objectFinder = new ObjectFinder();\n this.commandHandler = commandHandler;\n }\n Object.defineProperty(DiagramEventHandler.prototype, \"action\", {\n get: function () {\n return this.currentAction;\n },\n set: function (action) {\n if (action !== this.currentAction) {\n if (this.currentAction === 'PortDraw') {\n this.diagram.tool &= ~DiagramTools.DrawOnce;\n if (this.tool) {\n this.tool.mouseUp({ position: this.currentPosition });\n }\n this.tool = null;\n }\n if (action === 'Rotate' || action === 'LabelRotate') {\n this.diagram.diagramCanvas.classList.add('e-diagram-rotate');\n }\n else if (this.currentAction === 'Rotate' || this.currentAction === 'LabelRotate') {\n this.diagram.diagramCanvas.classList.remove('e-diagram-rotate');\n }\n this.currentAction = action;\n if (this.currentAction !== 'None' && this.currentAction !== 'Select' &&\n !(this.diagram.diagramActions & DiagramAction.TextEdit)) {\n this.diagram.diagramActions = this.diagram.diagramActions | DiagramAction.ToolAction;\n }\n else {\n this.diagram.diagramActions = this.diagram.diagramActions & ~DiagramAction.ToolAction;\n }\n this.diagram.setCursor(this.diagram.getCursor(action, this.inAction));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramEventHandler.prototype, \"blocked\", {\n get: function () {\n return this.isBlocked;\n },\n set: function (blocked) {\n this.isBlocked = blocked;\n if (this.blocked) {\n this.diagram.setCursor('not-allowed');\n }\n else {\n this.diagram.setCursor(this.diagram.getCursor(this.action, this.inAction));\n }\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n DiagramEventHandler.prototype.getMousePosition = function (e) {\n var touchArg;\n var offsetX;\n var offsetY;\n if (e.type.indexOf('touch') !== -1) {\n touchArg = e;\n offsetX = touchArg.changedTouches[0].clientX;\n offsetY = touchArg.changedTouches[0].clientY;\n }\n else {\n offsetX = e.clientX;\n offsetY = e.clientY;\n }\n var position = new Size();\n position = getRulerSize(this.diagram);\n var boundingRect = this.diagram.element.getBoundingClientRect();\n offsetX = offsetX + this.diagram.diagramCanvas.scrollLeft - boundingRect.left - position.width;\n offsetY = offsetY + this.diagram.diagramCanvas.scrollTop - boundingRect.top - position.height;\n offsetX /= this.diagram.scroller.transform.scale;\n offsetY /= this.diagram.scroller.transform.scale;\n offsetX -= this.diagram.scroller.transform.tx;\n offsetY -= this.diagram.scroller.transform.ty;\n return { x: offsetX, y: offsetY };\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.windowResize = function (evt) {\n var _this = this;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n _this.updateViewPortSize(_this.diagram.element);\n }, 300);\n return false;\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.updateViewPortSize = function (element) {\n var container = document.getElementById(element.id);\n if (container) {\n var bounds = container.getBoundingClientRect();\n this.diagram.scroller.setViewPortSize(bounds.width, bounds.height);\n var position = new Size();\n position = getRulerSize(this.diagram);\n var width = this.diagram.getSizeValue(this.diagram.width, position.width);\n var height = this.diagram.getSizeValue(this.diagram.height, position.height);\n this.diagram.diagramCanvas.style.width = width;\n this.diagram.diagramCanvas.style.height = height;\n this.diagram.scroller.setSize();\n this.diagram.transformLayers();\n if (this.diagram.rulerSettings.showRulers) {\n updateRuler(this.diagram);\n }\n }\n };\n /** @private */\n DiagramEventHandler.prototype.canHideResizers = function () {\n return ((this.tool instanceof MoveTool || this.tool instanceof RotateTool) && this.isMouseDown);\n };\n /** @private */\n DiagramEventHandler.prototype.updateCursor = function () {\n if ((this.diagram.selectedItems.nodes.length === 1 || this.diagram.selectedItems.connectors.length === 1)) {\n var list = [];\n list = list.concat(this.diagram.selectedItems.nodes, this.diagram.selectedItems.connectors);\n this.blocked = (this.isMouseDown && list.length === 1 && this.tool instanceof SelectTool && !canMove(list[0]));\n }\n };\n DiagramEventHandler.prototype.isForeignObject = function (target, isTextBox) {\n var foreignobject = target;\n if (foreignobject) {\n while (foreignobject.parentNode !== null) {\n if (typeof foreignobject.className === 'string' &&\n ((!isTextBox && foreignobject.className.indexOf('foreign-object') !== -1) ||\n (isTextBox && foreignobject.className.indexOf('e-diagram-text-edit') !== -1))) {\n return foreignobject;\n }\n else {\n foreignobject = foreignobject.parentNode;\n }\n }\n }\n return null;\n };\n DiagramEventHandler.prototype.isMetaKey = function (evt) {\n return navigator.platform.match('Mac') ? evt.metaKey : evt.ctrlKey;\n };\n DiagramEventHandler.prototype.isDeleteKey = function (key, value) {\n return (navigator.platform.match('Mac') && key === 'Backspace' && value === 'delete');\n };\n DiagramEventHandler.prototype.isMouseOnScrollBar = function (evt) {\n var x = evt.offsetX;\n var y = evt.offsetY;\n var diagramCanvas = this.diagram.diagramCanvas;\n var height = diagramCanvas.offsetHeight;\n var width = diagramCanvas.offsetWidth;\n var topLeft;\n var topRight;\n var bottomLeft;\n var bottomRight;\n var bounds;\n if (height < diagramCanvas.scrollHeight) {\n //default scrollbar width in browser is '17pixels'.\n topLeft = { x: (width - 17), y: 0 };\n topRight = { x: width, y: 0 };\n bottomLeft = { x: (width - 17), y: height };\n bottomRight = { x: width, y: height };\n bounds = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n if (bounds.containsPoint({ x: x, y: y })) {\n return true;\n }\n }\n if (width < diagramCanvas.scrollWidth) {\n topLeft = { x: 0, y: (height - 17) };\n topRight = { x: width, y: (height - 17) };\n bottomLeft = { x: 0, y: height };\n bottomRight = { x: width, y: height };\n bounds = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n if (bounds.containsPoint({ x: x, y: y })) {\n return true;\n }\n }\n return false;\n };\n DiagramEventHandler.prototype.mouseDown = function (evt) {\n this.focus = true;\n var touches;\n touches = evt.touches;\n if (this.isMouseOnScrollBar(evt)) {\n this.isScrolling = true;\n evt.preventDefault();\n return;\n }\n if (!this.checkEditBoxAsTarget(evt) && (canUserInteract(this.diagram)) ||\n (canZoomPan(this.diagram) && !defaultTool(this.diagram))) {\n if (this.action === 'Select' || this.action === 'Drag') {\n this.diagram.updatePortVisibility(this.hoverElement, PortVisibility.Hover, true);\n }\n if (((this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool)\n && (evt.button === 2 || evt.buttons === 2))) {\n var arg = {\n element: this.diagram, position: this.currentPosition, count: evt.buttons, actualObject: this.eventArgs.actualObject\n };\n this.inAction = false;\n this.tool.mouseUp(this.eventArgs);\n }\n else if (((this.inAction === true) && this.isMouseDown === true &&\n (this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool))) {\n this.isMouseDown = true;\n this.eventArgs = {};\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n this.eventArgs.position = this.currentPosition;\n this.tool.mouseDown(this.eventArgs);\n }\n else {\n this.isMouseDown = true;\n this.currentPosition = this.prevPosition = this.getMousePosition(evt);\n this.eventArgs = {};\n if (this.diagram.textEditing && !this.isMouseOnScrollBar(evt)) {\n this.diagram.endEdit();\n this.diagram.textEditing = false;\n }\n var target = void 0;\n var objects = this.objectFinder.findObjectsUnderMouse(this.currentPosition, this.diagram, this.eventArgs, null, this.action);\n var obj = this.objectFinder.findObjectUnderMouse(this.diagram, objects, this.action, this.inAction, this.eventArgs, evt);\n var sourceElement = null;\n if (obj !== null) {\n sourceElement = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n if (sourceElement) {\n target = this.commandHandler.findTarget(sourceElement, obj);\n }\n }\n this.action = this.diagram.findActionToBeDone(obj, sourceElement, this.currentPosition, target);\n //work around - correct it\n var ctrlKey = this.isMetaKey(evt);\n if (ctrlKey && evt.shiftKey && this.diagram.connectorEditingToolModule) {\n this.action = 'SegmentEnd';\n }\n else if ((ctrlKey || evt.shiftKey) && (!canZoomPan(this.diagram))) {\n this.action = 'Select';\n }\n this.tool = this.diagram.getTool(this.action);\n if (!this.tool) {\n this.action = 'Select';\n this.tool = this.diagram.getTool(this.action);\n }\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n if (ctrlKey || evt.shiftKey) {\n var info = (ctrlKey && evt.shiftKey) ? { ctrlKey: ctrlKey, shiftKey: evt.shiftKey } : { ctrlKey: true };\n this.eventArgs.info = info;\n }\n this.eventArgs.position = this.currentPosition;\n this.tool.mouseDown(this.eventArgs);\n this.initialEventArgs = { source: this.eventArgs.source, sourceWrapper: this.eventArgs.sourceWrapper };\n this.initialEventArgs.position = this.currentPosition;\n this.initialEventArgs.info = this.eventArgs.info;\n this.inAction = false;\n if (evt.type === 'touchstart') {\n if (touches && touches.length >= 2) {\n this.touchStartList = addTouchPointer(this.touchStartList, evt, touches);\n }\n if (!touches) {\n evt.preventDefault();\n }\n }\n }\n }\n if (!this.isForeignObject(evt.target) && !this.isForeignObject(evt.target, true) && (!touches)) {\n evt.preventDefault();\n }\n };\n DiagramEventHandler.prototype.mouseMoveExtend = function (e, obj) {\n if (this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool) {\n this.tool.mouseMove(this.eventArgs);\n }\n if (this.diagram.scrollSettings.canAutoScroll) {\n this.checkAutoScroll(e);\n }\n else {\n if (!this.blocked) {\n (this.tool.mouseMove(this.eventArgs));\n }\n }\n if (this.eventArgs.target) {\n this.hoverElement = this.eventArgs.target;\n }\n var isNode = this.eventArgs.target instanceof Node && obj instanceof Node ? false : true;\n if (this.tool instanceof ConnectTool) {\n this.diagram.updatePortVisibility(this.hoverElement instanceof Node ? this.hoverElement : this.hoverNode, PortVisibility.Connect | PortVisibility.Hover, isNode);\n }\n if (this.hoverElement instanceof Node\n && this.hoverNode instanceof Node && this.hoverNode && this.hoverNode.id !== this.hoverElement.id) {\n this.diagram.updatePortVisibility(this.hoverNode, PortVisibility.Connect | PortVisibility.Hover, true);\n }\n this.hoverElement = isNode ? null : obj;\n this.hoverNode = isNode ? null : obj;\n };\n /** @private */\n DiagramEventHandler.prototype.checkAction = function (obj) {\n if (this.action === 'LabelSelect' && this.eventArgs.sourceWrapper &&\n this.eventArgs.sourceWrapper instanceof TextElement) {\n var annotation = this.commandHandler.findTarget(this.eventArgs.sourceWrapper, this.eventArgs.source);\n if (!isSelected(this.diagram, annotation, false, this.eventArgs.sourceWrapper) && canMove(annotation)) {\n this.action = 'LabelDrag';\n this.tool = this.getTool(this.action);\n this.tool.mouseDown(this.initialEventArgs);\n }\n }\n else if (canMove(obj) && canSelect(obj) && this.initialEventArgs &&\n this.initialEventArgs.source && this.action === 'Select') {\n if (!isSelected(this.diagram, this.eventArgs.source, false) &&\n this.eventArgs.source instanceof Selector) {\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n }\n if (!(obj instanceof Connector) || (obj instanceof Connector &&\n !(contains(this.currentPosition, obj.sourcePoint, obj.hitPadding) ||\n contains(this.currentPosition, obj.targetPoint, obj.hitPadding)))) {\n this.action = 'Drag';\n }\n this.tool = this.getTool(this.action);\n this.tool.mouseDown(this.initialEventArgs);\n }\n };\n /** @private */\n DiagramEventHandler.prototype.mouseMove = function (e, touches) {\n this.focus = true;\n if (this.isScrolling) {\n e.preventDefault();\n return;\n }\n if (canUserInteract(this.diagram) || (canZoomPan(this.diagram) && !defaultTool(this.diagram))) {\n this.currentPosition = this.getMousePosition(e);\n var objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n var obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n drawRulerMarkers(this.diagram, this.currentPosition);\n var force = false;\n var target = void 0;\n if (e.type === 'touchmove') {\n touches = e.touches;\n if (touches && touches.length > 1) {\n this.touchMoveList = addTouchPointer(this.touchMoveList, e, touches);\n if (this.action !== 'PinchZoom') {\n force = true;\n }\n }\n }\n if (Point.equals(this.currentPosition, this.prevPosition) === false || this.inAction) {\n if (this.isMouseDown === false || force) {\n this.eventArgs = {};\n var sourceElement = null;\n if (obj !== null) {\n sourceElement = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n if (obj !== this.hoverElement) {\n if (this.hoverElement) {\n this.elementLeave();\n this.diagram.updatePortVisibility(this.hoverElement, PortVisibility.Hover, true);\n }\n if (obj instanceof Node) {\n this.hoverNode = obj;\n }\n this.hoverElement = obj;\n this.elementEnter(this.currentPosition, false);\n }\n else if (!this.hoverElement && this.hoverElement === obj) {\n this.elementEnter(this.currentPosition, true);\n }\n if (sourceElement) {\n target = this.commandHandler.findTarget(sourceElement, obj);\n }\n }\n this.action = this.diagram.findActionToBeDone(obj, sourceElement, this.currentPosition, target);\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n this.tool = this.getTool(this.action);\n this.mouseEvents();\n if (this.tool instanceof ConnectorDrawingTool ||\n this.tool instanceof PolyLineDrawingTool ||\n this.tool instanceof PolygonDrawingTool) {\n this.tool.mouseMove(this.eventArgs);\n }\n else if (touches && this.tool instanceof ZoomPanTool) {\n this.tool.mouseDown(this.eventArgs);\n }\n this.updateCursor();\n var isNode = false;\n if (!(this.hoverElement && (!(this.tool instanceof ZoomPanTool)) && obj instanceof Node &&\n (this.diagram.selectedItems.nodes.length === 0 || !isSelected(this.diagram, this.hoverElement)))) {\n isNode = true;\n }\n this.diagram.updatePortVisibility(this.hoverElement, PortVisibility.Hover, isNode);\n if (obj === null && this.hoverElement) {\n this.hoverElement = null;\n this.elementLeave();\n }\n force = false;\n }\n else {\n this.eventArgs.position = this.currentPosition;\n if (this.action === 'Drag' && !isSelected(this.diagram, this.eventArgs.source, false) &&\n this.eventArgs.source instanceof Selector) {\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n }\n this.mouseEvents();\n if (e.ctrlKey || e.shiftKey) {\n var info = (e.ctrlKey && e.shiftKey) ? { ctrlKey: e.ctrlKey, shiftKey: e.shiftKey } : { ctrlKey: true };\n this.eventArgs.info = info;\n }\n this.checkAction(obj);\n this.getMouseEventArgs(this.currentPosition, this.eventArgs, this.eventArgs.source);\n this.updateCursor();\n this.inAction = true;\n this.initialEventArgs = null;\n this.mouseMoveExtend(e, obj);\n }\n this.prevPosition = this.currentPosition;\n if (!this.isForeignObject(e.target, true)) {\n e.preventDefault();\n }\n }\n }\n };\n DiagramEventHandler.prototype.checkAutoScroll = function (e) {\n var autoScrollPosition = this.startAutoScroll(e);\n if (!autoScrollPosition && this.doingAutoScroll) {\n this.doingAutoScroll = false;\n clearInterval(this.timeOutValue);\n }\n else if (autoScrollPosition) {\n if ((this.tool instanceof MoveTool || this.tool instanceof ResizeTool\n || this.tool instanceof SelectTool) && this.inAction) {\n var diagram_1 = this;\n var delay_1 = 100;\n if (this.diagram.scrollSettings.canAutoScroll && autoScrollPosition && !this.doingAutoScroll) {\n this.doingAutoScroll = true;\n this.timeOutValue = setInterval(function (args) {\n diagram_1.doAutoScroll(autoScrollPosition, e, delay_1);\n }, delay_1);\n }\n }\n }\n else {\n this.blocked = !(this.tool.mouseMove(this.eventArgs));\n }\n };\n /** @private */\n DiagramEventHandler.prototype.mouseUp = function (evt) {\n var touches;\n touches = evt.touches;\n if (this.isScrolling) {\n this.isScrolling = false;\n evt.preventDefault();\n return;\n }\n if (!this.checkEditBoxAsTarget(evt) && (canUserInteract(this.diagram))\n || (canZoomPan(this.diagram) && !defaultTool(this.diagram))) {\n if (this.tool && (!(this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool) ||\n ((this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool)\n && evt.detail === 2))) {\n if (!this.isForeignObject(evt.target)) {\n document.getElementById(this.diagram.element.id + 'content').focus();\n }\n if (!this.inAction && evt.which !== 3) {\n if (this.action === 'Drag') {\n this.action = 'Select';\n var objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n var obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n var isMultipleSelect = true;\n if ((!evt.ctrlKey && this.isMouseDown\n && (this.diagram.selectedItems.nodes.length + this.diagram.selectedItems.connectors.length) > 1)\n && evt.which === 1) {\n isMultipleSelect = false;\n this.commandHandler.clearSelection();\n }\n if (!isSelected(this.diagram, obj) || (!isMultipleSelect)) {\n this.commandHandler.selectObjects([obj]);\n }\n }\n }\n this.inAction = false;\n this.isMouseDown = false;\n this.currentPosition = this.getMousePosition(evt);\n if (this.tool && (this.tool.prevPosition || this.tool instanceof LabelTool)) {\n this.eventArgs.position = this.currentPosition;\n this.getMouseEventArgs(this.currentPosition, this.eventArgs, this.eventArgs.source);\n var ctrlKey = this.isMetaKey(evt);\n if (ctrlKey || evt.shiftKey) {\n var info = (ctrlKey && evt.shiftKey) ? { ctrlKey: ctrlKey, shiftKey: evt.shiftKey } :\n { ctrlKey: true };\n this.eventArgs.info = info;\n }\n this.eventArgs.clickCount = evt.detail;\n this.tool.mouseUp(this.eventArgs);\n }\n this.blocked = false;\n if (this.hoverElement) {\n var portVisibility = PortVisibility.Connect;\n if (isSelected(this.diagram, this.hoverElement)) {\n portVisibility |= PortVisibility.Hover;\n }\n this.diagram.updatePortVisibility(this.hoverElement, portVisibility, true);\n this.hoverElement = null;\n }\n this.touchStartList = null;\n this.touchMoveList = null;\n if (!(this.tool instanceof TextDrawingTool)) {\n this.tool = null;\n }\n }\n if (!touches) {\n evt.preventDefault();\n }\n this.diagram.currentDrawingObject = undefined;\n var selector = this.diagram.selectedItems;\n if (!this.inAction && selector.wrapper && selector.userHandles.length > 0) {\n this.diagram.renderSelector(true);\n }\n if (!this.inAction && !this.diagram.currentSymbol) {\n var arg = {\n element: this.eventArgs.source || this.diagram, position: this.eventArgs.position, count: evt.detail,\n actualObject: this.eventArgs.actualObject\n };\n this.diagram.triggerEvent(DiagramEvent.click, arg);\n }\n this.eventArgs = {};\n }\n //end the corresponding tool\n };\n /** @private */\n DiagramEventHandler.prototype.mouseLeave = function (evt) {\n //Define what has to happen on mouse leave\n if (this.tool && this.inAction) {\n this.tool.mouseLeave(this.eventArgs);\n }\n if (this.eventArgs && this.eventArgs.source) {\n this.diagram.updatePortVisibility(this.eventArgs.source, PortVisibility.Hover, true);\n this.hoverElement = null;\n }\n if (this.tool instanceof ConnectTool && this.eventArgs && this.eventArgs.target && this.eventArgs.target instanceof Node) {\n this.diagram.updatePortVisibility(this.eventArgs.target, PortVisibility.Hover | PortVisibility.Connect, true);\n this.hoverElement = null;\n }\n var selector = this.diagram.selectedItems;\n if (selector && selector.wrapper) {\n this.diagram.renderSelector(true);\n }\n this.isMouseDown = false;\n this.focus = false;\n this.touchStartList = null;\n this.touchMoveList = null;\n this.commandHandler.removeSnap();\n this.inAction = false;\n this.eventArgs = {};\n this.tool = null;\n removeRulerMarkers();\n if (this.action === 'Rotate') {\n this.diagram.diagramCanvas.classList.remove('e-diagram-rotate');\n }\n evt.preventDefault();\n };\n /** @private */\n DiagramEventHandler.prototype.mouseWheel = function (evt) {\n var up = (evt.wheelDelta > 0 || -40 * evt.detail > 0) ? true : false;\n var mousePosition = this.getMousePosition(evt);\n this.diagram.tooltipObject.close();\n var ctrlKey = this.isMetaKey(evt);\n if (ctrlKey) {\n this.diagram.zoom(up ? (1.2) : 1 / (1.2), mousePosition);\n evt.preventDefault();\n }\n else {\n var horizontalOffset = this.diagram.scroller.horizontalOffset;\n var verticalOffset = this.diagram.scroller.verticalOffset;\n var change = up ? 20 : -20;\n if (this.tool && (this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool)) {\n this.eventArgs = {};\n this.getMouseEventArgs(mousePosition, this.eventArgs);\n this.eventArgs.position = mousePosition;\n this.tool.mouseWheel(this.eventArgs);\n }\n if (evt.shiftKey) {\n this.diagram.scroller.zoom(1, change, 0, mousePosition);\n }\n else {\n this.diagram.scroller.zoom(1, 0, change, mousePosition);\n }\n if (horizontalOffset !== this.diagram.scroller.horizontalOffset\n || verticalOffset !== this.diagram.scroller.verticalOffset) {\n evt.preventDefault();\n }\n }\n if (this.diagram.textEditing) {\n this.diagram.isTriggerEvent = true;\n this.diagram.startTextEdit();\n this.diagram.isTriggerEvent = false;\n }\n };\n /** @private */\n DiagramEventHandler.prototype.keyDown = function (evt) {\n if (!(this.diagram.diagramActions & DiagramAction.TextEdit) &&\n !(this.checkEditBoxAsTarget(evt)) || (evt.key === 'Escape' || evt.keyCode === 27)) {\n var i = void 0;\n var command = void 0;\n var keycode = evt.keyCode ? evt.keyCode : evt.which;\n var key = evt.key;\n var ctrlKey = this.isMetaKey(evt);\n if (this.diagram.commandManager && this.diagram.commands) {\n var commands = this.diagram.commands;\n for (var _i = 0, _a = Object.keys(commands); _i < _a.length; _i++) {\n var i_1 = _a[_i];\n command = this.diagram.commands[i_1];\n if (command && (command.gesture.keyModifiers || command.gesture.key)) {\n if ((keycode === command.gesture.key || (key === Keys[command.gesture.key])\n || this.isDeleteKey(key, i_1))\n && (((!command.gesture.keyModifiers) && (!evt.altKey) && (!evt.shiftKey) && (!ctrlKey)) ||\n (command.gesture.keyModifiers && (ctrlKey || evt.altKey || evt.shiftKey) &&\n (this.altKeyPressed(command.gesture.keyModifiers) && evt.altKey) ||\n (this.shiftKeyPressed(command.gesture.keyModifiers) && evt.shiftKey) ||\n (this.ctrlKeyPressed(command.gesture.keyModifiers) && ctrlKey)))) {\n var canExecute = getFunction(command.canExecute);\n if (canExecute && canExecute({\n 'keyDownEventArgs': KeyboardEvent,\n parameter: command.parameter\n })) {\n evt.preventDefault();\n if (evt.key === 'Escape' && (this.checkEditBoxAsTarget(evt))) {\n document.getElementById(this.diagram.diagramCanvas.id).focus();\n }\n if (command.execute) {\n // if (i === 'nudgeUp' || i === \"nudgeRight\" || i === \"nudgeDown\" || i === 'nudgeLeft') {\n // command.execute()\n // } else {\n var execute = getFunction(command.execute);\n execute({ 'keyDownEventArgs': KeyboardEvent, parameter: command.parameter });\n // }\n }\n break;\n }\n }\n }\n }\n }\n }\n };\n DiagramEventHandler.prototype.startAutoScroll = function (e) {\n var position = this.getMousePosition(e);\n position.x *= this.diagram.scroller.currentZoom;\n position.y *= this.diagram.scroller.currentZoom;\n var rulerSize = getRulerSize(this.diagram);\n var movingPosition;\n var autoScrollBorder = this.diagram.scrollSettings.autoScrollBorder;\n if (this.diagram.scrollSettings.canAutoScroll) {\n if (position.x + this.diagram.scroller.horizontalOffset + autoScrollBorder.right + rulerSize.width >=\n this.diagram.scroller.viewPortWidth - 18) {\n movingPosition = 'right';\n }\n else if (position.x + this.diagram.scroller.horizontalOffset < autoScrollBorder.left) {\n movingPosition = 'left';\n }\n else if (position.y + this.diagram.scroller.verticalOffset + autoScrollBorder.bottom + rulerSize.height >\n this.diagram.scroller.viewPortHeight - 18) {\n movingPosition = 'bottom';\n }\n else if (position.y + this.diagram.scroller.verticalOffset < autoScrollBorder.top) {\n movingPosition = 'top';\n }\n }\n return movingPosition;\n };\n DiagramEventHandler.prototype.doAutoScroll = function (option, e, delay, autoScroll) {\n var position = option;\n if ((this.tool instanceof MoveTool || this.tool instanceof ResizeTool\n || this.tool instanceof SelectTool) && this.inAction) {\n var diagram = this;\n var pos = this.getMousePosition(e);\n var autoScrollBorder = this.diagram.scrollSettings.autoScrollBorder;\n var newDelay = delay ? delay : 100;\n var left = 0;\n var top_1 = 0;\n var point = { x: pos.x, y: pos.y };\n switch (position) {\n case 'right':\n point.x = pos.x + 10;\n left = 10;\n break;\n case 'left':\n point.x = pos.x - 10;\n left = -10;\n break;\n case 'bottom':\n point.y = pos.y + 10;\n top_1 = 10;\n break;\n case 'top':\n point.y = pos.y - 10;\n top_1 = -10;\n break;\n }\n this.eventArgs.position = { x: point.x, y: point.y };\n this.tool.mouseMove(this.eventArgs);\n this.diagram.scroller.zoom(1, -left, -top_1, pos);\n }\n };\n DiagramEventHandler.prototype.mouseEvents = function () {\n var target = this.diagram.findObjectsUnderMouse(this.currentPosition);\n for (var i = 0; i < target.length; i++) {\n if (this.eventArgs.actualObject === target[i]) {\n target.splice(i, 1);\n }\n }\n var arg = {\n targets: target,\n element: (this.eventArgs.source === this.eventArgs.actualObject) ? undefined : this.eventArgs.source,\n actualObject: this.eventArgs.actualObject\n };\n if (this.lastObjectUnderMouse && (!this.eventArgs.actualObject || (this.lastObjectUnderMouse !== this.eventArgs.actualObject))) {\n var arg_1 = { targets: undefined, element: this.lastObjectUnderMouse, actualObject: undefined };\n this.diagram.triggerEvent(DiagramEvent.mouseLeave, arg_1);\n this.lastObjectUnderMouse = null;\n }\n if (!this.lastObjectUnderMouse && this.eventArgs.source || (this.lastObjectUnderMouse !== this.eventArgs.actualObject)) {\n this.lastObjectUnderMouse = this.eventArgs.actualObject;\n this.diagram.triggerEvent(DiagramEvent.mouseEnter, arg);\n }\n if (this.eventArgs.actualObject) {\n this.diagram.triggerEvent(DiagramEvent.mouseOver, arg);\n }\n };\n DiagramEventHandler.prototype.elementEnter = function (mousePosition, elementOver) {\n if (!elementOver) {\n var isPrivateTooltip = ((this.hoverElement instanceof Node) &&\n this.hoverElement.constraints & NodeConstraints.Tooltip) ||\n ((this.hoverElement instanceof Connector) && this.hoverElement.constraints & ConnectorConstraints.Tooltip);\n updateTooltip(this.diagram, isPrivateTooltip ? this.hoverElement : undefined);\n var offset = getTooltipOffset(this.diagram, mousePosition, this.hoverElement);\n this.diagram.tooltipObject.close();\n this.diagram.tooltipObject.offsetX = offset.x;\n this.diagram.tooltipObject.offsetY = offset.y;\n this.diagram.tooltipObject.dataBind();\n if (canEnableToolTip(this.hoverElement, this.diagram)) {\n this.diagram.tooltipObject.open(this.diagram.element);\n }\n }\n };\n DiagramEventHandler.prototype.elementLeave = function () {\n this.diagram.tooltipObject.close();\n };\n DiagramEventHandler.prototype.altKeyPressed = function (keyModifier) {\n if (keyModifier & KeyModifiers.Alt) {\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.ctrlKeyPressed = function (keyModifier) {\n if (keyModifier & KeyModifiers.Control) {\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.shiftKeyPressed = function (keyModifier) {\n if (keyModifier & KeyModifiers.Shift) {\n return true;\n }\n return false;\n };\n /** @private */\n DiagramEventHandler.prototype.scrolled = function (evt) {\n this.diagram.updateScrollOffset();\n };\n /** @private */\n DiagramEventHandler.prototype.doubleClick = function (evt) {\n if (canUserInteract(this.diagram)) {\n var annotation = void 0;\n var objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n var obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n if (obj !== null && canUserInteract(this.diagram)) {\n var node = obj;\n annotation = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n if (this.tool && (this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool)) {\n var arg_2 = {\n source: obj || this.diagram, position: this.currentPosition, count: evt.detail\n };\n this.tool.mouseUp(this.eventArgs);\n this.isMouseDown = false;\n this.eventArgs = {};\n this.tool = null;\n evt.preventDefault();\n }\n else {\n var layer = this.diagram.commandHandler.getObjectLayer(obj.id);\n if (layer && !layer.lock && layer.visible) {\n if (!(this.diagram.diagramActions & DiagramAction.TextEdit)) {\n var id = '';\n if (obj.shape.shape === 'TextAnnotation') {\n id = obj.id.split('_textannotation_')[1];\n }\n this.diagram.startTextEdit(obj, id || (annotation instanceof TextElement ?\n (annotation.id).split(obj.id + '_')[1] : undefined));\n }\n }\n }\n }\n var arg = {\n source: obj || this.diagram, position: this.currentPosition, count: evt.detail\n };\n this.diagram.triggerEvent(DiagramEvent.doubleClick, arg);\n }\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.inputChange = function (evt) {\n var minWidth = 90;\n var maxWidth;\n var minHeight = 12;\n var fontsize;\n var textWrapper;\n var node;\n var height;\n var width;\n var textBounds;\n var textBoxWidth;\n var transforms;\n var scale;\n var editTextBox = document.getElementById(this.diagram.element.id + '_editBox');\n var editTextBoxDiv = document.getElementById(this.diagram.element.id + '_editTextBoxDiv');\n var text = (editTextBox.value);\n var line = text.split('\\n');\n node = (this.diagram.selectedItems.nodes[0]) ? this.diagram.selectedItems.nodes[0] : this.diagram.selectedItems.connectors[0];\n if (!node && this.tool instanceof TextDrawingTool) {\n node = this.diagram.nameTable[this.diagram.activeLabel.parentId];\n }\n if (node && ((node.shape.type !== 'Text' && node.annotations.length > 0) || (node.shape.type === 'Text'))) {\n textWrapper = this.diagram.getWrapper(node.wrapper, this.diagram.activeLabel.id);\n maxWidth = node.wrapper.bounds.width < textWrapper.bounds.width ? node.wrapper.bounds.width : textWrapper.bounds.width;\n maxWidth = maxWidth > minWidth ? maxWidth : minWidth;\n textBounds = measureHtmlText(textWrapper.style, text, undefined, undefined, maxWidth);\n fontsize = Number((editTextBox.style.fontSize).split('px')[0]);\n if (line.length > 1 && line[line.length - 1] === '') {\n textBounds.height = textBounds.height + fontsize;\n }\n transforms = this.diagram.scroller.transform;\n scale = canZoomTextEdit(this.diagram) ? transforms.scale : 1;\n width = textBounds.width;\n width = ((minWidth > width) ? minWidth : width) * scale;\n height = ((minHeight > textBounds.height) ? minHeight : textBounds.height) * scale;\n editTextBoxDiv.style.left = ((((textWrapper.bounds.center.x + transforms.tx) * transforms.scale) - width / 2) - 2.5) + 'px';\n editTextBoxDiv.style.top = ((((textWrapper.bounds.center.y + transforms.ty) * transforms.scale) - height / 2) - 3) + 'px';\n editTextBoxDiv.style.width = width + 'px';\n editTextBoxDiv.style.height = height + 'px';\n editTextBox.style.minHeight = minHeight + 'px';\n editTextBox.style.minWidth = minWidth + 'px';\n editTextBox.style.width = width + 'px';\n editTextBox.style.height = height + 'px';\n }\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.isAddTextNode = function (node, focusOut) {\n if (this.tool instanceof TextDrawingTool || focusOut) {\n this.tool = null;\n if (node && (!(canContinuousDraw(this.diagram)))) {\n this.diagram.drawingObject = undefined;\n this.diagram.currentDrawingObject = undefined;\n }\n if (getObjectFromCollection(this.diagram.nodes, node.id) ||\n getObjectFromCollection(this.diagram.connectors, node.id) ||\n (this.diagram.bpmnModule && this.diagram.bpmnModule.textAnnotationConnectors.indexOf(node) > -1)) {\n return false;\n }\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.checkEditBoxAsTarget = function (evt) {\n if ((evt.target && evt.target.id === this.diagram.element.id + '_editBox')) {\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.getMouseEventArgs = function (position, args, source) {\n args.position = position;\n var obj;\n var objects;\n if (!source) {\n if (this.action === 'Drag' || this.action === 'ConnectorSourceEnd' || this.action === 'SegmentEnd' ||\n this.action === 'OrthoThumb' || this.action === 'BezierSourceThumb' || this.action === 'BezierTargetThumb' ||\n this.action === 'ConnectorTargetEnd' || this.action.indexOf('Rotate') !== -1 || this.action.indexOf('Resize') !== -1) {\n obj = this.diagram.selectedItems;\n }\n else {\n objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n }\n }\n else {\n objects = this.diagram.findObjectsUnderMouse(this.currentPosition, source);\n obj = this.diagram.findTargetObjectUnderMouse(objects, this.action, this.inAction, args.position, source);\n }\n var wrapper;\n if (obj) {\n wrapper = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n }\n if (!source) {\n args.source = obj;\n args.sourceWrapper = wrapper;\n }\n else {\n args.target = obj;\n args.targetWrapper = wrapper;\n }\n args.actualObject = this.eventArgs.actualObject;\n args.startTouches = this.touchStartList;\n args.moveTouches = this.touchMoveList;\n return args;\n };\n /** @private */\n DiagramEventHandler.prototype.resetTool = function () {\n this.action = 'Select';\n this.hoverElement = null;\n this.hoverNode = null;\n this.tool = this.diagram.getTool(this.action);\n this.updateCursor();\n };\n /** @private */\n DiagramEventHandler.prototype.getTool = function (action) {\n switch (action) {\n case 'Select':\n return new SelectTool(this.commandHandler, true);\n case 'Drag':\n return new MoveTool(this.commandHandler);\n case 'Rotate':\n return new RotateTool(this.commandHandler);\n case 'LayoutAnimation':\n return new ExpandTool(this.commandHandler);\n case 'Hyperlink':\n return new LabelTool(this.commandHandler);\n case 'ResizeSouthEast':\n case 'ResizeSouthWest':\n case 'ResizeNorthEast':\n case 'ResizeNorthWest':\n case 'ResizeSouth':\n case 'ResizeNorth':\n case 'ResizeWest':\n case 'ResizeEast':\n return new ResizeTool(this.commandHandler, action);\n case 'ConnectorSourceEnd':\n case 'ConnectorTargetEnd':\n case 'BezierSourceThumb':\n case 'BezierTargetThumb':\n return new ConnectTool(this.commandHandler, action);\n case 'SegmentEnd':\n case 'OrthoThumb':\n return new ConnectorEditing(this.commandHandler, action);\n case 'Draw':\n var shape = 'shape';\n var type = findObjectType(this.diagram.drawingObject);\n if (type === 'Node' && this.diagram.drawingObject.shape.type === 'Text') {\n return new TextDrawingTool(this.commandHandler);\n }\n else if (type === 'Node' && this.diagram.drawingObject.shape[shape] === 'Polygon' &&\n !(this.diagram.drawingObject.shape.points)) {\n return new PolygonDrawingTool(this.commandHandler);\n }\n else if (type === 'Node' ||\n (type === 'Node' && this.diagram.drawingObject.shape[shape] === 'Polygon' &&\n (this.diagram.drawingObject.shape.points))) {\n return new NodeDrawingTool(this.commandHandler, this.diagram.drawingObject);\n }\n else if (type === 'Connector' && this.diagram.drawingObject.type === 'Polyline') {\n return new PolyLineDrawingTool(this.commandHandler);\n }\n else if (type === 'Connector') {\n return new ConnectorDrawingTool(this.commandHandler, 'ConnectorSourceEnd', this.diagram.drawingObject);\n }\n break;\n case 'Pan':\n return new ZoomPanTool(this.commandHandler, false);\n case 'PinchZoom':\n return new ZoomPanTool(this.commandHandler, true);\n case 'PortDrag':\n return new MoveTool(this.commandHandler, 'Port');\n case 'PortDraw':\n return new ConnectorDrawingTool(this.commandHandler, 'ConnectorSourceEnd', this.diagram.drawingObject);\n case 'LabelSelect':\n return new SelectTool(this.commandHandler, true, 'LabelSelect');\n case 'LabelDrag':\n return new LabelDragTool(this.commandHandler);\n case 'LabelResizeSouthEast':\n case 'LabelResizeSouthWest':\n case 'LabelResizeNorthEast':\n case 'LabelResizeNorthWest':\n case 'LabelResizeSouth':\n case 'LabelResizeNorth':\n case 'LabelResizeWest':\n case 'LabelResizeEast':\n return new LabelResizeTool(this.commandHandler, action);\n case 'LabelRotate':\n return new LabelRotateTool(this.commandHandler);\n }\n return null;\n };\n /** @private */\n DiagramEventHandler.prototype.getCursor = function (action) {\n var object = (this.diagram.selectedItems.annotation) ?\n this.diagram.selectedItems.wrapper.children[0] : this.diagram.selectedItems;\n var rotateAngle = (this.diagram.selectedItems.annotation) ?\n (object.rotateAngle + object.parentTransform) : object.rotateAngle;\n return getCursor(action, rotateAngle);\n };\n //start region - interface betweend diagram and interaction\n /** @private */\n DiagramEventHandler.prototype.findElementUnderMouse = function (obj, position) {\n return this.objectFinder.findElementUnderSelectedItem(obj, position);\n };\n /** @private */\n DiagramEventHandler.prototype.findObjectsUnderMouse = function (position, source) {\n return this.objectFinder.findObjectsUnderMouse(position, this.diagram, this.eventArgs, source);\n };\n /** @private */\n DiagramEventHandler.prototype.findObjectUnderMouse = function (objects, action, inAction) {\n return this.objectFinder.findObjectUnderMouse(this.diagram, objects, action, inAction, this.eventArgs, this.currentPosition);\n };\n /** @private */\n DiagramEventHandler.prototype.findTargetUnderMouse = function (objects, action, inAction, position, source) {\n return this.objectFinder.findObjectUnderMouse(this.diagram, objects, action, inAction, this.eventArgs, position, source);\n };\n /** @private */\n DiagramEventHandler.prototype.findActionToBeDone = function (obj, wrapper, position, target) {\n return findToolToActivate(obj, wrapper, this.currentPosition, this.diagram, this.touchStartList, this.touchMoveList, target);\n };\n return DiagramEventHandler;\n}());\nexport { DiagramEventHandler };\n/** @private */\nvar ObjectFinder = /** @class */ (function () {\n function ObjectFinder() {\n }\n /** @private */\n ObjectFinder.prototype.findObjectsUnderMouse = function (pt, diagram, eventArgs, source, actions) {\n // finds the collection of the object that is under the mouse;\n var actualTarget = [];\n if (source && source instanceof Selector) {\n if (source.nodes.length + source.connectors.length === 1) {\n source = (source.nodes[0] || source.connectors[0]);\n if (source.children && source.children.length === 0) {\n eventArgs.actualObject = source;\n }\n }\n }\n var container;\n var bounds;\n var child;\n var matrix;\n var objArray = diagram.spatialSearch.findObjects(new Rect(pt.x - 50, pt.y - 50, 100, 100));\n var layerObjTable = {};\n var layerTarger;\n for (var _i = 0, objArray_1 = objArray; _i < objArray_1.length; _i++) {\n var obj = objArray_1[_i];\n var point = pt;\n bounds = obj.wrapper.outerBounds;\n var pointInBounds = (obj.rotateAngle) ? false : bounds.containsPoint(point);\n if ((obj !== source || diagram.currentDrawingObject instanceof Connector) &&\n (obj instanceof Connector) ? obj !== diagram.currentDrawingObject : true && obj.wrapper.visible) {\n var layer = diagram.commandHandler.getObjectLayer(obj.id);\n if (layer && !layer.lock && layer.visible) {\n layerTarger = layerObjTable[layer.zIndex] = layerObjTable[layer.zIndex] || [];\n if (obj.rotateAngle) {\n container = obj.wrapper;\n bounds = cornersPointsBeforeRotation(container);\n for (var _a = 0, _b = container.children; _a < _b.length; _a++) {\n child = _b[_a];\n matrix = identityMatrix();\n rotateMatrix(matrix, -(child.rotateAngle + child.parentTransform), child.offsetX, child.offsetY);\n point = transformPointByMatrix(matrix, pt);\n if (cornersPointsBeforeRotation(child).containsPoint(point)) {\n pointInBounds = true;\n }\n }\n }\n if (!source || (isSelected(diagram, obj) === false)) {\n if (canEnablePointerEvents(obj, diagram)) {\n if ((obj instanceof Connector) ? isPointOverConnector(obj, pt) : pointInBounds) {\n var padding = (obj instanceof Connector) ? obj.hitPadding || 0 : 0;\n var element = void 0;\n element = this.findElementUnderMouse(obj, pt, padding);\n if (element) {\n if (obj instanceof Connector && diagram.bpmnModule) {\n // obj = diagram.bpmnModule.findInteractableObject(obj, diagram);\n }\n insertObject(obj, 'zIndex', layerTarger);\n }\n }\n }\n }\n }\n }\n }\n for (var _c = 0, _d = diagram.layers; _c < _d.length; _c++) {\n var layer = _d[_c];\n actualTarget = actualTarget.concat(layerObjTable[layer.zIndex] || []);\n for (var _e = 0, actualTarget_1 = actualTarget; _e < actualTarget_1.length; _e++) {\n var obj = actualTarget_1[_e];\n var eventHandler = 'eventHandler';\n if (obj.shape.type === 'Bpmn' && obj.processId && (!(diagram[eventHandler].tool instanceof MoveTool) ||\n (diagram[eventHandler].tool instanceof MoveTool) && canAllowDrop(obj))) {\n var index = actualTarget.indexOf(diagram.nameTable[obj.processId]);\n if (index > -1) {\n actualTarget.splice(index, 1);\n }\n }\n }\n }\n for (var i = 0; i < actualTarget.length; i++) {\n var parentObj = diagram.nameTable[actualTarget[i].parentId];\n if (parentObj) {\n var portElement = this.findElementUnderMouse(parentObj, pt);\n for (var j = 0; j < parentObj.ports.length; j++) {\n if (portElement.id.match('_' + parentObj.ports[j].id + '$')) {\n var port = parentObj.ports[j];\n if (canDrag(port, diagram) || canDraw(port, diagram)) {\n return actualTarget;\n }\n }\n }\n }\n while (parentObj) {\n var index = actualTarget.indexOf(parentObj);\n if (index !== -1) {\n actualTarget.splice(index, 1);\n }\n else {\n break;\n }\n parentObj = diagram.nameTable[parentObj.parentId];\n }\n }\n return actualTarget;\n };\n /** @private */\n ObjectFinder.prototype.isTarget = function (actualTarget, diagram, action) {\n var connector = diagram.selectedItems.connectors[0];\n var node;\n node = action === 'ConnectorSourceEnd' ? diagram.nameTable[connector.targetID] :\n node = diagram.nameTable[connector.sourceID];\n if (node && (!node.processId && !actualTarget.processId || node.processId !== actualTarget.processId)) {\n if (node.processId !== actualTarget.processId) {\n actualTarget = null;\n }\n }\n if (action === 'ConnectorSourceEnd' && connector.targetID) {\n var targetNode = diagram.nameTable[connector.targetID];\n if (targetNode && targetNode.shape && (targetNode.shape.shape === 'TextAnnotation')) {\n var id = connector.id.split('_');\n if (((targetNode.shape.type === 'Bpmn') && actualTarget.shape.type !== 'Bpmn') || (id[0] === actualTarget.id) ||\n actualTarget.shape.shape === 'TextAnnotation') {\n actualTarget = null;\n }\n }\n }\n return actualTarget;\n };\n /* tslint:disable */\n /** @private */\n ObjectFinder.prototype.findObjectUnderMouse = function (diagram, objects, action, inAction, eventArg, position, source) {\n //we will get the wrapper object here\n //we have to choose the object to be interacted with from the given wrapper\n //Find the object that is under mouse\n var eventHandler = 'eventHandler';\n var actualTarget = null;\n if (objects.length !== 0) {\n if (source && source instanceof Selector) {\n if (source.nodes.length + source.connectors.length === 1) {\n source = (source.nodes[0] || source.connectors[0]);\n }\n }\n if ((action === 'ConnectorSourceEnd' && source || action === 'PortDraw') ||\n ((canDrawOnce(diagram) || canContinuousDraw(diagram)) && getObjectType(diagram.drawingObject) === Connector)) {\n var connector = diagram.selectedItems.connectors[0];\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Node && canOutConnect(objects[i])) {\n actualTarget = objects[i];\n if (connector) {\n actualTarget = this.isTarget(actualTarget, diagram, action);\n }\n eventArg.actualObject = actualTarget;\n return actualTarget;\n }\n }\n }\n else if (action === 'ConnectorTargetEnd' && source) {\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Node && canInConnect(objects[i])) {\n actualTarget = objects[i];\n actualTarget = this.isTarget(actualTarget, diagram, action);\n eventArg.actualObject = actualTarget;\n return actualTarget;\n }\n }\n }\n else if (source && (action === 'Drag' || (diagram[eventHandler].tool instanceof MoveTool))) {\n var index = 0;\n for (var i = 0; i < objects.length; i++) {\n var temp = objects[i];\n if (source !== temp && (temp instanceof Connector ||\n !position || temp.wrapper.bounds.containsPoint(position))) {\n if (canAllowDrop(temp)) {\n if (!actualTarget) {\n actualTarget = temp;\n index = actualTarget.zIndex;\n }\n else {\n actualTarget = index >= temp.zIndex ? actualTarget : temp;\n index = Math.max(index, temp.zIndex);\n }\n }\n }\n }\n if (actualTarget && actualTarget.shape.type === 'Bpmn') {\n if (diagram.selectedItems.nodes.length > 0 && diagram.selectedItems.nodes[0].shape.type === 'Bpmn') {\n actualTarget = actualTarget;\n }\n else {\n actualTarget = null;\n }\n }\n if (actualTarget) {\n eventArg.actualObject = actualTarget;\n }\n return actualTarget;\n }\n else if (action === 'Select' && diagram[eventHandler].tool) {\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Connector) {\n if (objects[i - 1] instanceof Node && objects[i - 1].ports) {\n var portElement = this.findTargetElement(objects[i - 1].wrapper, position, undefined);\n if ((portElement && (portElement.id.match('_icon_content_shape$') || portElement.id.match('_icon_content_rect$')))) {\n return objects[i - 1];\n }\n for (var j = 0; j < objects[i - 1].ports.length; j++) {\n if (portElement && portElement.id.match('_' + objects[i - 1].ports[j].id + '$')) {\n if (canDraw(objects[i - 1].ports[j], diagram)) {\n return objects[i - 1];\n }\n }\n }\n }\n }\n }\n actualTarget = objects[objects.length - 1];\n eventArg.actualObject = actualTarget;\n if (actualTarget.parentId) {\n var obj = actualTarget;\n var selected = isSelected(diagram, obj);\n while (obj) {\n if (isSelected(diagram, obj) && !selected) {\n break;\n }\n actualTarget = obj;\n obj = diagram.nameTable[obj.parentId];\n }\n }\n }\n else if (action === 'Pan' || action === 'LayoutAnimation') {\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Node) {\n var portElement = this.findTargetElement(objects[i].wrapper, position, undefined);\n if ((action === 'LayoutAnimation' || action === 'Pan') || ((portElement && (portElement.id.match('_icon_content_shape$') || portElement.id.match('_icon_content_rect$'))))) {\n return objects[i];\n }\n }\n }\n }\n else {\n actualTarget = objects[objects.length - 1];\n if (eventArg && actualTarget) {\n eventArg.actualObject = actualTarget;\n }\n }\n }\n return actualTarget;\n };\n /* tslint:enable */\n /** @private */\n ObjectFinder.prototype.findElementUnderSelectedItem = function (obj, position) {\n //rewrite this for multiple selection\n if (obj instanceof Selector) {\n if (obj.nodes.length === 1 && (!obj.connectors || !obj.connectors.length)) {\n return this.findElementUnderMouse(obj.nodes[0], position);\n }\n else if ((!obj.nodes || obj.nodes.length) && obj.connectors.length === 1) {\n return this.findElementUnderMouse(obj.connectors[0], position);\n }\n }\n else {\n return this.findElementUnderMouse(obj, position);\n }\n return null;\n };\n ObjectFinder.prototype.findElementUnderMouse = function (obj, position, padding) {\n return this.findTargetElement(obj.wrapper, position, padding);\n };\n /** @private */\n ObjectFinder.prototype.findTargetElement = function (container, position, padding) {\n for (var i = container.children.length - 1; i >= 0; i--) {\n var element = container.children[i];\n if (element && element.outerBounds.containsPoint(position)) {\n if (element instanceof Container) {\n var target = this.findTargetElement(element, position);\n if (target) {\n return target;\n }\n }\n if (element.bounds.containsPoint(position)) {\n return element;\n }\n }\n }\n if (container.bounds.containsPoint(position, padding) && container.style.fill !== 'none') {\n return container;\n }\n return null;\n };\n return ObjectFinder;\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 } from '@syncfusion/ej2-base';\n/**\n * A collection of JSON objects where each object represents a layer.\n * Layer is a named category of diagram shapes.\n */\nvar Layer = /** @class */ (function (_super) {\n __extends(Layer, _super);\n // tslint:disable-next-line:no-any\n function Layer(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n /** @private */\n _this.objectZIndex = -1;\n /** @private */\n _this.zIndexTable = {};\n _this.objects = [];\n return _this;\n }\n __decorate([\n Property('')\n ], Layer.prototype, \"id\", void 0);\n __decorate([\n Property(true)\n ], Layer.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], Layer.prototype, \"lock\", void 0);\n __decorate([\n Property()\n ], Layer.prototype, \"objects\", void 0);\n __decorate([\n Property()\n ], Layer.prototype, \"addInfo\", void 0);\n __decorate([\n Property(-1)\n ], Layer.prototype, \"zIndex\", void 0);\n return Layer;\n}(ChildProperty));\nexport { Layer };\n","import { Connector, getBezierPoints, isEmptyVector } from '../objects/connector';\nimport { Node, BpmnSubEvent, BpmnAnnotation } from '../objects/node';\nimport { PathElement } from '../core/elements/path-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { OrthogonalSegment } from '../objects/connector';\nimport { Rect } from '../primitives/rect';\nimport { identityMatrix, rotateMatrix, transformPointByMatrix, scaleMatrix } from './../primitives/matrix';\nimport { cloneObject as clone, cloneObject, getBounds } from './../utility/base-util';\nimport { completeRegion, getTooltipOffset, sort, findObjectIndex, intersect3, getAnnotationPosition } from './../utility/diagram-util';\nimport { randomId, cornersPointsBeforeRotation } from './../utility/base-util';\nimport { Selector } from './selector';\nimport { hasSelection, isSelected, hasSingleConnection } from './actions';\nimport { DiagramEvent } from '../enum/enum';\nimport { canSelect, canMove, canRotate, canDragSourceEnd, canDragTargetEnd, canSingleSelect, canDrag } from './../utility/constraints-util';\nimport { canMultiSelect, canContinuousDraw } from './../utility/constraints-util';\nimport { canPanX, canPanY, canPageEditable } from './../utility/constraints-util';\nimport { SnapConstraints, DiagramTools, DiagramAction } from '../enum/enum';\nimport { getDiagramElement, getAdornerLayerSvg, getHTMLLayer, getAdornerLayer } from '../utility/dom-util';\nimport { Point } from '../primitives/point';\nimport { Size } from '../primitives/size';\nimport { getObjectType, getPoint } from './../utility/diagram-util';\nimport { Layer } from '../diagram/layer';\nimport { SelectorConstraints } from '../enum/enum';\nimport { remove } from '@syncfusion/ej2-base';\nimport { getOppositeDirection, getPortDirection, findAngle } from './../utility/connector';\nimport { swapBounds, findPoint, orthoConnection2Segment, getIntersection } from './../utility/connector';\nimport { ShapeAnnotation, PathAnnotation } from '../objects/annotation';\n/**\n * Defines the behavior of commands\n */\nvar CommandHandler = /** @class */ (function () {\n function CommandHandler(diagram) {\n this.clipboardData = {};\n this.connectorsTable = [];\n this.processTable = {};\n this.childTable = {};\n this.parentTable = {};\n this.diagram = diagram;\n }\n Object.defineProperty(CommandHandler.prototype, \"snappingModule\", {\n get: function () {\n return this.diagram.snappingModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommandHandler.prototype, \"layoutAnimateModule\", {\n get: function () {\n return this.diagram.layoutAnimateModule;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n CommandHandler.prototype.startTransaction = function (protectChange) {\n this.state = { element: this.diagram.selectedItems, backup: null };\n if (protectChange) {\n this.diagram.protectPropertyChange(true);\n }\n getAdornerLayer(this.diagram.element.id).style.pointerEvents = 'none';\n };\n /** @private */\n CommandHandler.prototype.endTransaction = function (protectChange) {\n this.state = null;\n if (protectChange) {\n this.diagram.protectPropertyChange(false);\n }\n getAdornerLayer(this.diagram.element.id).style.pointerEvents = 'all';\n };\n /**\n * @private\n */\n CommandHandler.prototype.showTooltip = function (node, position, content, toolName, isTooltipVisible) {\n var _this = this;\n if (isTooltipVisible) {\n this.diagram.tooltipObject.position = 'BottomCenter';\n this.diagram.tooltipObject.animation = { open: { delay: 0, duration: 0 } };\n this.diagram.tooltip.relativeMode = toolName === 'ConnectTool' ? 'Mouse' : 'Object';\n this.diagram.tooltipObject.openDelay = 0;\n this.diagram.tooltipObject.closeDelay = 0;\n }\n this.diagram.tooltipObject.content = content;\n var tooltipOffset = getTooltipOffset(this.diagram, { x: position.x, y: position.y }, node);\n this.diagram.tooltipObject.offsetX = tooltipOffset.x + (toolName === 'ConnectTool' ? 10 : 0);\n this.diagram.tooltipObject.offsetY = tooltipOffset.y + 10;\n this.diagram.tooltipObject.dataBind();\n if (isTooltipVisible) {\n setTimeout(function () {\n _this.diagram.tooltipObject.open(_this.diagram.element);\n }, 1);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.closeTooltip = function () {\n this.diagram.tooltipObject.close();\n };\n /**\n * @private\n */\n CommandHandler.prototype.canEnableDefaultTooltip = function () {\n if (this.diagram.selectedItems.constraints & SelectorConstraints.ToolTip) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.updateSelector = function () {\n this.diagram.updateSelector();\n };\n /**\n * @private\n */\n CommandHandler.prototype.triggerEvent = function (event, args) {\n if (event === DiagramEvent.drop || event === DiagramEvent.positionChange ||\n event === DiagramEvent.connectionChange) {\n if (this.diagram.currentSymbol) {\n return;\n }\n if (event === DiagramEvent.drop) {\n args.source = this.diagram;\n }\n if (this.diagram.currentDrawingObject) {\n return;\n }\n }\n this.diagram.triggerEvent(event, args);\n };\n /**\n * @private\n */\n CommandHandler.prototype.dragOverElement = function (args, currentPosition) {\n if (this.diagram.currentSymbol) {\n var dragOverArg = {\n element: args.source, target: args.target, mousePosition: currentPosition, diagram: this.diagram\n };\n this.triggerEvent(DiagramEvent.dragOver, dragOverArg);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.disConnect = function (obj, endPoint) {\n var oldChanges = {};\n var newChanges = {};\n var selectorModel;\n var connector;\n if (obj instanceof Selector) {\n selectorModel = obj;\n connector = selectorModel.connectors[0];\n }\n else if (obj instanceof Connector && this.diagram.currentDrawingObject) {\n connector = this.diagram.currentDrawingObject;\n }\n if (obj && connector && (hasSingleConnection(this.diagram) || this.diagram.currentDrawingObject)) {\n if (endPoint && (endPoint === 'ConnectorSourceEnd' || endPoint === 'ConnectorTargetEnd')) {\n var nodeEndId = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEndId = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n if (connector[nodeEndId]) {\n oldChanges[nodeEndId] = connector[nodeEndId];\n connector[nodeEndId] = '';\n newChanges[nodeEndId] = connector[nodeEndId];\n if (connector.sourcePortID || connector.targetPortID) {\n oldChanges[portEndId] = connector[portEndId];\n connector[portEndId] = '';\n newChanges[portEndId] = connector[portEndId];\n }\n this.connectionEventChange(connector, oldChanges, newChanges, endPoint);\n }\n }\n else if ((endPoint !== 'OrthoThumb' && endPoint !== 'SegmentEnd') && (connector.sourceID || connector.targetID)) {\n oldChanges = {\n sourceID: connector.sourceID, sourcePortID: connector.sourcePortID,\n targetID: connector.targetID, targetPortID: connector.targetPortID\n };\n connector.sourceID = '';\n connector.sourcePortID = '';\n connector.targetID = '';\n connector.targetPortID = '';\n newChanges = {\n sourceID: connector.sourceID, sourcePortID: connector.sourcePortID,\n targetID: connector.targetID, targetPortID: connector.targetPortID\n };\n var arg = {\n connector: connector, oldValue: oldChanges,\n newValue: newChanges, cancel: false, state: 'Changing', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n if (arg.cancel) {\n connector.sourceID = oldChanges.sourceID;\n connector.sourcePortID = oldChanges.sourcePortID;\n connector.targetID = oldChanges.targetID;\n connector.targetPortID = oldChanges.targetPortID;\n }\n else {\n this.diagram.connectorPropertyChange(connector, oldChanges, newChanges);\n this.diagram.updateDiagramObject(connector);\n arg = {\n connector: connector, oldValue: oldChanges,\n newValue: newChanges, cancel: false, state: 'Changed', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n }\n }\n }\n };\n CommandHandler.prototype.connectionEventChange = function (connector, oldChanges, newChanges, endPoint) {\n var nodeEndId = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEndId = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n var arg = {\n connector: connector, oldValue: { nodeId: oldChanges[nodeEndId], portId: oldChanges[portEndId] },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] },\n cancel: false, state: 'Changing', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n if (arg.cancel) {\n connector[nodeEndId] = oldChanges[nodeEndId];\n connector[portEndId] = oldChanges[portEndId];\n newChanges = oldChanges;\n }\n else {\n this.diagram.connectorPropertyChange(connector, oldChanges, newChanges);\n this.diagram.updateDiagramObject(connector);\n arg = {\n connector: connector, oldValue: { nodeId: oldChanges[nodeEndId], portId: oldChanges[portEndId] },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] },\n cancel: false, state: 'Changed', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.findTarget = function (element, argsTarget, source, connection) {\n var target;\n if (argsTarget instanceof Node) {\n if (element && element.id === argsTarget.id + '_content') {\n return argsTarget;\n }\n if (source && argsTarget.shape.type === 'Bpmn' && argsTarget.shape.shape === 'Activity') {\n if (argsTarget.shape.activity.subProcess.type === 'Transaction') {\n var transaction = argsTarget.shape.activity.subProcess.transaction;\n if (transaction.success.visible && element.id.indexOf(argsTarget.id + '_success') === 0) {\n return transaction.success;\n }\n if (transaction.cancel.visible && element.id.indexOf(argsTarget.id + '_cancel') === 0) {\n return transaction.cancel;\n }\n if (transaction.failure.visible && element.id.indexOf(argsTarget.id + '_failure') === 0) {\n return transaction.failure;\n }\n }\n }\n if (element instanceof PathElement) {\n for (var i = 0; i < argsTarget.ports.length; i++) {\n var port = argsTarget.ports[i];\n if (element.id === argsTarget.id + '_' + port.id) {\n return port;\n }\n }\n }\n }\n if (!connection && element instanceof TextElement) {\n var annotation = void 0;\n for (var i = 0; i < argsTarget.annotations.length; i++) {\n annotation = argsTarget.annotations[i];\n if (element.id === argsTarget.id + '_' + annotation.id) {\n return annotation;\n }\n }\n }\n return argsTarget;\n };\n /**\n * @private\n */\n CommandHandler.prototype.canDisconnect = function (endPoint, args, targetPortId, targetNodeId) {\n var selector;\n var connect;\n if (args.source instanceof Selector) {\n selector = args.source;\n connect = selector.connectors[0];\n }\n else if (args.source instanceof Connector && this.diagram.currentDrawingObject) {\n connect = this.diagram.currentDrawingObject;\n }\n var targetObject = this.findTarget(args.targetWrapper, args.target, endPoint === 'ConnectorSourceEnd', true);\n var nodeEnd = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEnd = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n if (connect[nodeEnd] !== targetNodeId || connect[portEnd] !== targetPortId) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n CommandHandler.prototype.changeAnnotationDrag = function (args) {\n var selectorModel;\n var connector;\n if (args.source && args.source.connectors &&\n args.source.connectors.length && this.diagram.bpmnModule &&\n this.diagram.bpmnModule.textAnnotationConnectors.indexOf(args.source.connectors[0]) > -1) {\n if (args.source instanceof Selector) {\n selectorModel = args.source;\n connector = selectorModel.connectors[0];\n }\n var id = connector.id.split('_');\n var annotationId = id[id.length - 1];\n var nodeId = id[id.length - 3] || id[0];\n if (args.target && args.target.id !== nodeId &&\n args.target.shape.shape !== 'TextAnnotation') {\n this.diagram.startGroupAction();\n var parentNode = this.diagram.nameTable[id[0]];\n var clonedNode = this.getAnnotation(parentNode, id[1]);\n var annotationNode = {\n id: id[1] + randomId(),\n angle: Point.findAngle(connector.intermediatePoints[0], connector.intermediatePoints[1]),\n text: clonedNode.text,\n length: Point.distancePoints(connector.intermediatePoints[0], connector.intermediatePoints[1]),\n shape: { shape: 'TextAnnotation', type: 'Bpmn' },\n nodeId: clonedNode.nodeId\n };\n var annotationObj = new BpmnAnnotation(args.target.shape, 'annotations', annotationNode, true);\n this.diagram.bpmnModule.checkAndRemoveAnnotations(this.diagram.nameTable[connector.targetID], this.diagram);\n this.diagram.refreshCanvasLayers();\n annotationObj.id = id[1];\n this.diagram.addTextAnnotation(annotationObj, args.target);\n this.diagram.endGroupAction();\n }\n else if (connector) {\n connector.sourceID = nodeId;\n this.diagram.connectorPropertyChange(connector, {}, { sourceID: nodeId });\n this.diagram.updateDiagramObject(connector);\n }\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.connect = function (endPoint, args) {\n var newChanges = {};\n var oldChanges = {};\n var oldNodeId;\n var oldPortId;\n var selectorModel;\n var connector;\n if (args.source instanceof Selector) {\n selectorModel = args.source;\n connector = selectorModel.connectors[0];\n }\n else if (args.source instanceof Connector && this.diagram.currentDrawingObject) {\n connector = this.diagram.currentDrawingObject;\n }\n var target = this.findTarget(args.targetWrapper, args.target, endPoint === 'ConnectorSourceEnd', true);\n var nodeEndId = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEndId = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n if (target instanceof Node) {\n oldChanges[nodeEndId] = connector[nodeEndId];\n connector[nodeEndId] = target.id;\n newChanges[nodeEndId] = connector[nodeEndId];\n oldChanges[portEndId] = connector[portEndId];\n this.connectionEventChange(connector, oldChanges, newChanges, endPoint);\n }\n else {\n oldNodeId = connector[nodeEndId];\n oldPortId = connector[portEndId];\n connector[portEndId] = target.id;\n connector[nodeEndId] = args.target.id;\n newChanges[nodeEndId] = connector[nodeEndId];\n newChanges[portEndId] = connector[portEndId];\n var arg = {\n connector: connector, oldValue: { nodeId: oldNodeId, portId: oldPortId },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] },\n cancel: false, state: 'Changing', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n if (arg.cancel) {\n connector[nodeEndId] = oldNodeId;\n connector[portEndId] = oldPortId;\n newChanges[nodeEndId] = oldNodeId;\n newChanges[portEndId] = oldPortId;\n }\n else {\n this.diagram.connectorPropertyChange(connector, {}, newChanges);\n this.diagram.updateDiagramObject(connector);\n arg = {\n connector: connector, oldValue: { nodeId: oldNodeId, portId: oldPortId },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] }, cancel: false,\n state: 'Changed', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n }\n }\n this.renderHighlighter(args, undefined, endPoint === 'ConnectorSourceEnd');\n };\n /** @private */\n CommandHandler.prototype.cut = function () {\n var index;\n this.clipboardData.pasteIndex = 0;\n if (this.diagram.undoRedoModule) {\n this.diagram.historyList.startGroupAction();\n }\n this.clipboardData.clipObject = this.copyObjects();\n if (this.diagram.undoRedoModule) {\n this.diagram.historyList.endGroupAction();\n }\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n };\n /** @private */\n CommandHandler.prototype.addLayer = function (layer, objects) {\n layer.id = layer.id || randomId();\n layer.zIndex = this.diagram.layers.length;\n layer = new Layer(this.diagram, 'layers', layer, true);\n layer.objectZIndex = -1;\n layer.zIndexTable = {};\n this.diagram.layers.push(layer);\n this.diagram.layerZIndexTable[layer.zIndex] = layer.id;\n this.diagram.activeLayer = layer;\n var layers = layer.objects;\n if (objects) {\n for (var i = 0; i < objects.length; i++) {\n this.diagram.add(objects[i]);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.getObjectLayer = function (objectName) {\n var layers = this.diagram.layers;\n for (var i = 0; i < layers.length; i++) {\n var objIndex = layers[i].objects.indexOf(objectName);\n if (objIndex > -1) {\n return layers[i];\n }\n }\n return this.diagram.activeLayer;\n };\n /** @private */\n CommandHandler.prototype.getLayer = function (layerName) {\n var layers = this.diagram.layers;\n for (var i = 0; i < layers.length; i++) {\n if (layers[i].id === layerName) {\n return layers[i];\n }\n }\n return undefined;\n };\n /** @private */\n CommandHandler.prototype.removeLayer = function (layerId) {\n var layers = this.getLayer(layerId);\n if (layers) {\n var index = this.diagram.layers.indexOf(layers);\n var layerObject = layers.objects;\n for (var i = layerObject.length - 1; i >= 0; i--) {\n this.diagram.unSelect(this.diagram.nameTable[layerObject[i]]);\n this.diagram.remove(this.diagram.nameTable[layerObject[i]]);\n if (layers.id !== 'default_layer') {\n if (this.diagram.activeLayer.id === layerId) {\n this.diagram.activeLayer = this.diagram.layers[this.diagram.layers.length - 1];\n }\n }\n }\n delete this.diagram.layerZIndexTable[layers.zIndex];\n this.diagram.layers.splice(index, 1);\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.moveObjects = function (objects, targetLayer) {\n var layer = this.getLayer(targetLayer) || this.diagram.activeLayer;\n this.diagram.setActiveLayer(layer.id);\n var targerNodes;\n for (var _i = 0, objects_1 = objects; _i < objects_1.length; _i++) {\n var i = objects_1[_i];\n var layer_1 = this.getObjectLayer(i);\n var index = layer_1.objects.indexOf(i);\n if (index > -1) {\n targerNodes = this.diagram.nameTable[i];\n this.diagram.unSelect(targerNodes);\n this.diagram.remove(this.diagram.nameTable[i]);\n this.diagram.add(targerNodes);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.cloneLayer = function (layerName) {\n var layers = this.diagram.layers;\n var layer = this.getLayer(layerName);\n if (layer) {\n var cloneObject_1 = [];\n var newlayer = {\n id: layerName + '_' + randomId(), objects: [], visible: true, lock: false\n };\n this.addLayer(newlayer);\n newlayer.zIndex = this.diagram.layers.length - 1;\n var multiSelect = cloneObject_1.length !== 1;\n for (var _i = 0, _a = layer.objects; _i < _a.length; _i++) {\n var obj = _a[_i];\n cloneObject_1.push(this.diagram.nameTable[obj]);\n }\n this.paste(cloneObject_1);\n }\n };\n /** @private */\n CommandHandler.prototype.copy = function () {\n this.clipboardData.pasteIndex = 1;\n this.clipboardData.clipObject = this.copyObjects();\n return this.clipboardData.clipObject;\n };\n /** @private */\n CommandHandler.prototype.copyObjects = function () {\n var selectedItems = [];\n var obj = [];\n this.clipboardData.childTable = {};\n if (this.diagram.selectedItems.connectors.length > 0) {\n selectedItems = this.diagram.selectedItems.connectors;\n for (var j = 0; j < selectedItems.length; j++) {\n var element = void 0;\n if (this.diagram.bpmnModule &&\n this.diagram.bpmnModule.textAnnotationConnectors.indexOf(selectedItems[j]) > -1) {\n element = cloneObject((this.diagram.nameTable[selectedItems[j].targetID]));\n }\n else {\n element = cloneObject((selectedItems[j]));\n }\n obj.push(element);\n }\n }\n if (this.diagram.selectedItems.nodes.length > 0) {\n selectedItems = selectedItems.concat(this.diagram.selectedItems.nodes);\n for (var j = 0; j < this.diagram.selectedItems.nodes.length; j++) {\n var node = clone(this.diagram.selectedItems.nodes[j]);\n var processTable = {};\n this.copyProcesses(node);\n obj.push(clone(node));\n var matrix = identityMatrix();\n rotateMatrix(matrix, -node.rotateAngle, node.offsetX, node.offsetY);\n if (node.children) {\n var childTable = this.clipboardData.childTable;\n var tempNode = void 0;\n var elements = [];\n var nodes = this.getAllDescendants(node, elements, true);\n for (var i = 0; i < nodes.length; i++) {\n tempNode = this.diagram.nameTable[nodes[i].id];\n var clonedObject = childTable[tempNode.id] = clone(tempNode);\n var newOffset = transformPointByMatrix(matrix, { x: clonedObject.wrapper.offsetX, y: clonedObject.wrapper.offsetY });\n if (tempNode instanceof Node) {\n clonedObject.offsetX = newOffset.x;\n clonedObject.offsetY = newOffset.y;\n clonedObject.rotateAngle -= node.rotateAngle;\n }\n }\n this.clipboardData.childTable = childTable;\n }\n }\n }\n if (this.clipboardData.pasteIndex === 0) {\n this.startGroupAction();\n for (var _i = 0, selectedItems_1 = selectedItems; _i < selectedItems_1.length; _i++) {\n var item = selectedItems_1[_i];\n if (this.diagram.nameTable[item.id]) {\n if (this.diagram.bpmnModule &&\n this.diagram.bpmnModule.textAnnotationConnectors.indexOf(item) > -1) {\n this.diagram.remove(this.diagram.nameTable[item.targetID]);\n }\n else {\n this.diagram.remove(item);\n }\n }\n }\n this.endGroupAction();\n }\n this.sortByZIndex(obj, 'zIndex');\n return obj;\n };\n CommandHandler.prototype.copyProcesses = function (node) {\n if (node.shape.type === 'Bpmn' && node.shape.activity &&\n node.shape.activity.subProcess.processes &&\n node.shape.activity.subProcess.processes.length > 0) {\n var processes = node.shape.activity.subProcess.processes;\n for (var _i = 0, processes_1 = processes; _i < processes_1.length; _i++) {\n var i = processes_1[_i];\n this.processTable[i] = (clone(this.diagram.nameTable[i]));\n if (this.processTable[i].shape.activity.subProcess.processes &&\n this.processTable[i].shape.activity.subProcess.processes.length > 0) {\n this.copyProcesses(this.processTable[i]);\n }\n }\n this.clipboardData.processTable = this.processTable;\n }\n };\n /** @private */\n CommandHandler.prototype.group = function () {\n var propName = 'isProtectedOnChange';\n var protectedChange = this.diagram[propName];\n this.diagram.protectPropertyChange(true);\n this.diagram.diagramActions = this.diagram.diagramActions | DiagramAction.Group;\n var selectedItems = [];\n var obj = {};\n obj.id = 'group' + randomId();\n obj = new Node(this.diagram, 'nodes', obj, true);\n obj.children = [];\n selectedItems = this.diagram.selectedItems.nodes;\n selectedItems = selectedItems.concat(this.diagram.selectedItems.connectors);\n for (var i = 0; i < selectedItems.length; i++) {\n if (!selectedItems[i].parentId) {\n obj.children.push(selectedItems[i].id);\n }\n }\n this.diagram.add(obj);\n var entry = { type: 'Group', undoObject: obj, redoObject: obj, category: 'Internal' };\n this.addHistoryEntry(entry);\n this.diagram.diagramActions = this.diagram.diagramActions & ~DiagramAction.Group;\n this.diagram.protectPropertyChange(protectedChange);\n };\n /** @private */\n CommandHandler.prototype.unGroup = function (obj) {\n var propName = 'isProtectedOnChange';\n var protectedChange = this.diagram[propName];\n this.diagram.protectPropertyChange(true);\n this.diagram.diagramActions = this.diagram.diagramActions | DiagramAction.Group;\n var selectedItems = [];\n if (obj) {\n selectedItems.push(obj);\n }\n else {\n selectedItems = this.diagram.selectedItems.nodes;\n }\n for (var i = 0; i < selectedItems.length; i++) {\n var node = selectedItems[i];\n var entry = {\n type: 'UnGroup', undoObject: cloneObject(node),\n redoObject: cloneObject(node), category: 'Internal'\n };\n if (!(this.diagram.diagramActions & DiagramAction.UndoRedo)) {\n this.addHistoryEntry(entry);\n }\n if (node.children) {\n if (node.ports && node.ports.length > 0) {\n this.diagram.removePorts(node, node.ports);\n }\n if (node.annotations && node.annotations.length > 0) {\n this.diagram.removeLabels(node, node.annotations);\n }\n var parentNode = this.diagram.nameTable[node.parentId];\n for (var j = node.children.length - 1; j >= 0; j--) {\n (this.diagram.nameTable[node.children[0]]).parentId = '';\n this.diagram.deleteChild(this.diagram.nameTable[node.children[0]], node);\n if (node.parentId && node.children[0]) {\n this.diagram.addChild(parentNode, node.children[0]);\n }\n }\n if (node.parentId) {\n this.diagram.deleteChild(node, parentNode);\n }\n }\n this.diagram.removeNode(node);\n this.clearSelection();\n }\n this.diagram.diagramActions = this.diagram.diagramActions & ~DiagramAction.Group;\n this.diagram.protectPropertyChange(protectedChange);\n };\n /** @private */\n CommandHandler.prototype.paste = function (obj) {\n if (obj || this.clipboardData.clipObject) {\n this.diagram.protectPropertyChange(true);\n var copiedItems = obj ? this.getNewObject(obj) :\n this.clipboardData.clipObject;\n if (copiedItems) {\n var multiSelect = copiedItems.length !== 1;\n var groupAction = false;\n var objectTable = {};\n var keyTable = {};\n if (this.clipboardData.pasteIndex !== 0) {\n this.clearSelection();\n }\n if (this.diagram.undoRedoModule) {\n groupAction = true;\n this.diagram.historyList.startGroupAction();\n }\n for (var _i = 0, copiedItems_1 = copiedItems; _i < copiedItems_1.length; _i++) {\n var copy = copiedItems_1[_i];\n objectTable[copy.id] = copy;\n }\n for (var j = 0; j < copiedItems.length; j++) {\n var copy = copiedItems[j];\n if (getObjectType(copy) === Connector) {\n var clonedObj = clone(copy);\n var nodeId = clonedObj.sourceID;\n clonedObj.sourceID = '';\n if (objectTable[nodeId] && keyTable[nodeId]) {\n clonedObj.sourceID = keyTable[nodeId];\n }\n nodeId = clonedObj.targetID;\n clonedObj.targetID = '';\n if (objectTable[nodeId] && keyTable[nodeId]) {\n clonedObj.targetID = keyTable[nodeId];\n }\n var newObj = this.cloneConnector(clonedObj, multiSelect);\n keyTable[copy.id] = newObj.id;\n }\n else {\n var newNode = this.cloneNode(copy, multiSelect);\n //bpmn text annotations will not be pasted\n if (newNode) {\n keyTable[copy.id] = newNode.id;\n var edges = copy.inEdges;\n if (edges) {\n for (var _a = 0, edges_1 = edges; _a < edges_1.length; _a++) {\n var edge = edges_1[_a];\n if (objectTable[edge] && keyTable[edge]) {\n var newConnector = this.diagram.nameTable[keyTable[edge]];\n newConnector.targetID = keyTable[copy.id];\n this.diagram.connectorPropertyChange(newConnector, { targetID: '', targetPortID: '' }, { targetID: newConnector.targetID, targetPortID: newConnector.targetPortID });\n }\n }\n }\n edges = copy.outEdges;\n if (edges) {\n for (var _b = 0, edges_2 = edges; _b < edges_2.length; _b++) {\n var edge = edges_2[_b];\n if (objectTable[edge] && keyTable[edge]) {\n var newConnector = this.diagram.nameTable[keyTable[edge]];\n newConnector.sourceID = keyTable[copy.id];\n this.diagram.connectorPropertyChange(newConnector, { sourceID: '', sourcePortID: '' }, { sourceID: newConnector.sourceID, sourcePortID: newConnector.sourcePortID });\n }\n }\n }\n }\n }\n }\n if (groupAction === true) {\n this.diagram.historyList.endGroupAction();\n groupAction = false;\n }\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n this.clipboardData.pasteIndex++;\n this.diagram.protectPropertyChange(false);\n }\n }\n };\n CommandHandler.prototype.getNewObject = function (obj) {\n var newObj;\n var newobjs = [];\n this.clipboardData.pasteIndex = 1;\n for (var i = 0; i < obj.length; i++) {\n newObj = cloneObject(obj[i]);\n newobjs.push(newObj);\n }\n return newobjs;\n };\n CommandHandler.prototype.cloneConnector = function (connector, multiSelect) {\n var newConnector;\n var cloneObject = clone(connector);\n this.translateObject(cloneObject);\n cloneObject.zIndex = -1;\n newConnector = this.diagram.add(cloneObject);\n this.selectObjects([newConnector], multiSelect);\n return newConnector;\n };\n CommandHandler.prototype.cloneNode = function (node, multiSelect, children) {\n var newNode;\n var connectorsTable = {};\n var cloneObject = clone(node);\n var process;\n if (node.shape && node.shape.type === 'Bpmn' && node.shape.activity &&\n node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length) {\n process = cloneObject.shape.activity.subProcess.processes;\n cloneObject.zIndex = -1;\n cloneObject.shape.activity.subProcess.processes = undefined;\n }\n if (node.children && node.children.length && (!children || !children.length)) {\n newNode = this.cloneGroup(node, multiSelect);\n }\n else if (node.shape && node.shape.shape === 'TextAnnotation' && node.id.indexOf('_textannotation_') !== -1 &&\n this.diagram.nameTable[node.id]) {\n var checkAnnotation = node.id.split('_textannotation_');\n var parentNode = void 0;\n var annotation = this.diagram.nameTable[node.id];\n for (var j = 0; j < annotation.inEdges.length; j++) {\n var connector = this.diagram.nameTable[annotation.inEdges[j]];\n if (connector) {\n parentNode = this.diagram.nameTable[connector.sourceID];\n var clonedNode = this.getAnnotation(parentNode, checkAnnotation[1]);\n var annotationNode = {\n id: checkAnnotation[1] + randomId(),\n angle: clonedNode.angle,\n text: clonedNode.text,\n length: clonedNode.length,\n shape: { shape: 'TextAnnotation', type: 'Bpmn' },\n nodeId: clonedNode.nodeId\n };\n this.diagram.addTextAnnotation(annotationNode, parentNode);\n }\n }\n }\n else {\n this.translateObject(cloneObject);\n cloneObject.zIndex = -1;\n if (children) {\n cloneObject.children = children;\n }\n newNode = this.diagram.add(cloneObject);\n }\n for (var _i = 0, _a = Object.keys(connectorsTable); _i < _a.length; _i++) {\n var i = _a[_i];\n this.diagram.add(connectorsTable[i]);\n }\n if (process && process.length) {\n newNode.shape.activity.subProcess.processes = process;\n this.cloneSubProcesses(newNode);\n }\n if (newNode) {\n this.selectObjects([newNode], multiSelect);\n }\n return newNode;\n };\n CommandHandler.prototype.getAnnotation = function (parent, annotationId) {\n var currentAnnotation = parent.shape.annotations;\n if (currentAnnotation && currentAnnotation.length) {\n for (var g = 0; g <= currentAnnotation.length; g++) {\n if (currentAnnotation[g].id === annotationId) {\n return currentAnnotation[g];\n }\n }\n }\n return undefined;\n };\n CommandHandler.prototype.cloneSubProcesses = function (node) {\n var connector = [];\n var temp = {};\n if (node.shape.type === 'Bpmn' && node.shape.activity &&\n node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length) {\n var process = node.shape.activity.subProcess.processes;\n for (var g = 0; g < process.length; g++) {\n var child = this.diagram.nameTable[process[g]] || this.clipboardData.processTable[process[g]];\n for (var _i = 0, _a = child.outEdges; _i < _a.length; _i++) {\n var j = _a[_i];\n if (connector.indexOf(j) < 0) {\n connector.push(j);\n }\n }\n for (var _b = 0, _c = child.inEdges; _b < _c.length; _b++) {\n var j = _c[_b];\n if (connector.indexOf(j) < 0) {\n connector.push(j);\n }\n }\n var innerChild = cloneObject(this.clipboardData.processTable[process[g]]);\n innerChild.processId = node.id;\n var newNode = this.cloneNode(innerChild, false);\n temp[process[g]] = newNode.id;\n process[g] = newNode.id;\n this.diagram.addProcess(newNode, node.id);\n for (var _d = 0, connector_1 = connector; _d < connector_1.length; _d++) {\n var i = connector_1[_d];\n var node_1 = this.diagram.nameTable[i] || this.diagram.connectorTable[i];\n var clonedNode = cloneObject(node_1);\n if (temp[clonedNode.sourceID] && temp[clonedNode.targetID]) {\n clonedNode.zIndex = -1;\n clonedNode.id += randomId();\n clonedNode.sourceID = temp[clonedNode.sourceID];\n clonedNode.targetID = temp[clonedNode.targetID];\n connector.splice(connector.indexOf(i), 1);\n this.diagram.add(clonedNode);\n }\n }\n }\n }\n };\n CommandHandler.prototype.cloneGroup = function (obj, multiSelect) {\n var value;\n var newChildren = [];\n var children = [];\n children = children.concat(obj.children);\n if (this.clipboardData.childTable) {\n for (var i = 0; i < children.length; i++) {\n var childObj = this.clipboardData.childTable[children[i]];\n if (childObj) {\n var newObj = void 0;\n if (getObjectType(childObj) === Connector) {\n newObj = this.cloneConnector(childObj, multiSelect);\n }\n else {\n newObj = this.cloneNode(childObj, multiSelect);\n }\n newChildren.push(newObj.id);\n }\n }\n }\n var parentObj = this.cloneNode(obj, multiSelect, newChildren);\n return parentObj;\n };\n /** @private */\n CommandHandler.prototype.translateObject = function (obj) {\n obj.id += randomId();\n var diff = this.clipboardData.pasteIndex * 10;\n if (getObjectType(obj) === Connector) {\n obj.sourcePoint = {\n x: obj.sourcePoint.x + diff, y: obj.sourcePoint.y + diff\n };\n obj.targetPoint = {\n x: obj.targetPoint.x + diff, y: obj.targetPoint.y + diff\n };\n if (obj.type === 'Bezier') {\n var segments = obj.segments;\n for (var i = 0; i < segments.length; i++) {\n if (!Point.isEmptyPoint(segments[i].point1)) {\n segments[i].point1 = {\n x: segments[i].point1.x + diff, y: segments[i].point1.y + diff\n };\n }\n if (!Point.isEmptyPoint(segments[i].point2)) {\n segments[i].point2 = {\n x: segments[i].point2.x + diff, y: segments[i].point2.y + diff\n };\n }\n }\n }\n if (obj.type === 'Straight' || obj.type === 'Bezier') {\n if (obj.segments && obj.segments.length > 0) {\n var segments = obj.segments;\n for (var i = 0; i < segments.length - 1; i++) {\n segments[i].point.x += diff;\n segments[i].point.y += diff;\n }\n }\n }\n }\n else {\n obj.offsetX += diff;\n obj.offsetY += diff;\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.drawObject = function (obj) {\n var newObj;\n var cloneObject;\n cloneObject = clone(this.diagram.drawingObject);\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var prop = _a[_i];\n cloneObject[prop] = obj[prop];\n }\n if (getObjectType(this.diagram.drawingObject) === Node) {\n newObj = new Node(this.diagram, 'nodes', cloneObject, true);\n newObj.id = (this.diagram.drawingObject.id || 'node') + randomId();\n this.diagram.initObject(newObj);\n }\n else {\n newObj = new Connector(this.diagram, 'connectors', cloneObject, true);\n newObj.id = (this.diagram.drawingObject.id || 'connector') + randomId();\n this.diagram.initObject(newObj);\n }\n this.diagram.updateDiagramObject(newObj);\n this.diagram.currentDrawingObject = newObj;\n return newObj;\n };\n /**\n * @private\n */\n CommandHandler.prototype.addObjectToDiagram = function (obj) {\n var newObj;\n this.diagram.removeFromAQuad(obj);\n this.diagram.removeObjectsFromLayer(this.diagram.nameTable[obj.id]);\n delete this.diagram.nameTable[obj.id];\n newObj = this.diagram.add(obj);\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n this.selectObjects([newObj]);\n if (obj && (!(canContinuousDraw(this.diagram)))) {\n this.diagram.tool &= ~DiagramTools.DrawOnce;\n this.diagram.currentDrawingObject = undefined;\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.addText = function (obj, currentPosition) {\n var annotation = this.diagram.findElementUnderMouse(obj, currentPosition);\n this.diagram.startTextEdit(obj, annotation instanceof TextElement ? (annotation.id).split('_')[1] : undefined);\n };\n /** @private */\n CommandHandler.prototype.selectObjects = function (obj, multipleSelection, oldValue) {\n var arg = {\n oldValue: oldValue ? oldValue : [], newValue: obj, cause: this.diagram.diagramActions,\n state: 'Changing', type: 'Addition', cancel: false\n };\n var select = true;\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n var canDoMultipleSelection = canMultiSelect(this.diagram);\n var canDoSingleSelection = canSingleSelect(this.diagram);\n if (canDoSingleSelection || canDoMultipleSelection) {\n if (!canDoMultipleSelection && ((obj.length > 1) || (multipleSelection && obj.length === 1))) {\n if (obj.length === 1) {\n this.clearSelection();\n }\n else {\n return;\n }\n }\n if (!canDoSingleSelection && obj.length === 1 && (!multipleSelection || !hasSelection(this.diagram))) {\n this.clearSelection();\n return;\n }\n }\n if (!arg.cancel) {\n for (var i = 0; i < obj.length; i++) {\n var newObj = obj[i];\n select = true;\n if (!hasSelection(this.diagram)) {\n this.select(newObj, i > 0 || multipleSelection, true);\n }\n else {\n if ((i > 0 || multipleSelection) && newObj.children && !newObj.parentId) {\n for (var i_1 = 0; i_1 < this.diagram.selectedItems.nodes.length; i_1++) {\n var parentNode = this.diagram.nameTable[this.diagram.selectedItems.nodes[i_1].parentId];\n if (parentNode) {\n parentNode = this.findParent(parentNode);\n if (parentNode) {\n if (newObj.id === parentNode.id) {\n this.selectGroup(newObj);\n }\n }\n }\n }\n }\n this.selectProcesses(newObj);\n select = this.selectBpmnSubProcesses(newObj);\n if (select) {\n this.select(newObj, i > 0 || multipleSelection, true);\n }\n }\n }\n arg = {\n oldValue: oldValue ? oldValue : [], newValue: obj, cause: this.diagram.diagramActions,\n state: 'Changed', type: 'Addition', cancel: false\n };\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n this.diagram.renderSelector(multipleSelection || (obj && obj.length > 1));\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.findParent = function (node) {\n if (node.parentId) {\n node = this.diagram.nameTable[node.parentId];\n this.findParent(node);\n }\n return node;\n };\n CommandHandler.prototype.selectProcesses = function (newObj) {\n if (this.hasProcesses(newObj)) {\n var processes = (newObj).shape.activity.subProcess.processes;\n for (var i = 0; i < processes.length; i++) {\n var innerChild = this.diagram.nameTable[processes[i]];\n if (this.hasProcesses(innerChild)) {\n this.selectObjects([innerChild], true);\n }\n this.unSelect(innerChild);\n }\n }\n };\n CommandHandler.prototype.selectGroup = function (newObj) {\n for (var j = 0; j < newObj.children.length; j++) {\n var innerChild = this.diagram.nameTable[newObj.children[j]];\n if (innerChild.children) {\n this.selectGroup(innerChild);\n }\n this.unSelect(this.diagram.nameTable[newObj.children[j]]);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.selectBpmnSubProcesses = function (node) {\n var select = true;\n var parent;\n if (node.processId) {\n if (isSelected(this.diagram, this.diagram.nameTable[node.processId])) {\n select = false;\n }\n else {\n select = this.selectBpmnSubProcesses(this.diagram.nameTable[node.processId]);\n }\n }\n else if (node instanceof Connector) {\n if (node.sourceID && this.diagram.nameTable[node.sourceID] &&\n this.diagram.nameTable[node.sourceID].processId) {\n parent = this.diagram.nameTable[node.sourceID].processId;\n }\n if (node.targetID && this.diagram.nameTable[node.targetID] &&\n this.diagram.nameTable[node.targetID].processId) {\n parent = this.diagram.nameTable[node.targetID].processId;\n }\n if (parent) {\n if (isSelected(this.diagram, this.diagram.nameTable[parent])) {\n return false;\n }\n else {\n select = this.selectBpmnSubProcesses(this.diagram.nameTable[parent]);\n }\n }\n }\n return select;\n };\n /**\n * @private\n */\n CommandHandler.prototype.hasProcesses = function (node) {\n if (node) {\n if ((node.shape.type === 'Bpmn') && node.shape.activity &&\n node.shape.activity.subProcess.processes &&\n node.shape.activity.subProcess.processes.length > 0) {\n return true;\n }\n }\n return false;\n };\n /** @private */\n CommandHandler.prototype.select = function (obj, multipleSelection, preventUpdate) {\n var hasLayer = this.getObjectLayer(obj.id);\n if ((canSelect(obj) && !(obj instanceof Selector) && !isSelected(this.diagram, obj))\n && (hasLayer && !hasLayer.lock && hasLayer.visible) && obj.wrapper.visible) {\n multipleSelection = hasSelection(this.diagram) ? multipleSelection : false;\n if (!multipleSelection) {\n this.clearSelection();\n }\n var selectorModel = this.diagram.selectedItems;\n var convert = obj;\n if (convert instanceof Node) {\n selectorModel.nodes.push(obj);\n }\n else {\n selectorModel.connectors.push(obj);\n }\n if (!multipleSelection) {\n selectorModel.init(this.diagram);\n if (selectorModel.nodes.length === 1 && selectorModel.connectors.length === 0) {\n selectorModel.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.pivot = selectorModel.nodes[0].pivot;\n }\n }\n else {\n selectorModel.wrapper.rotateAngle = selectorModel.rotateAngle = 0;\n selectorModel.wrapper.children.push(obj.wrapper);\n }\n if (!preventUpdate) {\n this.diagram.renderSelector(multipleSelection);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.labelSelect = function (obj, textWrapper) {\n var selectorModel = (this.diagram.selectedItems);\n selectorModel.nodes = selectorModel.connectors = [];\n if (obj instanceof Node) {\n selectorModel.nodes[0] = obj;\n }\n else {\n selectorModel.connectors[0] = obj;\n }\n selectorModel.annotation = (this.findTarget(textWrapper, obj));\n selectorModel.init(this.diagram);\n this.diagram.renderSelector(false);\n };\n /** @private */\n CommandHandler.prototype.unSelect = function (obj) {\n var objArray = [];\n objArray.push(obj);\n var arg = {\n oldValue: objArray, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changing', type: 'Removal', cancel: false\n };\n if (!this.diagram.currentSymbol) {\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n if (isSelected(this.diagram, obj)) {\n var selectormodel = this.diagram.selectedItems;\n var index = void 0;\n if (obj instanceof Node) {\n index = selectormodel.nodes.indexOf(obj, 0);\n selectormodel.nodes.splice(index, 1);\n }\n else {\n index = selectormodel.connectors.indexOf(obj, 0);\n selectormodel.connectors.splice(index, 1);\n }\n arg = {\n oldValue: objArray, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changed', type: 'Removal', cancel: false\n };\n if (!arg.cancel) {\n index = selectormodel.wrapper.children.indexOf(obj.wrapper, 0);\n selectormodel.wrapper.children.splice(index, 1);\n this.diagram.updateSelector();\n if (!this.diagram.currentSymbol) {\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.getChildElements = function (child) {\n var children = [];\n for (var i = 0; i < child.length; i++) {\n var childNode = child[i];\n if (childNode.children && childNode.children.length > 0) {\n children.concat(this.getChildElements(childNode.children));\n }\n else {\n children.push(childNode.id);\n if (childNode instanceof TextElement) {\n children.push(childNode.id + '_text');\n }\n }\n }\n return children;\n };\n CommandHandler.prototype.moveSvgNode = function (nodeId, targetID) {\n var diagramDiv = getDiagramElement(targetID + '_groupElement', this.diagram.element.id);\n var backNode = getDiagramElement(nodeId + '_groupElement', this.diagram.element.id);\n diagramDiv.parentNode.insertBefore(backNode, diagramDiv);\n };\n /** @private */\n CommandHandler.prototype.sendLayerBackward = function (layerName) {\n var layer = this.getLayer(layerName);\n if (layer && layer.zIndex !== 0) {\n var index = layer.zIndex;\n if (this.diagram.mode === 'SVG') {\n var currentLayerObject = layer.objects;\n var targetObject = this.getLayer(this.diagram.layerZIndexTable[index - 1]).objects[0];\n if (targetObject) {\n for (var _i = 0, currentLayerObject_1 = currentLayerObject; _i < currentLayerObject_1.length; _i++) {\n var obj = currentLayerObject_1[_i];\n this.moveSvgNode(obj, targetObject);\n }\n }\n }\n var targetLayer = this.getLayer(this.diagram.layerZIndexTable[index - 1]);\n targetLayer.zIndex = targetLayer.zIndex + 1;\n layer.zIndex = layer.zIndex - 1;\n var temp = this.diagram.layerZIndexTable[index];\n this.diagram.layerZIndexTable[index] = this.diagram.layerZIndexTable[index - 1];\n this.diagram.layerZIndexTable[index - 1] = temp;\n if (this.diagram.mode === 'Canvas') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.bringLayerForward = function (layerName) {\n var layer = this.getLayer(layerName);\n if (layer && layer.zIndex < this.diagram.layers.length - 1) {\n var index = layer.zIndex;\n if (this.diagram.mode === 'SVG') {\n var targetObject = this.getLayer(this.diagram.layerZIndexTable[index + 1]).objects[0];\n var currentLayerObject = layer.objects;\n for (var _i = 0, currentLayerObject_2 = currentLayerObject; _i < currentLayerObject_2.length; _i++) {\n var obj = currentLayerObject_2[_i];\n if (targetObject) {\n this.moveSvgNode(targetObject, obj);\n }\n }\n }\n var targetLayer = this.getLayer(this.diagram.layerZIndexTable[index + 1]);\n targetLayer.zIndex = targetLayer.zIndex - 1;\n layer.zIndex = layer.zIndex + 1;\n var temp = this.diagram.layerZIndexTable[index];\n this.diagram.layerZIndexTable[index] = this.diagram.layerZIndexTable[index + 1];\n this.diagram.layerZIndexTable[index + 1] = temp;\n if (this.diagram.mode === 'Canvas') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.sendToBack = function () {\n if (hasSelection(this.diagram)) {\n var objectId = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var index = this.diagram.nameTable[objectId].zIndex;\n var layerNum = this.diagram.layers.indexOf(this.getObjectLayer(objectId));\n var zIndexTable = this.diagram.layers[layerNum].zIndexTable;\n for (var i = index; i > 0; i--) {\n if (zIndexTable[i]) {\n //When there are empty records in the zindex table\n if (!zIndexTable[i - 1]) {\n zIndexTable[i - 1] = zIndexTable[i];\n this.diagram.nameTable[zIndexTable[i - 1]].zIndex = i;\n delete zIndexTable[i];\n }\n else {\n //bringing the objects forward\n zIndexTable[i] = zIndexTable[i - 1];\n this.diagram.nameTable[zIndexTable[i]].zIndex = i;\n }\n }\n }\n zIndexTable[0] = this.diagram.nameTable[objectId].id;\n this.diagram.nameTable[objectId].zIndex = 0;\n if (this.diagram.mode === 'SVG') {\n var i = 1;\n var target = zIndexTable[i];\n while (!target && i < index) {\n target = zIndexTable[++i];\n }\n this.moveSvgNode(objectId, target);\n this.updateNativeNodeIndex(objectId);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.bringToFront = function () {\n if (hasSelection(this.diagram)) {\n var objectName = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var layerNum = this.diagram.layers.indexOf(this.getObjectLayer(objectName));\n var zIndexTable = this.diagram.layers[layerNum].zIndexTable;\n //find the maximum zIndex of the tabel\n var tabelLength = Number(Object.keys(zIndexTable).sort(function (a, b) { return Number(a) - Number(b); }).reverse()[0]);\n var index = this.diagram.nameTable[objectName].zIndex;\n for (var i = index; i < tabelLength; i++) {\n //When there are empty records in the zindex table\n if (zIndexTable[i]) {\n if (!zIndexTable[i + 1]) {\n zIndexTable[i + 1] = zIndexTable[i];\n this.diagram.nameTable[zIndexTable[i + 1]].zIndex = i;\n delete zIndexTable[i];\n }\n else {\n //bringing the objects backward\n zIndexTable[i] = zIndexTable[i + 1];\n this.diagram.nameTable[zIndexTable[i]].zIndex = i;\n }\n }\n }\n zIndexTable[tabelLength] = this.diagram.nameTable[objectName].id;\n this.diagram.nameTable[objectName].zIndex = tabelLength;\n if (this.diagram.mode === 'SVG') {\n var diagramLayer = this.diagram.diagramLayer;\n var child = this.getChildElements(this.diagram.nameTable[objectName].wrapper.children);\n var targerNodes = [];\n var element = getDiagramElement(objectName + '_groupElement', this.diagram.element.id);\n element.parentNode.removeChild(element);\n var nodes = this.diagram.selectedItems.nodes;\n if (nodes.length > 0 && (nodes[0].shape.type === 'Native' || nodes[0].shape.type === 'HTML')) {\n for (var j = 0; j < this.diagram.views.length; j++) {\n element = getDiagramElement(objectName + (nodes[0].shape.type === 'HTML' ? '_content_html_element' : '_content_groupElement'), this.diagram.views[j]);\n var lastChildNode = element.parentNode.lastChild;\n lastChildNode.parentNode.insertBefore(element, lastChildNode.nextSibling);\n }\n }\n var htmlLayer = getHTMLLayer(this.diagram.element.id);\n this.diagram.diagramRenderer.renderElement(this.diagram.nameTable[objectName].wrapper, diagramLayer, htmlLayer);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.sortByZIndex = function (nodeArray, sortID) {\n var id = sortID ? sortID : 'zIndex';\n nodeArray = nodeArray.sort(function (a, b) {\n return a[id] - b[id];\n });\n return nodeArray;\n };\n /** @private */\n CommandHandler.prototype.sendForward = function () {\n if (hasSelection(this.diagram)) {\n var nodeId = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var layerIndex = this.diagram.layers.indexOf(this.getObjectLayer(nodeId));\n var zIndexTable = this.diagram.layers[layerIndex].zIndexTable;\n var tabelLength = Object.keys(zIndexTable).length;\n var index = this.diagram.nameTable[nodeId];\n var intersectArray = [];\n var temp = this.diagram.spatialSearch.findObjects(index.wrapper.bounds);\n if (temp.length > 2) {\n temp = this.sortByZIndex(temp);\n }\n for (var _i = 0, temp_1 = temp; _i < temp_1.length; _i++) {\n var i = temp_1[_i];\n if (index.id !== i.id) {\n var currentLayer = this.getObjectLayer(i.id).zIndex;\n if (layerIndex === currentLayer && (Number(this.diagram.nameTable[nodeId].zIndex) < Number(i.zIndex)) &&\n index.wrapper.bounds.intersects(i.wrapper.bounds)) {\n intersectArray.push(i);\n break;\n }\n }\n }\n if (intersectArray.length > 0) {\n var overlapObject = intersectArray[0].zIndex;\n var currentObject = index.zIndex;\n var temp_2 = zIndexTable[overlapObject];\n //swap the nodes\n this.diagram.layers[0].zIndexTable[overlapObject] = index.id;\n this.diagram.nameTable[zIndexTable[overlapObject]].zIndex = overlapObject;\n this.diagram.layers[0].zIndexTable[currentObject] = intersectArray[0].id;\n this.diagram.nameTable[zIndexTable[currentObject]].zIndex = currentObject;\n if (this.diagram.mode === 'SVG') {\n this.moveSvgNode(zIndexTable[Number(intersectArray[0].zIndex)], nodeId);\n this.updateNativeNodeIndex(zIndexTable[Number(intersectArray[0].zIndex)], nodeId);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.sendBackward = function () {\n if (hasSelection(this.diagram)) {\n var objectId = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var layerNum = this.diagram.layers.indexOf(this.getObjectLayer(objectId));\n var zIndexTable = this.diagram.layers[layerNum].zIndexTable;\n var tabelLength = Object.keys(zIndexTable).length;\n var node = this.diagram.nameTable[objectId];\n var intersectArray = [];\n var temp = this.diagram.spatialSearch.findObjects(node.wrapper.bounds);\n if (temp.length > 2) {\n temp = this.sortByZIndex(temp);\n }\n for (var _i = 0, temp_3 = temp; _i < temp_3.length; _i++) {\n var i = temp_3[_i];\n if (node.id !== i.id) {\n var currentLayer = this.getObjectLayer(i.id).zIndex;\n if (layerNum === currentLayer && (Number(this.diagram.nameTable[objectId].zIndex) > Number(i.zIndex)) &&\n node.wrapper.bounds.intersects(i.wrapper.bounds)) {\n intersectArray.push(i);\n }\n }\n }\n if (intersectArray.length > 0) {\n var overlapObject = intersectArray[intersectArray.length - 1].zIndex;\n var currentObject = node.zIndex;\n var temp_4 = zIndexTable[overlapObject];\n //swap the nodes\n zIndexTable[overlapObject] = node.id;\n this.diagram.nameTable[zIndexTable[overlapObject]].zIndex = overlapObject;\n zIndexTable[currentObject] = intersectArray[intersectArray.length - 1].id;\n this.diagram.nameTable[zIndexTable[currentObject]].zIndex = currentObject;\n if (this.diagram.mode === 'SVG') {\n this.moveSvgNode(objectId, zIndexTable[intersectArray[intersectArray.length - 1].zIndex]);\n this.updateNativeNodeIndex(objectId, zIndexTable[intersectArray[intersectArray.length - 1].zIndex]);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n }\n };\n CommandHandler.prototype.updateNativeNodeIndex = function (nodeId, targetID) {\n var nodes = this.diagram.selectedItems.nodes;\n for (var i = 0; i < this.diagram.views.length; i++) {\n if (nodes.length > 0\n && (nodes[0].shape.type === 'HTML'\n || nodes[0].shape.type === 'Native')) {\n var id = nodes[0].shape.type === 'HTML' ? '_content_html_element' : '_content_groupElement';\n var backNode = getDiagramElement(nodeId + id, this.diagram.views[i]);\n var diagramDiv = targetID ? getDiagramElement(targetID + id, this.diagram.views[i])\n : backNode.parentElement.firstChild;\n diagramDiv.parentNode.insertBefore(backNode, diagramDiv);\n }\n }\n };\n CommandHandler.prototype.initSelectorWrapper = function () {\n var selectorModel = this.diagram.selectedItems;\n selectorModel.init(this.diagram);\n if (selectorModel.nodes.length === 1 && selectorModel.connectors.length === 0) {\n selectorModel.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.pivot = selectorModel.nodes[0].pivot;\n }\n };\n /** @private */\n CommandHandler.prototype.doRubberBandSelection = function (region) {\n this.clearSelectionRectangle();\n this.clearSelection();\n var selArray = [];\n var rubberArray = [];\n selArray = this.diagram.getNodesConnectors(selArray);\n if (this.diagram.selectedItems.rubberBandSelectionMode === 'CompleteIntersect') {\n rubberArray = completeRegion(region, selArray);\n }\n else {\n rubberArray = this.diagram.spatialSearch.findObjects(region);\n }\n if (rubberArray.length) {\n this.selectObjects(rubberArray, true);\n }\n };\n CommandHandler.prototype.clearSelectionRectangle = function () {\n var adornerSvg = getAdornerLayerSvg(this.diagram.element.id);\n var element = adornerSvg.getElementById(this.diagram.element.id + '_diagramAdorner_selected_region');\n if (element) {\n remove(element);\n }\n };\n /** @private */\n CommandHandler.prototype.dragConnectorEnds = function (endPoint, obj, point, segment, target, targetPortId) {\n var selectorModel;\n var connector;\n var node;\n var tx;\n var segmentPoint;\n var ty;\n var index;\n var checkBezierThumb = false;\n if (obj instanceof Selector) {\n selectorModel = obj;\n connector = selectorModel.connectors[0];\n }\n else if (obj instanceof Connector && this.diagram.currentDrawingObject) {\n this.clearSelection();\n connector = this.diagram.currentDrawingObject;\n }\n if (endPoint === 'BezierSourceThumb' || endPoint === 'BezierTargetThumb') {\n checkBezierThumb = true;\n }\n if (endPoint === 'ConnectorSourceEnd' || endPoint === 'BezierSourceThumb') {\n tx = point.x - (checkBezierThumb ? segment.bezierPoint1.x : connector.sourcePoint.x);\n ty = point.y - (checkBezierThumb ? segment.bezierPoint1.y : connector.sourcePoint.y);\n return this.dragSourceEnd(connector, tx, ty, null, point, endPoint, undefined, target, targetPortId, undefined, segment);\n }\n else {\n tx = point.x - (checkBezierThumb ? segment.bezierPoint2.x : connector.targetPoint.x);\n ty = point.y - (checkBezierThumb ? segment.bezierPoint2.y : connector.targetPoint.y);\n return this.dragTargetEnd(connector, tx, ty, null, point, endPoint, undefined, segment);\n }\n };\n CommandHandler.prototype.getSelectedObject = function () {\n var selectormodel = this.diagram.selectedItems;\n return (selectormodel.nodes).concat(selectormodel.connectors);\n };\n /** @private */\n CommandHandler.prototype.clearSelection = function (triggerAction) {\n if (hasSelection(this.diagram)) {\n var selectormodel = this.diagram.selectedItems;\n var arrayNodes = this.getSelectedObject();\n var arg = {\n oldValue: arrayNodes, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changing', type: 'Removal', cancel: false\n };\n if (triggerAction) {\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n if (!arg.cancel) {\n selectormodel.offsetX = 0;\n selectormodel.offsetY = 0;\n selectormodel.width = 0;\n selectormodel.height = 0;\n selectormodel.rotateAngle = 0;\n selectormodel.nodes = [];\n selectormodel.connectors = [];\n selectormodel.wrapper = null;\n selectormodel.annotation = undefined;\n this.diagram.clearSelectorLayer();\n if (triggerAction) {\n arg = {\n oldValue: arrayNodes, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changed', type: 'Removal', cancel: false\n };\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.drag = function (obj, tx, ty) {\n var tempNode;\n var elements = [];\n if (canMove(obj) && this.checkBoundaryConstraints(tx, ty, obj.wrapper.bounds) && canPageEditable(this.diagram)) {\n if (obj instanceof Node) {\n var oldValues = { offsetX: obj.offsetX, offsetY: obj.offsetY };\n obj.offsetX += tx;\n obj.offsetY += ty;\n if (obj.children) {\n var nodes = this.getAllDescendants(obj, elements);\n for (var i = 0; i < nodes.length; i++) {\n tempNode = (this.diagram.nameTable[nodes[i].id]);\n this.drag(tempNode, tx, ty);\n }\n }\n this.diagram.nodePropertyChange(obj, oldValues, { offsetX: obj.offsetX, offsetY: obj.offsetY });\n }\n else {\n var connector = obj;\n var update = connector.type === 'Bezier' ? true : false;\n var hasEnds = false;\n if (!connector.sourceWrapper) {\n this.dragSourceEnd(connector, tx, ty, true, null, '', update);\n }\n else {\n hasEnds = true;\n }\n if (!connector.targetWrapper) {\n this.dragTargetEnd(connector, tx, ty, true, null, '', update);\n }\n else {\n hasEnds = true;\n }\n if (!hasEnds) {\n this.dragControlPoint(connector, tx, ty, true);\n var conn = { sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint };\n this.diagram.connectorPropertyChange(connector, {}, conn);\n }\n }\n }\n };\n CommandHandler.prototype.connectorSegmentChange = function (actualObject, existingInnerBounds, isRotate) {\n var tx;\n var ty;\n var segmentChange = true;\n if (existingInnerBounds.equals(existingInnerBounds, actualObject.wrapper.bounds) === false) {\n if (actualObject.outEdges.length > 0) {\n for (var k = 0; k < actualObject.outEdges.length; k++) {\n var connector = this.diagram.nameTable[actualObject.outEdges[k]];\n if (connector.targetID !== '') {\n segmentChange = this.isSelected(this.diagram.nameTable[connector.targetID]) ? false : true;\n }\n else {\n segmentChange = this.isSelected(this.diagram.nameTable[connector.id]) ? false : true;\n }\n if (connector.type === 'Orthogonal' && connector.segments && connector.segments.length > 1) {\n if (!isRotate) {\n if (segmentChange) {\n switch (connector.segments[0].direction) {\n case 'Bottom':\n tx = actualObject.wrapper.bounds.bottomCenter.x - existingInnerBounds.bottomCenter.x;\n ty = actualObject.wrapper.bounds.bottomCenter.y - existingInnerBounds.bottomCenter.y;\n break;\n case 'Top':\n tx = actualObject.wrapper.bounds.topCenter.x - existingInnerBounds.topCenter.x;\n ty = actualObject.wrapper.bounds.topCenter.y - existingInnerBounds.topCenter.y;\n break;\n case 'Left':\n tx = actualObject.wrapper.bounds.middleLeft.x - existingInnerBounds.middleLeft.x;\n ty = actualObject.wrapper.bounds.middleLeft.y - existingInnerBounds.middleLeft.y;\n break;\n case 'Right':\n tx = actualObject.wrapper.bounds.middleRight.x - existingInnerBounds.middleRight.x;\n ty = actualObject.wrapper.bounds.middleRight.y - existingInnerBounds.middleRight.y;\n break;\n }\n this.dragSourceEnd(connector, tx, ty, true, null, 'ConnectorSourceEnd', undefined, undefined, undefined, true);\n }\n }\n else {\n var firstSegment = connector.segments[0];\n var secondSegment = connector.segments[1];\n var cornerPoints = swapBounds(actualObject.wrapper, actualObject.wrapper.corners, actualObject.wrapper.bounds);\n var sourcePoint = findPoint(cornerPoints, firstSegment.direction);\n sourcePoint = getIntersection(connector, connector.sourceWrapper, sourcePoint, { x: connector.sourceWrapper.offsetX, y: connector.sourceWrapper.offsetY }, false);\n var source = {\n corners: undefined, point: sourcePoint, margin: undefined, direction: firstSegment.direction\n };\n var target = {\n corners: undefined, point: secondSegment.points[1], margin: undefined, direction: undefined\n };\n var intermediatePoints = orthoConnection2Segment(source, target);\n firstSegment.length = Point.distancePoints(intermediatePoints[0], intermediatePoints[1]);\n if (secondSegment.direction && secondSegment.length) {\n secondSegment.length = Point.distancePoints(intermediatePoints[1], intermediatePoints[2]);\n }\n }\n }\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.updateEndPoint = function (connector) {\n var conn = {\n sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint,\n sourceID: connector.sourceID ? connector.sourceID : undefined,\n targetID: connector.targetID ? connector.targetID : undefined,\n sourcePortID: connector.sourcePortID ? connector.sourcePortID : undefined,\n targetPortID: connector.targetPortID ? connector.targetPortID : undefined,\n segments: connector.segments ? connector.segments : undefined\n };\n this.diagram.connectorPropertyChange(connector, {}, conn);\n // this.diagram.refreshDiagramLayer();\n this.diagram.updateSelector();\n };\n /** @private */\n CommandHandler.prototype.dragSourceEnd = function (obj, tx, ty, preventUpdate, point, endPoint, update, target, targetPortId, isDragSource, segment) {\n var connector = this.diagram.nameTable[obj.id];\n var checkBoundaryConstraints = this.checkBoundaryConstraints(tx, ty, connector.wrapper.bounds);\n if (canDragSourceEnd(connector) && checkBoundaryConstraints\n && (endPoint !== 'BezierSourceThumb') && canPageEditable(this.diagram)) {\n connector.sourcePoint.x += tx;\n connector.sourcePoint.y += ty;\n if (endPoint === 'ConnectorSourceEnd' && connector.type === 'Orthogonal') {\n this.changeSegmentLength(connector, target, targetPortId, isDragSource);\n }\n }\n if (connector.type === 'Bezier') {\n if (segment) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorSourceEnd' : endPoint, tx, ty, segment, point, !update);\n }\n else {\n for (var i = 0; i < obj.segments.length; i++) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorSourceEnd' : endPoint, tx, ty, obj.segments[i], point, !update);\n }\n }\n }\n if (!preventUpdate) {\n this.updateEndPoint(connector);\n }\n return checkBoundaryConstraints;\n };\n /**\n * Upadte the connector segments when change the source node\n */\n CommandHandler.prototype.changeSegmentLength = function (connector, target, targetPortId, isDragSource) {\n if (connector.segments && connector.segments[0].direction !== null\n && ((!target && connector.sourceID === '') || isDragSource)) {\n var first = connector.segments[0];\n var second = connector.segments[1];\n var node = this.diagram.nameTable[connector.sourceID];\n var secPoint = void 0;\n first.points[0] = connector.sourcePoint;\n if (first.direction === 'Top' || first.direction === 'Bottom') {\n first.points[first.points.length - 1].x = connector.sourcePoint.x;\n second.points[0].y = first.points[first.points.length - 1].y;\n }\n else {\n first.points[first.points.length - 1].y = connector.sourcePoint.y;\n second.points[0].x = first.points[first.points.length - 1].x;\n }\n if (first.direction && (first.length || first.length === 0)) {\n first.length = Point.distancePoints(first.points[0], first.points[first.points.length - 1]);\n }\n if (second.direction && (second.length || second.length === 0)) {\n second.length = Point.distancePoints(first.points[first.points.length - 1], second.points[second.points.length - 1]);\n second.direction = Point.direction(first.points[first.points.length - 1], second.points[second.points.length - 1]);\n }\n if (connector.sourcePortID !== '' && first.length < 10) {\n if (connector.segments.length > 2) {\n var next = connector.segments[2];\n var nextDirection = Point.direction(next.points[0], next.points[1]);\n if (first.direction === getOppositeDirection(nextDirection)) {\n if (first.direction === 'Right') {\n next.points[0].x = first.points[first.points.length - 1].x = node.wrapper.corners.middleRight.x + 20;\n }\n else if (first.direction === 'Left') {\n next.points[0].x = first.points[first.points.length - 1].x = node.wrapper.corners.middleLeft.x - 20;\n }\n else if (first.direction === 'Top') {\n next.points[0].y = first.points[first.points.length - 1].y = node.wrapper.corners.topCenter.y - 20;\n }\n else {\n next.points[0].y = first.points[first.points.length - 1].y = node.wrapper.corners.bottomCenter.y + 20;\n }\n if (next.direction && next.length) {\n next.length = Point.distancePoints(next.points[0], next.points[next.points.length - 1]);\n }\n first.length = Point.distancePoints(first.points[0], first.points[first.points.length - 1]);\n }\n else if (first.direction === nextDirection && next.direction && next.length) {\n if (first.direction === 'Top' || first.direction === 'Bottom') {\n next.points[0] = first.points[0];\n next.points[next.points.length - 1].x = next.points[0].x;\n }\n else {\n next.points[0] = first.points[0];\n next.points[next.points.length - 1].y = next.points[0].y;\n }\n next.length = Point.distancePoints(next.points[0], next.points[next.points.length - 1]);\n connector.segments.splice(0, 2);\n }\n else {\n first.length = 20;\n }\n }\n else {\n first.length = 20;\n }\n }\n else if (first.length < 1) {\n if (connector.sourceID !== '') {\n if (second.direction === 'Right') {\n secPoint = node.wrapper.corners.middleRight;\n second.points[second.points.length - 1].y = secPoint.y;\n }\n else if (second.direction === 'Left') {\n secPoint = node.wrapper.corners.middleLeft;\n second.points[second.points.length - 1].y = secPoint.y;\n }\n else if (second.direction === 'Top') {\n secPoint = node.wrapper.corners.topCenter;\n second.points[second.points.length - 1].x = secPoint.x;\n }\n else {\n secPoint = node.wrapper.corners.bottomCenter;\n second.points[second.points.length - 1].x = secPoint.x;\n }\n second.length = Point.distancePoints(secPoint, second.points[second.points.length - 1]);\n if (connector.segments.length > 2) {\n var next = connector.segments[2];\n if (next.direction && next.length) {\n next.length = Point.distancePoints(second.points[second.points.length - 1], next.points[next.points.length - 1]);\n }\n }\n connector.segments.splice(0, 1);\n }\n else {\n connector.segments.splice(0, 1);\n }\n }\n }\n else {\n if (target && !targetPortId && connector.sourceID !== target.id &&\n connector.segments && connector.segments[0].direction !== null && target && target instanceof Node) {\n this.changeSourceEndToNode(connector, target);\n }\n if (target && targetPortId && connector.sourcePortID !== targetPortId &&\n connector.segments && connector.segments[0].direction !== null && target && target instanceof Node) {\n this.changeSourceEndToPort(connector, target, targetPortId);\n }\n }\n };\n /**\n * Change the connector endPoint to port\n */\n CommandHandler.prototype.changeSourceEndToPort = function (connector, target, targetPortId) {\n var port = this.diagram.getWrapper(target.wrapper, targetPortId);\n var point = { x: port.offsetX, y: port.offsetY };\n var direction = getPortDirection(point, cornersPointsBeforeRotation(target.wrapper), target.wrapper.bounds, false);\n var firstSegment = connector.segments[0];\n var secondSegment = connector.segments[1];\n if (firstSegment.direction !== direction) {\n var segments = [];\n var segValues = {};\n if (firstSegment.direction === getOppositeDirection(direction)) {\n segValues = {};\n var segValues1 = void 0;\n if (direction === 'Top' || direction === 'Bottom') {\n segValues1 = (direction === 'Top') ? {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(firstSegment.points[0].y - point.y)\n } :\n {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(point.y - firstSegment.points[0].y)\n };\n segValues = (firstSegment.points[0].x > point.x) ?\n { type: 'Orthogonal', isTerminal: true, direction: 'Right', length: (firstSegment.points[0].x - point.x) } :\n { type: 'Orthogonal', isTerminal: true, direction: 'Left', length: (point.x - firstSegment.points[0].x) };\n }\n else {\n segValues1 = (direction === 'Right') ? {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(firstSegment.points[0].x - point.x)\n } :\n {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(point.x - firstSegment.points[0].x)\n };\n segValues = (firstSegment.points[0].y > point.y) ?\n { type: 'Orthogonal', direction: 'Top', isTerminal: true, length: (firstSegment.points[0].y - point.y) } :\n { type: 'Orthogonal', direction: 'Bottom', isTerminal: true, length: (point.y - firstSegment.points[0].y) };\n }\n segments.push(new OrthogonalSegment(connector, 'segments', segValues1, true));\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n }\n else {\n segValues = { type: 'Orthogonal', direction: direction, length: 20, isTerminal: true };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n }\n if (firstSegment.direction !== getOppositeDirection(direction)) {\n if (direction === 'Top' || direction === 'Bottom') {\n firstSegment.points[0].x = point.x;\n firstSegment.points[0].y = firstSegment.points[firstSegment.points.length - 1].y = (direction === 'Top') ?\n point.y - 20 : point.y + 20;\n }\n else {\n firstSegment.points[0].y = point.y;\n firstSegment.points[0].x = firstSegment.points[firstSegment.points.length - 1].x = (direction === 'Right') ?\n point.x + 20 : point.x - 20;\n }\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n secondSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], secondSegment.points[secondSegment.points.length - 1]);\n }\n connector.segments = segments.concat(connector.segments);\n }\n else {\n firstSegment.points[0] = point;\n if (direction === 'Top' || direction === 'Bottom') {\n firstSegment.points[firstSegment.points.length - 1].x = point.x;\n }\n else {\n firstSegment.points[firstSegment.points.length - 1].y = point.y;\n }\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n secondSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], secondSegment.points[secondSegment.points.length - 1]);\n }\n };\n /**\n * @private\n * Remove terinal segment in initial\n */\n CommandHandler.prototype.removeTerminalSegment = function (connector, changeTerminal) {\n for (var i = 0; i < connector.segments.length - 2; i++) {\n var segment = connector.segments[0];\n if (segment.isTerminal) {\n if (changeTerminal) {\n segment.isTerminal = false;\n }\n else {\n connector.segments.splice(i, 1);\n i--;\n }\n }\n }\n };\n /**\n * Change the connector endPoint from point to node\n */\n CommandHandler.prototype.changeSourceEndToNode = function (connector, target) {\n this.removeTerminalSegment(connector);\n var sourceWrapper = target.wrapper.children[0].corners;\n var sourcePoint;\n var sourcePoint2;\n var firstSegment = connector.segments[0];\n var nextSegment = connector.segments[1];\n var segments = [];\n if (firstSegment.direction === 'Right' || firstSegment.direction === 'Left') {\n sourcePoint = (firstSegment.direction === 'Left') ? sourceWrapper.middleLeft : sourceWrapper.middleRight;\n if (firstSegment.length > sourceWrapper.width || ((firstSegment.direction === 'Left' &&\n sourcePoint.x >= firstSegment.points[0].x) || (firstSegment.direction === 'Right' &&\n sourcePoint.x <= firstSegment.points[0].x))) {\n firstSegment.points[0].y = firstSegment.points[firstSegment.points.length - 1].y = sourcePoint.y;\n firstSegment.points[0].x = sourcePoint.x;\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n nextSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], nextSegment.points[nextSegment.points.length - 1]);\n }\n else {\n var direction = void 0;\n if (nextSegment.direction) {\n direction = nextSegment.direction;\n }\n else {\n direction = Point.direction(nextSegment.points[0], nextSegment.points[nextSegment.points.length - 1]);\n }\n sourcePoint2 = (direction === 'Bottom') ? sourceWrapper.bottomCenter : sourceWrapper.topCenter;\n if (nextSegment.length && nextSegment.direction) {\n nextSegment.length =\n (direction === 'Top') ? firstSegment.points[firstSegment.points.length - 1].y - (sourcePoint2.y + 20) :\n (sourcePoint2.y + 20) - firstSegment.points[firstSegment.points.length - 1].y;\n }\n firstSegment.length = firstSegment.points[firstSegment.points.length - 1].x - sourcePoint2.x;\n firstSegment.direction = (firstSegment.length > 0) ? 'Right' : 'Left';\n var segValues = { type: 'Orthogonal', direction: direction, length: 20 };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n connector.segments = segments.concat(connector.segments);\n }\n }\n else {\n sourcePoint = (firstSegment.direction === 'Bottom') ? sourceWrapper.bottomCenter : sourceWrapper.topCenter;\n if (firstSegment.length > sourceWrapper.height || ((firstSegment.direction === 'Top' &&\n sourcePoint.y >= firstSegment.points[0].y) ||\n (firstSegment.direction === 'Bottom' && sourcePoint.y <= firstSegment.points[0].y))) {\n firstSegment.points[0].x = firstSegment.points[firstSegment.points.length - 1].x = sourcePoint.x;\n firstSegment.points[0].y = sourcePoint.y;\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n nextSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], nextSegment.points[nextSegment.points.length - 1]);\n }\n else {\n sourcePoint2 = (nextSegment.direction === 'Left') ? sourceWrapper.middleLeft : sourceWrapper.middleRight;\n var direction = void 0;\n if (nextSegment.direction) {\n direction = nextSegment.direction;\n }\n else {\n direction = Point.direction(nextSegment.points[0], nextSegment.points[nextSegment.points.length - 1]);\n }\n if (nextSegment.length && nextSegment.direction) {\n nextSegment.length =\n (direction === 'Left') ? firstSegment.points[firstSegment.points.length - 1].x - (sourcePoint2.x + 20) :\n (sourcePoint2.x + 20) - firstSegment.points[firstSegment.points.length - 1].x;\n }\n firstSegment.length = firstSegment.points[firstSegment.points.length - 1].y - sourcePoint2.y;\n firstSegment.direction = (firstSegment.length > 0) ? 'Bottom' : 'Top';\n var segValues = { type: 'Orthogonal', direction: direction, length: 20 };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n connector.segments = segments.concat(connector.segments);\n }\n }\n };\n /**\n * Translate the bezier points during the interaction\n */\n CommandHandler.prototype.translateBezierPoints = function (connector, value, tx, ty, seg, point, update) {\n var index = (connector.segments.indexOf(seg));\n var segment = connector.segments[index];\n if (segment) {\n if (value === 'BezierSourceThumb' && (segment.vector1.angle || segment.vector1.distance)) {\n segment.vector1 = {\n distance: connector.distance(connector.sourcePoint, point),\n angle: Point.findAngle(connector.sourcePoint, point),\n };\n }\n else if (value === 'BezierTargetThumb' && (segment.vector2.angle || segment.vector2.distance)) {\n segment.vector2 = {\n distance: connector.distance(connector.targetPoint, point),\n angle: Point.findAngle(connector.targetPoint, point),\n };\n }\n else if ((value === 'ConnectorSourceEnd' && !connector.sourceID || value === 'ConnectorTargetEnd' && !connector.targetID)\n && update && isEmptyVector(segment.vector1) && isEmptyVector(segment.vector2)) {\n if (Point.isEmptyPoint(segment.point1)) {\n segment.bezierPoint1 = getBezierPoints(connector.sourcePoint, connector.targetPoint);\n }\n if (Point.isEmptyPoint(segment.point2)) {\n segment.bezierPoint2 = getBezierPoints(connector.targetPoint, connector.sourcePoint);\n }\n }\n else if (value === 'BezierSourceThumb' || (value === 'ConnectorSourceEnd' && !update && isEmptyVector(segment.vector1))) {\n segment.bezierPoint1.x += tx;\n segment.bezierPoint1.y += ty;\n if ((!Point.isEmptyPoint(segment.point1)) || (update)) {\n segment.point1 = { x: segment.bezierPoint1.x, y: segment.bezierPoint1.y };\n }\n }\n else if (value === 'BezierTargetThumb' || (value === 'ConnectorTargetEnd' && !update && isEmptyVector(segment.vector2))) {\n segment.bezierPoint2.x += tx;\n segment.bezierPoint2.y += ty;\n if ((!Point.isEmptyPoint(segment.point2)) || (update)) {\n segment.point2 = { x: segment.bezierPoint2.x, y: segment.bezierPoint2.y };\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.dragTargetEnd = function (obj, tx, ty, preventUpdate, point, endPoint, update, segment) {\n var connector = this.diagram.nameTable[obj.id];\n var boundaryConstraints = this.checkBoundaryConstraints(tx, ty, connector.wrapper.bounds);\n if (canDragTargetEnd(connector) && endPoint !== 'BezierTargetThumb'\n && boundaryConstraints && canPageEditable(this.diagram)) {\n connector.targetPoint.x += tx;\n connector.targetPoint.y += ty;\n if (endPoint === 'ConnectorTargetEnd' && connector.type === 'Orthogonal' &&\n connector.segments && connector.segments.length > 0) {\n var prev = connector.segments[connector.segments.length - 2];\n if (prev && connector.segments[connector.segments.length - 1].points.length === 2) {\n if (prev.direction === 'Left' || prev.direction === 'Right') {\n prev.points[prev.points.length - 1].x = connector.targetPoint.x;\n }\n else {\n prev.points[prev.points.length - 1].y = connector.targetPoint.y;\n }\n prev.length = Point.distancePoints(prev.points[0], prev.points[prev.points.length - 1]);\n prev.direction = Point.direction(prev.points[0], prev.points[prev.points.length - 1]);\n }\n }\n }\n if (connector.type === 'Bezier') {\n if (segment) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorTargetEnd' : endPoint, tx, ty, segment, point, !update);\n }\n else {\n for (var i = 0; i < obj.segments.length; i++) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorTargetEnd' : endPoint, tx, ty, obj.segments[i], point, !update);\n }\n }\n }\n if (!preventUpdate) {\n this.updateEndPoint(connector);\n }\n return boundaryConstraints;\n };\n /** @private */\n CommandHandler.prototype.dragControlPoint = function (obj, tx, ty, preventUpdate, segmentNumber) {\n var connector = this.diagram.nameTable[obj.id];\n if ((connector.type === 'Straight' || connector.type === 'Bezier') && connector.segments.length > 0) {\n if (segmentNumber !== undefined && connector.segments[segmentNumber]) {\n connector.segments[segmentNumber].point.x += tx;\n connector.segments[segmentNumber].point.y += ty;\n }\n else {\n for (var i = 0; i < connector.segments.length - 1; i++) {\n connector.segments[i].point.x += tx;\n connector.segments[i].point.y += ty;\n }\n }\n if (!preventUpdate) {\n this.updateEndPoint(connector);\n }\n }\n return true;\n };\n /** @private */\n CommandHandler.prototype.rotateObjects = function (parent, objects, angle, pivot, includeParent) {\n pivot = pivot || {};\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, pivot.x, pivot.y);\n for (var _i = 0, objects_2 = objects; _i < objects_2.length; _i++) {\n var obj = objects_2[_i];\n if (obj instanceof Node) {\n if (canRotate(obj) && canPageEditable(this.diagram)) {\n if (includeParent !== false || parent !== obj) {\n obj.rotateAngle += angle;\n obj.rotateAngle = (obj.rotateAngle + 360) % 360;\n var newOffset = transformPointByMatrix(matrix, { x: obj.offsetX, y: obj.offsetY });\n obj.offsetX = newOffset.x;\n obj.offsetY = newOffset.y;\n this.diagram.nodePropertyChange(obj, {}, { offsetX: obj.offsetX, offsetY: obj.offsetY, rotateAngle: obj.rotateAngle });\n }\n if (obj.processId) {\n var parent_1 = this.diagram.nameTable[obj.processId];\n var bound = this.diagram.bpmnModule.getChildrenBound(parent_1, obj.id, this.diagram);\n this.diagram.bpmnModule.updateSubProcessess(bound, obj, this.diagram);\n }\n if (obj.children && obj.children.length) {\n this.getChildren(obj, objects);\n }\n }\n }\n else {\n this.rotatePoints(obj, angle, pivot || { x: obj.wrapper.offsetX, y: obj.wrapper.offsetY });\n }\n this.diagram.updateDiagramObject(obj);\n }\n this.diagram.updateSelector();\n };\n /** @private */\n CommandHandler.prototype.snapConnectorEnd = function (currentPosition) {\n if ((this.diagram.snapSettings.constraints & SnapConstraints.SnapToLines)\n && this.snappingModule) {\n this.diagram.snappingModule.snapConnectorEnd(currentPosition);\n }\n return currentPosition;\n };\n CommandHandler.prototype.snapAngle = function (angle) {\n if ((this.diagram.snapSettings.constraints & SnapConstraints.SnapToLines)\n && this.snappingModule) {\n return this.snappingModule.snapAngle(this.diagram, angle);\n }\n else {\n return 0;\n }\n };\n CommandHandler.prototype.rotatePoints = function (conn, angle, pivot) {\n if (!conn.sourceWrapper || !conn.targetWrapper) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, pivot.x, pivot.y);\n conn.sourcePoint = transformPointByMatrix(matrix, conn.sourcePoint);\n conn.targetPoint = transformPointByMatrix(matrix, conn.targetPoint);\n var newProp = { sourcePoint: conn.sourcePoint, targetPoint: conn.targetPoint };\n this.diagram.connectorPropertyChange(conn, {}, newProp);\n }\n };\n /** @private */\n CommandHandler.prototype.scale = function (obj, sw, sh, pivot, refObject) {\n var node = this.diagram.nameTable[obj.id];\n var tempNode = node;\n var elements = [];\n var element = node.wrapper;\n if (!refObject) {\n refObject = obj;\n }\n var refWrapper = refObject.wrapper;\n var x = refWrapper.offsetX - refWrapper.actualSize.width * refWrapper.pivot.x;\n var y = refWrapper.offsetY - refWrapper.actualSize.height * refWrapper.pivot.y;\n var refPoint = getPoint(x, y, refWrapper.actualSize.width, refWrapper.actualSize.height, refWrapper.rotateAngle, refWrapper.offsetX, refWrapper.offsetY, pivot);\n if (element.actualSize.width !== undefined && element.actualSize.height !== undefined && canPageEditable(this.diagram)) {\n if (tempNode.children) {\n var nodes = this.getAllDescendants(tempNode, elements);\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var temp = nodes_1[_i];\n this.scaleObject(sw, sh, refPoint, temp, element, refObject);\n }\n obj.wrapper.measure(new Size());\n obj.wrapper.arrange(obj.wrapper.desiredSize);\n this.diagram.updateGroupOffset(node);\n }\n else {\n this.scaleObject(sw, sh, refPoint, node, element, refObject);\n }\n var bounds = getBounds(obj.wrapper);\n var checkBoundaryConstraints = this.checkBoundaryConstraints(undefined, undefined, bounds);\n if (!checkBoundaryConstraints) {\n this.scale(obj, 1 / sw, 1 / sh, pivot);\n return false;\n }\n this.diagram.updateDiagramObject(obj);\n }\n return true;\n };\n /** @private */\n CommandHandler.prototype.getAllDescendants = function (node, nodes, includeParent) {\n var temp = node;\n for (var i = 0; i < temp.children.length; i++) {\n node = (this.diagram.nameTable[temp.children[i]]);\n if (node) {\n if (!node.children) {\n nodes.push(node);\n }\n else {\n if (includeParent) {\n nodes.push(node);\n }\n nodes = this.getAllDescendants(node, nodes);\n }\n }\n }\n return nodes;\n };\n CommandHandler.prototype.getChildren = function (node, nodes) {\n var temp = node;\n if (node.children) {\n for (var i = 0; i < temp.children.length; i++) {\n node = (this.diagram.nameTable[temp.children[i]]);\n nodes.push(node);\n }\n }\n return nodes;\n };\n /** @private */\n CommandHandler.prototype.cloneChild = function (id) {\n var node = this.diagram.nameTable[id];\n return node;\n };\n /** @private */\n CommandHandler.prototype.scaleObject = function (sw, sh, pivot, obj, element, refObject) {\n sw = sw < 0 ? 1 : sw;\n sh = sh < 0 ? 1 : sh;\n var process;\n var oldValues = {\n offsetX: obj.wrapper.offsetX, offsetY: obj.wrapper.offsetY,\n width: obj.wrapper.actualSize.width, height: obj.wrapper.actualSize.height\n };\n if (sw !== 1 || sh !== 1) {\n var width = void 0;\n var height = void 0;\n if (obj instanceof Node) {\n var node = obj;\n var isResize = void 0;\n var bound = void 0;\n if (node.shape.type === 'Bpmn' && node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length > 0) {\n bound = this.diagram.bpmnModule.getChildrenBound(node, node.id, this.diagram);\n isResize = node.wrapper.bounds.containsRect(bound);\n }\n width = node.wrapper.actualSize.width * sw;\n height = node.wrapper.actualSize.height * sh;\n if (node.maxWidth !== undefined && node.maxWidth !== 0) {\n width = Math.min(node.maxWidth, width);\n }\n if (node.minWidth !== undefined && node.minWidth !== 0) {\n width = Math.max(node.minWidth, width);\n }\n if (node.maxHeight !== undefined && node.maxHeight !== 0) {\n height = Math.min(node.maxHeight, height);\n }\n if (node.minHeight !== undefined && node.minHeight !== 0) {\n height = Math.max(node.minHeight, height);\n }\n if (isResize) {\n width = Math.max(width, (bound.right - node.wrapper.bounds.x));\n height = Math.max(height, (bound.bottom - node.wrapper.bounds.y));\n }\n sw = width / node.actualSize.width;\n sh = height / node.actualSize.height;\n }\n var matrix = identityMatrix();\n var refWrapper = void 0;\n if (!refObject) {\n refObject = obj;\n }\n refWrapper = refObject.wrapper;\n rotateMatrix(matrix, -refWrapper.rotateAngle, pivot.x, pivot.y);\n scaleMatrix(matrix, sw, sh, pivot.x, pivot.y);\n rotateMatrix(matrix, refWrapper.rotateAngle, pivot.x, pivot.y);\n if (obj instanceof Node) {\n var node = obj;\n var left = void 0;\n var top_1;\n var newPosition = transformPointByMatrix(matrix, { x: node.wrapper.offsetX, y: node.wrapper.offsetY });\n var oldleft = node.wrapper.offsetX - node.wrapper.actualSize.width * node.pivot.x;\n var oldtop = node.wrapper.offsetY - node.wrapper.actualSize.height * node.pivot.y;\n if (width > 0) {\n if (node.processId) {\n var parent_2 = this.diagram.nameTable[node.processId];\n if (!parent_2.maxWidth || ((node.margin.left + width) < parent_2.maxWidth)) {\n node.width = width;\n node.offsetX = newPosition.x;\n }\n }\n else {\n node.width = width;\n node.offsetX = newPosition.x;\n }\n }\n if (height > 0) {\n if (node.processId) {\n var parent_3 = this.diagram.nameTable[node.processId];\n if (!parent_3.maxHeight || ((node.margin.top + height) < parent_3.maxHeight)) {\n node.height = height;\n node.offsetY = newPosition.y;\n }\n }\n else {\n node.height = height;\n node.offsetY = newPosition.y;\n }\n }\n left = node.wrapper.offsetX - node.wrapper.actualSize.width * node.pivot.x;\n top_1 = node.wrapper.offsetY - node.wrapper.actualSize.height * node.pivot.y;\n var parent_4 = this.diagram.nameTable[node.processId];\n if (parent_4 && ((node.margin.top + (top_1 - oldtop)) <= 0 ||\n (node.margin.left + (left - oldleft) <= 0))) {\n this.diagram.nodePropertyChange(obj, {}, {\n margin: { top: node.margin.top, left: node.margin.left }\n });\n }\n else {\n this.diagram.nodePropertyChange(obj, {}, {\n width: node.width, height: node.height, offsetX: node.offsetX,\n offsetY: node.offsetY, margin: { top: node.margin.top + (top_1 - oldtop), left: node.margin.left + (left - oldleft) }\n });\n }\n }\n else {\n var connector = obj;\n if (!connector.sourceWrapper || !connector.targetWrapper) {\n connector.sourcePoint = transformPointByMatrix(matrix, connector.sourcePoint);\n connector.targetPoint = transformPointByMatrix(matrix, connector.targetPoint);\n var newProp = { sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint };\n this.diagram.connectorPropertyChange(connector, {}, newProp);\n }\n }\n var parentNode = this.diagram.nameTable[obj.processId];\n if (parentNode) {\n var parent_5 = parentNode.wrapper.bounds;\n var child = obj.wrapper.bounds;\n var bound = this.diagram.bpmnModule.getChildrenBound(parentNode, obj.id, this.diagram);\n this.diagram.bpmnModule.updateSubProcessess(bound, obj, this.diagram);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.portDrag = function (obj, portElement, tx, ty) {\n var oldValues;\n var changedvalues;\n var port = this.findTarget(portElement, obj);\n var bounds = getBounds(obj.wrapper);\n if (port && canDrag(port, this.diagram)) {\n oldValues = this.getPortChanges(obj, port);\n port.offset.x += (tx / bounds.width);\n port.offset.y += (ty / bounds.height);\n changedvalues = this.getPortChanges(obj, port);\n this.diagram.nodePropertyChange(obj, oldValues, changedvalues);\n this.diagram.updateDiagramObject(obj);\n }\n };\n /** @private */\n CommandHandler.prototype.labelDrag = function (obj, textElement, tx, ty) {\n var oldValues;\n var changedvalues;\n var label;\n label = this.findTarget(textElement, obj);\n var bounds = cornersPointsBeforeRotation(obj.wrapper);\n oldValues = this.getAnnotationChanges(obj, label);\n if (label instanceof ShapeAnnotation) {\n label.offset.x += (tx / bounds.width);\n label.offset.y += (ty / bounds.height);\n }\n else {\n this.updatePathAnnotationOffset(obj, label, tx, ty);\n if (label instanceof PathAnnotation) {\n label.alignment = 'Center';\n }\n }\n changedvalues = this.getAnnotationChanges(obj, label);\n if (obj instanceof Node) {\n this.diagram.nodePropertyChange(obj, oldValues, changedvalues);\n }\n else {\n this.diagram.connectorPropertyChange(obj, oldValues, changedvalues);\n }\n this.diagram.updateDiagramObject(obj);\n if (!isSelected(this.diagram, label, false, textElement)) {\n this.labelSelect(obj, textElement);\n }\n };\n CommandHandler.prototype.updatePathAnnotationOffset = function (object, label, tx, ty, newPosition, size) {\n var textWrapper = this.diagram.getWrapper(object.wrapper, label.id);\n var offsetX = textWrapper.offsetX;\n var offsetY = textWrapper.offsetY;\n var offset;\n var intermediatePoints = object.intermediatePoints;\n var prev;\n var pointLength = 0;\n var totalLength = 0;\n var intersectingOffset;\n var currentPosition = (newPosition) ? newPosition : { x: offsetX + tx, y: offsetY + ty };\n var intersetingPts = this.getInterceptWithSegment(currentPosition, intermediatePoints);\n var newOffset = intermediatePoints[intermediatePoints.length - 1];\n totalLength = Point.getLengthFromListOfPoints(intermediatePoints);\n if (intersetingPts.length > 0) {\n intersectingOffset = intersetingPts[intersetingPts.length - 1];\n newOffset = intersectingOffset;\n if (newOffset) {\n var p = void 0;\n var bounds = void 0;\n for (p = 0; p < intermediatePoints.length; p++) {\n if (prev != null) {\n bounds = Rect.toBounds([prev, intermediatePoints[p]]);\n if (bounds.containsPoint(newOffset)) {\n pointLength += Point.findLength(prev, newOffset);\n break;\n }\n }\n prev = intermediatePoints[p];\n }\n offset = { x: pointLength / totalLength, y: 0 };\n }\n this.updateLabelMargin(object, label, offset, currentPosition, size);\n }\n else {\n this.updateLabelMargin(object, label, null, currentPosition, size);\n }\n };\n CommandHandler.prototype.updateLabelMargin = function (node, label, offset, tempPt, size) {\n offset = offset ? offset : { x: label.offset, y: 0 };\n if (label && offset && offset.x > 0 && offset.x < 1) {\n var point = void 0;\n var length_1 = Point.getLengthFromListOfPoints(node.intermediatePoints);\n point = this.getPointAtLength(length_1 * offset.x, node.intermediatePoints, 0);\n label.margin = { left: tempPt.x - point.x, top: tempPt.y - point.y, right: 0, bottom: 0 };\n label.offset = offset.x;\n if (size) {\n label.width = size.width;\n label.height = size.height;\n }\n }\n };\n CommandHandler.prototype.getPointAtLength = function (length, points, angle) {\n angle = 0;\n var run = 0;\n var pre;\n var found = { x: 0, y: 0 };\n var pt;\n for (var i = 0; i < points.length; i++) {\n pt = points[i];\n if (!pre) {\n pre = pt;\n continue;\n }\n else {\n var l = Point.findLength(pre, pt);\n var r = void 0;\n var deg = void 0;\n var x = void 0;\n var y = void 0;\n if (run + l >= length) {\n r = length - run;\n deg = Point.findAngle(pre, pt);\n x = r * Math.cos(deg * Math.PI / 180);\n y = r * Math.sin(deg * Math.PI / 180);\n found = { x: pre.x + x, y: pre.y + y };\n angle = deg;\n break;\n }\n else {\n run += l;\n }\n }\n pre = pt;\n }\n return found;\n };\n CommandHandler.prototype.getInterceptWithSegment = function (currentPosition, conPoints) {\n var intercepts = [];\n var imgLine = [];\n var segemnt = [];\n var tarAngle;\n var srcAngle;\n var maxLength;\n maxLength = Point.findLength({ x: 0, y: 0 }, { x: this.diagram.scroller.viewPortWidth, y: this.diagram.scroller.viewPortHeight });\n for (var i = 1; i < conPoints.length; i++) {\n segemnt = [conPoints[i - 1], conPoints[i]];\n imgLine = [];\n srcAngle = Math.round(Point.findAngle(segemnt[0], segemnt[1]) % 360);\n tarAngle = Math.round(Point.findAngle(segemnt[1], segemnt[0]) % 360);\n var angleAdd = (srcAngle > 0 && srcAngle <= 90) || (srcAngle > 180 && srcAngle <= 270) ? 90 : -90;\n imgLine.push(Point.transform(currentPosition, srcAngle + angleAdd, maxLength));\n imgLine.push(Point.transform(currentPosition, tarAngle + angleAdd, maxLength));\n var lineUtil1 = { x1: segemnt[0].x, y1: segemnt[0].y, x2: segemnt[1].x, y2: segemnt[1].y };\n var lineUtil2 = { x1: imgLine[0].x, y1: imgLine[0].y, x2: imgLine[1].x, y2: imgLine[1].y };\n var line3 = intersect3(lineUtil1, lineUtil2);\n if (line3.enabled) {\n intercepts.push(line3.intersectPt);\n }\n }\n return intercepts;\n };\n /** @private */\n CommandHandler.prototype.getAnnotationChanges = function (object, label) {\n var index = findObjectIndex(object, label.id, true);\n var annotations = {};\n annotations[index] = {\n width: label.width, height: label.height, offset: (object instanceof Node) ? ({\n x: label.offset.x,\n y: label.offset.y\n }) : label.offset,\n rotateAngle: label.rotateAngle,\n margin: { left: label.margin.left, right: label.margin.right, top: label.margin.top, bottom: label.margin.bottom },\n horizontalAlignment: label.horizontalAlignment, verticalAlignment: label.verticalAlignment,\n alignment: ((object instanceof Connector) ? label.alignment : undefined)\n };\n return { annotations: annotations };\n };\n /** @private */\n CommandHandler.prototype.getPortChanges = function (object, port) {\n var index = findObjectIndex(object, port.id, false);\n var ports = {};\n ports[index] = { offset: port.offset };\n return { ports: ports };\n };\n /** @private */\n CommandHandler.prototype.labelRotate = function (object, label, currentPosition, selector) {\n var oldValues;\n var changedvalues;\n oldValues = this.getAnnotationChanges(object, label);\n var matrix = identityMatrix();\n var rotateAngle = label.rotateAngle;\n var labelWrapper = this.diagram.getWrapper(object.wrapper, label.id);\n var angle = findAngle({ x: labelWrapper.offsetX, y: labelWrapper.offsetY }, currentPosition) + 90;\n var snapAngle = this.snapAngle(angle);\n angle = snapAngle !== 0 ? snapAngle : angle;\n if (label instanceof PathAnnotation && label.segmentAngle) {\n var getPointloop = getAnnotationPosition(object.intermediatePoints, label, object.wrapper.bounds);\n angle -= getPointloop.angle;\n }\n angle = (angle + 360) % 360;\n label.rotateAngle += angle - (label.rotateAngle + labelWrapper.parentTransform);\n label.margin.bottom += (labelWrapper.verticalAlignment === 'Top') ? (-label.height / 2) : ((labelWrapper.verticalAlignment === 'Bottom') ? (label.height / 2) : 0);\n label.margin.right += (labelWrapper.horizontalAlignment === 'Left') ? (-label.width / 2) : ((labelWrapper.horizontalAlignment === 'Right') ? (label.width / 2) : 0);\n if (label instanceof PathAnnotation) {\n label.alignment = 'Center';\n }\n else {\n label.horizontalAlignment = label.verticalAlignment = 'Center';\n }\n selector.wrapper.rotateAngle = selector.rotateAngle = label.rotateAngle;\n changedvalues = this.getAnnotationChanges(object, label);\n if (object instanceof Node) {\n this.diagram.nodePropertyChange(object, oldValues, changedvalues);\n }\n else {\n this.diagram.connectorPropertyChange(object, oldValues, changedvalues);\n }\n this.diagram.updateDiagramObject(object);\n };\n /** @private */\n CommandHandler.prototype.labelResize = function (node, label, deltaWidth, deltaHeight, pivot, selector) {\n var oldValues;\n var changedvalues;\n var rotateAngle;\n oldValues = this.getAnnotationChanges(node, label);\n var textElement = selector.wrapper.children[0];\n if ((deltaWidth && deltaWidth !== 1) || (deltaHeight && deltaHeight !== 1)) {\n var newMat = identityMatrix();\n var matrix = identityMatrix();\n rotateMatrix(newMat, -node.rotateAngle, node.offsetX, node.offsetY);\n rotateAngle = ((textElement.rotateAngle + ((node instanceof Node) ? node.rotateAngle : 0)) + 360) % 360;\n rotateMatrix(matrix, -rotateAngle, pivot.x, pivot.y);\n scaleMatrix(matrix, deltaWidth, deltaHeight, pivot.x, pivot.y);\n rotateMatrix(matrix, rotateAngle, pivot.x, pivot.y);\n var newPosition = transformPointByMatrix(matrix, { x: textElement.offsetX, y: textElement.offsetY });\n var height = textElement.actualSize.height * deltaHeight;\n var width = textElement.actualSize.width * deltaWidth;\n var shape = this.findTarget(textElement, node);\n if (shape instanceof PathAnnotation) {\n this.updatePathAnnotationOffset(node, label, 0, 0, newPosition, new Size(width, height));\n }\n else {\n var bounds = cornersPointsBeforeRotation(node.wrapper);\n newPosition = transformPointByMatrix(newMat, newPosition);\n newPosition.x = newPosition.x - textElement.margin.left + textElement.margin.right;\n newPosition.y = newPosition.y - textElement.margin.top + textElement.margin.bottom;\n newPosition.y += (shape.verticalAlignment === 'Top') ? (-height / 2) : ((shape.verticalAlignment === 'Bottom') ? (height / 2) : 0);\n newPosition.x += (shape.horizontalAlignment === 'Left') ? (-width / 2) : ((shape.horizontalAlignment === 'Right') ? (width / 2) : 0);\n var offsetx = bounds.width / (newPosition.x - bounds.x);\n var offsety = bounds.height / (newPosition.y - bounds.y);\n if (width > 1) {\n shape.width = width;\n shape.offset.x = 1 / offsetx;\n }\n if (height > 1) {\n shape.height = height;\n shape.offset.y = 1 / offsety;\n }\n }\n }\n if (label instanceof PathAnnotation) {\n label.alignment = 'Center';\n }\n changedvalues = this.getAnnotationChanges(node, label);\n if (node instanceof Node) {\n this.diagram.nodePropertyChange(node, oldValues, changedvalues);\n }\n else {\n this.diagram.connectorPropertyChange(node, oldValues, changedvalues);\n }\n this.diagram.updateDiagramObject(node);\n };\n /** @private */\n CommandHandler.prototype.getSubProcess = function (source) {\n var selector = { nodes: [], connectors: [] };\n var process;\n if (source instanceof Node) {\n process = source.processId;\n }\n else if (source && source.nodes && (source.nodes.length)\n && source.nodes[0].processId) {\n process = source.nodes[0].processId;\n }\n if (process) {\n selector.nodes.push(clone(this.diagram.nameTable[process]));\n return selector;\n }\n return selector;\n };\n CommandHandler.prototype.checkBoundaryConstraints = function (tx, ty, nodeBounds) {\n var pageSettings = this.diagram.pageSettings;\n var boundaryConstraints = this.diagram.pageSettings.boundaryConstraints;\n var scroller = this.diagram.scroller;\n if (boundaryConstraints === 'Page' || boundaryConstraints === 'Diagram') {\n var selectorBounds = !nodeBounds ? this.diagram.selectedItems.wrapper.bounds : undefined;\n var width = boundaryConstraints === 'Page' ? pageSettings.width : scroller.viewPortWidth;\n var height = boundaryConstraints === 'Page' ? pageSettings.height : scroller.viewPortHeight;\n var bounds = nodeBounds;\n var right = (nodeBounds ? bounds.right : selectorBounds.right) + (tx || 0);\n var left = (nodeBounds ? bounds.left : selectorBounds.left) + (tx || 0);\n var top_2 = (nodeBounds ? bounds.top : selectorBounds.top) + (ty || 0);\n var bottom = (nodeBounds ? bounds.bottom : selectorBounds.bottom) + (ty || 0);\n if (right <= width && left >= 0\n && bottom <= height && top_2 >= 0) {\n return true;\n }\n return false;\n }\n return true;\n };\n //interfaces\n /** @private */\n CommandHandler.prototype.dragSelectedObjects = function (tx, ty) {\n var obj = this.diagram.selectedItems;\n if (this.state && !this.state.backup) {\n this.state.backup = {};\n this.state.backup.offsetX = obj.offsetX;\n this.state.backup.offsetY = obj.offsetY;\n }\n if (this.checkBoundaryConstraints(tx, ty)) {\n this.diagram.drag(obj, tx, ty);\n return true;\n }\n return false;\n };\n /** @private */\n CommandHandler.prototype.scaleSelectedItems = function (sx, sy, pivot) {\n var obj = this.diagram.selectedItems;\n if (this.state && !this.state.backup) {\n this.state.backup = {};\n this.state.backup.offsetX = obj.offsetX;\n this.state.backup.offsetY = obj.offsetY;\n this.state.backup.width = obj.width;\n this.state.backup.height = obj.height;\n this.state.backup.pivot = pivot;\n }\n return this.diagram.scale(obj, sx, sy, pivot);\n };\n /** @private */\n CommandHandler.prototype.rotateSelectedItems = function (angle) {\n var obj = this.diagram.selectedItems;\n if (this.state && !this.state.backup) {\n this.state.backup = {};\n this.state.backup.angle = obj.rotateAngle;\n }\n return this.diagram.rotate(obj, angle);\n };\n /** @private */\n CommandHandler.prototype.hasSelection = function () {\n return hasSelection(this.diagram);\n };\n /** @private */\n CommandHandler.prototype.isSelected = function (element) {\n return isSelected(this.diagram, element);\n };\n /**\n * initExpand is used for layout expand and collapse interaction\n */\n CommandHandler.prototype.initExpand = function (args) {\n var node = (args.target || args.source);\n var oldValues = { isExpanded: node.isExpanded };\n node.isExpanded = !node.isExpanded;\n this.diagram.nodePropertyChange(node, oldValues, { isExpanded: node.isExpanded });\n };\n /** @private */\n CommandHandler.prototype.expandNode = function (node, diagram) {\n var animation;\n var objects;\n var expand = node.isExpanded;\n this.expandCollapse(node, expand, this.diagram);\n node.isExpanded = expand;\n this.diagram.layout.fixedNode = node.id;\n if (this.diagram.layoutAnimateModule && this.diagram.layout.enableAnimation) {\n this.diagram.organizationalChartModule.isAnimation = true;\n }\n this.diagram.preventNodesUpdate = true;\n this.diagram.preventConnectorsUpdate = true;\n objects = this.diagram.doLayout();\n this.diagram.preventNodesUpdate = false;\n this.diagram.preventConnectorsUpdate = false;\n if (this.diagram.layoutAnimateModule && this.diagram.layout.enableAnimation) {\n this.layoutAnimateModule.expand(this.diagram.organizationalChartModule.isAnimation, objects, node, this.diagram);\n }\n return objects;\n };\n /**\n * Setinterval and Clear interval for layout animation\n */\n /** @private */\n CommandHandler.prototype.expandCollapse = function (source, visibility, diagram) {\n for (var i = 0; i < source.outEdges.length; i++) {\n var connector = diagram.nameTable[source.outEdges[i]];\n var target = diagram.nameTable[connector.targetID];\n connector.visible = visibility;\n if (target.isExpanded) {\n this.expandCollapse(target, visibility, diagram);\n }\n var oldValues = {\n visible: target.visible,\n style: { opacity: target.style.opacity }\n };\n target.visible = visibility;\n target.style.opacity = (this.diagram.layout.enableAnimation && visibility) ? 0.1 : target.style.opacity;\n var newValues = {\n visible: target.visible,\n style: { opacity: target.style.opacity }\n };\n diagram.nodePropertyChange(target, oldValues, newValues);\n diagram.connectorPropertyChange(connector, oldValues, newValues);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.updateNodeDimension = function (obj, rect) {\n if (obj instanceof Node) {\n obj.offsetX = rect.x + rect.width / 2;\n obj.offsetY = rect.y + rect.height / 2;\n obj.width = rect.width;\n obj.height = rect.height;\n this.diagram.nodePropertyChange(obj, {}, {\n width: rect.width, height: rect.height, offsetX: obj.offsetX,\n offsetY: obj.offsetY\n });\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.updateConnectorPoints = function (obj, rect) {\n if (obj instanceof Connector) {\n this.diagram.connectorPropertyChange(obj, {}, {\n targetPoint: obj.targetPoint\n });\n this.diagram.updateDiagramObject(obj);\n }\n };\n /** @private */\n CommandHandler.prototype.drawSelectionRectangle = function (x, y, width, height) {\n this.diagram.drawSelectionRectangle(x, y, width, height);\n };\n /** @private */\n CommandHandler.prototype.startGroupAction = function () {\n this.diagram.startGroupAction();\n };\n /** @private */\n CommandHandler.prototype.endGroupAction = function () {\n this.diagram.endGroupAction();\n };\n /** @private */\n CommandHandler.prototype.removeChildFromBPmn = function (child, newTarget, oldTarget) {\n var obj = this.diagram.nameTable[child.id] || child.nodes[0];\n if (oldTarget) {\n if ((obj) && obj.processId && obj.processId === oldTarget.wrapper.id) {\n var node = clone(obj);\n node.processId = obj.processId;\n this.diagram.startGroupAction();\n var edges = [];\n edges = edges.concat(obj.outEdges, obj.inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n var connector = this.diagram.nameTable[edges[i]];\n if (connector) {\n this.diagram.remove(connector);\n }\n }\n var nodeCollection = void 0;\n nodeCollection = (this.diagram.nameTable[obj.processId].shape.activity.subProcess.processes) || [];\n nodeCollection.splice(nodeCollection.indexOf((obj).id), 1);\n this.diagram.bpmnModule.removeChildFromBPMN(this.diagram.nameTable[obj.processId].wrapper, (obj).id);\n this.diagram.nameTable[(obj).id].processId = '';\n obj.offsetX = obj.wrapper.offsetX;\n obj.offsetY = obj.wrapper.offsetY;\n var undoElement = clone(obj);\n var entry = {\n type: 'PositionChanged', redoObject: { nodes: [undoElement] }, undoObject: { nodes: [node] }, category: 'Internal'\n };\n this.addHistoryEntry(entry);\n this.diagram.endGroupAction();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.isDroppable = function (source, targetNodes) {\n var node = this.diagram.nameTable[source.id] || source.nodes[0];\n if (node.shape.shape === 'TextAnnotation') {\n return true;\n }\n if (node && node.shape.type === 'Bpmn') {\n if ((node.processId === targetNodes.id) || (node.id === targetNodes.processId) ||\n targetNodes.shape.activity.subProcess.collapsed) {\n return false;\n }\n }\n return true;\n };\n /**\n * @private\n */\n CommandHandler.prototype.renderHighlighter = function (args, connectHighlighter, source) {\n var bounds = new Rect();\n if (args.target instanceof Node || (connectHighlighter && args.source instanceof Node)) {\n var tgt = connectHighlighter ? args.source : args.target;\n var tgtWrap = connectHighlighter ? args.sourceWrapper : args.targetWrapper;\n var target = this.findTarget(tgtWrap, tgt, source, true);\n var element = void 0;\n if (target instanceof BpmnSubEvent) {\n var portId = target.id;\n var node = args.target;\n var parent_6 = node.wrapper.children[0].children[0].children[2];\n for (var _i = 0, _a = parent_6.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.id === node.id + '_' + portId) {\n element = child.children[0];\n break;\n }\n }\n }\n else {\n element = target instanceof Node ?\n target.wrapper : connectHighlighter ? args.sourceWrapper : args.targetWrapper;\n }\n this.diagram.renderHighlighter(element);\n }\n };\n //additional events\n /** @private */\n CommandHandler.prototype.mouseOver = function (source, target, position) {\n //mouse over\n //returns whether the source can move over the target or not\n return true;\n };\n /**\n * @private\n */\n CommandHandler.prototype.snapPoint = function (startPoint, endPoint, tx, ty) {\n var obj = this.diagram.selectedItems;\n var point;\n var towardsLeft = endPoint.x < startPoint.x;\n var towardsTop = endPoint.y < startPoint.y;\n point = { x: tx, y: ty };\n var snappedPoint = point;\n if (this.snappingModule) {\n snappedPoint = this.diagram.snappingModule.snapPoint(this.diagram, obj, towardsLeft, towardsTop, point, startPoint, endPoint);\n }\n return snappedPoint;\n };\n /**\n * @private\n */\n CommandHandler.prototype.removeSnap = function () {\n if ((this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) && this.snappingModule) {\n this.snappingModule.removeGuidelines(this.diagram);\n }\n };\n /** @private */\n CommandHandler.prototype.dropAnnotation = function (source, target) {\n var node = (source instanceof Node) ? source : source.nodes[0];\n if (this.diagram.bpmnModule && target.shape.type === 'Bpmn'\n && node.shape.shape === 'TextAnnotation') {\n var hasTarget = 'hasTarget';\n node[hasTarget] = target.id;\n node.shape.annotation.nodeId = target.id;\n if (!this.diagram.currentSymbol) {\n this.diagram.addTextAnnotation(node.shape.annotation, target);\n node.shape.annotation.nodeId = '';\n this.diagram.remove(node);\n }\n this.diagram.refreshDiagramLayer();\n }\n };\n ;\n /** @private */\n CommandHandler.prototype.drop = function (source, target, position) {\n //drop\n if (this.diagram.bpmnModule) {\n this.diagram.bpmnModule.dropBPMNchild(target, (source instanceof Node) ? source : source.nodes[0], this.diagram);\n this.diagram.refreshDiagramLayer();\n }\n };\n /** @private */\n CommandHandler.prototype.addHistoryEntry = function (entry) {\n this.diagram.addHistoryEntry(entry);\n };\n /** @private */\n CommandHandler.prototype.align = function (objects, option, type) {\n if (objects.length > 0) {\n var i = 0;\n var bounds = (type === 'Object') ? getBounds(objects[0].wrapper) : this.diagram.selectedItems.wrapper.bounds;\n var undoObj = { nodes: [], connectors: [] };\n var redoObj = { nodes: [], connectors: [] };\n for (i = ((type === 'Object') ? (i + 1) : i); i < objects.length; i++) {\n var tx = 0;\n var ty = 0;\n var objectBounds = getBounds(objects[i].wrapper);\n if (option === 'Left') {\n tx = bounds.left + objectBounds.width / 2 - objectBounds.center.x;\n }\n else if (option === 'Right') {\n tx = bounds.right - objectBounds.width / 2 - objectBounds.center.x;\n }\n else if (option === 'Top') {\n ty = bounds.top + objectBounds.height / 2 - objectBounds.center.y;\n }\n else if (option === 'Bottom') {\n ty = bounds.bottom - objectBounds.height / 2 - objectBounds.center.y;\n }\n else if (option === 'Center') {\n tx = bounds.center.x - objectBounds.center.x;\n }\n else if (option === 'Middle') {\n ty = bounds.center.y - objectBounds.center.y;\n }\n undoObj = this.storeObject(undoObj, objects[i]);\n this.drag(objects[i], tx, ty);\n this.diagram.updateSelector();\n redoObj = this.storeObject(redoObj, objects[i]);\n }\n undoObj = clone(undoObj);\n redoObj = clone(redoObj);\n var entry = {\n type: 'Align', category: 'Internal',\n undoObject: cloneObject(undoObj), redoObject: cloneObject(redoObj)\n };\n this.addHistoryEntry(entry);\n }\n };\n /** @private */\n CommandHandler.prototype.distribute = function (objects, option) {\n if (objects.length > 0) {\n var i = 0;\n var j = 0;\n var rect = new Rect();\n var b = [];\n var temp = void 0;\n var right = 0;\n var left = 0;\n var top_3 = 0;\n var bottom = 0;\n var center = 0;\n var middle = 0;\n var btt = 0;\n var sum = 0;\n var undoSelectorObj = { nodes: [], connectors: [] };\n var redoSelectorObj = { nodes: [], connectors: [] };\n objects = sort(objects);\n for (i = 1; i < objects.length; i++) {\n right = right + objects[i].wrapper.bounds.topRight.x - objects[i - 1].wrapper.bounds.topRight.x;\n left = left + objects[i].wrapper.bounds.topLeft.x - objects[i - 1].wrapper.bounds.topLeft.x;\n top_3 = top_3 + objects[i].wrapper.bounds.topRight.y - objects[i - 1].wrapper.bounds.topRight.y;\n bottom = bottom + objects[i].wrapper.bounds.bottomRight.y - objects[i - 1].wrapper.bounds.bottomRight.y;\n center = center + objects[i].wrapper.bounds.center.x - objects[i - 1].wrapper.bounds.center.x;\n middle = middle + objects[i].wrapper.bounds.center.y - objects[i - 1].wrapper.bounds.center.y;\n btt = btt + objects[i].wrapper.bounds.topRight.y - objects[i - 1].wrapper.bounds.bottomRight.y;\n }\n for (i = 1; i < objects.length - 1; i++) {\n var tx = 0;\n var ty = 0;\n var prev = getBounds(objects[i - 1].wrapper);\n var current = getBounds(objects[i].wrapper);\n if (option === 'RightToLeft' || option === 'Center') {\n tx = prev.center.x - current.center.x + (center / (objects.length - 1));\n }\n else if (option === 'Right') {\n tx = prev.topRight.x - current.topRight.x + (right / (objects.length - 1));\n }\n else if (option === 'Left') {\n tx = prev.topLeft.x - current.topLeft.x + (left / (objects.length - 1));\n }\n else if (option === 'Middle') {\n ty = prev.center.y - current.center.y + (middle / (objects.length - 1));\n }\n else if (option === 'Top') {\n ty = prev.topRight.y - current.topRight.y + (top_3 / (objects.length - 1));\n }\n else if (option === 'Bottom') {\n ty = prev.bottomRight.y - current.bottomRight.y + (bottom / (objects.length - 1));\n }\n else if (option === 'BottomToTop') {\n ty = prev.bottomRight.y - current.topRight.y + (btt / (objects.length - 1));\n }\n undoSelectorObj = this.storeObject(undoSelectorObj, objects[i]);\n this.drag(objects[i], tx, ty);\n this.diagram.updateSelector();\n redoSelectorObj = this.storeObject(redoSelectorObj, objects[i]);\n }\n undoSelectorObj = clone(undoSelectorObj);\n redoSelectorObj = clone(redoSelectorObj);\n var entry = {\n type: 'Distribute', category: 'Internal',\n undoObject: cloneObject(undoSelectorObj), redoObject: cloneObject(redoSelectorObj)\n };\n this.addHistoryEntry(entry);\n }\n };\n /** @private */\n CommandHandler.prototype.sameSize = function (objects, option) {\n if (objects.length > 0) {\n var i = 0;\n var pivot = void 0;\n pivot = { x: 0.5, y: 0.5 };\n var bounds = getBounds(objects[0].wrapper);\n var undoObject = { nodes: [], connectors: [] };\n var redoObject = { nodes: [], connectors: [] };\n for (i = 1; i < objects.length; i++) {\n var rect = getBounds(objects[i].wrapper);\n var sw = 1;\n var sh = 1;\n if (option === 'Width') {\n sw = bounds.width / rect.width;\n }\n else if (option === 'Height') {\n sh = bounds.height / rect.height;\n }\n else if (option === 'Size') {\n sw = bounds.width / rect.width;\n sh = bounds.height / rect.height;\n }\n undoObject = this.storeObject(undoObject, objects[i]);\n this.scale(objects[i], sw, sh, pivot);\n redoObject = this.storeObject(redoObject, objects[i]);\n }\n this.diagram.updateSelector();\n undoObject = clone(undoObject);\n redoObject = clone(redoObject);\n var entry = {\n type: 'Sizing', category: 'Internal',\n undoObject: cloneObject(undoObject), redoObject: cloneObject(redoObject)\n };\n this.addHistoryEntry(entry);\n }\n };\n CommandHandler.prototype.storeObject = function (selectorObject, obj) {\n if (obj instanceof Node) {\n selectorObject.nodes.push(clone(obj));\n }\n else {\n selectorObject.connectors.push(clone(obj));\n }\n return selectorObject;\n };\n /** @private */\n CommandHandler.prototype.scroll = function (scrollX, scrollY, focusPoint) {\n var panx = canPanX(this.diagram);\n var pany = canPanY(this.diagram);\n this.diagram.pan((scrollX = panx ? scrollX : 0) * this.diagram.scroller.currentZoom, (scrollY = pany ? scrollY : 0) * this.diagram.scroller.currentZoom, focusPoint);\n };\n /**\n * @private\n */\n CommandHandler.prototype.drawHighlighter = function (element) {\n this.diagram.renderHighlighter(element.wrapper);\n };\n /**\n * @private\n */\n CommandHandler.prototype.removeHighlighter = function () {\n this.diagram.clearHighlighter();\n };\n /** @private */\n CommandHandler.prototype.zoom = function (scale, scrollX, scrollY, focusPoint) {\n this.diagram.scroller.zoom(scale, scrollX * this.diagram.scroller.currentZoom, scrollY * this.diagram.scroller.currentZoom, focusPoint);\n };\n return CommandHandler;\n}());\nexport { CommandHandler };\n","import { Rect } from '../primitives/rect';\nimport { identityMatrix, scaleMatrix, translateMatrix, transformPointByMatrix, multiplyMatrix } from '../primitives/matrix';\nimport { updateRuler } from '../ruler/ruler';\nimport { canZoom, canPan } from './../utility/constraints-util';\n/**\n */\nvar DiagramScroller = /** @class */ (function () {\n function DiagramScroller(diagram) {\n /** @private */\n this.transform = { tx: 0, ty: 0, scale: 1 };\n this.vPortWidth = 0;\n this.vPortHeight = 0;\n this.currentZoomFActor = 1;\n this.hOffset = 0;\n this.vOffset = 0;\n this.scrolled = false;\n this.hScrollSize = 0;\n this.vScrollSize = 0;\n this.diagram = diagram;\n this.objects = [];\n this.transform = diagram.scroller ? diagram.scroller.transform : { tx: 0, ty: 0, scale: 1 };\n this.vPortWidth = diagram.scrollSettings.viewPortWidth;\n this.vPortHeight = diagram.scrollSettings.viewPortHeight;\n this.currentZoomFActor = diagram.scrollSettings.currentZoom;\n this.hOffset = diagram.scrollSettings.horizontalOffset;\n this.vOffset = diagram.scrollSettings.verticalOffset;\n }\n Object.defineProperty(DiagramScroller.prototype, \"viewPortHeight\", {\n /** @private */\n get: function () {\n return this.vPortHeight;\n },\n /** @private */\n set: function (offset) {\n this.vPortHeight = offset;\n this.diagram.scrollSettings.viewPortHeight = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"currentZoom\", {\n /** @private */\n get: function () {\n return this.currentZoomFActor;\n },\n /** @private */\n set: function (offset) {\n this.currentZoomFActor = offset;\n this.diagram.scrollSettings.currentZoom = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"viewPortWidth\", {\n /** @private */\n get: function () {\n return this.vPortWidth;\n },\n /** @private */\n set: function (offset) {\n this.vPortWidth = offset;\n this.diagram.scrollSettings.viewPortWidth = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"horizontalOffset\", {\n /** @private */\n get: function () {\n return this.hOffset;\n },\n /** @private */\n set: function (offset) {\n this.hOffset = offset;\n if (Math.abs(this.hOffset - this.diagram.scrollSettings.horizontalOffset) > 1) {\n this.scrolled = true;\n }\n this.diagram.scrollSettings.horizontalOffset = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"verticalOffset\", {\n /** @private */\n get: function () {\n return this.vOffset;\n },\n /** @private */\n set: function (offset) {\n this.vOffset = offset;\n if (Math.abs(this.vOffset - this.diagram.scrollSettings.verticalOffset) > 1) {\n this.scrolled = true;\n }\n this.diagram.scrollSettings.verticalOffset = offset;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n DiagramScroller.prototype.updateScrollOffsets = function (hOffset, vOffset) {\n var offsetX = 0;\n var offsetY = 0;\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n pageBounds.width *= this.currentZoom;\n pageBounds.height *= this.currentZoom;\n offsetX = Math.max(0, hOffset - pageBounds.left);\n offsetY = Math.max(0, vOffset - pageBounds.top);\n if (hOffset !== undefined && vOffset !== undefined) {\n this.horizontalOffset = offsetX;\n this.verticalOffset = offsetY;\n this.diagram.setOffset(offsetX, offsetY);\n }\n else {\n this.diagram.setOffset(-this.horizontalOffset - pageBounds.x, -this.verticalOffset - pageBounds.y);\n }\n this.transform = {\n tx: Math.max(this.horizontalOffset, -pageBounds.left) / this.currentZoom, ty: Math.max(this.verticalOffset, -pageBounds.top) / this.currentZoom,\n scale: this.currentZoom\n };\n };\n /** @private */\n DiagramScroller.prototype.setScrollOffset = function (hOffset, vOffset) {\n this.scrolled = false;\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n pageBounds.width *= this.currentZoom;\n pageBounds.height *= this.currentZoom;\n var x = -pageBounds.left;\n var y = -pageBounds.top;\n var set = false;\n var viewWidth = this.viewPortWidth * this.currentZoom;\n var viewHeight = this.viewPortHeight * this.currentZoom;\n var newX = x - hOffset;\n if (newX !== this.horizontalOffset) {\n if (x < this.horizontalOffset) {\n if (this.horizontalOffset > newX) {\n this.horizontalOffset -= hOffset;\n }\n else {\n this.horizontalOffset = newX;\n }\n set = true;\n }\n var right = Math.max(pageBounds.right + this.vScrollSize, viewWidth);\n if (!set && right < -newX + this.viewPortWidth) {\n var actualRight = -newX + viewWidth - this.vScrollSize;\n var currentRight = -this.horizontalOffset + viewWidth - this.vScrollSize;\n if (actualRight < currentRight) {\n //define\n this.horizontalOffset = newX;\n }\n else {\n if (actualRight - pageBounds.right > actualRight - currentRight) {\n this.horizontalOffset = newX;\n }\n else {\n this.horizontalOffset = -(pageBounds.right + this.vScrollSize - viewWidth);\n }\n }\n set = true;\n }\n if (!set) {\n this.horizontalOffset = x - hOffset;\n }\n }\n set = false;\n //vertical offset\n var newY = y - vOffset;\n if (newY !== this.verticalOffset) {\n if (y < this.verticalOffset) {\n if (this.verticalOffset > newY) {\n this.verticalOffset -= vOffset;\n }\n else {\n this.verticalOffset = newY;\n }\n set = true;\n }\n var bottom = Math.max(pageBounds.bottom + this.hScrollSize, viewHeight);\n if (!set && bottom < -newY + viewHeight) {\n var actualBottom = -newY + viewHeight - this.hScrollSize;\n var currentBottom = -this.verticalOffset + viewHeight - this.hScrollSize;\n if (actualBottom < currentBottom) {\n //define\n this.verticalOffset = newY;\n }\n else {\n if (actualBottom - pageBounds.bottom > actualBottom - currentBottom) {\n this.verticalOffset = newY;\n }\n else {\n this.verticalOffset = -(pageBounds.bottom + this.hScrollSize - viewHeight);\n }\n }\n set = true;\n }\n if (!set) {\n this.verticalOffset = y - vOffset;\n }\n }\n this.transform = {\n tx: Math.max(this.horizontalOffset, -pageBounds.left) / this.currentZoom, ty: Math.max(this.verticalOffset, -pageBounds.top) / this.currentZoom,\n scale: this.currentZoom\n };\n this.setSize();\n };\n /** @private */\n DiagramScroller.prototype.setSize = function () {\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n pageBounds.width *= this.currentZoom;\n pageBounds.height *= this.currentZoom;\n var x = Math.min(pageBounds.x, -this.horizontalOffset);\n var y = Math.min(pageBounds.y, -this.verticalOffset);\n var difX = -this.horizontalOffset + this.viewPortWidth - pageBounds.right;\n var difY = -this.verticalOffset + this.viewPortHeight - pageBounds.bottom;\n var hScrollSize = this.scrollerWidth;\n var vScrollSize = this.scrollerWidth;\n if (-this.verticalOffset <= pageBounds.y && -this.verticalOffset + this.viewPortHeight >= pageBounds.bottom) {\n vScrollSize = 0;\n }\n if (-this.horizontalOffset <= pageBounds.x && -this.horizontalOffset + this.viewPortWidth >= pageBounds.right) {\n hScrollSize = 0;\n }\n this.hScrollSize = hScrollSize;\n this.vScrollSize = vScrollSize;\n var oldWidth = this.diagramWidth;\n var oldHeight = this.diagramHeight;\n this.diagramWidth = Math.max(pageBounds.right, -this.horizontalOffset + this.viewPortWidth - vScrollSize) - x;\n this.diagramHeight = Math.max(pageBounds.bottom, -this.verticalOffset + this.viewPortHeight - hScrollSize) - y;\n if (oldWidth !== this.diagramWidth || oldHeight !== this.diagramHeight) {\n this.diagram.setSize(this.diagramWidth, this.diagramHeight);\n }\n this.diagram.transformLayers();\n this.diagram.element.style.overflow = 'hidden';\n };\n /** @private */\n DiagramScroller.prototype.setViewPortSize = function (width, height) {\n this.viewPortWidth = width;\n this.viewPortHeight = height;\n };\n /**\n * To get page pageBounds\n * @private\n */\n DiagramScroller.prototype.getPageBounds = function (boundingRect, region) {\n var rect = new Rect();\n var temp = 0;\n if (region !== 'Content' && this.diagram.pageSettings.width !== null && this.diagram.pageSettings.height !== null) {\n var width = this.diagram.pageSettings.width;\n var height = this.diagram.pageSettings.height;\n var negwidth = 0;\n var negheight = 0;\n if (this.diagram.pageSettings.multiplePage) {\n rect = this.diagram.spatialSearch.getPageBounds(0, 0);\n if (rect.right > width) {\n var x = Math.ceil(rect.right / width);\n width = width * x;\n }\n if (rect.bottom > height) {\n var x = Math.ceil(rect.bottom / height);\n height = height * x;\n }\n if (rect.left < 0 && Math.abs(rect.left) > negwidth) {\n var x = Math.ceil(Math.abs(rect.left) / this.diagram.pageSettings.width);\n negwidth = this.diagram.pageSettings.width * x;\n }\n if (rect.top < 0 && Math.abs(rect.top) > negheight) {\n var x = Math.ceil(Math.abs(rect.top) / this.diagram.pageSettings.height);\n negheight = this.diagram.pageSettings.height * x;\n }\n }\n return new Rect((-negwidth), (-negheight), width + negwidth, height + negheight);\n }\n else {\n var origin = boundingRect ? undefined : 0;\n return this.diagram.spatialSearch.getPageBounds(origin, origin);\n }\n };\n /**\n * To get page break when PageBreak is set as true\n * @private\n */\n DiagramScroller.prototype.getPageBreak = function (pageBounds) {\n var i = 0;\n var j = 0;\n var v = -1;\n var collection = [];\n var x1 = 0;\n var x2 = 0;\n var y1 = 0;\n var y2 = 0;\n var left = this.diagram.pageSettings.margin.left;\n var right = this.diagram.pageSettings.margin.right;\n var top = this.diagram.pageSettings.margin.top;\n var bottom = this.diagram.pageSettings.margin.bottom;\n var widthCount = 1;\n var heightCount = 1;\n var segment = { x1: x1, y1: y1, x2: x2, y2: y2 };\n while (pageBounds.width > i) {\n i = i + (this.diagram.pageSettings.width ? this.diagram.pageSettings.width : pageBounds.width);\n if (i === this.diagram.pageSettings.width) {\n segment = {\n x1: pageBounds.left + left, y1: pageBounds.top + top,\n x2: pageBounds.left + left, y2: pageBounds.bottom - bottom\n };\n collection[++v] = segment;\n }\n if (i < pageBounds.width) {\n x1 = pageBounds.topLeft.x + this.diagram.pageSettings.width * widthCount;\n y1 = pageBounds.topLeft.y + top;\n x2 = pageBounds.bottomLeft.x + this.diagram.pageSettings.width * widthCount;\n y2 = pageBounds.bottomLeft.y - bottom;\n segment = { x1: x1, y1: y1, x2: x2, y2: y2 };\n collection[++v] = segment;\n widthCount++;\n }\n if (pageBounds.width === i) {\n segment = {\n x1: pageBounds.right - right, y1: pageBounds.top + top,\n x2: pageBounds.right - right, y2: pageBounds.bottom - bottom\n };\n collection[++v] = segment;\n }\n }\n while (pageBounds.height > j) {\n j = j + (this.diagram.pageSettings.height ? this.diagram.pageSettings.height : pageBounds.height);\n if (j === this.diagram.pageSettings.height) {\n segment = {\n x1: pageBounds.left + left, y1: pageBounds.top + top,\n x2: pageBounds.right - right, y2: pageBounds.top + top\n };\n collection[++v] = segment;\n }\n if (j < pageBounds.height) {\n x1 = pageBounds.topLeft.x + left;\n y1 = pageBounds.topLeft.y + this.diagram.pageSettings.height * heightCount;\n x2 = pageBounds.topRight.x - right;\n y2 = pageBounds.topRight.y + this.diagram.pageSettings.height * heightCount;\n segment = { x1: x1, y1: y1, x2: x2, y2: y2 };\n collection[++v] = segment;\n heightCount++;\n }\n if (pageBounds.height === j) {\n segment = {\n x1: pageBounds.left + left, y1: pageBounds.bottom - bottom,\n x2: pageBounds.right - right, y2: pageBounds.bottom - bottom\n };\n collection[++v] = segment;\n }\n }\n return collection;\n };\n /** @private */\n DiagramScroller.prototype.zoom = function (factor, deltaX, deltaY, focusPoint) {\n if (canZoom(this.diagram) && factor !== 1 || (canPan(this.diagram) && factor === 1)) {\n var matrix = identityMatrix();\n scaleMatrix(matrix, this.currentZoom, this.currentZoom);\n translateMatrix(matrix, this.horizontalOffset, this.verticalOffset);\n focusPoint = focusPoint || { x: this.viewPortWidth / 2, y: this.viewPortHeight / 2 };\n focusPoint = transformPointByMatrix(matrix, focusPoint);\n if ((this.currentZoom * factor) >= this.diagram.scrollSettings.minZoom &&\n (this.currentZoom * factor) <= this.diagram.scrollSettings.maxZoom) {\n this.currentZoom *= factor;\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n //target Matrix\n var targetMatrix = identityMatrix();\n scaleMatrix(targetMatrix, factor, factor, focusPoint.x, focusPoint.y);\n translateMatrix(targetMatrix, deltaX || 0, deltaY || 0);\n multiplyMatrix(matrix, targetMatrix);\n var newOffset = transformPointByMatrix(matrix, { x: 0, y: 0 });\n if (factor === 1) {\n newOffset = this.applyScrollLimit(newOffset.x, newOffset.y);\n }\n this.transform = {\n tx: Math.max(newOffset.x, -pageBounds.left) / this.currentZoom,\n ty: Math.max(newOffset.y, -pageBounds.top) / this.currentZoom,\n scale: this.currentZoom\n };\n this.horizontalOffset = newOffset.x;\n this.verticalOffset = newOffset.y;\n this.setSize();\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n this.diagram.setOffset(-this.horizontalOffset - pageBounds.x, -this.verticalOffset - pageBounds.y);\n updateRuler(this.diagram);\n }\n }\n };\n /** @private */\n DiagramScroller.prototype.fitToPage = function (options) {\n options = options || {};\n var mode = options.mode;\n var region = options.region;\n var margin = options.margin || {};\n var canZoomIn = options.canZoomIn;\n var customBounds = options.customBounds;\n margin.bottom = margin.bottom || 25;\n margin.top = margin.top || 25;\n margin.left = margin.left || 25;\n margin.right = margin.right || 25;\n var bounds = customBounds;\n var factor;\n var deltaX = -this.horizontalOffset;\n var deltaY = -this.verticalOffset;\n region = region ? region : 'PageSettings';\n //fit mode\n if ((region === 'PageSettings' && this.diagram.pageSettings.width && this.diagram.pageSettings.height)\n || (this.diagram.nodes.length > 0 || this.diagram.connectors.length > 0)) {\n mode = mode ? mode : 'Page';\n if (region !== 'CustomBounds') {\n bounds = this.getPageBounds(true, region);\n }\n var scale = { x: 0, y: 0 };\n scale.x = (this.viewPortWidth - (margin.left + margin.right)) / (bounds.width);\n scale.y = (this.viewPortHeight - (margin.top + margin.bottom)) / (bounds.height);\n if (!canZoomIn && ((bounds.width - this.horizontalOffset) < this.viewPortWidth) &&\n (bounds.height - this.verticalOffset) < this.viewPortHeight) {\n scale.x = Math.min(1, scale.x);\n scale.y = Math.min(1, scale.y);\n }\n var zoomFactor = void 0;\n var centerX = void 0;\n var centerY = void 0;\n switch (mode) {\n case 'Width':\n zoomFactor = scale.x;\n factor = zoomFactor / this.currentZoom;\n centerX = (this.viewPortWidth - (bounds.width) * zoomFactor) / 2 - bounds.x * zoomFactor;\n deltaX += centerX + (margin.left - margin.right) / 2 * zoomFactor;\n deltaY -= -this.verticalOffset * factor;\n deltaY = region !== 'CustomBounds' ? deltaY : deltaY - this.verticalOffset * factor;\n break;\n case 'Height':\n zoomFactor = scale.y;\n factor = (zoomFactor / this.currentZoom);\n centerX = ((this.viewPortWidth - (bounds.width) * zoomFactor) / 2) - bounds.x * zoomFactor;\n centerY = ((this.viewPortHeight - (bounds.height) * zoomFactor) / 2) - bounds.y * zoomFactor;\n deltaX += centerX + (margin.left - margin.right) / 2 * zoomFactor;\n deltaY += centerY + (margin.top - margin.bottom) / 2 * zoomFactor;\n break;\n case 'Page':\n zoomFactor = Math.min(scale.x, scale.y);\n factor = (zoomFactor / this.currentZoom);\n centerX = (this.viewPortWidth - (bounds.width) * zoomFactor) / 2 - bounds.x * zoomFactor;\n centerY = (this.viewPortHeight - (bounds.height) * zoomFactor) / 2 - bounds.y * zoomFactor;\n deltaX += centerX + (margin.left - margin.right) / 2 * zoomFactor;\n deltaY += centerY + (margin.top - margin.bottom) / 2 * zoomFactor;\n break;\n }\n this.zoom(factor, deltaX, deltaY, { x: 0, y: 0 });\n }\n else {\n factor = 1 / this.currentZoom;\n this.zoom(factor, deltaX, deltaY, { x: 0, y: 0 });\n }\n };\n /** @private */\n DiagramScroller.prototype.bringIntoView = function (rect) {\n var x = 0;\n var y = 0;\n var scale = this.currentZoom;\n var bounds = rect;\n var hoffset = -this.horizontalOffset;\n var voffset = -this.verticalOffset;\n bounds = new Rect(bounds.x * scale, bounds.y * scale, bounds.width * scale, bounds.height * scale);\n var view = new Rect(hoffset, voffset, this.viewPortWidth, this.viewPortHeight);\n if (!(view.containsRect(bounds))) {\n if (bounds.right > (-hoffset + this.viewPortWidth)) {\n x = bounds.right - this.viewPortWidth;\n }\n if (bounds.x < -hoffset) {\n x = bounds.x;\n }\n if (bounds.bottom > (-voffset + this.viewPortHeight)) {\n y = bounds.bottom - this.viewPortHeight;\n }\n if (bounds.y < -voffset) {\n y = bounds.y;\n }\n this.zoom(1, -this.horizontalOffset - x, -this.verticalOffset - y, null);\n }\n };\n /** @private */\n DiagramScroller.prototype.bringToCenter = function (bounds) {\n var scale = this.currentZoom;\n var actualbounds = new Rect(bounds.x * scale, bounds.y * scale, bounds.width * scale, bounds.height * scale);\n var hoffset = actualbounds.x + actualbounds.width / 2 - this.viewPortWidth / 2;\n var voffset = actualbounds.y + actualbounds.height / 2 - this.viewPortHeight / 2;\n this.zoom(1, -this.horizontalOffset - hoffset, -this.verticalOffset - voffset, null);\n };\n DiagramScroller.prototype.applyScrollLimit = function (hOffset, vOffset) {\n if (this.diagram.scrollSettings.scrollLimit !== 'Infinity') {\n var bounds = void 0;\n if (this.diagram.scrollSettings.scrollLimit === 'Limited') {\n bounds = this.diagram.scrollSettings.scrollableArea;\n }\n bounds = bounds || this.getPageBounds(true);\n bounds.x *= this.currentZoom;\n bounds.y *= this.currentZoom;\n bounds.width *= this.currentZoom;\n bounds.height *= this.currentZoom;\n hOffset *= -1;\n vOffset *= -1;\n var allowedRight = Math.max(bounds.right, this.viewPortWidth);\n if (!(hOffset <= bounds.x && (hOffset + this.viewPortWidth >= bounds.right ||\n hOffset >= bounds.right - this.viewPortWidth)\n || hOffset >= bounds.x && (hOffset + this.viewPortWidth <= allowedRight))) {\n //not allowed case\n if (hOffset >= bounds.x) {\n hOffset = Math.max(bounds.x, Math.min(hOffset, hOffset - (hOffset + this.viewPortWidth - this.vScrollSize - allowedRight)));\n }\n else {\n var allowed = bounds.right - this.viewPortWidth;\n hOffset = Math.min(allowed, bounds.x);\n }\n }\n var allowedBottom = Math.max(bounds.bottom, this.viewPortHeight);\n if (!(vOffset <= bounds.y && vOffset + this.viewPortHeight >= bounds.bottom\n || vOffset >= bounds.y && vOffset + this.viewPortHeight <= allowedBottom)) {\n //not allowed case\n if (vOffset >= bounds.y) {\n vOffset = Math.max(bounds.y, Math.min(vOffset, vOffset - (vOffset + this.viewPortHeight - this.hScrollSize - allowedBottom)));\n }\n else {\n var allowed = bounds.bottom - this.viewPortHeight;\n vOffset = Math.min(bounds.y, allowed);\n }\n }\n hOffset *= -1;\n vOffset *= -1;\n }\n return { x: hOffset, y: vOffset };\n };\n return DiagramScroller;\n}());\nexport { DiagramScroller };\n","/**\n * Quad helps to maintain a set of objects that are contained within the particular region\n */\n/** @private */\nvar Quad = /** @class */ (function () {\n /** @private */\n function Quad(left, top, width, height, spatialSearching) {\n this.objects = [];\n this.left = left;\n this.top = top;\n this.width = width;\n this.height = height;\n this.spatialSearch = spatialSearching;\n }\n /** @private */\n Quad.prototype.findQuads = function (currentViewPort, quads) {\n if (this.first != null && this.first.isIntersect(currentViewPort)) {\n this.first.findQuads(currentViewPort, quads);\n }\n if (this.second != null && this.second.isIntersect(currentViewPort)) {\n this.second.findQuads(currentViewPort, quads);\n }\n if (this.third != null && this.third.isIntersect(currentViewPort)) {\n this.third.findQuads(currentViewPort, quads);\n }\n if (this.fourth != null && this.fourth.isIntersect(currentViewPort)) {\n this.fourth.findQuads(currentViewPort, quads);\n }\n if (this.objects.length > 0) {\n quads.push(this);\n }\n };\n Quad.prototype.isIntersect = function (t) {\n if (this.left + this.width < t.left || this.top + this.height < t.top || this.left > t.right || this.top > t.bottom) {\n return false;\n }\n return true;\n };\n /** @private */\n Quad.prototype.selectQuad = function () {\n var target = null;\n var current = this;\n var quadSet;\n while (current != null) {\n quadSet = current.getQuad(target);\n current = quadSet.source;\n target = quadSet.target || target;\n }\n return target;\n };\n Quad.prototype.getQuad = function (target) {\n target = null;\n var halfWidth = this.width / 2;\n var halfHeight = this.height / 2;\n if (halfWidth >= 1000 && halfHeight >= 1000) {\n var xCenter = this.left + halfWidth;\n var yCenter = this.top + halfHeight;\n if (this.spatialSearch.childRight <= xCenter) {\n if (this.spatialSearch.childBottom <= yCenter) {\n if (!this.first) {\n var newQuad = new Quad(this.left, this.top, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.first = newQuad;\n }\n return { source: this.first };\n }\n if (this.spatialSearch.childTop >= yCenter) {\n if (!this.third) {\n var newQuad = new Quad(this.left, yCenter, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.third = newQuad;\n }\n return { source: this.third };\n }\n }\n else if (this.spatialSearch.childLeft >= xCenter) {\n if (this.spatialSearch.childBottom <= yCenter) {\n if (!this.second) {\n var newQuad = new Quad(xCenter, this.top, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.second = newQuad;\n }\n return { source: this.second };\n }\n if (this.spatialSearch.childTop >= yCenter) {\n if (!this.fourth) {\n var newQuad = new Quad(xCenter, yCenter, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.fourth = newQuad;\n }\n return { source: this.fourth };\n }\n }\n }\n target = this;\n this.objects.push(this.spatialSearch.childNode);\n return { target: this };\n };\n /** @private */\n Quad.prototype.isContained = function () {\n if (this.spatialSearch.childLeft >= this.left && this.spatialSearch.childRight <= this.left + this.width &&\n this.spatialSearch.childTop >= this.top && this.spatialSearch.childBottom <= this.top + this.height) {\n return true;\n }\n return false;\n };\n /** @private */\n Quad.prototype.addIntoAQuad = function (node) {\n var quadAddition = {};\n this.spatialSearch.setCurrentNode(node);\n var quad = null;\n while (!quadAddition.isAdded) {\n quadAddition = this.spatialSearch.parentQuad.add(quad);\n quad = quadAddition.quad;\n }\n return quad;\n };\n Quad.prototype.add = function (quad) {\n quad = null;\n if (this.isContained()) {\n quad = this.selectQuad();\n return { isAdded: true, quad: quad };\n }\n else {\n var newParent = void 0;\n var isempty = this.objects.length === 0 && !this.first && !this.second && !this.third &&\n !this.fourth;\n var newWidth = this.width * 2;\n var newHeight = this.height * 2;\n if (this.spatialSearch.childLeft < this.left) {\n if (this.spatialSearch.childTop < this.top) {\n newParent = new Quad(this.left - this.width, this.top - this.height, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.fourth = this;\n }\n }\n else {\n newParent = new Quad(this.left - this.width, this.top, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.second = this;\n }\n }\n }\n else if (this.spatialSearch.childTop < this.top) {\n newParent = new Quad(this.left, this.top - this.height, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.third = this;\n }\n }\n else {\n newParent = new Quad(this.left, this.top, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.first = this;\n }\n }\n this.parent = newParent;\n this.spatialSearch.parentQuad = newParent;\n return { isAdded: false, quad: quad };\n //newParent.AddIntoaQuad(node);\n }\n };\n return Quad;\n}());\nexport { Quad };\n","import { Rect } from '../../primitives/rect';\nimport { Quad } from './quad';\n/**\n * Spatial search module helps to effectively find the objects over diagram\n */\nvar SpatialSearch = /** @class */ (function () {\n /** @private */\n function SpatialSearch(objectTable) {\n this.quadSize = 500;\n this.objectTable = objectTable;\n this.parentQuad = new Quad(0, 0, this.quadSize * 2, this.quadSize * 2, this);\n this.pageLeft = Number.MAX_VALUE;\n this.pageRight = -Number.MAX_VALUE;\n this.pageTop = Number.MAX_VALUE;\n this.pageBottom = -Number.MAX_VALUE;\n this.quadTable = {};\n }\n /** @private */\n SpatialSearch.prototype.removeFromAQuad = function (node) {\n if (this.quadTable[node.id]) {\n var quad = this.quadTable[node.id];\n var index = this.objectIndex(quad.objects, node);\n if (index !== -1) {\n quad.objects.splice(index, 1);\n this.update(quad);\n delete this.quadTable[node.id];\n }\n }\n };\n SpatialSearch.prototype.update = function (quad) {\n if (quad.parent && quad.objects.length === 0 && quad.first && quad.second && quad.third && quad.fourth) {\n var parent_1 = quad.parent;\n if (parent_1.first === quad) {\n parent_1.first = null;\n }\n else if (parent_1.second === quad) {\n parent_1.second = null;\n }\n else if (parent_1.third === quad) {\n parent_1.third = null;\n }\n else if (parent_1.fourth === quad) {\n parent_1.fourth = null;\n }\n this.update(quad.parent);\n }\n else {\n if (quad === this.parentQuad && !quad.first && !quad.second && !quad.third && !quad.fourth) {\n quad.left = 0;\n quad.width = 1000;\n quad.top = 0;\n quad.height = 1000;\n }\n return;\n }\n };\n SpatialSearch.prototype.addIntoAQuad = function (node) {\n var quad = this.parentQuad.addIntoAQuad(node);\n this.quadTable[node.id] = quad;\n };\n /** @private */\n SpatialSearch.prototype.objectIndex = function (objects, node) {\n for (var i = 0; i < objects.length; i++) {\n if ((objects[i]).id === node.id) {\n return i;\n }\n }\n return -1;\n };\n SpatialSearch.prototype.updateQuad = function (node) {\n this.setCurrentNode(node);\n var nodBounds = node.outerBounds;\n if (!(!isNaN(nodBounds.x) && !isNaN(nodBounds.y) &&\n !isNaN(nodBounds.width) && !isNaN(nodBounds.height))) {\n return false;\n }\n //nodBounds = new Rect(nodBounds.X.Valid(), nodBounds.Y.Valid(), nodBounds.Width.Valid(), nodBounds.Height.Valid());\n if (this.quadTable[node.id]) {\n var quad = this.quadTable[node.id];\n if (!quad.isContained()) {\n this.removeFromAQuad(node);\n this.addIntoAQuad(node);\n }\n }\n else {\n this.addIntoAQuad(node);\n }\n if (this.isWithinPageBounds(nodBounds) &&\n this.leftElement !== node &&\n this.topElement !== node &&\n this.rightElement !== node &&\n this.bottomElement !== node) {\n //contained - no change\n }\n else {\n var modified = false;\n if (this.pageLeft !== this.childLeft || node !== this.leftElement) {\n if (this.pageLeft >= this.childLeft) {\n this.pageLeft = this.childLeft;\n this.leftElement = node;\n modified = true;\n }\n else if (node === this.leftElement) {\n this.pageLeft = Number.MAX_VALUE;\n this.findLeft(this.parentQuad);\n modified = true;\n }\n }\n if (this.pageTop !== this.childTop || node !== this.topElement) {\n if (this.pageTop >= this.childTop) {\n this.pageTop = this.childTop;\n this.topElement = node;\n modified = true;\n }\n else if (node === this.topElement) {\n this.pageTop = Number.MAX_VALUE;\n this.findTop(this.parentQuad);\n modified = true;\n }\n }\n if (this.pageBottom !== this.childBottom || node !== this.bottomElement) {\n if (this.pageBottom <= this.childBottom) {\n modified = true;\n this.pageBottom = this.childBottom;\n this.bottomElement = node;\n }\n else if (node === this.bottomElement) {\n this.pageBottom = -Number.MAX_VALUE;\n this.findBottom(this.parentQuad);\n modified = true;\n }\n }\n if (this.pageRight !== this.childRight || node !== this.rightElement) {\n if (this.pageRight <= this.childRight) {\n this.pageRight = this.childRight;\n this.rightElement = node;\n modified = true;\n }\n else if (node === this.rightElement) {\n this.pageRight = -Number.MAX_VALUE;\n this.findRight(this.parentQuad);\n modified = true;\n }\n }\n return modified;\n }\n this.setCurrentNode(null);\n return false;\n };\n SpatialSearch.prototype.isWithinPageBounds = function (node) {\n if (node.left >= this.pageLeft && node.right <= this.pageRight && node.top >= this.pageTop\n && node.bottom <= this.pageBottom) {\n return true;\n }\n else {\n return false;\n }\n };\n /** @private */\n SpatialSearch.prototype.findQuads = function (region) {\n var quads = [];\n this.parentQuad.findQuads(region, quads);\n return quads;\n };\n /** @private */\n SpatialSearch.prototype.findObjects = function (region) {\n var quads = this.findQuads(region);\n var objects = [];\n for (var _i = 0, quads_1 = quads; _i < quads_1.length; _i++) {\n var quad = quads_1[_i];\n for (var _a = 0, _b = quad.objects; _a < _b.length; _a++) {\n var obj = _b[_a];\n if (obj.outerBounds.intersects(region)) {\n objects.push(this.objectTable[obj.id]);\n }\n }\n }\n return objects;\n };\n /** @private */\n SpatialSearch.prototype.updateBounds = function (node) {\n var modified = false;\n if (node === this.topElement) {\n this.pageTop = Number.MAX_VALUE;\n this.topElement = null;\n this.findTop(this.parentQuad);\n modified = true;\n }\n if (node === this.leftElement) {\n this.pageLeft = Number.MAX_VALUE;\n this.leftElement = null;\n this.findLeft(this.parentQuad);\n modified = true;\n }\n if (node === this.rightElement) {\n this.pageRight = -Number.MAX_VALUE;\n this.rightElement = null;\n this.findRight(this.parentQuad);\n modified = true;\n }\n if (node === this.bottomElement) {\n this.pageBottom = -Number.MAX_VALUE;\n this.bottomElement = null;\n this.findBottom(this.parentQuad);\n modified = true;\n }\n return modified;\n };\n SpatialSearch.prototype.findBottom = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.third || quad.fourth) {\n if (quad.third) {\n this.findBottom(quad.third);\n }\n if (quad.fourth) {\n this.findBottom(quad.fourth);\n }\n }\n else {\n if (quad.second) {\n this.findBottom(quad.second);\n }\n if (quad.first) {\n this.findBottom(quad.first);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageBottom <= node.outerBounds.bottom) {\n this.pageBottom = node.outerBounds.bottom;\n this.bottomElement = node;\n }\n }\n };\n SpatialSearch.prototype.findRight = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.second || quad.fourth) {\n if (quad.second) {\n this.findRight(quad.second);\n }\n if (quad.fourth) {\n this.findRight(quad.fourth);\n }\n }\n else {\n if (quad.first) {\n this.findRight(quad.first);\n }\n if (quad.third) {\n this.findRight(quad.third);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageRight <= node.outerBounds.right) {\n this.pageRight = node.outerBounds.right;\n this.rightElement = node;\n }\n }\n };\n SpatialSearch.prototype.findLeft = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.first || quad.third) {\n if (quad.first) {\n this.findLeft(quad.first);\n }\n if (quad.third) {\n this.findLeft(quad.third);\n }\n }\n else {\n if (quad.second) {\n this.findLeft(quad.second);\n }\n if (quad.fourth) {\n this.findLeft(quad.fourth);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageLeft >= node.outerBounds.left) {\n this.pageLeft = node.outerBounds.left;\n this.leftElement = node;\n }\n }\n };\n SpatialSearch.prototype.findTop = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.first || quad.second) {\n if (quad.first) {\n this.findTop(quad.first);\n }\n if (quad.second) {\n this.findTop(quad.second);\n }\n }\n else {\n if (quad.third) {\n this.findTop(quad.third);\n }\n if (quad.fourth) {\n this.findTop(quad.fourth);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageTop >= node.outerBounds.top) {\n this.pageTop = node.outerBounds.top;\n this.topElement = node;\n }\n }\n };\n /** @private */\n SpatialSearch.prototype.setCurrentNode = function (node) {\n this.childNode = node;\n if (node) {\n var r = node.outerBounds;\n this.childLeft = Number(r.left);\n this.childTop = Number(r.top);\n this.childRight = Number(r.right);\n this.childBottom = Number(r.bottom);\n }\n else {\n this.childLeft = Number.MAX_VALUE;\n this.childTop = Number.MAX_VALUE;\n this.childRight = -Number.MAX_VALUE;\n this.childBottom = -Number.MAX_VALUE;\n }\n };\n /** @private */\n SpatialSearch.prototype.getPageBounds = function (originX, originY) {\n if (this.pageLeft === Number.MAX_VALUE) {\n return new Rect(0, 0, 0, 0);\n }\n var left = originX !== undefined ? Math.min(this.pageLeft, 0) : this.pageLeft;\n var top = originY !== undefined ? Math.min(this.pageTop, 0) : this.pageTop;\n return new Rect(Math.round(left), Math.round(top), Math.round(this.pageRight - left), Math.round(this.pageBottom - top));\n };\n /** @private */\n SpatialSearch.prototype.getQuad = function (node) {\n return this.quadTable[node.id];\n };\n return SpatialSearch;\n}());\nexport { SpatialSearch };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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';\n/**\n * Defines the combination of keys and modifier keys\n */\nvar KeyGesture = /** @class */ (function (_super) {\n __extends(KeyGesture, _super);\n function KeyGesture() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], KeyGesture.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], KeyGesture.prototype, \"keyModifiers\", void 0);\n return KeyGesture;\n}(ChildProperty));\nexport { KeyGesture };\n/**\n * Defines a command and a key gesture to define when the command should be executed\n */\nvar Command = /** @class */ (function (_super) {\n __extends(Command, _super);\n function Command() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Command.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], Command.prototype, \"canExecute\", void 0);\n __decorate([\n Property()\n ], Command.prototype, \"execute\", void 0);\n __decorate([\n Complex({}, KeyGesture)\n ], Command.prototype, \"gesture\", void 0);\n __decorate([\n Property('')\n ], Command.prototype, \"parameter\", void 0);\n return Command;\n}(ChildProperty));\nexport { Command };\n/**\n * Defines the collection of commands and the corresponding key gestures\n */\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Command)\n ], CommandManager.prototype, \"commands\", void 0);\n return CommandManager;\n}(ChildProperty));\nexport { CommandManager };\n/**\n * Defines the behavior of the context menu items\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ContextMenuSettings.prototype, \"show\", void 0);\n __decorate([\n Property()\n ], ContextMenuSettings.prototype, \"showCustomMenuOnly\", void 0);\n __decorate([\n Property()\n ], ContextMenuSettings.prototype, \"items\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, Complex, Collection, EventHandler, L10n, Droppable, remove } from '@syncfusion/ej2-base';\nimport { Browser, Event } from '@syncfusion/ej2-base';\nimport { CanvasRenderer } from './rendering/canvas-renderer';\nimport { SvgRenderer } from './rendering/svg-renderer';\nimport { DiagramRenderer } from './rendering/renderer';\nimport { PageSettings, ScrollSettings } from './diagram/page-settings';\nimport { ServiceLocator } from './objects/service';\nimport { Container } from './core/containers/container';\nimport { Node, BpmnShape } from './objects/node';\nimport { Connector } from './objects/connector';\nimport { SnapSettings } from './diagram/grid-lines';\nimport { RulerSettings } from './diagram/ruler-settings';\nimport { removeRulerElements, updateRuler, getRulerSize } from './ruler/ruler';\nimport { renderRuler, renderOverlapElement } from './ruler/ruler';\nimport { Size } from './primitives/size';\nimport { Keys, KeyModifiers, DiagramTools, AnnotationConstraints, NodeConstraints } from './enum/enum';\nimport { DiagramConstraints, SelectorConstraints, PortVisibility, DiagramEvent } from './enum/enum';\nimport { DiagramAction, ThumbsConstraints } from './enum/enum';\nimport { RealAction } from './enum/enum';\nimport { PathElement } from './core/elements/path-element';\nimport { TextElement } from './core/elements/text-element';\nimport { updateStyle, removeItem, updateConnector, updateShape } from './utility/diagram-util';\nimport { checkPortRestriction, serialize, deserialize, updateHyperlink, getObjectType } from './utility/diagram-util';\nimport { Rect } from './primitives/rect';\nimport { getPortShape } from './objects/dictionary/common';\nimport { ShapeAnnotation, PathAnnotation } from './objects/annotation';\nimport { Canvas } from './core/containers/canvas';\nimport { DataSource } from './diagram/data-source';\nimport { Layout } from './layout/layout-base';\nimport { Selector } from './interaction/selector';\nimport { DiagramEventHandler } from './interaction/event-handlers';\nimport { CommandHandler } from './interaction/command-manager';\nimport { DiagramScroller } from './interaction/scroller';\nimport { isSelected } from './interaction/actions';\nimport { SpatialSearch } from './interaction/spatial-search/spatial-search';\nimport { setAttributeSvg, setAttributeHtml, measureHtmlText, removeElement, createMeasureElements } from './utility/dom-util';\nimport { getDiagramElement, getScrollerWidth, getHTMLLayer } from './utility/dom-util';\nimport { getBackgroundLayer, createHtmlElement, createSvgElement, getNativeLayerSvg } from './utility/dom-util';\nimport { getPortLayerSvg, getDiagramLayerSvg } from './utility/dom-util';\nimport { getAdornerLayerSvg, getSelectorElement, getGridLayerSvg, getBackgroundLayerSvg } from './utility/dom-util';\nimport { CommandManager, ContextMenuSettings } from './diagram/keyboard-commands';\nimport { canDelete, canInConnect, canOutConnect, canRotate } from './utility/constraints-util';\nimport { canResize, canSingleSelect, canZoomPan, canZoomTextEdit } from './utility/constraints-util';\nimport { canDragSourceEnd, canDragTargetEnd, canDragSegmentThumb, enableReadOnly, canMove } from './utility/constraints-util';\nimport { findAnnotation, arrangeChild } from './utility/diagram-util';\nimport { randomId, cloneObject, extendObject, getFunction, getBounds } from './utility/base-util';\nimport { DiagramTooltip, initTooltip } from './objects/tooltip';\nimport { PointPort } from './objects/port';\nimport { canShadow } from './utility/constraints-util';\nimport { Layer } from './diagram/layer';\nimport { DiagramNativeElement } from './core/elements/native-element';\nimport { DiagramHtmlElement } from './core/elements/html-element';\n/**\n * Represents the Diagram control\n * ```html\n *
    \n * ```\n * ```typescript\n * let diagram: Diagram = new Diagram({\n * width:'1000px', height:'500px' });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar Diagram = /** @class */ (function (_super) {\n __extends(Diagram, _super);\n /**\n * Constructor for creating the widget\n */\n function Diagram(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.connectorTable = {};\n /** @private */\n _this.groupTable = {};\n /** @private */\n _this.activeLabel = { id: '', parentId: '', isGroup: false };\n /** @private */\n _this.textEditing = false;\n /** @private */\n _this.isTriggerEvent = false;\n /** @private */\n _this.preventNodesUpdate = false;\n /** @private */\n _this.preventConnectorsUpdate = false;\n /** @private */\n _this.selectionConnectorsList = [];\n _this.renderTimer = null;\n var child;\n var node;\n for (var i = 0; options && options.nodes && i < options.nodes.length; i++) {\n child = options.nodes[i];\n node = _this.nodes[i];\n if (child.children && child.children.length > 0) {\n if (!child.style || !child.style.fill) {\n node.style.fill = 'transparent';\n }\n if (!child.style || !child.style.strokeColor) {\n node.style.strokeColor = 'transparent';\n }\n }\n }\n return _this;\n }\n Diagram.prototype.clearCollection = function (isConnector) {\n var collection = [];\n var obj;\n for (var _i = 0, _a = Object.keys(this.nameTable); _i < _a.length; _i++) {\n var key = _a[_i];\n obj = this.nameTable[key];\n if (obj && ((isConnector && obj instanceof Connector) || (!isConnector && obj instanceof Node))) {\n collection.push(obj);\n }\n }\n this.clearObjects(collection);\n };\n /**\n * Updates the diagram control when the objects are changed\n * @param newProp Lists the new values of the changed properties\n * @param oldProp Lists the old values of the changed properties\n */\n /* tslint:disable */\n Diagram.prototype.onPropertyChanged = function (newProp, oldProp) {\n // Model Changed\n var objectArray = [];\n var refreshLayout = false;\n var refereshColelction = 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.element.style.width = this.getSizeValue(this.width);\n this.element.style.height = this.getSizeValue(this.height);\n this.eventHandler.updateViewPortSize(this.element);\n for (var _b = 0, _c = this.views; _b < _c.length; _b++) {\n var view = _c[_b];\n var temp = this.views[view];\n if (!(temp instanceof Diagram)) {\n temp.updateView(temp);\n }\n }\n break;\n case 'nodes':\n if (newProp.nodes.length > 0 && oldProp.nodes.length === 0) {\n this.clearCollection();\n refereshColelction = true;\n }\n else {\n for (var _d = 0, _e = Object.keys(newProp.nodes); _d < _e.length; _d++) {\n var key = _e[_d];\n var index = Number(key);\n var actualObject = this.nodes[index];\n var changedProp = newProp.nodes[index];\n refreshLayout = refreshLayout || changedProp.excludeFromLayout !== undefined;\n this.nodePropertyChange(actualObject, oldProp.nodes[index], changedProp, undefined, true);\n objectArray.push(actualObject);\n }\n if (this.mode === 'Canvas') {\n this.refreshDiagramLayer();\n }\n }\n break;\n case 'connectors':\n var oldObject = void 0;\n if (newProp.connectors.length > 0 && oldProp.connectors.length === 0) {\n this.clearCollection(true);\n refereshColelction = true;\n }\n else {\n for (var _f = 0, _g = Object.keys(newProp.connectors); _f < _g.length; _f++) {\n var key = _g[_f];\n var index = Number(key);\n var actualObject = this.connectors[index];\n var changedProp = newProp.connectors[index];\n this.connectorPropertyChange(actualObject, oldProp.connectors[index], changedProp, true);\n objectArray.push(actualObject);\n }\n this.updateBridging();\n if (this.mode === 'Canvas') {\n this.refreshDiagramLayer();\n }\n }\n break;\n case 'bridgeDirection':\n this.updateBridging();\n if (this.mode === 'Canvas') {\n this.refreshDiagramLayer();\n }\n break;\n case 'backgroundColor':\n this.intOffPageBackground();\n break;\n case 'pageSettings':\n this.validatePageSize();\n this.updatePage();\n break;\n case 'selectedItems':\n if (newProp.selectedItems.userHandles && this.selectedItems.wrapper && this.selectedItems.userHandles) {\n if (this.selectedItems.userHandles.length > 0) {\n this.renderSelector(true);\n break;\n }\n }\n if (newProp.selectedItems.constraints) {\n this.renderSelector(true);\n break;\n }\n break;\n case 'snapSettings':\n this.updateSnapSettings(newProp);\n break;\n case 'commandManager':\n this.initCommands();\n break;\n case 'layout':\n refreshLayout = true;\n break;\n case 'dataSourceSettings':\n this.clear();\n this.initObjects();\n refreshLayout = true;\n break;\n case 'tooltip':\n initTooltip(this);\n break;\n case 'rulerSettings':\n this.updateRulerSettings(newProp);\n break;\n case 'layers':\n this.updateLayer(newProp);\n break;\n case 'scrollSettings':\n this.updateScrollSettings(newProp);\n break;\n }\n }\n if (refreshLayout) {\n this.doLayout();\n }\n var args = { element: objectArray, cause: this.diagramActions, oldValue: oldProp, newValue: newProp };\n this.triggerEvent(DiagramEvent.propertyChange, args);\n if (!refereshColelction && (this.canLogChange()) && (this.modelChanged(newProp, oldProp))) {\n var entry = { type: 'PropertyChanged', undoObject: oldProp, redoObject: newProp, category: 'Internal' };\n this.addHistoryEntry(entry);\n }\n this.resetDiagramActions();\n if (refereshColelction) {\n this.initObjects(true);\n this.refreshDiagramLayer();\n }\n };\n /* tslint:enable */\n Diagram.prototype.updateSnapSettings = function (newProp) {\n if (newProp.snapSettings.constraints || newProp.snapSettings.horizontalGridlines ||\n newProp.snapSettings.verticalGridlines) {\n this.diagramRenderer.updateGrid(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n }\n };\n Diagram.prototype.updateRulerSettings = function (newProp) {\n if (newProp.rulerSettings.dynamicGrid !== undefined) {\n this.diagramRenderer.updateGrid(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n }\n if (newProp.rulerSettings.showRulers !== undefined) {\n this.intOffPageBackground();\n this.scroller.setSize();\n this.renderRulers();\n }\n else if (newProp.rulerSettings.horizontalRuler !== undefined ||\n newProp.rulerSettings.verticalRuler !== undefined) {\n if (newProp.rulerSettings.horizontalRuler.thickness !== undefined ||\n newProp.rulerSettings.verticalRuler.thickness !== undefined) {\n removeRulerElements(this);\n this.intOffPageBackground();\n this.scroller.setSize();\n this.renderRulers();\n }\n else {\n updateRuler(this);\n }\n }\n this.diagramRenderer.updateGrid(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n Diagram.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initialize nodes, connectors and renderer\n */\n Diagram.prototype.preRender = function () {\n this.initializePrivateVariables();\n this.isProtectedOnChange = true;\n this.serviceLocator = new ServiceLocator;\n this.initializeServices();\n this.initDiagram();\n this.initViews();\n this.unWireEvents();\n this.wireEvents();\n this.element.classList.add('e-diagram');\n };\n Diagram.prototype.initializePrivateVariables = function () {\n this.defaultLocale = {\n Copy: 'Copy',\n Cut: 'Cut',\n Paste: 'Paste',\n Undo: 'Undo',\n Redo: 'Redo',\n SelectAll: 'Select All',\n Grouping: 'Grouping',\n Group: 'Group',\n UnGroup: 'Un Group',\n Order: 'Order',\n BringToFront: 'Bring To Front',\n MoveForward: 'Move Forward',\n SendToBack: 'Send To Back',\n SendBackward: 'Send Backward'\n };\n this.layerZIndex = -1;\n this.layerZIndexTable = {};\n this.nameTable = {};\n this.groupTable = {};\n this.commands = {};\n if (!this.isLoading) {\n this.views = [];\n }\n this.commandHandler = new CommandHandler(this);\n this.eventHandler = new DiagramEventHandler(this, this.commandHandler);\n this.spatialSearch = new SpatialSearch(this.nameTable);\n this.scroller = new DiagramScroller(this);\n };\n Diagram.prototype.initializeServices = function () {\n this.serviceLocator.register('localization', this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale));\n };\n /**\n * Renders the diagram control with nodes and connectors\n */\n Diagram.prototype.render = function () {\n this.initHistory();\n this.diagramRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), this.mode === 'SVG');\n this.initLayers();\n this.initializeDiagramLayers();\n this.diagramRenderer.setLayers();\n this.initObjects(true);\n this.doLayout();\n this.validatePageSize();\n this.renderPageBreaks();\n this.diagramRenderer.renderSvgGridlines(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n this.commandHandler.initSelectorWrapper();\n /**\n * Used to render context menu\n */\n this.notify('initial-load', {});\n /**\n * Used to load context menu\n */\n this.trigger('load');\n this.scroller.setSize();\n this.scroller.updateScrollOffsets();\n this.refreshDiagramLayer();\n /**\n * Used to end the context menu rendering\n */\n if (Browser.isDevice) {\n this.tool = DiagramTools.ZoomPan | DiagramTools.SingleSelect;\n }\n this.notify('initial-end', {});\n this.isProtectedOnChange = false;\n this.tooltipObject = initTooltip(this);\n this.diagramActions = DiagramAction.Render;\n this.initCommands();\n this.isLoading = false;\n };\n /**\n * Returns the module name of the diagram\n */\n Diagram.prototype.getModuleName = function () {\n return 'diagram';\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Diagram.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'Bpmn',\n args: []\n });\n modules.push({\n member: 'Bridging',\n args: []\n });\n modules.push({\n member: 'ConnectorEditingTool',\n args: []\n });\n if (this.constraints & DiagramConstraints.UndoRedo) {\n modules.push({\n member: 'UndoRedo',\n args: []\n });\n }\n if (this.layout.type === 'OrganizationalChart' || this.layout.type === 'HierarchicalTree' ||\n this.layout.enableAnimation) {\n modules.push({\n member: 'LayoutAnimate',\n args: []\n });\n }\n if (this.snapSettings.constraints) {\n modules.push({\n member: 'Snapping',\n args: [this]\n });\n }\n modules.push({\n member: 'PrintandExport',\n args: [this]\n });\n if (this.contextMenuSettings.show) {\n modules.push({\n member: 'contextMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.layout.type === 'OrganizationalChart' || this.layout.type === 'HierarchicalTree') {\n modules.push({\n member: 'OrganizationalChart',\n args: []\n });\n }\n if (this.layout.type === 'ComplexHierarchicalTree') {\n modules.push({\n member: 'ComplexHierarchicalTree',\n args: []\n });\n }\n if (this.layout.type === 'MindMap') {\n modules.push({\n member: 'MindMapChart',\n args: []\n });\n }\n if (this.layout.type === 'RadialTree') {\n modules.push({\n member: 'RadialTree',\n args: []\n });\n }\n if (this.layout.type === 'SymmetricalLayout') {\n modules.push({\n member: 'SymmetricalLayout',\n args: []\n });\n }\n if (this.dataSourceSettings.dataManager || this.dataSourceSettings.data) {\n modules.push({\n member: 'DataBinding',\n args: []\n });\n }\n return modules;\n };\n /**\n * Destroys the diagram control\n */\n Diagram.prototype.destroy = function () {\n clearInterval(this.renderTimer);\n this.renderTimer = null;\n if (this.hRuler && this.vRuler) {\n this.hRuler.destroy();\n this.vRuler.destroy();\n }\n this.tooltipObject.destroy();\n this.droppable.destroy();\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n if (document.getElementById(this.element.id)) {\n this.element.classList.remove('e-diagram');\n var tooltipelement = document.getElementsByClassName('e-tooltip-wrap');\n while (tooltipelement.length > 0) {\n tooltipelement[0].parentNode.removeChild(tooltipelement[0]);\n }\n var content = document.getElementById(this.element.id + 'content');\n if (content) {\n this.element.removeChild(content);\n }\n var measureElement = 'measureElement';\n if (window[measureElement]) {\n window[measureElement].usageCount -= 1;\n if (window[measureElement].usageCount === 0) {\n window[measureElement].parentNode.removeChild(window[measureElement]);\n window[measureElement] = null;\n }\n }\n }\n };\n /**\n * Wires the mouse events with diagram control\n */\n Diagram.prototype.wireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var stopEvent = Browser.touchEndEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n EventHandler.add(this.diagramCanvas, startEvent, this.eventHandler.mouseDown, this.eventHandler);\n EventHandler.add(this.diagramCanvas, moveEvent, this.eventHandler.mouseMove, this.eventHandler);\n EventHandler.add(this.diagramCanvas, stopEvent, this.eventHandler.mouseUp, this.eventHandler);\n EventHandler.add(this.diagramCanvas, cancelEvent, this.eventHandler.mouseLeave, this.eventHandler);\n EventHandler.add(this.diagramCanvas, 'keydown', this.eventHandler.keyDown, this.eventHandler);\n EventHandler.add(this.diagramCanvas, 'dblclick', this.eventHandler.doubleClick, this.eventHandler);\n EventHandler.add(this.diagramCanvas, 'scroll', this.eventHandler.scrolled, this.eventHandler);\n EventHandler.add(this.diagramCanvas, wheelEvent, this.eventHandler.mouseWheel, this.eventHandler);\n EventHandler.add(window, 'resize', this.eventHandler.windowResize, this.eventHandler);\n this.initDroppables();\n };\n /**\n * Unwires the mouse events from diagram control\n */\n Diagram.prototype.unWireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n var stopEvent = Browser.touchEndEvent;\n EventHandler.remove(this.diagramCanvas, startEvent, this.eventHandler.mouseDown);\n EventHandler.remove(this.diagramCanvas, moveEvent, this.eventHandler.mouseMove);\n EventHandler.remove(this.diagramCanvas, stopEvent, this.eventHandler.mouseUp);\n EventHandler.remove(this.diagramCanvas, cancelEvent, this.eventHandler.mouseLeave);\n EventHandler.remove(this.diagramCanvas, 'keydown', this.eventHandler.keyDown);\n EventHandler.remove(this.diagramCanvas, 'dblclick', this.eventHandler.doubleClick);\n EventHandler.remove(this.diagramCanvas, 'scroll', this.eventHandler.scrolled);\n EventHandler.remove(this.diagramCanvas, wheelEvent, this.eventHandler.mouseWheel);\n EventHandler.remove(window, 'resize', this.eventHandler.windowResize);\n };\n //public methods - start region\n /**\n * Selects the given collection of objects\n * @param objects Defines the collection of nodes and connectors to be selected\n * @param multipleSelection Defines whether the existing selection has to be cleared or not\n */\n Diagram.prototype.select = function (objects, multipleSelection) {\n if (objects != null) {\n this.commandHandler.selectObjects(objects, multipleSelection);\n }\n };\n /**\n * Selects the all the objects.\n */\n Diagram.prototype.selectAll = function () {\n var selectedItems = [];\n selectedItems = this.getObjectsOfLayer(this.activeLayer.objects);\n this.select(selectedItems);\n };\n /**\n * Removes the given object from selection list\n * @param obj Defines the object to be unselected\n */\n Diagram.prototype.unSelect = function (obj) {\n if (obj && isSelected(this, obj)) {\n this.commandHandler.unSelect(obj);\n }\n };\n /**\n * Removes all elements from the selection list\n */\n Diagram.prototype.clearSelection = function () {\n this.commandHandler.clearSelection(true);\n };\n /**\n * Update the diagram clipboard dimension\n */\n Diagram.prototype.updateViewPort = function () {\n this.eventHandler.updateViewPortSize(this.element);\n };\n Diagram.prototype.cutCommand = function () {\n this.cut();\n };\n /**\n * Removes the selected nodes and connectors from diagram and moves them to diagram clipboard\n */\n Diagram.prototype.cut = function () {\n this.commandHandler.cut();\n };\n /**\n * Add a process into the sub-process\n */\n Diagram.prototype.addProcess = function (process, parentId) {\n if (this.bpmnModule) {\n this.bpmnModule.addProcess(process, parentId, this);\n }\n };\n /**\n * Remove a process from the sub-process\n */\n Diagram.prototype.removeProcess = function (id) {\n if (this.bpmnModule) {\n this.bpmnModule.removeProcess(id, this);\n }\n };\n Diagram.prototype.pasteCommand = function () {\n this.paste();\n };\n /**\n * Adds the given objects/ the objects in the diagram clipboard to diagram control\n * @param obj Defines the objects to be added to diagram\n */\n Diagram.prototype.paste = function (obj) {\n this.commandHandler.paste(obj);\n };\n /**\n * fit the diagram to the page with respect to mode and region\n */\n Diagram.prototype.fitToPage = function (options) {\n this.scroller.fitToPage(options);\n };\n /**\n * bring the specified bounds into the viewport\n */\n Diagram.prototype.bringIntoView = function (bound) {\n this.scroller.bringIntoView(bound);\n };\n /**\n * bring the specified bounds to the center of the viewport\n */\n Diagram.prototype.bringToCenter = function (bound) {\n this.scroller.bringToCenter(bound);\n };\n Diagram.prototype.copyCommand = function () {\n this.copy();\n };\n /**\n * Copies the selected nodes and connectors to diagram clipboard\n */\n Diagram.prototype.copy = function () {\n var obj = this.commandHandler.copy();\n return obj;\n };\n /**\n * Group the selected nodes and connectors in diagram\n */\n Diagram.prototype.group = function () {\n this.commandHandler.group();\n };\n /**\n * UnGroup the selected nodes and connectors in diagram\n */\n Diagram.prototype.unGroup = function () {\n this.commandHandler.unGroup();\n };\n /**\n * send the selected nodes or connectors back\n */\n Diagram.prototype.sendToBack = function () {\n this.commandHandler.sendToBack();\n };\n /**\n * set the active layer\n * @param layerName defines the name of the layer which is to be active layer\n */\n Diagram.prototype.setActiveLayer = function (layerName) {\n var layer = this.commandHandler.getLayer(layerName);\n this.activeLayer = layer;\n };\n /**\n * add the layer into diagram\n * @param layer defines the layer model which is to be added\n * @param layerObject defines the object of the layer\n */\n Diagram.prototype.addLayer = function (layer, layerObject) {\n this.commandHandler.addLayer(layer, layerObject);\n };\n /**\n * remove the layer from diagram\n * @param layerId define the id of the layer\n */\n Diagram.prototype.removeLayer = function (layerId) {\n this.commandHandler.removeLayer(layerId);\n };\n /**\n * move objects from the layer to another layer from diagram\n * @param objects define the objects id of string array\n */\n Diagram.prototype.moveObjects = function (objects, targetLayer) {\n this.commandHandler.moveObjects(objects, targetLayer);\n };\n /**\n * move the layer backward\n * @param layerName define the name of the layer\n */\n Diagram.prototype.sendLayerBackward = function (layerName) {\n this.commandHandler.sendLayerBackward(layerName);\n };\n /**\n * move the layer forward\n * @param layerName define the name of the layer\n */\n Diagram.prototype.bringLayerForward = function (layerName) {\n this.commandHandler.bringLayerForward(layerName);\n };\n /**\n * clone a layer with its object\n * @param layerName define the name of the layer\n */\n Diagram.prototype.cloneLayer = function (layerName) {\n this.commandHandler.cloneLayer(layerName);\n };\n /**\n * bring the selected nodes or connectors to front\n */\n Diagram.prototype.bringToFront = function () {\n this.commandHandler.bringToFront();\n };\n /**\n * send the selected nodes or connectors forward\n */\n Diagram.prototype.moveForward = function () {\n this.commandHandler.sendForward();\n };\n /**\n * send the selected nodes or connectors back\n */\n Diagram.prototype.sendBackward = function () {\n this.commandHandler.sendBackward();\n };\n /**\n * gets the node or connector having the given name\n */\n Diagram.prototype.getObject = function (name) {\n return this.nameTable[name];\n };\n /**\n * gets the active layer back\n */\n Diagram.prototype.getActiveLayer = function () {\n return this.activeLayer;\n };\n Diagram.prototype.nudgeCommand = function (direction, x, y) {\n if (typeof direction !== 'object') {\n this.nudge(direction);\n }\n };\n /**\n * Moves the selected objects towards the given direction\n * @param direction Defines the direction by which the objects have to be moved\n * @param x Defines the distance by which the selected objects have to be horizontally moved\n * @param y Defines the distance by which the selected objects have to be vertically moved\n */\n Diagram.prototype.nudge = function (direction, x, y) {\n var tx = 0;\n var ty = 0;\n var negativeDirection;\n if (direction === 'Left' || direction === 'Right') {\n negativeDirection = (direction === 'Left');\n tx = (negativeDirection ? -1 : 1) * (x ? x : 1);\n }\n else {\n negativeDirection = (direction === 'Up');\n ty = (negativeDirection ? -1 : 1) * (y ? y : 1);\n }\n var obj = this.selectedItems;\n this.drag(obj, tx, ty);\n };\n /**\n * Drags the given object by the specified pixels\n * @param obj Defines the nodes/connectors to be dragged\n * @param tx Defines the distance by which the given objects have to be horizontally moved\n * @param ty Defines the distance by which the given objects have to be vertically moved\n */\n Diagram.prototype.drag = function (obj, tx, ty) {\n if (this.bpmnModule && (obj instanceof Node)) {\n var updated = this.bpmnModule.updateAnnotationDrag(obj, this, tx, ty);\n if (updated) {\n return;\n }\n }\n if (obj instanceof Selector) {\n this.preventConnectorsUpdate = true;\n if (obj.nodes && obj.nodes.length) {\n for (var _i = 0, _a = obj.nodes; _i < _a.length; _i++) {\n var node = _a[_i];\n this.drag(node, tx, ty);\n }\n }\n if (obj.connectors && obj.connectors.length) {\n for (var _b = 0, _c = obj.connectors; _b < _c.length; _b++) {\n var conn = _c[_b];\n this.drag(conn, tx, ty);\n if (this.selectionConnectorsList.indexOf(conn) === -1) {\n this.selectionConnectorsList.push(conn);\n }\n }\n }\n this.updateSelector();\n }\n else {\n if (obj instanceof Node) {\n if (this.bpmnModule) {\n this.bpmnModule.updateAnnotationDrag(obj, this, tx, ty);\n }\n }\n this.commandHandler.drag(obj, tx, ty);\n }\n if (obj instanceof Selector) {\n this.preventConnectorsUpdate = false;\n for (var _d = 0, _e = this.selectionConnectorsList; _d < _e.length; _d++) {\n var connectors = _e[_d];\n this.updateConnectorProperties(this.nameTable[connectors.id]);\n }\n this.selectionConnectorsList = [];\n }\n if (!(this.diagramActions & DiagramAction.ToolAction)) {\n this.updateSelector();\n }\n };\n /**\n * Scales the given objects by the given ratio\n * @param obj Defines the objects to be resized\n * @param sx Defines the ratio by which the objects have to be horizontally scaled\n * @param sy Defines the ratio by which the objects have to be vertically scaled\n * @param pivot Defines the reference point with respect to which the objects will be resized\n */\n Diagram.prototype.scale = function (obj, sx, sy, pivot) {\n var checkBoundaryConstraints = true;\n if (obj instanceof Selector) {\n if (obj.nodes && obj.nodes.length) {\n for (var _i = 0, _a = obj.nodes; _i < _a.length; _i++) {\n var node = _a[_i];\n checkBoundaryConstraints = this.commandHandler.scale(node, sx, sy, pivot, obj);\n }\n }\n if (obj.connectors && obj.connectors.length) {\n for (var _b = 0, _c = obj.connectors; _b < _c.length; _b++) {\n var conn = _c[_b];\n this.commandHandler.scale(conn, sx, sy, pivot, obj);\n }\n }\n this.updateSelector();\n }\n else {\n this.commandHandler.scale(obj, sx, sy, pivot, (obj.children ? obj : undefined));\n }\n return checkBoundaryConstraints;\n };\n /**\n * Rotates the given nodes/connectors by the given angle\n * @param obj Defines the objects to be rotated\n * @param angle Defines the angle by which the objects have to be rotated\n * @param pivot Defines the reference point with reference to which the objects have to be rotated\n */\n Diagram.prototype.rotate = function (obj, angle, pivot) {\n var checkBoundaryConstraints;\n if (obj) {\n pivot = pivot || { x: obj.wrapper.offsetX, y: obj.wrapper.offsetY };\n if (obj instanceof Selector) {\n obj.rotateAngle += angle;\n obj.wrapper.rotateAngle += angle;\n var bounds = getBounds(obj.wrapper);\n checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, bounds);\n if (!checkBoundaryConstraints) {\n obj.rotateAngle -= angle;\n obj.wrapper.rotateAngle -= angle;\n return checkBoundaryConstraints;\n }\n var objects = [];\n objects = objects.concat(obj.nodes);\n objects = objects.concat(obj.connectors);\n this.commandHandler.rotateObjects(obj, objects, angle, pivot);\n }\n else {\n this.commandHandler.rotateObjects(obj, [obj], angle, pivot);\n }\n }\n return checkBoundaryConstraints;\n };\n /**\n * Moves the source point of the given connector\n * @param obj Defines the connector, the end points of which has to be moved\n * @param tx Defines the distance by which the end point has to be horizontally moved\n * @param ty Defines the distance by which the end point has to be vertically moved\n */\n Diagram.prototype.dragSourceEnd = function (obj, tx, ty) {\n this.commandHandler.dragSourceEnd(obj, tx, ty);\n };\n /**\n * Moves the target point of the given connector\n * @param obj Defines the connector, the end points of which has to be moved\n * @param tx Defines the distance by which the end point has to be horizontally moved\n * @param ty Defines the distance by which the end point has to be vertically moved\n */\n Diagram.prototype.dragTargetEnd = function (obj, tx, ty) {\n this.commandHandler.dragTargetEnd(obj, tx, ty);\n };\n /**\n * Finds all the objects that is under the given mouse position\n * @param position Defines the position, the objects under which has to be found\n * @param source Defines the object, the objects under which has to be found\n */\n Diagram.prototype.findObjectsUnderMouse = function (position, source) {\n return this.eventHandler.findObjectsUnderMouse(position, source);\n };\n /**\n * Finds the object that is under the given mouse position\n * @param objects Defines the collection of objects, from which the object has to be found.\n * @param action Defines the action, using which the relevant object has to be found.\n * @param inAction Defines the active state of the action.\n */\n Diagram.prototype.findObjectUnderMouse = function (objects, action, inAction) {\n return this.eventHandler.findObjectUnderMouse(objects, action, inAction);\n };\n /**\n * Finds the object that is under the given active object (Source)\n * @param objects Defines the collection of objects, from which the object has to be found.\n * @param action Defines the action, using which the relevant object has to be found.\n * @param inAction Defines the active state of the action.\n */\n Diagram.prototype.findTargetObjectUnderMouse = function (objects, action, inAction, position, source) {\n return this.eventHandler.findTargetUnderMouse(objects, action, inAction, position, source);\n };\n /**\n * Finds the child element of the given object at the given position\n * @param obj Defines the object, the child element of which has to be found\n * @param position Defines the position, the child element under which has to be found\n */\n Diagram.prototype.findElementUnderMouse = function (obj, position) {\n return this.eventHandler.findElementUnderMouse(obj, position);\n };\n /**\n * Defines the action to be done, when the mouse hovers the given element of the given object\n * @param obj Defines the object under mouse\n * @param wrapper Defines the target element of the object under mouse\n * @param position Defines the current mouse position\n * @private\n */\n Diagram.prototype.findActionToBeDone = function (obj, wrapper, position, target) {\n return this.eventHandler.findActionToBeDone(obj, wrapper, position, target);\n };\n /**\n * Returns the tool that handles the given action\n * @param action Defines the action that is going to be performed\n */\n Diagram.prototype.getTool = function (action) {\n var tool;\n var getCustomTool = getFunction(this.getCustomTool);\n if (getCustomTool) {\n tool = getCustomTool(action);\n if (tool) {\n return tool;\n }\n }\n return this.eventHandler.getTool(action);\n };\n /**\n * Defines the cursor that corresponds to the given action\n * @param action Defines the action that is going to be performed\n */\n Diagram.prototype.getCursor = function (action, active) {\n var cursor;\n var getCustomCursor = getFunction(this.getCustomCursor);\n if (getCustomCursor) {\n cursor = getCustomCursor(action, active);\n if (cursor) {\n return cursor;\n }\n }\n return this.eventHandler.getCursor(action);\n };\n /**\n * Initializes the undo redo actions\n * @private\n */\n Diagram.prototype.initHistory = function () {\n if (this.undoRedoModule) {\n this.undoRedoModule.initHistory(this);\n }\n };\n /**\n * Adds the given change in the diagram control to the track\n * @param entry Defines the entry/information about a change in diagram\n */\n Diagram.prototype.addHistoryEntry = function (entry) {\n if (this.undoRedoModule && (this.constraints & DiagramConstraints.UndoRedo) && !this.currentSymbol) {\n this.undoRedoModule.addHistoryEntry(entry, this);\n if (entry.type !== 'StartGroup' && entry.type !== 'EndGroup') {\n this.historyChangeTrigger(entry);\n }\n }\n };\n /** @private */\n Diagram.prototype.historyChangeTrigger = function (entry) {\n var change = {};\n var oldValue = 'oldValue';\n var newValue = 'newValue';\n var type = 'type';\n var source = [];\n if (entry && entry.redoObject && ((entry.redoObject.nodes) instanceof Array) &&\n ((entry.redoObject.connectors) instanceof Array)) {\n source = entry.redoObject.nodes.concat(entry.redoObject.connectors);\n }\n else {\n if (entry.redoObject) {\n source.push(entry.redoObject);\n }\n }\n change[type] = entry.type;\n switch (entry.type) {\n case 'PositionChanged':\n change[oldValue] = { offsetX: entry.undoObject.offsetX, offsetY: entry.undoObject.offsetY };\n change[newValue] = { offsetX: entry.redoObject.offsetX, offsetY: entry.redoObject.offsetY };\n break;\n case 'RotationChanged':\n change[oldValue] = { rotateAngle: entry.undoObject.rotateAngle };\n change[newValue] = { rotateAngle: entry.redoObject.rotateAngle };\n break;\n case 'SizeChanged':\n change[oldValue] = {\n offsetX: entry.undoObject.offsetX, offsetY: entry.undoObject.offsetY,\n width: entry.undoObject.width, height: entry.undoObject.height\n };\n change[newValue] = {\n offsetX: entry.redoObject.offsetX, offsetY: entry.redoObject.offsetY,\n width: entry.redoObject.width, height: entry.redoObject.height\n };\n break;\n case 'CollectionChanged':\n change[entry.changeType] = source;\n break;\n case 'ConnectionChanged':\n change[oldValue] = { offsetX: entry.undoObject.offsetX, offsetY: entry.undoObject.offsetY };\n change[newValue] = { offsetX: entry.redoObject.offsetX, offsetY: entry.redoObject.offsetY };\n break;\n }\n var arg = {\n cause: entry.category, source: source, change: change\n };\n if (source.length) {\n this.triggerEvent(DiagramEvent.historyChange, arg);\n }\n };\n /**\n * Starts grouping the actions that will be undone/restored as a whole\n */\n Diagram.prototype.startGroupAction = function () {\n var entry = { type: 'StartGroup', category: 'Internal' };\n this.addHistoryEntry(entry);\n };\n /**\n * Closes grouping the actions that will be undone/restored as a whole\n */\n Diagram.prototype.endGroupAction = function () {\n var entry = { type: 'EndGroup', category: 'Internal' };\n this.addHistoryEntry(entry);\n };\n /**\n * Restores the last action that is performed\n */\n Diagram.prototype.undo = function () {\n if (this.undoRedoModule && (this.constraints & DiagramConstraints.UndoRedo)) {\n this.undoRedoModule.undo(this);\n }\n };\n /**\n * Restores the last undone action\n */\n Diagram.prototype.redo = function () {\n if (this.undoRedoModule && (this.constraints & DiagramConstraints.UndoRedo)) {\n this.undoRedoModule.redo(this);\n }\n };\n /**\n * Aligns the group of objects to with reference to the first object in the group\n * @param objects Defines the objects that have to be aligned\n * @param option Defines the factor, by which the objects have to be aligned\n */\n Diagram.prototype.align = function (option, objects, type) {\n if (!objects) {\n objects = [];\n objects = objects.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n }\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n this.commandHandler.align(objects, option, (type ? type : 'Object'));\n };\n /**\n * Arranges the group of objects with equal intervals, but within the group of objects\n * @param objects Defines the objects that have to be equally spaced\n * @param option Defines the factor to distribute the shapes\n */\n Diagram.prototype.distribute = function (option, objects) {\n if (!objects) {\n objects = [];\n objects = objects.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n }\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n this.commandHandler.distribute(objects, option);\n };\n /**\n * Scales the given objects to the size of the first object in the group\n * @param objects Defines the collection of objects that have to be scaled\n * @param option Defines whether the node has to be horizontally scaled, vertically scaled or both\n */\n Diagram.prototype.sameSize = function (option, objects) {\n if (!objects) {\n objects = [];\n objects = objects.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n }\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n this.commandHandler.sameSize(objects, option);\n };\n /**\n * Scales the diagram control by the given factor\n * @param factor Defines the factor by which the diagram is zoomed\n * @param focusedPoint Defines the point with respect to which the diagram has to be zoomed\n */\n Diagram.prototype.zoom = function (factor, focusedPoint) {\n this.scroller.zoom(factor, 0, 0, focusedPoint);\n };\n /**\n * Scales the diagram control by the given factor\n * @param options used to define the zoom factor, focus point and zoom type.\n *\n */\n Diagram.prototype.zoomTo = function (options) {\n var factor = options.zoomFactor ? options.zoomFactor : 0.2;\n factor = options.type === 'ZoomOut' ? 1 / (1 + factor) : (1 + factor);\n this.scroller.zoom(factor, 0, 0, options.focusPoint);\n };\n /**\n * Pans the diagram control to the given horizontal and vertical offsets\n * @param horizontalOffset Defines the horizontal distance to which the diagram has to be scrolled\n * @param verticalOffset Defines the vertical distance to which the diagram has to be scrolled\n */\n Diagram.prototype.pan = function (horizontalOffset, verticalOffset, focusedPoint) {\n this.scroller.zoom(1, horizontalOffset, verticalOffset, focusedPoint);\n };\n /**\n * Resets the zoom and scroller offsets to default values\n */\n Diagram.prototype.reset = function () {\n this.scroller.zoom(1 / this.scroller.currentZoom, -this.scroller.horizontalOffset, -this.scroller.verticalOffset, { x: 0, y: 0 });\n };\n /** @private */\n Diagram.prototype.triggerEvent = function (eventName, args) {\n if (args) {\n this.updateEventValue(args);\n }\n this.trigger(DiagramEvent[eventName], args);\n };\n Diagram.prototype.updateEventValue = function (args) {\n var element = args.element;\n if (args.element && element instanceof Selector && (element.nodes.length + element.connectors.length === 1)) {\n args.element = (element.nodes.length === 1) ? element.nodes[0] : element.connectors[0];\n }\n };\n /**\n * Adds the given object to diagram control\n * @param obj Defines the object that has to be added to diagram\n */\n Diagram.prototype.add = function (obj, group) {\n var newObj;\n if (obj) {\n obj = cloneObject(obj);\n var args = {\n element: obj, cause: this.diagramActions, state: 'Changing', type: 'Addition', cancel: false\n };\n this.triggerEvent(DiagramEvent.collectionChange, args);\n var activeLayer = void 0;\n obj.id = obj.id || randomId();\n var layers = this.activeLayer;\n if (!args.cancel && !layers.lock) {\n if (layers.objects.indexOf(obj.id) < 0 && !layers.lock) {\n if (!layers.visible) {\n layers.visible = true;\n this.dataBind();\n }\n layers.objects.push(obj.id);\n }\n if (getObjectType(obj) === Connector) {\n newObj = new Connector(this, 'connectors', obj, true);\n this.connectors.push(newObj);\n this.initObject(newObj);\n if (obj.visible === false) {\n this.updateElementVisibility(newObj.wrapper, newObj, obj.visible);\n }\n this.updateEdges(newObj);\n }\n else {\n newObj = new Node(this, 'nodes', obj, true);\n // newObj.processId = (obj as Node).processId;\n this.nodes.push(newObj);\n this.initObject(newObj, layers, undefined, group);\n if (this.bpmnModule) {\n if (newObj.shape.annotations && newObj.shape.annotations.length !== 0) {\n for (var _i = 0, _a = this.bpmnModule.getTextAnnotationConn(newObj); _i < _a.length; _i++) {\n var obj_1 = _a[_i];\n this.initConnectors(obj_1, layers, false);\n }\n }\n if (newObj.shape.activity && newObj.shape.activity.subProcess.processes &&\n newObj.shape.activity.subProcess.processes.length) {\n this.bpmnModule.updateDocks(newObj, this);\n }\n }\n }\n args = {\n element: newObj, cause: this.diagramActions, state: 'Changed', type: 'Addition', cancel: false\n };\n this.triggerEvent(DiagramEvent.collectionChange, args);\n if (!(this.diagramActions & DiagramAction.UndoRedo) && !(this.diagramActions & DiagramAction.Group)) {\n var entry = {\n type: 'CollectionChanged', changeType: 'Insert', undoObject: cloneObject(obj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n if (this.mode === 'SVG') {\n this.updateSvgNodes(newObj);\n this.updateDiagramObject(newObj);\n if (newObj.shape.activity && newObj.shape.activity.subProcess.processes &&\n newObj.shape.activity.subProcess.processes.length) {\n this.updateProcesses(newObj);\n }\n this.updateBridging();\n }\n }\n }\n this.resetDiagramActions(DiagramAction.PublicMethod);\n return newObj;\n };\n Diagram.prototype.updateSvgNodes = function (node) {\n if (node.children) {\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n var j = _a[_i];\n if (this.nameTable[j] && this.nameTable[j].parentId) {\n var child = getDiagramElement(j + '_groupElement', this.element.id);\n child.parentNode.removeChild(child);\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.updateProcesses = function (node) {\n if (this.bpmnModule && node && node.shape && node.shape.activity &&\n node.shape.activity.subProcess.processes &&\n node.shape.activity.subProcess.processes.length) {\n var processes = node.shape.activity.subProcess.processes;\n this.moveSvgNode(node.id);\n for (var _i = 0, processes_1 = processes; _i < processes_1.length; _i++) {\n var j = processes_1[_i];\n this.moveSvgNode(j);\n var edges = [];\n edges = edges.concat(this.nameTable[j].outEdges, this.nameTable[j].inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n this.moveSvgNode(edges[i]);\n }\n }\n for (var _a = 0, processes_2 = processes; _a < processes_2.length; _a++) {\n var j = processes_2[_a];\n if (this.nameTable[j].shape.activity.subProcess.processes &&\n this.nameTable[j].shape.activity.subProcess.processes.length) {\n this.updateProcesses(this.nameTable[j]);\n }\n }\n }\n else {\n this.moveSvgNode(node.id);\n }\n };\n /** @private */\n Diagram.prototype.moveSvgNode = function (nodeId) {\n var child = getDiagramElement(nodeId + '_groupElement', this.element.id);\n var parent = child.parentElement;\n child.parentNode.removeChild(child);\n parent.appendChild(child);\n };\n /**\n * Adds the given annotation to the given node\n * @param annotation Defines the annotation to be added\n * @param node Defines the node to which the annotation has to be added\n */\n Diagram.prototype.addTextAnnotation = function (annotation, node) {\n if (this.bpmnModule) {\n var connector = this.bpmnModule.addAnnotation(node, annotation, this);\n this.initConnectors(connector, this.commandHandler.getObjectLayer(node.id), false);\n this.updateDiagramObject(node);\n if (!(this.diagramActions & DiagramAction.UndoRedo) && !(this.diagramActions & DiagramAction.Group)) {\n var entry = {\n type: 'CollectionChanged', changeType: 'Insert', undoObject: cloneObject(annotation),\n redoObject: cloneObject(annotation), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n }\n };\n /**\n * Splice the InEdge and OutEdge of the for the node with respect to corresponding connectors that is deleting\n */\n Diagram.prototype.spliceConnectorEdges = function (connector, isSource) {\n var node;\n var edges = [];\n node = isSource ? this.nameTable[connector.sourceID] : this.nameTable[connector.targetID];\n if (node) {\n edges = isSource ? node.outEdges : node.inEdges;\n for (var i = edges.length - 1; i >= 0; i--) {\n if (edges[i] === connector.id) {\n edges.splice(i, 1);\n }\n }\n }\n };\n /**\n * Remove the dependent connectors if the node is deleted\n * @private\n */\n Diagram.prototype.removeDependentConnector = function (node) {\n var connector;\n var edges = [];\n edges = edges.concat(node.outEdges, node.inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n connector = this.nameTable[edges[i]];\n if (connector) {\n this.connectorTable[connector.id] = cloneObject(connector);\n this.remove(connector);\n }\n }\n };\n Diagram.prototype.removeObjectsFromLayer = function (obj) {\n var layer = this.layers.indexOf(this.commandHandler.getObjectLayer(obj.id));\n var objects = this.layers[layer].objects;\n var objIndex = objects.indexOf(obj.id);\n if (objIndex > -1) {\n if (isSelected(this, obj)) {\n this.unSelect(obj);\n }\n this.layers[layer].objects.splice(objIndex, 1);\n delete this.layers[layer].zIndexTable[this.nameTable[obj.id].zIndex];\n }\n };\n Diagram.prototype.removeElements = function (currentObj) {\n if (this.mode === 'SVG' || (this.mode === 'Canvas' && currentObj.shape.type === 'Native')) {\n var removeElement_1 = getDiagramElement(currentObj.id + '_groupElement', this.element.id);\n if (removeElement_1) {\n removeElement_1.parentNode.removeChild(removeElement_1);\n }\n }\n this.refreshCanvasLayers();\n var children = currentObj.wrapper.children;\n var element;\n var view;\n for (var i = 0; i < children.length; i++) {\n if (children[i] instanceof DiagramNativeElement || ((children[i].id) && (children[i].id).indexOf('icon_content') > 0)) {\n if ((children[i].id).indexOf('icon_content') > 0) {\n element = getDiagramElement(children[i].id + '_shape_groupElement', this.element.id);\n element.parentNode.removeChild(element);\n element = getDiagramElement(children[i].id + '_rect_groupElement', this.element.id);\n element.parentNode.removeChild(element);\n }\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var elementId = _a[_i];\n removeElement(children[i].id + '_groupElement', elementId);\n }\n }\n else if (children[i] instanceof DiagramHtmlElement) {\n for (var _b = 0, _c = this.views; _b < _c.length; _b++) {\n var elementId = _c[_b];\n removeElement(children[i].id + '_html_element', elementId);\n }\n }\n }\n };\n Diagram.prototype.removeCommand = function () {\n this.remove();\n };\n /**\n * Removes the given object from diagram\n * @param obj Defines the object that has to be removed from diagram\n */\n /* tslint:disable */\n Diagram.prototype.remove = function (obj) {\n var selectedItems = [];\n selectedItems = selectedItems.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n var args;\n var groupAction = false;\n if (obj) {\n obj = this.nameTable[obj.id];\n if (obj && (canDelete(obj) || (this.diagramActions & DiagramAction.Clear))) {\n args = {\n element: obj, cause: this.diagramActions,\n state: 'Changing', type: 'Removal', cancel: false\n };\n if (!(this.diagramActions & DiagramAction.Clear)) {\n this.triggerEvent(DiagramEvent.collectionChange, args);\n }\n if (!args.cancel) {\n if (this.bpmnModule) {\n if (this.bpmnModule.checkAndRemoveAnnotations(obj, this)) {\n this.refreshCanvasLayers();\n return;\n }\n }\n if ((!(this.diagramActions & DiagramAction.UndoRedo)) &&\n (obj instanceof Node || obj instanceof Connector)) {\n var entry = {\n type: 'CollectionChanged', changeType: 'Remove', undoObject: cloneObject(obj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n if (!(this.diagramActions & DiagramAction.Clear)) {\n if (selectedItems.length > 0 && this.undoRedoModule && !this.layout.type) {\n this.historyList.startGroupAction();\n groupAction = true;\n }\n }\n if (obj instanceof Node) {\n this.removeDependentConnector(obj);\n }\n if (!(this.diagramActions & DiagramAction.Clear)) {\n this.addHistoryEntry(entry);\n }\n }\n if (obj.children) {\n this.deleteGroup(obj);\n }\n if (obj.parentId) {\n this.deleteChild(obj);\n }\n var index = void 0;\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n var currentObj = this.nameTable[obj.id];\n if (currentObj instanceof Node) {\n if (currentObj.shape.type === 'Bpmn' && this.bpmnModule) {\n this.bpmnModule.removeBpmnProcesses(currentObj, this);\n }\n index = this.nodes.indexOf(currentObj);\n if (index !== -1) {\n this.nodes.splice(index, 1);\n this.updateNodeEdges(currentObj);\n }\n }\n else {\n index = this.connectors.indexOf(currentObj);\n if (index !== -1) {\n this.connectors.splice(index, 1);\n }\n this.updateEdges(currentObj);\n this.spliceConnectorEdges(obj, true);\n this.spliceConnectorEdges(obj, false);\n }\n if (groupAction) {\n this.historyList.endGroupAction();\n }\n if (isSelected(this, currentObj)) {\n this.unSelect(currentObj);\n }\n this.removeObjectsFromLayer(obj);\n if (this.currentDrawingObject) {\n this.currentDrawingObject.wrapper = undefined;\n }\n delete this.nameTable[obj.id];\n this.removeElements(currentObj);\n this.updateBridging();\n if (this.mode !== 'SVG') {\n this.refreshDiagramLayer();\n }\n if (!(this.diagramActions & DiagramAction.Clear)) {\n this.removeFromAQuad(currentObj);\n args = {\n element: obj, cause: this.diagramActions,\n state: 'Changed', type: 'Removal', cancel: false\n };\n this.triggerEvent(DiagramEvent.collectionChange, args);\n this.resetTool();\n }\n }\n }\n }\n else if (selectedItems.length > 0) {\n if (this.undoRedoModule) {\n this.historyList.startGroupAction();\n groupAction = true;\n }\n for (var i = 0; i < selectedItems.length; i++) {\n var node = selectedItems[i];\n if (this.nameTable[selectedItems[i].id]) {\n if ((selectedItems[i] instanceof Connector) && this.bpmnModule &&\n this.bpmnModule.textAnnotationConnectors.indexOf(selectedItems[i]) > -1) {\n this.remove(this.nameTable[selectedItems[i].targetID]);\n return;\n }\n this.remove(selectedItems[i]);\n }\n }\n if (groupAction) {\n this.historyList.endGroupAction();\n }\n this.clearSelection();\n }\n };\n /* tslint:enable */\n /** @private */\n Diagram.prototype.deleteChild = function (node, parentNode) {\n var id;\n parentNode = parentNode ? this.nameTable[parentNode.id] : this.nameTable[node.parentId];\n if (typeof node === 'string') {\n id = node;\n }\n else {\n id = node.id;\n }\n if (parentNode && parentNode.children) {\n for (var i = 0; i < parentNode.children.length; i++) {\n if (parentNode.children[i] === id) {\n parentNode.children.splice(i, 1);\n parentNode.wrapper.children.splice(i, 1);\n }\n }\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n }\n };\n /** @private */\n Diagram.prototype.addChild = function (node, child) {\n var id;\n var parentNode = this.nameTable[node.id];\n if (parentNode.children) {\n if (typeof child === 'string') {\n if (this.nameTable[child]) {\n id = child;\n }\n }\n else {\n id = child.id = child.id || randomId();\n this.add(child);\n }\n if (id) {\n var childNode = this.nameTable[id];\n childNode.parentId = parentNode.id;\n parentNode.children.push(id);\n parentNode.wrapper.children.push(this.nameTable[id].wrapper);\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n }\n }\n };\n /**\n * Clears all nodes and objects in the diagram\n */\n Diagram.prototype.clear = function () {\n this.clearObjects();\n };\n Diagram.prototype.clearObjects = function (collection) {\n var objects = [];\n if (!collection) {\n objects = objects.concat(this.nodes);\n objects = objects.concat(this.connectors);\n }\n else {\n objects = collection;\n }\n this.diagramActions = this.diagramActions | DiagramAction.Clear;\n for (var _i = 0, objects_1 = objects; _i < objects_1.length; _i++) {\n var obj = objects_1[_i];\n if (this.nameTable[obj.id]) {\n this.remove(obj);\n }\n }\n this.diagramActions = this.diagramActions & ~DiagramAction.Clear;\n this.spatialSearch = new SpatialSearch(this.nameTable);\n this.initHistory();\n };\n Diagram.prototype.startEditCommad = function () {\n this.startTextEdit();\n };\n /**\n * Specified annotation to edit mode\n * @param node Defines node/connector that contains the annotation to be edited\n * @param id Defines annotation id to be edited in the node\n */\n Diagram.prototype.startTextEdit = function (node, id) {\n if (!canZoomPan(this) || canSingleSelect(this)) {\n this.textEditing = true;\n var transform = this.scroller.transform;\n var scale = canZoomTextEdit(this) ? transform.scale : 1;\n var minWidth = 90;\n var text = void 0;\n var bounds = void 0;\n var attributes = void 0;\n var x = void 0;\n var y = void 0;\n var textWrapper = void 0;\n if (!node) {\n node = (this.selectedItems.nodes[0]) ? this.selectedItems.nodes[0] : this.selectedItems.connectors[0];\n }\n if (node) {\n var bpmnAnnotation = false;\n if (this.bpmnModule) {\n textWrapper = this.bpmnModule.getTextAnnotationWrapper(node, id);\n if (textWrapper) {\n node = this.nameTable[node.id.split('_textannotation_')[0]];\n }\n }\n if (!textWrapper) {\n if (node.shape.type !== 'Text' && node.annotations.length === 0) {\n this.activeLabel.isGroup = true;\n this.startGroupAction();\n this.addLabels(node, [{ id: randomId(), content: '' }]);\n }\n if (!id && ((node.shape.type !== 'Text' && node.annotations.length > 0) || (node.shape.type === 'Text'))) {\n id = (node.shape.type === 'Text') ? (node.wrapper.children[0].id).split('_')[1] : node.annotations[0].id;\n }\n if (id) {\n textWrapper = this.getWrapper(node.wrapper, id);\n }\n }\n else {\n bpmnAnnotation = true;\n }\n if (node && textWrapper &&\n (!enableReadOnly(textWrapper, node) || bpmnAnnotation)) {\n var style = (textWrapper.style);\n var maxWidth = void 0;\n maxWidth = textWrapper.bounds.width < node.wrapper.bounds.width ? textWrapper.bounds.width : node.wrapper.bounds.width;\n maxWidth = minWidth > maxWidth ? minWidth : maxWidth;\n var textEditing = document.getElementById(this.element.id + '_editTextBoxDiv');\n var textArea = document.getElementById(this.element.id + '_editBox');\n text = textArea ? textArea.value : textWrapper.content;\n if (!textEditing && !textArea) {\n textEditing = createHtmlElement('div', {});\n textArea = createHtmlElement('textarea', {});\n this.diagramCanvas.appendChild(textEditing);\n textEditing.appendChild(textArea);\n textArea.appendChild(document.createTextNode(text));\n }\n bounds = measureHtmlText(textWrapper.style, text, undefined, undefined, maxWidth);\n if (bounds.isEmpty()) {\n if (node.shape.type !== 'Text') {\n bounds = new Size(findAnnotation(node, (textWrapper.id).split(node.id + '_')[1]).width || 50, textWrapper.style.fontSize);\n }\n else {\n bounds = new Size((node.width > 50) ? 50 : node.width, textWrapper.style.fontSize);\n }\n }\n bounds.width = Math.max(bounds.width, 50);\n x = ((((textWrapper.bounds.center.x + transform.tx) * transform.scale) - (bounds.width / 2) * scale) - 2.5);\n y = ((((textWrapper.bounds.center.y + transform.ty) * transform.scale) - (bounds.height / 2) * scale) - 3);\n attributes = {\n 'id': this.element.id + '_editTextBoxDiv', 'style': 'position: absolute' + ';left:' + x + 'px;top:' +\n y + 'px;width:' + ((bounds.width + 1) * scale) + 'px;height:' + (bounds.height * scale) +\n 'px; containerName:' + node.id + ';'\n };\n setAttributeHtml(textEditing, attributes);\n attributes = {\n 'id': this.element.id + '_editBox', 'style': 'width:' + ((bounds.width + 1) * scale) +\n 'px;height:' + (bounds.height * scale) + 'px;resize: none;outline: none;overflow: hidden;' +\n ';font-family:' + style.fontFamily +\n ';font-size:' + (style.fontSize * scale) + 'px;text-align:' +\n (textWrapper.style.textAlign.toLocaleLowerCase()) + ';', 'class': 'e-diagram-text-edit'\n };\n setAttributeHtml(textArea, attributes);\n textArea.style.fontWeight = (style.bold) ? 'bold' : '';\n textArea.style.fontStyle = (style.italic) ? 'italic' : '';\n textArea.style.lineHeight = (style.fontSize * 1.2 + 'px;').toString();\n textArea.style.textDecoration = (style.textDecoration) ? style.textDecoration : '';\n this.activeLabel.parentId = node.id;\n this.activeLabel.id = id;\n textWrapper.visible = false;\n this.updateDiagramObject(node);\n this.diagramActions = this.diagramActions | DiagramAction.TextEdit;\n if (!this.isTriggerEvent) {\n EventHandler.add(textArea, 'input', this.eventHandler.inputChange, this.eventHandler);\n EventHandler.add(textArea, 'focusout', this.focusOutEdit, this);\n textArea.select();\n }\n }\n }\n }\n };\n Diagram.prototype.updateNodeExpand = function (node, visibility) {\n for (var i = 0; i < node.outEdges.length; i++) {\n var connector = this.nameTable[node.outEdges[i]];\n var target = this.nameTable[connector.targetID];\n connector.visible = visibility;\n if (!visibility) {\n this.updateElementVisibility(connector.wrapper, connector, false);\n target.isExpanded = visibility;\n }\n this.updateNodeExpand(target, target.isExpanded);\n target.visible = visibility;\n if (!visibility) {\n this.updateElementVisibility(target.wrapper, target, false);\n }\n }\n };\n /**\n * Automatically updates the diagram objects based on the type of the layout\n */\n Diagram.prototype.doLayout = function () {\n var update = false;\n var layout;\n var propChange = this.isProtectedOnChange;\n this.protectPropertyChange(true);\n var viewPort = { x: this.scroller.viewPortWidth, y: this.scroller.viewPortHeight };\n if (this.organizationalChartModule) {\n layout = this.organizationalChartModule.updateLayout(this.nodes, this.nameTable, this.layout, viewPort, this.dataSourceSettings.id);\n update = true;\n if (this.layoutAnimateModule && layout.rootNode && !this.diagramActions) {\n this.updateNodeExpand(layout.rootNode, layout.rootNode.isExpanded);\n }\n }\n else if (this.mindMapChartModule) {\n this.mindMapChartModule.updateLayout(this.nodes, this.nameTable, this.layout, viewPort, this.dataSourceSettings.id, this.dataSourceSettings.root);\n update = true;\n }\n else if (this.radialTreeModule) {\n this.radialTreeModule.updateLayout(this.nodes, this.nameTable, this.layout, viewPort);\n update = true;\n }\n else if (this.symmetricalLayoutModule) {\n this.symmetricalLayoutModule.maxIteration = this.layout.maxIteration;\n this.symmetricalLayoutModule.springLength = this.layout.springLength;\n this.symmetricalLayoutModule.springFactor = this.layout.springFactor;\n this.symmetricalLayoutModule.updateLayout(this.nodes, this.connectors, this.symmetricalLayoutModule, this.nameTable, this.layout, viewPort);\n update = true;\n }\n else if (this.complexHierarchicalTreeModule) {\n this.complexHierarchicalTreeModule.doLayout(this.nodes, this.nameTable, this.layout, viewPort);\n update = true;\n }\n if (update) {\n this.preventUpdate = true;\n var connectors = {};\n for (var _i = 0, _a = this.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n var node = obj;\n if (!this.preventNodesUpdate) {\n this.updateIcon(node);\n this.updateDefaultLayoutIcons(node);\n }\n this.nodePropertyChange(node, {}, { offsetX: node.offsetX, offsetY: node.offsetY }, true);\n node.wrapper.measure(new Size(node.wrapper.width, node.wrapper.height));\n node.wrapper.arrange(node.wrapper.desiredSize);\n if (node.inEdges.length > 0) {\n for (var j = 0; j < node.inEdges.length; j++) {\n var connector = this.nameTable[node.inEdges[j]];\n connectors[connector.id] = connector;\n }\n }\n if (node.outEdges.length > 0) {\n for (var k = 0; k < node.outEdges.length; k++) {\n var connection = this.nameTable[node.outEdges[k]];\n connectors[connection.id] = connection;\n }\n }\n }\n for (var _b = 0, _c = Object.keys(connectors); _b < _c.length; _b++) {\n var conn = _c[_b];\n var connector = connectors[conn];\n var points = this.getPoints(connector);\n updateConnector(connector, points);\n connector.wrapper.measure(new Size(undefined, undefined));\n connector.wrapper.arrange(connector.wrapper.desiredSize);\n this.updateQuad(connector);\n this.updateDiagramObject(connector);\n }\n this.preventUpdate = false;\n this.updatePage();\n if ((!(this.diagramActions & DiagramAction.Render)) || this.mode === 'Canvas') {\n this.refreshDiagramLayer();\n }\n }\n if (!propChange) {\n this.protectPropertyChange(propChange);\n }\n return layout;\n };\n /**\n * Serializes the diagram control as a string\n */\n Diagram.prototype.saveDiagram = function () {\n return serialize(this);\n };\n /**\n * Converts the given string as a Diagram Control\n * @param data Defines the behavior of the diagram to be loaded\n */\n Diagram.prototype.loadDiagram = function (data) {\n return deserialize(data, this);\n };\n /**\n * To export Diagram\n * @param options defines the how the image to be exported.\n */\n Diagram.prototype.exportDiagram = function (options) {\n if (this.printandExportModule) {\n var data = this.printandExportModule.exportDiagram(options);\n return data;\n }\n return '';\n };\n /**\n * To print Diagram\n * @param optons defines how the image to be printed.\n */\n Diagram.prototype.print = function (options) {\n if (this.printandExportModule) {\n this.printandExportModule.print(options);\n }\n };\n /**\n * Add ports at the run time\n */\n Diagram.prototype.addPorts = function (obj, ports) {\n this.protectPropertyChange(true);\n var newObj;\n if (ports.length > 1) {\n this.startGroupAction();\n }\n for (var i = 0; i < ports.length; i++) {\n newObj = new PointPort(obj, 'ports', ports[i], true);\n obj.ports.push(newObj);\n if (obj.children) {\n var container = obj.wrapper;\n obj.initPorts(this.getDescription, obj.wrapper.children[container.children.length - 1]);\n }\n else {\n var canvas = obj.wrapper;\n canvas.children.push(obj.initPortWrapper(obj.ports[obj.ports.length - 1]));\n }\n if (!(this.diagramActions & DiagramAction.UndoRedo) && !(this.diagramActions & DiagramAction.Group)) {\n var entry = {\n type: 'PortCollectionChanged', changeType: 'Insert', undoObject: cloneObject(newObj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n }\n if (ports.length > 1) {\n this.endGroupAction();\n }\n obj.wrapper.measure(new Size(obj.width, obj.height));\n obj.wrapper.arrange(obj.wrapper.desiredSize);\n this.updateDiagramObject(obj);\n this.protectPropertyChange(false);\n };\n /**\n * Add Labels at the run time\n */\n Diagram.prototype.addLabels = function (obj, labels) {\n this.protectPropertyChange(true);\n var canvas = obj.wrapper;\n var newObj;\n if (labels.length > 1) {\n this.startGroupAction();\n }\n for (var i = 0; i < labels.length; i++) {\n if (obj instanceof Node) {\n newObj = new ShapeAnnotation(obj, 'annotations', labels[i], true);\n obj.annotations.push(newObj);\n if (obj.children) {\n var node = obj;\n for (var i_1 = 0; i_1 < node.wrapper.children.length; i_1++) {\n if (node.wrapper.children[i_1].id === 'group_container') {\n var container = node.wrapper.children[i_1];\n container.children.push(obj.initAnnotationWrapper(obj.annotations[obj.annotations.length - 1]));\n }\n }\n }\n else {\n canvas.children.push(obj.initAnnotationWrapper(obj.annotations[obj.annotations.length - 1]));\n }\n }\n else if (obj instanceof Connector) {\n newObj = new PathAnnotation(obj, 'annotations', labels[i], true);\n obj.annotations.push(newObj);\n var segment = canvas.children[0];\n var bounds = new Rect(segment.offsetX - segment.width / 2, segment.offsetY - segment.height / 2, segment.width, segment.height);\n canvas.children.push(obj.getAnnotationElement(obj.annotations[obj.annotations.length - 1], obj.intermediatePoints, bounds, this.getDescription));\n }\n if (!(this.diagramActions & DiagramAction.UndoRedo) && !(this.diagramActions & DiagramAction.Group)) {\n var entry = {\n type: 'LabelCollectionChanged', changeType: 'Insert', undoObject: cloneObject(newObj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n }\n if (labels.length > 1) {\n this.endGroupAction();\n }\n obj.wrapper.measure(new Size(canvas.width, canvas.height));\n obj.wrapper.arrange(canvas.desiredSize);\n this.updateDiagramObject(obj);\n this.protectPropertyChange(false);\n };\n Diagram.prototype.removelabelExtension = function (obj, labels, j, wrapper) {\n for (var i = 0; i < wrapper.children.length; i++) {\n var canvas = wrapper.children[i];\n if (canvas instanceof TextElement) {\n if (canvas.id.match('_' + labels[j].id + '$')) {\n for (var k = 0; k < obj.annotations.length; k++) {\n if (canvas.id.match('_' + obj.annotations[k].id + '$')) {\n if (!(this.diagramActions & DiagramAction.UndoRedo)) {\n var entry = {\n type: 'LabelCollectionChanged', changeType: 'Remove', undoObject: cloneObject(obj.annotations[k]),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n obj.annotations.splice(k, 1);\n }\n }\n wrapper.children.splice(i, 1);\n if (this.mode === 'SVG') {\n var element = getDiagramElement(canvas.id, this.element.id);\n if (element) {\n var element_1 = getDiagramElement(canvas.id, this.element.id);\n element_1.parentNode.removeChild(element_1);\n }\n var textElement = getDiagramElement(canvas.id + '_text', this.element.id);\n if (textElement) {\n element = getDiagramElement(canvas.id + '_text', this.element.id);\n element.parentNode.removeChild(element);\n }\n }\n else {\n this.refreshCanvasLayers();\n }\n }\n }\n }\n };\n /**\n * Remove Labels at the run time\n */\n Diagram.prototype.removeLabels = function (obj, labels) {\n if (labels.length > 1) {\n this.startGroupAction();\n }\n for (var j = labels.length - 1; j >= 0; j--) {\n if (obj.children && obj.children.length > 0) {\n for (var k = 0; k < obj.wrapper.children.length; k++) {\n this.removelabelExtension(obj, labels, j, obj.wrapper.children[k]);\n }\n }\n else {\n this.removelabelExtension(obj, labels, j, obj.wrapper);\n }\n }\n if (labels.length > 1) {\n this.endGroupAction();\n }\n };\n Diagram.prototype.removePortsExtenion = function (obj, ports, j, wrapper) {\n for (var i = 0; i < wrapper.children.length; i++) {\n var canvas = wrapper.children[i];\n if (canvas instanceof PathElement) {\n if (canvas.id.match('_' + ports[j].id + '$')) {\n for (var k = 0; k < obj.ports.length; k++) {\n if (canvas.id.match('_' + obj.ports[k].id + '$')) {\n if (!(this.diagramActions & DiagramAction.UndoRedo)) {\n var entry = {\n type: 'PortCollectionChanged', changeType: 'Remove', undoObject: cloneObject(obj.ports[k]),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n obj.ports.splice(k, 1);\n }\n }\n wrapper.children.splice(i, 1);\n if (this.mode === 'SVG') {\n var element = getDiagramElement(canvas.id, this.element.id);\n element.parentNode.removeChild(element);\n }\n else {\n this.refreshCanvasLayers();\n }\n }\n }\n }\n };\n /**\n * Remove Ports at the run time\n */\n Diagram.prototype.removePorts = function (obj, ports) {\n if (ports.length > 1) {\n this.startGroupAction();\n }\n for (var j = ports.length - 1; j >= 0; j--) {\n if (obj.children && obj.children.length > 0) {\n for (var k = 0; k < obj.wrapper.children.length; k++) {\n this.removePortsExtenion(obj, ports, j, obj.wrapper.children[k]);\n }\n }\n else {\n this.removePortsExtenion(obj, ports, j, obj.wrapper);\n }\n }\n if (ports.length > 1) {\n this.endGroupAction();\n }\n };\n //public methods - end region\n //helper methods - start region\n /**\n * @private\n * @param real\n * @param rulerSize\n */\n Diagram.prototype.getSizeValue = function (real, rulerSize) {\n var value;\n if (real.toString().indexOf('px') > 0) {\n value = real.toString();\n }\n else if (real.toString().indexOf('%') > 0) {\n value = rulerSize !== undefined ? '100%' : real.toString();\n }\n else {\n value = real.toString() + 'px';\n }\n if (rulerSize) {\n var position = getRulerSize(this);\n value = 'calc(' + value + ' - ' + rulerSize + 'px)';\n }\n return value;\n };\n Diagram.prototype.renderRulers = function () {\n if (this.rulerSettings.showRulers) {\n renderOverlapElement(this);\n renderRuler(this, true);\n renderRuler(this, false);\n }\n else {\n removeRulerElements(this);\n }\n };\n Diagram.prototype.intOffPageBackground = function () {\n var position = new Size();\n position = getRulerSize(this);\n var element = document.getElementById(this.element.id + 'content');\n var width = this.getSizeValue(this.width, position.width);\n var height = this.getSizeValue(this.height, position.height);\n var style = this.rulerSettings.showRulers ?\n 'width:' + width + '; height:' + height + ';' +\n 'top:' + position.height + 'px;left:' + position.width + 'px;' +\n 'overflow: scroll;position:absolute;overflow:auto;' :\n 'width:' + width + '; height:' + height + ';position:absolute;' +\n ' left:0px; top:0px;overflow: auto;';\n var attr = {\n 'id': this.element.id + 'content',\n 'tabindex': '0',\n 'style': style\n };\n if (!element) {\n this.diagramCanvas = createHtmlElement('div', attr);\n this.element.appendChild(this.diagramCanvas);\n }\n else {\n this.diagramCanvas = element;\n this.diagramCanvas.setAttribute('style', style);\n }\n this.diagramCanvas.style.background = this.backgroundColor;\n };\n Diagram.prototype.initDiagram = function () {\n this.intOffPageBackground();\n setAttributeHtml(this.element, {\n style: 'width:' + this.getSizeValue(this.width) + '; height:'\n + this.getSizeValue(this.height) + ';position:relative;overflow:hidden;'\n });\n };\n ;\n Diagram.prototype.renderBackgroundLayer = function (bounds, commonStyle) {\n var bgLayer = this.createSvg(this.element.id + '_backgroundLayer_svg', bounds.width, bounds.height);\n bgLayer.setAttribute('style', commonStyle);\n var backgroundImage = createSvgElement('g', {\n 'id': this.element.id + '_backgroundImageLayer',\n 'class': 'e-background-image-layer'\n });\n bgLayer.appendChild(backgroundImage);\n var attr = { 'id': this.element.id + '_backgroundLayer', 'class': 'e-background-layer' };\n var background = createSvgElement('g', attr);\n bgLayer.appendChild(background);\n this.diagramCanvas.appendChild(bgLayer);\n };\n Diagram.prototype.renderGridLayer = function (bounds, commonStyle) {\n var svgGridSvg = this.createSvg(this.element.id + '_gridline_svg', bounds.width, bounds.height);\n svgGridSvg.setAttribute('class', 'e-grid-layer');\n var svgGrid = createSvgElement('g', { 'id': this.element.id + '_gridline', 'width': '100%', 'height': '100%' });\n var rect = createSvgElement('rect', {\n 'id': this.element.id + '_grid_rect', 'x': '0', 'y': '0', 'width': '100%', 'height': '100%',\n 'fill': 'url(#' + this.element.id + '_pattern)'\n });\n svgGrid.appendChild(rect);\n svgGridSvg.appendChild(svgGrid);\n this.diagramCanvas.appendChild(svgGridSvg);\n setAttributeSvg(svgGridSvg, { 'style': commonStyle });\n };\n Diagram.prototype.renderDiagramLayer = function (bounds, commonStyle) {\n var attributes = {\n 'id': this.element.id + '_diagramLayer_div',\n 'style': 'width:' + bounds.width + 'px; height:' + bounds.height + 'px;' + commonStyle\n };\n this.diagramLayerDiv = createHtmlElement('div', attributes);\n if (this.mode === 'SVG') {\n var diagramSvg = this.createSvg(this.element.id + '_diagramLayer_svg', bounds.width, bounds.height);\n diagramSvg.setAttribute('style', ' pointer-events: none; ');\n diagramSvg.setAttribute('class', 'e-diagram-layer');\n var diagramLayer = createSvgElement('g', { 'id': this.element.id + '_diagramLayer' });\n var transformationLayer = createSvgElement('g', {});\n this.diagramLayer = diagramLayer;\n diagramLayer.setAttribute('style', 'pointer-events: all;');\n transformationLayer.appendChild(diagramLayer);\n diagramSvg.appendChild(transformationLayer);\n this.diagramLayerDiv.appendChild(diagramSvg);\n }\n else {\n this.diagramLayer = CanvasRenderer.createCanvas(this.element.id + '_diagram', bounds.width, bounds.height);\n this.diagramLayer.setAttribute('style', 'position:absolute;left:0px;top:0px;');\n this.diagramLayerDiv.appendChild(this.diagramLayer);\n }\n this.diagramCanvas.appendChild(this.diagramLayerDiv);\n };\n Diagram.prototype.initLayers = function () {\n var commonStyle = 'position:absolute;top:0px;left:0px;overflow:hidden;pointer-events:none;';\n var container = document.getElementById(this.element.id);\n var bounds = container.getBoundingClientRect();\n var scrollerSize = getScrollerWidth();\n this.scroller.scrollerWidth = scrollerSize;\n this.scroller.setViewPortSize(bounds.width, bounds.height);\n this.renderRulers();\n createMeasureElements();\n // this.renderBackgroundImageLayer(bounds, commonStyle);\n this.renderBackgroundLayer(bounds, commonStyle);\n this.renderGridLayer(bounds, commonStyle);\n this.renderDiagramLayer(bounds, commonStyle);\n this.renderHTMLLayer(bounds, commonStyle);\n this.renderPortsExpandLayer(bounds, commonStyle);\n this.renderNativeLayer(bounds, commonStyle);\n this.renderAdornerLayer(bounds, commonStyle);\n };\n Diagram.prototype.renderAdornerLayer = function (bounds, commonStyle) {\n var divElement = createHtmlElement('div', {\n 'id': this.element.id + '_diagramAdornerLayer',\n 'style': 'width:' + bounds.width + 'px;height:' + bounds.height + 'px;' + commonStyle\n });\n var svgAdornerSvg = this.createSvg(this.element.id + '_diagramAdorner_svg', bounds.width, bounds.height);\n svgAdornerSvg.setAttribute('class', 'e-adorner-layer');\n svgAdornerSvg.setAttribute('style', 'pointer-events:none;');\n this.adornerLayer = createSvgElement('g', { 'id': this.element.id + '_diagramAdorner' });\n this.adornerLayer.setAttribute('style', ' pointer-events: all; ');\n svgAdornerSvg.appendChild(this.adornerLayer);\n divElement.appendChild(svgAdornerSvg);\n this.diagramCanvas.appendChild(divElement);\n var svgSelector = createSvgElement('g', { 'id': this.element.id + '_SelectorElement' });\n this.adornerLayer.appendChild(svgSelector);\n setAttributeSvg(svgAdornerSvg, { style: 'pointer-events:none;' });\n };\n Diagram.prototype.renderPortsExpandLayer = function (bounds, commonStyle) {\n var svgPortsSvg = this.createSvg(this.element.id + '_diagramPorts_svg', bounds.width, bounds.height);\n svgPortsSvg.setAttribute('class', 'e-ports-expand-layer');\n var svgPortsLayer = createSvgElement('g', {\n 'id': this.element.id + '_diagramPorts',\n 'class': 'e-ports-layer',\n 'style': 'pointer-events: all;'\n });\n svgPortsSvg.appendChild(svgPortsLayer);\n var svgExpandLayer = createSvgElement('g', {\n 'id': this.element.id + '_diagramExpander',\n 'class': 'e-expand-layer',\n 'style': 'pointer-events: all;'\n });\n svgPortsSvg.appendChild(svgExpandLayer);\n this.diagramCanvas.appendChild(svgPortsSvg);\n setAttributeSvg(svgPortsSvg, { 'style': commonStyle });\n };\n Diagram.prototype.renderHTMLLayer = function (bounds, commonStyle) {\n this.htmlLayer = createHtmlElement('div', {\n 'id': this.element.id + '_htmlLayer',\n 'style': 'width:' + bounds.width + 'px; height:' + bounds.height + 'px;position:absolute;top:0px;' +\n 'left:0px;overflow:hidden;pointer-events:none;',\n 'class': 'e-html-layer'\n });\n var htmlLayerDiv = createHtmlElement('div', {\n 'id': this.element.id + '_htmlLayer_div',\n 'style': 'position:absolute;top:0px;left:0px;pointer-events:all;'\n });\n this.htmlLayer.appendChild(htmlLayerDiv);\n this.diagramCanvas.appendChild(this.htmlLayer);\n };\n Diagram.prototype.renderNativeLayer = function (bounds, commonStyle) {\n var nativeLayerSvg = this.createSvg(this.element.id + '_nativeLayer_svg', bounds.width, bounds.height);\n var nativeLayer = createSvgElement('g', { 'id': this.element.id + '_nativeLayer', 'style': 'pointer-events:all;' });\n nativeLayerSvg.appendChild(nativeLayer);\n this.diagramLayerDiv.appendChild(nativeLayerSvg);\n setAttributeSvg(nativeLayerSvg, { 'class': 'e-native-layer', 'style': commonStyle });\n };\n Diagram.prototype.createSvg = function (id, width, height) {\n var svgObj = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n setAttributeSvg(svgObj, { 'id': id, 'width': width, 'height': height });\n return svgObj;\n };\n Diagram.prototype.initObjects = function (isLoad) {\n if (!this.isLoading) {\n this.initData();\n }\n this.initLayerObjects();\n this.updateBridging(isLoad);\n };\n Diagram.prototype.initLayerObjects = function () {\n var hasLayers = this.layers.length > 1;\n var set = false;\n var connectors = [];\n var tempTabel = {};\n var bpmnTable = {};\n var tempNode = [];\n var groups = [];\n var i = 0;\n for (var _i = 0, _a = this.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n obj.id = obj.id || randomId();\n this.addToLayer(obj, hasLayers);\n tempTabel[obj.id] = obj;\n }\n for (var _b = 0, _c = this.connectors; _b < _c.length; _b++) {\n var obj = _c[_b];\n obj.id = obj.id || randomId();\n this.addToLayer(obj, hasLayers);\n tempTabel[obj.id] = obj;\n }\n for (var _d = 0, _e = this.layers; _d < _e.length; _d++) {\n var layer = _e[_d];\n for (var _f = 0, _g = layer.objects; _f < _g.length; _f++) {\n var obj = _g[_f];\n if (tempTabel[obj]) {\n if (!(tempTabel[obj] instanceof Connector)) {\n if (tempTabel[obj].children) {\n groups.push(obj);\n }\n else if ((tempTabel[obj].shape instanceof BpmnShape) &&\n tempTabel[obj].shape.activity.subProcess.processes &&\n tempTabel[obj].shape.activity.subProcess.processes.length > 0) {\n bpmnTable[tempTabel[obj].id] = obj;\n }\n else {\n this.initNodes(tempTabel[obj], layer);\n }\n }\n else {\n var connector = tempTabel[obj];\n if (connector.sourceID && connector.targetID) {\n var sourceNode = tempTabel[connector.sourceID];\n var targetNode = tempTabel[connector.targetID];\n if (sourceNode && sourceNode.wrapper && targetNode && targetNode.wrapper) {\n this.initConnectors(tempTabel[obj], layer);\n }\n else {\n connectors.push(tempTabel[obj]);\n }\n }\n else {\n this.initConnectors(tempTabel[obj], layer);\n }\n }\n }\n }\n if (this.bpmnModule) {\n for (var _h = 0, _j = this.bpmnModule.textAnnotationConnectors; _h < _j.length; _h++) {\n var obj = _j[_h];\n this.initConnectors(obj, layer, false);\n }\n }\n }\n for (var _k = 0, _l = Object.keys(bpmnTable); _k < _l.length; _k++) {\n var obj = _l[_k];\n this.initObject(tempTabel[obj]);\n this.bpmnModule.updateDocks(tempTabel[obj], this);\n }\n for (var _m = 0, groups_1 = groups; _m < groups_1.length; _m++) {\n var obj = groups_1[_m];\n var layer = this.commandHandler.getObjectLayer(obj);\n this.initNodes(tempTabel[obj], layer);\n }\n for (var _o = 0, connectors_1 = connectors; _o < connectors_1.length; _o++) {\n var connector = connectors_1[_o];\n var layer = this.commandHandler.getObjectLayer(connector.id);\n this.initConnectors(connector, layer);\n }\n };\n Diagram.prototype.addToLayer = function (obj, hasLayers) {\n var layer;\n if (hasLayers) {\n layer = this.commandHandler.getObjectLayer(obj.id);\n }\n if (!hasLayers || !layer) {\n if (this.activeLayer.objects.indexOf(obj.id) === -1) {\n this.activeLayer.objects.push(obj.id);\n }\n }\n this.setZIndex(layer || this.activeLayer, obj);\n };\n Diagram.prototype.updateLayer = function (newProp) {\n for (var _i = 0, _a = Object.keys(newProp.layers); _i < _a.length; _i++) {\n var key = _a[_i];\n var layerObject = this.layers[key].objects;\n for (var _b = 0, layerObject_1 = layerObject; _b < layerObject_1.length; _b++) {\n var obj = layerObject_1[_b];\n var node = this.nameTable[obj];\n if (newProp.layers[key].visible !== undefined) {\n this.updateElementVisibility(node.wrapper, node, newProp.layers[key].visible);\n }\n else if (newProp.layers[key].lock === true) {\n this.unSelect(node);\n }\n }\n if (newProp.layers[key].lock !== undefined) {\n this.layers[key].lock = newProp.layers[key].lock;\n }\n }\n if (this.mode !== 'SVG') {\n this.refreshDiagramLayer();\n }\n };\n Diagram.prototype.updateScrollSettings = function (newProp) {\n var hPan = (-this.scroller.horizontalOffset + newProp.scrollSettings.horizontalOffset || 0);\n var vPan = (this.scroller.verticalOffset - newProp.scrollSettings.verticalOffset || 0);\n var oldValue = {\n VerticalOffset: this.scrollSettings.verticalOffset, HorizontalOffset: this.scrollSettings.horizontalOffset,\n ViewportHeight: this.scrollSettings.viewPortHeight, ViewportWidth: this.scrollSettings.viewPortWidth,\n CurrentZoom: this.scroller.currentZoom\n };\n if (hPan !== 0 || vPan !== 0) {\n this.pan(hPan, vPan);\n }\n var newValue = {\n VerticalOffset: this.scrollSettings.verticalOffset, HorizontalOffset: this.scrollSettings.horizontalOffset,\n ViewportHeight: this.scrollSettings.viewPortHeight, ViewportWidth: this.scrollSettings.viewPortWidth,\n CurrentZoom: this.scroller.currentZoom\n };\n var arg = {\n oldValue: oldValue, newValue: newValue, source: this\n };\n this.triggerEvent(DiagramEvent.scrollChange, arg);\n };\n Diagram.prototype.initData = function () {\n if (this.dataBindingModule) {\n if (this.dataSourceSettings.dataManager && this.dataSourceSettings.dataManager.dataSource &&\n this.dataSourceSettings.dataManager.dataSource.url !== undefined) {\n this.dataBindingModule.initSource(this.dataSourceSettings, this);\n }\n else {\n this.dataBindingModule.initData(this.dataSourceSettings, this);\n }\n }\n };\n Diagram.prototype.initNodes = function (obj, layer) {\n this.preventUpdate = true;\n this.initObject(obj, layer);\n this.preventUpdate = false;\n };\n Diagram.prototype.initConnectors = function (obj, layer, independentObj) {\n this.preventUpdate = true;\n this.initObject(obj, layer, independentObj);\n this.updateEdges(obj);\n this.preventUpdate = false;\n };\n Diagram.prototype.setZIndex = function (layer, obj) {\n //should be changed\n var currentLayer = layer;\n if ((obj).zIndex === -1) {\n while (currentLayer.zIndexTable[currentLayer.objectZIndex + 1]) {\n layer.objectZIndex++;\n }\n obj.zIndex = ++currentLayer.objectZIndex;\n }\n else {\n var index = obj.zIndex;\n if (currentLayer.zIndexTable[index]) {\n var tabelLength = Object.keys(currentLayer.zIndexTable).length;\n var j = 0;\n for (var i = 0; i < tabelLength; i++) {\n if (i === index) {\n for (var j_1 = tabelLength; j_1 > index; j_1--) {\n currentLayer.zIndexTable[j_1] = currentLayer.zIndexTable[j_1 - 1];\n if (this.nameTable[currentLayer.zIndexTable[j_1]]) {\n this.nameTable[currentLayer.zIndexTable[j_1]].zIndex = j_1;\n }\n }\n currentLayer.zIndexTable[i] = obj.id;\n }\n j++;\n }\n }\n }\n };\n Diagram.prototype.initializeDiagramLayers = function () {\n for (var _i = 0, _a = this.layers; _i < _a.length; _i++) {\n var layer = _a[_i];\n layer.zIndex = this.layers.indexOf(layer);\n this.layerZIndexTable[layer.zIndex] = layer.id;\n }\n if (this.layers.length === 0) {\n var defaultLayer = {\n id: 'default_layer', visible: true, lock: false, objects: [], zIndex: 0,\n objectZIndex: -1, zIndexTable: {}\n };\n this.commandHandler.addLayer(defaultLayer);\n }\n this.setActiveLayer(this.layers[this.layers.length - 1].id);\n };\n /** @private */\n Diagram.prototype.resetTool = function () {\n this.eventHandler.resetTool();\n };\n /** @private */\n Diagram.prototype.initObject = function (obj, layer, independentObj, group) {\n if (independentObj === void 0) { independentObj = true; }\n if (obj !== undefined) {\n if (independentObj) {\n if (!layer) {\n this.addToLayer(obj, false);\n layer = this.activeLayer;\n }\n //Move the common properties like zindex and id to an abstract class\n if (obj instanceof Node || obj instanceof Connector) {\n this.setZIndex(layer, obj);\n }\n }\n if (obj instanceof Node) {\n if (independentObj) {\n var getDefaults = getFunction(this.getNodeDefaults);\n if (getDefaults) {\n var defaults = getDefaults(obj, this);\n if (defaults && defaults !== obj) {\n extendObject(defaults, obj);\n }\n }\n this.initNode(obj, this.element.id);\n }\n }\n else if (obj instanceof Connector) {\n var getDefaults = getFunction(this.getConnectorDefaults);\n if (getDefaults) {\n var defaults = getDefaults(obj, this);\n if (defaults && defaults !== obj) {\n extendObject(defaults, obj);\n }\n if (obj.segments.length) {\n if (obj.type !== obj.segments[0].type) {\n obj.segments = [];\n }\n }\n }\n var sourceNode = this.nameTable[obj.sourceID];\n var targetNode = this.nameTable[obj.targetID];\n if (sourceNode !== undefined && canOutConnect(sourceNode)) {\n obj.sourceWrapper = this.getEndNodeWrapper(sourceNode, obj, true);\n if (obj.sourcePortID) {\n obj.sourcePortWrapper = this.getWrapper(sourceNode.wrapper, obj.sourcePortID);\n }\n }\n if (targetNode !== undefined && canInConnect(targetNode)) {\n obj.targetWrapper = this.getEndNodeWrapper(targetNode, obj, false);\n if (obj.targetPortID) {\n obj.targetPortWrapper = this.getWrapper(targetNode.wrapper, obj.targetPortID);\n }\n }\n if (!independentObj) {\n var points = obj.getConnectorPoints(obj.type);\n updateConnector(obj, points);\n }\n if (independentObj) {\n obj.init(this);\n }\n obj.wrapper.measure(new Size(undefined, undefined));\n obj.wrapper.arrange(obj.wrapper.desiredSize);\n }\n if (this.bpmnModule && obj instanceof Node\n && obj.shape.type === 'Bpmn' && obj.shape.annotations.length > 0) {\n this.bpmnModule.updateQuad(obj, this);\n }\n if (independentObj) {\n var checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, obj.wrapper.bounds);\n if (!checkBoundaryConstraints) {\n var node = obj instanceof Node ? this.nodes : this.connectors;\n for (var i = 0; i <= node.length; i++) {\n if (node[i] && obj.id === node[i].id) {\n node.splice(i, 1);\n }\n }\n }\n layer.zIndexTable[obj.zIndex] = obj.id;\n }\n this.nameTable[obj.id] = obj;\n if (obj instanceof Node && obj.children) {\n if (!group) {\n this.updateGroupOffset(obj, true);\n }\n this.groupTable[obj.id] = obj.children;\n for (var i = 0; i < obj.children.length; i++) {\n var node = (this.nameTable[obj.children[i]]);\n if (node) {\n node.parentId = obj.id;\n }\n }\n if (!this.isLoading && obj.rotateAngle) {\n this.commandHandler.rotateObjects(obj, [obj], obj.rotateAngle, { x: obj.offsetX, y: obj.offsetY }, false);\n }\n }\n this.updateQuad(obj);\n }\n if (obj.visible === false) {\n this.updateElementVisibility(obj.wrapper, obj, false);\n }\n };\n Diagram.prototype.scaleObject = function (obj, size, isWidth) {\n var actualSize = isWidth ? obj.wrapper.actualSize.width : obj.wrapper.actualSize.height;\n var sw = (isWidth) ? 1 + ((size - actualSize) / actualSize) : 1;\n var sh = (isWidth) ? 1 : 1 + ((size - actualSize) / actualSize);\n var groupOffsetX = obj.offsetX;\n var groupOffsetY = obj.offsetY;\n this.realActions |= RealAction.PreventDrag;\n this.scale(obj, sw, sh, { x: 0.5, y: 0.5 });\n this.realActions &= ~RealAction.PreventDrag;\n };\n Diagram.prototype.updateDefaultLayoutIcons = function (node) {\n if (this.layout.type === 'OrganizationalChart' || this.layout.type === 'HierarchicalTree' ||\n this.layout.type === 'ComplexHierarchicalTree') {\n {\n this.updateDefaultLayoutIcon(node, node.expandIcon);\n this.updateDefaultLayoutIcon(node, node.collapseIcon);\n }\n }\n };\n Diagram.prototype.updateDefaultLayoutIcon = function (node, icon) {\n if (icon.shape !== 'None') {\n if (icon.horizontalAlignment === 'Auto' && icon.verticalAlignment === 'Auto' &&\n icon.offset.x === .5 && icon.offset.y === 1) {\n var iconWrapper = this.getWrapper(node.wrapper, 'icon_content');\n var offsetX = void 0;\n var offsetY = void 0;\n if (this.layout.orientation === 'TopToBottom' || this.layout.orientation === 'BottomToTop') {\n offsetX = .5;\n offsetY = this.layout.orientation === 'TopToBottom' ? 1 : 0;\n }\n else if (this.layout.orientation === 'RightToLeft' || this.layout.orientation === 'LeftToRight') {\n offsetX = this.layout.orientation === 'LeftToRight' ? 1 : 0;\n offsetY = .5;\n }\n iconWrapper.setOffsetWithRespectToBounds(offsetX, offsetY, 'Fraction');\n iconWrapper.horizontalAlignment = 'Center';\n iconWrapper.verticalAlignment = 'Center';\n node.wrapper.measure(new Size(node.wrapper.width, node.wrapper.height));\n node.wrapper.arrange(node.wrapper.desiredSize);\n }\n }\n };\n /**\n * @private\n */\n Diagram.prototype.updateGroupOffset = function (node, isUpdateSize) {\n if ((node.children && node.children.length > 0) || (node.processId)) {\n var node1 = this.nameTable[node.id];\n if (!(this.realActions & RealAction.PreventScale) && !(this.realActions & RealAction.PreventDrag)) {\n if (node1.offsetX && !(this.diagramActions & DiagramAction.ToolAction)) {\n this.realActions |= RealAction.PreventScale;\n var diffX = (node1.offsetX - node.wrapper.offsetX);\n node1.offsetX = node.wrapper.offsetX;\n this.drag(node1, diffX, 0);\n this.realActions &= ~RealAction.PreventScale;\n }\n else {\n node1.offsetX = node.wrapper.offsetX;\n }\n if (node1.offsetY && !(this.diagramActions & DiagramAction.ToolAction)) {\n this.realActions |= RealAction.PreventScale;\n var diffY = (node1.offsetY - node.wrapper.offsetY);\n node1.offsetY = node.wrapper.offsetY;\n this.drag(node1, 0, diffY);\n this.realActions &= ~RealAction.PreventScale;\n }\n else {\n node1.offsetY = node.wrapper.offsetY;\n }\n if (this.diagramActions) {\n node1.width = node.wrapper.actualSize.width;\n node1.height = node.wrapper.actualSize.height;\n }\n }\n }\n if (isUpdateSize) {\n if ((node.children && node.children.length > 0)) {\n if (this.nameTable[node.id].width !== undefined) {\n this.scaleObject(node, this.nameTable[node.id].width, true);\n }\n else {\n this.nameTable[node.id].width = node.wrapper.actualSize.width;\n }\n if (this.nameTable[node.id].height !== undefined) {\n this.scaleObject(node, this.nameTable[node.id].height, false);\n }\n else {\n this.nameTable[node.id].height = node.wrapper.actualSize.height;\n }\n }\n }\n };\n Diagram.prototype.initNode = function (obj, diagramId, group) {\n var canvas = obj.initContainer();\n var portContainer = new Canvas();\n var content;\n if (!canvas.children) {\n canvas.children = [];\n }\n if (obj.children) {\n canvas.measureChildren = false;\n for (var i = 0; i < obj.children.length; i++) {\n if (this.nameTable[obj.children[i]]) {\n canvas.children.push(this.nameTable[obj.children[i]].wrapper);\n }\n }\n portContainer.id = 'group_container';\n portContainer.style.fill = 'none';\n portContainer.style.strokeColor = 'none';\n portContainer.horizontalAlignment = 'Stretch';\n portContainer.verticalAlignment = 'Stretch';\n canvas.style = obj.style;\n portContainer.children = [];\n canvas.children.push(portContainer);\n }\n else {\n var setNodeTemplate = getFunction(this.setNodeTemplate);\n if (setNodeTemplate) {\n content = setNodeTemplate(obj, this);\n }\n if (!content) {\n content = obj.init(this);\n }\n canvas.children.push(content);\n }\n // tslint:disable-next-line:no-any\n var wrapperContent;\n wrapperContent = getFunction(this.getDescription);\n if (wrapperContent) {\n (obj.children ? canvas : content).description = wrapperContent;\n }\n else {\n (obj.children ? canvas : content).description = obj.annotations.length ? obj.annotations[0].content : obj.id;\n }\n var container = obj.children ? portContainer : canvas;\n obj.initAnnotations(this.getDescription, container);\n obj.initPorts(this.getDescription, container);\n obj.initIcons(this.getDescription, this.layout, container, diagramId);\n canvas.measure(new Size(obj.width, obj.height));\n canvas.arrange(canvas.desiredSize);\n };\n Diagram.prototype.canExecute = function () {\n return true;\n };\n Diagram.prototype.initViews = function () {\n if (!this.isLoading) {\n this.views.push(this.element.id);\n this.views[this.element.id] = this;\n }\n };\n Diagram.prototype.initCommands = function () {\n var i;\n var newCommands = this.commandManager.commands;\n var commands = {\n 'copy': {\n execute: this.copyCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.C, keyModifiers: KeyModifiers.Control }\n },\n 'paste': {\n execute: this.pasteCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.V, keyModifiers: KeyModifiers.Control }\n },\n 'cut': {\n execute: this.cutCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.X, keyModifiers: KeyModifiers.Control }\n },\n 'delete': {\n execute: this.removeCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.Delete }\n },\n 'selectAll': {\n execute: this.selectAll.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.A, keyModifiers: KeyModifiers.Control }\n },\n 'undo': {\n execute: this.undo.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.Z, keyModifiers: KeyModifiers.Control }\n },\n 'redo': {\n execute: this.redo.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.Y, keyModifiers: KeyModifiers.Control }\n },\n 'nudgeUp': {\n execute: this.nudgeCommand.bind(this, 'Up'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Up },\n parameter: 'up'\n },\n 'nudgeRight': {\n execute: this.nudgeCommand.bind(this, 'Right'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Right },\n parameter: 'right'\n },\n 'nudgeDown': {\n execute: this.nudgeCommand.bind(this, 'Down'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Down },\n parameter: 'down'\n },\n 'nudgeLeft': {\n execute: this.nudgeCommand.bind(this, 'Left'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Left },\n parameter: 'left'\n },\n 'startEdit': {\n execute: this.startEditCommad.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.F2 }\n },\n 'endEdit': {\n execute: this.endEditCommand.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Escape }\n },\n 'focusToNextItem': {\n // execute: this.focusToItem.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Tab }\n },\n 'focusToPreviousItem': {\n // execute: this.focusToItem.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Tab, keyModifiers: KeyModifiers.Control }\n },\n 'selectFocusedItem': {\n execute: this.startEditCommad.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Enter }\n },\n };\n this.initCommandManager(newCommands, commands);\n };\n Diagram.prototype.overrideCommands = function (newCommand, commands) {\n var command;\n for (var _i = 0, _a = Object.keys(commands); _i < _a.length; _i++) {\n var key = _a[_i];\n command = commands[key];\n if (newCommand.gesture.key === command.gesture.key && newCommand.gesture.keyModifiers === command.gesture.keyModifiers) {\n delete commands[key];\n break;\n }\n }\n };\n Diagram.prototype.initCommandManager = function (newCommands, commands) {\n var i = 0;\n if (newCommands) {\n for (i = 0; i < newCommands.length; i++) {\n if (commands[newCommands[i].name] && newCommands[i]) {\n if (newCommands[i].canExecute) {\n commands[newCommands[i].name].canExecute = newCommands[i].canExecute;\n }\n if (newCommands[i].execute) {\n commands[newCommands[i].name].execute = newCommands[i].execute;\n }\n if (newCommands[i].gesture.key || newCommands[i].gesture.keyModifiers) {\n commands[newCommands[i].name].gesture = newCommands[i].gesture;\n }\n if (newCommands[i].parameter !== '') {\n commands[newCommands[i].name].parameter = newCommands[i].parameter;\n }\n }\n else {\n this.overrideCommands(newCommands[i], commands);\n commands[newCommands[i].name] = {\n execute: newCommands[i].execute, canExecute: newCommands[i].canExecute, gesture: newCommands[i].gesture,\n parameter: newCommands[i].parameter\n };\n }\n }\n }\n this.commands = commands;\n };\n /** @private */\n Diagram.prototype.updateNodeEdges = function (node) {\n for (var _i = 0, _a = node.inEdges; _i < _a.length; _i++) {\n var edge = _a[_i];\n if (this.nameTable[edge]) {\n this.nameTable[edge].targetID = '';\n }\n }\n for (var _b = 0, _c = node.outEdges; _b < _c.length; _b++) {\n var edge = _c[_b];\n if (this.nameTable[edge]) {\n this.nameTable[edge].sourceID = '';\n }\n }\n node.inEdges = [];\n node.outEdges = [];\n };\n /** @private */\n Diagram.prototype.updateIconVisibility = function (node, visibility) {\n for (var i = 0; i < node.wrapper.children.length; i++) {\n var child = node.wrapper.children[i];\n var id = child.id.split(node.id)[1];\n if (child.id && id && id.match('^_icon')) {\n child.visible = visibility;\n this.updateDiagramContainerVisibility(child, visibility);\n }\n }\n };\n /** @private */\n Diagram.prototype.updateEdges = function (obj) {\n if (obj.sourceID !== undefined && obj.sourceID !== '') {\n var node = this.nameTable[obj.sourceID];\n if (node && node.outEdges && node.outEdges.length === 0) {\n node.outEdges = [];\n }\n if (node && node.outEdges && node.outEdges.indexOf(obj.id) === -1) {\n node.outEdges.push(obj.id);\n }\n }\n if (obj.targetID !== undefined && obj.targetID !== '') {\n var node = this.nameTable[obj.targetID];\n if (node && node.inEdges && node.inEdges.length === 0) {\n node.inEdges = [];\n }\n if (node && node.inEdges && node.inEdges.indexOf(obj.id) === -1) {\n node.inEdges.push(obj.id);\n }\n if (node && node.visible && node.outEdges) {\n var value = node.outEdges.length === 0 ? false : true;\n this.updateIconVisibility(node, value);\n }\n }\n };\n /** @private */\n Diagram.prototype.refreshDiagram = function () {\n this.initLayerObjects();\n this.doLayout();\n this.updateBridging();\n this.scroller.setSize();\n };\n /** @private */\n Diagram.prototype.updateDiagramObject = function (obj) {\n var view;\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n view = this.views[temp];\n if (view.mode === 'SVG' && this.diagramActions) {\n var htmlLayer = getHTMLLayer(this.element.id);\n var diagramElementsLayer = document.getElementById(view.element.id + '_diagramLayer');\n this.diagramRenderer.updateNode(obj.wrapper, diagramElementsLayer, htmlLayer, undefined);\n }\n else {\n this.refreshCanvasDiagramLayer(view);\n }\n }\n };\n /** @private */\n Diagram.prototype.getObjectsOfLayer = function (objectArray) {\n var nodeArray = [];\n for (var _i = 0, objectArray_1 = objectArray; _i < objectArray_1.length; _i++) {\n var obj = objectArray_1[_i];\n if (this.nameTable[obj]) {\n nodeArray.push(this.nameTable[obj]);\n }\n }\n return nodeArray;\n };\n /** @private */\n Diagram.prototype.refreshDiagramLayer = function () {\n var view;\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n view = this.views[temp];\n switch (view.mode) {\n case 'SVG':\n this.refreshSvgDiagramLayer(view);\n break;\n case 'Canvas':\n this.refreshCanvasLayers();\n break;\n }\n }\n };\n /** @private */\n Diagram.prototype.refreshCanvasLayers = function () {\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n var view = this.views[temp];\n this.refreshCanvasDiagramLayer(view);\n }\n };\n Diagram.prototype.renderBasicElement = function (view) {\n var htmlLayer = getHTMLLayer(view.element.id);\n for (var i = 0; i < this.basicElements.length; i++) {\n var element = this.basicElements[i];\n if (element instanceof Container) {\n element.prevRotateAngle = 0;\n }\n element.measure(new Size(element.width, element.height));\n element.arrange(element.desiredSize);\n view.diagramRenderer.renderElement(element, view.diagramLayer, htmlLayer);\n }\n };\n Diagram.prototype.refreshElements = function (view) {\n if (!this.isDestroyed) {\n this.clearCanvas(view);\n if (view instanceof Diagram) {\n view.diagramLayer.getContext('2d').setTransform(view.scroller.currentZoom, 0, 0, view.scroller.currentZoom, 0, 0);\n view.diagramLayer.getContext('2d').scale(1.5, 1.5);\n }\n var htmlLayer = getHTMLLayer(view.element.id);\n var bounds = this.spatialSearch.getPageBounds();\n this.renderDiagramElements(view.diagramLayer, view.diagramRenderer, htmlLayer);\n if (view instanceof Diagram) {\n view.diagramLayer.style.transform = 'scale(' + (2 / 3) + ')';\n view.diagramLayer.style.transformOrigin = '0 0';\n }\n this.renderTimer = null;\n }\n };\n /** @private */\n Diagram.prototype.refreshCanvasDiagramLayer = function (view) {\n var _this = this;\n if (view.mode !== 'SVG' && !this.isDestroyed) {\n if (this.basicElements.length > 0) {\n this.renderBasicElement(view);\n }\n if (!this.diagramActions || (this.diagramActions & DiagramAction.Render) === 0) {\n this.refreshElements(view);\n }\n else if (!this.renderTimer) {\n this.renderTimer = setTimeout(function () {\n _this.refreshElements(view);\n }, 40);\n }\n }\n };\n /** @private */\n Diagram.prototype.updatePortVisibility = function (node, portVisibility, inverse) {\n var portElement;\n var drawingObject = !(this.drawingObject && this.drawingObject.shape) ? true : false;\n if (node instanceof Node && drawingObject && canMove(node)) {\n var ports = node.ports;\n var changed = false;\n for (var i = 0; i < ports.length; i++) {\n portElement = this.getWrapper(node.wrapper, ports[i].id);\n if (portVisibility & PortVisibility.Hover || portVisibility & PortVisibility.Connect) {\n if (checkPortRestriction(ports[i], portVisibility)) {\n portElement.visible = !inverse;\n changed = true;\n }\n }\n }\n if (changed) {\n this.updateDiagramObject(node);\n }\n }\n };\n /** @private */\n Diagram.prototype.refreshSvgDiagramLayer = function (view) {\n var container = document.getElementById(view.element.id);\n var bounds = container.getBoundingClientRect();\n var node;\n var element;\n var connector;\n var diagramElementsLayer = document.getElementById(view.element.id + '_diagramLayer');\n var htmlLayer = getHTMLLayer(view.element.id);\n for (var i = 0; i < this.basicElements.length; i++) {\n element = this.basicElements[i];\n element.measure(new Size(element.width, element.height));\n element.arrange(element.desiredSize);\n this.diagramRenderer.renderElement(element, diagramElementsLayer, htmlLayer);\n }\n this.renderDiagramElements(diagramElementsLayer, this.diagramRenderer, htmlLayer);\n };\n /** @private */\n Diagram.prototype.renderDiagramElements = function (canvas, renderer, htmlLayer, transform, fromExport) {\n if (transform === void 0) { transform = true; }\n for (var _i = 0, _a = Object.keys(this.layerZIndexTable); _i < _a.length; _i++) {\n var layerId = _a[_i];\n var layer = this.commandHandler.getLayer(this.layerZIndexTable[layerId]);\n for (var _b = 0, _c = Object.keys(layer.zIndexTable); _b < _c.length; _b++) {\n var node = _c[_b];\n var element = this.nameTable[layer.zIndexTable[node]].wrapper;\n if (!(this.nameTable[layer.zIndexTable[node]].parentId)\n && !(this.nameTable[layer.zIndexTable[node]].processId)) {\n var status_1 = true;\n if (fromExport) {\n status_1 = false;\n }\n renderer.renderElement(element, canvas, htmlLayer, (!renderer.isSvgMode && transform) ? this.scroller.transform : undefined, undefined, undefined, status_1);\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.updateBridging = function (isLoad) {\n if (this.bridgingModule) {\n for (var i = 0; i < this.connectors.length; i++) {\n var connector = this.connectors[i];\n this.bridgingModule.updateBridging(connector, this);\n var canvas = this.connectors[i].wrapper;\n if (canvas) {\n var pathSegment = canvas.children[0];\n var data = pathSegment.data;\n connector.getSegmentElement(connector, pathSegment);\n if (pathSegment.data !== data) {\n canvas.measure(new Size());\n canvas.arrange(canvas.desiredSize);\n if (this.mode === 'SVG' && !isLoad) {\n this.updateDiagramObject(connector);\n }\n }\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.setCursor = function (cursor) {\n this.diagramRenderer.setCursor(this.diagramCanvas, cursor);\n };\n /** @private */\n Diagram.prototype.clearCanvas = function (view) {\n var width;\n var height;\n width = view.contentWidth || view.diagramLayer.width;\n height = view.contentHeight || view.diagramLayer.height;\n if (view.mode !== 'SVG') {\n var ctx = CanvasRenderer.getContext(view.diagramLayer);\n ctx.clearRect(0, 0, width, height);\n }\n };\n /** @private */\n Diagram.prototype.updateScrollOffset = function () {\n this.scroller.setScrollOffset(this.diagramCanvas.scrollLeft, this.diagramCanvas.scrollTop);\n updateRuler(this);\n };\n /** @private */\n Diagram.prototype.setOffset = function (offsetX, offsetY) {\n var container = document.getElementById(this.element.id + 'content');\n if (container) {\n container.scrollLeft = offsetX;\n container.scrollTop = offsetY;\n }\n };\n /** @private */\n Diagram.prototype.setSize = function (width, height) {\n if (this.diagramLayer && !this.preventUpdate) {\n var position = getRulerSize(this);\n width -= position.width;\n height -= position.height;\n var bounds = this.spatialSearch.getPageBounds();\n bounds.x *= this.scroller.currentZoom;\n bounds.y *= this.scroller.currentZoom;\n bounds.width *= this.scroller.currentZoom;\n bounds.height *= this.scroller.currentZoom;\n var factor = this.mode === 'SVG' ? 1 : 1.5;\n var diagramLayer = this.mode === 'SVG' ?\n getDiagramLayerSvg(this.element.id) : this.diagramLayer;\n diagramLayer.setAttribute('width', (factor * width).toString());\n diagramLayer.setAttribute('height', (factor * height).toString());\n var attr = { 'width': width.toString(), 'height': height.toString() };\n this.diagramLayerDiv.style.width = width + 'px';\n this.diagramLayerDiv.style.height = height + 'px';\n setAttributeSvg(getNativeLayerSvg(this.element.id), attr);\n setAttributeSvg(getPortLayerSvg(this.element.id), attr);\n var adornerSVG = getAdornerLayerSvg(this.element.id);\n setAttributeSvg(adornerSVG, attr);\n adornerSVG.parentNode.style.width = width + 'px';\n adornerSVG.parentNode.style.height = height + 'px';\n var gridLayer = getGridLayerSvg(this.element.id);\n setAttributeSvg(gridLayer, attr);\n this.diagramRenderer.updateGrid(this.snapSettings, gridLayer, this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n setAttributeSvg(getBackgroundLayerSvg(this.element.id), attr);\n this.htmlLayer.style.width = width + 'px';\n this.htmlLayer.style.height = height + 'px';\n if (this.mode !== 'SVG') {\n this.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n Diagram.prototype.transformLayers = function () {\n var bounds = this.spatialSearch.getPageBounds();\n bounds.x *= this.scroller.currentZoom;\n bounds.y *= this.scroller.currentZoom;\n bounds.width *= this.scroller.currentZoom;\n bounds.height *= this.scroller.currentZoom;\n this.diagramRenderer.updateGrid(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n this.diagramRenderer.transformLayers(this.scroller.transform, this.mode === 'SVG');\n this.updateSelector();\n this.renderPageBreaks(bounds);\n };\n /**\n * Defines how to remove the Page breaks\n * @private\n */\n Diagram.prototype.removePageBreaks = function () {\n if (this.diagramLayer) {\n var line = getBackgroundLayer(this.element.id);\n if (line && line.childNodes) {\n var length_1 = line.childNodes.length;\n for (var i = 0; i < length_1; i++) {\n line.removeChild(line.childNodes[0]);\n }\n }\n }\n };\n /**\n * Defines how the page breaks has been rendered\n * @private\n */\n Diagram.prototype.renderPageBreaks = function (bounds) {\n this.removePageBreaks();\n var backgroundLayer = getBackgroundLayer(this.element.id);\n if (backgroundLayer) {\n var i = 0;\n bounds = this.scroller.getPageBounds(true);\n var x = (this.scroller.transform.tx + bounds.x) * this.scroller.currentZoom;\n var y = (this.scroller.transform.ty + bounds.y) * this.scroller.currentZoom;\n var height = bounds.height * this.scroller.currentZoom;\n var width = bounds.width * this.scroller.currentZoom;\n DiagramRenderer.renderSvgBackGroundImage(this.pageSettings.background, this.element, x, y, width, height);\n var options = {\n id: backgroundLayer.id + 'rect', x: x,\n y: y,\n height: height,\n width: width, angle: 0, stroke: '', strokeWidth: 1,\n fill: this.pageSettings.background.color, opacity: 1,\n pivotX: 0, pivotY: 0, visible: true, dashArray: '0',\n };\n this.diagramRenderer.drawRect(backgroundLayer, options);\n if (this.pageSettings.showPageBreaks) {\n var collection = this.scroller.getPageBreak(bounds);\n for (i = 0; i < collection.length; i++) {\n this.diagramRenderer.drawLine(backgroundLayer, {\n class: 'e-diagram-page-break',\n fill: 'none', stroke: '#aaaaaa', strokeWidth: 1, dashArray: '10 10',\n opacity: 2, x: 0, y: 0, width: 0, height: 0, angle: 0, pivotX: 0, pivotY: 0, visible: true,\n startPoint: {\n x: (collection[i].x1 + this.scroller.transform.tx) * this.scroller.currentZoom,\n y: (collection[i].y1 + this.scroller.transform.ty) * this.scroller.currentZoom\n },\n endPoint: {\n x: (collection[i].x2 + this.scroller.transform.tx) * this.scroller.currentZoom,\n y: (collection[i].y2 + this.scroller.transform.ty) * this.scroller.currentZoom\n }, id: collection[i].y1 === collection[i].y2 ? 'HorizontalLines' : 'VerticalLines'\n });\n }\n }\n }\n };\n Diagram.prototype.validatePageSize = function () {\n var temp = 0;\n if (this.pageSettings.orientation === 'Portrait') {\n if (this.pageSettings.width > this.pageSettings.height) {\n temp = this.pageSettings.height;\n this.pageSettings.height = this.pageSettings.width;\n this.pageSettings.width = temp;\n }\n }\n else {\n if (this.pageSettings.height > this.pageSettings.width) {\n temp = this.pageSettings.width;\n this.pageSettings.width = this.pageSettings.height;\n this.pageSettings.height = temp;\n }\n }\n };\n /**\n * @private\n */\n Diagram.prototype.setOverview = function (overview, id) {\n if (overview) {\n if (overview) {\n this.views.push(overview.id);\n this.views[overview.id] = overview;\n overview.renderDocument(overview);\n overview.diagramRenderer.setLayers();\n overview.updateView(overview);\n this.renderNodes(overview);\n }\n }\n else {\n for (var i = 0; i < this.views.length; i++) {\n if (this.views[i] === id) {\n overview = (this.views[id]);\n }\n }\n this.views[id] = undefined;\n var index = this.views.indexOf(id);\n this.views.splice(index, 1);\n }\n };\n Diagram.prototype.renderNodes = function (overview) {\n if (overview) {\n var renderer = new DiagramRenderer(overview.id, new SvgRenderer(), false);\n var g = document.getElementById(overview.element.id + '_diagramLayer');\n var htmlLayer = getHTMLLayer(overview.element.id);\n this.renderDiagramElements(g, overview.diagramRenderer || renderer, htmlLayer);\n }\n };\n Diagram.prototype.updateThumbConstraints = function (node, selectorModel) {\n var state = 0;\n var length = node.length;\n for (var i = 0; i < length; i++) {\n var obj = node[i];\n var hideRotate = false;\n var hideResize = false;\n var thumbConstraints = selectorModel.thumbsConstraints;\n if (obj instanceof Node) {\n hideRotate = (obj.shape.type === 'Bpmn' && (obj.shape.shape === 'Activity' &&\n (obj.shape.activity.subProcess.collapsed === false)) ||\n obj.shape.shape === 'TextAnnotation');\n hideResize = (obj.shape.type === 'Bpmn' && obj.shape.shape === 'TextAnnotation');\n if (!canRotate(obj) || !(thumbConstraints & ThumbsConstraints.Rotate) || hideRotate) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.Rotate;\n }\n if (!canResize(obj, 'SouthEast') || !(thumbConstraints & ThumbsConstraints.ResizeSouthEast) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeSouthEast;\n }\n if (!canResize(obj, 'NorthWest') || !(thumbConstraints & ThumbsConstraints.ResizeNorthWest) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeNorthWest;\n }\n if (!canResize(obj, 'East') || !(thumbConstraints & ThumbsConstraints.ResizeEast) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeEast;\n }\n if (!canResize(obj, 'West') || !(thumbConstraints & ThumbsConstraints.ResizeWest) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeWest;\n }\n if (!canResize(obj, 'North') || !(thumbConstraints & ThumbsConstraints.ResizeNorth) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeNorth;\n }\n if (!canResize(obj, 'South') || !(thumbConstraints & ThumbsConstraints.ResizeSouth) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeSouth;\n }\n if (!canResize(obj, 'NorthEast') || !(thumbConstraints & ThumbsConstraints.ResizeNorthEast) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeNorthEast;\n }\n if (!canResize(obj, 'SouthWest') || !(thumbConstraints & ThumbsConstraints.ResizeSouthWest) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeSouthWest;\n }\n }\n else if (obj instanceof Connector) {\n thumbConstraints = thumbConstraints | ThumbsConstraints.Default;\n if (canDragSourceEnd(obj)) {\n thumbConstraints = thumbConstraints | ThumbsConstraints.ConnectorSource;\n }\n else {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ConnectorSource;\n }\n if (canDragTargetEnd(obj)) {\n thumbConstraints = thumbConstraints | ThumbsConstraints.ConnectorTarget;\n }\n else {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ConnectorTarget;\n }\n }\n else {\n thumbConstraints = thumbConstraints | ThumbsConstraints.Default;\n if (!canResize(obj)) {\n thumbConstraints = thumbConstraints & ~(ThumbsConstraints.ResizeSouthEast | ThumbsConstraints.ResizeSouthWest |\n ThumbsConstraints.ResizeSouth | ThumbsConstraints.ResizeEast | ThumbsConstraints.ResizeWest |\n ThumbsConstraints.ResizeNorth | ThumbsConstraints.ResizeNorthEast | ThumbsConstraints.ResizeNorthWest);\n }\n if (!canRotate(obj)) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.Rotate;\n }\n }\n selectorModel.thumbsConstraints = thumbConstraints;\n }\n };\n /** @private */\n Diagram.prototype.renderSelector = function (multipleSelection) {\n var size = new Size();\n var selectorModel = this.selectedItems;\n var selectorConstraints = selectorModel.constraints;\n this.clearSelectorLayer();\n if (this.commandHandler.hasSelection()) {\n if (selectorModel.nodes.length === 1 && selectorModel.connectors.length === 0) {\n selectorModel.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.pivot = selectorModel.nodes[0].pivot;\n }\n selectorModel.wrapper.measure(size);\n selectorModel.wrapper.arrange(selectorModel.wrapper.desiredSize);\n selectorModel.width = selectorModel.wrapper.actualSize.width;\n selectorModel.height = selectorModel.wrapper.actualSize.height;\n selectorModel.offsetX = selectorModel.wrapper.offsetX;\n selectorModel.offsetY = selectorModel.wrapper.offsetY;\n if (selectorModel.rotateAngle !== 0) {\n for (var _i = 0, _a = selectorModel.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n obj.offsetX = obj.wrapper.offsetX;\n obj.offsetY = obj.wrapper.offsetY;\n }\n for (var _b = 0, _c = selectorModel.connectors; _b < _c.length; _b++) {\n var conn = _c[_b];\n //update connections\n }\n }\n var bounds = this.spatialSearch.getPageBounds();\n var selectorElement = void 0;\n selectorElement = getSelectorElement(this.element.id);\n selectorModel.thumbsConstraints = ThumbsConstraints.Default;\n if (selectorModel.annotation) {\n this.updateThumbConstraints([selectorModel.annotation], selectorModel);\n }\n else {\n this.updateThumbConstraints(selectorModel.nodes, selectorModel);\n this.updateThumbConstraints(selectorModel.connectors, selectorModel);\n }\n if (selectorModel.annotation) {\n this.renderSelectorForAnnotation(selectorModel, selectorElement);\n }\n else if (selectorModel.nodes.length + selectorModel.connectors.length === 1) {\n if (selectorModel.nodes[0] instanceof Node) {\n this.diagramRenderer.renderResizeHandle(selectorModel.nodes[0].wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, undefined, canMove(selectorModel.nodes[0]));\n }\n else if (selectorModel.connectors[0] instanceof Connector) {\n var connector = selectorModel.connectors[0];\n this.diagramRenderer.renderEndPointHandle(connector, selectorElement, selectorModel.thumbsConstraints, selectorModel.constraints, this.scroller.transform, connector.sourceWrapper !== undefined, connector.targetWrapper !== undefined, (this.connectorEditingToolModule && canDragSegmentThumb(connector)) ? true : false);\n }\n }\n else {\n this.diagramRenderer.renderResizeHandle(selectorModel.wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, undefined, canMove(selectorModel));\n }\n if (!(selectorModel.annotation)) {\n this.diagramRenderer.renderUserHandler(selectorModel, selectorElement, this.scroller.transform);\n }\n }\n };\n /** @private */\n Diagram.prototype.updateSelector = function () {\n var size = new Size();\n var selectorModel = this.selectedItems;\n var selectorConstraints = selectorModel.constraints;\n if (!(this.diagramActions & DiagramAction.ToolAction) && this.selectedItems.nodes.length === 1) {\n this.selectedItems.rotateAngle = this.selectedItems.nodes[0].rotateAngle;\n this.selectedItems.wrapper.rotateAngle = this.selectedItems.nodes[0].rotateAngle;\n }\n if (this.selectedItems !== undefined) {\n this.clearSelectorLayer();\n if (selectorModel.wrapper !== null && selectorModel.wrapper.children && selectorModel.wrapper.children.length) {\n selectorModel.wrapper.measure(size);\n selectorModel.wrapper.arrange(selectorModel.wrapper.desiredSize);\n if (selectorModel.rotateAngle !== 0 || selectorModel.rotateAngle !== selectorModel.wrapper.prevRotateAngle) {\n for (var _i = 0, _a = selectorModel.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n obj.offsetX = obj.wrapper.offsetX;\n obj.offsetY = obj.wrapper.offsetY;\n }\n }\n selectorModel.width = selectorModel.wrapper.actualSize.width;\n selectorModel.height = selectorModel.wrapper.actualSize.height;\n selectorModel.offsetX = selectorModel.wrapper.offsetX;\n selectorModel.offsetY = selectorModel.wrapper.offsetY;\n var selectorElement = void 0;\n selectorElement = getSelectorElement(this.element.id);\n var canHideResizers = this.eventHandler.canHideResizers();\n selectorModel.thumbsConstraints = ThumbsConstraints.Default;\n if (selectorModel.annotation) {\n this.updateThumbConstraints([selectorModel.annotation], selectorModel);\n }\n else {\n this.updateThumbConstraints(selectorModel.nodes, selectorModel);\n this.updateThumbConstraints(selectorModel.connectors, selectorModel);\n }\n if ((this.selectedItems.constraints & SelectorConstraints.UserHandle) && (!(selectorModel.annotation))) {\n this.diagramRenderer.renderUserHandler(selectorModel, selectorElement, this.scroller.transform);\n }\n if (selectorModel.annotation) {\n this.renderSelectorForAnnotation(selectorModel, selectorElement);\n }\n else if (selectorModel.nodes.length + selectorModel.connectors.length === 1) {\n if (selectorModel.connectors[0] instanceof Connector) {\n var connector = selectorModel.connectors[0];\n this.diagramRenderer.renderEndPointHandle(connector, selectorElement, selectorModel.thumbsConstraints, selectorConstraints, this.scroller.transform, connector.sourceWrapper !== undefined, connector.targetWrapper !== undefined, (this.connectorEditingToolModule && canDragSegmentThumb(connector)) ? true : false);\n }\n else if (selectorModel.nodes[0] instanceof Node) {\n this.diagramRenderer.renderResizeHandle(selectorModel.nodes[0].wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, canHideResizers, canMove(selectorModel.nodes[0]));\n }\n }\n else {\n this.diagramRenderer.renderResizeHandle(selectorModel.wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, canHideResizers, canMove(selectorModel));\n }\n }\n }\n };\n Diagram.prototype.renderSelectorForAnnotation = function (selectorModel, selectorElement) {\n this.diagramRenderer.renderResizeHandle(selectorModel.wrapper.children[0], selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, undefined, canMove(selectorModel.annotation));\n };\n /** @private */\n Diagram.prototype.drawSelectionRectangle = function (x, y, width, height) {\n this.clearSelectorLayer();\n this.diagramRenderer.drawSelectionRectangle(x, y, width, height, this.adornerLayer, this.scroller.transform);\n };\n /**\n * @private\n */\n Diagram.prototype.renderHighlighter = function (element) {\n var adornerSvg = getAdornerLayerSvg(this.element.id);\n this.diagramRenderer.renderHighlighter(element, adornerSvg, this.scroller.transform);\n };\n /**\n * @private\n */\n Diagram.prototype.clearHighlighter = function () {\n var adornerSvg = getAdornerLayerSvg(this.element.id);\n var highlighter = adornerSvg.getElementById(adornerSvg.id + '_highlighter');\n if (highlighter) {\n highlighter.parentNode.removeChild(highlighter);\n }\n };\n /** @private */\n Diagram.prototype.getNodesConnectors = function (selectedItems) {\n for (var i = 0; i < this.nodes.length; i++) {\n var node = this.nodes[i];\n selectedItems.push(node);\n }\n for (var i = 0; i < this.connectors.length; i++) {\n var conn = this.connectors[i];\n selectedItems.push(conn);\n }\n return selectedItems;\n };\n /** @private */\n Diagram.prototype.clearSelectorLayer = function () {\n var adornerSvg = getAdornerLayerSvg(this.element.id);\n var highlighter = adornerSvg.getElementById(adornerSvg.id + '_highlighter');\n var selectionRect = adornerSvg.getElementById(this.adornerLayer.id + '_selected_region');\n if (selectionRect) {\n selectionRect.parentNode.removeChild(selectionRect);\n }\n this.clearHighlighter();\n var childNodes = getSelectorElement(this.element.id).childNodes;\n var child;\n for (var i = childNodes.length; i > 0; i--) {\n child = childNodes[i - 1];\n child.parentNode.removeChild(child);\n }\n };\n /** @private */\n Diagram.prototype.getWrapper = function (nodes, id) {\n var wrapper;\n id = nodes.id + '_' + id;\n var container = nodes instanceof Canvas ? nodes : this.getPortContainer(this.nameTable[nodes.id]);\n for (var i = 0; i < container.children.length; i++) {\n if (id === container.children[i].id) {\n wrapper = container.children[i];\n }\n }\n return wrapper;\n };\n Diagram.prototype.getEndNodeWrapper = function (node, connector, source) {\n if (node.shape.type === 'Bpmn' && node.wrapper.children[0] instanceof Canvas) {\n if (node.shape.shape === 'Activity') {\n if (source && node.shape.activity.subProcess.type === 'Transaction'\n && connector.sourcePortID) {\n var portId = connector.sourcePortID;\n var parent_1 = node.wrapper.children[0].children[0].children[2];\n if (parent_1.children) {\n for (var _i = 0, _a = parent_1.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.visible && child.id === node.id + '_' + portId) {\n return child.children[0];\n }\n }\n }\n }\n return node.wrapper.children[0].children[0].children[0];\n }\n return node.wrapper.children[0].children[0];\n }\n if (!this.containsMargin(node.wrapper.children[0])) {\n if (!node.children) {\n return node.wrapper.children[0];\n }\n }\n return node.wrapper;\n };\n Diagram.prototype.containsMargin = function (node) {\n return node.margin && (node.margin.left !== 0 || node.margin.top !== 0 || node.margin.right !== 0 || node.margin.bottom !== 0);\n };\n Diagram.prototype.focusOutEdit = function () {\n this.endEdit();\n };\n Diagram.prototype.endEditCommand = function () {\n this.endEdit();\n };\n /**\n * @private\n */\n Diagram.prototype.endEdit = function () {\n if (this.diagramActions & DiagramAction.TextEdit) {\n var textArea = document.getElementById(this.element.id + '_editBox');\n var text = textArea.value;\n EventHandler.remove(textArea, 'input', this.eventHandler.inputChange);\n EventHandler.remove(textArea, 'focusout', this.focusOutEdit);\n var element = document.getElementById(this.element.id + '_editTextBoxDiv');\n var args = { oldValue: element.textContent, newValue: text, cancel: false };\n var bpmnAnnotation = false;\n var node = void 0;\n element.parentNode.removeChild(element);\n var textWrapper = void 0;\n if (this.bpmnModule) {\n node = this.bpmnModule.isBpmnTextAnnotation(this.activeLabel, this);\n textWrapper = this.bpmnModule.getTextAnnotationWrapper(node, this.activeLabel.id);\n bpmnAnnotation = node ? true : false;\n if (bpmnAnnotation) {\n if (element.textContent !== text) {\n this.triggerEvent(DiagramEvent.textEdit, args);\n if (!args.cancel) {\n this.bpmnModule.updateTextAnnotationContent(node, this.activeLabel, text, this);\n }\n }\n }\n }\n if (!bpmnAnnotation) {\n node = this.nameTable[this.activeLabel.parentId];\n var deleteNode = this.eventHandler.isAddTextNode(node, true);\n if (!deleteNode && element.textContent !== text) {\n this.triggerEvent(DiagramEvent.textEdit, args);\n }\n if (!textWrapper) {\n textWrapper = this.getWrapper(node.wrapper, this.activeLabel.id);\n }\n var annotation = findAnnotation(node, this.activeLabel.id);\n if (annotation.content !== text && !args.cancel) {\n annotation.content = text;\n this.dataBind();\n this.updateSelector();\n }\n if (deleteNode) {\n this.removeObjectsFromLayer(node);\n this.removeFromAQuad(node);\n delete this.nameTable[this.activeLabel.parentId];\n if (text !== '') {\n this.clearSelection();\n var clonedObject = cloneObject(node);\n node = this.add(clonedObject);\n this.updateDiagramObject(node);\n this.commandHandler.select(this.nameTable[node.id]);\n }\n }\n }\n textWrapper.visible = true;\n this.updateDiagramObject(node);\n this.diagramActions = this.diagramActions & ~DiagramAction.TextEdit;\n if (this.activeLabel.isGroup) {\n this.endGroupAction();\n }\n this.activeLabel = { id: '', parentId: '', isGroup: false };\n }\n };\n /** @private */\n Diagram.prototype.canLogChange = function () {\n if ((this.diagramActions & DiagramAction.Render) && (!(this.diagramActions & DiagramAction.ToolAction)) &&\n (!(this.diagramActions & DiagramAction.UndoRedo)) && (!(this.diagramActions & DiagramAction.PublicMethod))) {\n return true;\n }\n else {\n return false;\n }\n };\n Diagram.prototype.modelChanged = function (newProp, oldProp) {\n if (newProp.connectors || oldProp.connectors || newProp.nodes || oldProp.connectors\n || newProp.pageSettings || oldProp.pageSettings || newProp.bridgeDirection || oldProp.bridgeDirection) {\n return true;\n }\n return false;\n };\n Diagram.prototype.resetDiagramActions = function (action) {\n var isAction = action ? true : false;\n if (this.diagramActions & DiagramAction.UndoRedo && (!isAction || (action === DiagramAction.UndoRedo))) {\n this.diagramActions = this.diagramActions & ~DiagramAction.UndoRedo;\n }\n if (this.diagramActions & DiagramAction.PublicMethod && (!isAction || action === DiagramAction.PublicMethod)) {\n this.diagramActions = this.diagramActions & ~DiagramAction.PublicMethod;\n }\n };\n /** @private */\n Diagram.prototype.removeNode = function (node) {\n this.removeObjectsFromLayer(node);\n this.removeFromAQuad(this.nameTable[node.id]);\n delete this.nameTable[node.id];\n if (node.children) {\n delete this.groupTable[node.id];\n }\n this.nodes.splice(this.nodes.indexOf(node), 1);\n };\n /** @private */\n Diagram.prototype.deleteGroup = function (node) {\n var elements = [];\n var tempNode = [];\n if (node.children) {\n tempNode = this.commandHandler.getChildren(node, elements);\n }\n for (var _i = 0, tempNode_1 = tempNode; _i < tempNode_1.length; _i++) {\n var nodes = tempNode_1[_i];\n if (this.nameTable[nodes.id]) {\n this.remove(nodes);\n }\n }\n };\n //helper methods - end region\n //property changes - start region\n /** @private */\n Diagram.prototype.updateObject = function (actualObject, oldObject, changedProp) {\n if (!(this.diagramActions & DiagramAction.ToolAction)) {\n var bound = actualObject.wrapper.children[0].bounds;\n var checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, bound);\n if (!checkBoundaryConstraints) {\n if (actualObject instanceof Node) {\n var oldNode = oldObject;\n for (var _i = 0, _a = Object.keys(changedProp); _i < _a.length; _i++) {\n var key = _a[_i];\n switch (key) {\n case 'width':\n actualObject.width = oldNode.width;\n break;\n case 'height':\n actualObject.height = oldNode.height;\n break;\n case 'offsetX':\n actualObject.offsetX = oldNode.offsetX;\n break;\n case 'offsetY':\n actualObject.offsetY = oldNode.offsetY;\n break;\n case 'rotateAngle':\n actualObject.rotateAngle = oldNode.rotateAngle;\n break;\n }\n }\n this.nodePropertyChange(actualObject, changedProp, oldObject);\n }\n else {\n for (var _b = 0, _c = Object.keys(changedProp); _b < _c.length; _b++) {\n var key = _c[_b];\n var oldConnector = oldObject;\n var actualSourcePoint = actualObject.sourcePoint;\n var actualTargetPoint = actualObject.targetPoint;\n switch (key) {\n case 'sourcePoint':\n actualSourcePoint.x = oldConnector.sourcePoint.x || actualSourcePoint.x;\n actualSourcePoint.y = oldConnector.sourcePoint.y || actualSourcePoint.y;\n break;\n case 'targetPoint':\n actualTargetPoint.x = oldConnector.targetPoint.x || actualTargetPoint.x;\n actualTargetPoint.y = oldConnector.targetPoint.y || actualTargetPoint.y;\n }\n }\n this.connectorPropertyChange(actualObject, changedProp, oldObject);\n }\n }\n }\n };\n Diagram.prototype.nodePropertyChangeExtend = function (actualObject, oldObject, node, update) {\n if (node.style !== undefined && actualObject.shape.type !== 'Bpmn') {\n updateStyle(node.style, actualObject.wrapper.children[0]);\n update = true;\n }\n if (node.constraints !== undefined) {\n if ((oldObject.constraints & NodeConstraints.Select) &&\n (!(node.constraints & NodeConstraints.Select)) && isSelected(this, actualObject)) {\n this.clearSelection();\n }\n else {\n this.updateThumbConstraints(this.selectedItems.nodes, this.selectedItems);\n this.updateSelector();\n update = true;\n }\n }\n return update;\n };\n /* tslint:disable */\n /** @private */\n Diagram.prototype.nodePropertyChange = function (actualObject, oldObject, node, isLayout, rotate) {\n var existingBounds = actualObject.wrapper.outerBounds;\n var existingInnerBounds = actualObject.wrapper.bounds;\n var updateConnector = false;\n var i;\n var j;\n var offsetX;\n var offsetY;\n var update;\n var tx;\n var ty;\n if (node.width !== undefined) {\n if (!actualObject.children) {\n actualObject.wrapper.children[0].width = node.width;\n update = true;\n updateConnector = true;\n }\n else {\n this.scaleObject(actualObject, node.width, true);\n }\n }\n if (node.height !== undefined) {\n if (!actualObject.children) {\n actualObject.wrapper.children[0].height = node.height;\n update = true;\n updateConnector = true;\n }\n else {\n this.scaleObject(actualObject, node.height, false);\n }\n }\n update = this.nodePropertyChangeExtend(actualObject, oldObject, node, update);\n if (node.constraints !== undefined && canShadow(oldObject) !== canShadow(node)) {\n actualObject.wrapper.children[0].shadow = canShadow(actualObject) ? actualObject.shadow : null;\n }\n if (node.offsetX !== undefined) {\n actualObject.wrapper.offsetX = node.offsetX;\n update = true;\n updateConnector = true;\n }\n if (node.offsetY !== undefined) {\n actualObject.wrapper.offsetY = node.offsetY;\n update = true;\n updateConnector = true;\n }\n if (node.pivot !== undefined) {\n actualObject.wrapper.pivot = node.pivot;\n update = true;\n }\n if (node.minWidth !== undefined) {\n actualObject.wrapper.minWidth = node.minWidth;\n update = true;\n updateConnector = true;\n }\n if (node.minHeight !== undefined) {\n actualObject.wrapper.minHeight = node.minHeight;\n update = true;\n updateConnector = true;\n }\n if (node.maxWidth !== undefined) {\n actualObject.wrapper.maxWidth = node.maxWidth;\n update = true;\n updateConnector = true;\n }\n if (node.maxHeight !== undefined) {\n actualObject.wrapper.maxHeight = node.maxHeight;\n update = true;\n updateConnector = true;\n }\n if (node.rotateAngle !== undefined) {\n if (actualObject.children && rotate) {\n this.commandHandler.rotateObjects(actualObject, [actualObject], actualObject.rotateAngle, { x: actualObject.offsetX, y: actualObject.offsetY }, false);\n }\n actualObject.wrapper.rotateAngle = node.rotateAngle;\n update = true;\n updateConnector = true;\n }\n if (node.backgroundColor !== undefined) {\n actualObject.wrapper.style.fill = node.backgroundColor;\n }\n if (node.visible !== undefined) {\n this.updateElementVisibility(actualObject.wrapper, actualObject, actualObject.visible);\n }\n if (node.shape !== undefined && actualObject.shape.type !== 'Bpmn') {\n update = true;\n updateShape(node, actualObject, oldObject, this);\n updateConnector = true;\n }\n if (node.margin) {\n update = true;\n this.updateMargin(actualObject, node);\n updateConnector = true;\n }\n if (((node.shape !== undefined && node.shape.type === undefined) || node.width !== undefined\n || node.height !== undefined || node.style !== undefined) && actualObject.shape.type === 'Bpmn' && this.bpmnModule) {\n update = true;\n updateConnector = true;\n this.bpmnModule.updateBPMN(node, oldObject, actualObject, this);\n }\n if (node.ports !== undefined) {\n for (var _i = 0, _a = Object.keys(node.ports); _i < _a.length; _i++) {\n var key = _a[_i];\n var index = Number(key);\n update = true;\n var changedObject = node.ports[key];\n var actualPort = actualObject.ports[index];\n this.updatePort(changedObject, actualPort, actualObject.wrapper);\n }\n }\n if (node.annotations !== undefined || node.width !== undefined) {\n for (var _b = 0, _c = Object.keys(node.annotations || actualObject.annotations); _b < _c.length; _b++) {\n var key = _c[_b];\n var index = Number(key);\n update = true;\n var changedObject = node.annotations ? node.annotations[key] : actualObject.annotations;\n var actualAnnotation = actualObject.annotations[index];\n if (actualAnnotation) {\n var updateSize = actualObject.width ? true : false;\n this.updateAnnotation(changedObject, actualAnnotation, actualObject.wrapper, actualObject, updateSize);\n }\n }\n }\n if (node.expandIcon !== undefined || node.collapseIcon !== undefined || node.isExpanded !== undefined) {\n this.updateIcon(actualObject);\n this.updateDefaultLayoutIcons(actualObject);\n if (node.isExpanded !== undefined) {\n this.commandHandler.expandNode(actualObject, this);\n }\n update = true;\n }\n if (node.tooltip !== undefined) {\n this.updateTooltip(actualObject, node);\n }\n if (update) {\n if (!(this.diagramActions & DiagramAction.ToolAction)) {\n if (this.checkSelectedItem(actualObject)) {\n this.updateSelector();\n }\n }\n if (this.bpmnModule !== undefined) {\n this.bpmnModule.updateTextAnnotationProp(actualObject, { offsetX: (oldObject.offsetX || actualObject.offsetX), offsetY: (oldObject.offsetY || actualObject.offsetY) }, this);\n }\n actualObject.wrapper.measure(new Size(actualObject.wrapper.bounds.width, actualObject.wrapper.bounds.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n this.updateObject(actualObject, oldObject, node);\n if (!isLayout) {\n this.commandHandler.connectorSegmentChange(actualObject, existingInnerBounds, (node.rotateAngle !== undefined) ? true : false);\n if (updateConnector) {\n this.updateConnectorEdges(actualObject);\n }\n }\n else {\n if (actualObject && actualObject.visible && actualObject.outEdges) {\n this.updateIconVisibility(actualObject, (actualObject.outEdges.length === 0 ? false : true));\n }\n }\n if (this.bpmnModule !== undefined) {\n this.bpmnModule.updateDocks(actualObject, this);\n }\n this.updateGroupOffset(actualObject);\n if (existingBounds.equals(existingBounds, actualObject.wrapper.outerBounds) === false) {\n this.updateQuad(actualObject);\n }\n if (existingInnerBounds.equals(existingInnerBounds, actualObject.wrapper.bounds) === false) {\n this.updateGroupSize(actualObject);\n if (actualObject.children) {\n this.updateGroupOffset(actualObject);\n }\n }\n if (this.mode === 'SVG' && !this.preventNodesUpdate) {\n this.updateDiagramObject(actualObject);\n }\n }\n };\n Diagram.prototype.updateConnectorProperties = function (connector) {\n if (this.preventConnectorsUpdate) {\n var index = this.selectionConnectorsList.indexOf(connector);\n if (index === -1) {\n this.selectionConnectorsList.push(connector);\n }\n }\n else {\n var conn = {\n sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint, sourceID: connector.sourceID,\n targetID: connector.targetID, sourcePortID: connector.sourcePortID, targetPortID: connector.targetPortID\n };\n this.connectorPropertyChange(connector, {}, conn);\n }\n };\n Diagram.prototype.updateConnectorEdges = function (actualObject) {\n if (actualObject.inEdges.length > 0) {\n for (var j = 0; j < actualObject.inEdges.length; j++) {\n this.updateConnectorProperties(this.nameTable[actualObject.inEdges[j]]);\n }\n }\n if (actualObject.outEdges.length > 0) {\n for (var k = 0; k < actualObject.outEdges.length; k++) {\n this.updateConnectorProperties(this.nameTable[actualObject.outEdges[k]]);\n }\n }\n if (actualObject.parentId && this.nameTable[actualObject.parentId]) {\n this.updateConnectorEdges(this.nameTable[actualObject.parentId]);\n }\n };\n /* tslint:enable */\n Diagram.prototype.connectorProprtyChangeExtend = function (actualObject, oldProp, newProp, updateSelector) {\n if (newProp.type !== undefined && newProp.type !== oldProp.type) {\n if (actualObject.segments.length > 0 && newProp.segments === undefined) {\n actualObject.segments = [];\n }\n }\n if ((newProp.shape !== undefined) && actualObject.shape !== undefined &&\n actualObject.shape && actualObject.shape.type === 'Bpmn' && this.bpmnModule) {\n this.bpmnModule.updateBPMNConnector(actualObject, oldProp, newProp, this);\n }\n if (actualObject.constraints !== undefined) {\n this.updateThumbConstraints(this.selectedItems.connectors, this.selectedItems);\n return updateSelector = true;\n }\n return updateSelector;\n };\n /** @private */\n Diagram.prototype.connectorPropertyChange = function (actualObject, oldProp, newProp, disableBridging) {\n var existingBounds = actualObject.wrapper.bounds;\n var updateSelector = false;\n var points = [];\n updateSelector = this.connectorProprtyChangeExtend(actualObject, oldProp, newProp, updateSelector);\n if (newProp.visible !== undefined) {\n this.updateElementVisibility(actualObject.wrapper, newProp, actualObject.visible);\n }\n if (newProp.sourcePoint !== undefined || newProp.targetPoint !== undefined\n || newProp.sourceID !== undefined || newProp.targetID !== undefined ||\n newProp.sourcePortID !== undefined || newProp.targetPortID !== undefined ||\n newProp.type !== undefined || newProp.segments !== undefined) {\n if ((newProp.sourceID !== undefined && newProp.sourceID !== oldProp.sourceID) || newProp.sourcePortID) {\n var sourceNode = this.nameTable[actualObject.sourceID];\n if (!sourceNode || canOutConnect(sourceNode)) {\n actualObject.sourceWrapper = sourceNode ? this.getEndNodeWrapper(sourceNode, actualObject, true) : undefined;\n }\n if (newProp.sourceID !== undefined && oldProp.sourceID !== undefined && oldProp.sourceID !== '') {\n var oldSource = this.nameTable[oldProp.sourceID];\n if (oldSource !== undefined && oldSource.outEdges && oldSource.outEdges.indexOf(actualObject.id) !== -1) {\n removeItem(oldSource.outEdges, actualObject.id);\n }\n }\n this.updateEdges(actualObject);\n }\n if (newProp.targetID !== undefined && newProp.targetID !== oldProp.targetID) {\n var targetNode = this.nameTable[newProp.targetID];\n if (!targetNode || canInConnect(targetNode)) {\n actualObject.targetWrapper = targetNode ? this.getEndNodeWrapper(targetNode, actualObject, false) : undefined;\n }\n if (oldProp !== undefined && oldProp.targetID !== undefined && oldProp.targetID !== '') {\n var oldTarget = this.nameTable[oldProp.targetID];\n if (oldTarget !== undefined && oldTarget.inEdges && oldTarget.inEdges.indexOf(actualObject.id) !== -1) {\n removeItem(oldTarget.inEdges, actualObject.id);\n }\n }\n this.updateEdges(actualObject);\n }\n if (newProp.sourcePortID !== undefined && newProp.sourcePortID !== oldProp.sourcePortID) {\n var source = void 0;\n if (actualObject.sourceID && this.nameTable[actualObject.sourceID]) {\n source = this.nameTable[actualObject.sourceID].wrapper;\n }\n actualObject.sourcePortWrapper = source ?\n this.getWrapper(source, newProp.sourcePortID) : undefined;\n }\n if (newProp.targetPortID !== undefined && newProp.targetPortID !== oldProp.targetPortID) {\n var target = void 0;\n if (actualObject.targetID && this.nameTable[actualObject.targetID]) {\n target = this.nameTable[actualObject.targetID].wrapper;\n }\n actualObject.targetPortWrapper = target ?\n this.getWrapper(target, newProp.targetPortID) : undefined;\n }\n points = this.getPoints(actualObject);\n }\n //Add prop change for zindex, alignments and margin\n if (newProp.style !== undefined) {\n updateStyle(newProp.style, actualObject.wrapper.children[0]);\n }\n if (points.length > 0 || newProp.sourceDecorator !== undefined || newProp.targetDecorator !== undefined ||\n newProp.cornerRadius !== undefined) {\n updateConnector(actualObject, points.length > 0 ? points : actualObject.intermediatePoints);\n if (newProp.type !== undefined) {\n updateSelector = true;\n }\n if (points.length > 0) {\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n if (actualObject.annotations.length) {\n for (var _i = 0, _a = actualObject.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n var annotationWrapper = void 0;\n annotationWrapper = this.getWrapper(actualObject.wrapper, annotation.id);\n actualObject.updateAnnotation(annotation, actualObject.intermediatePoints, actualObject.wrapper.bounds, annotationWrapper);\n }\n }\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n this.updateObject(actualObject, oldProp, newProp);\n } //work-around to update intersected connector bridging\n }\n if ((newProp.sourcePoint || newProp.targetPoint || newProp.segments)\n && this.diagramActions === DiagramAction.Render) {\n updateSelector = true;\n }\n if (!disableBridging) {\n this.updateBridging();\n }\n this.updateAnnotations(newProp, actualObject);\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n if (existingBounds.equals(existingBounds, actualObject.wrapper.bounds) === false) {\n this.updateQuad(actualObject);\n this.updateGroupSize(actualObject);\n }\n if (updateSelector === true && this.checkSelectedItem(actualObject) && (!(this.diagramActions & DiagramAction.ToolAction))) {\n this.updateSelector();\n }\n if (this.mode === 'SVG' && !this.preventConnectorsUpdate) {\n this.updateDiagramObject(actualObject);\n }\n };\n Diagram.prototype.getPoints = function (actualObject, points) {\n var pts;\n pts = actualObject.getConnectorPoints(actualObject.type, points, this.layout.type === 'ComplexHierarchicalTree' || this.layout.type === 'HierarchicalTree' ?\n this.layout.orientation : undefined);\n return pts;\n };\n /**\n * update the opacity and visibility for the node once the layout animation starts\n */\n /** @private */\n Diagram.prototype.updateNodeProperty = function (element, visible, opacity) {\n if (visible === undefined) {\n this.updateElementVisibility(element, this.nameTable[element.id], visible);\n }\n else {\n element.style.opacity = opacity;\n for (var i = 0; i < element.children.length; i++) {\n if (element.children[i] instanceof Container) {\n this.updateNodeProperty(element.children[i], undefined, opacity);\n }\n element.children[i].style.opacity = opacity;\n }\n }\n };\n /**\n * checkSelected Item for Connector\n * @private\n */\n Diagram.prototype.checkSelectedItem = function (actualObject) {\n var selectorModel = this.selectedItems;\n var isSelected = false;\n var selItems = [];\n selItems = selItems.concat(selectorModel.nodes, selectorModel.connectors);\n if (selItems.length > 0) {\n if (actualObject.id === selItems[selItems.length - 1].id) {\n isSelected = true;\n }\n }\n return isSelected;\n };\n /**\n * Updates the visibility of the diagram container\n * @private\n */\n Diagram.prototype.updateDiagramContainerVisibility = function (element, visible) {\n if (element instanceof Container) {\n for (var i = 0; i < element.children.length; i++) {\n this.updateDiagramContainerVisibility(element.children[i], visible);\n }\n }\n element.visible = visible;\n };\n /**\n * Updates the visibility of the node/connector\n * @private\n */\n Diagram.prototype.updateElementVisibility = function (element, obj, visible) {\n if (visible !== undefined) {\n element.visible = visible;\n if (obj instanceof Node) {\n //content\n if (!obj.children) {\n element.children[0].visible = visible;\n this.updateDiagramContainerVisibility(element.children[0], visible);\n if (obj.shape.type === 'Bpmn' && this.bpmnModule) {\n this.bpmnModule.updateElementVisibility(obj, visible, this);\n }\n }\n else {\n for (var _i = 0, _a = obj.children; _i < _a.length; _i++) {\n var child = _a[_i];\n this.updateElementVisibility(this.nameTable[child].wrapper, this.nameTable[child], visible);\n }\n }\n //ports\n if (obj.ports) {\n for (var _b = 0, _c = obj.ports; _b < _c.length; _b++) {\n var port = _c[_b];\n if (port.visibility & PortVisibility.Visible) {\n var wrapper = this.getWrapper(element, port.id);\n wrapper.visible = visible;\n }\n }\n }\n if (obj.annotations) {\n for (var _d = 0, _e = obj.annotations; _d < _e.length; _d++) {\n var annotation = _e[_d];\n var wrapper = this.getWrapper(element, annotation.id);\n wrapper.visible = visible;\n }\n }\n }\n else {\n //path and decorators\n for (var i = 0; i < 3; i++) {\n element.children[i].visible = visible;\n }\n }\n if (obj.annotations) {\n //annotations\n for (var _f = 0, _g = obj.annotations; _f < _g.length; _f++) {\n var annotation = _g[_f];\n var wrapper = this.getWrapper(element, annotation.id);\n wrapper.visible = visible;\n }\n }\n if (obj.expandIcon || obj.collapseIcon) {\n var wrapper = this.getWrapper(element, 'icon_content');\n if (wrapper) {\n for (var i = 0; i < wrapper.children.length; i++) {\n wrapper.children[i].visible = visible;\n }\n wrapper.visible = visible;\n }\n if (obj && obj.visible && obj.outEdges) {\n this.updateIconVisibility(obj, (obj.outEdges.length === 0 ? false : true));\n }\n }\n if (visible === false) {\n this.unSelect(this.nameTable[element.id]);\n }\n if ((obj instanceof Node && !this.preventNodesUpdate) || (obj instanceof Connector && !this.preventConnectorsUpdate)) {\n //Avoid calling updateDiagramObject method during rendering\n if (this.diagramActions) {\n this.updateDiagramObject(this.nameTable[element.id]);\n }\n }\n }\n };\n Diagram.prototype.updateAnnotations = function (newProp, actualObject) {\n if (newProp.annotations !== undefined) {\n for (var _i = 0, _a = Object.keys(newProp.annotations); _i < _a.length; _i++) {\n var key = _a[_i];\n var index = Number(key);\n var changedObject = newProp.annotations[key];\n var actualAnnotation = actualObject.annotations[index];\n this.updateAnnotation(changedObject, actualAnnotation, actualObject.wrapper, actualObject);\n }\n }\n };\n /** @private */\n Diagram.prototype.updateAnnotation = function (changedObject, actualAnnotation, nodes, actualObject, canUpdateSize) {\n var annotationWrapper;\n var isMeasure = false;\n annotationWrapper = this.getWrapper(nodes, actualAnnotation.id);\n if (annotationWrapper !== undefined) {\n if (changedObject.width !== undefined && changedObject.height !== undefined) {\n annotationWrapper.width = changedObject.width;\n annotationWrapper.height = changedObject.height;\n isMeasure = true;\n }\n if (changedObject.rotateAngle !== undefined) {\n annotationWrapper.rotateAngle = changedObject.rotateAngle;\n }\n if (canUpdateSize) {\n annotationWrapper.refreshTextElement();\n }\n if (actualAnnotation instanceof PathAnnotation && changedObject.segmentAngle !== undefined) {\n annotationWrapper.rotateAngle = actualAnnotation.rotateAngle;\n }\n if (actualAnnotation instanceof ShapeAnnotation &&\n changedObject.offset !== undefined) {\n var offset = changedObject.offset;\n isMeasure = true;\n var offsetX = offset.x !== undefined ? offset.x :\n actualAnnotation.offset.x;\n var offsetY = offset.y !== undefined ? offset.y :\n actualAnnotation.offset.y;\n annotationWrapper.setOffsetWithRespectToBounds(offsetX, offsetY, 'Fraction');\n annotationWrapper.relativeMode = 'Point';\n }\n else if (actualAnnotation instanceof PathAnnotation &&\n (changedObject.offset !== undefined ||\n changedObject.segmentAngle !== undefined)) {\n actualObject.updateAnnotation(actualAnnotation, actualObject.intermediatePoints, actualObject.wrapper.bounds, annotationWrapper);\n }\n if ((actualAnnotation instanceof PathAnnotation) && changedObject.displacement) {\n if (changedObject.displacement.x !== undefined ||\n changedObject.displacement.y !== undefined) {\n isMeasure = true;\n }\n }\n if (changedObject.margin !== undefined) {\n isMeasure = true;\n if (changedObject.margin.bottom !== undefined) {\n annotationWrapper.margin.bottom = changedObject.margin.bottom;\n }\n if (changedObject.margin.top !== undefined) {\n annotationWrapper.margin.top = changedObject.margin.top;\n }\n if (changedObject.margin.left !== undefined) {\n annotationWrapper.margin.left = changedObject.margin.left;\n }\n if (changedObject.margin.right !== undefined) {\n annotationWrapper.margin.right = changedObject.margin.right;\n }\n }\n if (isMeasure || canUpdateSize) {\n annotationWrapper.width = (actualAnnotation.width || actualObject.width);\n }\n if (changedObject.horizontalAlignment !== undefined) {\n annotationWrapper.horizontalAlignment = changedObject.horizontalAlignment;\n isMeasure = true;\n }\n if (changedObject.verticalAlignment !== undefined) {\n annotationWrapper.verticalAlignment = changedObject.verticalAlignment;\n isMeasure = true;\n }\n if (changedObject.visibility !== undefined) {\n annotationWrapper.visible = (nodes.visible && changedObject.visibility) ? true : false;\n }\n if (changedObject.constraints !== undefined) {\n var updateSelector = false;\n if ((annotationWrapper.constraints & AnnotationConstraints.Select) &&\n (!(changedObject.constraints & AnnotationConstraints.Select)) &&\n isSelected(this, actualObject, false, annotationWrapper)) {\n updateSelector = true;\n }\n annotationWrapper.constraints = changedObject.constraints;\n if (updateSelector) {\n this.clearSelection();\n }\n }\n if (changedObject.style !== undefined) {\n updateStyle(changedObject.style, annotationWrapper);\n }\n if (changedObject.hyperlink !== undefined) {\n updateHyperlink(changedObject.hyperlink, annotationWrapper, actualAnnotation);\n }\n if (changedObject.content !== undefined) {\n if (annotationWrapper) {\n isMeasure = true;\n annotationWrapper.content = changedObject.content;\n }\n }\n if (isMeasure === true) {\n annotationWrapper.measure(new Size(annotationWrapper.width, annotationWrapper.height));\n annotationWrapper.arrange(annotationWrapper.desiredSize);\n }\n annotationWrapper.refreshTextElement();\n // this.refresh(); this.refreshDiagramLayer();\n }\n };\n /** @private */\n Diagram.prototype.updatePort = function (changedObject, actualPort, nodes) {\n var portWrapper;\n var isMeasure = false;\n portWrapper = this.getWrapper(nodes, actualPort.id);\n if (portWrapper !== undefined) {\n if (changedObject.offset !== undefined) {\n isMeasure = true;\n var offsetX = changedObject.offset.x !== undefined ? changedObject.offset.x :\n actualPort.offset.x;\n var offsetY = changedObject.offset.y !== undefined ? changedObject.offset.y :\n actualPort.offset.y;\n portWrapper.setOffsetWithRespectToBounds(offsetX, offsetY, 'Fraction');\n portWrapper.relativeMode = 'Point';\n }\n if (changedObject.width !== undefined) {\n isMeasure = true;\n portWrapper.width = changedObject.width;\n }\n if (changedObject.height !== undefined) {\n isMeasure = true;\n portWrapper.height = changedObject.height;\n }\n if (changedObject.visibility !== undefined) {\n portWrapper.visible = (nodes.visible && checkPortRestriction(actualPort, PortVisibility.Visible)) ? true : false;\n }\n if (changedObject.margin !== undefined) {\n isMeasure = true;\n if (changedObject.margin.bottom !== undefined) {\n portWrapper.margin.bottom = changedObject.margin.bottom;\n }\n if (changedObject.margin.top !== undefined) {\n portWrapper.margin.top = changedObject.margin.top;\n }\n if (changedObject.margin.right !== undefined) {\n portWrapper.margin.right = changedObject.margin.right;\n }\n if (changedObject.margin.left !== undefined) {\n portWrapper.margin.left = changedObject.margin.left;\n }\n }\n if (changedObject.horizontalAlignment !== undefined) {\n isMeasure = true;\n portWrapper.horizontalAlignment = changedObject.horizontalAlignment;\n }\n if (changedObject.verticalAlignment !== undefined) {\n isMeasure = true;\n portWrapper.verticalAlignment = changedObject.verticalAlignment;\n }\n if (changedObject.style !== undefined) {\n if (changedObject.style.fill !== undefined) {\n portWrapper.style.fill = changedObject.style.fill;\n }\n if (changedObject.style.opacity !== undefined) {\n portWrapper.style.opacity = changedObject.style.opacity;\n }\n if (changedObject.style.strokeColor !== undefined) {\n portWrapper.style.strokeColor = changedObject.style.strokeColor;\n }\n if (changedObject.style.strokeWidth !== undefined) {\n portWrapper.style.strokeWidth = changedObject.style.strokeWidth;\n }\n if (changedObject.style.strokeDashArray !== undefined) {\n portWrapper.style.strokeDashArray = changedObject.style.strokeDashArray;\n }\n }\n if (changedObject.shape !== undefined) {\n if (portWrapper) {\n var pathdata = getPortShape(changedObject.shape);\n portWrapper.data = pathdata;\n }\n }\n if (changedObject.pathData !== undefined) {\n portWrapper.data = String(changedObject.pathData);\n isMeasure = true;\n }\n if (isMeasure === true) {\n portWrapper.measure(new Size(portWrapper.width, portWrapper.height));\n portWrapper.arrange(portWrapper.desiredSize);\n }\n //this.refresh(); this.refreshDiagramLayer();\n }\n };\n /** @private */\n Diagram.prototype.updateIcon = function (actualObject) {\n var iconContainer = this.getWrapper(actualObject.wrapper, 'icon_content');\n var diagramId = (this.diagramActions & DiagramAction.Render) ? this.element.id : undefined;\n if (iconContainer) {\n if (this.mode === 'SVG') {\n var icon = getDiagramElement(actualObject.wrapper.id + '_icon_content', diagramId);\n if (icon) {\n var iconRect = getDiagramElement(icon.id + '_rect', diagramId);\n var iconShape = getDiagramElement(icon.id + '_shape', diagramId);\n var nativeContent = getDiagramElement(iconShape.id + '_native_element', diagramId);\n if (nativeContent) {\n nativeContent.parentNode.removeChild(nativeContent);\n }\n iconShape.parentNode.removeChild(iconShape);\n iconRect.parentNode.removeChild(iconRect);\n icon.parentNode.removeChild(icon);\n }\n }\n var index = actualObject.wrapper.children.indexOf(iconContainer);\n actualObject.wrapper.children.splice(index, 1);\n }\n var portContainer = this.getPortContainer(actualObject);\n actualObject.initIcons(this.getDescription, this.layout, portContainer, this.element.id);\n };\n Diagram.prototype.getPortContainer = function (actualObject) {\n if (actualObject.children) {\n for (var i = 0; i < actualObject.wrapper.children.length; i++) {\n if (actualObject.wrapper.children[i].id === 'group_container') {\n return actualObject.wrapper.children[i];\n }\n }\n }\n return actualObject.wrapper;\n };\n Diagram.prototype.updateTooltip = function (actualObject, node) {\n if (node.tooltip.content !== undefined) {\n actualObject.tooltip.content = node.tooltip.content;\n }\n if (node.tooltip.position !== undefined) {\n actualObject.tooltip.position = node.tooltip.position;\n }\n if (node.tooltip.height !== undefined) {\n actualObject.tooltip.height = node.tooltip.height;\n }\n if (node.tooltip.width !== undefined) {\n actualObject.tooltip.width = node.tooltip.width;\n }\n if (node.tooltip.showTipPointer !== undefined) {\n actualObject.tooltip.showTipPointer = node.tooltip.showTipPointer;\n }\n };\n /** @private */\n Diagram.prototype.updateQuad = function (obj) {\n var modified = this.spatialSearch.updateQuad(obj.wrapper);\n if (modified && !this.preventUpdate) {\n this.updatePage();\n }\n };\n /** @private */\n Diagram.prototype.removeFromAQuad = function (obj) {\n this.spatialSearch.removeFromAQuad(obj.wrapper);\n var modified = this.spatialSearch.updateBounds(obj.wrapper);\n if (modified && !this.preventUpdate) {\n this.updatePage();\n }\n if (obj.children) {\n var child = void 0;\n var children = obj.children;\n for (var i = 0; i < children.length; i++) {\n child = this.nameTable[children[i]];\n if (child) {\n this.removeFromAQuad(child);\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.updateGroupSize = function (node) {\n var tempNode;\n if (node.parentId) {\n tempNode = this.nameTable[node.parentId];\n if (tempNode) {\n if (tempNode.parentId) {\n this.updateGroupSize(tempNode);\n }\n else {\n tempNode.wrapper.measure(new Size());\n tempNode.wrapper.arrange(tempNode.wrapper.desiredSize);\n this.updateGroupOffset(tempNode);\n this.updateDiagramObject(tempNode);\n }\n }\n }\n };\n Diagram.prototype.updatePage = function () {\n if (this.diagramActions & DiagramAction.Render) {\n this.scroller.setSize();\n this.scroller.updateScrollOffsets();\n //updating overview\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n var view = this.views[temp];\n if (!(view instanceof Diagram)) {\n view.updateView(view);\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.protectPropertyChange = function (enable) {\n this.isProtectedOnChange = enable;\n };\n /** @private */\n Diagram.prototype.updateMargin = function (node, changes) {\n if (changes.margin.top !== undefined) {\n node.margin.top = changes.margin.top;\n }\n if (changes.margin.bottom !== undefined) {\n node.margin.bottom = changes.margin.bottom;\n }\n if (changes.margin.left !== undefined) {\n node.margin.left = changes.margin.left;\n }\n if (changes.margin.right !== undefined) {\n node.margin.right = changes.margin.right;\n }\n };\n //property changes - end region\n /* tslint:disable */\n Diagram.prototype.initDroppables = function () {\n var _this = this;\n // initiates droppable event\n var childTable = {};\n var entryTable = {};\n this.droppable = new Droppable(this.element);\n this.droppable.accept = '.e-dragclone';\n // tslint:disable-next-line:no-any\n this.droppable.over = function (args) {\n if (!_this.currentSymbol) {\n if (args.dragData) {\n var newObj = void 0;\n var position = _this.eventHandler.getMousePosition(args.event);\n var clonedObject = void 0;\n var selectedSymbol = args.dragData.helper;\n var paletteId = selectedSymbol.getAttribute('paletteId');\n if (paletteId) {\n var sourceElement = document.getElementById(paletteId).ej2_instances[0];\n var source = 'sourceElement';\n _this.droppable[source] = sourceElement;\n var selectedSymbols = 'selectedSymbols';\n var childtable = 'childTable';\n if (sourceElement) {\n var obj = sourceElement[selectedSymbols];\n clonedObject = cloneObject(sourceElement[selectedSymbols]);\n childTable = sourceElement[childtable];\n var wrapper = obj.wrapper.children[0].children[0];\n if (sourceElement[selectedSymbols] instanceof Node) {\n clonedObject.offsetX = position.x + 5 + (clonedObject.width || wrapper.actualSize.width) / 2;\n clonedObject.offsetY = position.y + (clonedObject.height || wrapper.actualSize.height) / 2;\n var newNode = new Node(_this, 'nodes', clonedObject, true);\n if (newNode.shape.type === 'Bpmn' && newNode.shape.activity.subProcess.processes\n && newNode.shape.activity.subProcess.processes.length) {\n newNode.shape.activity.subProcess.processes = [];\n }\n newObj = newNode;\n if (clonedObject.children) {\n var parentNode = clonedObject;\n var tempTable = {};\n entryTable = _this.getChildren(parentNode, tempTable, childTable);\n arrangeChild(parentNode, -parentNode.offsetX, -parentNode.offsetY, entryTable, true, _this);\n }\n }\n else if (sourceElement[selectedSymbols] instanceof Connector) {\n newObj = new Connector(_this, 'connectors', clonedObject, true);\n var bounds = Rect.toBounds([newObj.sourcePoint, newObj.targetPoint]);\n var tx = position.x - bounds.center.x;\n var ty = position.y - bounds.center.y;\n newObj.sourcePoint.x += tx;\n newObj.sourcePoint.y += ty;\n newObj.targetPoint.x += tx;\n newObj.targetPoint.y += ty;\n }\n newObj.id += randomId();\n var arg = {\n source: sourceElement, element: newObj, cancel: false,\n diagram: _this\n };\n _this.triggerEvent(DiagramEvent.dragEnter, arg);\n if (!_this.activeLayer.lock && !arg.cancel) {\n _this.preventUpdate = true;\n _this['enterObject'] = newObj;\n _this['enterTable'] = entryTable;\n if (newObj.children) {\n _this.findChild(newObj, entryTable);\n }\n _this.preventUpdate = true;\n _this.initObject(newObj, undefined, undefined, true);\n _this.currentSymbol = newObj;\n if (_this.mode !== 'SVG') {\n _this.refreshDiagramLayer();\n }\n delete _this['enterObject'];\n delete _this['enterTable'];\n _this.commandHandler.select(newObj);\n _this.eventHandler.mouseDown(args.event);\n _this.eventHandler.mouseMove(args.event, args);\n _this.preventUpdate = false;\n _this.updatePage();\n selectedSymbol.style.opacity = '0';\n }\n }\n _this.droppable[selectedSymbols] = selectedSymbol;\n }\n }\n }\n else {\n if (args.event.touches && args.event.touches.length) {\n _this.eventHandler.mouseMove(args.event, args.event.touches);\n }\n }\n };\n // tslint:disable-next-line:no-any\n this.droppable.drop = function (args) {\n if (_this.currentSymbol) {\n if (args.event.touches) {\n _this.eventHandler.mouseUp(args.event);\n }\n var newObj = void 0;\n var node = void 0;\n var conn = void 0;\n var source = 'sourceElement';\n var arg = {\n source: _this.droppable[source],\n element: _this.currentSymbol,\n target: _this.eventHandler['hoverNode'] || _this, cancel: false,\n position: { x: _this.currentSymbol.wrapper.offsetX, y: _this.currentSymbol.wrapper.offsetY }\n };\n _this.triggerEvent(DiagramEvent.drop, arg);\n var clonedObject = void 0;\n var id = 'id';\n clonedObject = cloneObject(_this.currentSymbol);\n clonedObject['hasTarget'] = _this.currentSymbol['hasTarget'];\n _this.removeFromAQuad(_this.currentSymbol);\n _this.removeObjectsFromLayer(_this.nameTable[_this.currentSymbol.id]);\n _this.removeElements(_this.currentSymbol);\n delete _this.nameTable[_this.currentSymbol.id];\n _this.currentSymbol = null;\n _this.protectPropertyChange(true);\n if (!arg.cancel) {\n _this.startGroupAction();\n if (clonedObject.shape.type === 'Bpmn' && clonedObject.shape.annotation\n && clonedObject['hasTarget']) {\n var nodeId = clonedObject.shape.annotation.nodeId;\n clonedObject.shape.annotation.id = clonedObject.id;\n _this.addTextAnnotation(clonedObject.shape.annotation, _this.nameTable[nodeId]);\n clonedObject.nodeId = '';\n }\n if (clonedObject.children) {\n _this.addChildNodes(clonedObject);\n }\n _this.add(clonedObject, true);\n if (canSingleSelect(_this)) {\n _this.select([_this.nameTable[clonedObject[id]]]);\n }\n }\n _this.protectPropertyChange(false);\n newObj = _this.nameTable[clonedObject[id]];\n if (clonedObject['hasTarget']) {\n clonedObject.nodeId = clonedObject['hasTarget'];\n _this.remove(clonedObject);\n }\n if (_this.bpmnModule && newObj instanceof Node && clonedObject.processId) {\n newObj.processId = clonedObject.processId;\n _this.bpmnModule.dropBPMNchild(_this.nameTable[newObj.processId], newObj, _this);\n }\n _this.endGroupAction();\n if (_this.mode !== 'SVG') {\n _this.refreshDiagramLayer();\n }\n delete _this.droppable[source];\n }\n var selectedSymbols = 'selectedSymbols';\n remove(_this.droppable[selectedSymbols]);\n };\n this.droppable.out = function (args) {\n if (_this.currentSymbol && !_this.eventHandler.focus) {\n _this.unSelect(_this.currentSymbol);\n _this.removeFromAQuad(_this.currentSymbol);\n if (_this.mode !== 'SVG' && _this.currentSymbol.shape.type === 'Native') {\n _this.removeElements(_this.currentSymbol);\n }\n _this.removeObjectsFromLayer(_this.nameTable[_this.currentSymbol.id]);\n delete _this.nameTable[_this.currentSymbol.id];\n _this.triggerEvent(DiagramEvent.dragLeave, { element: _this.currentSymbol, diagram: _this });\n if (_this.mode !== 'SVG') {\n _this.refreshDiagramLayer();\n }\n else {\n _this.removeElements(_this.currentSymbol);\n }\n _this.currentSymbol = null;\n var selectedSymbols = 'selectedSymbols';\n _this.droppable[selectedSymbols].style.opacity = '1';\n var source = 'sourceElement';\n delete _this.droppable[source];\n }\n };\n };\n Diagram.prototype.findChild = function (node, childTable) {\n var group;\n var newNode;\n for (var i = 0; i < node.children.length; i++) {\n group = childTable[node.children[i]];\n if (group) {\n if (group.children) {\n this.findChild(group, childTable);\n }\n group.id = group.id + randomId();\n childTable[group.id] = group;\n node.children[i] = group.id;\n newNode = new Node(this, 'nodes', group, true);\n this.initObject(newNode, undefined, undefined, true);\n //this.add(group, true);\n }\n }\n };\n Diagram.prototype.getChildren = function (node, entryTable, childTable) {\n var temp;\n for (var i = 0; i < node.children.length; i++) {\n temp = (childTable[node.children[i]]);\n if (temp) {\n if (temp.children) {\n entryTable = this.getChildren(temp, entryTable, childTable);\n }\n entryTable[temp.id] = cloneObject(temp);\n }\n }\n return entryTable;\n };\n Diagram.prototype.addChildNodes = function (node) {\n var temp;\n for (var i = 0; i < node.children.length; i++) {\n temp = (this.nameTable[node.children[i]]);\n if (temp) {\n if (temp.children) {\n this.addChildNodes(temp);\n }\n this.add(temp, true);\n }\n }\n };\n __decorate([\n Property('100%')\n ], Diagram.prototype, \"width\", void 0);\n __decorate([\n Property('SVG')\n ], Diagram.prototype, \"mode\", void 0);\n __decorate([\n Property('100%')\n ], Diagram.prototype, \"height\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], Diagram.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property(DiagramConstraints.Default)\n ], Diagram.prototype, \"constraints\", void 0);\n __decorate([\n Property(DiagramTools.Default)\n ], Diagram.prototype, \"tool\", void 0);\n __decorate([\n Property('Top')\n ], Diagram.prototype, \"bridgeDirection\", void 0);\n __decorate([\n Property('transparent')\n ], Diagram.prototype, \"backgroundColor\", void 0);\n __decorate([\n Complex({}, SnapSettings)\n ], Diagram.prototype, \"snapSettings\", void 0);\n __decorate([\n Complex({}, RulerSettings)\n ], Diagram.prototype, \"rulerSettings\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], Diagram.prototype, \"pageSettings\", void 0);\n __decorate([\n Collection([], Node)\n ], Diagram.prototype, \"nodes\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"drawingObject\", void 0);\n __decorate([\n Collection([], Connector)\n ], Diagram.prototype, \"connectors\", void 0);\n __decorate([\n Property([])\n ], Diagram.prototype, \"basicElements\", void 0);\n __decorate([\n Complex({}, DiagramTooltip)\n ], Diagram.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, DataSource)\n ], Diagram.prototype, \"dataSourceSettings\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"addInfo\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getNodeDefaults\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getConnectorDefaults\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"setNodeTemplate\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getDescription\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getCustomProperty\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getCustomTool\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getCustomCursor\", void 0);\n __decorate([\n Complex({}, Selector)\n ], Diagram.prototype, \"selectedItems\", void 0);\n __decorate([\n Complex({}, ScrollSettings)\n ], Diagram.prototype, \"scrollSettings\", void 0);\n __decorate([\n Complex({}, Layout)\n ], Diagram.prototype, \"layout\", void 0);\n __decorate([\n Complex({}, CommandManager)\n ], Diagram.prototype, \"commandManager\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dataLoaded\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dragEnter\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dragLeave\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dragOver\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"historyChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"doubleClick\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"textEdit\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"scrollChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"sizeChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"connectionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"sourcePointChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"targetPointChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"propertyChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"positionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"rotateChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"collectionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"mouseEnter\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"mouseLeave\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"mouseOver\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Collection([], Layer)\n ], Diagram.prototype, \"layers\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"drop\", void 0);\n return Diagram;\n}(Component));\nexport { Diagram };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { CanvasRenderer } from './rendering/canvas-renderer';\nimport { DiagramRenderer } from './rendering/renderer';\nimport { Size } from './primitives/size';\nimport { setAttributeHtml, setAttributeSvg, createHtmlElement } from './utility/dom-util';\nimport { Rect } from './primitives/rect';\nimport { createSvgElement, getHTMLLayer } from './utility/dom-util';\nimport { getDiagramLayerSvg } from './utility/dom-util';\nimport { DiagramHtmlElement } from './core/elements/html-element';\nimport { DiagramNativeElement } from './core/elements/native-element';\n/**\n * Print and Export Settings\n */\nvar PrintAndExport = /** @class */ (function () {\n function PrintAndExport(diagram) {\n this.diagram = diagram;\n }\n /**\n * To Export the diagram\n * @private\n */\n PrintAndExport.prototype.exportDiagram = function (options) {\n var fileType;\n var customBounds;\n var content;\n var content1 = '';\n var data = 'data';\n var mode;\n var buffers = [];\n var margin = options.margin || {};\n var region = options && options.region ? options.region : 'Content';\n mode = options && options.mode ? options.mode : 'Download';\n var bounds = this.getDiagramBounds(region, options);\n if (options.bounds) {\n customBounds = true;\n bounds.x = options.bounds.x ? options.bounds.x : bounds.x;\n bounds.y = options.bounds.y ? options.bounds.y : bounds.y;\n bounds.width = options.bounds.width || bounds.width;\n bounds.height = options.bounds.height || bounds.height;\n }\n margin = {\n top: margin.top !== undefined ? margin.top : 25,\n bottom: margin.bottom !== undefined ? margin.bottom : 25,\n right: margin.right !== undefined ? margin.right : 25,\n left: margin.left !== undefined ? margin.left : 25\n };\n var nodes = this.diagram.nodes;\n if (region !== 'PageSettings') {\n bounds.x -= margin.left;\n bounds.y -= margin.top;\n bounds.width += margin.left + margin.right;\n bounds.height += margin.top + margin.bottom;\n }\n var fileName = options.fileName || 'diagram';\n if (options.format !== 'SVG') {\n data = this.setCanvas(options, bounds, margin, mode, customBounds, region, fileName);\n if (data !== null) {\n return data;\n }\n }\n else {\n fileType = options.format;\n options.bounds = bounds;\n options.margin = margin;\n var svg = content = this.diagramAsSvg(options, margin);\n if (mode === 'Data') {\n return content;\n }\n var buffer = new XMLSerializer().serializeToString(svg);\n buffers.push(buffer);\n }\n if (mode === 'Download' && data !== null) {\n var browserInfo = void 0;\n // Ensure this for Safari\n // if (Browser.info.name === 'msie' && Number(Browser.info.version) < 10 || Browser.info.name === 'webkit') {\n // let info: string = Browser.info.name === 'webkit' ? 'Safari' : 'IE-9';\n // alert('Downloading option is not supported in ' + info + ', Please use the returned data');\n // return content;\n // } else {\n for (var b = 0; b < buffers.length; b++) {\n var blob = new Blob([buffers[b]], { type: 'application/octet-stream' });\n if (Browser.info.name === 'msie') {\n window.navigator.msSaveOrOpenBlob(blob, fileName + '.' + fileType);\n }\n else {\n var pom = createHtmlElement('a', { 'download': fileName + '.' + fileType });\n var url = URL.createObjectURL(blob);\n pom.href = url;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n pom.dispatchEvent(e);\n }\n }\n }\n return null;\n };\n PrintAndExport.prototype.setCanvas = function (options, bounds, margin, mode, customBounds, region, fileName) {\n var _this = this;\n var fileType;\n var content;\n options.bounds = bounds;\n options.region = region;\n var scaleX = 'scaleX';\n var scaleY = 'scaleY';\n var images = [];\n this.setScaleValueforCanvas(options, bounds);\n var canvas = this.diagramAsCanvas({\n bounds: bounds, margin: margin, region: region, scaleX: options[scaleX],\n scaleY: options[scaleY]\n }, customBounds);\n fileType = options.format || 'JPG';\n var image = content = canvas.toDataURL();\n if (mode === 'Data') {\n return content;\n }\n if (options.multiplePage) {\n options.pageHeight = options.pageHeight ? options.pageHeight : this.diagram.pageSettings.height;\n options.pageWidth = options.pageWidth ? options.pageWidth : this.diagram.pageSettings.width;\n options.pageHeight = options.pageHeight ? options.pageHeight : canvas.width;\n options.pageWidth = options.pageWidth ? options.pageWidth : canvas.height;\n margin = options.margin || {};\n if (options.pageOrientation) {\n if ((options.pageOrientation === 'Landscape' && options.pageHeight > options.pageWidth) ||\n options.pageOrientation === 'Portrait' && options.pageWidth > options.pageHeight) {\n var temp = options.pageWidth;\n options.pageWidth = options.pageHeight;\n options.pageHeight = temp;\n }\n }\n options.margin = {\n top: !isNaN(margin.top) ? margin.top : 0,\n bottom: !isNaN(margin.bottom) ? margin.bottom : 0,\n left: !isNaN(margin.left) ? margin.left : 0,\n right: !isNaN(margin.right) ? margin.right : 0\n };\n var attr = {\n 'id': this.diagram.element.id + '_printImage',\n 'src': image,\n };\n var img_1 = createHtmlElement('img', attr);\n img_1.onload = function () {\n images = _this.getMultipleImage(img_1, options, true);\n _this.exportImage(images, fileName, fileType, image);\n };\n }\n else {\n images = [image];\n this.exportImage(images, fileName, fileType, image);\n }\n return null;\n };\n PrintAndExport.prototype.exportImage = function (images, fileName, fileType, image) {\n var buffers = [];\n var length = (!(images instanceof HTMLElement)) ? images.length : 0;\n for (var g = 0; g < length; g++) {\n image = images[g];\n image = image.replace(/^data:[a-z]*;,/, '');\n var image1 = image.split(',');\n var byteString = atob(image1[1]);\n var buffer = new ArrayBuffer(byteString.length);\n var intArray = new Uint8Array(buffer);\n for (var i = 0; i < byteString.length; i++) {\n intArray[i] = byteString.charCodeAt(i);\n }\n buffers.push(buffer);\n }\n var _loop_1 = function (j) {\n var b = new Blob([buffers[j]], { type: 'application/octet-stream' });\n if (Browser.info.name === 'msie') {\n window.navigator.msSaveOrOpenBlob(b, fileName + '.' + fileType);\n }\n else {\n var htmlElement_1 = createHtmlElement('a', { 'download': fileName + '.' + fileType });\n var urlLink = URL.createObjectURL(b);\n htmlElement_1.href = urlLink;\n var mouseEvent_1 = document.createEvent('MouseEvents');\n mouseEvent_1.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n setTimeout(function () {\n htmlElement_1.dispatchEvent(mouseEvent_1);\n }, ((j + 1) * 5));\n }\n };\n // Ensure this for safari\n // if (Browser.info.name === 'msie' && Number(Browser.info.version) < 10 || Browser.info.name === 'webkit') {\n // let browserInfo: string = Browser.info.name === 'webkit' ? 'Safari' : 'IE-9';\n // alert('Downloading option is not supported in ' + browserInfo + ', Please use the returned data');\n // return content;\n // } else {\n for (var j = 0; j < buffers.length; j++) {\n _loop_1(j);\n }\n };\n PrintAndExport.prototype.getObjectsBound = function (options) {\n var nodes = this.diagram.nodes;\n var nodebounds;\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var node = nodes_1[_i];\n if (node.visible) {\n if (((options.format !== 'SVG' && !(node instanceof DiagramNativeElement) && !(node instanceof DiagramHtmlElement))\n || (options.format === 'SVG' && !(node instanceof DiagramHtmlElement)))) {\n if (!nodebounds) {\n nodebounds = node.wrapper.outerBounds;\n }\n else {\n nodebounds = nodebounds.uniteRect(node.wrapper.outerBounds);\n }\n }\n }\n }\n var connectors = this.diagram.connectors;\n for (var _a = 0, connectors_1 = connectors; _a < connectors_1.length; _a++) {\n var connector = connectors_1[_a];\n if (connector.visible) {\n if (!nodebounds) {\n nodebounds = connector.wrapper.outerBounds;\n }\n else {\n nodebounds = nodebounds.uniteRect(connector.wrapper.outerBounds);\n }\n }\n }\n return nodebounds || new Rect(0, 0, 0, 0);\n };\n PrintAndExport.prototype.getDiagramBounds = function (mode, options) {\n var rect = this.getObjectsBound(options);\n var left = rect.left;\n var top = rect.top;\n var right = rect.right - rect.left;\n var bottom = rect.bottom - rect.top;\n if (mode !== 'Content') {\n if (this.diagram.pageSettings && this.diagram.pageSettings.multiplePage) {\n left = rect.left;\n top = rect.top;\n if (this.diagram.pageSettings.width) {\n left = Math.floor(left / this.diagram.pageSettings.width) * this.diagram.pageSettings.width;\n right = Math.ceil(rect.right / this.diagram.pageSettings.width) * this.diagram.pageSettings.width - left;\n }\n if (this.diagram.pageSettings.height) {\n top = Math.floor(top / this.diagram.pageSettings.height) * this.diagram.pageSettings.height;\n bottom = Math.ceil(rect.bottom / this.diagram.pageSettings.height) * this.diagram.pageSettings.height - top;\n }\n if ((rect.width === 0) && this.diagram.pageSettings.width !== null) {\n right = this.diagram.pageSettings.width;\n }\n if ((rect.height === 0) && this.diagram.pageSettings.height !== null) {\n bottom = this.diagram.pageSettings.height;\n }\n }\n else {\n if (this.diagram.pageSettings.width) {\n left = 0;\n right = this.diagram.pageSettings.width;\n }\n if (this.diagram.pageSettings.height) {\n top = 0;\n bottom = this.diagram.pageSettings.height;\n }\n }\n }\n var svgBounds = new Rect();\n svgBounds.x = left;\n svgBounds.y = top;\n svgBounds.width = right;\n svgBounds.height = bottom;\n return svgBounds;\n };\n PrintAndExport.prototype.setScaleValueforCanvas = function (options, bounds) {\n var scaleX = 'scaleX';\n var scaleY = 'scaleY';\n options[scaleX] = 1;\n options[scaleY] = 1;\n options.pageHeight = options.pageHeight || this.diagram.pageSettings.height;\n options.pageWidth = options.pageWidth || this.diagram.pageSettings.width;\n var height = options.pageHeight || bounds.height;\n var width = options.pageWidth || bounds.width;\n if (options.stretch === 'Stretch' || options.stretch === 'Meet' || options.stretch === 'Slice') {\n options[scaleX] = width / bounds.width;\n options[scaleY] = height / bounds.height;\n if (options.stretch === 'Meet') {\n options[scaleX] = options[scaleY] = Math.min(options[scaleX], options[scaleY]);\n }\n else if (options.stretch === 'Slice') {\n options[scaleX] = options[scaleY] = Math.max(options[scaleX], options[scaleY]);\n }\n bounds.width = width;\n bounds.height = height;\n }\n bounds.x *= options[scaleX];\n bounds.y *= options[scaleY];\n };\n PrintAndExport.prototype.diagramAsSvg = function (options, margin) {\n var svg = this.diagram.createSvg(this.diagram.element.id + '_diagram_svg', options.bounds.width, options.bounds.height);\n document.body.appendChild(svg);\n var g = createSvgElement('g', { 'id': this.diagram.element.id + '_pageBackground' });\n var region = options && options.region ? options.region : 'Content';\n var bounds = this.getDiagramBounds(region, options);\n var left = bounds.x;\n var top = bounds.y;\n var width = bounds.width;\n var height = bounds.height;\n svg.appendChild(g);\n var attr = {\n 'transform': 'translate(' + (-options.bounds.x + margin.left) + ', ' + (-options.bounds.y + margin.top) + ')',\n 'x': String(left),\n 'y': String(top), 'width': String(width), 'height': String(height)\n };\n setAttributeSvg(g, attr);\n var backRect = document.getElementById(this.diagram.element.id + '_backgroundLayerrect').cloneNode(true);\n attr = {\n 'x': 0,\n 'y': 0, 'width': String(width + margin.left + margin.right), 'height': String(height + margin.top + margin.bottom)\n };\n setAttributeSvg(backRect, attr);\n svg.appendChild(backRect);\n if (this.diagram.mode === 'SVG') {\n var diagramLayerSVG = getDiagramLayerSvg(this.diagram.element.id);\n svg.appendChild(diagramLayerSVG.getElementById(this.diagram.diagramLayer.id).cloneNode(true));\n for (var i = 0; i < svg.childNodes.length; i++) {\n var element = svg.childNodes[i];\n if (element.id === 'diagram_diagramLayer') {\n element.setAttribute('transform', 'translate(' + (-bounds.x + margin.left) + ', ' +\n (-bounds.y + margin.top) + ')');\n }\n }\n }\n else {\n g = createSvgElement('g', { 'id': this.diagram.element.id + '_diagramLayer' });\n svg.appendChild(g);\n g.setAttribute('transform', 'translate(' + (-options.bounds.x + margin.left) + ', ' +\n (-options.bounds.y + margin.top) + ')');\n var nodes = this.diagram.nodes;\n //renderLabels\n var renderer = new DiagramRenderer('', null, true);\n var htmlLayer = getHTMLLayer(this.diagram.element.id);\n this.diagram.renderDiagramElements(svg, renderer, htmlLayer, false);\n }\n document.body.removeChild(svg);\n return svg;\n };\n PrintAndExport.prototype.diagramAsCanvas = function (options, customBounds) {\n var scaleX = 'scaleX';\n var scaleY = 'scaleY';\n var element;\n var elements = [];\n var region = options.bounds;\n var margin = options.margin;\n var mode = options && options.region ? options.region : 'Content';\n var pageBounds = this.getDiagramBounds(mode, options);\n var bgColor = this.diagram.pageSettings.background.color;\n var canvas = CanvasRenderer.createCanvas(this.diagram.element.id + '_diagram', options.bounds.width, options.bounds.height);\n //canvas.setAttribute('style', 'position:absolute;top:135px;left:160px;');\n var context = canvas.getContext('2d');\n context.translate(-region.x, -region.y);\n context.save();\n context.fillStyle = this.diagram.pageSettings.background.color;\n region = mode === 'Content' ? pageBounds : region;\n context.fillRect(region.x, region.y, region.width, region.height);\n var bgImg = this.diagram.pageSettings.background;\n if (bgImg && bgImg.source) {\n pageBounds = this.getDiagramBounds(mode, options);\n var image = new Image();\n image.src = bgImg.source;\n var proportionX = pageBounds.width / image.width;\n var proportionY = pageBounds.height / image.height;\n var x = pageBounds.x;\n var y = pageBounds.y;\n var width = pageBounds.width;\n var height = pageBounds.height;\n var exportable = this.isImageExportable(bgImg);\n if (bgImg.scale !== 'None' && bgImg.align !== 'None') {\n var proportion = bgImg.scale === 'Meet' ? Math.min(proportionX, proportionY) : Math.max(proportionX, proportionY);\n width = proportion * image.width;\n height = proportion * image.height;\n if (bgImg.align.indexOf('xmid') > -1) {\n x += (pageBounds.width - width) / 2;\n }\n else if (bgImg.align.indexOf('xmax') > -1) {\n x = x + pageBounds.width - width;\n }\n if (bgImg.align.indexOf('ymid') > -1) {\n y += (pageBounds.height - height) / 2;\n }\n else if (bgImg.align.indexOf('ymax') > -1) {\n y = y + pageBounds.height - height;\n }\n if (this.diagram.pageSettings.background.color === 'none' || this.diagram.pageSettings.background.color === 'transparent') {\n context.fillStyle = 'white';\n context.fillRect(pageBounds.x * options[scaleX], pageBounds.y * options[scaleY], pageBounds.width * options[scaleX], pageBounds.height * options[scaleY]);\n }\n if (exportable) {\n context.drawImage(image, x, y, proportion * image.width, proportion * image.height);\n }\n }\n else if (exportable) {\n context.drawImage(image, x, y, pageBounds.width, pageBounds.height);\n }\n }\n else {\n context.fillStyle = bgColor === 'transparent' ? 'white' : bgColor;\n context.fillRect((pageBounds.x * options[scaleX]) - margin.left, (pageBounds.y * options[scaleY]) - margin.top, (pageBounds.width * options[scaleX]) + margin.left + margin.right, (options[scaleY] * pageBounds.height) + margin.top + margin.bottom);\n }\n var brColor = this.diagram.pageSettings.background.color;\n var brWidth = this.diagram.pageSettings.width;\n if (brWidth) {\n context.strokeStyle = brColor === 'none' ? 'transparent' : brColor;\n context.lineWidth = brWidth;\n context.strokeRect(pageBounds.x * options[scaleX], pageBounds.y * options[scaleY], pageBounds.width * options[scaleX], pageBounds.height * options[scaleY]);\n }\n context.restore();\n var htmlLayer = getHTMLLayer(this.diagram.element.id);\n var renderer = new DiagramRenderer('', null, false);\n this.diagram.renderDiagramElements(canvas, renderer, htmlLayer, false, true);\n return canvas;\n };\n PrintAndExport.prototype.isImageExportable = function (backgroundImage) {\n var state = true;\n var content;\n var canvas;\n if (backgroundImage.source) {\n try {\n canvas = CanvasRenderer.createCanvas(this.diagram.element.id + 'temp_canvas', 100, 100);\n var ctx = canvas.getContext('2d');\n ctx.save();\n var image = new Image();\n image.src = backgroundImage.source;\n ctx.drawImage(image, 0, 0, 100, 100);\n ctx.restore();\n content = canvas.toDataURL();\n }\n catch (e) {\n state = false;\n }\n }\n return state;\n };\n PrintAndExport.prototype.getPrintCanvasStyle = function (img, options) {\n var width = 0;\n var height = 0;\n var size = new Size();\n width = img.width;\n height = img.height;\n if (options.pageHeight || options.pageWidth) {\n height = options.pageHeight ? options.pageHeight : height;\n width = options.pageWidth ? options.pageWidth : width;\n }\n if (options.pageOrientation) {\n if ((options.pageOrientation === 'Landscape' && height > width) || options.pageOrientation === 'Portrait' && width > height) {\n var temp = width;\n width = height;\n height = temp;\n }\n }\n size.height = height;\n size.width = width;\n return size;\n };\n PrintAndExport.prototype.getMultipleImage = function (img, options, isExport) {\n var imageArray = [];\n var div = createHtmlElement('div', {});\n var pageSize = this.getPrintCanvasStyle(img, options);\n var pageWidth;\n var pageHeight;\n var margin = options.margin;\n var mLeft = margin.left;\n var mTop = margin.top;\n var mRight = margin.right;\n var mBottom = margin.bottom;\n var x = 0;\n var y = 0;\n pageWidth = pageSize.width + x;\n pageHeight = pageSize.height + y;\n var drawnX = 0;\n var drawnY = 0;\n if (options && options.multiplePage && !(options.region === 'Content')) {\n div.style.height = 'auto';\n div.style.width = 'auto';\n var imgHeight = img.height;\n var imgWidth = img.width;\n //if (img) {\n var i = 0;\n var j = 0;\n var url = void 0;\n var clipWidth = 0;\n var clipHeight = 0;\n var ctx = void 0;\n var canvas = void 0;\n do {\n do {\n clipWidth = pageSize.width;\n clipHeight = pageSize.height;\n if ((drawnX + pageSize.width) >= imgWidth) {\n clipWidth = (imgWidth - drawnX);\n }\n if ((drawnY + pageSize.height) >= imgHeight) {\n clipHeight = (imgHeight - drawnY);\n }\n canvas = CanvasRenderer.createCanvas(this.diagram.element.id + '_multiplePrint', pageSize.width, pageSize.height);\n ctx = canvas.getContext('2d');\n ctx.drawImage(img, x + drawnX + mLeft, y + drawnY + mTop, clipWidth - mRight - mLeft, clipHeight - mBottom - mTop, 0 + mLeft, 0 + mTop, clipWidth - mRight - mLeft, clipHeight - mBottom - mTop);\n if ((drawnX + pageSize.width) >= imgWidth) {\n drawnX -= (drawnX - imgWidth);\n }\n url = canvas.toDataURL();\n ctx.restore();\n drawnX += pageWidth;\n if (isExport) {\n imageArray.push(url);\n }\n else {\n this.printImage(div, url, i + '' + j, pageWidth + 'px;', pageHeight + 'px;');\n }\n i++;\n } while (drawnX < imgWidth);\n j++;\n i = x = drawnX = 0;\n if ((drawnY + pageSize.height) >= imgHeight) {\n drawnY -= (drawnY - imgHeight);\n }\n drawnY += pageHeight;\n } while (drawnY < imgHeight);\n //}\n }\n else {\n var x_1 = 0;\n var y_1 = 0;\n var pageSize_1 = this.getPrintCanvasStyle(img, options);\n var pageWidth_1;\n var pageHeight_1;\n pageWidth_1 = pageSize_1.width;\n pageHeight_1 = pageSize_1.height;\n var ctx = void 0;\n var canvas = void 0;\n var url = void 0;\n canvas = CanvasRenderer.createCanvas(this.diagram.element.id + '_diagram', pageWidth_1, pageHeight_1);\n ctx = canvas.getContext('2d');\n ctx.drawImage(img, x_1 + mLeft, y_1 + mTop, img.width - (mRight + mLeft), img.height - (mTop + mBottom), 0 + mLeft, 0 + mTop, pageWidth_1 - (mRight + mLeft), pageHeight_1 - (mTop + mBottom));\n url = canvas.toDataURL();\n ctx.restore();\n this.printImage(div, url, 0);\n }\n if (isExport) {\n return imageArray;\n }\n else {\n return div;\n }\n };\n PrintAndExport.prototype.printImage = function (div, url, i, pageWidth, pageHeight) {\n var attr = { 'class': 'e-diagram-print-page', 'style': 'width:' + pageWidth + 'height:' + pageHeight };\n var img = createHtmlElement('img', attr);\n var innerDiv = createHtmlElement('div', attr);\n attr = { 'id': this.diagram.element.id + '_multiplePrint_img' + i, 'style': 'float:left', 'src': url };\n setAttributeHtml(img, attr);\n innerDiv.appendChild(img);\n div.appendChild(innerDiv);\n };\n /**\n * To print the image\n * @private\n */\n PrintAndExport.prototype.print = function (options) {\n var _this = this;\n options.mode = 'Data';\n options.margin = { top: 0, bottom: 0, right: 0, left: 0 };\n var url = this.exportDiagram(options);\n var attr = {\n 'id': this.diagram.element.id + '_printImage',\n 'src': url,\n };\n var img = createHtmlElement('img', attr);\n img.onload = function () {\n var div = _this.getMultipleImage(img, options);\n // specify window parameters\n var printWind = window.open('');\n if (printWind != null) {\n if ((div instanceof HTMLElement)) {\n printWind.document.write('');\n printWind.document.write('');\n printWind.document.write('
    ' + div.innerHTML + '
    ');\n printWind.document.close();\n }\n }\n };\n };\n /**\n * To destroy the Print and Export module\n * @return {void}\n * @private\n */\n PrintAndExport.prototype.destroy = function () {\n /**\n * Destroys the Print and Export module\n */\n };\n /**\n * Get module name.\n */\n PrintAndExport.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'PrintandExport';\n };\n return PrintAndExport;\n}());\nexport { PrintAndExport };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Container } from './container';\nimport { rotateSize } from '../../utility/base-util';\n/**\n * StackPanel module is used to arrange its children in a line\n */\nvar StackPanel = /** @class */ (function (_super) {\n __extends(StackPanel, _super);\n function StackPanel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Gets/Sets the orientation of the stack panel\n */\n _this.orientation = 'Vertical';\n /**\n * Not applicable for canvas\n * @private\n */\n _this.measureChildren = undefined;\n return _this;\n }\n /**\n * Measures the minimum space that the panel needs\n * @param availableSize\n */\n StackPanel.prototype.measure = function (availableSize) {\n var updateSize = this.orientation === 'Horizontal' ? this.updateHorizontalStack : this.updateVerticalStack;\n this.desiredSize = this.measureStackPanel(availableSize, updateSize);\n return this.desiredSize;\n };\n /**\n * Arranges the child elements of the stack panel\n * @param desiredSize\n */\n StackPanel.prototype.arrange = function (desiredSize) {\n var updateSize = this.orientation === 'Horizontal' ? this.arrangeHorizontalStack : this.arrangeVerticalStack;\n this.actualSize = this.arrangeStackPanel(desiredSize, updateSize);\n this.updateBounds();\n return this.actualSize;\n };\n /**\n * Measures the minimum space that the panel needs\n * @param availableSize\n */\n StackPanel.prototype.measureStackPanel = function (availableSize, updateSize) {\n var desired = undefined;\n if (this.children !== undefined && this.children.length > 0) {\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.parentTransform = this.rotateAngle + this.parentTransform;\n //Measure children\n child.measure(availableSize);\n var childSize = child.desiredSize.clone();\n //Consider Child's margin\n this.applyChildMargin(child, childSize);\n //Consider children's rotation\n if (child.rotateAngle !== 0) {\n childSize = rotateSize(childSize, child.rotateAngle);\n }\n //Measure stack panel\n if (desired === undefined) {\n desired = childSize;\n }\n else {\n updateSize(childSize, desired);\n }\n }\n }\n desired = _super.prototype.validateDesiredSize.call(this, desired, availableSize);\n this.stretchChildren(desired);\n //Considering padding values\n this.applyPadding(desired);\n return desired;\n };\n StackPanel.prototype.arrangeStackPanel = function (desiredSize, updatePosition) {\n if (this.children !== undefined && this.children.length > 0) {\n var x = void 0;\n var y = void 0;\n x = this.offsetX - desiredSize.width * this.pivot.x + this.padding.left;\n y = this.offsetY - desiredSize.height * this.pivot.y + this.padding.top;\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n var childSize = child.desiredSize.clone();\n var rotatedSize = childSize;\n if (this.orientation === 'Vertical') {\n y += child.margin.top;\n }\n else {\n x += child.margin.left;\n }\n if (child.rotateAngle !== 0) {\n rotatedSize = rotateSize(childSize, child.rotateAngle);\n }\n var center = updatePosition(x, y, child, this, desiredSize, rotatedSize);\n _super.prototype.findChildOffsetFromCenter.call(this, child, center);\n child.arrange(childSize);\n if (this.orientation === 'Vertical') {\n y += rotatedSize.height + child.margin.bottom;\n }\n else {\n x += rotatedSize.width + child.margin.right;\n }\n }\n }\n return desiredSize;\n };\n StackPanel.prototype.updateHorizontalStack = function (child, parent) {\n parent.height = Math.max(child.height, parent.height);\n parent.width += child.width;\n };\n StackPanel.prototype.updateVerticalStack = function (child, parent) {\n parent.width = Math.max(child.width, parent.width);\n parent.height += child.height;\n };\n StackPanel.prototype.arrangeHorizontalStack = function (x, y, child, parent, parenBounds, childBounds) {\n var centerY = 0;\n if (child.verticalAlignment === 'Top') {\n centerY = y + child.margin.top + childBounds.height / 2;\n }\n else if (child.verticalAlignment === 'Bottom') {\n var parentBottom = parent.offsetY + parenBounds.height * (1 - parent.pivot.y);\n centerY = parentBottom - parent.padding.bottom - child.margin.bottom - childBounds.height / 2;\n }\n else {\n centerY = parent.offsetY - parenBounds.height * parent.pivot.y + parenBounds.height / 2;\n }\n return { x: x + childBounds.width / 2, y: centerY };\n };\n StackPanel.prototype.arrangeVerticalStack = function (x, y, child, parent, parentSize, childSize) {\n var centerX = 0;\n if (child.horizontalAlignment === 'Left') {\n centerX = x + child.margin.left + childSize.width / 2;\n }\n else if (child.horizontalAlignment === 'Right') {\n var parentRight = parent.offsetX + parentSize.width * (1 - parent.pivot.x);\n centerX = parentRight - parent.padding.right - child.margin.right - childSize.width / 2;\n }\n else {\n centerX = parent.offsetX - parentSize.width * parent.pivot.x + parentSize.width / 2;\n }\n return { x: centerX, y: y + childSize.height / 2 };\n };\n StackPanel.prototype.stretchChildren = function (size) {\n if (this.children !== undefined && this.children.length > 0) {\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (this.orientation === 'Vertical') {\n if (child.horizontalAlignment === 'Stretch') {\n child.desiredSize.width = size.width;\n }\n }\n else {\n if (child.verticalAlignment === 'Stretch') {\n child.desiredSize.height = size.height;\n }\n }\n }\n }\n };\n StackPanel.prototype.applyChildMargin = function (child, size) {\n size.height += child.margin.top + child.margin.bottom;\n size.width += child.margin.left + child.margin.right;\n };\n return StackPanel;\n}(Container));\nexport { StackPanel };\n","import { Node } from '../objects/node';\nimport { Connector } from '../objects/connector';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { randomId, getFunction } from '../utility/base-util';\n/**\n * data source defines the basic unit of diagram\n */\nvar DataBinding = /** @class */ (function () {\n /**\n * Constructor for the data binding module.\n * @private\n */\n function DataBinding() {\n this.dataTable = {};\n //constructs the data binding module\n }\n /**\n * To destroy the data binding module\n * @return {void}\n * @private\n */\n DataBinding.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n DataBinding.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DataBinding';\n };\n /**\n * Initialize nodes and connectors when we have a data as JSON\n * @param data\n * @param diagram\n * @private\n */\n DataBinding.prototype.initData = function (data, diagram) {\n var dataSource;\n var dataProp = 'data';\n var jsonProp = 'json';\n var dataManager = data.dataManager || {};\n dataSource = data.data || dataManager[dataProp] || dataManager[jsonProp] ||\n (dataManager.dataSource ? dataManager.dataSource.json : undefined);\n if (dataSource && dataSource.length) {\n this.applyDataSource(data, dataSource, diagram);\n }\n };\n /**\n * Initialize nodes and connector when we have a data as remote url\n * @param data\n * @param diagram\n * @private\n */\n DataBinding.prototype.initSource = function (data, diagram) {\n var _this = this;\n var dataSource = data;\n var result;\n var mapper = data;\n if (dataSource.dataManager instanceof DataManager) {\n var query = mapper.dataManager.defaultQuery;\n data.dataManager.executeQuery(query).then(function (e) {\n var prop = 'result';\n result = e[prop];\n if (!diagram.isDestroyed) {\n _this.applyDataSource(data, result, diagram);\n diagram.refreshDiagram();\n diagram.trigger('dataLoaded', { diagram: diagram });\n }\n });\n }\n };\n DataBinding.prototype.applyDataSource = function (mapper, data, diagram) {\n this.dataTable = {};\n var obj;\n var firstNode;\n var rootNodes = [];\n var firstLevel = [];\n var item;\n var nextLevel;\n if (data !== undefined) {\n for (var r = 0; r < data.length; r++) {\n obj = data[r];\n if (obj[mapper.parentId] === undefined || obj[mapper.parentId] === null ||\n typeof obj[mapper.parentId] !== 'object') {\n if (rootNodes[obj[mapper.parentId]] !== undefined) {\n rootNodes[obj[mapper.parentId]].items.push(obj);\n }\n else {\n rootNodes[obj[mapper.parentId]] = { items: [obj] };\n }\n }\n else {\n rootNodes = this.updateMultipleRootNodes(obj, rootNodes, mapper, data);\n }\n if (mapper.root === obj[mapper.id]) {\n firstNode = { items: [obj] };\n }\n }\n if (firstNode) {\n firstLevel.push(firstNode);\n }\n else {\n for (var _i = 0, _a = Object.keys(rootNodes); _i < _a.length; _i++) {\n var n = _a[_i];\n if (!n || n === 'undefined' || n === '\\'\\'' || n === 'null') {\n firstLevel.push(rootNodes[n]);\n }\n }\n }\n for (var i = 0; i < firstLevel.length; i++) {\n for (var j = 0; j < firstLevel[i].items.length; j++) {\n item = firstLevel[i].items[j];\n var node = this.applyNodeTemplate(mapper, item, diagram);\n diagram.nodes.push(node);\n this.dataTable[item[mapper.id]] = node;\n nextLevel = rootNodes[node.data[mapper.id]];\n if (nextLevel !== undefined) {\n this.renderChildNodes(mapper, nextLevel, node.id, rootNodes, diagram);\n }\n }\n }\n }\n this.dataTable = null;\n };\n /**\n * updateMultipleRootNodes method is used to update the multiple Root Nodes\n * @param object\n * @param rootnodes\n * @param mapper\n * @param data\n */\n DataBinding.prototype.updateMultipleRootNodes = function (obj, rootNodes, mapper, data) {\n var parents = obj[mapper.parentId];\n var parent;\n for (var i = 0; i < parents.length; i++) {\n parent = parents[i];\n if (rootNodes[parent]) {\n rootNodes[parent].items.push(obj);\n }\n else {\n rootNodes[parent] = { items: [obj] };\n }\n }\n return rootNodes;\n };\n /**\n * Get the node values\n * @param mapper\n * @param item\n * @param diagram\n */\n DataBinding.prototype.applyNodeTemplate = function (mapper, item, diagram) {\n var root = item;\n var id = randomId();\n var nodeModel = { id: id, data: item };\n var doBinding = getFunction(mapper.doBinding);\n if (doBinding) {\n doBinding(nodeModel, item, diagram);\n }\n var obj = new Node(diagram, 'nodes', nodeModel, true);\n if (!this.collectionContains(obj, diagram, mapper.id, mapper.parentId)) {\n return obj;\n }\n else {\n return this.dataTable[item[mapper.id]];\n }\n };\n DataBinding.prototype.renderChildNodes = function (mapper, parent, value, rtNodes, diagram) {\n var child;\n var nextLevel;\n var node;\n for (var j = 0; j < parent.items.length; j++) {\n child = parent.items[j];\n node = this.applyNodeTemplate(mapper, child, diagram);\n var canBreak = false;\n if (!this.collectionContains(node, diagram, mapper.id, mapper.parentId)) {\n this.dataTable[child[mapper.id]] = node;\n diagram.nodes.push(node);\n }\n else {\n canBreak = true;\n }\n if (!this.containsConnector(diagram, value, node.id)) {\n diagram.connectors.push(this.applyConnectorTemplate(value, node.id, diagram));\n }\n if (!canBreak) {\n nextLevel = rtNodes[node.data[mapper.id]];\n if (nextLevel !== undefined) {\n this.renderChildNodes(mapper, nextLevel, node.id, rtNodes, diagram);\n }\n }\n }\n };\n DataBinding.prototype.containsConnector = function (diagram, sourceNode, targetNode) {\n if (sourceNode !== '' && targetNode !== '') {\n for (var i = 0; i < diagram.connectors.length; i++) {\n var connector = diagram.connectors[i];\n if (connector !== undefined && (connector.sourceID === sourceNode && connector.targetID === targetNode)) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * collectionContains method is used to check wthear the node is already present in collection or not\n * @param node\n * @param diagram\n * @param id\n * @param parentId\n */\n DataBinding.prototype.collectionContains = function (node, diagram, id, parentId) {\n var obj = this.dataTable[node.data[id]];\n if (obj !== undefined && obj.data[id] === node.data[id] && obj.data[parentId] === node.data[parentId]) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Get the Connector values\n * @param sourceNode\n * @param targetNode\n * @param diagram\n */\n DataBinding.prototype.applyConnectorTemplate = function (sNode, tNode, diagram) {\n var connModel = {\n id: randomId(), sourceID: sNode, targetID: tNode\n };\n var obj = new Connector(diagram, 'connectors', connModel, true);\n return obj;\n };\n return DataBinding;\n}());\nexport { DataBinding };\n","import { remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { contextMenuClick, contextMenuOpen } from '../enum/enum';\nimport { createHtmlElement } from '../../diagram/utility/dom-util';\n/**\n * @private\n */\nexport var menuClass = {\n content: '.e-diagramcontent',\n copy: 'e-copy',\n paste: 'e-paste',\n undo: 'e-undo',\n redo: 'e-redo',\n cut: 'e-cut',\n selectAll: 'e-selectall',\n grouping: 'e-grouping',\n group: 'e-group',\n unGroup: 'e-ungroup',\n bringToFront: 'e-bringfront',\n sendToBack: 'e-sendback',\n moveForward: 'e-bringforward',\n sendBackward: 'e-sendbackward',\n order: 'e-order'\n};\n/**\n * 'ContextMenu module used to handle context menu actions.'\n * @private\n */\nvar DiagramContextMenu = /** @class */ (function () {\n function DiagramContextMenu(parent, service) {\n this.defaultItems = {};\n /**\n * @private\n */\n this.disableItems = [];\n /**\n * @private\n */\n this.hiddenItems = [];\n this.localeText = this.setLocaleKey();\n this.parent = parent;\n this.serviceLocator = service;\n this.addEventListener();\n }\n /**\n * @hidden\n * @private\n */\n DiagramContextMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('initial-load', this.render, this);\n };\n /**\n * @hidden\n * @private\n */\n DiagramContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('initial-load', this.render);\n };\n DiagramContextMenu.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.element = createHtmlElement('ul', { id: this.parent.element.id + '_contextMenu' });\n this.parent.element.appendChild(this.element);\n var target = '#' + this.parent.element.id;\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-diagram-menu'\n });\n this.contextMenu.appendTo(this.element);\n };\n DiagramContextMenu.prototype.getMenuItems = function () {\n var menuItems = [];\n var orderItems = [];\n var groupItems = [];\n if (!this.parent.contextMenuSettings.showCustomMenuOnly) {\n for (var _i = 0, _a = this.getDefaultItems(); _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.toLocaleLowerCase().indexOf('group') !== -1) {\n if (item.toLocaleLowerCase() !== 'grouping') {\n groupItems.push(this.buildDefaultItems(item));\n }\n }\n else if (item.toLocaleLowerCase().indexOf('order') !== -1) {\n if (item.toLocaleLowerCase() !== 'order') {\n orderItems.push(this.buildDefaultItems(item));\n }\n }\n else {\n menuItems.push(this.buildDefaultItems(item));\n }\n }\n if (groupItems.length > 0) {\n var orderGroup = this.buildDefaultItems('grouping');\n orderGroup.items = groupItems;\n menuItems.push(orderGroup);\n }\n if (orderItems.length > 0) {\n var orderGroup = this.buildDefaultItems('order');\n orderGroup.items = orderItems;\n menuItems.push(orderGroup);\n }\n }\n if (this.parent.contextMenuSettings.items) {\n for (var _b = 0, _c = this.parent.contextMenuSettings.items; _b < _c.length; _b++) {\n var customItem = _c[_b];\n menuItems.push(customItem);\n }\n }\n return menuItems;\n };\n DiagramContextMenu.prototype.contextMenuOpen = function () {\n this.isOpen = true;\n };\n DiagramContextMenu.prototype.contextMenuItemClick = function (args) {\n document.getElementById(this.parent.element.id + 'content').focus();\n this.parent.trigger(contextMenuClick, args);\n var item = this.getKeyFromId(args.item.id);\n if (!args.cancel) {\n switch (item) {\n case 'cut':\n this.parent.cut();\n break;\n case 'copy':\n this.parent.copy();\n break;\n case 'undo':\n this.parent.undo();\n break;\n case 'redo':\n this.parent.redo();\n break;\n case 'paste':\n this.parent.paste();\n break;\n case 'selectAll':\n this.parent.selectAll();\n break;\n case 'group':\n this.parent.group();\n break;\n case 'unGroup':\n this.parent.unGroup();\n break;\n case 'bringToFrontOrder':\n this.parent.bringToFront();\n break;\n case 'moveForwardOrder':\n this.parent.moveForward();\n break;\n case 'sendToBackOrder':\n this.parent.sendToBack();\n break;\n case 'sendBackwardOrder':\n this.parent.sendBackward();\n break;\n }\n }\n };\n DiagramContextMenu.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 DiagramContextMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n DiagramContextMenu.prototype.updateItemStatus = function () {\n this.contextMenu.showItems(this.hiddenItems, true);\n this.contextMenu.enableItems(this.disableItems, false, true);\n this.hiddenItems = [];\n this.disableItems = [];\n this.isOpen = false;\n };\n DiagramContextMenu.prototype.ensureItems = function (item, event) {\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (item.target && event &&\n !this.ensureTarget(item)) {\n this.hiddenItems.push(item.id);\n }\n }\n };\n DiagramContextMenu.prototype.contextMenuBeforeOpen = function (args) {\n var diagramArgs = args;\n diagramArgs.hiddenItems = [];\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.ensureItems(item, args.event);\n if (item.items.length) {\n for (var _b = 0, _c = item.items; _b < _c.length; _b++) {\n var newItem = _c[_b];\n this.ensureItems(newItem, args.event);\n }\n }\n }\n this.eventArgs = args.event;\n this.parent.trigger(contextMenuOpen, diagramArgs);\n if (diagramArgs.items.length === diagramArgs.hiddenItems.length) {\n diagramArgs.cancel = true;\n diagramArgs.hiddenItems = [];\n }\n else {\n this.hiddenItems = this.hiddenItems.concat(diagramArgs.hiddenItems);\n this.contextMenu.enableItems(this.disableItems, false, true);\n var contextItems_1 = this;\n args.items.forEach(function (item) {\n if (contextItems_1.hiddenItems.indexOf(item.id) > -1) {\n contextItems_1.contextMenu.hideItems([item.id], true);\n }\n });\n }\n };\n DiagramContextMenu.prototype.ensureTarget = function (item) {\n var selectedLength = this.parent.selectedItems.nodes.length +\n this.parent.selectedItems.connectors.length;\n var itemText = this.getKeyFromId(item.id);\n var target = false;\n switch (itemText) {\n case 'undo':\n target = this.parent.historyList && this.parent.historyList.canUndo ? true : false;\n break;\n case 'redo':\n target = this.parent.historyList && this.parent.historyList.canRedo ? true : false;\n break;\n case 'paste':\n target = this.parent.commandHandler.clipboardData.clipObject ? true : false;\n break;\n case 'selectAll':\n target = this.parent.nodes.length + this.parent.connectors.length ? true : false;\n break;\n case 'grouping':\n target = ((selectedLength > 1) || (this.parent.selectedItems.nodes[0] && this.parent.selectedItems.nodes[0].children\n && this.parent.selectedItems.nodes[0].children.length > 1)) ? true : false;\n break;\n case 'group':\n target = selectedLength > 1;\n break;\n case 'unGroup':\n target = ((this.parent.selectedItems.nodes[0] && this.parent.selectedItems.nodes[0].children\n && this.parent.selectedItems.nodes[0].children.length > 1)) ? true : false;\n break;\n case 'cut':\n case 'copy':\n case 'order':\n case 'bringToFrontOrder':\n case 'moveForwardOrder':\n case 'sendToBackOrder':\n case 'sendBackwardOrder':\n target = selectedLength ? true : false;\n break;\n }\n return target;\n };\n /**\n * To destroy the Context menu.\n * @method destroy\n * @return {void}\n * @private\n */\n DiagramContextMenu.prototype.destroy = function () {\n this.contextMenu.destroy();\n remove(this.element);\n this.removeEventListener();\n };\n DiagramContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n DiagramContextMenu.prototype.generateID = function (item) {\n return this.parent.element.id + '_contextMenu_' + item;\n };\n DiagramContextMenu.prototype.getKeyFromId = function (id) {\n return id.replace(this.parent.element.id + '_contextMenu_', '');\n };\n DiagramContextMenu.prototype.buildDefaultItems = function (item) {\n var menuItem;\n switch (item) {\n case 'copy':\n menuItem = { target: menuClass.content, iconCss: menuClass.copy };\n break;\n case 'cut':\n menuItem = { target: menuClass.content, iconCss: menuClass.cut };\n break;\n case 'paste':\n menuItem = { target: menuClass.content, iconCss: menuClass.paste };\n break;\n case 'undo':\n menuItem = { target: menuClass.content, iconCss: menuClass.undo };\n break;\n case 'redo':\n menuItem = { target: menuClass.content, iconCss: menuClass.redo };\n break;\n case 'grouping':\n menuItem = { target: menuClass.content };\n break;\n case 'group':\n menuItem = { target: menuClass.content, iconCss: menuClass.group };\n break;\n case 'unGroup':\n menuItem = { target: menuClass.content, iconCss: menuClass.unGroup };\n break;\n case 'order':\n menuItem = { target: menuClass.content, iconCss: menuClass.order };\n break;\n case 'bringToFrontOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.bringToFront };\n break;\n case 'moveForwardOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.moveForward };\n break;\n case 'sendToBackOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.sendToBack };\n break;\n case 'sendBackwardOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.sendBackward };\n break;\n case 'selectAll':\n menuItem = { target: menuClass.content };\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 DiagramContextMenu.prototype.getDefaultItems = function () {\n return [\n 'copy',\n 'cut', 'paste', 'undo', 'redo', 'selectAll', 'grouping', 'group', 'unGroup', 'order',\n 'bringToFrontOrder', 'moveForwardOrder', 'sendToBackOrder', 'sendBackwardOrder'\n ];\n };\n DiagramContextMenu.prototype.setLocaleKey = function () {\n return {\n 'copy': 'Copy',\n 'cut': 'Cut',\n 'paste': 'Paste',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'selectAll': 'SelectAll',\n 'grouping': 'Grouping',\n 'group': 'Group',\n 'unGroup': 'UnGroup',\n 'order': 'Order',\n 'bringToFrontOrder': 'BringToFront',\n 'moveForwardOrder': 'MoveForward',\n 'sendToBackOrder': 'SendToBack',\n 'sendBackwardOrder': 'SendBackward'\n };\n };\n return DiagramContextMenu;\n}());\nexport { DiagramContextMenu };\n","import { Point } from '../primitives/point';\nimport { Rect } from '../primitives/rect';\nimport { intersect3 } from '../utility/diagram-util';\nimport { canBridge } from '../utility/constraints-util';\n/**\n * ConnectorBridging defines the bridging behavior\n */\n/** @private */\nvar ConnectorBridging = /** @class */ (function () {\n /**\n * Constructor for the bridging module\n * @private\n */\n function ConnectorBridging() {\n //constructs the bridging module\n }\n /** @private */\n ConnectorBridging.prototype.updateBridging = function (conn, diagram) {\n var lastBridge = [];\n var bounds;\n conn.bridges = [];\n if (canBridge(conn, diagram)) {\n // if (this.canBridge(conn, diagram)) {\n var points1 = this.getPoints(conn);\n bounds = Rect.toBounds(points1);\n var bridgeSpacing = conn.bridgeSpace;\n var bgedir = diagram.bridgeDirection;\n var count = -1;\n var quads = diagram.connectors;\n for (var q = 0; q < quads.length; q++) {\n var connector1 = quads[q];\n if (conn && connector1 && conn.id !== connector1.id) {\n var points2 = this.getPoints(connector1);\n var bounds1 = Rect.toBounds(points2);\n if (this.intersectsRect(bounds, bounds1)) {\n var intersectPts = this.intersect(points1, points2, false, bgedir, true);\n if (intersectPts.length > 0) {\n for (var i = 0; i < intersectPts.length; i++) {\n var fullLength = 0;\n var length_1 = 0;\n var segmentIndex = 0;\n var pointIndex = 0;\n var obj = this.getLengthAtFractionPoint(conn, intersectPts[i]);\n if (obj.pointIndex !== -1) {\n length_1 = obj.lengthFractionIndex;\n fullLength = obj.fullLength;\n segmentIndex = obj.segmentIndex;\n pointIndex = obj.pointIndex;\n var stBridge = this.getPointAtLength((length_1 - (bridgeSpacing / 2)), points1);\n var enBridge = this.getPointAtLength((length_1 + (bridgeSpacing / 2)), points1);\n var fractLength = (length_1 - (bridgeSpacing / 2)) / fullLength;\n fractLength = (length_1 + (bridgeSpacing / 2)) / fullLength;\n if (this.isEmptyPoint(enBridge)) {\n enBridge = stBridge;\n }\n var start = void 0;\n var end = void 0;\n start = conn.sourcePoint;\n if (conn.type === 'Straight') {\n end = conn.targetPoint;\n }\n else {\n end = conn.intermediatePoints[pointIndex];\n }\n var angle = this.angleCalculation(start, end);\n if (lastBridge.length) {\n var fixedPoint = void 0;\n fixedPoint = conn.sourcePoint;\n var fix = Math.abs(this.lengthCalculation(fixedPoint, enBridge));\n var var1 = 0;\n var insertAt = -1;\n count = -1;\n for (var k = 0; k < lastBridge[segmentIndex].bridges.length; k++) {\n count++;\n var arcSeg = lastBridge[segmentIndex].bridges[k];\n var1 = Math.abs(this.lengthCalculation(fixedPoint, arcSeg.endPoint));\n if (fix < var1) {\n insertAt = count;\n break;\n }\n }\n if (insertAt >= 0) {\n var paths = void 0;\n paths = this.createSegment(stBridge, enBridge, angle, bgedir, pointIndex, conn, diagram);\n paths.target = connector1.id;\n lastBridge[segmentIndex].bridges.splice(insertAt, 0, paths);\n lastBridge[segmentIndex].bridges.join();\n lastBridge[segmentIndex].bridgeStartPoint.splice(insertAt, 0, stBridge);\n lastBridge[segmentIndex].bridgeStartPoint.join();\n lastBridge[segmentIndex].segmentIndex = segmentIndex;\n }\n else {\n var paths = void 0;\n paths = this.createSegment(stBridge, enBridge, angle, bgedir, pointIndex, conn, diagram);\n paths.target = connector1.id;\n lastBridge[segmentIndex].bridges.push(paths);\n lastBridge[segmentIndex].bridgeStartPoint.push(stBridge);\n lastBridge[segmentIndex].segmentIndex = segmentIndex;\n }\n }\n else {\n if (!isNaN(stBridge.x) && !isNaN(stBridge.y) && !this.isEmptyPoint(enBridge)) {\n var arcs = void 0;\n var bges = [];\n var bgept = [];\n arcs = this.createSegment(stBridge, enBridge, angle, bgedir, pointIndex, conn, diagram);\n var bgseg = {\n bridges: bges, bridgeStartPoint: bgept, segmentIndex: segmentIndex\n };\n arcs.target = connector1.id;\n var stPoints = [];\n var edPoints = [];\n stPoints.push(stBridge);\n edPoints.push(enBridge);\n lastBridge[segmentIndex] = bgseg;\n lastBridge[segmentIndex].bridges.push(arcs);\n lastBridge[segmentIndex].bridgeStartPoint = stPoints;\n lastBridge[segmentIndex].segmentIndex = segmentIndex;\n }\n }\n }\n }\n }\n }\n }\n }\n if (lastBridge.length !== 0) {\n this.firstBridge(lastBridge, conn, bridgeSpacing);\n }\n }\n };\n /** @private */\n ConnectorBridging.prototype.firstBridge = function (bridgeList, connector, bridgeSpacing) {\n for (var i = 0; i < bridgeList.length; i++) {\n var bridge = bridgeList[i];\n for (var k = 1; k < bridge.bridges.length; k++) {\n if (Point.findLength(bridge.bridges[k].endPoint, bridge.bridges[k - 1].endPoint) < bridgeSpacing) {\n bridge.bridges[k - 1].endPoint = bridge.bridges[k].endPoint;\n var subBridge = bridge.bridges[k - 1];\n var arc = this.createBridgeSegment(subBridge.startPoint, subBridge.endPoint, subBridge.angle, bridgeSpacing, subBridge.sweep);\n bridge.bridges[k - 1].path = arc;\n bridge.bridges.splice(k, 1);\n bridge.bridgeStartPoint.splice(k, 1);\n k--;\n }\n }\n var pre = connector.sourcePoint;\n for (var j = 0; j < bridge.bridges.length; j++) {\n var subBridge = bridge.bridges[j];\n var preventChecking = true;\n pre = subBridge.endPoint;\n connector.bridges.push(subBridge);\n }\n }\n };\n /** @private */\n ConnectorBridging.prototype.createSegment = function (st, end, angle, direction, index, conn, diagram) {\n var arc;\n var sweep;\n var path = {\n angle: 0, endPoint: { x: 0, y: 0 }, target: '', path: '',\n segmentPointIndex: -1, startPoint: { x: 0, y: 0 }, sweep: 1, rendered: false\n };\n sweep = this.sweepDirection(angle, direction, conn, diagram);\n arc = this.createBridgeSegment(st, end, angle, conn.bridgeSpace, sweep);\n path.path = arc;\n path.startPoint = st;\n path.endPoint = end;\n path.angle = angle;\n path.segmentPointIndex = index;\n path.sweep = sweep;\n return path;\n };\n /** @private */\n ConnectorBridging.prototype.createBridgeSegment = function (startPt, endPt, angle, bridgeSpace, sweep) {\n var path = 'A ' + bridgeSpace / 2 + ' ' + bridgeSpace / 2 + ' ' + angle + ' , 1 ' + sweep + ' ' + endPt.x + ',' + endPt.y;\n return path;\n };\n /** @private */\n ConnectorBridging.prototype.sweepDirection = function (angle, bridgeDirection, connector, diagram) {\n var angle1 = Math.abs(angle);\n var sweep;\n switch (bridgeDirection) {\n case 'Top':\n case 'Bottom':\n sweep = 1;\n if (angle1 >= 0 && angle1 <= 90) {\n sweep = 0;\n }\n break;\n case 'Left':\n case 'Right':\n sweep = 1;\n if (angle < 0 && angle >= -180) {\n sweep = 0;\n }\n break;\n }\n if (bridgeDirection === 'Right' || bridgeDirection === 'Bottom') {\n if (sweep === 0) {\n sweep = 1;\n }\n else {\n sweep = 0;\n }\n }\n return sweep;\n };\n /** @private */\n ConnectorBridging.prototype.getPointAtLength = function (length, pts) {\n var run = 0;\n var pre;\n var found = { x: 0, y: 0 };\n for (var i = 0; i < pts.length; i++) {\n var pt = pts[i];\n if (!pre) {\n pre = pt;\n continue;\n }\n else {\n var l = this.lengthCalculation(pre, pt);\n if (run + l > length) {\n var r = length - run;\n var deg = Point.findAngle(pre, pt);\n var x = r * Math.cos(deg * Math.PI / 180);\n var y = r * Math.sin(deg * Math.PI / 180);\n found = { x: pre.x + x, y: pre.y + y };\n break;\n }\n else {\n run += l;\n }\n }\n pre = pt;\n }\n return found;\n };\n /** @private */\n ConnectorBridging.prototype.getPoints = function (connector) {\n var points = [];\n if (connector.intermediatePoints && (connector.type === 'Straight' || connector.type === 'Orthogonal')) {\n for (var j = 0; j < connector.intermediatePoints.length; j++) {\n points.push(connector.intermediatePoints[j]);\n }\n }\n return points;\n };\n ConnectorBridging.prototype.intersectsRect = function (rect1, rect2) {\n return ((((rect2.x < (rect1.x + rect1.width)) && (rect1.x < (rect2.x + rect2.width)))\n && (rect2.y < (rect1.y + rect1.height))) && (rect1.y < (rect2.y + rect2.height)));\n };\n /** @private */\n ConnectorBridging.prototype.intersect = function (points1, points2, self, bridgeDirection, zOrder) {\n if (self && points2.length >= 2) {\n points2.splice(0, 1);\n points2.splice(0, 1);\n }\n var points = [];\n for (var i = 0; i < points1.length - 1; i++) {\n var pt = this.inter1(points1[i], points1[i + 1], points2, zOrder, bridgeDirection);\n if (pt.length > 0) {\n for (var k = 0; k < pt.length; k++) {\n points.push(pt[k]);\n }\n }\n if (self && points2.length >= 1) {\n points2.splice(0, 1);\n }\n }\n return points;\n };\n /** @private */\n ConnectorBridging.prototype.inter1 = function (startPt, endPt, pts, zOrder, bridgeDirection) {\n var points1 = [];\n for (var i = 0; i < pts.length - 1; i++) {\n var point = this.intersect2(startPt, endPt, pts[i], pts[i + 1]);\n if (!this.isEmptyPoint(point)) {\n var angle = this.angleCalculation(startPt, endPt);\n var angle1 = this.angleCalculation(pts[i], pts[i + 1]);\n angle = this.checkForHorizontalLine(angle);\n angle1 = this.checkForHorizontalLine(angle1);\n switch (bridgeDirection) {\n case 'Left':\n case 'Right':\n if (angle > angle1) {\n points1.push(point);\n }\n break;\n case 'Top':\n case 'Bottom':\n if (angle < angle1) {\n points1.push(point);\n }\n break;\n }\n if (angle === angle1 && zOrder) {\n points1.push(point);\n }\n }\n }\n return points1;\n };\n ConnectorBridging.prototype.checkForHorizontalLine = function (angle) {\n var temp = 0;\n var roundedAngle = Math.abs(angle);\n if (roundedAngle > 90) {\n temp = 180 - roundedAngle;\n }\n else {\n temp = roundedAngle;\n }\n return temp;\n };\n ConnectorBridging.prototype.intersect2 = function (start1, end1, start2, end2) {\n var point = { x: 0, y: 0 };\n var lineUtil1 = this.getLineSegment(start1.x, start1.y, end1.x, end1.y);\n var lineUtil2 = this.getLineSegment(start2.x, start2.y, end2.x, end2.y);\n var line3 = intersect3(lineUtil1, lineUtil2);\n if (line3.enabled) {\n return line3.intersectPt;\n }\n else {\n return point;\n }\n };\n /** @private */\n ConnectorBridging.prototype.getLineSegment = function (x1, y1, x2, y2) {\n return { 'x1': Number(x1) || 0, 'y1': Number(y1) || 0, 'x2': Number(x2) || 0, 'y2': Number(y2) || 0 };\n };\n ConnectorBridging.prototype.isEmptyPoint = function (point) {\n return point.x === 0 && point.y === 0;\n };\n ConnectorBridging.prototype.getLengthAtFractionPoint = function (connector, pointAt) {\n var lengthFraction;\n var confirm = 100;\n var pointIndex = -1;\n var fullLength = 0;\n var segmentIndex = -1;\n var count = 0;\n var lengthAtFractionPt = 0;\n var pt1 = connector.sourcePoint;\n var previouspt2 = pt1;\n var points = [];\n for (var i = 0; i < connector.intermediatePoints.length; i++) {\n var point2 = connector.intermediatePoints[i];\n points.push(point2);\n }\n for (var j = 0; j < points.length; j++) {\n var pt2 = points[j];\n var suspect = this.getSlope(pt2, pt1, pointAt, connector);\n if (suspect < confirm) {\n confirm = suspect;\n lengthAtFractionPt = fullLength + this.lengthCalculation(pointAt, previouspt2);\n segmentIndex = count;\n pointIndex = j;\n }\n fullLength += Point.findLength(pt2, pt1);\n pt1 = pt2;\n previouspt2 = pt2;\n }\n count++;\n lengthFraction = {\n lengthFractionIndex: lengthAtFractionPt, fullLength: fullLength,\n segmentIndex: segmentIndex, pointIndex: pointIndex\n };\n return lengthFraction;\n };\n ConnectorBridging.prototype.getSlope = function (startPt, endPt, point, connector) {\n var three = 3.0;\n var delX = Math.abs(startPt.x - endPt.x);\n var delY = Math.abs(startPt.y - endPt.y);\n var lhs = ((point.y - startPt.y) / (endPt.y - startPt.y));\n var rhs = ((point.x - startPt.x) / (endPt.x - startPt.x));\n if (!isFinite(lhs) || !isFinite(rhs) || isNaN(lhs) || isNaN(rhs)) {\n if (startPt.x === endPt.x) {\n if (startPt.y === endPt.y) {\n return 10000;\n }\n else if (((startPt.y > point.y) && (point.y > endPt.y)) || ((startPt.y < point.y) && (point.y < endPt.y))) {\n return Math.abs(startPt.x - point.x);\n }\n }\n else if (startPt.y === endPt.y) {\n if (((startPt.x > point.x) && (point.x > endPt.x)) || ((startPt.x < point.x) && (point.x < endPt.x))) {\n return Math.abs(startPt.y - point.y);\n }\n }\n }\n else {\n if ((startPt.x >= point.x && point.x >= endPt.x) || (startPt.x <= point.x && point.x <= endPt.x) || delX < three) {\n if ((startPt.y >= point.y && point.y >= endPt.y) || (startPt.y <= point.y && point.y <= endPt.y) || delY < three) {\n return Math.abs(lhs - rhs);\n }\n }\n }\n return 10000;\n };\n /** @private */\n ConnectorBridging.prototype.angleCalculation = function (startPt, endPt) {\n var xDiff = startPt.x - endPt.x;\n var yDiff = startPt.y - endPt.y;\n return Math.atan2(yDiff, xDiff) * (180 / Math.PI);\n };\n ConnectorBridging.prototype.lengthCalculation = function (startPt, endPt) {\n //removed a try catch from here\n var len = Math.sqrt(((startPt.x - endPt.x) * (startPt.x - endPt.x)) + ((startPt.y - endPt.y) * (startPt.y - endPt.y)));\n return len;\n };\n /**\n * To destroy the bridging module\n * @return {void}\n * @private\n */\n ConnectorBridging.prototype.destroy = function () {\n /**\n * Destroys the bridging module\n */\n };\n /**\n * Get module name.\n */\n ConnectorBridging.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Bridging';\n };\n return ConnectorBridging;\n}());\nexport { ConnectorBridging };\n","import { Rect } from '../primitives/rect';\nimport { PathElement } from '../core/elements/path-element';\nimport { SnapConstraints } from '../enum/enum';\nimport { Connector } from './connector';\nimport { Selector } from '../interaction/selector';\nimport { getBounds } from './../utility/base-util';\nimport { randomId } from './../utility/base-util';\nimport { isSelected } from '../interaction/actions';\nimport { TextElement } from '../core/elements/text-element';\n/**\n * Snapping\n */\nvar Snapping = /** @class */ (function () {\n function Snapping(diagram) {\n this.line = [];\n this.diagram = diagram;\n }\n /** @private */\n Snapping.prototype.canSnap = function () {\n return (this.diagram.snapSettings.constraints\n & (SnapConstraints.SnapToObject | SnapConstraints.SnapToLines)) !== 0;\n };\n /**\n * Snap to object\n * @private\n */\n Snapping.prototype.snapPoint = function (diagram, selectedObject, towardsLeft, towardsTop, delta, startPoint, endPoint) {\n var snapSettings = this.diagram.snapSettings;\n var zoomFactor = 1;\n var offset = { x: 0, y: 0 };\n var bounds = getBounds(selectedObject.wrapper);\n var horizontallysnapped = { snapped: false, offset: 0 };\n var verticallysnapped = { snapped: false, offset: 0 };\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) {\n var snapLine = void 0;\n snapLine = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n snapLine.setAttribute('id', '_SnappingLines');\n snapLine.setAttribute('shapeRendering', 'crispEdges');\n this.getAdornerLayerSvg().appendChild(snapLine);\n this.snapObject(diagram, selectedObject, snapLine, horizontallysnapped, verticallysnapped, delta, startPoint === endPoint);\n }\n //original position\n var left = bounds.x + delta.x;\n var top = bounds.y + delta.y;\n var right = bounds.x + bounds.width + delta.x;\n var bottom = bounds.y + bounds.height + delta.y;\n var scaledIntervals = snapSettings.verticalGridlines.scaledIntervals;\n //snapped positions\n var roundedRight = this.round(right, scaledIntervals, zoomFactor);\n var roundedLeft = this.round(left, scaledIntervals, zoomFactor);\n scaledIntervals = snapSettings.horizontalGridlines.scaledIntervals;\n var roundedTop = this.round(top, scaledIntervals, zoomFactor);\n var roundedBottom = this.round(bottom, scaledIntervals, zoomFactor);\n //currentposition\n var currentright = bounds.x + bounds.width;\n var currentbottom = bounds.y + bounds.height;\n if (!horizontallysnapped.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToVerticalLines) {\n if (Math.abs(delta.x) >= 1) {\n if (towardsLeft) {\n if (Math.abs(roundedRight - currentright) > Math.abs(roundedLeft - bounds.x)) {\n offset.x += roundedLeft - bounds.x;\n }\n else {\n offset.x += roundedRight - currentright;\n }\n }\n else {\n if (Math.abs(roundedRight - currentright) < Math.abs(roundedLeft - bounds.x)) {\n offset.x += roundedRight - currentright;\n }\n else {\n offset.x += roundedLeft - bounds.x;\n }\n }\n }\n }\n else {\n offset.x = endPoint.x - startPoint.x;\n }\n }\n else {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) {\n offset.x = horizontallysnapped.offset;\n }\n else {\n offset.x = endPoint.x - startPoint.x;\n }\n }\n if (!verticallysnapped.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToHorizontalLines) {\n if (Math.abs(delta.y) >= 1) {\n if (towardsTop) {\n if (Math.abs(roundedBottom - currentbottom) > Math.abs(roundedTop - bounds.y)) {\n offset.y += roundedTop - bounds.y;\n }\n else {\n offset.y += roundedBottom - currentbottom;\n }\n }\n else {\n if (Math.abs(roundedBottom - currentbottom) < Math.abs(roundedTop - bounds.y)) {\n offset.y += roundedBottom - currentbottom;\n }\n else {\n offset.y += roundedTop - bounds.y;\n }\n }\n }\n }\n else {\n offset.y = endPoint.y - startPoint.y;\n }\n }\n else {\n offset.y = verticallysnapped.offset;\n }\n return offset;\n };\n /**\n * @private\n */\n Snapping.prototype.round = function (value, snapIntervals, scale) {\n if (scale > 1) {\n scale = Math.pow(2, Math.floor(Math.log(scale) / Math.log(2)));\n }\n else {\n scale = Math.pow(2, Math.ceil(Math.log(scale) / Math.log(2)));\n }\n var cutoff = 0;\n var i = 0;\n for (i = 0; i < snapIntervals.length; i++) {\n cutoff += snapIntervals[i];\n }\n cutoff /= scale;\n var quotient = Math.floor(Math.abs(value) / cutoff);\n var bal = value % cutoff;\n var prev = quotient * cutoff;\n if (prev !== value) {\n if (value >= 0) {\n for (i = 0; i < snapIntervals.length; i++) {\n if (bal <= snapIntervals[i] / scale) {\n return prev + (bal < (snapIntervals[i] / (2 * scale)) ? 0 : snapIntervals[i] / scale);\n }\n else {\n prev += snapIntervals[i] / scale;\n bal -= snapIntervals[i] / scale;\n }\n }\n }\n else {\n prev = prev * -1;\n for (i = snapIntervals.length - 1; i >= 0; i--) {\n if (Math.abs(bal) <= snapIntervals[i] / scale) {\n return prev - (Math.abs(bal) < (snapIntervals[i] / (2 * scale)) ? 0 : snapIntervals[i] / scale);\n }\n else {\n prev -= snapIntervals[i] / scale;\n bal += snapIntervals[i] / scale;\n }\n }\n }\n }\n return value;\n };\n /**\n * Snap to Object\n */\n Snapping.prototype.snapObject = function (diagram, selectedObject, g, horizontalSnap, verticalSnap, delta, ended) {\n var lengthX = null;\n var lengthY;\n var hTarget;\n var vTarget;\n var scroller = this.diagram.scroller;\n var snapSettings = this.diagram.snapSettings;\n var objectsAtLeft = [];\n var objectsAtRight = [];\n var objectsAtTop = [];\n var objectsAtBottom = [];\n var bounds = getBounds(selectedObject.wrapper);\n var scale = diagram.scroller.currentZoom;\n var hoffset = -scroller.horizontalOffset;\n var voffset = -scroller.verticalOffset;\n var snapObjDistance = snapSettings.snapObjectDistance / scale;\n var viewPort = new Rect(0, 0, scroller.viewPortWidth, scroller.viewPortHeight);\n var hIntersectRect = new Rect(hoffset / scale, (bounds.y - snapObjDistance - 5), viewPort.width / scale, (bounds.height + 2 * snapObjDistance + 10));\n var vIntersectRect = new Rect((bounds.x - snapObjDistance - 5), voffset / scale, (bounds.width + 2 * snapObjDistance + 10), viewPort.height / scale);\n viewPort = new Rect(hoffset / scale, voffset / scale, viewPort.width / scale, viewPort.height / scale);\n var nodes = this.findNodes(diagram.spatialSearch, selectedObject, vIntersectRect, viewPort);\n var i;\n var target;\n var targetBounds;\n var nameTable = diagram.nameTable;\n for (i = 0; i < nodes.length; i++) {\n target = nodes[i];\n if (this.canBeTarget(diagram, target)) {\n if (!(this.diagram.nameTable[target.id] instanceof Connector) && this.canConsider(nameTable, selectedObject, target)) {\n targetBounds = target.bounds;\n if (targetBounds.height + targetBounds.y < delta.y + bounds.y) {\n objectsAtTop.push({\n obj: target, distance: Math.abs(bounds.y + delta.y - targetBounds.y - targetBounds.height)\n });\n }\n else if (targetBounds.y > bounds.y + delta.y + bounds.height) {\n objectsAtBottom.push({ obj: target, distance: Math.abs(bounds.y + delta.y + bounds.height - targetBounds.y) });\n }\n if (lengthX == null || lengthX > Math.abs(targetBounds.y - bounds.y - delta.y)) {\n if (Math.abs(targetBounds.x + targetBounds.width / 2 - (bounds.x + bounds.width / 2 + delta.x)) <=\n snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'centerX');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x + targetBounds.width - (bounds.x + bounds.width + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'right');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x - (bounds.x + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'left');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x - (bounds.x + bounds.width + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'rightLeft');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x + targetBounds.width - (bounds.x + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'leftRight');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n }\n }\n }\n }\n nodes = this.findNodes(diagram.spatialSearch, selectedObject, hIntersectRect, viewPort);\n for (var j = 0; j < nodes.length; j++) {\n target = nodes[j];\n if (this.canBeTarget(diagram, target)) {\n if (!(this.diagram.nameTable[target.id] instanceof Connector) && this.canConsider(nameTable, selectedObject, target)) {\n targetBounds = target.bounds;\n if (targetBounds.x + targetBounds.width < bounds.x + delta.x) {\n objectsAtLeft[objectsAtLeft.length] = {\n obj: target, distance: Math.abs((bounds.x + delta.x) - targetBounds.x - targetBounds.width)\n };\n }\n if (targetBounds.x > bounds.x + delta.x + bounds.width) {\n objectsAtRight[objectsAtRight.length] = {\n obj: target, distance: Math.abs(bounds.x + delta.x + bounds.width - targetBounds.x)\n };\n }\n if (lengthY == null || lengthY > Math.abs(targetBounds.x - bounds.x - delta.x)) {\n if (Math.abs(targetBounds.y + targetBounds.height / 2 - (bounds.y + bounds.height / 2 + delta.y))\n <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'centerY');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y - bounds.y - delta.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'top');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y + targetBounds.height - (bounds.y + bounds.height + delta.y)) <=\n snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'bottom');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y + targetBounds.height - bounds.y - delta.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'topBottom');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y - (bounds.y + bounds.height + delta.y)) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'bottomTop');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n }\n }\n }\n }\n this.createGuidelines(diagram, hTarget, vTarget, g, horizontalSnap, verticalSnap, ended);\n if (!horizontalSnap.snapped) {\n this.createHSpacingLines(diagram, g, selectedObject, objectsAtLeft, objectsAtRight, horizontalSnap, verticalSnap, ended, delta, snapObjDistance);\n }\n if (!verticalSnap.snapped) {\n this.createVSpacingLines(diagram, g, selectedObject, objectsAtTop, objectsAtBottom, horizontalSnap, verticalSnap, ended, delta, snapObjDistance);\n }\n };\n /**\n * @private\n */\n Snapping.prototype.snapConnectorEnd = function (point) {\n var snapSettings = this.diagram.snapSettings;\n var zoomFactor = 1;\n if (snapSettings.constraints & SnapConstraints.SnapToLines) {\n point.x = this.round(point.x, snapSettings.verticalGridlines.scaledIntervals, zoomFactor);\n point.y = this.round(point.y, snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n }\n return point;\n };\n Snapping.prototype.canBeTarget = function (diagram, node) {\n node = this.diagram.nameTable[node.id];\n return !(isSelected(this.diagram, node, false));\n };\n Snapping.prototype.snapSize = function (diagram, horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, selectedObject, ended) {\n var lengthX;\n var lengthY;\n var snapSettings = this.diagram.snapSettings;\n var scroller = this.diagram.scroller;\n var hTarget;\n var vTarget;\n var bounds = getBounds(selectedObject.wrapper);\n var nameTable = diagram.nameTable;\n var sameWidth = [];\n var sameHeight = [];\n var scale = diagram.scroller.currentZoom;\n var hoffset = -scroller.horizontalOffset;\n var voffset = -scroller.verticalOffset;\n var snapObjDistance = snapSettings.snapObjectDistance / scale;\n var viewPort = new Rect(0, 0, scroller.viewPortWidth, scroller.viewPortHeight);\n var hintersectedrect = new Rect(hoffset / scale, (bounds.y - 5) / scale, viewPort.width / scale, (bounds.height + 10) / scale);\n var vintersectedrect = new Rect((bounds.x - 5) / scale, voffset / scale, (bounds.width + 10) / scale, viewPort.height / scale);\n viewPort = new Rect(hoffset / scale, voffset / scale, viewPort.width / scale, viewPort.height / scale);\n var nodesInView = [];\n var nodes = this.findNodes(diagram.spatialSearch, selectedObject, vintersectedrect, viewPort, nodesInView);\n var i;\n var target;\n var targetBounds;\n for (i = 0; i < nodes.length; i++) {\n target = nodes[i];\n if (this.canConsider(nameTable, selectedObject, target) && !(this.diagram.nameTable[target.id] instanceof Connector)) {\n targetBounds = target.bounds;\n if (lengthX == null || lengthX > Math.abs(targetBounds.y - bounds.y)) {\n if (horizontalSnap.left) {\n if (Math.abs(bounds.x + deltaX - targetBounds.x) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'left');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(bounds.x + deltaX - targetBounds.x - targetBounds.width) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'leftRight');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n }\n else if (horizontalSnap.right) {\n if (Math.abs(bounds.x + deltaX + bounds.width - targetBounds.x - targetBounds.width) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'right');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(bounds.x + deltaX + bounds.width - targetBounds.x) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'rightLeft');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n }\n }\n }\n }\n nodes = this.findNodes(diagram.spatialSearch, selectedObject, hintersectedrect, viewPort);\n for (var i_1 = 0; i_1 < nodes.length; i_1++) {\n var target_1 = nodes[i_1];\n if (this.canConsider(nameTable, selectedObject, target_1) && !(this.diagram.nameTable[target_1.id] instanceof Connector)) {\n var targetBounds_1 = target_1.bounds;\n if (lengthY == null || lengthY > Math.abs(targetBounds_1.x - bounds.x)) {\n if (verticalSnap.top) {\n if (Math.abs(bounds.y + deltaY - targetBounds_1.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'top');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n else if (Math.abs(bounds.y + deltaY - targetBounds_1.y - targetBounds_1.height) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'topBottom');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n }\n else if (verticalSnap.bottom) {\n if (Math.abs(bounds.y + bounds.height + deltaY - targetBounds_1.y - targetBounds_1.height) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'bottom');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n else if (Math.abs(bounds.y + bounds.height + deltaY - targetBounds_1.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'bottomTop');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n }\n }\n }\n }\n for (i = 0; i < nodesInView.length; i++) {\n target = nodesInView[i];\n if (this.canConsider(nameTable, selectedObject, target)) {\n var targetBounds_2 = target.bounds;\n var delta = horizontalSnap.left ? -deltaX : deltaX;\n var difference = Math.abs(bounds.width + delta - targetBounds_2.width);\n var actualDiff = void 0;\n if (difference <= snapObjDistance) {\n actualDiff = horizontalSnap.left ? -targetBounds_2.width + bounds.width : targetBounds_2.width - bounds.width;\n sameWidth[sameWidth.length] = { source: target, difference: difference, offset: actualDiff };\n }\n delta = verticalSnap.top ? -deltaY : deltaY;\n var dify = Math.abs(bounds.height + delta - targetBounds_2.height);\n if (dify <= snapObjDistance) {\n actualDiff = verticalSnap.top ? -targetBounds_2.height + bounds.height : targetBounds_2.height - bounds.height;\n sameHeight[sameHeight.length] = { source: target, difference: dify, offset: actualDiff };\n }\n }\n }\n var g;\n if (!diagram.getTool) {\n var g_1 = this.createGuidelines(diagram, hTarget, vTarget, snapLine, horizontalSnap, verticalSnap, ended);\n }\n if (!horizontalSnap.snapped && sameWidth.length > 0 && (horizontalSnap.left || horizontalSnap.right)) {\n this.addSameWidthLines(diagram, snapLine, sameWidth, horizontalSnap, ended, selectedObject);\n }\n if (!verticalSnap.snapped && sameHeight.length > 0 && (verticalSnap.top || verticalSnap.bottom)) {\n this.addSameHeightLines(diagram, snapLine, sameHeight, verticalSnap, ended, selectedObject);\n }\n };\n /**\n * Snap to object on top\n * @private\n */\n Snapping.prototype.snapTop = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialBoundsT) {\n var dify = deltaY;\n verticalSnap.top = true;\n var y;\n horizontalSnap.left = horizontalSnap.right = false;\n var zoomFactor = 1;\n //let initialBoundsT: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n y = initialBoundsT.y - initialBoundsT.height * shape.pivot.y + deltaY - (shape.offsetY - shape.height * shape.pivot.y);\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, deltaX, y, this.diagram.selectedItems, ended);\n }\n if (!verticalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToHorizontalLines) {\n var top_1 = initialBoundsT.y - initialBoundsT.height * shape.pivot.y;\n var actualTop = top_1 + deltaY;\n var roundedTop = this.round(actualTop, this.diagram.snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n dify = roundedTop - top_1;\n }\n }\n else {\n dify = (deltaY - y) + verticalSnap.offset;\n }\n return dify;\n };\n /**\n * Snap to object on right\n * @private\n */\n Snapping.prototype.snapRight = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialBound) {\n var difx = deltaX;\n var x;\n horizontalSnap.right = true;\n verticalSnap.top = verticalSnap.bottom = false;\n var zoomFactor = 1;\n //let initialBound: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n x = initialBound.x + initialBound.width * (1 - shape.pivot.x) + deltaX - (shape.offsetX + shape.width * (1 - shape.pivot.x));\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, x, deltaY, this.diagram.selectedItems, ended);\n }\n if (!horizontalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToVerticalLines) {\n var right = initialBound.x + initialBound.width * (1 - shape.pivot.x);\n var actualRight = right + deltaX;\n var roundedRight = this.round(actualRight, this.diagram.snapSettings.verticalGridlines.scaledIntervals, zoomFactor);\n difx = roundedRight - right;\n }\n }\n else {\n difx = (deltaX - x) + horizontalSnap.offset;\n }\n return difx;\n };\n /**\n * Snap to object on left\n * @private\n */\n Snapping.prototype.snapLeft = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialBoundsB) {\n var difx = deltaX;\n var x = 0;\n horizontalSnap.left = true;\n verticalSnap.top = verticalSnap.bottom = false;\n var zoomFactor = 1;\n //let initialBoundsB: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n x = initialBoundsB.x - initialBoundsB.width * shape.pivot.x + deltaX - (shape.offsetX - shape.width * shape.pivot.x);\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, x, deltaY, this.diagram.selectedItems, ended);\n }\n if (!horizontalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToVerticalLines) {\n var left = initialBoundsB.x - initialBoundsB.width * shape.pivot.x;\n var actualLeft = left + deltaX;\n var roundedLeft = this.round(actualLeft, this.diagram.snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n difx = roundedLeft - left;\n }\n }\n else {\n difx = (deltaX - x) + horizontalSnap.offset;\n }\n return difx;\n };\n /**\n * Snap to object on bottom\n * @private\n */\n Snapping.prototype.snapBottom = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialRect) {\n var dify = deltaY;\n verticalSnap.bottom = true;\n horizontalSnap.left = horizontalSnap.right = false;\n var zoomFactor = 1;\n var y = 0;\n //let initialRect: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n y = initialRect.y + initialRect.height * (1 - shape.pivot.y) + deltaY - (shape.offsetY + shape.height * (1 - shape.pivot.y));\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, deltaX, y, this.diagram.selectedItems, ended);\n }\n var bounds;\n bounds = (shape instanceof TextElement) ? getBounds(shape) : getBounds(shape.wrapper);\n if (!verticalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToHorizontalLines) {\n var bottom = initialRect.y + initialRect.height * (1 - shape.pivot.y);\n var actualBottom = bottom + deltaY;\n var roundedBottom = this.round(actualBottom, this.diagram.snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n dify = roundedBottom - bottom;\n }\n }\n else {\n dify = (deltaY - y) + verticalSnap.offset;\n }\n return dify;\n };\n /**\n * To create the same width and same size lines\n */\n Snapping.prototype.createGuidelines = function (diagram, hTarget, vTarget, snapLine, horizontalSnap, verticalSnap, ended) {\n if (hTarget) {\n horizontalSnap.offset = hTarget.offsetX;\n horizontalSnap.snapped = true;\n if (!ended) {\n if (hTarget.type === 'sideAlign') {\n this.renderAlignmentLines(hTarget.start, hTarget.end, snapLine, diagram.scroller.transform);\n }\n else {\n this.renderAlignmentLines(hTarget.start, hTarget.end, snapLine, diagram.scroller.transform);\n }\n }\n }\n if (vTarget) {\n verticalSnap.offset = vTarget.offsetY;\n verticalSnap.snapped = true;\n if (!ended) {\n if (vTarget.type === 'sideAlign') {\n this.renderAlignmentLines(vTarget.start, vTarget.end, snapLine, diagram.scroller.transform);\n }\n else {\n this.renderAlignmentLines(vTarget.start, vTarget.end, snapLine, diagram.scroller.transform);\n }\n }\n }\n return snapLine;\n };\n /**\n * To create the alignment lines\n */\n Snapping.prototype.renderAlignmentLines = function (start, end, svg, transform) {\n start = {\n x: (start.x + transform.tx) * transform.scale,\n y: (start.y + transform.ty) * transform.scale\n };\n end = {\n x: (end.x + transform.tx) * transform.scale,\n y: (end.y + transform.ty) * transform.scale\n };\n var line1 = {\n stroke: '#07EDE1', strokeWidth: 1, startPoint: { x: start.x, y: start.y },\n endPoint: { x: end.x, y: end.y }, fill: '#07EDE1', dashArray: '', width: 1,\n x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId()\n };\n var i = 0;\n this.line.push(line1);\n for (i = 0; i < this.line.length; i++) {\n this.diagram.diagramRenderer.drawLine(svg, this.line.pop());\n }\n };\n /**\n * To create Horizontal spacing lines\n */\n Snapping.prototype.createHSpacingLines = function (diagram, g, shape, objectsAtLeft, objectsAtRight, horizontalSnap, verticalSnap, ended, delta, snapObjDistance) {\n var top = 0;\n this.sortByDistance(objectsAtLeft, 'distance', true);\n this.sortByDistance(objectsAtRight, 'distance', true);\n var equallySpaced = [];\n var bounds = getBounds(shape.wrapper);\n var nearestleft;\n var nearestright;\n var targetBounds;\n var equaldistance;\n if (objectsAtLeft.length > 0) {\n equallySpaced[equallySpaced.length] = objectsAtLeft[0];\n nearestleft = ((objectsAtLeft[0].obj).bounds);\n top = nearestleft.y;\n if (objectsAtLeft.length > 1) {\n targetBounds = ((objectsAtLeft[1].obj).bounds);\n equaldistance = nearestleft.x - targetBounds.x - targetBounds.width;\n if (Math.abs(equaldistance - objectsAtLeft[0].distance) <= snapObjDistance) {\n top = this.findEquallySpacedNodesAtLeft(objectsAtLeft, equaldistance, top, equallySpaced);\n }\n else {\n equaldistance = objectsAtLeft[0].distance;\n }\n }\n else {\n equaldistance = objectsAtLeft[0].distance;\n }\n }\n this.sortByDistance(equallySpaced, 'distance');\n equallySpaced[equallySpaced.length] = { obj: shape, distance: 0 };\n top = bounds.y < top || !top ? bounds.y : top;\n if (objectsAtRight.length > 0) {\n var dist = void 0;\n nearestright = ((objectsAtRight[0].obj).bounds);\n top = nearestright.y < top ? nearestright.y : top;\n if (objectsAtRight.length > 1) {\n targetBounds = ((objectsAtRight[1].obj).bounds);\n dist = targetBounds.x - nearestright.x - nearestright.width;\n }\n if (objectsAtLeft.length > 0) {\n if (Math.abs(objectsAtRight[0].distance - objectsAtLeft[0].distance) <= snapObjDistance) {\n var adjustablevalue = Math.abs(objectsAtRight[0].distance - objectsAtLeft[0].distance) / 2;\n (objectsAtRight[0].distance < objectsAtLeft[0].distance) ?\n equaldistance -= adjustablevalue : equaldistance += adjustablevalue;\n equallySpaced[equallySpaced.length] = objectsAtRight[0];\n }\n else if (objectsAtLeft.length === 1) {\n nearestleft = undefined;\n equallySpaced.splice(0, 1);\n equallySpaced[equallySpaced.length] = objectsAtRight[0];\n equaldistance = dist;\n }\n }\n else {\n equaldistance = dist;\n equallySpaced[equallySpaced.length] = objectsAtRight[0];\n }\n if (objectsAtRight.length > 1 && nearestright.x + nearestright.width < targetBounds.x) {\n top = this.findEquallySpacedNodesAtRight(objectsAtRight, dist, top, equallySpaced, snapObjDistance);\n }\n }\n if (equallySpaced.length > 2) {\n this.addHSpacingLines(diagram, g, equallySpaced, ended, top);\n var deltaHorizontal = 0;\n if (ended) {\n deltaHorizontal = delta.x;\n }\n if (nearestleft) {\n horizontalSnap.offset = equaldistance - Math.abs(bounds.x + deltaHorizontal - nearestleft.x - nearestleft.width)\n + deltaHorizontal;\n }\n else if (nearestright) {\n horizontalSnap.offset = Math.abs(bounds.x + bounds.width + deltaHorizontal - nearestright.x)\n - equaldistance + deltaHorizontal;\n }\n horizontalSnap.snapped = true;\n }\n };\n /**\n * To create vertical spacing lines\n */\n Snapping.prototype.createVSpacingLines = function (diagram, g, shape, objectsAtTop, objectsAtBottom, horizontalSnap, verticalSnap, ended, delta, snapObjDistance) {\n var right = 0;\n this.sortByDistance(objectsAtTop, 'distance', true);\n this.sortByDistance(objectsAtBottom, 'distance', true);\n var equallySpaced = [];\n var bounds = getBounds(shape.wrapper);\n var nearesttop;\n var nearestbottom;\n var targetBounds;\n var equaldistance;\n if (objectsAtTop.length > 0) {\n equallySpaced[equallySpaced.length] = objectsAtTop[0];\n nearesttop = ((objectsAtTop[0].obj).bounds);\n right = nearesttop.x + nearesttop.width;\n if (objectsAtTop.length > 1) {\n targetBounds = ((objectsAtTop[1].obj).bounds);\n equaldistance = nearesttop.y - targetBounds.y - targetBounds.height;\n if (Math.abs(equaldistance - objectsAtTop[0].distance) <= snapObjDistance) {\n right = this.findEquallySpacedNodesAtTop(objectsAtTop, equaldistance, right, equallySpaced);\n }\n else {\n equaldistance = objectsAtTop[0].distance;\n }\n }\n else {\n equaldistance = objectsAtTop[0].distance;\n }\n }\n this.sortByDistance(equallySpaced, 'distance');\n equallySpaced[equallySpaced.length] = { obj: shape, distance: 0 };\n right = bounds.x + bounds.width > right || !right ? bounds.x + bounds.width : right;\n var dist;\n if (objectsAtBottom.length > 0) {\n nearestbottom = ((objectsAtBottom[0].obj).bounds);\n right = nearestbottom.x + nearestbottom.width > right ? nearestbottom.x + nearestbottom.width : right;\n if (objectsAtBottom.length > 1) {\n targetBounds = ((objectsAtBottom[1].obj).bounds);\n dist = targetBounds.y - nearestbottom.y - nearestbottom.height;\n }\n if (objectsAtTop.length > 0) {\n if (Math.abs(objectsAtBottom[0].distance - objectsAtTop[0].distance) <= snapObjDistance) {\n var adjustablevalue = Math.abs(objectsAtBottom[0].distance - objectsAtTop[0].distance) / 2;\n (objectsAtBottom[0].distance < objectsAtTop[0].distance) ?\n equaldistance -= adjustablevalue : equaldistance += adjustablevalue;\n equallySpaced[equallySpaced.length] = objectsAtBottom[0];\n }\n else if (objectsAtTop.length === 1) {\n nearesttop = undefined;\n equallySpaced.splice(0, 1);\n equallySpaced[equallySpaced.length] = objectsAtBottom[0];\n equaldistance = dist;\n }\n }\n else {\n equaldistance = dist;\n equallySpaced[equallySpaced.length] = objectsAtBottom[0];\n }\n if (objectsAtBottom.length > 1 && targetBounds.y > nearestbottom.y + nearestbottom.height) {\n right = this.findEquallySpacedNodesAtBottom(objectsAtBottom, dist, right, equallySpaced, snapObjDistance);\n }\n }\n if (equallySpaced.length > 2) {\n this.addVSpacingLines(diagram, g, equallySpaced, ended, right);\n var deltaVertical = 0;\n if (ended) {\n deltaVertical = delta.y;\n }\n if (nearesttop) {\n verticalSnap.offset = equaldistance - Math.abs(bounds.y + deltaVertical - nearesttop.y - nearesttop.height) + deltaVertical;\n }\n else if (nearestbottom) {\n verticalSnap.offset = Math.abs(bounds.y + bounds.height + deltaVertical - nearestbottom.y) - equaldistance + deltaVertical;\n }\n verticalSnap.snapped = true;\n }\n };\n /**\n * Add the Horizontal spacing lines\n */\n Snapping.prototype.addHSpacingLines = function (diagram, g, equallySpaced, ended, top) {\n var i;\n var start;\n var end;\n if (!ended) {\n for (i = 0; i < equallySpaced.length - 1; i++) {\n var crnt = equallySpaced[i].obj instanceof Selector ?\n getBounds((equallySpaced[i].obj).wrapper) : ((equallySpaced[i].obj).bounds);\n var next = equallySpaced[i + 1].obj instanceof Selector ?\n getBounds((equallySpaced[i + 1].obj).wrapper) : ((equallySpaced[i + 1].obj).bounds);\n start = { x: crnt.x + crnt.width, y: top - 15 };\n end = { x: next.x, y: top - 15 };\n this.renderSpacingLines(start, end, g, this.getAdornerLayerSvg(), diagram.scroller.transform);\n }\n }\n };\n /**\n * Add the vertical spacing lines\n */\n Snapping.prototype.addVSpacingLines = function (diagram, g, equallySpacedObjects, ended, right) {\n var start;\n var end;\n if (!ended) {\n for (var i = 0; i < equallySpacedObjects.length - 1; i++) {\n var crnt = equallySpacedObjects[i].obj instanceof Selector ?\n getBounds((equallySpacedObjects[i].obj).wrapper) : ((equallySpacedObjects[i].obj).bounds);\n var next = equallySpacedObjects[i + 1].obj instanceof Selector ?\n getBounds((equallySpacedObjects[i + 1].obj).wrapper) :\n ((equallySpacedObjects[i + 1].obj).bounds);\n start = { x: right + 15, y: crnt.y + crnt.height };\n end = { x: right + 15, y: next.y };\n this.renderSpacingLines(start, end, g, this.getAdornerLayerSvg(), diagram.scroller.transform);\n }\n }\n };\n /**\n * To add same width lines\n */\n Snapping.prototype.addSameWidthLines = function (diagram, snapLine, sameWidths, horizontalSnap, ended, shape) {\n this.sortByDistance(sameWidths, 'offset');\n var bounds = getBounds(shape.wrapper);\n var target = sameWidths[0];\n var startPt;\n var endPt;\n var targetBounds = (target.source).bounds;\n var sameSizes = [];\n sameSizes.push(sameWidths[0]);\n var i;\n var crntbounds;\n for (i = 1; i < sameWidths.length; i++) {\n crntbounds = (sameWidths[i].source).bounds;\n if (crntbounds.width === targetBounds.width) {\n sameSizes.push(sameWidths[i]);\n }\n }\n if (!ended) {\n startPt = { x: bounds.x + target.offset, y: bounds.y - 15 };\n endPt = { x: bounds.x + bounds.width + target.offset, y: bounds.y - 15 };\n this.renderSpacingLines(startPt, endPt, snapLine, this.getAdornerLayerSvg(), diagram.scroller.transform);\n for (i = 0; i < sameSizes.length; i++) {\n bounds = (sameSizes[i].source).bounds;\n startPt = { x: bounds.x, y: bounds.y - 15 };\n endPt = { x: bounds.x + bounds.width, y: bounds.y - 15 };\n this.renderSpacingLines(startPt, endPt, snapLine, this.getAdornerLayerSvg(), diagram.scroller.transform);\n }\n }\n horizontalSnap.offset = target.offset;\n horizontalSnap.snapped = true;\n };\n /**\n * To add same height lines\n */\n Snapping.prototype.addSameHeightLines = function (diagram, snapLine, sameHeights, verticalSnap, ended, shape) {\n this.sortByDistance(sameHeights, 'offset');\n var bounds = getBounds(shape.wrapper);\n var target = sameHeights[0];\n var targetBounds = (target.source).bounds;\n var start;\n var end;\n var sameSizes = [];\n sameSizes.push(sameHeights[0]);\n var i;\n var crntbounds;\n for (i = 0; i < sameHeights.length; i++) {\n crntbounds = (sameHeights[i].source).bounds;\n if (crntbounds.height === targetBounds.height) {\n sameSizes.push(sameHeights[i]);\n }\n }\n if (!ended) {\n start = { x: bounds.x + bounds.width + 15, y: bounds.y + target.offset };\n end = { x: bounds.x + bounds.width + 15, y: bounds.y + target.offset + bounds.height };\n this.renderSpacingLines(start, end, snapLine, this.getAdornerLayerSvg(), diagram.scroller.transform);\n for (i = 0; i < sameSizes.length; i++) {\n bounds = (sameSizes[i].source).bounds;\n start = { x: bounds.x + bounds.width + 15, y: bounds.y };\n end = { x: bounds.x + bounds.width + 15, y: bounds.y + bounds.height };\n this.renderSpacingLines(start, end, snapLine, this.getAdornerLayerSvg(), diagram.scroller.transform);\n }\n }\n verticalSnap.offset = target.offset;\n verticalSnap.snapped = true;\n };\n /**\n * Render spacing lines\n */\n Snapping.prototype.renderSpacingLines = function (start, end, snapLine, svg, transform) {\n var d;\n var d1;\n var line1;\n var element = new PathElement();\n var options = {};\n start = {\n x: (start.x + transform.tx) * transform.scale,\n y: (start.y + transform.ty) * transform.scale\n };\n end = {\n x: (end.x + transform.tx) * transform.scale,\n y: (end.y + transform.ty) * transform.scale\n };\n if (start.x === end.x) {\n d = 'M' + (start.x - 5) + ' ' + (start.y + 5) + 'L' + start.x + ' ' + start.y +\n 'L' + (start.x + 5) + ' ' + (start.y + 5) + 'z' + 'M' + (end.x - 5) + ' ' +\n (end.y - 5) + ' L' + end.x + ' ' + end.y + ' L' +\n (end.x + 5) + ' ' + (end.y - 5) + 'z';\n line1 = {\n startPoint: { x: start.x - 8, y: start.y - 1 },\n endPoint: { x: start.x + 8, y: start.y - 1 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId()\n };\n element.data = d;\n options.data = element.data;\n options.angle = 0;\n options.pivotX = 0;\n options.pivotY = 0;\n options.x = 0;\n options.y = 0;\n options.height = 0;\n options.width = 1;\n options.id = randomId();\n this.diagram.diagramRenderer.drawPath(snapLine, options);\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n line1 = {\n startPoint: { x: end.x - 8, y: end.y + 1 },\n endPoint: { x: end.x + 8, y: end.y + 1 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: this.getAdornerLayerSvg().id + 'spacing'\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n }\n else {\n d = 'M' + (start.x + 5) + ' ' + (start.y + 5) + ' L' + start.x + ' ' + start.y +\n ' L' + (start.x + 5) + ' ' + (start.y - 5) + 'z' + 'M' + (end.x - 5) + ' ' +\n (end.y - 5) + ' L' + end.x + ' ' + end.y +\n ' L' + (end.x - 5) + ' ' + (end.y + 5) + 'z';\n element.data = d;\n options.data = d;\n options.angle = 0;\n options.pivotX = 0;\n options.pivotY = 0;\n options.x = 0;\n options.y = 0;\n options.height = 0;\n options.width = 1;\n options.id = randomId();\n this.diagram.diagramRenderer.drawPath(snapLine, options);\n line1 = {\n visible: true, opacity: 1, id: randomId(),\n startPoint: { x: start.x - 1, y: start.y - 8 },\n endPoint: { x: start.x - 1, y: start.y + 8 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '0', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n line1 = {\n width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId(),\n startPoint: { x: end.x + 1, y: end.y - 8 },\n endPoint: { x: end.x + 1, y: end.y + 8 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '0'\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n }\n line1 = {\n startPoint: { x: start.x, y: start.y },\n endPoint: { x: end.x, y: end.y }, stroke: '#07EDE1', strokeWidth: 1, fill: '#07EDE1',\n dashArray: '0', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId()\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n };\n /**\n * To Create Snap object with position, initial bounds, and final bounds\n * @private\n */\n Snapping.prototype.createSnapObject = function (targetBounds, bounds, snap) {\n var snapObject;\n switch (snap) {\n case 'left':\n snapObject = {\n start: { x: (targetBounds.x), y: Math.min(targetBounds.y, bounds.y) },\n end: { x: (targetBounds.x), y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height) },\n offsetX: targetBounds.x - bounds.x, offsetY: 0, type: 'sideAlign'\n };\n break;\n case 'right':\n snapObject = {\n type: 'sideAlign',\n start: { x: (targetBounds.x + targetBounds.width), y: Math.min(targetBounds.y, bounds.y) },\n offsetX: targetBounds.x + targetBounds.width - bounds.x - bounds.width,\n offsetY: 0,\n end: {\n x: (targetBounds.x + targetBounds.width),\n y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height)\n },\n };\n break;\n case 'top':\n snapObject = {\n offsetY: targetBounds.y - bounds.y, offsetX: 0, type: 'sideAlign',\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y },\n end: { x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)), y: targetBounds.y },\n };\n break;\n case 'bottom':\n snapObject = {\n type: 'sideAlign', offsetY: targetBounds.y + targetBounds.height - bounds.y - bounds.height, offsetX: 0,\n end: {\n x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)),\n y: targetBounds.y + targetBounds.height\n },\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y + targetBounds.height },\n };\n break;\n case 'topBottom':\n snapObject = {\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y + targetBounds.height },\n end: {\n x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)),\n y: targetBounds.y + targetBounds.height\n },\n offsetY: targetBounds.y + targetBounds.height - bounds.y, offsetX: 0, type: 'sideAlign'\n };\n break;\n case 'bottomTop':\n snapObject = {\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y },\n end: { x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)), y: targetBounds.y },\n offsetY: targetBounds.y - bounds.y - bounds.height, offsetX: 0, type: 'sideAlign'\n };\n break;\n case 'leftRight':\n snapObject = {\n start: { x: (targetBounds.x + targetBounds.width), y: Math.min(targetBounds.y, bounds.y) },\n end: {\n x: (targetBounds.x + targetBounds.width),\n y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height)\n },\n offsetX: targetBounds.x + targetBounds.width - bounds.x, offsetY: 0, type: 'sideAlign'\n };\n break;\n case 'rightLeft':\n snapObject = {\n start: { x: (targetBounds.x), y: (Math.min(targetBounds.y, bounds.y)) },\n end: { x: (targetBounds.x), y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height) },\n offsetX: targetBounds.x - bounds.x - bounds.width, offsetY: 0, type: 'sideAlign'\n };\n break;\n case 'centerX':\n snapObject = {\n start: { x: (targetBounds.x + targetBounds.width / 2), y: (Math.min(targetBounds.y, bounds.y)) },\n end: {\n x: (targetBounds.x + targetBounds.width / 2),\n y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height)\n },\n offsetX: targetBounds.x + targetBounds.width / 2 - (bounds.x + bounds.width / 2), offsetY: 0, type: 'centerAlign'\n };\n break;\n case 'centerY':\n snapObject = {\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y + targetBounds.height / 2 },\n end: {\n x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)),\n y: targetBounds.y + targetBounds.height / 2\n },\n offsetY: targetBounds.y + targetBounds.height / 2 - (bounds.y + bounds.height / 2), offsetX: 0, type: 'centerAlign'\n };\n break;\n }\n return snapObject;\n };\n /**\n * Calculate the snap angle\n * @private\n */\n Snapping.prototype.snapAngle = function (diagram, angle) {\n var snapSettings = this.diagram.snapSettings;\n var snapAngle = snapSettings.snapAngle;\n var width = angle % (snapAngle || 0);\n if (width >= (snapAngle / 2)) {\n return angle + snapAngle - width;\n }\n else {\n return angle - width;\n }\n };\n /**\n * Check whether the node to be snapped or not.\n */\n Snapping.prototype.canConsider = function (nameTable, selectedObject, target) {\n var consider = false;\n if (this.diagram.selectedItems.nodes.length && this.diagram.selectedItems.nodes[0].id === target.id) {\n return false;\n }\n else {\n return true;\n }\n };\n /**\n * Find the total number of nodes in diagram using SpatialSearch\n */\n Snapping.prototype.findNodes = function (spatialSearch, node, child, viewPort, nodesInView) {\n var nodes = [];\n var nd;\n var bounds;\n var quads = spatialSearch.findQuads(nodesInView ? viewPort : child);\n for (var i = 0; i < quads.length; i++) {\n var quad = quads[i];\n if (quad.objects.length > 0) {\n for (var j = 0; j < quad.objects.length; j++) {\n nd = quad.objects[j];\n if (!(this.diagram.nameTable[nd.id] instanceof Connector) && nd.visible) {\n bounds = getBounds(nd);\n if (nodes.indexOf(nd) === -1 && this.intersectsRect(child, bounds)) {\n nodes.push(nd);\n }\n if (nodesInView && nodesInView.indexOf(nd) && this.intersectsRect(viewPort, bounds)) {\n nodesInView.push(nd);\n }\n }\n }\n }\n }\n return nodes;\n };\n Snapping.prototype.intersectsRect = function (child, bounds) {\n return ((((bounds.x < (child.x + child.width)) && (child.x < (bounds.x + bounds.width)))\n && (bounds.y < (child.y + child.height))) && (child.y < (bounds.y + bounds.height)));\n };\n Snapping.prototype.getAdornerLayerSvg = function () {\n return this.diagram.diagramRenderer.adornerSvgLayer;\n };\n /**\n * To remove grid lines on mouse move and mouse up\n * @private\n */\n Snapping.prototype.removeGuidelines = function (diagram) {\n var selectionRect = this.getAdornerLayerSvg().getElementById('_SnappingLines');\n var line = this.getAdornerLayerSvg().getElementById('pivotLine');\n if (selectionRect) {\n selectionRect.parentNode.removeChild(selectionRect);\n }\n if (line) {\n line.parentNode.removeChild(line);\n }\n };\n /**\n * Sort the objects by its distance\n */\n Snapping.prototype.sortByDistance = function (obj, value, ascending) {\n var i;\n var j;\n var temp;\n if (ascending) {\n for (i = 0; i < obj.length; i++) {\n for (j = i + 1; j < obj.length; j++) {\n if (obj[i][value] > obj[j][value]) {\n temp = obj[i];\n obj[i] = obj[j];\n obj[j] = temp;\n }\n }\n }\n }\n else {\n for (i = 0; i < obj.length; i++) {\n for (j = i + 1; j < obj.length; j++) {\n if (obj[i][value] < obj[j][value]) {\n temp = obj[i];\n obj[i] = obj[j];\n obj[j] = temp;\n }\n }\n }\n }\n };\n /**\n * To find nodes that are equally placed at left of the selected node\n */\n Snapping.prototype.findEquallySpacedNodesAtLeft = function (objectsAtLeft, equalDistance, top, equallySpaced) {\n var prevBounds;\n var targetBounds;\n var dist;\n var i;\n for (i = 1; i < objectsAtLeft.length; i++) {\n prevBounds = ((objectsAtLeft[i - 1].obj).bounds);\n targetBounds = ((objectsAtLeft[i].obj).bounds);\n dist = prevBounds.x - targetBounds.x - targetBounds.width;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtLeft[i];\n if (targetBounds.y < top) {\n top = targetBounds.y;\n }\n }\n else {\n break;\n }\n }\n return top;\n };\n /**\n * To find nodes that are equally placed at right of the selected node\n */\n Snapping.prototype.findEquallySpacedNodesAtRight = function (objectsAtRight, equalDistance, top, equallySpaced, snapObjDistance) {\n var actualDistance = objectsAtRight[0].distance;\n var target;\n var targetBounds;\n var prevBounds;\n var dist;\n if (Math.abs(equalDistance - actualDistance) <= snapObjDistance) {\n for (var i = 0; i < objectsAtRight.length - 1; i++) {\n target = objectsAtRight[i].obj;\n targetBounds = ((objectsAtRight[i + 1].obj).bounds);\n prevBounds = (target.bounds);\n dist = targetBounds.x - prevBounds.x - prevBounds.width;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtRight[i + 1];\n if (prevBounds.y < top) {\n top = prevBounds.y;\n }\n }\n else {\n break;\n }\n }\n }\n return top;\n };\n Snapping.prototype.findEquallySpacedNodesAtTop = function (objectsAtTop, equalDistance, right, equallySpaced) {\n var prevBounds;\n var targetBounds;\n var dist;\n for (var i = 1; i < objectsAtTop.length; i++) {\n prevBounds = ((objectsAtTop[i - 1].obj).bounds);\n targetBounds = ((objectsAtTop[i].obj).bounds);\n dist = prevBounds.y - targetBounds.y - targetBounds.height;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtTop[i];\n if (targetBounds.x + targetBounds.width > right) {\n right = targetBounds.x + targetBounds.width;\n }\n }\n else {\n break;\n }\n }\n return right;\n };\n /**\n * To find nodes that are equally placed at bottom of the selected node\n */\n Snapping.prototype.findEquallySpacedNodesAtBottom = function (objectsAtBottom, equalDistance, right, equallySpaced, snapObjDistance) {\n var actualDistance = objectsAtBottom[0].distance;\n var target;\n var targetBounds;\n var prevBounds;\n var dist;\n if (Math.abs(equalDistance - actualDistance) <= snapObjDistance) {\n for (var i = 0; i < objectsAtBottom.length - 1; i++) {\n target = objectsAtBottom[i].obj;\n targetBounds = ((objectsAtBottom[i + 1].obj).bounds);\n prevBounds = (target.bounds);\n dist = targetBounds.y - prevBounds.y - prevBounds.height;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtBottom[i + 1];\n if (prevBounds.x + prevBounds.width > right) {\n right = prevBounds.x + prevBounds.width;\n }\n }\n else {\n break;\n }\n }\n }\n return right;\n };\n /**\n * To get Adoner layer to draw snapLine\n * @private\n */\n Snapping.prototype.getLayer = function () {\n var snapLine;\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) {\n snapLine = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n snapLine.setAttribute('id', '_SnappingLines');\n snapLine.setAttribute('shapeRendering', 'crispEdges');\n this.getAdornerLayerSvg().appendChild(snapLine);\n }\n return snapLine;\n };\n /**\n * Constructor for the snapping module\n * @private\n */\n // constructor() {\n // //constructs the snapping module\n // }\n /**\n * To destroy the snapping module\n * @return {void}\n * @private\n */\n Snapping.prototype.destroy = function () {\n /**\n * Destroys the snapping module\n */\n };\n /**\n * Get module name.\n */\n Snapping.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Snapping';\n };\n return Snapping;\n}());\nexport { Snapping };\n","import { Node } from './node';\nimport { DiagramAction } from '../enum/enum';\nimport { removeItem, getObjectType } from '../utility/diagram-util';\nimport { cloneObject } from '../utility/base-util';\nimport { findAnnotation, findPort } from '../utility/diagram-util';\n/**\n * Undo redo function used for revert and restore the changes\n */\nvar UndoRedo = /** @class */ (function () {\n /**\n * Constructor for the undo redo module\n * @private\n */\n function UndoRedo() {\n this.groupUndo = false;\n this.childTable = [];\n //constructs the undo redo module\n }\n /** @private */\n UndoRedo.prototype.initHistory = function (diagram) {\n diagram.historyList = {\n canRedo: false, canUndo: false, currentEntry: null,\n push: diagram.addHistoryEntry.bind(diagram), undo: Function, redo: Function,\n startGroupAction: diagram.startGroupAction.bind(diagram), endGroupAction: diagram.endGroupAction.bind(diagram),\n canLog: null, undoStack: [], redoStack: []\n };\n };\n /** @private */\n UndoRedo.prototype.addHistoryEntry = function (entry, diagram) {\n var entryObject = null;\n var nextEntry = null;\n if (diagram.historyList.canLog) {\n var hEntry = diagram.historyList.canLog(entry);\n if (hEntry.cancel === true) {\n return;\n }\n }\n if (diagram.historyList && diagram.historyList.canUndo && diagram.historyList.currentEntry) {\n entryObject = diagram.historyList.currentEntry;\n if (entryObject.next) {\n if (entryObject.previous) {\n nextEntry = entryObject.next;\n nextEntry.previous = null;\n entryObject.next = entry;\n entry.previous = entryObject;\n }\n }\n else {\n entryObject.next = entry;\n entry.previous = entryObject;\n }\n }\n diagram.historyList.currentEntry = entry;\n this.getHistoryList(diagram);\n diagram.historyList.canUndo = true;\n diagram.historyList.canRedo = false;\n };\n /** @private */\n UndoRedo.prototype.undo = function (diagram) {\n var entry = this.getUndoEntry(diagram);\n var endGroupActionCount = 0;\n if (entry) {\n if (entry.category === 'Internal') {\n if (entry.type === 'EndGroup') {\n endGroupActionCount++;\n this.groupUndo = true;\n }\n else {\n this.undoEntry(entry, diagram);\n }\n if (this.groupUndo) {\n this.undoGroupAction(entry, diagram, endGroupActionCount);\n this.groupUndo = false;\n }\n }\n else {\n diagram.historyList.undo(entry);\n }\n }\n };\n UndoRedo.prototype.getHistoryList = function (diagram) {\n var undoStack = [];\n var redoStack = [];\n var currEntry = diagram.historyList.currentEntry;\n var undoObj;\n var redoObj;\n currEntry = diagram.historyList.currentEntry;\n if (diagram.historyList.canUndo || diagram.historyList.undoStack.length === 0) {\n this.getHistroyObject(undoStack, currEntry);\n }\n else {\n this.getHistroyObject(redoStack, currEntry);\n }\n while (currEntry && currEntry.previous) {\n undoObj = currEntry.previous;\n this.getHistroyObject(undoStack, undoObj);\n currEntry = currEntry.previous;\n }\n currEntry = diagram.historyList.currentEntry;\n while (currEntry && currEntry.next) {\n redoObj = currEntry.next;\n this.getHistroyObject(redoStack, redoObj);\n currEntry = currEntry.next;\n }\n diagram.historyList.undoStack = undoStack;\n diagram.historyList.redoStack = redoStack;\n };\n UndoRedo.prototype.getHistroyObject = function (list, obj) {\n if (obj && obj.type !== 'StartGroup' && obj.type !== 'EndGroup') {\n list.push({\n redoObject: obj.redoObject ? obj.redoObject : null,\n undoObject: obj.undoObject ? obj.undoObject : null,\n type: obj.type ? obj.type : null,\n category: obj.category ? obj.category : null\n });\n }\n };\n UndoRedo.prototype.undoGroupAction = function (entry, diagram, endGroupActionCount) {\n while (endGroupActionCount !== 0) {\n this.undoEntry(entry, diagram);\n entry = this.getUndoEntry(diagram);\n if (entry.type === 'StartGroup') {\n endGroupActionCount--;\n }\n else if (entry.type === 'EndGroup') {\n endGroupActionCount++;\n }\n }\n endGroupActionCount = 0;\n };\n UndoRedo.prototype.undoEntry = function (entry, diagram) {\n var obj;\n if (entry.type !== 'PropertyChanged' && entry.type !== 'CollectionChanged' && entry.type !== 'LabelCollectionChanged') {\n obj = (entry.undoObject);\n }\n if (entry.type !== 'StartGroup' && entry.type !== 'EndGroup') {\n if (diagram.historyList.undoStack.length > 0) {\n var addObject = diagram.historyList.undoStack.splice(0, 1);\n diagram.historyList.redoStack.splice(0, 0, addObject[0]);\n }\n }\n diagram.protectPropertyChange(true);\n diagram.diagramActions |= DiagramAction.UndoRedo;\n switch (entry.type) {\n case 'PositionChanged':\n case 'Align':\n case 'Distribute':\n this.recordPositionChanged(obj, diagram);\n break;\n case 'SizeChanged':\n case 'Sizing':\n this.recordSizeChanged(obj, diagram, entry);\n break;\n case 'RotationChanged':\n this.recordRotationChanged(obj, diagram, entry);\n break;\n case 'ConnectionChanged':\n this.recordConnectionChanged(obj, diagram);\n break;\n case 'PropertyChanged':\n this.recordPropertyChanged(entry, diagram, false);\n break;\n case 'CollectionChanged':\n entry.isUndo = true;\n this.recordCollectionChanged(entry, diagram);\n entry.isUndo = false;\n break;\n case 'LabelCollectionChanged':\n entry.isUndo = true;\n this.recordLabelCollectionChanged(entry, diagram);\n entry.isUndo = false;\n break;\n case 'PortCollectionChanged':\n entry.isUndo = true;\n this.recordPortCollectionChanged(entry, diagram);\n entry.isUndo = false;\n break;\n case 'Group':\n this.unGroup(entry, diagram);\n break;\n case 'UnGroup':\n this.group(entry, diagram);\n break;\n case 'SegmentChanged':\n this.recordSegmentChanged(obj, diagram);\n break;\n case 'PortPositionChanged':\n this.recordPortChanged(entry, diagram, false);\n break;\n case 'AnnotationPropertyChanged':\n this.recordAnnotationChanged(entry, diagram, false);\n break;\n }\n diagram.diagramActions &= ~DiagramAction.UndoRedo;\n diagram.protectPropertyChange(false);\n diagram.historyChangeTrigger(entry);\n };\n UndoRedo.prototype.group = function (historyEntry, diagram) {\n diagram.add(historyEntry.undoObject);\n };\n UndoRedo.prototype.unGroup = function (entry, diagram) {\n var i = 0;\n entry.redoObject = cloneObject(entry.undoObject);\n var node = entry.undoObject;\n diagram.commandHandler.unGroup(node);\n };\n UndoRedo.prototype.ignoreProperty = function (key) {\n if (key === 'zIndex' || key === 'wrapper') {\n return true;\n }\n return false;\n };\n UndoRedo.prototype.getProperty = function (collection, property) {\n for (var _i = 0, _a = Object.keys(property); _i < _a.length; _i++) {\n var key = _a[_i];\n if (!this.ignoreProperty(key)) {\n if (property[key] instanceof Object) {\n this.getProperty(collection[key], property[key]);\n }\n else {\n collection[key] = property[key];\n }\n }\n }\n };\n UndoRedo.prototype.recordAnnotationChanged = function (entry, diagram, isRedo) {\n var entryObject = ((isRedo) ? entry.redoObject : entry.undoObject);\n var oldElement = findAnnotation(entryObject, entry.changeObjectId);\n var undoChanges = diagram.commandHandler.getAnnotationChanges(diagram.nameTable[entryObject.id], oldElement);\n var currentObject = diagram.nameTable[entryObject.id];\n var currentElement = findAnnotation(currentObject, entry.changeObjectId);\n currentElement.offset = oldElement.offset;\n currentElement.margin = oldElement.margin;\n currentElement.width = oldElement.width;\n currentElement.height = oldElement.height;\n currentElement.rotateAngle = oldElement.rotateAngle;\n currentElement.margin = oldElement.margin;\n if (currentObject instanceof Node) {\n diagram.nodePropertyChange(currentObject, {}, undoChanges);\n }\n else {\n diagram.connectorPropertyChange(currentObject, {}, undoChanges);\n }\n };\n UndoRedo.prototype.recordPortChanged = function (entry, diagram, isRedo) {\n var entryObject = ((isRedo) ? entry.redoObject.nodes[0] :\n entry.undoObject.nodes[0]);\n var oldElement = findPort(entryObject, entry.changeObjectId);\n var undoChanges = diagram.commandHandler.getPortChanges(diagram.nameTable[entryObject.id], oldElement);\n var currentObject = diagram.nameTable[entryObject.id];\n var currentElement = findPort(currentObject, entry.changeObjectId);\n currentElement.offset = oldElement.offset;\n diagram.nodePropertyChange(currentObject, {}, undoChanges);\n };\n UndoRedo.prototype.recordPropertyChanged = function (entry, diagram, isRedo) {\n var redoObject = entry.redoObject;\n var undoObject = entry.undoObject;\n this.getProperty(diagram, (isRedo ? redoObject : undoObject));\n isRedo ? diagram.onPropertyChanged(redoObject, undoObject) : diagram.onPropertyChanged(undoObject, redoObject);\n diagram.diagramActions = diagram.diagramActions | DiagramAction.UndoRedo;\n };\n UndoRedo.prototype.recordSegmentChanged = function (obj, diagram) {\n var i = 0;\n var node;\n var connector;\n if (obj.connectors && obj.connectors.length > 0) {\n for (i = 0; i < obj.connectors.length; i++) {\n connector = obj.connectors[i];\n this.segmentChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.segmentChanged = function (connector, diagram) {\n var conn = diagram.nameTable[connector.id];\n conn.segments = connector.segments;\n diagram.commandHandler.updateEndPoint(conn);\n };\n UndoRedo.prototype.recordPositionChanged = function (obj, diagram) {\n var i = 0;\n var node;\n var connector;\n if (obj.nodes && obj.nodes.length > 0) {\n for (i = 0; i < obj.nodes.length; i++) {\n node = obj.nodes[i];\n this.positionChanged(node, diagram);\n }\n }\n if (obj.connectors && obj.connectors.length > 0) {\n for (i = 0; i < obj.connectors.length; i++) {\n connector = obj.connectors[i];\n this.connectionChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.positionChanged = function (obj, diagram, entry) {\n var node = diagram.nameTable[obj.id];\n if (obj.processId && !node.processId) {\n diagram.addProcess(obj, obj.processId);\n }\n if (!obj.processId && node.processId) {\n diagram.removeProcess(obj.id);\n }\n if (node.processId) {\n var tx = obj.margin.left - node.margin.left;\n var ty = obj.margin.top - node.margin.top;\n diagram.drag(node, tx, ty);\n }\n else {\n var tx = obj.offsetX - node.wrapper.offsetX;\n var ty = obj.offsetY - node.wrapper.offsetY;\n diagram.drag(node, tx, ty);\n }\n if (diagram.bpmnModule) {\n diagram.bpmnModule.updateDocks(node, diagram);\n }\n };\n UndoRedo.prototype.recordSizeChanged = function (obj, diagram, entry) {\n var i = 0;\n var connector;\n var node;\n if (obj && obj.nodes && obj.nodes.length > 0) {\n for (i = 0; i < obj.nodes.length; i++) {\n node = obj.nodes[i];\n if (node.children) {\n var elements = [];\n var nodes = diagram.commandHandler.getAllDescendants(node, elements);\n for (var i_1 = 0; i_1 < nodes.length; i_1++) {\n var tempNode = entry.childTable[nodes[i_1].id];\n if ((getObjectType(tempNode) === Node)) {\n this.sizeChanged(tempNode, diagram, entry);\n this.positionChanged(tempNode, diagram, entry);\n }\n else {\n this.connectionChanged(tempNode, diagram, entry);\n }\n }\n }\n else {\n this.sizeChanged(node, diagram);\n this.positionChanged(node, diagram);\n }\n }\n }\n if (obj && obj.connectors && obj.connectors.length > 0) {\n var connectors = obj.connectors;\n for (i = 0; i < connectors.length; i++) {\n connector = connectors[i];\n this.connectionChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.sizeChanged = function (obj, diagram, entry) {\n var node = diagram.nameTable[obj.id];\n var scaleWidth = obj.wrapper.actualSize.width / node.wrapper.actualSize.width;\n var scaleHeight = obj.wrapper.actualSize.height / node.wrapper.actualSize.height;\n if (entry && entry.childTable) {\n entry.childTable[obj.id] = cloneObject(node);\n }\n diagram.scale(node, scaleWidth, scaleHeight, {\n x: obj.wrapper.offsetX / node.wrapper.offsetX,\n y: obj.wrapper.offsetY / node.wrapper.offsetY\n });\n };\n UndoRedo.prototype.recordRotationChanged = function (obj, diagram, entry) {\n var i = 0;\n var node;\n var connector;\n var selectorObj = diagram.selectedItems;\n selectorObj.rotateAngle = obj.rotateAngle;\n if (selectorObj && selectorObj.wrapper) {\n selectorObj.wrapper.rotateAngle = obj.rotateAngle;\n }\n if (obj && obj.nodes && obj.nodes.length > 0) {\n for (i = 0; i < obj.nodes.length; i++) {\n node = obj.nodes[i];\n this.rotationChanged(node, diagram);\n this.positionChanged(node, diagram);\n }\n }\n if (obj && obj.connectors && obj.connectors.length > 0) {\n for (i = 0; i < obj.connectors.length; i++) {\n connector = obj.connectors[i];\n this.connectionChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.rotationChanged = function (obj, diagram) {\n var node = diagram.nameTable[obj.id];\n diagram.rotate(node, obj.rotateAngle - node.rotateAngle);\n };\n UndoRedo.prototype.recordConnectionChanged = function (obj, diagram) {\n var connector = obj.connectors[0];\n this.connectionChanged(connector, diagram);\n };\n UndoRedo.prototype.connectionChanged = function (obj, diagram, entry) {\n var connector = diagram.nameTable[obj.id];\n var node;\n if (obj.sourcePortID !== connector.sourcePortID) {\n connector.sourcePortID = obj.sourcePortID;\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: obj.sourcePortID });\n }\n if (obj.targetPortID !== connector.targetPortID) {\n connector.targetPortID = obj.targetPortID;\n diagram.connectorPropertyChange(connector, {}, { targetPortID: obj.targetPortID });\n }\n if (obj.sourceID !== connector.sourceID) {\n if (obj.sourceID === '') {\n node = diagram.nameTable[connector.sourceID];\n removeItem(node.outEdges, obj.id);\n }\n else {\n node = diagram.nameTable[obj.sourceID];\n node.outEdges.push(obj.id);\n }\n connector.sourceID = obj.sourceID;\n diagram.connectorPropertyChange(connector, {}, { sourceID: obj.sourceID });\n }\n if (obj.targetID !== connector.targetID) {\n if (obj.targetID === '') {\n node = diagram.nameTable[connector.targetID];\n removeItem(node.inEdges, obj.id);\n }\n else {\n node = diagram.nameTable[obj.targetID];\n node.inEdges.push(obj.id);\n }\n connector.targetID = obj.targetID;\n diagram.connectorPropertyChange(connector, {}, { targetID: obj.targetID });\n }\n if (entry && entry.childTable) {\n entry.childTable[obj.id] = cloneObject(connector);\n }\n var sx = obj.sourcePoint.x - connector.sourcePoint.x;\n var sy = obj.sourcePoint.y - connector.sourcePoint.y;\n if (sx !== 0 || sy !== 0) {\n diagram.dragSourceEnd(connector, sx, sy);\n }\n var tx = obj.targetPoint.x - connector.targetPoint.x;\n var ty = obj.targetPoint.y - connector.targetPoint.y;\n if (tx !== 0 || ty !== 0) {\n diagram.dragTargetEnd(connector, tx, ty);\n }\n diagram.updateSelector();\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n };\n UndoRedo.prototype.recordCollectionChanged = function (entry, diagram) {\n var obj = entry.undoObject;\n if (entry && entry.changeType) {\n var changeType = void 0;\n if (entry.isUndo) {\n if (entry.changeType === 'Insert') {\n changeType = 'Remove';\n }\n else {\n changeType = 'Insert';\n }\n }\n else {\n changeType = entry.changeType;\n }\n if (changeType === 'Remove') {\n if (obj.nodeId) {\n diagram.remove(diagram.nameTable[obj.nodeId + '_textannotation_' + obj.id]);\n }\n else {\n diagram.remove(obj);\n diagram.clearSelectorLayer();\n }\n }\n else {\n diagram.clearSelectorLayer();\n if (obj.parentId) {\n var parentNode = diagram.nameTable[obj.parentId];\n if (parentNode) {\n diagram.addChild(parentNode, obj);\n }\n else {\n diagram.add(obj);\n }\n }\n else if (obj.nodeId) {\n diagram.addTextAnnotation(obj, diagram.nameTable[obj.nodeId]);\n }\n else {\n if (!diagram.nameTable[obj.id]) {\n diagram.add(obj);\n }\n }\n if (obj.processId && diagram.nameTable[obj.processId]) {\n diagram.addProcess(obj, obj.processId);\n }\n }\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n }\n };\n UndoRedo.prototype.recordLabelCollectionChanged = function (entry, diagram) {\n var label = entry.undoObject;\n var obj = entry.redoObject;\n var node = diagram.nameTable[obj.id];\n if (entry && entry.changeType) {\n var changeType = void 0;\n if (entry.isUndo) {\n changeType = (entry.changeType === 'Insert') ? 'Remove' : 'Insert';\n }\n else {\n changeType = entry.changeType;\n }\n if (changeType === 'Remove') {\n diagram.removeLabels(node, [label]);\n diagram.clearSelectorLayer();\n }\n else {\n diagram.clearSelectorLayer();\n diagram.addLabels(node, [label]);\n }\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n }\n };\n UndoRedo.prototype.recordPortCollectionChanged = function (entry, diagram) {\n var port = entry.undoObject;\n var obj = entry.redoObject;\n var node = diagram.nameTable[obj.id];\n if (entry && entry.changeType) {\n var changeType = void 0;\n if (entry.isUndo) {\n changeType = (entry.changeType === 'Insert') ? 'Remove' : 'Insert';\n }\n else {\n changeType = entry.changeType;\n }\n if (changeType === 'Remove') {\n diagram.removePorts(node, [port]);\n diagram.clearSelectorLayer();\n }\n else {\n diagram.clearSelectorLayer();\n diagram.addPorts(node, [port]);\n }\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n UndoRedo.prototype.redo = function (diagram) {\n var entry = this.getRedoEntry(diagram);\n var startGroupActionCount = 0;\n if (entry) {\n if (entry.category === 'Internal') {\n if (entry.type === 'StartGroup') {\n startGroupActionCount++;\n this.groupUndo = true;\n }\n else {\n this.redoEntry(entry, diagram);\n }\n if (this.groupUndo) {\n this.redoGroupAction(entry, diagram, startGroupActionCount);\n this.groupUndo = false;\n }\n }\n else {\n diagram.historyList.redo(entry);\n }\n }\n };\n UndoRedo.prototype.redoGroupAction = function (entry, diagram, startGroupActionCount) {\n while (startGroupActionCount !== 0) {\n this.redoEntry(entry, diagram);\n entry = this.getRedoEntry(diagram);\n if (entry.type === 'EndGroup') {\n startGroupActionCount--;\n }\n else if (entry.type === 'StartGroup') {\n startGroupActionCount++;\n }\n }\n startGroupActionCount = 0;\n };\n UndoRedo.prototype.redoEntry = function (historyEntry, diagram) {\n var redoObject;\n if (historyEntry.type !== 'PropertyChanged' && historyEntry.type !== 'CollectionChanged') {\n redoObject = (historyEntry.redoObject);\n }\n diagram.diagramActions |= DiagramAction.UndoRedo;\n if (historyEntry.type !== 'StartGroup' && historyEntry.type !== 'EndGroup') {\n if (diagram.historyList.redoStack.length > 0) {\n var addObject = diagram.historyList.redoStack.splice(0, 1);\n diagram.historyList.undoStack.splice(0, 0, addObject[0]);\n }\n }\n diagram.protectPropertyChange(true);\n switch (historyEntry.type) {\n case 'PositionChanged':\n case 'Align':\n case 'Distribute':\n this.recordPositionChanged(redoObject, diagram);\n break;\n case 'SizeChanged':\n case 'Sizing':\n this.recordSizeChanged(redoObject, diagram, historyEntry);\n break;\n case 'RotationChanged':\n this.recordRotationChanged(redoObject, diagram, historyEntry);\n break;\n case 'ConnectionChanged':\n this.recordConnectionChanged(redoObject, diagram);\n break;\n case 'PropertyChanged':\n this.recordPropertyChanged(historyEntry, diagram, true);\n break;\n case 'CollectionChanged':\n this.recordCollectionChanged(historyEntry, diagram);\n break;\n case 'LabelCollectionChanged':\n this.recordLabelCollectionChanged(historyEntry, diagram);\n break;\n case 'PortCollectionChanged':\n this.recordPortCollectionChanged(historyEntry, diagram);\n break;\n case 'Group':\n this.group(historyEntry, diagram);\n break;\n case 'UnGroup':\n this.unGroup(historyEntry, diagram);\n break;\n case 'SegmentChanged':\n this.recordSegmentChanged(redoObject, diagram);\n break;\n case 'PortPositionChanged':\n this.recordPortChanged(historyEntry, diagram, true);\n break;\n case 'AnnotationPropertyChanged':\n this.recordAnnotationChanged(historyEntry, diagram, true);\n break;\n }\n diagram.protectPropertyChange(false);\n diagram.diagramActions &= ~DiagramAction.UndoRedo;\n diagram.historyChangeTrigger(historyEntry);\n };\n UndoRedo.prototype.getUndoEntry = function (diagram) {\n var undoEntry = null;\n var currentObject;\n var hList = diagram.historyList;\n if (hList.canUndo) {\n undoEntry = hList.currentEntry;\n currentObject = hList.currentEntry.previous;\n if (currentObject) {\n hList.currentEntry = currentObject;\n if (!hList.canRedo) {\n hList.canRedo = true;\n }\n }\n else {\n hList.canRedo = true;\n hList.canUndo = false;\n }\n }\n return undoEntry;\n };\n UndoRedo.prototype.getRedoEntry = function (diagram) {\n var redoEntry = null;\n var entryCurrent;\n var hList = diagram.historyList;\n if (hList.canRedo) {\n if (!hList.currentEntry.previous && !hList.canUndo) {\n entryCurrent = hList.currentEntry;\n }\n else {\n entryCurrent = hList.currentEntry.next;\n }\n if (entryCurrent) {\n hList.currentEntry = entryCurrent;\n if (!hList.canUndo) {\n hList.canUndo = true;\n }\n if (!entryCurrent.next) {\n hList.canRedo = false;\n hList.canUndo = true;\n }\n }\n redoEntry = hList.currentEntry;\n }\n return redoEntry;\n };\n /**\n * To destroy the undo redo module\n * @return {void}\n * @private\n */\n UndoRedo.prototype.destroy = function () {\n /**\n * Destroys the undo redo module\n */\n };\n /**\n * Get module name.\n */\n UndoRedo.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'UndoRedo';\n };\n return UndoRedo;\n}());\nexport { UndoRedo };\n","import { Container } from '../core/containers/container';\nimport { DiagramEvent } from '../enum/enum';\n/**\n * Layout Animation function to enable or disable layout animation\n */\nvar LayoutAnimation = /** @class */ (function () {\n function LayoutAnimation() {\n this.protectChange = false;\n }\n /**\n * Layout expand function for animation of expand and collapse\n */\n LayoutAnimation.prototype.expand = function (animation, objects, node, diagram) {\n var _this = this;\n var setIntervalObject = {};\n var i = 0;\n var j = 0;\n setIntervalObject[i] = setInterval(function () {\n j++;\n return _this.layoutAnimation(objects, setIntervalObject, j === 6, diagram);\n }, 20);\n if (node.isExpanded) {\n var opacity_1 = .2;\n var protect = 'isProtectedOnChange';\n this.protectChange = diagram[protect];\n diagram.protectPropertyChange(false);\n //let objects: ILayout = diagram.doLayout();\n var setIntervalObjects_1 = {};\n var x = 0;\n this.updateOpacity(node, opacity_1, diagram);\n var current = this;\n setIntervalObjects_1[x] = setInterval(function () {\n opacity_1 <= 1 ? _this.updateOpacity(node, opacity_1, diagram) : clearInterval(setIntervalObjects_1[0]);\n opacity_1 += .2;\n }, 20);\n }\n };\n /**\n * Setinterval and Clear interval for layout animation\n */\n /** @private */\n LayoutAnimation.prototype.layoutAnimation = function (objValue, layoutTimer, stop, diagram) {\n if (!stop) {\n for (var k = 0; k < objValue.objects.length; k++) {\n var node = diagram.nameTable[objValue.objects[k].id];\n node.offsetX += objValue.objects[k].differenceX / 5;\n node.offsetY += objValue.objects[k].differenceY / 5;\n }\n }\n if (stop) {\n clearInterval(layoutTimer[0]);\n diagram.protectPropertyChange(true);\n diagram.triggerEvent(DiagramEvent.animationComplete, undefined);\n diagram.organizationalChartModule.isAnimation = false;\n diagram.layout.fixedNode = '';\n diagram.protectPropertyChange(this.protectChange);\n }\n };\n /**\n * update the node opacity for the node and connector once the layout animation starts\n */\n LayoutAnimation.prototype.updateOpacity = function (source, value, diagram) {\n for (var i = 0; i < source.outEdges.length; i++) {\n var connector = diagram.nameTable[source.outEdges[i]];\n var target = diagram.nameTable[connector.targetID];\n connector.style.opacity = value;\n for (var j = 0; j < connector.wrapper.children.length; j++) {\n connector.wrapper.children[j].style.opacity = value;\n target.style.opacity = value;\n if (target.wrapper instanceof Container) {\n diagram.updateNodeProperty(target.wrapper, undefined, value);\n }\n }\n this.updateOpacity(target, value, diagram);\n }\n };\n /**\n * To destroy the LayoutAnimate module\n * @return {void}\n * @private\n */\n LayoutAnimation.prototype.destroy = function () {\n /**\n * Destroys the LayoutAnimate module\n */\n };\n /**\n * Get module name.\n */\n LayoutAnimation.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'LayoutAnimate';\n };\n return LayoutAnimation;\n}());\nexport { LayoutAnimation };\n","import { Rect } from '../primitives/rect';\nimport { OrthogonalSegment } from '../objects/connector';\nimport { getFunction } from '../utility/base-util';\nimport { Point } from '../primitives/point';\n/**\n * Hierarchical Tree and Organizational Chart\n */\nvar HierarchicalTree = /** @class */ (function () {\n /**\n * Constructor for the organizational chart module.\n * @private\n */\n function HierarchicalTree() {\n /**\n * Defines the layout animation\n *\n */\n this.isAnimation = false;\n //constructs the layout module\n }\n /**\n * To destroy the organizational chart\n * @return {void}\n * @private\n */\n HierarchicalTree.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n HierarchicalTree.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'OrganizationalChart';\n };\n HierarchicalTree.prototype.updateLayout = function (nodes, nameTable, layoutProp, viewport, uniqueId) {\n var layout = {\n type: layoutProp.type,\n nameTable: nameTable, anchorX: 0, anchorY: 0,\n firstLevelNodes: [], centerNode: null, levels: [], maxLevel: 0, graphNodes: {},\n orientation: layoutProp.orientation,\n horizontalSpacing: layoutProp.horizontalSpacing, verticalSpacing: layoutProp.verticalSpacing,\n verticalAlignment: layoutProp.verticalAlignment, horizontalAlignment: layoutProp.horizontalAlignment,\n fixedNode: layoutProp.fixedNode, getLayoutInfo: getFunction(layoutProp.getLayoutInfo), margin: layoutProp.margin,\n bounds: layoutProp.bounds, objects: [], root: layoutProp.root\n };\n this.doLayout(layout, nodes, viewport, uniqueId);\n return layout;\n };\n HierarchicalTree.prototype.doLayout = function (layout, nodes, viewport, uniqueId) {\n var node;\n var i;\n var layoutInfo = {};\n var shape;\n var rootNodes = [];\n if (layout.nameTable[layout.root]) {\n layout.firstLevelNodes.push(layout.nameTable[layout.root]);\n }\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (!node.excludeFromLayout) {\n layoutInfo = layout.graphNodes[node.id] = this.setUpLayoutInfo(layout, node);\n layoutInfo.tree.hasSubTree = false;\n if (!layout.nameTable[layout.root]) {\n if (!node.inEdges || !node.inEdges.length) {\n rootNodes.push(node);\n if (node.data && String(node.data[uniqueId]) === layout.root) {\n layout.firstLevelNodes.push(node);\n }\n }\n }\n }\n }\n if (layout.firstLevelNodes.length === 0) {\n layout.firstLevelNodes = rootNodes;\n }\n //Update relationship(parent and children)\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n node = layout.firstLevelNodes[i];\n this.updateEdges(layout, node, 1);\n }\n if (layout.firstLevelNodes.length > 0) {\n layout.rootNode = layout.firstLevelNodes[0];\n var x = 0;\n var y = 0;\n var minX = void 0;\n var maxY = void 0;\n var maxX = void 0;\n var minY = void 0;\n var j = void 0;\n var bounds = void 0;\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n bounds = this.updateTree(layout, x, y, layout.firstLevelNodes[i], 0, layout.firstLevelNodes[i - 1]);\n var rootInfo = layout.graphNodes[layout.firstLevelNodes[i].id];\n bounds.y = Math.min(bounds.y, rootInfo.y);\n bounds.x = Math.min(bounds.x, rootInfo.x);\n if (layout.orientation.indexOf('Left') !== -1) {\n y = bounds.right + layout.horizontalSpacing;\n }\n else {\n x = bounds.right + layout.horizontalSpacing;\n }\n if (i === 0) {\n minX = bounds.x;\n minY = bounds.y;\n maxX = bounds.right;\n maxY = bounds.bottom;\n }\n else {\n minX = Math.min(minX, bounds.x);\n minY = Math.min(minY, bounds.y);\n maxX = Math.max(maxX, bounds.right);\n maxY = Math.max(maxY, bounds.bottom);\n }\n }\n this.updateAnchor(layout, { x: minX, y: minY, right: maxX, bottom: maxY }, viewport);\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n this.updateNodes(layout, layout.firstLevelNodes[i], 0);\n }\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n this.updateConnectors(layout, layout.firstLevelNodes[i], 1);\n }\n }\n };\n HierarchicalTree.prototype.getBounds = function (node) {\n var x = node.offsetX - node.actualSize.width * node.pivot.x;\n var y = node.offsetY - node.actualSize.height * node.pivot.y;\n return new Rect(x, y, node.actualSize.width, node.actualSize.height);\n };\n HierarchicalTree.prototype.updateTree = function (layout, x, y, shape, level, prev, dontupdate) {\n var dimensions;\n var info = {};\n var lev;\n var obj;\n var hasChild;\n dimensions = this.getDimensions(layout, shape, x, y, level);\n info = layout.graphNodes[shape.id];\n var firstChild;\n //Set maximum level of layout\n layout.maxLevel = Math.max(layout.maxLevel, level);\n lev = level;\n hasChild = this.hasChild(layout, shape);\n if (!hasChild && !info.tree.assistants.length) {\n //update leaf nodes\n shape.treeBounds = this.updateLeafNode(layout, shape, prev, dimensions, level, dontupdate);\n return shape.treeBounds;\n }\n else {\n var treeBounds = void 0;\n var shapeBounds = void 0;\n var levelBounds = void 0;\n var d = void 0;\n var asstBounds = void 0;\n var space = void 0;\n var bottom = void 0;\n bottom = dimensions.y + dimensions.height + layout.verticalSpacing;\n if (info.tree.assistants.length) {\n //Vertically place assistants\n obj = this.setDepthSpaceForAssitants(layout, shape, bottom, dimensions.height, level, layout.verticalSpacing);\n lev = obj.level;\n bottom = obj.bottom;\n }\n if (!info.tree.assistants.length && info.tree.orientation !== 'Horizontal') {\n bottom = dimensions.y + dimensions.height + layout.verticalSpacing / 2;\n }\n if (info.tree.children.length) {\n if (info.tree.orientation === 'Horizontal' && (info.tree.type !== 'Balanced' || info.tree.children.length === 1)) {\n treeBounds = this.updateHorizontalTree(layout, shape, prev, dimensions.x, bottom, lev);\n }\n else if (info.tree.type === 'Balanced') {\n treeBounds = this.updateHorizontalTreeWithMultipleRows(layout, shape, prev, dimensions.x, bottom, lev);\n }\n else {\n treeBounds = this.updateVerticalTree(layout, shape, dimensions.x, bottom, lev, dontupdate);\n }\n }\n if (!(info.y && info.y > dimensions.y)) {\n info.y = dimensions.y;\n }\n if (!(x && x > info.mid)) {\n x = info.mid;\n }\n if (info.tree.assistants.length) {\n //Set breadth space for assistants\n space = x !== undefined ? x : dimensions.x;\n asstBounds = this.setBreadthSpaceForAssistants(layout, shape, dimensions, space, bottom, level);\n if (!hasChild) {\n levelBounds = treeBounds = asstBounds;\n x = (levelBounds.x + levelBounds.right) / 2 - dimensions.width / 2;\n treeBounds = levelBounds;\n }\n d = asstBounds ? asstBounds.canMoveBy : undefined;\n }\n info.x = x;\n if (!info.translate) {\n info.treeWidth = treeBounds.right - treeBounds.x;\n }\n {\n shapeBounds = { x: x, y: dimensions.y, right: x + dimensions.width, bottom: dimensions.y + dimensions.height };\n }\n var translateInfo = {\n layout: layout, shape: shape, shapeBounds: shapeBounds, treeBounds: treeBounds,\n dim: dimensions, level: level\n };\n this.translateSubTree(translateInfo, d, prev !== undefined, dontupdate);\n if (info.firstChild && typeof info.firstChild !== 'string') {\n info.firstChild.x += info.subTreeTranslation;\n }\n shape.treeBounds = treeBounds;\n return treeBounds;\n }\n };\n HierarchicalTree.prototype.updateLeafNode = function (layout, shape, prev, dimensions, level, dontupdate) {\n var bounds;\n var info = layout.graphNodes[shape.id];\n info.x = dimensions.x;\n if (!(info.y && info.y > dimensions.y)) {\n info.y = dimensions.y;\n info.maxLevel = Math.max(level, info.maxLevel || 0);\n }\n bounds = { x: dimensions.x, y: dimensions.y, right: dimensions.x + dimensions.width, bottom: dimensions.y + dimensions.height };\n info.maxLevel = Math.max(info.maxLevel || 0, level);\n var translateInfo = {\n layout: layout, shape: shape, shapeBounds: bounds, treeBounds: bounds,\n dim: dimensions, level: level\n };\n this.translateSubTree(translateInfo, undefined, prev !== undefined, dontupdate);\n return { x: info.x, y: info.y, right: info.x + dimensions.width, bottom: info.y + dimensions.height };\n };\n HierarchicalTree.prototype.setUpLayoutInfo = function (layout, item) {\n var info = {};\n info.subTreeTranslation = 0;\n if (layout.type === 'OrganizationalChart') {\n info.tree = { orientation: 'Vertical', type: 'Alternate', offset: 20, enableRouting: true };\n }\n else {\n info.tree = { orientation: 'Horizontal', type: 'Center', enableRouting: true };\n }\n info.tree.children = [];\n info.tree.assistants = [];\n info.tree.level = 0;\n info.translate = true;\n return info;\n };\n HierarchicalTree.prototype.translateSubTree = function (translateInfo, asstDif, translate, dontupdate) {\n var layout = translateInfo.layout;\n var shape = translateInfo.shape;\n var shapeBounds = translateInfo.shapeBounds;\n var treeBounds = translateInfo.treeBounds;\n var level = translateInfo.level;\n var dim = translateInfo.dim;\n var info = layout.graphNodes[shape.id];\n var firstChild = layout.nameTable[info.firstChild ? info.firstChild.child : info.tree.children[0]];\n var firstChildInfo = firstChild ? layout.graphNodes[firstChild.id] : null;\n var hasChild = this.hasChild(layout, shape);\n var intersect = this.findIntersectingLevels(layout, shapeBounds, level, info.actualLevel);\n var treeIntersect = this.findIntersectingLevels(layout, treeBounds, level, info.actualLevel);\n var levelBounds = [];\n var diff;\n if (intersect.length && info.translate) {\n info.intersect = intersect;\n this.spaceLeftFromPrevSubTree(layout, shape, shapeBounds);\n info.canMoveBy = info.diff;\n if (asstDif !== undefined) {\n info.canMoveBy = Math.min(asstDif, info.canMoveBy);\n }\n if (firstChild && firstChildInfo.canMoveBy !== undefined) {\n if (firstChildInfo.canMoveBy >= info.canMoveBy) {\n info.translated = true;\n }\n info.canMoveBy = Math.min(info.canMoveBy, firstChildInfo.canMoveBy);\n }\n if (translate) {\n info.x -= info.canMoveBy;\n info.subTreeTranslation -= info.canMoveBy;\n if (hasChild) {\n this.shiftSubordinates(layout, treeIntersect, info.canMoveBy);\n treeBounds.x = Math.min(treeBounds.x, info.x);\n treeBounds.right = Math.max(treeBounds.right, info.x + dim.width);\n treeBounds.bottom = Math.max(treeBounds.bottom, info.y + dim.height);\n treeBounds.x -= info.canMoveBy;\n treeBounds.right -= info.canMoveBy;\n }\n if (firstChild && firstChildInfo.canMoveBy > info.canMoveBy) {\n info.canMoveBy = firstChildInfo.canMoveBy - info.canMoveBy;\n }\n else if (firstChild && info.canMoveBy !== undefined) {\n info.canMoveBy = 0;\n }\n }\n }\n else {\n if (hasChild) {\n treeBounds.x = Math.min(treeBounds.x, shapeBounds.x);\n treeBounds.right = Math.max(treeBounds.right, shapeBounds.x + dim.width);\n treeBounds.bottom = Math.max(treeBounds.bottom, info.y + dim.height);\n }\n if (!info.translate) {\n info.canMoveBy = 0;\n info.subTreeTranslation = 0;\n }\n }\n if (!dontupdate) {\n shapeBounds = { x: info.x, y: dim.y, right: info.x + dim.width, bottom: dim.y + dim.height };\n levelBounds.push({ rBounds: shapeBounds });\n this.updateRearBounds(layout, shape, levelBounds, level);\n }\n };\n HierarchicalTree.prototype.updateRearBounds = function (layout, shape, levelBounds, level, intersect) {\n var bnds;\n var index;\n var isLastLeaf = true;\n var i;\n var info = {};\n var firstLevel;\n var lastLevel;\n var bottom;\n if (shape) {\n info = layout.graphNodes[shape.id];\n intersect = info.intersect;\n isLastLeaf = !info.tree.children.length && !info.tree.assistants.length;\n }\n firstLevel = levelBounds[0].rBounds;\n lastLevel = levelBounds[levelBounds.length - 1].rBounds;\n if (intersect && intersect.length) {\n bnds = layout.levels[intersect[0]].rBounds;\n bottom = bnds.bottom;\n if (bnds.y < firstLevel.y) {\n bnds.bottom = firstLevel.y;\n levelBounds.splice(0, 0, { rBounds: bnds });\n }\n if (bottom > lastLevel.bottom) {\n levelBounds.push({ rBounds: { x: bnds.x, right: bnds.right, y: firstLevel.bottom, bottom: bottom } });\n }\n else {\n bnds = layout.levels[intersect[intersect.length - 1]].rBounds;\n if (isLastLeaf && bnds.bottom > lastLevel.bottom) {\n bnds.y = lastLevel.bottom;\n levelBounds.push({ rBounds: bnds });\n }\n }\n index = intersect[0];\n for (i = levelBounds.length - 1; i >= 0; i--) {\n layout.levels.splice(index, 0, levelBounds[i]);\n }\n index += levelBounds.length;\n layout.levels.splice(index, intersect.length);\n }\n else {\n index = this.findLevel(layout, levelBounds[levelBounds.length - 1].rBounds, level);\n for (i = levelBounds.length - 1; i >= 0; i--) {\n layout.levels.splice(index, 0, levelBounds[i]);\n }\n }\n };\n HierarchicalTree.prototype.shiftSubordinates = function (layout, intersect, diff) {\n var i;\n //Shift the sublevels by the distance diff\n if (diff !== 0) {\n for (i = 0; i < intersect.length; i++) {\n if (layout.levels[intersect[i]].rBounds) {\n layout.levels[intersect[i]].rBounds.x -= diff;\n layout.levels[intersect[i]].rBounds.right -= diff;\n }\n }\n }\n };\n HierarchicalTree.prototype.setDepthSpaceForAssitants = function (layout, shape, bottom, height, lev, vSpace) {\n var info = layout.graphNodes[shape.id];\n var asst = {};\n var asstHeight;\n var i;\n var asstElement;\n var max;\n max = bottom;\n //Vertically place the assistants as alternate layout(alternatively at both right and left sides of parent)\n for (i = 0; i < info.tree.assistants.length; i++) {\n asst = layout.graphNodes[info.tree.assistants[i]];\n if (asst) {\n asst.tree.children = asst.tree.assistants = [];\n asst.y = bottom;\n asstElement = layout.nameTable[info.tree.assistants[i]];\n asstHeight = asstElement.actualSize.height;\n if (layout.orientation.indexOf('Left') !== -1) {\n asstHeight = asstElement.actualSize.width;\n }\n max = bottom + asstHeight + vSpace / 2;\n layout.maxLevel = lev + 1;\n if (i % 2 === 1 && i !== info.tree.assistants.length - 1) {\n bottom = max;\n lev++;\n }\n }\n }\n return { level: layout.maxLevel, bottom: bottom + asstHeight + vSpace };\n };\n HierarchicalTree.prototype.setBreadthSpaceForAssistants = function (layout, shape, dim, space, bottom, level) {\n var asst = {};\n var asstWidth;\n var prevBounds;\n var bounds;\n var asstElement;\n var i;\n var info = layout.graphNodes[shape.id];\n var max = bottom;\n var lev = level;\n var left;\n var diff;\n var intersect;\n var levelBounds;\n for (i = 0; i < info.tree.assistants.length; i++) {\n asst = layout.graphNodes[info.tree.assistants[i]];\n //Arrange assistants at both left and right sides of parent(like alternate layout)\n //Check - By default, distance to be left between parent and child nodes is assumed as 20.\n //It can be modified/customized later.\n if (asst) {\n asstElement = layout.nameTable[info.tree.assistants[i]];\n asstWidth = asstElement.actualSize.width;\n if (layout.orientation.indexOf('Left') !== -1) {\n asstWidth = asstElement.actualSize.height;\n }\n if (i % 2 === 0) {\n left = space + dim.width / 2 - 20 - asstWidth;\n }\n else {\n left = space + dim.width / 2 + 20;\n }\n //Check - What will happen if update leaf node is called? Since assistants don't have children\n bounds = this.updateTree(layout, left, asst.y, layout.nameTable[info.tree.assistants[i]], lev + 1);\n if (!this.hasChild(layout, shape)) {\n if (i === 0) {\n levelBounds = bounds;\n }\n else {\n this.uniteRects(levelBounds, bounds);\n }\n }\n if (i % 2 === 0 && asst.prevBounds) {\n if (diff === undefined) {\n diff = asst.canMoveBy;\n }\n else {\n diff = Math.min(diff, asst.canMoveBy);\n }\n }\n if (i % 2 === 1 || i === info.tree.assistants.length - 1) {\n intersect = this.findIntersectingLevels(layout, bounds, lev + 1);\n //Update rightmost positions of known layout levels\n this.updateRearBounds(layout, null, [{ rBounds: bounds }], lev + 1, intersect);\n lev++;\n }\n }\n }\n if (levelBounds) {\n levelBounds.canMoveBy = diff;\n }\n return levelBounds;\n };\n HierarchicalTree.prototype.getDimensions = function (layout, shape, x, y, level) {\n var width;\n width = shape.actualSize.width;\n var height;\n height = shape.actualSize.height;\n if (layout.orientation.indexOf('Left') !== -1) {\n if (!level) {\n var temp = void 0;\n temp = x;\n x = y;\n y = temp;\n }\n height = shape.actualSize.width;\n width = shape.actualSize.height;\n }\n return { x: x, y: y, width: width, height: height };\n };\n HierarchicalTree.prototype.hasChild = function (layout, shape) {\n //Check whether the node has children \n var shape1 = layout.graphNodes[shape.id];\n return shape1.tree.children && shape1.tree.children.length;\n };\n HierarchicalTree.prototype.updateHorizontalTree = function (layout, shape, prev, x, y, level) {\n //Get dimensions with respect to layout orientations \n var dimensions;\n dimensions = this.getDimensions(layout, shape, x, y, level);\n var info = {};\n info = layout.graphNodes[shape.id];\n var side = info.tree.type;\n var lev;\n lev = level;\n var right = 0;\n right = x;\n var bottom;\n bottom = y;\n var width;\n var height;\n var child;\n var childBounds;\n var childWidth;\n var childHeight;\n var prevBounds;\n var bounds;\n var actBounds;\n var maxLevel;\n var translateSibilingsBy;\n var canMoveBy;\n var oldActBounds;\n var i;\n var childInfo;\n var prevLayoutLevels;\n var firstChildInfo;\n prevLayoutLevels = layout.levels.slice(0, layout.levels.length);\n if (this.hasChild(layout, shape)) {\n var h = void 0;\n h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n for (i = 0; i < info.tree.children.length; i++) {\n child = layout.nameTable[info.tree.children[i]];\n width = child.actualSize.width;\n height = child.actualSize.height;\n childWidth = h ? height : width;\n childHeight = h ? width : height;\n prevBounds = layout.levels[lev + 1] ? layout.levels[lev + 1].rBounds : null;\n //Update sub tree\n childBounds = this.updateTree(layout, right, bottom, child, lev + 1, layout.nameTable[info.tree.children[i - 1]]);\n childInfo = layout.graphNodes[child.id];\n info.maxLevel = Math.max(info.maxLevel || 0, childInfo.maxLevel || 0);\n actBounds = { x: childInfo.x, y: childInfo.y, right: childInfo.x + childWidth, bottom: childInfo.y + childHeight };\n if (i === 0) {\n //Compare with previous(right most) subtree\n bounds = {\n x: Math.min(childInfo.x, childBounds.x), y: Math.min(childInfo.y, childBounds.y),\n right: childBounds.right, bottom: childBounds.bottom\n };\n firstChildInfo = childInfo;\n }\n if (!oldActBounds) {\n oldActBounds = actBounds;\n }\n else {\n oldActBounds.x = actBounds.x;\n oldActBounds.y = actBounds.y;\n if (actBounds.right > oldActBounds.right) {\n oldActBounds.right = actBounds.right;\n }\n oldActBounds.bottom = actBounds.bottom;\n //oldActBounds = actBounds;\n }\n //Compare with previous subtree if level of the child is greater than the level of previous sub tree\n //Check - what will happen if level of second child is greater than current child\n if (i === 0) {\n info.firstChild = { x: childInfo.x, canMoveBy: childInfo.canMoveBy, child: child.id };\n }\n if (this.hasChild(layout, child)) {\n if (!info.firstChild || info.firstChild.x >= childInfo.firstChild.x) {\n if (childInfo.firstChild && info.firstChild.canMoveBy < childInfo.canMoveBy) {\n info.firstChild.canMoveBy = canMoveBy;\n childInfo.canMoveBy = canMoveBy;\n canMoveBy = info.firstChild.canMoveBy;\n layout.graphNodes[info.firstChild.child].canMoveBy = canMoveBy;\n }\n var canMoveValue = canMoveBy !== undefined ? canMoveBy : childInfo.canMoveBy;\n info.firstChild = { x: childInfo.firstChild.x, canMoveBy: canMoveValue, child: child.id };\n }\n else if (childInfo.firstChild && childInfo.translated && info.firstChild.canMoveBy > childInfo.canMoveBy) {\n info.firstChild.canMoveBy = layout.graphNodes[info.firstChild.child].canMoveBy = childInfo.canMoveBy;\n }\n }\n maxLevel = maxLevel ? Math.max(childInfo.maxLevel, maxLevel) : childInfo.maxLevel;\n this.uniteRects(bounds, childBounds);\n if (i !== 0 && !this.hasChild(layout, child) && childInfo.subTreeTranslation < 0) {\n right = childBounds.right - childInfo.subTreeTranslation + layout.horizontalSpacing;\n }\n else {\n right = childBounds.right + layout.horizontalSpacing;\n }\n }\n if (!isNaN(translateSibilingsBy)) {\n firstChildInfo.canMoveBy = translateSibilingsBy;\n }\n info.mid = (firstChildInfo.x + oldActBounds.right) / 2 - dimensions.width / 2;\n //Set parent based on the chart type\n if (side === 'Left') {\n info.mid = actBounds.right - dimensions.width;\n }\n else if (side === 'Right') {\n info.mid = x;\n }\n }\n return bounds;\n };\n HierarchicalTree.prototype.updateHorizontalTreeWithMultipleRows = function (layout, shape, prev, x, y, level) {\n //declarations\n var child;\n var childInfo;\n var childBounds;\n var childWidth;\n var childHeight;\n var firstChildInfo;\n var maxLevel;\n var bounds;\n var rowBounds;\n var width;\n var height;\n var diff;\n var translateSibilingsBy;\n var fchild;\n var maxRowWidth;\n var j;\n var i;\n var k;\n var max;\n var leftCenter;\n var rightCenter;\n //Get dimensions with respect to layout orientations\n var dimensions = this.getDimensions(layout, shape, x, y, level);\n var info = layout.graphNodes[shape.id];\n var side = info.tree.type;\n var lev = level;\n var right = x;\n var bottom = y;\n var prevLayoutLevels = layout.levels.slice(0, layout.levels.length);\n var minTranslation = 0;\n if (this.hasChild(layout, shape)) {\n var h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n var align = void 0;\n var rows = this.splitChildrenInRows(layout, shape);\n var unique = info.tree.children.length === 5 && rows[0].length === 3;\n var leftTree = [];\n var rightTree = [];\n if (!unique) {\n this.splitRows(rows, leftTree, rightTree);\n }\n else {\n rightTree = rows;\n }\n var treeInfo = { leftTree: leftTree, rows: rows, rightTree: rightTree, dimensions: dimensions };\n var rightMost = this.updateLeftTree(layout, treeInfo, shape, x, bottom, lev);\n bounds = treeInfo.bounds;\n var rightX = void 0;\n var center = (rightMost || 0) + (rightMost !== undefined ? (layout.horizontalSpacing / 2) : 0);\n if (rightMost !== undefined) {\n info.mid = center - dimensions.width / 2;\n rightX = rightMost + layout.horizontalSpacing;\n }\n bottom = y;\n var rightBounds = void 0;\n rightBounds = [];\n for (i = 0; i < rightTree.length; i++) {\n if (rows[i].length % 2 === 1 && i === rightTree.length - 1 || unique) {\n right = x;\n }\n else {\n right = rightX || x;\n }\n if (i !== 0) {\n bottom = rightBounds[i - 1].bottom + layout.verticalSpacing;\n }\n for (j = 0; j < rightTree[i].length; j++) {\n child = layout.nameTable[rightTree[i][j]];\n width = child.actualSize.width;\n height = child.actualSize.height;\n childWidth = h ? height : width;\n childHeight = h ? width : height;\n //Update sub tree\n childInfo = layout.graphNodes[child.id];\n childInfo.actualLevel = lev + 1 + i;\n if (j === 0 && leftTree[i] && leftTree[i].length) {\n childInfo.translate = false;\n }\n if (unique && i === 1) {\n if (j === 0 && leftCenter + childWidth + layout.horizontalSpacing <= rightCenter) {\n align = true;\n right = leftCenter - childWidth / 2;\n }\n if (align && j === 1) {\n right = rightCenter - childWidth / 2;\n }\n }\n childBounds = this.updateTree(layout, right, bottom, child, lev + 1, layout.nameTable[rightTree[i][j - 1]]);\n if (unique && j <= 2 && i === 0) {\n if (j === 1) {\n leftCenter = childBounds.x - layout.horizontalSpacing / 2;\n rightCenter = childBounds.x + childWidth + layout.horizontalSpacing / 2;\n }\n }\n if (j === 0) {\n rightBounds[i] = { x: childBounds.x, y: childBounds.y, right: childBounds.right, bottom: childBounds.bottom };\n }\n else {\n this.uniteRects(rightBounds[i], childBounds);\n }\n if (!bounds) {\n bounds = {\n x: rightBounds[i].x, y: rightBounds[i].y, right: rightBounds[i].right,\n bottom: rightBounds[i].bottom\n };\n }\n this.uniteRects(bounds, rightBounds[i]);\n right = childBounds.right + layout.horizontalSpacing;\n if (!info.firstChild || ((i === rightTree.length - 1 && rows[i].length % 2 === 1) || unique)\n && j === 0 && childInfo.canMoveBy !== undefined && minTranslation > childInfo.canMoveBy) {\n minTranslation = Math.min(minTranslation, childInfo.canMoveBy || 0);\n info.firstChild = { x: childInfo.x, child: child.id, canMoveBy: childInfo.canMoveBy };\n }\n treeInfo.leftCenter = leftCenter;\n treeInfo.rightCenter = rightCenter;\n treeInfo.align = align;\n treeInfo.level = lev;\n treeInfo.rightBounds = rightBounds;\n this.alignRowsToCenter(layout, i, shape, treeInfo, rightX);\n }\n }\n }\n return bounds;\n };\n HierarchicalTree.prototype.updateLeftTree = function (layout, treeInfo, shape, x, bottom, lev) {\n var leftTree = treeInfo.leftTree;\n var info = layout.graphNodes[shape.id];\n var right;\n var leftBounds = [];\n var minTranslation;\n var rightMost;\n var childBounds;\n var bounds;\n var h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n //Arrange left side\n for (var i = 0; i < leftTree.length && leftTree[i].length; i++) {\n right = x;\n if (leftBounds[i - 1]) {\n bottom = leftBounds[i - 1].bottom + layout.verticalSpacing;\n }\n for (var j = 0; j < leftTree[i].length; j++) {\n var child = layout.nameTable[leftTree[i][j]];\n var childWidth = h ? child.actualSize.height : child.actualSize.width;\n var childHeight = h ? child.actualSize.width : child.actualSize.height;\n //Update sub tree\n var childInfo = layout.graphNodes[child.id];\n childInfo.actualLevel = lev + 1 + i;\n childBounds = this.updateTree(layout, right, bottom, child, lev + 1, layout.nameTable[leftTree[i][j - 1]]);\n if (j === 0) {\n leftBounds[i] = { x: childBounds.x, y: childBounds.y, right: childBounds.right, bottom: childBounds.bottom };\n }\n else {\n this.uniteRects(leftBounds[i], childBounds);\n }\n if (i === 0 && j === 0) {\n minTranslation = childInfo.canMoveBy;\n info.firstChild = { x: childInfo.x, child: child.id, canMoveBy: childInfo.canMoveBy };\n }\n else if (j === 0 && childInfo.canMoveBy !== undefined && minTranslation > childInfo.canMoveBy) {\n minTranslation = Math.min(minTranslation, childInfo.canMoveBy || 0);\n info.firstChild = { x: childInfo.x, child: child.id, canMoveBy: childInfo.canMoveBy };\n }\n right = childBounds.right + layout.horizontalSpacing;\n }\n if (i === 0) {\n rightMost = leftBounds[i].right;\n }\n else {\n rightMost = Math.max(rightMost, leftBounds[i].right);\n }\n }\n //Translate to same positions\n for (var i = 0; i < leftTree.length && leftTree[i].length; i++) {\n if (rightMost !== leftBounds[i].right) {\n var diff = rightMost - leftBounds[i].right;\n for (var j = 0; j < leftTree[i].length; j++) {\n var element = layout.nameTable[leftTree[i][j]];\n var elementInfo = layout.graphNodes[leftTree[i][j]];\n elementInfo.x += diff;\n }\n //leftBounds[i].x += diff;\n //leftBounds[i].right += diff;\n }\n if (i === 0) {\n bounds = { x: leftBounds[0].x, y: leftBounds[0].y, right: leftBounds[0].right, bottom: leftBounds[0].bottom };\n }\n else {\n this.uniteRects(bounds, leftBounds[i]);\n }\n }\n treeInfo.bounds = bounds;\n return rightMost;\n };\n HierarchicalTree.prototype.alignRowsToCenter = function (layout, i, shape, treeInfo, rightX) {\n var max;\n var centered;\n var diff;\n var info = layout.graphNodes[shape.id];\n var rows = treeInfo.rows;\n var rightTree = treeInfo.rightTree;\n var leftCenter = treeInfo.leftCenter;\n var rightCenter = treeInfo.rightCenter;\n var align = treeInfo.align;\n var rightBounds = treeInfo.rightBounds;\n var dimensions = treeInfo.dimensions;\n var lev = treeInfo.level;\n var unique = info.tree.children.length === 5 && rows[0].length === 3;\n if (unique && i === 1) {\n max = (rightBounds[0].right - rightBounds[0].x) >= (rightBounds[1].right - rightBounds[1].x) ? 0 : 1;\n }\n if (i === rows.length - 1) {\n if (rows[i].length % 2 === 1 || unique && i === 1) {\n centered = rightTree[i][Math.floor(rightTree[i].length / 2)];\n var centerObjct = void 0;\n centerObjct = layout.nameTable[centered];\n var childDimension = void 0;\n var centeredX = layout.graphNodes[centered].x;\n var centeredY = layout.graphNodes[centered].y;\n childDimension = this.getDimensions(layout, centerObjct, centeredX, centeredY, lev + 1);\n diff = undefined;\n if (!align && unique) {\n if (max === 1) {\n i = 0;\n }\n diff = (rightBounds[max].x + rightBounds[max].right) / 2 - (rightBounds[i].x + rightBounds[i].right) / 2;\n if (i === 0) {\n info.mid += diff;\n }\n }\n else if (!unique && rightX !== undefined) {\n diff = rightX - layout.horizontalSpacing / 2 - (centeredX + childDimension.width / 2);\n }\n if (diff !== undefined) {\n this.updateRearBoundsOfTree(layout, rightTree[i], diff, dimensions);\n }\n if (unique) {\n info.mid = (rightCenter + leftCenter) / 2 + (i === 0 ? diff : 0) - dimensions.width / 2;\n }\n if (info.mid === undefined && layout.graphNodes[centered]) {\n info.mid = centeredX;\n }\n align = false;\n i++;\n }\n }\n };\n HierarchicalTree.prototype.updateRearBoundsOfTree = function (layout, rightTree, diff, dimensions) {\n for (var j = 0; j < rightTree.length; j++) {\n var childInfo = layout.graphNodes[rightTree[j]];\n var child = layout.nameTable[rightTree[j]];\n childInfo.x += diff;\n childInfo.canMoveBy += diff;\n if (j === rightTree.length - 1) {\n //removed child dimensions call calculation, since that is not used\n var childBnds = {\n x: childInfo.x, y: childInfo.y, right: childInfo.x +\n dimensions.width, bottom: childInfo.y + dimensions.height\n };\n var intersect = this.findIntersectingLevels(layout, childBnds, childInfo.actualLevel);\n this.updateRearBounds(layout, null, [{ rBounds: childBnds }], childInfo.actualLevel, intersect);\n }\n }\n };\n HierarchicalTree.prototype.splitRows = function (rows, leftTree, rightTree) {\n for (var i = 0; i < rows.length; i++) {\n leftTree[i] = [];\n rightTree[i] = [];\n var half = void 0;\n half = rows[i].length;\n if (rows[i].length % 2 !== 1) {\n half = Math.ceil(rows[i].length / 2);\n for (var k = 0; k < half; k++) {\n leftTree[i].push(rows[i][k]);\n }\n }\n for (var j = leftTree[i].length; j < rows[i].length; j++) {\n rightTree[i].push(rows[i][j]);\n }\n }\n };\n HierarchicalTree.prototype.updateVerticalTree = function (layout, shape, x, y, level, dontUpdate) {\n //declarations\n var child;\n var childInfo;\n var childBounds;\n var childWidth;\n var childHeight;\n var prevBounds;\n var bounds;\n var actBounds;\n var oddBounds;\n var evenBounds;\n var dimensions = this.getDimensions(layout, shape, x, y, level);\n var info = layout.graphNodes[shape.id];\n var firstChild = layout.nameTable[info.tree.children[0]];\n var h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n var factor = info.tree.type === 'Left' ? -1 : 0;\n var right = x;\n var bottom = y;\n var lev;\n lev = level;\n var i;\n var intersect;\n var type;\n var levels = [];\n var oddLevels = [];\n var canMoveBy;\n var diff;\n for (i = 0; i < info.tree.children.length; i++) {\n if (info.tree.type === 'Alternate') {\n //arrange at both left and right\n type = (i % 2 === 0 && info.tree.children.length > 2) ? 'Left' : 'Right';\n factor = (i % 2 === 0 && info.tree.children.length > 2) ? -1 : 0;\n }\n right = x + this.findOffset(layout, shape, info, type);\n child = layout.nameTable[info.tree.children[i]];\n childWidth = h ? child.actualSize.height : child.actualSize.width;\n childHeight = h ? child.actualSize.width : child.actualSize.height;\n //Update sub tree\n childBounds = this.updateTree(layout, right + factor * childWidth, bottom, child, level + 1, undefined, true);\n childInfo = layout.graphNodes[child.id];\n actBounds = { x: childInfo.x, y: childInfo.y, right: childInfo.x + childWidth, bottom: childInfo.y + childHeight };\n if (i === 0) {\n this.uniteRects(childBounds, actBounds);\n bounds = childBounds;\n }\n else {\n this.uniteRects(bounds, childBounds);\n }\n //Check and adjust the space left from previous subtree/sibling\n if (childInfo.prevBounds && !(info.tree.type === 'Alternate' && i % 2 === 1 && info.tree.children.length > 2)) {\n canMoveBy = canMoveBy !== undefined ? Math.min(childInfo.canMoveBy, canMoveBy) : childInfo.canMoveBy;\n }\n //Max level of the subtree node\n info.maxLevel = Math.max(info.maxLevel || 0, childInfo.maxLevel || 0);\n if (!(info.tree.type === 'Alternate' && info.tree.children.length > 2 && i % 2 === 0)) {\n if (info.tree.type === 'Alternate' && info.tree.children.length > 2) {\n //alternate - arrange children with even index(0,2,4,6,..) at the next level\n bottom = Math.max(childBounds.bottom, prevBounds.bottom) + layout.verticalSpacing / 2;\n }\n else {\n // left/right - arrange next child at the nect level(bottom)\n bottom = childBounds.bottom + layout.verticalSpacing / 2;\n }\n level = info.maxLevel;\n levels.push({ rBounds: actBounds });\n if (!evenBounds) {\n evenBounds = {\n x: childInfo.x, y: childInfo.y, right: childInfo.x + childWidth,\n bottom: childInfo.y + childHeight\n };\n }\n else {\n this.uniteRects(evenBounds, actBounds);\n }\n if (childInfo.levelBounds) {\n levels = levels.concat(childInfo.levelBounds);\n }\n }\n else {\n if (i !== 0) {\n bottom = prevBounds.bottom + layout.verticalSpacing / 2;\n }\n oddLevels.push({ rBounds: actBounds });\n if (childInfo.levelBounds) {\n oddLevels = oddLevels.concat(childInfo.levelBounds);\n }\n }\n if (i === 0) {\n info.firstChild = { x: childInfo.x, canMoveBy: childInfo.canMoveBy, child: child.id };\n }\n if (this.hasChild(layout, child)) {\n if (!info.firstChild || info.firstChild.x >= childInfo.firstChild.x) {\n if (childInfo.firstChild && info.firstChild.canMoveBy < childInfo.canMoveBy) {\n var canMoveBy_1 = info.firstChild.canMoveBy;\n childInfo.canMoveBy = canMoveBy_1;\n layout.graphNodes[info.firstChild.child].canMoveBy = canMoveBy_1;\n info.firstChild.canMoveBy = canMoveBy_1;\n }\n info.firstChild = {\n x: childInfo.firstChild.x, canMoveBy: canMoveBy !== undefined ? canMoveBy : childInfo.canMoveBy,\n child: child.id\n };\n }\n else if (childInfo.firstChild && childInfo.translated && info.firstChild.canMoveBy > childInfo.canMoveBy) {\n info.firstChild.canMoveBy = layout.graphNodes[info.firstChild.child].canMoveBy = childInfo.canMoveBy;\n }\n }\n prevBounds = actBounds;\n }\n //To set level bounds(right most position of levels)\n if (!dontUpdate) {\n if (info.tree.type === 'Alternate' && info.tree.children.length > 2) {\n oddBounds = {\n x: oddLevels[0].rBounds.x, y: oddLevels[0].rBounds.y,\n right: oddLevels[oddLevels.length - 1].rBounds.right, bottom: oddLevels[oddLevels.length - 1].rBounds.bottom\n };\n intersect = this.findIntersectingLevels(layout, oddBounds, lev + 1);\n this.updateRearBounds(layout, null, oddLevels, lev + 1, intersect);\n }\n intersect = this.findIntersectingLevels(layout, evenBounds || bounds, lev + 1);\n this.updateRearBounds(layout, null, evenBounds ? levels : [{ rBounds: bounds }], lev + 1, intersect);\n }\n else {\n info.levelBounds = levels;\n }\n if (!isNaN(canMoveBy)) {\n layout.graphNodes[firstChild.id].canMoveBy = canMoveBy;\n }\n info.childBounds = bounds;\n info.mid = x;\n return bounds;\n };\n HierarchicalTree.prototype.splitChildrenInRows = function (layout, shape) {\n var info;\n info = layout.graphNodes[shape.id];\n var column;\n column = 4;\n var rows = [];\n var childNodes;\n childNodes = info.tree.children.length;\n var children = this.extend(info.tree.children);\n if (info.tree.rows) {\n var count = void 0;\n count = info.tree.children.length;\n var columns = void 0;\n columns = Math.ceil(count / info.tree.rows);\n if (columns % 2 === 0) {\n column = columns;\n }\n else {\n column = columns + 1;\n }\n }\n else if (info.tree.children.length === 3 || info.tree.children.length === 4) {\n column = 2;\n }\n else if (info.tree.children.length === 5) {\n column = 3;\n }\n while (childNodes > 0) {\n rows[rows.length] = children.splice(0, column);\n childNodes -= column;\n if (childNodes < column) {\n column = childNodes;\n }\n }\n return rows;\n };\n HierarchicalTree.prototype.extend = function (temp) {\n var i;\n var dummy = [];\n for (i = 0; i < temp.length; i++) {\n dummy[i] = temp[i];\n }\n return dummy;\n };\n HierarchicalTree.prototype.findOffset = function (layout, shape, info, type) {\n var offset = 0;\n var space = (layout.orientation.indexOf('Left') !== -1) ? shape.actualSize.height :\n shape.actualSize.width;\n var treeType = type ? type : info.tree.type;\n offset = info.tree.offset || 20;\n if (info.tree.type === 'Alternate') {\n if (offset >= layout.horizontalSpacing) {\n offset = layout.horizontalSpacing / 2;\n }\n }\n switch (treeType) {\n case 'Left':\n offset = space / 2 - offset;\n break;\n case 'Right':\n offset = offset + space / 2;\n break;\n }\n return offset;\n };\n HierarchicalTree.prototype.uniteRects = function (rect1, rect2) {\n //Unite two rects\n rect1.x = Math.min(rect1.x, rect2.x);\n rect1.right = Math.max(rect1.right, rect2.right);\n rect1.bottom = Math.max(rect1.bottom, rect2.bottom);\n };\n HierarchicalTree.prototype.spaceLeftFromPrevSubTree = function (layout, shape, bounds) {\n var info;\n info = layout.graphNodes[shape.id];\n var dif;\n var prevBounds;\n var intersect;\n var k;\n var space;\n space = layout.horizontalSpacing;\n //Find the minimum distance to move towards previous sub tree\n for (k = 0; k < info.intersect.length; k++) {\n prevBounds = layout.levels[info.intersect[k]].rBounds;\n dif = bounds.x - (prevBounds.right + space);\n if (info.diff === undefined || dif < info.diff) {\n info.diff = dif;\n info.prevBounds = layout.levels[info.intersect[k]].rBounds;\n }\n }\n };\n HierarchicalTree.prototype.findIntersectingLevels = function (layout, bounds, level, actualLevel) {\n //intersecting with exact Level\n var bnds;\n bnds = { x: bounds.x, y: bounds.y, right: bounds.right, bottom: bounds.bottom };\n bnds.y -= layout.verticalSpacing / 2;\n bnds.bottom += layout.verticalSpacing / 2;\n var intersectingLevels;\n intersectingLevels = [];\n var rBounds;\n var l;\n l = actualLevel !== undefined ? actualLevel : level;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n //Performance - We can consider only the intersecting levels\n do {\n if (rBounds && ((bnds.y < rBounds.y && bnds.bottom > rBounds.y)\n || (bnds.y < rBounds.bottom && rBounds.bottom < bnds.bottom) ||\n bnds.y >= rBounds.y &&\n bnds.bottom <= rBounds.bottom || bnds.y < rBounds.y && bnds.bottom > rBounds.bottom)) {\n var index = 0;\n intersectingLevels.splice(index, 0, l);\n }\n else if (rBounds && rBounds.bottom < bnds.y) {\n break;\n }\n l--;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n } while (l >= 0);\n l = (actualLevel !== undefined ? actualLevel : level) + 1;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n do {\n if (rBounds && ((bnds.y < rBounds.y && bnds.bottom > rBounds.y) ||\n (bnds.y < rBounds.bottom && rBounds.bottom < bnds.bottom) ||\n bnds.y >= rBounds.y && bnds.bottom <= rBounds.bottom || bnds.y < rBounds.y && bnds.bottom > rBounds.bottom)) {\n intersectingLevels.push(l);\n }\n else if (rBounds && rBounds.y > bnds.bottom) {\n break;\n }\n l++;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n } while (l <= layout.levels.length);\n return intersectingLevels;\n };\n HierarchicalTree.prototype.findLevel = function (layout, bounds, level) {\n var bnds;\n bnds = bounds;\n var l;\n l = 0;\n var rBounds;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n while (l < layout.levels.length) {\n if (rBounds && bnds.bottom < rBounds.y) {\n return l;\n }\n else {\n l++;\n }\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n }\n return l;\n };\n HierarchicalTree.prototype.getParentNode = function (layout, node) {\n //Return the first parent node\n return layout.nameTable[layout.nameTable[node.inEdges[0]].sourceID];\n };\n HierarchicalTree.prototype.updateEdges = function (layout, node, depth) {\n var layoutInfo;\n layoutInfo = layout.graphNodes[node.id];\n var j;\n if (node.outEdges && node.outEdges.length && (node.isExpanded || !this.isAnimation)) {\n for (j = 0; j < node.outEdges.length; j++) {\n var edge = void 0;\n edge = layout.nameTable[layout.nameTable[node.outEdges[j]].targetID];\n if (!edge.excludeFromLayout) {\n if (layoutInfo.tree.children.indexOf(edge.id) === -1) {\n layoutInfo.tree.children.push(edge.id);\n }\n if (edge.outEdges && edge.outEdges.length && edge.isExpanded) {\n layoutInfo.tree.hasSubTree = true;\n }\n this.updateEdges(layout, edge, depth + 1);\n }\n }\n }\n //set level info\n layoutInfo.tree.level = depth;\n //By default, orientation is horizontal for nested trees\n if (layoutInfo.tree.hasSubTree) {\n layoutInfo.tree.orientation = 'Horizontal';\n layoutInfo.tree.type = 'Center';\n }\n //Customizing assistants and children collection\n //Performance-Instead of reading the method everytime, we can set once and can reuse that\n if (layout.getLayoutInfo && layout.type === 'OrganizationalChart') {\n layout.getLayoutInfo(node, layoutInfo.tree);\n if (layoutInfo.tree.type === 'Balanced' && layoutInfo.tree.hasSubTree) {\n layoutInfo.tree.type = 'Center';\n layoutInfo.tree.orientation = 'Horizontal';\n }\n }\n if (layout.level && layoutInfo.tree.type !== 'Alternate' && depth >= layout.level) {\n layoutInfo.tree.hasSubTree = false;\n }\n };\n HierarchicalTree.prototype.updateAnchor = function (layout, bounds, viewPort) {\n var node;\n var fixedNode;\n var width = 0;\n var height = 0;\n var mod = 0;\n var viewPortBounds = new Rect(0, 0, viewPort.x, viewPort.y);\n var layoutBounds;\n layoutBounds = layout.bounds ? layout.bounds : viewPortBounds;\n var orientation = layout.orientation;\n //Anchor based on fixed nodes\n if (layout.fixedNode) {\n fixedNode = layout.nameTable[layout.fixedNode];\n width = fixedNode.actualSize.width;\n height = fixedNode.actualSize.height;\n layout.anchorX = fixedNode.offsetX;\n layout.anchorY = fixedNode.offsetY;\n var pivot = fixedNode.pivot;\n layout.anchorX += layout.orientation === 'RightToLeft' ? width * pivot.x : -width * pivot.x;\n layout.anchorY += layout.orientation === 'BottomToTop' ? height * pivot.y : -height * pivot.y;\n node = fixedNode;\n mod = 0;\n while (node.inEdges.length) {\n node = this.getParentNode(layout, node);\n mod += layout.graphNodes[node.id].subTreeTranslation || 0;\n }\n if (layout.orientation.indexOf('Left') !== -1) {\n layout.anchorX -= layout.graphNodes[fixedNode.id].y;\n layout.anchorY -= layout.graphNodes[fixedNode.id].x + mod;\n }\n else {\n layout.anchorX -= layout.graphNodes[fixedNode.id].x + mod;\n layout.anchorY -= layout.graphNodes[fixedNode.id].y;\n }\n }\n else {\n if (orientation === 'TopToBottom' || orientation === 'BottomToTop') {\n switch (layout.horizontalAlignment) {\n case 'Left':\n layout.anchorX = (layoutBounds.x - bounds.x) + layout.margin.left;\n break;\n case 'Right':\n layout.anchorX = layoutBounds.x + layoutBounds.width - layout.margin.right - bounds.right;\n break;\n case 'Auto':\n case 'Center':\n layout.anchorX = layoutBounds.x + layoutBounds.width / 2 - (bounds.x + bounds.right) / 2;\n break;\n }\n switch (layout.verticalAlignment) {\n case 'Auto':\n case 'Top':\n var top_1;\n top_1 = layoutBounds.y + layout.margin.top;\n layout.anchorY = orientation === 'TopToBottom' ? top_1 : bounds.bottom + top_1;\n break;\n case 'Bottom':\n var bottom = void 0;\n bottom = layoutBounds.y + layoutBounds.height - layout.margin.bottom;\n layout.anchorY = orientation === 'TopToBottom' ? bottom - bounds.bottom : bottom;\n break;\n case 'Center':\n var center = void 0;\n center = layoutBounds.y + layoutBounds.height / 2;\n layout.anchorY = layout.orientation === 'TopToBottom' ?\n center - (bounds.y + bounds.bottom) / 2 : center + (bounds.y + bounds.bottom) / 2;\n break;\n }\n }\n else {\n switch (layout.horizontalAlignment) {\n case 'Auto':\n case 'Left':\n var left = void 0;\n left = layoutBounds.x + layout.margin.left;\n layout.anchorX = orientation === 'LeftToRight' ? left : bounds.bottom + left;\n break;\n case 'Right':\n var right = void 0;\n right = layoutBounds.x + layoutBounds.width - layout.margin.right;\n layout.anchorX = orientation === 'LeftToRight' ? right - bounds.bottom : right;\n break;\n case 'Center':\n var center = void 0;\n center = layoutBounds.width / 2 + layoutBounds.x;\n layout.anchorX = layout.orientation === 'LeftToRight' ?\n center - (bounds.y + bounds.bottom) / 2 : center + (bounds.y + bounds.bottom) / 2;\n break;\n }\n switch (layout.verticalAlignment) {\n case 'Top':\n layout.anchorY = layoutBounds.y + layout.margin.top - bounds.x;\n break;\n case 'Auto':\n case 'Center':\n layout.anchorY = layoutBounds.y + layoutBounds.height / 2 - (bounds.right + bounds.x) / 2;\n break;\n case 'Bottom':\n layout.anchorY = layoutBounds.y + layoutBounds.height - layout.margin.bottom - bounds.right;\n break;\n }\n }\n }\n };\n HierarchicalTree.prototype.updateConnectors = function (layout, node, level) {\n var i;\n var info;\n var nodeWidth;\n var nodeHeight;\n var targetWidth;\n var targetHeight;\n var length;\n var offsetLen;\n var points;\n var segments;\n var target;\n var conn;\n var relative;\n var center;\n var layoutProp;\n //Route out edges\n info = layout.graphNodes[node.id];\n var direction;\n if (node.outEdges.length) {\n for (i = 0; i < node.outEdges.length; i++) {\n conn = layout.nameTable[node.outEdges[i]];\n conn.points = [];\n target = layout.nameTable[conn.targetID];\n if (conn.visible) {\n conn.visited = true;\n if (layout.getConnectorSegments) {\n segments = layout.getConnectorSegments(conn);\n }\n else {\n if (info && info.tree.children.indexOf(conn.targetID) !== -1) {\n conn.segments = [];\n if (layout.type === 'OrganizationalChart' && conn.type === 'Orthogonal') {\n this.updateSegments(layout, conn, node, target, i);\n }\n }\n }\n if (target && (target.isExpanded || this.hasChild(layout, target))) {\n this.updateConnectors(layout, target, level + 1);\n }\n }\n }\n }\n if (info && info.tree.assistants.length) {\n //In-Edge routing of assistant nodes\n for (i = 0; i < info.tree.assistants.length; i++) {\n target = layout.nameTable[info.tree.assistants[i]];\n conn = layout.nameTable[target.inEdges[0]];\n this.get3Points(layout, node, target, conn);\n if (target.isExpanded || this.hasChild(layout, target)) {\n this.updateConnectors(layout, target, level + 1);\n }\n }\n }\n };\n HierarchicalTree.prototype.updateSegments = function (layout, conn, node, target, i) {\n var info = layout.graphNodes[node.id];\n //Connector routing - Horizontal layout orientation\n if (info.tree.assistants.length) {\n //Route in-edge of child node, if the parent has assistant\n this.updateSegmentsForHorizontalOrientation(layout, node, target, conn);\n }\n else {\n //Route in-edge of child node\n if (info.tree.orientation === 'Horizontal' && info.tree.type === 'Balanced') {\n this.updateSegmentsForBalancedTree(layout, conn, node, target, i);\n }\n else {\n if (info.tree.orientation === 'Horizontal') {\n this.updateSegmentsForHorizontalOrientation(layout, node, target, conn);\n }\n else {\n if (info.tree.offset < 5) {\n this.get5Points(layout, node, target, conn);\n }\n else {\n this.get3Points(layout, node, target, conn);\n }\n }\n }\n }\n };\n HierarchicalTree.prototype.updateSegmentsForBalancedTree = function (layout, connector, node, target, i) {\n var info = layout.graphNodes[node.id];\n var center;\n var relative;\n if (info.tree.children.length === 5 && i > 2) {\n relative = info.tree.children[1];\n if (isNaN(layout.graphNodes[relative].treeWidth)) {\n layout.graphNodes[relative].treeWidth = layout.nameTable[relative].actualSize.width;\n }\n var factor = i !== 3 ? 1 : -1;\n if (layout.orientation.indexOf('Left') !== -1) {\n center = layout.nameTable[relative].offsetY - layout.graphNodes[relative].treeWidth / 2 -\n (layout.verticalSpacing * factor / 2);\n }\n else {\n center = layout.nameTable[relative].offsetX +\n layout.graphNodes[relative].treeWidth / 2 + (layout.horizontalSpacing * factor) / 2;\n }\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n else {\n if (info.tree.children.length > 5) {\n if (i < 4) {\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n else {\n this.updateSegmentsForHorizontalOrientation(layout, node, target, connector);\n }\n }\n else if (info.tree.children.length === 4) {\n if (i < 2) {\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n else {\n this.updateSegmentsForHorizontalOrientation(layout, node, target, connector);\n }\n }\n else {\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n }\n };\n HierarchicalTree.prototype.get3Points = function (layout, node, target, connector) {\n var points = [];\n var nodeBounds = this.getBounds(node);\n var targetBounds = this.getBounds(target);\n if (layout.orientation.indexOf('Top') !== -1) {\n var startingPoint = layout.orientation.indexOf('Top') === 0 ? nodeBounds.bottomCenter :\n nodeBounds.topCenter;\n var endPoint = node.offsetX > target.offsetX ? targetBounds.middleRight : targetBounds.middleLeft;\n points.push(startingPoint, { x: nodeBounds.bottomCenter.x, y: endPoint.y }, endPoint);\n }\n else {\n var startingPoint = layout.orientation.indexOf('Left') === 0 ? nodeBounds.middleRight :\n nodeBounds.middleLeft;\n var endPoint = node.offsetY > target.offsetY ? targetBounds.bottomCenter : targetBounds.topCenter;\n points.push(startingPoint, { x: targetBounds.bottomCenter.x, y: nodeBounds.middleRight.y }, endPoint);\n }\n this.getSegmentsFromPoints(points, connector);\n };\n HierarchicalTree.prototype.get5Points = function (layout, node, target, connector) {\n var points = [];\n var layoutprop;\n var nodeBounds = this.getBounds(node);\n var targetBounds = this.getBounds(target);\n var info = layout.graphNodes[node.id];\n var startingPoint;\n var endPoint;\n var horizontalSpacing;\n var verticalSpacing;\n if (layout.orientation.indexOf('Top') !== -1) {\n startingPoint = (node.offsetY < target.offsetY) ? nodeBounds.bottomCenter : nodeBounds.topCenter;\n verticalSpacing = layout.verticalSpacing / 4 * ((node.offsetY < target.offsetY) ? 1 : -1);\n horizontalSpacing = layout.horizontalSpacing / 2 * ((node.offsetX > target.offsetX) ? 1 : -1);\n endPoint = (node.offsetX > target.offsetX) ? targetBounds.middleRight : targetBounds.middleLeft;\n points.push(startingPoint, { x: startingPoint.x, y: startingPoint.y + verticalSpacing }, { x: endPoint.x + horizontalSpacing, y: startingPoint.y + verticalSpacing }, { x: endPoint.x + horizontalSpacing, y: endPoint.y }, endPoint);\n }\n else {\n startingPoint = (node.offsetX > target.offsetX) ? nodeBounds.middleLeft : nodeBounds.middleRight;\n endPoint = node.offsetY > target.offsetY ? targetBounds.bottomCenter : targetBounds.topCenter;\n horizontalSpacing = layout.horizontalSpacing / 4 * ((node.offsetX < target.offsetX) ? 1 : -1);\n verticalSpacing = layout.verticalSpacing / 2 * ((node.offsetY > target.offsetY) ? 1 : -1);\n points.push(startingPoint, { x: startingPoint.x + horizontalSpacing, y: startingPoint.y }, { x: startingPoint.x + horizontalSpacing, y: startingPoint.y + verticalSpacing }, { x: endPoint.x, y: startingPoint.y + verticalSpacing }, endPoint);\n }\n this.getSegmentsFromPoints(points, connector);\n };\n HierarchicalTree.prototype.getSegmentsFromPoints = function (points, connector) {\n var segments = [];\n var segment;\n for (var i = 0; i < points.length - 2; i++) {\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(points[i], points[i + 1]);\n segment.length = Point.distancePoints(points[i], points[i + 1]);\n segments.push(segment);\n }\n connector.segments = segments;\n };\n HierarchicalTree.prototype.getSegmentsForMultipleRows = function (layout, node, target, connector) {\n var points = [];\n var segments = [];\n var point;\n var segment;\n var targetBounds = this.getBounds(target);\n var nodeBounds = this.getBounds(node);\n switch (layout.orientation) {\n case 'TopToBottom':\n point = { x: nodeBounds.bottomCenter.x, y: (nodeBounds.bottomCenter.y + layout.verticalSpacing / 4) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.bottomCenter, point);\n segment.length = Point.distancePoints(nodeBounds.bottomCenter, point);\n segments.push(segment);\n break;\n case 'BottomToTop':\n point = { x: nodeBounds.bottomCenter.x, y: (nodeBounds.topCenter.y - layout.verticalSpacing / 4) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.topCenter, point);\n segment.length = Point.distancePoints(nodeBounds.topCenter, point);\n segments.push(segment);\n break;\n case 'LeftToRight':\n point = { x: (nodeBounds.middleRight.x + layout.verticalSpacing / 4), y: nodeBounds.middleRight.y, };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleRight, point);\n segment.length = Point.distancePoints(nodeBounds.middleRight, point);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point3 = { x: (nodeBounds.middleRight.x + layout.verticalSpacing / 4), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point, point3);\n segment.length = Point.distancePoints(point, point3);\n segments.push(segment);\n }\n break;\n case 'RightToLeft':\n point = { x: (nodeBounds.middleLeft.x - layout.verticalSpacing / 4), y: nodeBounds.middleRight.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleLeft, point);\n segment.length = Point.distancePoints(nodeBounds.middleLeft, point);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point_1 = { x: (nodeBounds.middleLeft.x - layout.verticalSpacing / 4), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point_1, point_1);\n segment.length = Point.distancePoints(point_1, point_1);\n segments.push(segment);\n }\n break;\n }\n connector.segments = segments;\n };\n HierarchicalTree.prototype.updateSegmentsForHorizontalOrientation = function (layout, node, target, connector) {\n var points = [];\n var point2;\n var segment;\n var segments = [];\n var nodeBounds = this.getBounds(node);\n var targetBounds = this.getBounds(target);\n switch (layout.orientation) {\n case 'TopToBottom':\n point2 = { x: nodeBounds.bottomCenter.x, y: (targetBounds.topCenter.y - layout.verticalSpacing / 2) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.bottomCenter, point2);\n segment.length = Point.distancePoints(nodeBounds.bottomCenter, point2);\n segments.push(segment);\n break;\n case 'BottomToTop':\n point2 = { x: nodeBounds.topCenter.x, y: (targetBounds.bottomCenter.y + layout.verticalSpacing / 2) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.topCenter, point2);\n segment.length = Point.distancePoints(nodeBounds.topCenter, point2);\n segments.push(segment);\n break;\n case 'LeftToRight':\n point2 = { x: (targetBounds.middleLeft.x - layout.verticalSpacing / 2), y: nodeBounds.middleRight.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleRight, point2);\n segment.length = Point.distancePoints(nodeBounds.middleRight, point2);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point3 = { x: (targetBounds.middleLeft.x - layout.verticalSpacing / 2), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point2, point3);\n segment.length = Point.distancePoints(point2, point3);\n segments.push(segment);\n }\n break;\n case 'RightToLeft':\n point2 = { x: (targetBounds.middleRight.x + layout.verticalSpacing / 2), y: nodeBounds.middleRight.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleLeft, point2);\n segment.length = Point.distancePoints(nodeBounds.middleLeft, point2);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point = { x: (targetBounds.middleRight.x + layout.verticalSpacing / 2), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point2, point);\n segment.length = Point.distancePoints(point2, point);\n segments.push(segment);\n }\n break;\n }\n connector.segments = segments;\n return points;\n };\n HierarchicalTree.prototype.updateNodes = function (layout, node, mod, update, dx, dy) {\n var i;\n var child;\n var width;\n var height;\n var offsetX;\n var offsetY;\n width = node.actualSize.width;\n height = node.actualSize.height;\n if (!node.excludeFromLayout) {\n offsetX = layout.anchorX;\n offsetY = layout.anchorY;\n /*Performance - instead of checking conditions for every node, we can make the layout related\n conditions once and we can reuse them*/\n if (layout.orientation === 'LeftToRight') {\n offsetX += layout.graphNodes[node.id].y + width / 2;\n offsetY += layout.graphNodes[node.id].x + mod + height / 2;\n }\n else if (layout.orientation === 'RightToLeft') {\n offsetX -= layout.graphNodes[node.id].y + width / 2;\n offsetY += layout.graphNodes[node.id].x + mod + height / 2;\n }\n else if (layout.orientation === 'TopToBottom') {\n offsetX += layout.graphNodes[node.id].x + mod + width / 2;\n offsetY += layout.graphNodes[node.id].y + height / 2;\n }\n else {\n offsetX += layout.graphNodes[node.id].x + mod + width / 2;\n offsetY -= layout.graphNodes[node.id].y + height / 2;\n }\n if (layout.graphNodes) {\n dx = dx ? dx : 0;\n dy = dy ? dy : 0;\n offsetX += dx;\n offsetY += dy;\n if (!this.isAnimation) {\n node.offsetX = offsetX;\n node.offsetY = offsetY;\n }\n }\n var objects = { id: node.id, differenceX: offsetX - node.offsetX, differenceY: offsetY - node.offsetY };\n layout.objects.push(objects);\n var list = void 0;\n list = [];\n if (this.hasChild(layout, node)) {\n for (i = 0; i < layout.graphNodes[node.id].tree.children.length; i++) {\n child = layout.nameTable[layout.graphNodes[node.id].tree.children[i]];\n this.updateNodes(layout, child, mod + (layout.graphNodes[node.id].subTreeTranslation || 0), update, dx, dy);\n list.push(child);\n }\n }\n if (layout.graphNodes[node.id].tree.assistants.length) {\n for (i = 0; i < layout.graphNodes[node.id].tree.assistants.length; i++) {\n child = layout.nameTable[layout.graphNodes[node.id].tree.assistants[i]];\n this.updateNodes(layout, child, mod + (layout.graphNodes[node.id].subTreeTranslation || 0), null, dx, dy);\n }\n }\n }\n };\n return HierarchicalTree;\n}());\nexport { HierarchicalTree };\n","import { Rect } from '../primitives/rect';\nimport { getFunction } from '../utility/base-util';\nimport { HierarchicalTree } from './hierarchical-tree';\n/**\n * Layout for mind-map tree\n */\nvar MindMap = /** @class */ (function () {\n /**\n * Constructor for the organizational chart module.\n * @private\n */\n function MindMap() {\n /**\n * Defines the layout animation\n *\n */\n this.isAnimation = false;\n //constructs the layout module\n }\n /**\n * To destroy the organizational chart\n * @return {void}\n * @private\n */\n MindMap.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n MindMap.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'MindMapChart';\n };\n MindMap.prototype.updateLayout = function (nodes, nameTable, layoutProp, viewPort, uniqueId, root) {\n var isRoot;\n isRoot = this.checkRoot(nodes, layoutProp, uniqueId, root, nameTable);\n if (isRoot) {\n layoutProp.fixedNode = isRoot;\n }\n else {\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var node = nodes_1[_i];\n if (!node.excludeFromLayout) {\n if (!node.inEdges || !node.inEdges.length) {\n layoutProp.fixedNode = node.id;\n break;\n }\n }\n }\n }\n var rootNode = nameTable[layoutProp.fixedNode];\n var fistLevelNodes = this.findFirstLevelNodes(rootNode, layoutProp, nameTable);\n var leftNodes = [];\n var rightNodes = [];\n var getMindmapBranch = getFunction(layoutProp.getBranch);\n getMindmapBranch = getMindmapBranch || getFunction(this.getBranch);\n for (var _a = 0, fistLevelNodes_1 = fistLevelNodes; _a < fistLevelNodes_1.length; _a++) {\n var node = fistLevelNodes_1[_a];\n var align = getMindmapBranch(node, fistLevelNodes);\n (align === 'Left') ? leftNodes.push(node) : rightNodes.push(node);\n }\n var viewPortBounds = new Rect(0, 0, viewPort.x, viewPort.y);\n nameTable[layoutProp.fixedNode].offsetX = viewPortBounds.x + viewPortBounds.width / 2;\n nameTable[layoutProp.fixedNode].offsetY = viewPortBounds.y + viewPortBounds.height / 2;\n if (leftNodes.length) {\n this.updateMindMapBranch(nodes, rightNodes, nameTable, layoutProp, viewPort, uniqueId, 'Left');\n }\n if (rightNodes.length) {\n this.updateMindMapBranch(nodes, leftNodes, nameTable, layoutProp, viewPort, uniqueId, 'Right');\n }\n };\n MindMap.prototype.checkRoot = function (nodes, layoutProp, uniqueId, root, nameTable) {\n for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {\n var node = nodes_2[_i];\n if (!node.excludeFromLayout) {\n if (node.data && (node.data[uniqueId].toString() === root || node.data[uniqueId].toString()\n === layoutProp.root)) {\n return node.id;\n }\n else if (!node.data && node.id === layoutProp.root) {\n return node.id;\n }\n }\n }\n return '';\n };\n MindMap.prototype.updateMindMapBranch = function (nodes, excludeNodes, nameTable, layoutProp, viewPort, uniqueId, side) {\n var layout;\n layout = {\n type: 'HierarchicalTree',\n horizontalSpacing: layoutProp.verticalSpacing, verticalSpacing: layoutProp.horizontalSpacing,\n verticalAlignment: layoutProp.verticalAlignment, horizontalAlignment: layoutProp.horizontalAlignment,\n fixedNode: layoutProp.fixedNode, getLayoutInfo: getFunction(layoutProp.getLayoutInfo), margin: layoutProp.margin,\n root: layoutProp.fixedNode\n };\n layout.orientation = (side === 'Left') ? 'LeftToRight' : 'RightToLeft';\n this.excludeFromLayout(excludeNodes, nameTable, true);\n var mapLayout = new HierarchicalTree();\n mapLayout.updateLayout(nodes, nameTable, layout, viewPort, uniqueId);\n this.excludeFromLayout(excludeNodes, nameTable, false);\n };\n MindMap.prototype.getBranch = function (obj, firstLevelNodes) {\n var side;\n var i = firstLevelNodes.indexOf(obj);\n if (i % 2 === 0) {\n side = 'Left';\n }\n else {\n side = 'Right';\n }\n return side;\n };\n MindMap.prototype.excludeFromLayout = function (newCollection, nameTable, exclude) {\n for (var _i = 0, newCollection_1 = newCollection; _i < newCollection_1.length; _i++) {\n var newcol = newCollection_1[_i];\n var node = nameTable[newcol.id];\n node.excludeFromLayout = exclude;\n }\n };\n MindMap.prototype.findFirstLevelNodes = function (node, layout, nameTable) {\n var parentNode;\n var fistLevelNodes = [];\n if (node && node.outEdges.length) {\n for (var _i = 0, _a = node.outEdges; _i < _a.length; _i++) {\n var outEdge = _a[_i];\n fistLevelNodes.push(nameTable[nameTable[outEdge].targetID]);\n }\n }\n return fistLevelNodes;\n };\n return MindMap;\n}());\nexport { MindMap };\n","/**\n * Radial Tree\n */\nvar RadialTree = /** @class */ (function () {\n /**\n * Constructor for the organizational chart module.\n * @private\n */\n function RadialTree() {\n //constructs the layout module\n }\n /**\n * To destroy the organizational chart\n * @return {void}\n * @private\n */\n RadialTree.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n RadialTree.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'RadialTree';\n };\n RadialTree.prototype.updateLayout = function (nodes, nameTable, layoutProp, viewport) {\n var layout = {\n type: layoutProp.type,\n nameTable: nameTable, anchorX: 0, anchorY: 0,\n firstLevelNodes: [], centerNode: null, levels: [], maxLevel: 0, graphNodes: {}, layoutNodes: [],\n orientation: layoutProp.orientation,\n horizontalSpacing: layoutProp.horizontalSpacing, verticalSpacing: layoutProp.verticalSpacing,\n verticalAlignment: layoutProp.verticalAlignment, horizontalAlignment: layoutProp.horizontalAlignment,\n fixedNode: layoutProp.fixedNode, margin: layoutProp.margin,\n bounds: layoutProp.bounds, objects: [], root: layoutProp.root\n };\n this.doLayout(layout, nodes, nameTable, viewport);\n };\n RadialTree.prototype.doLayout = function (layout, nodes, nameTable, viewport) {\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (!node.excludeFromLayout) {\n layout.graphNodes[node.id] = this.setUpLayoutInfo(layout, node);\n if (!node.inEdges || !node.inEdges.length) {\n layout.firstLevelNodes.push(node);\n }\n }\n }\n if (layout.root && nameTable[layout.root]) {\n layout.centerNode = nameTable[layout.root];\n }\n else if (layout.firstLevelNodes.length) {\n layout.centerNode = layout.firstLevelNodes[0];\n layout.root = layout.centerNode.id;\n }\n if (layout.centerNode) {\n this.updateEdges(layout, layout.centerNode, 0, nameTable);\n this.depthFirstAllignment(layout, layout.centerNode, 0, 0);\n this.populateLevels(layout);\n this.transformToCircleLayout(layout);\n this.updateAnchor(layout, viewport);\n this.updateNodes(layout, layout.centerNode, nameTable);\n }\n };\n RadialTree.prototype.updateEdges = function (layout, node, depth, nameTable) {\n var nodeInfo = layout.graphNodes[node.id];\n layout.layoutNodes.push(nodeInfo);\n nodeInfo.level = depth;\n nodeInfo.visited = true;\n layout.maxLevel = Math.max(layout.maxLevel, depth);\n for (var j = 0; j < node.outEdges.length; j++) {\n var edge = nameTable[nameTable[node.outEdges[j]].targetID];\n if (!edge.excludeFromLayout && !edge.visited) {\n nodeInfo.children.push(edge);\n this.updateEdges(layout, edge, depth + 1, nameTable);\n }\n }\n };\n RadialTree.prototype.depthFirstAllignment = function (layout, node, x, y) {\n var newValue;\n var nodeInfo = layout.graphNodes[node.id];\n if (nodeInfo.children.length) {\n y += 300;\n for (var i = 0; i < nodeInfo.children.length; i++) {\n newValue = this.depthFirstAllignment(layout, nodeInfo.children[i], x, y);\n x = newValue.x;\n y = newValue.y;\n }\n nodeInfo.children = nodeInfo.children.sort(function (obj1, obj2) {\n return layout.graphNodes[obj1.id].x - layout.graphNodes[obj2.id].x;\n });\n var min = layout.graphNodes[nodeInfo.children[0].id].min;\n var max = layout.graphNodes[nodeInfo.children[nodeInfo.children.length - 1].id].max;\n nodeInfo.x = min + (max - min) / 2;\n x = max + layout.horizontalSpacing;\n nodeInfo.segmentOffset = max + layout.horizontalSpacing;\n nodeInfo.x -= nodeInfo.width / 2;\n nodeInfo.y -= nodeInfo.height / 2;\n nodeInfo.min = min;\n nodeInfo.max = max;\n if (nodeInfo.x < min && nodeInfo.visited) {\n nodeInfo.x = min;\n x = nodeInfo.x + nodeInfo.width / 2 - (max - min) / 2;\n nodeInfo.visited = false;\n for (var i = 0; i < nodeInfo.children.length; i++) {\n newValue = this.depthFirstAllignment(layout, nodeInfo.children[i], x, y);\n }\n nodeInfo.visited = true;\n x = nodeInfo.x + nodeInfo.width + layout.horizontalSpacing;\n }\n max = layout.graphNodes[nodeInfo.children[nodeInfo.children.length - 1].id].segmentOffset;\n x = x < max ? max : x;\n y -= 300;\n nodeInfo.y = y;\n }\n else {\n nodeInfo.x = x;\n nodeInfo.y = y;\n nodeInfo.min = x;\n nodeInfo.max = x + nodeInfo.width;\n x += nodeInfo.width + layout.horizontalSpacing;\n }\n return { x: x, y: y };\n };\n RadialTree.prototype.populateLevels = function (layout) {\n var stages = [];\n var min = Math.min.apply(Math, layout.layoutNodes.map(function (nodeInfo) { return nodeInfo.x; }));\n var max = Math.max.apply(Math, layout.layoutNodes.map(function (nodeInfo) {\n return nodeInfo.x + nodeInfo.width + layout.horizontalSpacing;\n }));\n var full = max - min;\n layout.levels = [];\n var _loop_1 = function (i) {\n stages = layout.layoutNodes.filter(function (nodeInfo) {\n if (nodeInfo.level === i) {\n return nodeInfo;\n }\n else {\n return null;\n }\n });\n var newlevel = {};\n stages = stages.sort(function (nodeInfo1, nodeInfo2) { return nodeInfo1.x - nodeInfo2.x; });\n newlevel.min = stages[0].x;\n newlevel.max = stages[stages.length - 1].x + stages[stages.length - 1].width + layout.horizontalSpacing;\n newlevel.actualCircumference = 0;\n newlevel.height = 0;\n for (var k = 0; k < stages.length; k++) {\n if (stages[k].height > newlevel.height) {\n newlevel.height = stages[k].height;\n }\n newlevel.actualCircumference += Math.max(stages[k].width, stages[k].height);\n if (k !== stages.length - 1) {\n newlevel.actualCircumference += layout.horizontalSpacing;\n }\n }\n newlevel.circumference = newlevel.max - newlevel.min;\n if (newlevel.actualCircumference < newlevel.circumference) {\n newlevel.circumference = (newlevel.circumference + newlevel.actualCircumference) / 2;\n }\n newlevel.radius = newlevel.circumference / (2 * Math.PI) + newlevel.height;\n newlevel.nodes = [];\n if (i > 1) {\n if (layout.levels[i - 1].radius + layout.levels[i - 1].height >= newlevel.radius) {\n newlevel.radius = layout.levels[i - 1].radius + layout.levels[i - 1].height;\n }\n }\n for (var j = 0; j < stages.length; j++) {\n stages[j].ratio = Math.abs(stages[j].x + stages[j].width / 2 - min) / full;\n newlevel.nodes.push(stages[j]);\n }\n layout.levels.push(newlevel);\n };\n for (var i = 0; i <= layout.maxLevel; i++) {\n _loop_1(i);\n }\n };\n RadialTree.prototype.transformToCircleLayout = function (layout) {\n var root = layout.graphNodes[layout.centerNode.id];\n root.x = 0;\n root.y = 0;\n for (var i = 1; i < layout.levels.length; i++) {\n for (var j = 0; j < layout.levels[i].nodes.length; j++) {\n var nodeInfo = layout.levels[i].nodes[j];\n nodeInfo.x = Math.cos(nodeInfo.ratio * 360 * Math.PI / 180) * (layout.levels[i].radius + layout.verticalSpacing * i);\n nodeInfo.y = Math.sin(nodeInfo.ratio * 360 * Math.PI / 180) * (layout.levels[i].radius + layout.verticalSpacing * i);\n layout.anchorX = Math.min(layout.anchorX, nodeInfo.x);\n layout.anchorY = Math.min(layout.anchorY, nodeInfo.y);\n }\n }\n };\n RadialTree.prototype.updateAnchor = function (layout, viewPort) {\n layout.anchorX = layout.centerNode.offsetX || viewPort.x / 2;\n layout.anchorY = layout.centerNode.offsetY || viewPort.y / 2;\n };\n RadialTree.prototype.updateNodes = function (layout, node, nameTable) {\n var nodeInfo = layout.graphNodes[node.id];\n var offsetX = nodeInfo.x + layout.anchorX;\n var offsetY = nodeInfo.y + layout.anchorY;\n node.offsetX += offsetX;\n node.offsetY += offsetY;\n for (var i = 0; i < nodeInfo.children.length; i++) {\n var childInfo = nodeInfo.children[i];\n this.updateNodes(layout, nameTable[childInfo.id], nameTable);\n }\n };\n RadialTree.prototype.setUpLayoutInfo = function (layout, item) {\n var info = {};\n info.name = item.id;\n info.x = 0;\n info.y = 0;\n info.min = 0;\n info.max = 0;\n info.width = item.actualSize.width;\n info.height = item.actualSize.height;\n info.children = [];\n info.level = 0;\n info.ratio = 0;\n info.visited = false;\n return info;\n };\n return RadialTree;\n}());\nexport { RadialTree };\n","/**\n * Connects diagram objects with layout algorithm\n */\nvar ComplexHierarchicalTree = /** @class */ (function () {\n /**\n * Constructor for the hierarchical tree layout module\n * @private\n */\n function ComplexHierarchicalTree() {\n //constructs the layout module\n }\n /**\n * To destroy the hierarchical tree module\n * @return {void}\n * @private\n */\n ComplexHierarchicalTree.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n ComplexHierarchicalTree.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'ComplexHierarchicalTree';\n };\n ComplexHierarchicalTree.prototype.doLayout = function (nodes, nameTable, layout, viewPort) {\n new HierarchicalLayoutUtil().doLayout(nodes, nameTable, layout, viewPort);\n };\n return ComplexHierarchicalTree;\n}());\nexport { ComplexHierarchicalTree };\n/**\n * Utility that arranges the nodes in hierarchical structure\n */\nvar HierarchicalLayoutUtil = /** @class */ (function () {\n function HierarchicalLayoutUtil() {\n this.nameTable = {};\n this.crossReduction = new CrossReduction();\n }\n /**\n * Defines a vertex that is equivalent to a node object\n */\n HierarchicalLayoutUtil.prototype.createVertex = function (node, value, x, y, width, height) {\n var geometry = { x: x, y: y, width: width, height: height };\n var vertex = {\n value: value, geometry: geometry, name: value, vertex: true,\n inEdges: node.inEdges.slice(), outEdges: node.outEdges.slice()\n };\n return vertex;\n };\n /**\n * Initializes the edges collection of the vertices\n * @private\n */\n HierarchicalLayoutUtil.prototype.getEdges = function (node) {\n var edges = [];\n if (node) {\n for (var i = 0; node.inEdges.length > 0 && i < node.inEdges.length; i++) {\n edges.push(this.nameTable[node.inEdges[i]]);\n }\n for (var i = 0; node.outEdges.length > 0 && i < node.outEdges.length; i++) {\n edges.push(this.nameTable[node.outEdges[i]]);\n }\n }\n return edges;\n };\n /**\n * Finds the root nodes of the layout\n */\n HierarchicalLayoutUtil.prototype.findRoots = function (vertices) {\n var roots = [];\n var best = null;\n var maxDiff = -100000;\n for (var _i = 0, _a = Object.keys(vertices); _i < _a.length; _i++) {\n var i = _a[_i];\n var cell = vertices[i];\n var conns = this.getEdges(cell);\n var outEdges = 0;\n var inEdges = 0;\n for (var k = 0; k < conns.length; k++) {\n var src = this.getVisibleTerminal(conns[k], true);\n if (src.name === cell.name) {\n outEdges++;\n }\n else {\n inEdges++;\n }\n }\n if (inEdges === 0 && outEdges > 0) {\n roots.push(cell);\n }\n var diff = outEdges - inEdges;\n if (diff > maxDiff) {\n maxDiff = diff;\n best = cell;\n }\n }\n if (roots.length === 0 && best != null) {\n roots.push(best);\n }\n return roots;\n };\n /**\n * Returns the source/target vertex of the given connector\n * @private\n */\n HierarchicalLayoutUtil.prototype.getVisibleTerminal = function (edge, source) {\n var terminalCache = this.nameTable[edge.targetID];\n if (source) {\n terminalCache = this.nameTable[edge.sourceID];\n }\n for (var i = 0; i < this.vertices.length; i++) {\n if (this.vertices[i].name === terminalCache.id) {\n return this.vertices[i];\n }\n }\n return null;\n };\n /**\n * Traverses each sub tree, ensures there is no cycle in traversing\n * @private\n */\n HierarchicalLayoutUtil.prototype.traverse = function (vertex, directed, edge, currentComp, hierarchyVertices, filledVertices) {\n if (vertex != null) {\n var vertexID = vertex.name;\n if ((filledVertices == null ? true : filledVertices[vertexID] != null)) {\n if (currentComp[vertexID] == null) {\n currentComp[vertexID] = vertex;\n }\n if (filledVertices != null) {\n delete filledVertices[vertexID];\n }\n var edges = this.getEdges(vertex);\n var edgeIsSource = [];\n for (var i = 0; i < edges.length; i++) {\n edgeIsSource[i] = this.getVisibleTerminal(edges[i], true) === vertex;\n }\n for (var i = 0; i < edges.length; i++) {\n if (!directed || edgeIsSource[i]) {\n var next = this.getVisibleTerminal(edges[i], !edgeIsSource[i]);\n var netCount = 1;\n for (var j = 0; j < edges.length; j++) {\n if (j === i) {\n continue;\n }\n else {\n var isSource2 = edgeIsSource[j];\n var otherTerm = this.getVisibleTerminal(edges[j], !isSource2);\n if (otherTerm === next) {\n if (isSource2) {\n netCount++;\n }\n else {\n netCount--;\n }\n }\n }\n }\n if (netCount >= 0) {\n currentComp = this.traverse(next, directed, edges[i], currentComp, hierarchyVertices, filledVertices);\n }\n }\n }\n }\n else {\n if (currentComp[vertexID] == null) {\n // We've seen this vertex before, but not in the current component This component and the one it's in need to be merged\n for (var i = 0; i < hierarchyVertices.length; i++) {\n var comp = hierarchyVertices[i];\n if (comp[vertexID] != null) {\n for (var _i = 0, _a = Object.keys(comp); _i < _a.length; _i++) {\n var key = _a[_i];\n currentComp[key] = comp[key];\n }\n // Remove the current component from the hierarchy set\n hierarchyVertices.splice(i, 1);\n return currentComp;\n }\n }\n }\n }\n }\n return currentComp;\n };\n /**\n * Returns the bounds of the given vertices\n */\n HierarchicalLayoutUtil.prototype.getModelBounds = function (nodes) {\n nodes = nodes.slice();\n var rect = null;\n var rect1 = null;\n for (var i = 0; i < nodes.length; i++) {\n rect = nodes[i].geometry;\n if (rect1) {\n var right = Math.max(rect1.x + rect1.width, rect.x + rect.width);\n var bottom = Math.max(rect1.y + rect1.height, rect.y + rect.height);\n rect1.x = Math.min(rect1.x, rect.x);\n rect1.y = Math.min(rect1.y, rect.y);\n rect1.width = right - rect1.x;\n rect1.height = bottom - rect1.y;\n }\n else {\n rect1 = { x: rect.x, y: rect.y, width: rect.width, height: rect.height };\n }\n }\n return rect1;\n };\n /**\n * Initializes the layouting process\n * @private\n */\n HierarchicalLayoutUtil.prototype.doLayout = function (nodes, nameTable, layoutProp, viewPort) {\n this.nameTable = nameTable;\n var layout = {\n horizontalSpacing: layoutProp.horizontalSpacing, verticalSpacing: layoutProp.verticalSpacing,\n orientation: layoutProp.orientation, marginX: layoutProp.margin.left, marginY: layoutProp.margin.top\n };\n if (layout.orientation === 'BottomToTop') {\n layout.marginY = -layoutProp.margin.top;\n }\n else if (layout.orientation === 'RightToLeft') {\n layout.marginX = -layoutProp.margin.left;\n }\n this.vertices = [];\n var filledVertexSet = {};\n for (var i = 0; i < nodes.length; i++) {\n var node = this.createVertex(nodes[i], nodes[i].id, 0, 0, nodes[i].actualSize.width, nodes[i].actualSize.height);\n this.vertices.push(node);\n filledVertexSet[node.name] = node;\n }\n var hierarchyVertices = [];\n var candidateRoots;\n candidateRoots = this.findRoots(filledVertexSet);\n for (var i = 0; i < candidateRoots.length; i++) {\n var vertexSet = {};\n hierarchyVertices.push(vertexSet);\n this.traverse(candidateRoots[i], true, null, vertexSet, hierarchyVertices, filledVertexSet);\n }\n var limit = { marginX: 0, marginY: 0 };\n for (var i = 0; i < hierarchyVertices.length; i++) {\n var vertexSet = hierarchyVertices[i];\n var tmp = [];\n for (var _i = 0, _a = Object.keys(vertexSet); _i < _a.length; _i++) {\n var key = _a[_i];\n tmp.push(vertexSet[key]);\n }\n var model = new MultiParentModel(this, tmp, candidateRoots, layout);\n this.cycleStage(model);\n this.layeringStage(model);\n this.crossingStage(model);\n limit = this.placementStage(model, limit.marginX, limit.marginY);\n }\n var modelBounds = this.getModelBounds(this.vertices);\n var trnsX = (viewPort.x - modelBounds.width) / 2;\n for (var i = 0; i < this.vertices.length; i++) {\n var clnode = this.vertices[i];\n if (clnode) {\n var dnode = this.nameTable[clnode.name];\n dnode.offsetX = 0;\n dnode.offsetY = 0;\n //initialize layout\n var dx = (clnode.geometry.x - (dnode.offsetX - (dnode.actualSize.width / 2))) + layout.marginX;\n var dy = (clnode.geometry.y - (dnode.offsetY - (dnode.actualSize.height / 2))) + layout.marginY;\n var x = dx;\n var y = dy;\n if (layout.orientation === 'BottomToTop') {\n y = modelBounds.height - dy;\n }\n else if (layout.orientation === 'RightToLeft') {\n x = modelBounds.width - dx;\n }\n x += trnsX;\n dnode.offsetX += x - dnode.offsetX;\n dnode.offsetY += y - dnode.offsetY;\n }\n }\n };\n /**\n * Handles positioning the nodes\n */\n HierarchicalLayoutUtil.prototype.placementStage = function (model, marginX, marginY) {\n var placementStage = this.coordinateAssignment(marginX, marginY, parent, model);\n placementStage.model = model;\n placementStage.widestRankValue = null;\n this.placementStageExecute(placementStage);\n return {\n marginX: placementStage.marginX + model.layout.horizontalSpacing,\n marginY: placementStage.marginY + model.layout.verticalSpacing\n };\n };\n /**\n * Initializes the layout properties for positioning\n */\n HierarchicalLayoutUtil.prototype.coordinateAssignment = function (marginX, marginY, parent, model) {\n var plalementChange = {};\n if (model.layout.orientation === 'TopToBottom' || model.layout.orientation === 'BottomToTop') {\n plalementChange.horizontalSpacing = model.layout.horizontalSpacing;\n plalementChange.verticalSpacing = model.layout.verticalSpacing;\n }\n else {\n plalementChange.horizontalSpacing = model.layout.verticalSpacing;\n plalementChange.verticalSpacing = model.layout.horizontalSpacing;\n }\n plalementChange.orientation = 'north';\n //Removed the conditions here. So check here in case of any issue\n plalementChange.marginX = plalementChange.marginX = marginX;\n plalementChange.marginY = plalementChange.marginY = marginY;\n return plalementChange;\n };\n /**\n * Calculate the largest size of the node either height or width depends upon the layoutorientation\n */\n HierarchicalLayoutUtil.prototype.calculateWidestRank = function (plalementChange, graph, model) {\n var isHorizontal = false;\n if (plalementChange.model.layout.orientation === 'LeftToRight' || plalementChange.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n var offset = -plalementChange.verticalSpacing;\n var lastRankMaxCellSize = 0.0;\n plalementChange.rankSizes = [];\n plalementChange.rankOffset = [];\n for (var rankValue = model.maxRank; rankValue >= 0; rankValue--) {\n var maxCellSize = 0.0;\n var rank = model.ranks[rankValue];\n var localOffset = isHorizontal ? plalementChange.marginY : plalementChange.marginX;\n for (var i = 0; i < rank.length; i++) {\n var node = rank[i];\n if (this.crossReduction.isVertex(node)) {\n var vertex = node;\n if (vertex.cell && (vertex.cell.inEdges || vertex.cell.outEdges)) {\n var obj = this.nameTable[vertex.cell.name];\n vertex.width = obj.actualSize.width;\n vertex.height = obj.actualSize.height;\n maxCellSize = Math.max(maxCellSize, (isHorizontal ? vertex.width : vertex.height));\n }\n }\n else {\n if (node) {\n var edge = node;\n var numEdges = 1;\n if (edge.edges != null) {\n numEdges = edge.edges.length;\n }\n node.width = (numEdges - 1) * 10;\n }\n }\n if (isHorizontal) {\n if (!node.height) {\n node.height = 0;\n }\n }\n // Set the initial x-value as being the best result so far\n localOffset += (isHorizontal ? node.height : node.width) / 2.0;\n this.setXY(node, rankValue, localOffset, isHorizontal ? true : false);\n this.setTempVariable(node, rankValue, localOffset);\n localOffset += ((isHorizontal ? node.height : node.width) / 2.0) + plalementChange.horizontalSpacing;\n if (localOffset > plalementChange.widestRankValue) {\n plalementChange.widestRankValue = localOffset;\n plalementChange.widestRank = rankValue;\n }\n plalementChange.rankSizes[rankValue] = localOffset;\n }\n plalementChange.rankOffset[rankValue] = offset;\n var distanceToNextRank = maxCellSize / 2.0 + lastRankMaxCellSize / 2.0 + plalementChange.verticalSpacing;\n lastRankMaxCellSize = maxCellSize;\n if (plalementChange.orientation === 'north' || plalementChange.orientation === 'west') {\n offset += distanceToNextRank;\n }\n else {\n offset -= distanceToNextRank;\n }\n for (var i = 0; i < rank.length; i++) {\n var cell = rank[i];\n this.setXY(cell, rankValue, offset, isHorizontal ? false : true);\n }\n }\n };\n /**\n * Sets the temp position of the node on the layer\n * @private\n */\n HierarchicalLayoutUtil.prototype.setTempVariable = function (node, layer, value) {\n if (this.crossReduction.isVertex(node)) {\n node.temp[0] = value;\n }\n else {\n node.temp[layer - node.minRank - 1] = value;\n }\n };\n /**\n * Sets the position of the vertex\n * @private\n */\n HierarchicalLayoutUtil.prototype.setXY = function (node, layer, value, isY) {\n if (node && node.cell) {\n if (node.cell.inEdges || node.cell.outEdges) {\n if (isY) {\n node.y[0] = value;\n }\n else {\n node.x[0] = value;\n }\n }\n else {\n if (isY) {\n node.y[layer - node.minRank - 1] = value;\n }\n else {\n node.x[layer - node.minRank - 1] = value;\n }\n }\n }\n };\n /**\n * Sets geometry position of the layout node on the layout model\n */\n HierarchicalLayoutUtil.prototype.rankCoordinates = function (stage, rankValue, graph, model) {\n var isHorizontal = false;\n if (stage.model.layout.orientation === 'LeftToRight' || stage.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n var rank = model.ranks[rankValue];\n var maxOffset = 0.0;\n var localOffset = (isHorizontal ? stage.marginY : stage.marginX) + (stage.widestRankValue - stage.rankSizes[rankValue]) / 2;\n for (var i = 0; i < rank.length; i++) {\n var node = rank[i];\n if (this.crossReduction.isVertex(node)) {\n var obj = this.nameTable[node.cell.name];\n node.width = obj.actualSize.width;\n node.height = obj.actualSize.height;\n maxOffset = Math.max(maxOffset, node.height);\n }\n else {\n var edge = node;\n var numEdges = 1;\n if (edge.edges != null) {\n numEdges = edge.edges.length;\n }\n if (isHorizontal) {\n node.height = (numEdges - 1) * 10;\n }\n else {\n node.width = (numEdges - 1) * 10;\n }\n }\n var size = (isHorizontal ? node.height : node.width) / 2.0;\n localOffset += size;\n this.setXY(node, rankValue, localOffset, isHorizontal ? true : false);\n this.setTempVariable(node, rankValue, localOffset);\n localOffset += (size + stage.horizontalSpacing);\n }\n };\n /**\n * sets the layout in an initial positioning.it will arange all the ranks as much as possible\n */\n HierarchicalLayoutUtil.prototype.initialCoords = function (plalementChange, facade, model) {\n this.calculateWidestRank(plalementChange, facade, model);\n // Reverse sweep direction each time from widest rank \n for (var i = plalementChange.widestRank; i >= 0; i--) {\n if (i < model.maxRank) {\n this.rankCoordinates(plalementChange, i, facade, model);\n }\n }\n for (var i = plalementChange.widestRank + 1; i <= model.maxRank; i++) {\n if (i > 0) {\n this.rankCoordinates(plalementChange, i, facade, model);\n }\n }\n };\n /**\n * Checks whether the given node is an ancestor\n * @private\n */\n HierarchicalLayoutUtil.prototype.isAncestor = function (node, otherNode) {\n // Firstly, the hash code of this node needs to be shorter than the other node\n if (otherNode != null && node.hashCode != null && otherNode.hashCode != null\n && node.hashCode.length < otherNode.hashCode.length) {\n if (node.hashCode === otherNode.hashCode) {\n return true;\n }\n if (node.hashCode == null || node.hashCode == null) {\n return false;\n }\n for (var i = 0; i < node.hashCode.length; i++) {\n if (node.hashCode[i] !== otherNode.hashCode[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n /**\n * initializes the sorter object\n */\n HierarchicalLayoutUtil.prototype.weightedCellSorter = function (cell, weightedValue) {\n var weightedCellSorter = {};\n weightedCellSorter.cell = cell ? cell : null;\n weightedCellSorter.weightedValue = weightedValue ? weightedValue : 0;\n weightedCellSorter.visited = false;\n weightedCellSorter.rankIndex = null;\n return weightedCellSorter;\n };\n /**\n * Performs one node positioning in both directions\n */\n HierarchicalLayoutUtil.prototype.minNode = function (plalementChange, model) {\n var nodeList = [];\n var map = { map: {} };\n var rank = [];\n for (var i = 0; i <= model.maxRank; i++) {\n rank[i] = model.ranks[i];\n for (var j = 0; j < rank[i].length; j++) {\n var node = rank[i][j];\n var nodeWrapper = this.weightedCellSorter(node, i);\n nodeWrapper.rankIndex = j;\n nodeWrapper.visited = true;\n nodeList.push(nodeWrapper);\n model.setDictionaryForSorter(map, node, nodeWrapper, true);\n }\n }\n var maxTries = nodeList.length * 10;\n var count = 0;\n var tolerance = 1;\n while (nodeList.length > 0 && count <= maxTries) {\n var cellWrapper = nodeList.shift();\n var cell = cellWrapper.cell;\n var rankValue = cellWrapper.weightedValue;\n var rankIndex = cellWrapper.rankIndex;\n var nextLayerConnectedCells = this.crossReduction.getConnectedCellsOnLayer(cell, rankValue);\n var previousLayerConnectedCells = this.crossReduction.getConnectedCellsOnLayer(cell, rankValue, true);\n var nextConnectedCount = nextLayerConnectedCells.length;\n var prevConnectedCount = previousLayerConnectedCells.length;\n var medianNextLevel = this.medianXValue(plalementChange, nextLayerConnectedCells, rankValue + 1);\n var medianPreviousLevel = this.medianXValue(plalementChange, previousLayerConnectedCells, rankValue - 1);\n var numConnectedNeighbours = nextConnectedCount + prevConnectedCount;\n var currentPosition = this.crossReduction.getTempVariable(cell, rankValue);\n var cellMedian = currentPosition;\n if (numConnectedNeighbours > 0) {\n cellMedian = (medianNextLevel * nextConnectedCount + medianPreviousLevel * prevConnectedCount) / numConnectedNeighbours;\n }\n var positionChanged = false;\n var tempValue = undefined;\n if (cellMedian < currentPosition - tolerance) {\n if (rankIndex === 0) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else {\n var leftCell = rank[rankValue][rankIndex - 1];\n var leftLimit = this.crossReduction.getTempVariable(leftCell, rankValue);\n leftLimit = leftLimit + leftCell.width / 2 + plalementChange.intraCellSpacing + cell.width / 2;\n if (leftLimit < cellMedian) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else if (leftLimit < this.crossReduction.getTempVariable(cell, rankValue) - tolerance) {\n tempValue = leftLimit;\n positionChanged = true;\n }\n }\n }\n else if (cellMedian > currentPosition + tolerance) {\n var rankSize = rank[rankValue].length;\n if (rankIndex === rankSize - 1) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else {\n var rightCell = rank[rankValue][rankIndex + 1];\n var rightLimit = this.crossReduction.getTempVariable(rightCell, rankValue);\n rightLimit = rightLimit - rightCell.width / 2 - plalementChange.intraCellSpacing - cell.width / 2;\n if (rightLimit > cellMedian) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else if (rightLimit > this.crossReduction.getTempVariable(cell, rankValue) + tolerance) {\n tempValue = rightLimit;\n positionChanged = true;\n }\n }\n }\n if (positionChanged) {\n this.setTempVariable(cell, rankValue, tempValue);\n // Add connected nodes to map and list\n this.updateNodeList(nodeList, map, nextLayerConnectedCells, model);\n this.updateNodeList(nodeList, map, previousLayerConnectedCells, model);\n }\n if (this.crossReduction.isVertex(cellWrapper.cell)) {\n cellWrapper.visited = false;\n }\n count++;\n }\n };\n /**\n * Updates the ndoes collection\n */\n HierarchicalLayoutUtil.prototype.updateNodeList = function (nodeList, map, collection, model) {\n for (var i = 0; i < collection.length; i++) {\n var connectedCell = collection[i];\n var connectedCellWrapper = model.getDictionaryForSorter(map, connectedCell);\n if (connectedCellWrapper != null) {\n if (connectedCellWrapper.visited === false) {\n connectedCellWrapper.visited = true;\n nodeList.push(connectedCellWrapper);\n }\n }\n }\n };\n /**\n * Calculates the node position of the connected cell on the specified rank\n */\n HierarchicalLayoutUtil.prototype.medianXValue = function (plalementChange, connectedCells, rankValue) {\n if (connectedCells.length === 0) {\n return 0;\n }\n var medianValues = [];\n for (var i = 0; i < connectedCells.length; i++) {\n medianValues[i] = this.crossReduction.getTempVariable(connectedCells[i], rankValue);\n }\n medianValues.sort(function (a, b) {\n return a - b;\n });\n if (connectedCells.length % 2 === 1) {\n return medianValues[Math.floor(connectedCells.length / 2)];\n }\n else {\n var medianPoint = connectedCells.length / 2;\n var leftMedian = medianValues[medianPoint - 1];\n var rightMedian = medianValues[medianPoint];\n return ((leftMedian + rightMedian) / 2);\n }\n };\n /**\n * Updates the geometry of the vertices\n */\n HierarchicalLayoutUtil.prototype.placementStageExecute = function (plalementChange) {\n var isHorizontal = false;\n if (plalementChange.model.layout.orientation === 'LeftToRight' || plalementChange.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n plalementChange.jettyPositions = {};\n var model = plalementChange.model;\n isHorizontal ? plalementChange.currentYDelta = 0.0 : plalementChange.currentXDelta = 0.0;\n this.initialCoords(plalementChange, { model: model }, model);\n this.minNode(plalementChange, model);\n var bestOffsetDelta = 100000000.0;\n if (!plalementChange.maxIterations) {\n plalementChange.maxIterations = 8;\n }\n for (var i = 0; i < plalementChange.maxIterations; i++) {\n // if the total offset is less for the current positioning, \n //there are less heavily angled edges and so the current positioning is used\n if ((isHorizontal ? plalementChange.currentYDelta : plalementChange.currentXDelta) < bestOffsetDelta) {\n for (var j = 0; j < model.ranks.length; j++) {\n var rank = model.ranks[j];\n for (var k = 0; k < rank.length; k++) {\n var cell = rank[k];\n this.setXY(cell, j, this.crossReduction.getTempVariable(cell, j), isHorizontal ? true : false);\n }\n }\n bestOffsetDelta = isHorizontal ? plalementChange.currentYDelta : plalementChange.currentXDelta;\n }\n isHorizontal ? plalementChange.currentYDelta = 0 : plalementChange.currentXDelta = 0;\n }\n this.setCellLocations(plalementChange, model);\n };\n /**\n * sets the cell position in the after the layout operation\n */\n HierarchicalLayoutUtil.prototype.setCellLocations = function (plalementChange, model) {\n var vertices = this.getValues(model.vertexMapper);\n for (var i = 0; i < vertices.length; i++) {\n this.setVertexLocation(plalementChange, vertices[i]);\n }\n };\n /**\n * used to specify the geometrical position of the layout model cell\n */\n HierarchicalLayoutUtil.prototype.garphModelsetVertexLocation = function (plalementChange, cell, x, y) {\n var model = plalementChange.model;\n var geometry = cell.geometry;\n var result = null;\n if (geometry != null) {\n result = { x: x, y: y, width: geometry.width, height: geometry.height };\n if (geometry.x !== x || geometry.y !== y) {\n cell.geometry = result;\n }\n }\n return result;\n };\n /**\n * set the position of the specified node\n */\n HierarchicalLayoutUtil.prototype.setVertexLocation = function (plalementChange, cell) {\n var isHorizontal = false;\n if (plalementChange.model.layout.orientation === 'LeftToRight' || plalementChange.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n var realCell = cell.cell;\n var positionX = cell.x[0] - cell.width / 2;\n var positionY = cell.y[0] - cell.height / 2;\n this.garphModelsetVertexLocation(plalementChange, realCell, positionX, positionY);\n if (isHorizontal) {\n if (!plalementChange.marginY) {\n plalementChange.marginY = 0;\n }\n plalementChange.marginY = Math.max(plalementChange.marginY, positionY + cell.height);\n }\n else {\n if (!plalementChange.marginX) {\n plalementChange.marginX = 0;\n }\n plalementChange.marginX = Math.max(plalementChange.marginX, positionX + cell.width);\n }\n };\n /**\n * get the specific value from the key value pair\n */\n HierarchicalLayoutUtil.prototype.getValues = function (mapper) {\n var list = [];\n if (mapper.map) {\n for (var _i = 0, _a = Object.keys(mapper.map); _i < _a.length; _i++) {\n var key = _a[_i];\n list.push(mapper.map[key]);\n }\n }\n return list;\n };\n /**\n * Checks and reduces the crosses in between line segments\n */\n HierarchicalLayoutUtil.prototype.crossingStage = function (model) {\n this.crossReduction.execute(model);\n };\n /**\n * Initializes the ranks of the vertices\n */\n HierarchicalLayoutUtil.prototype.layeringStage = function (model) {\n this.initialRank(model);\n this.fixRanks(model);\n };\n /**\n * determine the initial rank for the each vertex on the relevent direction\n */\n HierarchicalLayoutUtil.prototype.initialRank = function (model) {\n var startNodes = model.startNodes;\n var internalNodes = model.getDictionaryValues(model.vertexMapper);\n var startNodesCopy = startNodes.slice();\n while (startNodes.length > 0) {\n var internalNode = startNodes[0];\n var layerDeterminingEdges = internalNode.connectsAsTarget;\n var edgesToBeMarked = internalNode.connectsAsSource;\n var allEdgesScanned = true;\n var minimumLayer = 100000000;\n for (var i = 0; i < layerDeterminingEdges.length; i++) {\n var internalEdge = layerDeterminingEdges[i];\n if (internalEdge.temp[0] === 5270620) {\n // This edge has been scanned, get the layer of the node on the other end\n var otherNode = internalEdge.source;\n minimumLayer = Math.min(minimumLayer, otherNode.temp[0] - 1);\n }\n else {\n allEdgesScanned = false;\n break;\n }\n }\n // If all edge have been scanned, assign the layer, mark all edges in the other direction and remove from the nodes list\n if (allEdgesScanned) {\n internalNode.temp[0] = minimumLayer;\n if (!model.maxRank) {\n model.maxRank = 100000000;\n }\n model.maxRank = Math.min(model.maxRank, minimumLayer);\n if (edgesToBeMarked != null) {\n for (var i = 0; i < edgesToBeMarked.length; i++) {\n var internalEdge = edgesToBeMarked[i];\n internalEdge.temp[0] = 5270620;\n // Add node on other end of edge to LinkedList of nodes to be analysed\n var otherNode = internalEdge.target;\n // Only add node if it hasn't been assigned a layer\n if (otherNode.temp[0] === -1) {\n startNodes.push(otherNode);\n // Mark this other node as neither being unassigned nor assigned \n //so it isn't added to this list again, but it's layer isn't used in any calculation.\n otherNode.temp[0] = -2;\n }\n }\n }\n startNodes.shift();\n }\n else {\n // Not all the edges have been scanned, get to the back of the class and put the dunces cap on\n var removedCell = startNodes.shift();\n startNodes.push(internalNode);\n if (removedCell === internalNode && startNodes.length === 1) {\n // This is an error condition, we can't get out of this loop. \n //It could happen for more than one node but that's a lot harder to detect. Log the error\n break;\n }\n }\n }\n for (var i = 0; i < internalNodes.length; i++) {\n internalNodes[i].temp[0] -= model.maxRank;\n }\n for (var i = 0; i < startNodesCopy.length; i++) {\n var internalNode = startNodesCopy[i];\n var currentMaxLayer = 0;\n var layerDeterminingEdges = internalNode.connectsAsSource;\n for (var j = 0; j < layerDeterminingEdges.length; j++) {\n var internalEdge = layerDeterminingEdges[j];\n var otherNode = internalEdge.target;\n internalNode.temp[0] = Math.max(currentMaxLayer, otherNode.temp[0] + 1);\n currentMaxLayer = internalNode.temp[0];\n }\n }\n model.maxRank = 100000000 - model.maxRank;\n };\n /**\n * used to set the optimum value of each vertex on the layout\n */\n HierarchicalLayoutUtil.prototype.fixRanks = function (model) {\n model.fixRanks();\n };\n /**\n * used to determine any cyclic stage have been created on the layout model\n */\n HierarchicalLayoutUtil.prototype.cycleStage = function (model) {\n var seenNodes = {};\n model.startNodes = [];\n var unseenNodesArray = model.getDictionaryValues(model.vertexMapper);\n var unseenNodes = [];\n for (var i = 0; i < unseenNodesArray.length; i++) {\n unseenNodesArray[i].temp[0] = -1;\n unseenNodes[unseenNodesArray[i].id] = unseenNodesArray[i];\n }\n var rootsArray = null;\n if (model.roots != null) {\n var modelRoots = model.roots;\n rootsArray = [];\n for (var i = 0; i < modelRoots.length; i++) {\n rootsArray[i] = model.getDictionary(model.vertexMapper, modelRoots[i]);\n if (rootsArray[i] != null) {\n model.startNodes.push(rootsArray[i]);\n }\n }\n }\n model.visit('removeParentConnection', rootsArray, true, null, { seenNodes: seenNodes, unseenNodes: unseenNodes });\n var seenNodesCopy = model.clone(seenNodes, null, true);\n model.visit('removeNodeConnection', unseenNodes, true, seenNodesCopy, { seenNodes: seenNodes, unseenNodes: unseenNodes });\n };\n /**\n * removes the edge from the given collection\n * @private\n */\n HierarchicalLayoutUtil.prototype.remove = function (obj, array) {\n var index = array.indexOf(obj);\n if (index !== -1) {\n array.splice(index, 1);\n }\n return obj;\n };\n /**\n * Inverts the source and target of an edge\n * @private\n */\n HierarchicalLayoutUtil.prototype.invert = function (connectingEdge, layer) {\n var temp = connectingEdge.source;\n connectingEdge.source = connectingEdge.target;\n connectingEdge.target = temp;\n connectingEdge.isReversed = !connectingEdge.isReversed;\n };\n /**\n * used to get the edges between the given source and target\n * @private\n */\n HierarchicalLayoutUtil.prototype.getEdgesBetween = function (source, target, directed) {\n directed = (directed != null) ? directed : false;\n var edges = this.getEdges(source);\n var result = [];\n for (var i = 0; i < edges.length; i++) {\n var src = this.getVisibleTerminal(edges[i], true);\n var trg = this.getVisibleTerminal(edges[i], false);\n if ((src === source && trg === target) || (!directed && src === target && trg === source)) {\n result.push(edges[i]);\n }\n }\n return result;\n };\n return HierarchicalLayoutUtil;\n}());\n/**\n * Handles position the objects in a hierarchical tree structure\n */\nvar MultiParentModel = /** @class */ (function () {\n function MultiParentModel(layout, vertices, roots, dlayout) {\n this.multiObjectIdentityCounter = 0;\n //used to count the no of times the parent have been used\n this.dfsCount = 0;\n this.hierarchicalUtil = new HierarchicalLayoutUtil();\n this.roots = roots;\n this.vertexMapper = { map: {} };\n var internalVertices = [];\n this.layout = dlayout;\n this.maxRank = 100000000;\n this.hierarchicalLayout = layout;\n this.createInternalCells(layout, vertices, internalVertices);\n for (var i = 0; i < vertices.length; i++) {\n var edges = internalVertices[i].connectsAsSource;\n for (var j = 0; j < edges.length; j++) {\n var internalEdge = edges[j];\n var realEdges = internalEdge.edges;\n if (realEdges != null && realEdges.length > 0) {\n var realEdge = realEdges[0];\n var targetCell = layout.getVisibleTerminal(realEdge, false);\n var internalTargetCell = this.getDictionary(this.vertexMapper, targetCell);\n if (internalVertices[i] === internalTargetCell) {\n targetCell = layout.getVisibleTerminal(realEdge, true);\n internalTargetCell = this.getDictionary(this.vertexMapper, targetCell);\n }\n if (internalTargetCell != null && internalVertices[i] !== internalTargetCell) {\n internalEdge.target = internalTargetCell;\n if (internalTargetCell.connectsAsTarget.length === 0) {\n internalTargetCell.connectsAsTarget = [];\n }\n if (internalTargetCell.connectsAsTarget.indexOf(internalEdge) < 0) {\n internalTargetCell.connectsAsTarget.push(internalEdge);\n }\n }\n }\n }\n internalVertices[i].temp[0] = 1;\n }\n }\n /**\n * used to create the duplicate of the edges on the layout model\n */\n MultiParentModel.prototype.createInternalCells = function (layout, vertices, internalVertices) {\n for (var i = 0; i < vertices.length; i++) {\n internalVertices[i] = {\n x: [], y: [], temp: [], cell: vertices[i],\n id: vertices[i].name, connectsAsTarget: [], connectsAsSource: []\n };\n this.setDictionary(this.vertexMapper, vertices[i], internalVertices[i]);\n var conns = layout.getEdges(vertices[i]);\n internalVertices[i].connectsAsSource = [];\n for (var j = 0; j < conns.length; j++) {\n var cell = layout.getVisibleTerminal(conns[j], false);\n if (cell !== vertices[i]) {\n var undirectedEdges = layout.getEdgesBetween(vertices[i], cell, false);\n var directedEdges = layout.getEdgesBetween(vertices[i], cell, true);\n if (undirectedEdges != null && undirectedEdges.length > 0 && directedEdges.length * 2 >= undirectedEdges.length) {\n var internalEdge = { x: [], y: [], temp: [], edges: undirectedEdges, ids: [] };\n for (var m = 0; m < undirectedEdges.length; m++) {\n internalEdge.ids.push(undirectedEdges[m].id);\n }\n internalEdge.source = internalVertices[i];\n if (!internalVertices[i].connectsAsSource) {\n internalVertices[i].connectsAsSource = [];\n }\n if (internalVertices[i].connectsAsSource.indexOf(internalEdge) < 0) {\n internalVertices[i].connectsAsSource.push(internalEdge);\n }\n }\n }\n }\n internalVertices[i].temp[0] = 0;\n }\n };\n /**\n * used to set the optimum value of each vertex on the layout\n * @private\n */\n MultiParentModel.prototype.fixRanks = function () {\n var rankList = [];\n this.ranks = [];\n for (var i = 0; i < this.maxRank + 1; i++) {\n rankList[i] = [];\n this.ranks[i] = rankList[i];\n }\n var rootsArray = null;\n if (this.roots != null) {\n var oldRootsArray = this.roots;\n rootsArray = [];\n for (var i = 0; i < oldRootsArray.length; i++) {\n var cell = oldRootsArray[i];\n var internalNode = this.getDictionary(this.vertexMapper, cell);\n rootsArray[i] = internalNode;\n }\n }\n this.visit('updateMinMaxRank', rootsArray, false, null, { seenNodes: null, unseenNodes: null, rankList: rankList });\n };\n /**\n * Updates the min/max rank of the layer\n */\n MultiParentModel.prototype.updateMinMaxRank = function (layer, seen, data) {\n var seenNodes = data.seenNodes;\n var unseenNodes = data.unseenNodes;\n var parent = data.parent;\n var node = data.root;\n var edge = data.edge;\n var rankList = data.rankList;\n if (!node.maxRank && node.maxRank !== 0) {\n node.maxRank = -1;\n }\n if (!node.minRank && node.minRank !== 0) {\n node.minRank = -1;\n }\n if (seen === 0 && node.maxRank < 0 && node.minRank < 0) {\n rankList[node.temp[0]].push(node);\n node.maxRank = node.temp[0];\n node.minRank = node.temp[0];\n node.temp[0] = rankList[node.maxRank].length - 1;\n }\n if (parent != null && edge != null) {\n var parentToCellRankDifference = parent.maxRank - node.maxRank;\n if (parentToCellRankDifference > 1) {\n edge.maxRank = parent.maxRank;\n edge.minRank = node.maxRank;\n edge.temp = [];\n edge.x = [];\n edge.y = [];\n for (var i = edge.minRank + 1; i < edge.maxRank; i++) {\n rankList[i].push(edge);\n this.hierarchicalUtil.setTempVariable(edge, i, rankList[i].length - 1);\n }\n }\n }\n };\n /**\n * used to store the value of th given key on the object\n */\n MultiParentModel.prototype.setDictionary = function (dic, key, value) {\n var id = key.name;\n if (!id) {\n // id = this._getDictionary(dic, key);\n }\n var previous = dic.map[id];\n dic.map[id] = value;\n return previous;\n };\n /**\n * used to store the value of th given key on the object\n * @private\n */\n MultiParentModel.prototype.setDictionaryForSorter = function (dic, key, value, flag) {\n var id = key.id;\n if (!id) {\n //id = this._getDictionaryForSorter(dic, key);\n }\n var previous = dic.map[id];\n dic.map[id] = value;\n return previous;\n };\n /**\n * used to get the value of the given key\n * @private\n */\n MultiParentModel.prototype.getDictionary = function (dic, key) {\n if (!this.multiObjectIdentityCounter && this.multiObjectIdentityCounter !== 0) {\n this.multiObjectIdentityCounter = 0;\n }\n var id = key.name;\n if (!id) {\n if (!key.layoutObjectId) {\n key.layoutObjectId = 'graphHierarchyNode#' + this.multiObjectIdentityCounter++;\n return key.layoutObjectId;\n }\n else {\n return dic.map[key.layoutObjectId];\n }\n }\n return dic.map[id];\n };\n /**\n * used to get the value of the given key\n * @private\n */\n MultiParentModel.prototype.getDictionaryForSorter = function (dic, key) {\n if (!this.multiObjectIdentityCounter && this.multiObjectIdentityCounter !== 0) {\n this.multiObjectIdentityCounter = 0;\n }\n var id = key.id;\n if (!id) {\n if (!key.layoutObjectId) {\n key.layoutObjectId = 'graphHierarchyNode#' + this.multiObjectIdentityCounter++;\n return key.layoutObjectId;\n }\n else {\n return dic.map[key.layoutObjectId];\n }\n }\n return dic.map[id];\n };\n /**\n * used to get all the values of the dictionary object\n * @private\n */\n MultiParentModel.prototype.getDictionaryValues = function (dic) {\n var result = [];\n for (var _i = 0, _a = Object.keys(dic.map); _i < _a.length; _i++) {\n var key = _a[_i];\n result.push(dic.map[key]);\n }\n return result;\n };\n /**\n * used to visit all the entries on the given dictionary with given function\n * @private\n */\n MultiParentModel.prototype.visit = function (visitor, dfsRoots, trackAncestors, seenNodes, data) {\n var seenNodes1 = data.seenNodes;\n var unseenNodes1 = data.unseenNodes;\n var rankList = data.rankList;\n // Run depth first search through on all roots\n if (dfsRoots != null) {\n for (var i = 0; i < dfsRoots.length; i++) {\n var internalNode = dfsRoots[i];\n if (internalNode != null) {\n if (seenNodes == null) {\n seenNodes = new Object();\n }\n data.parent = null;\n data.root = internalNode;\n data.edge = null;\n if (trackAncestors) {\n // Set up hash code for root\n internalNode.hashCode = [];\n internalNode.hashCode[0] = this.dfsCount;\n internalNode.hashCode[1] = i;\n this.extendedDfs(visitor, seenNodes, i, 0, data);\n }\n else {\n this.depthFirstSearch(visitor, seenNodes, 0, data);\n }\n }\n }\n this.dfsCount++;\n }\n };\n /**\n * used to perform the depth fisrt search on the layout model\n */\n MultiParentModel.prototype.depthFirstSearch = function (visitor, seen, layer, data) {\n var seenNodes1 = data.seenNodes;\n var unseenNodes1 = data.unseenNodes;\n var rankList = data.rankList;\n var parent = data.parent;\n var root = data.root;\n var edge = data.edge;\n if (root != null) {\n var rootId = root.id;\n if (seen[rootId] == null) {\n seen[rootId] = root;\n this.updateConnectionRank(visitor, layer, 0, data);\n // Copy the connects as source list so that visitors can change the original for edge direction inversions\n var outgoingEdges = root.connectsAsSource.slice();\n for (var i = 0; i < outgoingEdges.length; i++) {\n var internalEdge = outgoingEdges[i];\n var targetNode = internalEdge.target;\n // Root check is O(|roots|)\n data.parent = root;\n data.root = targetNode;\n data.edge = internalEdge;\n this.depthFirstSearch(visitor, seen, layer + 1, data);\n }\n }\n else {\n this.updateConnectionRank(visitor, layer, 1, data);\n }\n }\n };\n /**\n * Updates the rank of the connection\n */\n MultiParentModel.prototype.updateConnectionRank = function (visitor, layer, seen, traversedList) {\n var parent = traversedList.parent;\n var root = traversedList.root;\n var edge = traversedList.edge;\n if (visitor === 'removeParentConnection' || visitor === 'removeNodeConnection') {\n var remove = visitor === 'removeNodeConnection' ? true : false;\n this.removeConnectionEdge(parent, root, edge, layer, traversedList, remove);\n }\n if (visitor === 'updateMinMaxRank') {\n this.updateMinMaxRank(layer, seen, traversedList);\n }\n };\n /**\n * Removes the edge from the collection\n */\n MultiParentModel.prototype.removeConnectionEdge = function (parent, node, edge, layer, data, remove) {\n var seenNodes = data.seenNodes;\n var unseenNodes = data.unseenNodes;\n var rankList = data.rankList;\n if (this.hierarchicalUtil.isAncestor(node, parent)) {\n this.hierarchicalUtil.invert(edge, 0);\n this.hierarchicalUtil.remove(edge, parent.connectsAsSource);\n if (remove) {\n node.connectsAsSource.push(edge);\n parent.connectsAsTarget.push(edge);\n this.hierarchicalUtil.remove(edge, node.connectsAsTarget);\n }\n else {\n parent.connectsAsTarget.push(edge);\n this.hierarchicalUtil.remove(edge, node.connectsAsTarget);\n node.connectsAsSource.push(edge);\n }\n }\n seenNodes[node.id] = node;\n delete unseenNodes[node.id];\n };\n /**\n * the dfs extends the default version by keeping track of cells ancestors, but it should be only used when necessary\n */\n MultiParentModel.prototype.extendedDfs = function (visitor, seen, cHash, layer, data) {\n var seenNodes = data.seenNodes;\n var unseenNodes = data.unseenNodes;\n var rankList = data.rankList;\n var parent = data.parent;\n var root = data.root;\n var edge = data.edge;\n if (root != null) {\n if (parent != null) {\n if (root.hashCode == null ||\n root.hashCode[0] !== parent.hashCode[0]) {\n var hashCodeLength = parent.hashCode.length + 1;\n root.hashCode = parent.hashCode.slice();\n root.hashCode[hashCodeLength - 1] = cHash;\n }\n }\n var rootId = root.id;\n if (seen[rootId] == null) {\n seen[rootId] = root;\n this.updateConnectionRank(visitor, layer, 0, data);\n var outgoingEdges = root.connectsAsSource.slice();\n for (var i = 0; i < outgoingEdges.length; i++) {\n var internalEdge = outgoingEdges[i];\n var targetNode = internalEdge.target;\n data.parent = root;\n data.root = targetNode;\n data.edge = internalEdge;\n this.extendedDfs(visitor, seen, i, layer + 1, data);\n }\n }\n else {\n this.updateConnectionRank(visitor, layer, 1, data);\n }\n }\n };\n /**\n * used to clone the specified object ignoring all fieldnames in the given array of transient fields\n * @private\n */\n MultiParentModel.prototype.clone = function (obj, transients, shallow) {\n shallow = (shallow != null) ? shallow : false;\n if (obj != null && typeof (obj.constructor) === 'function') {\n var clonedObj = obj.constructor();\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var i = _a[_i];\n if (i !== 'layoutObjectId' && (transients == null || transients.indexOf(i) < 0)) {\n if (!shallow && typeof (obj[i]) === 'object') {\n //not used\n // _clone[i] = $.extend(true, {}, obj[i]);\n }\n else {\n clonedObj[i] = obj[i];\n }\n }\n }\n return clonedObj;\n }\n return null;\n };\n return MultiParentModel;\n}());\n/**\n * Defines how to reduce the crosses in between the line segments\n */\nvar CrossReduction = /** @class */ (function () {\n function CrossReduction() {\n }\n /**\n * used to calculate the number of edges crossing the layout model\n * @param model\n */\n CrossReduction.prototype.calculateCrossings = function (model) {\n var numRanks = model.ranks.length;\n var totalCrossings = 0;\n for (var i = 1; i < numRanks; i++) {\n totalCrossings += this.calculateRankCrossing(i, model);\n }\n return totalCrossings;\n };\n /**\n * used to get the temp value specified for the node or connector\n * @private\n */\n CrossReduction.prototype.getTempVariable = function (node, layer) {\n if (node) {\n if (this.isVertex(node)) {\n return node.temp[0];\n }\n else {\n return node.temp[layer - node.minRank - 1];\n }\n }\n return 0;\n };\n /**\n * used to specify the number of conenctors crossing between the specified rank and its below rank\n */\n CrossReduction.prototype.calculateRankCrossing = function (i, model) {\n var totalCrossings = 0;\n var rank = model.ranks[i];\n var previousRank = model.ranks[i - 1];\n var tmpIndices = [];\n // Iterate over the top rank and fill in the connection information\n for (var j = 0; j < rank.length; j++) {\n var node = rank[j];\n var rankPosition = this.getTempVariable(node, i);\n var connectedCells = this.getConnectedCellsOnLayer(node, i, true);\n ///#### \n var nodeIndices = [];\n for (var k = 0; k < connectedCells.length; k++) {\n var connectedNode = connectedCells[k];\n var otherCellRankPosition = this.getTempVariable(connectedNode, i - 1);\n nodeIndices.push(otherCellRankPosition);\n }\n nodeIndices.sort(function (x, y) { return x - y; });\n tmpIndices[rankPosition] = nodeIndices;\n }\n var indices = [];\n for (var j = 0; j < tmpIndices.length; j++) {\n indices = indices.concat(tmpIndices[j]);\n }\n var firstIndex = 1;\n while (firstIndex < previousRank.length) {\n firstIndex <<= 1;\n }\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = [];\n for (var j = 0; j < treeSize; ++j) {\n tree[j] = 0;\n }\n for (var j = 0; j < indices.length; j++) {\n var index = indices[j];\n var treeIndex = index + firstIndex;\n ++tree[treeIndex];\n while (treeIndex > 0) {\n if (treeIndex % 2) {\n totalCrossings += tree[treeIndex + 1];\n }\n treeIndex = (treeIndex - 1) >> 1;\n ++tree[treeIndex];\n }\n }\n return totalCrossings;\n };\n /**\n * Calculates and reduces the crosses between line segments\n * @private\n */\n CrossReduction.prototype.execute = function (model) {\n // Stores initial ordering \n this.nestedBestRanks = [];\n for (var i = 0; i < model.ranks.length; i++) {\n this.nestedBestRanks[i] = model.ranks[i].slice();\n }\n var iterationsWithoutImprovement = 0;\n var currentBestCrossings = this.calculateCrossings(model);\n for (var i = 0; i < 24 && iterationsWithoutImprovement < 2; i++) {\n this.weightedMedian(i, model);\n var candidateCrossings = this.calculateCrossings(model);\n if (candidateCrossings < currentBestCrossings) {\n currentBestCrossings = candidateCrossings;\n iterationsWithoutImprovement = 0;\n for (var j = 0; j < this.nestedBestRanks.length; j++) {\n var rank = model.ranks[j];\n for (var k = 0; k < rank.length; k++) {\n var cell = rank[k];\n this.nestedBestRanks[j][cell.temp[0]] = cell;\n }\n }\n }\n else {\n // Increase count of iterations \n iterationsWithoutImprovement++;\n // Restore the best values to the cells\n for (var j = 0; j < this.nestedBestRanks.length; j++) {\n var rank = model.ranks[j];\n for (var k = 0; k < rank.length; k++) {\n var cell = rank[k];\n this.setTempVariable(cell, j, k);\n }\n }\n }\n if (currentBestCrossings === 0) {\n break;\n }\n }\n // Store the best rankings but in the model\n var ranks = [];\n var rankList = [];\n for (var i = 0; i < model.maxRank + 1; i++) {\n rankList[i] = [];\n ranks[i] = rankList[i];\n }\n for (var i = 0; i < this.nestedBestRanks.length; i++) {\n for (var j = 0; j < this.nestedBestRanks[i].length; j++) {\n rankList[i].push(this.nestedBestRanks[i][j]);\n }\n }\n model.ranks = ranks;\n };\n /**\n * check whether the object is vertext or edge on the layout model.\n * @private\n */\n CrossReduction.prototype.isVertex = function (node) {\n if (node && node.cell && (node.cell.inEdges || node.cell.outEdges)) {\n return true;\n }\n return false;\n };\n /**\n * used to move up or move down the node position on the adjacent ranks\n */\n CrossReduction.prototype.weightedMedian = function (iteration, model) {\n // Reverse sweep direction each time through this method\n var downwardSweep = (iteration % 2 === 0);\n if (downwardSweep) {\n for (var j = model.maxRank - 1; j >= 0; j--) {\n this.medianRank(j, downwardSweep);\n }\n }\n else {\n for (var j = 1; j < model.maxRank; j++) {\n this.medianRank(j, downwardSweep);\n }\n }\n };\n /**\n * used to get the node next(up) connected to the specified node or connector\n * @private\n */\n CrossReduction.prototype.getConnectedCellsOnLayer = function (cell, layer, isPrevious) {\n if (isPrevious === void 0) { isPrevious = false; }\n var connectedlayer = 'nextLayerConnectedCells';\n var connectedAs = 'connectsAsTarget';\n if (isPrevious) {\n connectedlayer = 'previousLayerConnectedCells';\n connectedAs = 'connectsAsSource';\n }\n if (cell) {\n if (this.isVertex(cell)) {\n if (cell[connectedlayer] == null) {\n cell[connectedlayer] = [];\n cell[connectedlayer][0] = [];\n for (var i = 0; i < cell[connectedAs].length; i++) {\n var edge = cell[connectedAs][i];\n if (edge.maxRank === undefined) {\n edge.maxRank = -1;\n }\n if (edge.maxRank === -1 || (isPrevious ? (edge.minRank === layer - 1) : (edge.maxRank === layer + 1))) {\n // Either edge is not in any rank or no dummy nodes in edge, add node of other side of edge\n cell[connectedlayer][0].push(isPrevious ? edge.target : edge.source);\n }\n else {\n // Edge spans at least two layers, add edge\n cell[connectedlayer][0].push(edge);\n }\n }\n }\n return cell[connectedlayer][0];\n }\n else {\n if (cell[connectedlayer] == null) {\n cell[connectedlayer] = [];\n for (var i = 0; i < cell.temp.length; i++) {\n cell[connectedlayer][i] = [];\n if (i === (isPrevious ? 0 : (cell.temp.length - 1))) {\n cell[connectedlayer][i].push(isPrevious ? cell.target : cell.source);\n }\n else {\n cell[connectedlayer][i].push(cell);\n }\n }\n }\n return cell[connectedlayer][layer - cell.minRank - 1];\n }\n }\n return null;\n };\n /**\n * calculates the rank elements on the specified rank\n * @private\n */\n CrossReduction.prototype.medianValue = function (connectedCells, rankValue) {\n var medianValues = [];\n var arrayCount = 0;\n for (var i = 0; i < connectedCells.length; i++) {\n var cell = connectedCells[i];\n medianValues[arrayCount++] = this.getTempVariable(cell, rankValue);\n }\n // sorts numerical order sort\n medianValues.sort(function (a, b) { return a - b; });\n if (arrayCount % 2 === 1) {\n // For odd numbers of adjacent vertices return the median\n return medianValues[Math.floor(arrayCount / 2)];\n }\n else if (arrayCount === 2) {\n return ((medianValues[0] + medianValues[1]) / 2.0);\n }\n else {\n var medianPoint = arrayCount / 2;\n var leftMedian = medianValues[medianPoint - 1] - medianValues[0];\n var rightMedian = medianValues[arrayCount - 1]\n - medianValues[medianPoint];\n return (medianValues[medianPoint - 1] * rightMedian + medianValues[medianPoint] * leftMedian) / (leftMedian + rightMedian);\n }\n };\n /**\n * get the temp value of the specified layer\n * @private\n */\n CrossReduction.prototype.setTempVariable = function (cell, layer, value) {\n if (cell) {\n cell.temp[0] = value;\n }\n };\n /**\n * used to minimize the node position on this rank and one of its adjacent ranks\n */\n CrossReduction.prototype.medianRank = function (rankValue, downwardSweep) {\n var numCellsForRank = this.nestedBestRanks[rankValue].length;\n var medianValues = [];\n var reservedPositions = [];\n for (var i = 0; i < numCellsForRank; i++) {\n var cell = this.nestedBestRanks[rankValue][i];\n var sorterEntry = { medianValue: 0 };\n sorterEntry.cell = cell;\n // Flip whether or not equal medians are flipped on up and down sweeps \n //TODO re-implement some kind of nudge medianValues[i].nudge = !downwardSweep;\n var nextLevelConnectedCells = void 0;\n if (downwardSweep) {\n nextLevelConnectedCells = this.getConnectedCellsOnLayer(cell, rankValue);\n }\n else {\n nextLevelConnectedCells = this.getConnectedCellsOnLayer(cell, rankValue, true);\n }\n var nextRankValue = void 0;\n downwardSweep ? nextRankValue = rankValue + 1 : nextRankValue = rankValue - 1;\n if (nextLevelConnectedCells != null && nextLevelConnectedCells.length !== 0) {\n sorterEntry.medianValue = this.medianValue(nextLevelConnectedCells, nextRankValue);\n medianValues.push(sorterEntry);\n }\n else {\n // Nodes with no adjacent vertices are flagged in the reserved array to \n //indicate they should be left in their current position.\n reservedPositions[this.getTempVariable(cell, rankValue)] = true;\n }\n }\n medianValues.sort(this.compare);\n // Set the new position of each node within the rank using its temp variable\n for (var i = 0; i < numCellsForRank; i++) {\n if (reservedPositions[i] == null) {\n var cell = medianValues.shift().cell;\n this.setTempVariable(cell, rankValue, i);\n }\n }\n };\n /**\n * compares two values, it sends the values to the compare function,\n * and sorts the values according to the returned (negative, zero, positive) value\n */\n CrossReduction.prototype.compare = function (a, b) {\n if (a != null && b != null) {\n if (b.medianValue > a.medianValue) {\n return -1;\n }\n else if (b.medianValue < a.medianValue) {\n return 1;\n }\n }\n return 0;\n };\n return CrossReduction;\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 { Component, Property, Complex, CollectionFactory, ChildProperty, Event } from '@syncfusion/ej2-base';\nimport { Browser, EventHandler, Draggable, Collection } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { Accordion } from '@syncfusion/ej2-navigations';\nimport { Node, Connector, Shape, Size, Transform } from '../diagram/index';\nimport { DiagramRenderer, StackPanel, Margin } from '../diagram/index';\nimport { TextElement, Canvas, BpmnShape } from '../diagram/index';\nimport { SvgRenderer } from '../diagram/rendering/svg-renderer';\nimport { parentsUntil, createSvgElement, createHtmlElement, createMeasureElements } from '../diagram/utility/dom-util';\nimport { scaleElement, arrangeChild, groupHasType } from '../diagram/utility/diagram-util';\nimport { getFunction } from '../diagram/utility/base-util';\nimport { getOuterBounds } from '../diagram/utility/connector';\nimport { Point } from '../diagram/primitives/point';\nimport { CanvasRenderer } from '../diagram/rendering/canvas-renderer';\nvar getObjectType = function (obj) {\n var conn = obj;\n if (conn.sourcePoint || conn.targetPoint || conn.sourceID || conn.targetID\n || conn.sourcePortID || conn.targetPortID || conn.sourceDecorator || conn.targetDecorator) {\n return Connector;\n }\n if (obj.shape && (obj.shape instanceof Shape || obj.shape.type)) {\n return Node;\n }\n return Node;\n};\n/**\n * A palette allows to display a group of related symbols and it textually annotates the group with its header.\n */\nvar Palette = /** @class */ (function (_super) {\n __extends(Palette, _super);\n function Palette() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Palette.prototype, \"id\", void 0);\n __decorate([\n Property()\n ], Palette.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], Palette.prototype, \"expanded\", void 0);\n __decorate([\n Property('')\n ], Palette.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], Palette.prototype, \"title\", void 0);\n __decorate([\n CollectionFactory(getObjectType)\n ], Palette.prototype, \"symbols\", void 0);\n return Palette;\n}(ChildProperty));\nexport { Palette };\n/**\n * customize the preview size and position of the individual palette items.\n */\nvar SymbolPreview = /** @class */ (function (_super) {\n __extends(SymbolPreview, _super);\n function SymbolPreview() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SymbolPreview.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], SymbolPreview.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Point)\n ], SymbolPreview.prototype, \"offset\", void 0);\n return SymbolPreview;\n}(ChildProperty));\nexport { SymbolPreview };\n/**\n * Represents the Symbol Palette Component.\n * ```html\n *
    \n * \n * ```\n */\n/**\n * The symbol palette control allows to predefine the frequently used nodes and connectors\n * and to drag and drop those nodes/connectors to drawing area\n */\nvar SymbolPalette = /** @class */ (function (_super) {\n __extends(SymbolPalette, _super);\n //region - protected methods \n /**\n * Constructor for creating the component\n * @hidden\n */\n function SymbolPalette(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.symbolTable = {};\n _this.childTable = {};\n _this.info = 'info';\n /**\n * helper method for draggable\n * @return {void}\n * @private\n */\n _this.helper = function (e) {\n var clonedElement;\n var id = e.sender.target.id.split('_container')[0];\n var symbol = _this.symbolTable[id];\n if (symbol && _this.selectedSymbol) {\n _this.selectedSymbols = _this.selectedSymbol.id === symbol.id ? symbol : _this.selectedSymbol;\n var position = _this.getMousePosition(e.sender);\n clonedElement = _this.getSymbolPreview(_this.selectedSymbols, e.sender, _this.element);\n clonedElement.setAttribute('paletteId', _this.element.id);\n }\n return clonedElement;\n };\n return _this;\n }\n /**\n * Refreshes the panel when the symbol palette properties are updated\n * @param newProp Defines the new values of the changed properties\n * @param oldProp Defines the old values of the changed properties\n */\n SymbolPalette.prototype.onPropertyChanged = function (newProp, oldProp) {\n var refresh = 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 this.element.style.width = this.width.toString();\n break;\n case 'height':\n this.element.style.height = this.height.toString();\n break;\n case 'symbolPreview':\n break;\n case 'symbolWidth':\n case 'symbolHeight':\n case 'getSymbolInfo':\n refresh = true;\n break;\n case 'enableSearch':\n if (newProp.enableSearch) {\n this.createTextbox();\n }\n else {\n var divElement = document.getElementById(this.element.id + '_search');\n if (divElement) {\n divElement.parentNode.removeChild(divElement);\n }\n }\n break;\n case 'palettes':\n for (var _b = 0, _c = Object.keys(newProp.palettes); _b < _c.length; _b++) {\n var i = _c[_b];\n var index = Number(i);\n if (!this.accordionElement.items[index]) {\n this.accordionElement.items[index] = {\n header: newProp.palettes[index].title || '',\n expanded: newProp.palettes[index].expanded,\n iconCss: newProp.palettes[index].iconCss || ''\n };\n }\n if (newProp.palettes[index].iconCss !== undefined) {\n this.accordionElement.items[index].iconCss = newProp.palettes[index].iconCss || '';\n refresh = true;\n }\n if (newProp.palettes[index].expanded !== undefined) {\n if (!this.palettes[index].isInteraction) {\n this.accordionElement.items[index].expanded = newProp.palettes[index].expanded;\n refresh = true;\n }\n else {\n this.palettes[index].isInteraction = false;\n }\n }\n }\n break;\n case 'enableAnimation':\n if (!this.enableAnimation) {\n this.accordionElement.animation = { expand: { duration: 0 }, collapse: { duration: 0 } };\n }\n else {\n this.accordionElement.animation = { expand: { duration: 400 }, collapse: { duration: 400 } };\n }\n break;\n case 'expandMode':\n this.accordionElement.expandMode = this.expandMode;\n refresh = true;\n break;\n }\n }\n if (refresh) {\n this.refreshPalettes();\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n SymbolPalette.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initialize nodes, connectors and renderer\n */\n SymbolPalette.prototype.preRender = function () {\n var _this = this;\n this.element.style.overflow = 'auto';\n this.element.style.height = this.height.toString();\n this.element.style.width = this.width.toString();\n if (this.enableSearch) {\n this.createTextbox();\n }\n //create accordion element\n var accordionDiv = createHtmlElement('div', { id: this.element.id + '_container' });\n this.accordionElement = new Accordion({\n expandMode: this.expandMode\n });\n if (!this.enableAnimation) {\n this.accordionElement.animation = { expand: { duration: 0 }, collapse: { duration: 0 } };\n }\n this.accordionElement.expanded = function (args) {\n var index = _this.accordionElement.items.indexOf(args.item);\n _this.palettes[index].expanded = args.isExpanded;\n _this.palettes[index].isInteraction = true;\n };\n this.element.appendChild(accordionDiv);\n createMeasureElements();\n this.unWireEvents();\n this.wireEvents();\n };\n /**\n * Renders nodes and connectors in the symbol palette\n */\n SymbolPalette.prototype.render = function () {\n this.diagramRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), false);\n this.svgRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), true);\n this.updatePalettes();\n this.accordionElement.appendTo('#' + this.element.id + '_container');\n };\n /**\n * To get Module name\n * @private\n */\n SymbolPalette.prototype.getModuleName = function () {\n return 'SymbolPalette';\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n SymbolPalette.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'Bpmn',\n args: []\n });\n return modules;\n };\n /**\n * To destroy the symbol palette\n * @return {void}\n */\n SymbolPalette.prototype.destroy = function () {\n if (this.allowDrag) {\n this.draggable.destroy();\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n var content = document.getElementById(this.element.id + '_container');\n if (content) {\n this.element.removeChild(content);\n var measureElemnt = 'measureElement';\n if (window[measureElemnt]) {\n window[measureElemnt].usageCount -= 1;\n if (window[measureElemnt].usageCount === 0) {\n window[measureElemnt].parentNode.removeChild(window[measureElemnt]);\n window[measureElemnt] = null;\n }\n }\n }\n content = document.getElementById(this.element.id + '_search');\n if (content) {\n content.parentNode.removeChild(content);\n }\n this.element.classList.remove('e-symbolpalette');\n }\n };\n //end region - protected methods\n //region - private methods to render symbols\n /**\n * Method to initialize the items in the symbols\n */\n SymbolPalette.prototype.initSymbols = function (symbolGroup) {\n var group = [];\n for (var _i = 0, _a = symbolGroup.symbols; _i < _a.length; _i++) {\n var symbol = _a[_i];\n if (symbol instanceof Node) {\n var getNodeDefaults = getFunction(this.getNodeDefaults);\n if (getNodeDefaults) {\n getNodeDefaults(symbol, this);\n }\n }\n else if (symbol instanceof Connector) {\n var getConnectorDefaults = getFunction(this.getConnectorDefaults);\n if (getConnectorDefaults) {\n getConnectorDefaults(symbol, this);\n }\n }\n this.symbolTable[symbol.id] = symbol;\n if (symbol instanceof Node && symbol.children) {\n group.push(symbol);\n }\n }\n for (var i = 0; i < group.length; i++) {\n var node = void 0;\n for (var j = 0; j < group[i].children.length; j++) {\n node = (this.symbolTable[group[i].children[j]]);\n if (node) {\n this.childTable[node.id] = node;\n node.parentId = group[i].id;\n }\n }\n }\n for (var _b = 0, _c = symbolGroup.symbols; _b < _c.length; _b++) {\n var symbol = _c[_b];\n if (!(symbol instanceof Node && symbol.children)) {\n this.prepareSymbol(symbol);\n }\n }\n for (var _d = 0, group_1 = group; _d < group_1.length; _d++) {\n var symbol = group_1[_d];\n this.prepareSymbol(symbol);\n }\n };\n /**\n * Method to create the palette\n */\n SymbolPalette.prototype.renderPalette = function (symbolGroup) {\n var style = 'display:none;overflow:auto;';\n if (symbolGroup.height) {\n style += 'height:' + symbolGroup.height + 'px';\n }\n var paletteDiv = createHtmlElement('div', { 'id': symbolGroup.id, style: style });\n this.element.appendChild(paletteDiv);\n var item = {\n header: symbolGroup.title, expanded: symbolGroup.expanded,\n content: '#' + symbolGroup.id, iconCss: symbolGroup.iconCss\n };\n this.accordionElement.items.push(item);\n this.renderSymbols(symbolGroup, paletteDiv);\n };\n /**\n * Used to add the palette item as nodes or connectors in palettes\n */\n SymbolPalette.prototype.addPaletteItem = function (paletteName, paletteSymbol) {\n var refresh;\n for (var i = 0; i < this.palettes.length; i++) {\n var symbolPaletteGroup = this.palettes[i];\n if (symbolPaletteGroup.id.indexOf(paletteName) !== -1) {\n // tslint:disable-next-line:no-any \n var param = [undefined, symbolPaletteGroup, 'symbols', {}, true];\n // tslint:disable-next-line:no-any \n var obj = new (Function.prototype.bind.apply(getObjectType(paletteSymbol), param));\n for (var i_1 = 0; i_1 < Object.keys(paletteSymbol).length; i_1++) {\n obj[Object.keys(paletteSymbol)[i_1]] = paletteSymbol[Object.keys(paletteSymbol)[i_1]];\n }\n symbolPaletteGroup.symbols.push(obj);\n if (!obj.children) {\n this.prepareSymbol(obj);\n }\n this.symbolTable[obj.id] = obj;\n var paletteDiv = document.getElementById(symbolPaletteGroup.id);\n paletteDiv.appendChild(this.getSymbolContainer(obj, paletteDiv));\n break;\n }\n }\n };\n /**\n * Used to remove the palette item as nodes or connectors in palettes\n */\n SymbolPalette.prototype.removePaletteItem = function (paletteName, symbolId) {\n var refresh;\n for (var i = 0; i < this.palettes.length; i++) {\n var symbolPaletteGroup = this.palettes[i];\n if (symbolPaletteGroup.id.indexOf(paletteName) !== -1) {\n for (var _i = 0, _a = symbolPaletteGroup.symbols; _i < _a.length; _i++) {\n var symbol = _a[_i];\n if (symbol.id.indexOf(symbolId) !== -1) {\n var index = symbolPaletteGroup.symbols.indexOf(symbol);\n symbolPaletteGroup.symbols.splice(index, 1);\n if (symbol.children) {\n var parentNode = symbol.children;\n for (var i_2 = 0; i_2 < parentNode.length; i_2++) {\n delete this.symbolTable[(parentNode[i_2])];\n }\n }\n delete this.symbolTable[symbol.id];\n var element = document.getElementById(symbol.id + '_container');\n element.parentNode.removeChild(element);\n refresh = true;\n break;\n }\n }\n }\n if (refresh) {\n break;\n }\n }\n };\n /**\n * Method to create the symbols in canvas\n */\n SymbolPalette.prototype.prepareSymbol = function (symbol) {\n var width;\n var sw;\n var height;\n var sh;\n var stackPanel = new StackPanel();\n var obj = symbol;\n var content;\n var symbolContainer = new Canvas();\n var container = (symbol instanceof Node) ? symbol.initContainer() : null;\n if (container && !container.children) {\n container.children = [];\n }\n //preparing objects\n var getSymbolTemplate = getFunction(this.getSymbolTemplate);\n if (getSymbolTemplate) {\n content = getSymbolTemplate(symbol);\n }\n if (!content) {\n if (obj.children) {\n content = this.getContainer(obj, container);\n }\n else {\n content = symbol.init(this);\n if (symbol instanceof Node && symbol.parentId) {\n container.children.push(content);\n }\n }\n }\n if (!symbol.parentId) {\n var symbolInfo = { width: this.symbolWidth, height: this.symbolHeight };\n var getSymbolInfo = getFunction(this.getSymbolInfo);\n if (getSymbolInfo) {\n symbolInfo = getSymbolInfo(symbol);\n }\n symbolInfo = symbolInfo || {};\n //defining custom templates\n content.relativeMode = 'Object';\n content.horizontalAlignment = content.verticalAlignment = 'Center';\n symbolContainer.style.strokeColor = symbolContainer.style.fill = 'none';\n symbolContainer.children = [content];\n content.measure(new Size());\n content.arrange(content.desiredSize);\n width = symbolInfo.width = symbolInfo.width ||\n (obj.width !== undefined ? content.actualSize.width : undefined) || this.symbolWidth;\n height = symbolInfo.height = symbolInfo.height ||\n (obj.height !== undefined ? content.actualSize.height : undefined) || this.symbolHeight;\n if (width !== undefined && height !== undefined) {\n var actualWidth = width;\n var actualHeight = height;\n if (this.symbolWidth !== undefined) {\n actualWidth = this.symbolWidth - this.symbolMargin.left - this.symbolMargin.right;\n }\n else {\n width += obj.style.strokeWidth;\n }\n if (this.symbolHeight !== undefined) {\n actualHeight = this.symbolHeight - this.symbolMargin.top - this.symbolMargin.bottom;\n }\n else {\n height += obj.style.strokeWidth;\n }\n if (symbolInfo.description && symbolInfo.description.text !== '') {\n actualHeight -= 20; // default height of the text have been reduced from the container.\n }\n sw = actualWidth / (content.width || width);\n sh = actualHeight / (content.height || height);\n if (symbolInfo.fit) {\n sw = actualWidth / symbolInfo.width;\n sh = actualHeight / symbolInfo.height;\n }\n width = actualWidth;\n height = actualHeight;\n sw = sh = Math.min(sw, sh);\n symbolContainer.width = width;\n symbolContainer.height = height;\n content.width = symbolInfo.width;\n content.height = symbolInfo.height;\n this.scaleSymbol(symbol, symbolContainer, sw, sh, width, height);\n }\n else {\n var outerBounds = void 0;\n if (symbol instanceof Connector) {\n outerBounds = getOuterBounds(symbol);\n }\n content.width = symbol.width || (outerBounds) ? outerBounds.width : content.actualSize.width;\n content.height = symbol.height || (outerBounds) ? outerBounds.height : content.actualSize.height;\n }\n symbol.wrapper = stackPanel;\n stackPanel.children = [symbolContainer];\n content.pivot = stackPanel.pivot = { x: 0, y: 0 };\n stackPanel.id = content.id + '_symbol';\n stackPanel.style.fill = stackPanel.style.strokeColor = 'transparent';\n stackPanel.offsetX = symbol.style.strokeWidth / 2;\n stackPanel.offsetY = symbol.style.strokeWidth / 2;\n //symbol description-textElement\n this.getSymbolDescription(symbolInfo, width, stackPanel);\n stackPanel.measure(new Size());\n stackPanel.arrange(stackPanel.desiredSize);\n symbolInfo.width = symbolInfo.width || content.actualSize.width;\n symbolInfo.height = symbolInfo.height || content.actualSize.height;\n symbol[this.info] = symbolInfo;\n }\n if (symbol.parentId) {\n container.measure(new Size(obj.width, obj.height));\n container.arrange(container.desiredSize);\n }\n };\n SymbolPalette.prototype.getContainer = function (obj, container) {\n container.measureChildren = false;\n var bounds;\n var child = obj.children;\n container.children = [];\n for (var i = 0; i < child.length; i++) {\n if (this.symbolTable[child[i]]) {\n container.children.push(this.symbolTable[child[i]].wrapper);\n }\n }\n container.measure(new Size(obj.width, obj.height));\n container.arrange(container.desiredSize);\n if (container.bounds.x !== 0 || container.bounds.y !== 0) {\n bounds = container.bounds;\n arrangeChild(obj, bounds.x, bounds.y, this.symbolTable, false, this);\n container = this.getContainer(obj, container);\n }\n return container;\n };\n /**\n * Method to get the symbol text description\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.getSymbolDescription = function (symbolInfo, width, parent) {\n if (symbolInfo && symbolInfo.description && symbolInfo.description.text) {\n var textElement = new TextElement();\n //symbol description-textElement\n symbolInfo.description.overflow = symbolInfo.description.overflow || 'Ellipsis';\n symbolInfo.description.wrap = symbolInfo.description.wrap || 'WrapWithOverflow';\n textElement.content = symbolInfo.description.text;\n textElement.width = width;\n textElement.height = 20;\n textElement.style.strokeColor = 'transparent';\n textElement.style.fill = 'transparent';\n textElement.style.strokeWidth = 0;\n textElement.style.textWrapping = symbolInfo.description.wrap;\n textElement.style.textOverflow = symbolInfo.description.overflow;\n textElement.margin = { left: 0, right: 0, top: 0, bottom: 5 };\n parent.children.push(textElement);\n }\n };\n /**\n * Method to renders the symbols\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.renderSymbols = function (symbolGroup, parentDiv) {\n for (var _i = 0, _a = symbolGroup.symbols; _i < _a.length; _i++) {\n var symbol = _a[_i];\n if (!symbol.parentId) {\n this.getSymbolContainer(symbol, parentDiv);\n }\n }\n };\n /**\n * Method to clone the symbol for previewing the symbols\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.getSymbolPreview = function (symbol, evt, parentDiv) {\n var canvas;\n var sw;\n var sh;\n var symbolPreviewWidth = symbol.wrapper.children[0].desiredSize.width + symbol.style.strokeWidth;\n var symbolPreviewHeight = symbol.wrapper.children[0].desiredSize.height + symbol.style.strokeWidth;\n var content = symbol.wrapper.children[0].children[0];\n if (this.symbolPreview.width !== undefined || this.symbolPreview.height !== undefined) {\n symbolPreviewWidth = (this.symbolPreview.width || symbolPreviewWidth) - symbol.style.strokeWidth;\n symbolPreviewHeight = (this.symbolPreview.height || symbolPreviewHeight) - symbol.style.strokeWidth;\n sw = symbolPreviewWidth / content.actualSize.width;\n sh = symbolPreviewHeight / content.actualSize.height;\n sw = sh = Math.min(sw, sh);\n var symbolWidth = content.actualSize.width * sw;\n var symbolHeight = content.actualSize.height * sh;\n symbol.wrapper.children[0].width = symbolPreviewWidth;\n symbol.wrapper.children[0].height = symbolPreviewHeight;\n this.measureAndArrangeSymbol(content, symbol instanceof Node);\n this.scaleSymbol(symbol, symbol.wrapper.children[0], sw, sh, symbolWidth, symbolHeight, true);\n symbolPreviewWidth = symbolWidth;\n symbolPreviewHeight = symbolHeight;\n }\n var prevPosition = { x: content.offsetX, y: content.offsetY };\n content.offsetX = content.offsetY = symbol.style.strokeWidth / 2;\n content.pivot = { x: 0, y: 0 };\n this.measureAndArrangeSymbol(content, symbol instanceof Node);\n var previewContainer = createHtmlElement('div', { 'draggable': 'true', 'class': 'e-dragclone', 'style': 'pointer-events:none' });\n var div;\n document.body.appendChild(previewContainer);\n var style = 'margin:5px;';\n if (symbol.shape.type === 'Native') {\n canvas = createSvgElement('svg', {\n id: symbol.id + '_preview',\n width: Math.ceil(symbolPreviewWidth) + 1,\n height: Math.ceil(symbolPreviewHeight) + 1\n });\n var gElement = createSvgElement('g', { id: symbol.id + '_g' });\n canvas.appendChild(gElement);\n previewContainer.appendChild(canvas);\n this.svgRenderer.renderElement(content, gElement, undefined, undefined, canvas);\n }\n else if (symbol.shape.type === 'HTML') {\n div = this.getHtmlSymbol(symbol, canvas, previewContainer, symbolPreviewHeight, symbolPreviewWidth, true);\n }\n else {\n if (symbol.children &&\n symbol.children.length > 0 && groupHasType(symbol, 'HTML', this.childTable)) {\n div = this.getGroupParent(symbol, canvas, previewContainer, symbol.wrapper.actualSize.height, symbol.wrapper.actualSize.width, true);\n }\n else {\n canvas = CanvasRenderer.createCanvas(symbol.id + '_preview', (Math.ceil(symbolPreviewWidth) + symbol.style.strokeWidth + 1) * 2, (Math.ceil(symbolPreviewHeight) + symbol.style.strokeWidth + 1) * 2);\n previewContainer.appendChild(canvas);\n style += 'transform:scale(0.5);';\n canvas.setAttribute('transform-origin', '0 0');\n var index = 2;\n if (symbol instanceof Connector) {\n index = 1.9;\n }\n canvas.getContext('2d').setTransform(index, 0, 0, index, 0, 0);\n this.diagramRenderer.renderElement(content, canvas, undefined);\n }\n }\n ((div && (symbol.shape.type === 'HTML' || symbol.children\n && symbol.children.length > 0)) ? div : canvas).setAttribute('style', style);\n content.offsetX = prevPosition.x;\n content.offsetY = prevPosition.y;\n return previewContainer;\n };\n SymbolPalette.prototype.measureAndArrangeSymbol = function (content, isNode) {\n if (content.children && !isNode) {\n content.children[0].transform = Transform.Self;\n }\n content.measure(new Size());\n content.arrange(content.desiredSize);\n if (content.children) {\n content.children[0].transform = Transform.Parent;\n }\n };\n SymbolPalette.prototype.updateSymbolSize = function (symbol, width, height) {\n var element = symbol.wrapper.children[0].children[0];\n var strokeWidth = symbol.style.strokeWidth;\n element.width = (width || element.width) - (strokeWidth + 1);\n element.height = (height || element.height) - (strokeWidth + 1);\n symbol.wrapper.measure(new Size());\n symbol.wrapper.arrange(symbol.wrapper.desiredSize);\n };\n /**\n * Method to create canvas and render the symbol\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.getSymbolContainer = function (symbol, parentDiv, preview) {\n var symbolInfo = this.symbolTable[symbol.id][this.info];\n var size = this.getSymbolSize(symbol, symbolInfo);\n var width = size.width + 1;\n var height = size.height + 1;\n var container = createHtmlElement('div', {\n id: symbol.id + '_container',\n style: 'width:' + width + 'px;height:' + height + 'px;float:left;overflow:hidden',\n title: symbolInfo.description ? symbolInfo.description.text : symbol.id\n });\n parentDiv.appendChild(container);\n var canvas;\n var gElement;\n var div;\n if (symbol.shape.type === 'Native') {\n canvas = createSvgElement('svg', {\n id: symbol.id,\n width: Math.ceil(symbol.wrapper.actualSize.width) + 1,\n height: Math.ceil(symbol.wrapper.actualSize.height) + 1\n });\n gElement = createSvgElement('g', { id: symbol.id + '_g' });\n canvas.appendChild(gElement);\n container.appendChild(canvas);\n this.updateSymbolSize(symbol);\n this.svgRenderer.renderElement(symbol.wrapper, gElement, undefined, undefined, canvas);\n }\n else if (symbol.shape.type === 'HTML') {\n div = this.getHtmlSymbol(symbol, canvas, container, symbol.wrapper.actualSize.height, symbol.wrapper.actualSize.width, false);\n }\n else {\n if (symbol.children &&\n symbol.children.length > 0 && groupHasType(symbol, 'HTML', this.childTable)) {\n div = this.getGroupParent(symbol, canvas, container, symbol.wrapper.actualSize.height, symbol.wrapper.actualSize.width, false);\n }\n else {\n canvas = CanvasRenderer.createCanvas(symbol.id, Math.ceil((symbol.wrapper.actualSize.width + symbol.style.strokeWidth) * 2) + 1, Math.ceil((symbol.wrapper.actualSize.height + symbol.style.strokeWidth) * 2) + 1);\n container.appendChild(canvas);\n var index = 2;\n if (symbol instanceof Connector) {\n index = 1.9;\n }\n canvas.getContext('2d').setTransform(index, 0, 0, index, 0, 0);\n this.diagramRenderer.renderElement(symbol.wrapper, gElement || canvas, undefined, undefined, undefined, undefined, true);\n }\n }\n if (!preview) {\n var actualWidth = symbol.wrapper.actualSize.width + symbol.style.strokeWidth;\n var actualHeight = symbol.wrapper.actualSize.height + symbol.style.strokeWidth;\n var style = 'margin-left:' +\n Math.max(this.symbolMargin.left, ((width - actualWidth) / 2))\n + 'px;margin-top:' + Math.max(this.symbolMargin.top, ((height - actualHeight) / 2))\n + 'px;pointer-events:none;transform-origin:0 0;overflow:hidden;';\n if (canvas instanceof HTMLCanvasElement) {\n style += 'transform:scale(.5,.5);';\n }\n ((div && (symbol.shape.type === 'HTML' || symbol.children &&\n symbol.children.length > 0)) ? div : canvas).setAttribute('style', style);\n container.classList.add('e-symbol-draggable');\n return container;\n }\n return canvas;\n };\n SymbolPalette.prototype.getGroupParent = function (item, canvas, container, height, width, isPreview) {\n var div = createHtmlElement('div', { 'id': item.id + (isPreview ? '_html_div_preview' : '_html_div') });\n var htmlLayer = createHtmlElement('div', {\n 'id': item.id + (isPreview ? '_htmlLayer_preview' : '_htmlLayer'),\n 'style': 'width:' + Math.ceil(width + 1) + 'px;' +\n 'height:' + Math.ceil(height + 1) + 'px;position:absolute',\n 'class': 'e-html-layer'\n });\n var htmlLayerDiv = createHtmlElement('div', {\n 'id': item.id + (isPreview ? '_htmlLayer_div_preview' : '_htmlLayer_div'),\n 'style': 'width:' + Math.ceil(width + 1) + 'px;' +\n 'height:' + Math.ceil(height + 1) + 'px;position:absolute',\n });\n htmlLayer.appendChild(htmlLayerDiv);\n div.appendChild(htmlLayer);\n canvas = CanvasRenderer.createCanvas((isPreview ? (item.id + '_preview') : item.id), Math.ceil(width) + 1, Math.ceil(height) + 1);\n div.appendChild(canvas);\n container.appendChild(div);\n this.diagramRenderer.renderElement(item.wrapper.children[0].children[0], canvas, htmlLayer);\n return div;\n };\n SymbolPalette.prototype.getHtmlSymbol = function (symbol, canvas, container, height, width, isPreview) {\n var div = createHtmlElement('div', {\n 'id': symbol.id + (isPreview ? '_html_div_preview' : '_html_div')\n });\n var htmlLayer = createHtmlElement('div', {\n 'id': symbol.id + (isPreview ? '_htmlLayer_preview' : '_htmlLayer'),\n 'style': 'width:' + Math.ceil(width + 1) + 'px;' +\n 'height:' + Math.ceil(height + 1) + 'px;position:absolute',\n 'class': 'e-html-layer'\n });\n var htmlLayerDiv = createHtmlElement('div', {\n 'id': symbol.id + (isPreview ? '_htmlLayer_div_preview' : '_htmlLayer_div'),\n 'style': 'width:' + Math.ceil(width + 1) + 'px;' +\n 'height:' + Math.ceil(height + 1) + 'px;position:absolute',\n });\n htmlLayer.appendChild(htmlLayerDiv);\n div.appendChild(htmlLayer);\n canvas = CanvasRenderer.createCanvas(symbol.id, Math.ceil((symbol.wrapper.actualSize.width + symbol.style.strokeWidth) * 2) + 1, Math.ceil((symbol.wrapper.actualSize.height + symbol.style.strokeWidth) * 2) + 1);\n container.appendChild(canvas);\n canvas.getContext('2d').setTransform(2, 0, 0, 2, 0, 0);\n div.appendChild(canvas);\n container.appendChild(div);\n this.diagramRenderer.renderElement(symbol.wrapper.children[0].children[0], canvas, htmlLayer);\n return div;\n };\n SymbolPalette.prototype.getSymbolSize = function (symbol, symbolInfo) {\n var width = symbol.wrapper.actualSize.width;\n var height = symbol.wrapper.actualSize.height;\n if (!this.symbolWidth && !this.symbolHeight) {\n width += this.symbolMargin.left + this.symbolMargin.right + symbol.style.strokeWidth;\n height += this.symbolMargin.top + this.symbolMargin.bottom + symbol.style.strokeWidth;\n }\n else {\n width = this.symbolWidth;\n height = Math.max(this.symbolHeight, height);\n }\n return new Size(width, height);\n };\n //end region - rendering symbols\n //region event handlers\n SymbolPalette.prototype.getMousePosition = function (e) {\n var offsetY;\n var offsetX;\n var touchArg;\n if (e.type.indexOf('touch') !== -1) {\n touchArg = e;\n var pageY = touchArg.changedTouches[0].clientY;\n var pageX = touchArg.changedTouches[0].clientX;\n offsetY = pageY - this.element.offsetTop;\n offsetX = pageX - this.element.offsetLeft;\n }\n else {\n offsetY = e.clientY - this.element.offsetTop;\n offsetX = e.clientX - this.element.offsetLeft;\n }\n return { x: offsetX, y: offsetY };\n };\n SymbolPalette.prototype.mouseMove = function (e, touches) {\n if (this.highlightedSymbol && (!this.selectedSymbol\n || this.selectedSymbol.id + '_container' !== this.highlightedSymbol.id)) {\n this.highlightedSymbol.classList.remove('e-symbol-hover');\n this.highlightedSymbol.style.backgroundColor = '';\n this.highlightedSymbol = null;\n }\n var id = e.target.id.split('_container')[0];\n if (this.symbolTable[id]) {\n var container = document.getElementById(id + '_container');\n container.classList.add('e-symbol-hover');\n this.highlightedSymbol = container;\n }\n e.preventDefault();\n };\n SymbolPalette.prototype.mouseUp = function (evt) {\n if (evt && evt.target) {\n if (evt.srcElement.id === 'iconSearch') {\n var element = document.getElementById('iconSearch');\n if (element.classList.contains('e-clear-searchtext')) {\n element.className = 'e-input-group-icon e-search e-icons';\n document.getElementById('textEnter').value = '';\n this.searchPalette('');\n }\n }\n else {\n var id = evt.target.id.split('_container')[0];\n if (id && this.selectedSymbol) {\n var args = { oldValue: this.selectedSymbol.id, newValue: id };\n var event_1 = 'paletteSelectionChange';\n this.trigger(event_1, args);\n evt.preventDefault();\n }\n }\n }\n };\n SymbolPalette.prototype.keyUp = function (evt) {\n var _this = this;\n if (this.enableSearch) {\n var palette_1 = this;\n var element = document.getElementById('iconSearch');\n element.className = 'e-input-group-icon e-clear-searchtext e-icons';\n if (evt && (evt.key === 'Enter' || evt.keyCode === 13)) {\n if (evt.target instanceof HTMLInputElement) {\n this.searchPalette(evt.target.value);\n }\n }\n else {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(function () {\n if (evt.target instanceof HTMLInputElement) {\n palette_1.searchPalette(evt.target.value);\n _this.timer = null;\n }\n }, 500);\n }\n }\n };\n SymbolPalette.prototype.mouseDown = function (evt) {\n var id = evt.target.id.split('_container')[0];\n if (this.selectedSymbol) {\n var oldSymbol = document.getElementById(this.selectedSymbol.id + '_container');\n if (id !== this.selectedSymbol.id && oldSymbol) {\n oldSymbol.classList.remove('e-symbol-selected');\n }\n var container = document.getElementById(this.selectedSymbol.id + '_container');\n if (container) {\n container.style.backgroundColor = '';\n }\n this.selectedSymbol = null;\n }\n if (this.symbolTable[id]) {\n var container = document.getElementById(id + '_container');\n container.classList.add('e-symbol-selected');\n this.selectedSymbol = this.symbolTable[id];\n evt.preventDefault();\n }\n };\n //end region - event handlers\n // region - draggable\n SymbolPalette.prototype.initDraggable = function () {\n if (this.allowDrag) {\n var drag = void 0;\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-symbol-draggable',\n helper: this.helper,\n dragStart: this.dragStart,\n dragStop: this.dragStop,\n drag: function (args) {\n var target = 'target';\n var parent = parentsUntil(args[target], 'e-droppable');\n if (parent && parent.classList.contains('e-diagram')) {\n var e2eInstance = 'ej2_instances';\n parent[e2eInstance][0].droppable.over(args);\n }\n },\n cursorAt: { left: this.symbolPreview.offset.x, top: this.symbolPreview.offset.y }\n });\n }\n };\n SymbolPalette.prototype.dragStart = function (e) {\n var element = this.helper[0];\n if (element) {\n element.setAttribute('paletteId', this.element.id);\n }\n };\n SymbolPalette.prototype.dragStop = function (e) {\n if (!parentsUntil(e.target, 'e-diagram')) {\n remove(e.helper);\n }\n };\n //end region - draggable \n //region - helper methods\n SymbolPalette.prototype.scaleSymbol = function (symbol, symbolContainer, sw, sh, width, height, preview) {\n if (symbol instanceof Connector) {\n var wrapper = symbol.wrapper;\n symbol.wrapper = symbolContainer.children[0];\n var point = symbol.scale(sw, sh, width, height, symbolContainer.children[0]);\n var difX = width / 2 - symbolContainer.children[0].children[0].offsetX + point.x / 2;\n var difY = height / 2 - symbolContainer.children[0].children[0].offsetY + point.y / 2;\n for (var _i = 0, _a = symbolContainer.children[0].children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.offsetX += difX;\n child.offsetY += difY;\n child.staticSize = false;\n }\n symbol.wrapper = wrapper;\n }\n else if (symbol.shape instanceof BpmnShape && this.bpmnModule) {\n var wrapper = symbol.wrapper;\n symbol.wrapper = symbolContainer;\n symbolContainer.children[0].width = width;\n symbolContainer.children[0].height = height;\n this.bpmnModule.updateBPMN({ width: width, height: height }, symbol, symbol, null);\n symbol.wrapper = wrapper;\n }\n else {\n if (symbol.children) {\n var parentNode = symbol.children;\n var w = 0;\n var h = 0;\n if (!preview) {\n var node = void 0;\n var container = void 0;\n for (var i = 0; i < parentNode.length; i++) {\n container = symbolContainer.children[0].children[i];\n if (container) {\n if (container.children[0].children) {\n this.measureChild(container);\n }\n node = this.symbolTable[container.id];\n container.width = node.width;\n container.height = node.height;\n container.measure(new Size());\n container.arrange(container.children[0].desiredSize);\n }\n }\n }\n w = width / symbolContainer.children[0].desiredSize.width;\n h = height / symbolContainer.children[0].desiredSize.height;\n symbolContainer.children[0].measure(new Size());\n symbolContainer.children[0].arrange(symbolContainer.children[0].desiredSize);\n if (!preview) {\n var children = void 0;\n for (var i = 0; i < parentNode.length; i++) {\n children = symbolContainer.children[0].children[i];\n if (children) {\n if (children.children[0].children) {\n this.scaleChildren(children, w, h, symbol);\n }\n this.scaleGroup(children, w, h, symbol);\n }\n }\n }\n if (preview) {\n var node = void 0;\n var scaleWidth = void 0;\n var scaleHeight = void 0;\n var children = void 0;\n for (var i = 0; i < parentNode.length; i++) {\n node = this.symbolTable[parentNode[i]];\n scaleWidth = width / symbol.wrapper.children[0].desiredSize.width;\n scaleHeight = height / symbol.wrapper.children[0].desiredSize.height;\n children = symbolContainer.children[0].children[i];\n if (children) {\n if (children.children[0].children) {\n this.scaleChildren(children, scaleWidth, scaleHeight, symbol, true);\n }\n this.scaleGroup(children, scaleWidth, scaleHeight, symbol, true);\n }\n }\n symbol.wrapper.children[0].measure(new Size());\n symbol.wrapper.children[0].arrange(symbol.wrapper.children[0].desiredSize);\n }\n }\n else {\n scaleElement(symbolContainer.children[0], sw, sh, symbolContainer);\n }\n }\n };\n SymbolPalette.prototype.scaleChildren = function (container, w, h, symbol, preview) {\n var child;\n for (var i = 0; i < container.children.length; i++) {\n child = container.children[i];\n if (!child.children[0].children) {\n this.scaleGroup(child, w, h, symbol, preview);\n }\n else {\n this.scaleChildren(child, w, h, symbol, preview);\n }\n }\n };\n SymbolPalette.prototype.measureChild = function (container) {\n var childContainer;\n var node;\n for (var i = 0; i < container.children.length; i++) {\n childContainer = container.children[i];\n if (!childContainer.children[0].children) {\n node = this.symbolTable[childContainer.id];\n childContainer.width = node.width;\n childContainer.height = node.height;\n childContainer.measure(new Size());\n childContainer.arrange(childContainer.children[0].desiredSize);\n }\n else {\n this.measureChild(childContainer);\n }\n }\n };\n SymbolPalette.prototype.scaleGroup = function (child, w, h, symbol, preview) {\n child.width = child.width * w;\n child.height = (child.height * h);\n child.offsetX = preview ? (child.offsetX * w) - symbol.style.strokeWidth : (child.offsetX * w) + symbol.style.strokeWidth / 2;\n child.offsetY = preview ? (child.offsetY * h) - symbol.style.strokeWidth : (child.offsetY * h) + symbol.style.strokeWidth / 2;\n child.measure(new Size());\n child.arrange(child.children[0].desiredSize);\n };\n SymbolPalette.prototype.refreshPalettes = function () {\n this.accordionElement.items = [];\n this.updatePalettes();\n this.accordionElement.dataBind();\n };\n SymbolPalette.prototype.updatePalettes = function () {\n for (var i = 0; i < this.palettes.length; i++) {\n var symGroup = this.palettes[i];\n this.initSymbols(symGroup);\n this.renderPalette(symGroup);\n }\n };\n SymbolPalette.prototype.createTextbox = function () {\n var searchDiv = createHtmlElement('div', { id: this.element.id + '_search' });\n searchDiv.setAttribute('style', 'backgroundColor:white;height:30px');\n searchDiv.className = 'e-input-group';\n this.element.appendChild(searchDiv);\n var textBox = createHtmlElement('input', {});\n textBox.placeholder = 'Search Shapes';\n textBox.id = 'textEnter';\n textBox.setAttribute('style', 'width:100%;height:auto');\n textBox.className = 'e-input';\n searchDiv.appendChild(textBox);\n var span = createHtmlElement('span', { id: 'iconSearch', className: 'e-input-group-icon e-search e-icons' });\n searchDiv.appendChild(span);\n };\n SymbolPalette.prototype.searchPalette = function (value) {\n var symbolGroup = [];\n var element = document.getElementById('SearchPalette');\n var paletteDiv;\n //remove the existing child in palette\n if (element) {\n for (var k = element.children.length - 1; k >= 0; k--) {\n element.removeChild(element.children[k]);\n }\n }\n //add the searched item in array collection\n for (var i = 0; i < this.palettes.length; i++) {\n var symbolPaletteGroup = this.palettes[i];\n for (var j = 0; j < symbolPaletteGroup.symbols.length; j++) {\n var item = symbolPaletteGroup.symbols[j];\n if (value !== '' && item.id.toLowerCase().indexOf(value.toLowerCase()) !== -1) {\n symbolGroup.push(item);\n }\n }\n }\n var filterSymbols = getFunction(this.filterSymbols);\n if (filterSymbols) {\n symbolGroup = filterSymbols(symbolGroup) || [];\n }\n //create a palette collection\n if (!element) {\n paletteDiv = this.createSearchPalette(paletteDiv);\n element = paletteDiv;\n }\n //add the symbols into search palette\n if (symbolGroup.length > 0) {\n for (var _i = 0, symbolGroup_1 = symbolGroup; _i < symbolGroup_1.length; _i++) {\n var symbol = symbolGroup_1[_i];\n this.getSymbolContainer(symbol, element);\n }\n }\n else if (value !== '') {\n var emptyDiv = createHtmlElement('div', { 'id': 'EmptyDiv', 'style': 'text-align:center;font-style:italic' });\n emptyDiv.innerHTML = 'No Items To Display';\n element.appendChild(emptyDiv);\n }\n else {\n var element_1 = document.getElementById('iconSearch');\n element_1.className = 'e-input-group-icon e-search e-icons';\n this.accordionElement.removeItem(0);\n }\n };\n SymbolPalette.prototype.createSearchPalette = function (paletteDiv) {\n paletteDiv = createHtmlElement('div', { 'id': 'SearchPalette', 'style': 'display:none;overflow:auto;' });\n this.element.appendChild(paletteDiv);\n var paletteCollection = {\n header: 'Search Results', expanded: true,\n content: '#SearchPalette',\n };\n this.accordionElement.addItem(paletteCollection, 0);\n return paletteDiv;\n };\n /**\n * Method to bind events for the symbol palette\n */\n SymbolPalette.prototype.wireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var stopEvent = Browser.touchEndEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = 'mouseleave';\n var keyEvent = 'keyup';\n EventHandler.add(this.element, startEvent, this.mouseDown, this);\n EventHandler.add(this.element, moveEvent, this.mouseMove, this);\n EventHandler.add(this.element, stopEvent, this.mouseUp, this);\n EventHandler.add(this.element, keyEvent, this.keyUp, this);\n // initialize the draggable component\n this.initDraggable();\n };\n /**\n * Method to unbind events for the symbol palette\n */\n SymbolPalette.prototype.unWireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var stopEvent = Browser.touchEndEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var keyEvent = 'keyup';\n EventHandler.remove(this.element, startEvent, this.mouseDown);\n EventHandler.remove(this.element, moveEvent, this.mouseMove);\n EventHandler.remove(this.element, stopEvent, this.mouseUp);\n EventHandler.remove(this.element, keyEvent, this.keyUp);\n };\n __decorate([\n Property('S')\n ], SymbolPalette.prototype, \"accessKey\", void 0);\n __decorate([\n Property('100%')\n ], SymbolPalette.prototype, \"width\", void 0);\n __decorate([\n Property('100%')\n ], SymbolPalette.prototype, \"height\", void 0);\n __decorate([\n Collection([], Palette)\n ], SymbolPalette.prototype, \"palettes\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getSymbolInfo\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"filterSymbols\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getSymbolTemplate\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"symbolWidth\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"symbolHeight\", void 0);\n __decorate([\n Complex({ left: 10, right: 10, top: 10, bottom: 10 }, Margin)\n ], SymbolPalette.prototype, \"symbolMargin\", void 0);\n __decorate([\n Property(true)\n ], SymbolPalette.prototype, \"allowDrag\", void 0);\n __decorate([\n Complex({}, SymbolPreview)\n ], SymbolPalette.prototype, \"symbolPreview\", void 0);\n __decorate([\n Property(false)\n ], SymbolPalette.prototype, \"enableSearch\", void 0);\n __decorate([\n Property(true)\n ], SymbolPalette.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Multiple')\n ], SymbolPalette.prototype, \"expandMode\", void 0);\n __decorate([\n Event()\n ], SymbolPalette.prototype, \"paletteSelectionChange\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getNodeDefaults\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getConnectorDefaults\", void 0);\n return SymbolPalette;\n}(Component));\nexport { SymbolPalette };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { DiagramRenderer } from '../diagram/rendering/renderer';\nimport { CanvasRenderer } from '../diagram/rendering/canvas-renderer';\nimport { Component, Property, Browser, EventHandler, Event } from '@syncfusion/ej2-base';\nimport { setAttributeHtml, setAttributeSvg, createHtmlElement } from '../diagram/utility/dom-util';\nimport { createSvgElement, getNativeLayer, hasClass } from '../diagram/utility/dom-util';\nimport { Rect } from '../diagram/primitives/rect';\nimport { Size } from '../diagram/primitives/size';\nimport { SvgRenderer } from '../diagram/rendering/svg-renderer';\n/**\n * Overview control allows you to see a preview or an overall view of the entire content of a Diagram.\n * This helps you to look at the overall picture of a large Diagram\n * To navigate, pan, or zoom, on a particular position of the page.\n * ```html\n *
    \n *
    \n * ```\n * ```typescript\n * let overview: Overview;\n * let diagram: Diagram = new Diagram({\n * width:'1000px', height:'500px' });\n * diagram.appendTo('#diagram');\n * let options: OverviewModel = {};\n * options.sourceID = 'diagram';\n * options.width = '250px';\n * options.height = '500px';\n * overview = new Overview(options);\n * overview.appendTo('#overview');\n * ```\n */\nvar Overview = /** @class */ (function (_super) {\n __extends(Overview, _super);\n function Overview(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.mode = 'Canvas';\n /** @private */\n _this.id = 'overview';\n _this.actionName = '';\n _this.startPoint = null;\n _this.currentPoint = null;\n _this.prevPoint = null;\n _this.scale = null;\n _this.inAction = false;\n _this.viewPortRatio = 1;\n _this.horizontalOffset = 0;\n _this.verticalOffset = 0;\n _this.model = {};\n _this.event = true;\n _this.model = { width: _this.width, height: _this.height };\n return _this;\n }\n /**\n * Updates the overview control when the objects are changed\n * @param newProp Lists the new values of the changed properties\n * @param oldProp Lists the old values of the changed properties\n */\n Overview.prototype.onPropertyChanged = function (newProp, oldProp) {\n var objectArray = [];\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'sourceID':\n this.setParent(newProp.sourceID);\n break;\n case 'width':\n case 'height':\n this.renderCanvas();\n this.setParent(this.sourceID);\n break;\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n Overview.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initialize nodes, connectors and renderer\n */\n Overview.prototype.preRender = function () {\n this.element.style.background = 'transparent';\n this.unWireEvents();\n this.wireEvents();\n };\n Overview.prototype.render = function () {\n this.diagramRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), false);\n this.renderCanvas();\n this.setParent(this.sourceID);\n };\n Overview.prototype.getSizeValue = function (real) {\n var text;\n if (real.toString().indexOf('px') > 0 || real.toString().indexOf('%') > 0) {\n text = real.toString();\n }\n else {\n text = real.toString() + 'px';\n }\n return text;\n };\n Overview.prototype.renderCanvas = function (options) {\n var canvas = document.getElementById(this.element.id + '_canvas');\n if (!canvas) {\n canvas = createHtmlElement('div', {});\n this.element.appendChild(canvas);\n }\n var attribute = {\n 'id': this.element.id + '_canvas', 'class': 'drawing',\n 'style': 'position:relative; height:' + this.getSizeValue(this.model.height) + '; width:' +\n this.getSizeValue(this.model.width) +\n ';style:-ms-touch-action: none;touch-action: none;'\n };\n setAttributeHtml(canvas, attribute);\n this.element.setAttribute('tabindex', String(0));\n this.element.style.overflow = 'hidden';\n this.element.style.height = String(this.model.height);\n this.element.style.width = String(this.model.width);\n this.canvas = canvas;\n };\n Overview.prototype.setParent = function (id) {\n var element = document.getElementById(id);\n var instance = 'ej2_instances';\n if (this.parent) {\n var oldparent = this.parent;\n this.parent = null;\n oldparent.setOverview(null, this.element.id);\n this.removeDocument(this);\n }\n this.parent = this.getDiagram(element, instance);\n if (this.parent) {\n this.parent.setOverview(this);\n }\n };\n Overview.prototype.getDiagram = function (element, instance) {\n var diagram;\n var n = element[instance].length;\n for (var i = 0; i < n; i++) {\n if (hasClass(element[instance][i].element, 'e-diagram')) {\n diagram = element[instance][i];\n break;\n }\n }\n return diagram;\n };\n Overview.prototype.unWireEvents = function () {\n var start = Browser.touchStartEvent;\n var move = Browser.touchMoveEvent;\n var evnt;\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n var stop = Browser.touchEndEvent;\n EventHandler.remove(this.element, start, this.mouseDown);\n EventHandler.remove(this.element, move, this.mouseMove);\n EventHandler.remove(this.element, stop, this.mouseUp);\n EventHandler.remove(this.element, cancel, this.documentMouseUp);\n EventHandler.remove(window, 'resize', this.windowResize);\n var container = document.getElementById(this.sourceID + 'content');\n if (container) {\n EventHandler.remove(container, 'scroll', this.scrolled);\n }\n };\n Overview.prototype.wireEvents = function () {\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n EventHandler.add(this.element, start, this.mouseDown, this);\n EventHandler.add(this.element, move, this.mouseMove, this);\n EventHandler.add(this.element, stop, this.mouseUp, this);\n EventHandler.add(this.element, cancel, this.documentMouseUp, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n var container = document.getElementById(this.sourceID + 'content');\n if (container) {\n EventHandler.add(container, 'scroll', this.scrolled, this);\n }\n };\n /**\n * @private\n */\n /**\n * @private\n */\n Overview.prototype.renderDocument = function (view) {\n view.canvas = this.canvas;\n var g = document.getElementById(this.canvas.id + '_svg');\n if (g) {\n g.parentNode.removeChild(g);\n }\n var attr = {\n id: this.canvas.id + '_svg',\n version: '1.1',\n xlink: 'http://www.w3.org/1999/xlink',\n 'class': 'overview_svg'\n };\n var svg = createSvgElement('svg', attr);\n this.svg = svg;\n view.svg = svg;\n view.canvas.appendChild(svg);\n var ovw = document.getElementById(this.element.id);\n var element = ovw;\n var eWidth = element.clientWidth;\n var eHeight = element.clientHeight;\n var bRect = element.getBoundingClientRect();\n // Check for the window resize\n var screenX = (window.screenX < 0) ? window.screenX * -1 : window.screenX;\n var screenY = (window.screenY < 0) ? window.screenY * -1 : window.screenY;\n if (eWidth === 0) {\n eWidth = Math.floor(((window.innerWidth - screenX) - Math.floor(bRect.left)));\n }\n if (eHeight === 0) {\n eHeight = Math.floor(((window.innerHeight - screenY) - Math.floor(bRect.top)));\n }\n svg.setAttribute('width', String(eWidth));\n svg.setAttribute('height', String(eHeight));\n this.model.width = eWidth;\n this.model.height = eHeight;\n var attributes;\n if (!view.diagramLayerDiv) {\n view.diagramLayerDiv = createHtmlElement('div', {});\n var container = document.getElementById(this.element.id);\n view.diagramLayer = CanvasRenderer.createCanvas(this.element.id + '_diagramLayer', this.model.width, this.model.height);\n view.diagramLayer.setAttribute('style', 'position:absolute; left:0px; top:0px ');\n view.diagramLayerDiv.appendChild(view.diagramLayer);\n view.canvas.appendChild(view.diagramLayerDiv);\n }\n attributes = {\n 'id': this.element.id + '_diagramLayer_div',\n 'style': 'width:' + this.model.width + 'px; height:' + this.model.height + 'px;position:absolute;top:0px;left:0px'\n };\n setAttributeHtml(view.diagramLayerDiv, attributes);\n this.renderHtmlLayer(view.canvas);\n this.renderNativeLayer(view.canvas, view);\n this.addOverviewRectPanel(view);\n };\n /** @private */\n Overview.prototype.removeDocument = function (view) {\n var svg = document.getElementById(this.canvas.id + '_svg');\n this.canvas.removeChild(svg);\n var htmlLayer = document.getElementById(this.element.id + '_htmlLayer');\n this.canvas.removeChild(htmlLayer);\n var diagramLayer = document.getElementById(this.element.id + '_diagramLayer_div');\n this.canvas.removeChild(diagramLayer);\n view.diagramLayerDiv = null;\n view.diagramLayer = null;\n };\n Overview.prototype.renderHtmlLayer = function (canvas) {\n var htmlLayer = createHtmlElement('div', {\n 'id': this.element.id + '_htmlLayer', 'class': 'e-html-layer',\n 'style': 'pointer-events:none;position:absolute;top:0px;left:0px;'\n });\n var options = {\n 'id': this.element.id + '_htmlLayer_div',\n 'style': 'position:absolute;top:0px;left:0px;'\n };\n var htmlDiv = createHtmlElement('div', options);\n htmlLayer.appendChild(htmlDiv);\n canvas.appendChild(htmlLayer);\n return htmlLayer;\n };\n Overview.prototype.renderNativeLayer = function (canvas, view) {\n var nativeLayerSvg = this.parent.createSvg(this.element.id + '_nativeLayer_svg', this.model.width, this.model.height);\n var nativeLayer = createSvgElement('g', { 'id': this.element.id + '_nativeLayer' });\n nativeLayerSvg.appendChild(nativeLayer);\n view.diagramLayerDiv.appendChild(nativeLayerSvg);\n setAttributeSvg(nativeLayerSvg, { 'class': 'e-native-layer' });\n };\n Overview.prototype.addOverviewRectPanel = function (view) {\n var svg = document.getElementById(this.canvas.id + '_overviewsvg');\n if (svg) {\n svg.parentNode.removeChild(svg);\n }\n var attr = ({\n id: this.canvas.id + '_overviewsvg',\n version: '1.1',\n xlink: 'http://www.w3.org/1999/xlink',\n 'style': 'position:absolute;left:0px;top:0px; aria-label:Specifies overview',\n width: this.model.width,\n height: this.model.height\n });\n svg = createSvgElement('svg', attr);\n view.canvas.appendChild(svg);\n var ovw = createSvgElement('g', { 'id': this.element.id + '_overviewlayer', 'style': 'pointer-events:none' });\n svg.appendChild(ovw);\n var rect = createSvgElement('rect', {\n 'fill': 'transparent', 'width': '100%', 'height': '100%', 'class': 'overviewbackrect',\n 'id': this.canvas.id + 'overviewbackrect'\n });\n rect.setAttribute('style', ' pointer-events: none; ');\n ovw.appendChild(rect);\n var svgDocument = (ovw);\n var g = createSvgElement('g', { 'id': this.canvas.id + 'overviewhandle', 'style': 'pointer-events:all' });\n ovw.appendChild(g);\n var innerrect = createSvgElement('rect', { 'id': this.canvas.id + 'overviewrect', 'fill': 'transparent' });\n g.appendChild(innerrect);\n this.renderOverviewCorner('left', g);\n this.renderOverviewCorner('right', g);\n this.renderOverviewCorner('top', g);\n this.renderOverviewCorner('bottom', g);\n this.renderOverviewCorner('topleft', g);\n this.renderOverviewCorner('topright', g);\n this.renderOverviewCorner('bottomleft', g);\n this.renderOverviewCorner('bottomright', g);\n };\n Overview.prototype.renderOverviewCorner = function (name, parent) {\n var svg = this.svg;\n var shape;\n if (name === 'top' || name === 'bottom' || name === 'right' || name === 'left') {\n shape = 'rect';\n }\n else {\n shape = 'circle';\n }\n var innerrect = createSvgElement(shape, { 'id': this.canvas.id + 'visible' + name });\n parent.appendChild(innerrect);\n var transrect = createSvgElement(shape, {\n 'id': this.canvas.id + name, 'class': 'overviewresizer', 'fill': 'transparent'\n });\n parent.appendChild(transrect);\n };\n Overview.prototype.updateOverviewRectangle = function () {\n var difx = this.currentPoint.x - this.prevPoint.x;\n var dify = this.currentPoint.y - this.prevPoint.y;\n var size = new Size();\n size.width = 0;\n size.height = 0;\n var x = 0;\n var y = 0;\n var w;\n var h;\n switch (this.resizeDirection) {\n case 'left':\n size.width -= difx;\n size.height -= difx / this.viewPortRatio;\n x = difx;\n y = difx / this.viewPortRatio;\n y /= 2;\n break;\n case 'right':\n size.width += difx;\n size.height += difx / this.viewPortRatio;\n y = difx / this.viewPortRatio;\n y /= -2;\n break;\n case 'top':\n size.height -= dify;\n size.width -= dify * this.viewPortRatio;\n y = dify;\n x = dify * this.viewPortRatio;\n x /= 2;\n break;\n case 'bottom':\n size.height += dify;\n size.width += dify * this.viewPortRatio;\n x = dify * this.viewPortRatio;\n x /= -2;\n break;\n case 'topleft':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = dify * this.viewPortRatio;\n }\n else {\n dify = difx / this.viewPortRatio;\n }\n size.width -= difx;\n size.height -= dify;\n x = difx;\n y = dify;\n break;\n case 'topright':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = -dify * this.viewPortRatio;\n }\n else {\n dify = -(difx / this.viewPortRatio);\n }\n y = dify;\n size.width += difx;\n size.height -= dify;\n break;\n case 'bottomleft':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = -dify * this.viewPortRatio;\n }\n else {\n dify = -difx / this.viewPortRatio;\n }\n x = difx;\n size.width -= difx;\n size.height += dify;\n break;\n case 'bottomright':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = dify * this.viewPortRatio;\n }\n else {\n dify = difx / this.viewPortRatio;\n }\n size.width += difx;\n size.height += dify;\n break;\n }\n this.updateHelper(x, y, size, w, h);\n };\n Overview.prototype.updateHelper = function (difx, dify, size, width, height) {\n var x;\n var y;\n var bounds;\n var svg = this.element.getElementsByTagName('svg')[2];\n var rect = svg.getElementById('helper');\n if (size) {\n bounds = rect.getBBox();\n x = bounds.x + difx;\n y = bounds.y + dify;\n width = bounds.width + size.width;\n height = bounds.height + size.height;\n }\n else {\n var difx_1;\n if (this.currentPoint.x > this.startPoint.x) {\n difx_1 = this.currentPoint.x - this.prevPoint.x;\n }\n else {\n difx_1 = this.prevPoint.x - this.currentPoint.x;\n }\n var dify_1;\n if (this.currentPoint.y > this.startPoint.y) {\n dify_1 = this.currentPoint.y - this.prevPoint.y;\n }\n else {\n dify_1 = this.prevPoint.y - this.currentPoint.y;\n }\n var w = void 0;\n var h = void 0;\n if (Math.abs(dify_1) > Math.abs(difx_1)) {\n difx_1 = this.viewPortRatio * dify_1;\n h = true;\n w = false;\n }\n else {\n dify_1 = difx_1 / this.viewPortRatio;\n w = true;\n h = false;\n }\n bounds = rect.getBBox();\n x = ((this.startPoint.x > this.currentPoint.x) ?\n bounds.x - difx_1 : bounds.x);\n y = ((this.startPoint.y > this.currentPoint.y) ? bounds.y - dify_1 : bounds.y);\n width = bounds.width + difx_1;\n height = bounds.height + dify_1;\n }\n setAttributeSvg(this.helper, {\n 'id': this.helper.id, 'x': x, 'y': y,\n 'width': Math.max(0, width), 'height': Math.max(0, height)\n });\n };\n Overview.prototype.updateOverviewrect = function (x, y, width, height) {\n var rect = document.getElementById(this.canvas.id + 'overviewrect');\n var attr = { x: x, y: y, width: Math.max(1, width), height: Math.max(1, height) };\n setAttributeHtml(rect, attr);\n this.updateOverviewCorner('top', x + 8, y - 2, Math.max(0, width - 16), 2);\n this.updateOverviewCorner('bottom', x + 8, y + height, Math.max(0, width - 16), 2);\n this.updateOverviewCorner('left', x - 2, y + 8, 2, Math.max(0, height - 16));\n this.updateOverviewCorner('right', x + width, y + 8, 2, Math.max(0, height - 16));\n this.updateOverviewCorner('topleft', x, y, 5, 5);\n this.updateOverviewCorner('topright', x + width, y, 5, 5);\n this.updateOverviewCorner('bottomleft', x, y + height, 5, 5);\n this.updateOverviewCorner('bottomright', x + width, y + height, 5, 5);\n };\n Overview.prototype.updateOverviewCorner = function (name, x, y, width, height) {\n var attr;\n var transattr;\n var rectname = 'visible' + name;\n var rect = document.getElementById(this.canvas.id + rectname);\n if (name === 'top' || name === 'bottom' || name === 'right' || name === 'left') {\n attr = { x: x, y: y, width: width, height: height, fill: '#ED1C24' };\n transattr = { x: x - 2, y: y - 2, width: width === 2 ? 4 : width, height: height === 2 ? 4 : height };\n }\n else {\n attr = { cx: x, cy: y, 'r': 4, fill: '#ED1C24' };\n transattr = { cx: x, cy: y, 'r': 6, fill: 'transparent' };\n }\n setAttributeHtml(rect, attr);\n var transrect = document.getElementById(this.canvas.id + name);\n setAttributeHtml(transrect, transattr);\n };\n Overview.prototype.translateOverviewRectangle = function () {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var difx = this.currentPoint.x - this.prevPoint.x;\n var dify = this.currentPoint.y - this.prevPoint.y;\n var viewPort;\n var zoom = Math.min(this.parent.scroller.viewPortWidth / offwidth, this.parent.scroller.viewPortHeight / offheight);\n var svg = this.element.getElementsByTagName('svg')[2];\n var panel = svg.getElementById(this.canvas.id\n + 'overviewrect');\n var bounds = panel.getBBox();\n var x = bounds.x + difx;\n var y = bounds.y + dify;\n var width = bounds.width;\n var height = bounds.height;\n this.updateOverviewrect(x, y, width, height);\n this.updateParentView(this.parent.scroller.currentZoom, x, y, width, height, null);\n };\n Overview.prototype.renderOverviewRect = function (x, y, width, height) {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var viewPort;\n var viewwidth = (width / offwidth) * this.contentWidth;\n var viewheight = (height / offheight) * this.contentHeight;\n var zoom = Math.max(this.parent.scroller.viewPortWidth / viewwidth, this.parent.scroller.viewPortHeight / viewheight);\n if (zoom >= 0.25 && zoom <= 30) {\n var point = { x: 0, y: 0 };\n this.updateParentView(zoom, x, y, width, height, point);\n var bounds = this.scrollOverviewRect(this.parent.scroller.horizontalOffset, this.parent.scroller.verticalOffset, this.parent.scroller.currentZoom, true);\n if (this.helper) {\n var panel = this.element.getElementsByTagName('rect')[10];\n var svgRect = panel.getBBox();\n bounds.x = svgRect.x;\n bounds.y = svgRect.y;\n }\n this.updateOverviewrect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n };\n Overview.prototype.scrollOverviewRect = function (hoffset, voffset, currentZoom, scaled) {\n if (!(this.actionName) || scaled) {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var scale = Math.min(this.contentWidth / offwidth, this.contentHeight / offheight);\n var bounds = new Rect();\n var x = bounds.x = (hoffset / currentZoom) / scale;\n var y = bounds.y = (voffset / currentZoom) / scale;\n var viewPort = void 0;\n var width = bounds.width = (this.parent.scroller.viewPortWidth / currentZoom) / scale;\n var height = bounds.height = (this.parent.scroller.viewPortHeight / currentZoom) / scale;\n var ratio = this.parent.scroller.viewPortWidth / this.parent.scroller.viewPortHeight;\n if (scaled) {\n var rect = new Rect();\n rect.x = x;\n rect.y = y;\n rect.width = width;\n rect.height = height;\n return rect;\n }\n this.updateOverviewrect(-x, -y, width, height);\n }\n return null;\n };\n Overview.prototype.updateParentView = function (zoom, x, y, width, height, focusPoint) {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var scalex = this.contentWidth / offwidth;\n var scaley = this.contentHeight / offheight;\n var hoffset = x * scalex * zoom;\n var voffset = y * scaley * zoom;\n var delx;\n var dely;\n var bounds = this.parent.scroller.getPageBounds();\n if (zoom !== 1 || this.actionName === 'pan') {\n delx = -hoffset - this.parent.scroller.horizontalOffset;\n dely = -voffset - this.parent.scroller.verticalOffset;\n }\n if (this.actionName === 'scale' || this.actionName === 'draw') {\n this.parent.scroller.zoom(zoom / this.parent.scroller.currentZoom, delx, dely, focusPoint);\n }\n else {\n this.parent.pan(delx, dely, focusPoint);\n }\n };\n /** @private */\n Overview.prototype.updateView = function (view) {\n var width;\n var height;\n var bounds = this.parent.scroller.getPageBounds();\n width = bounds.width;\n height = bounds.height;\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var scale;\n var w = Math.max(width, this.parent.scroller.viewPortWidth);\n var h = Math.max(height, this.parent.scroller.viewPortHeight);\n this.contentWidth = w = Math.max(w, (offwidth / offheight) * h);\n this.contentHeight = h = Math.max(h, (offheight / offwidth) * w);\n scale = Math.min(offwidth / w, offheight / h);\n var htmlLayer = document.getElementById(this.element.id + '_htmlLayer');\n htmlLayer.style.webkitTransform = 'scale(' + scale + ') translate(' + -bounds.x + 'px,' + (-bounds.y) + 'px)';\n htmlLayer.style.transform = 'scale(' + scale + ') translate(' + -bounds.x + 'px,' + (-bounds.y) + 'px)';\n var ovw = document.getElementById(this.element.id + '_overviewlayer');\n ovw.setAttribute('transform', 'translate(' + (-bounds.x * scale) + ',' + (-bounds.y * scale) + ')');\n this.horizontalOffset = bounds.x * scale;\n this.verticalOffset = bounds.y * scale;\n var canvas = document.getElementById(this.element.id + '_diagramLayer');\n var nativeLayer = getNativeLayer(this.element.id);\n var context = canvas.getContext('2d');\n var widthratio = (Number(this.model.width) / this.contentWidth);\n var heightratio = (Number(this.model.height) / this.contentHeight);\n widthratio = Math.min(widthratio, heightratio);\n nativeLayer.setAttribute('transform', 'translate('\n + (0) + ',' + (0) + '),scale('\n + widthratio + ')');\n context.setTransform(widthratio, 0, 0, widthratio, 0, 0);\n context.fillStyle = 'red';\n this.scrollOverviewRect(this.parent.scroller.horizontalOffset, this.parent.scroller.verticalOffset, this.parent.scroller.currentZoom);\n };\n // region - Event Handlers\n Overview.prototype.scrolled = function (evt) {\n if (this.event) {\n var bounds = this.scrollOverviewRect(this.parent.scroller.horizontalOffset, this.parent.scroller.verticalOffset, this.parent.scroller.currentZoom, true);\n this.updateOverviewrect(-bounds.x, -bounds.y, bounds.width, bounds.height);\n }\n };\n Overview.prototype.updateCursor = function (evt) {\n if (hasClass(evt.target, ('overviewresizer'))) {\n switch (evt.target.id) {\n case this.canvas.id + 'left':\n this.canvas.style.cursor = 'w-resize';\n break;\n case this.canvas.id + 'right':\n this.canvas.style.cursor = 'e-resize';\n break;\n case this.canvas.id + 'top':\n this.canvas.style.cursor = 'n-resize';\n break;\n case this.canvas.id + 'bottom':\n this.canvas.style.cursor = 's-resize';\n break;\n case this.canvas.id + 'topleft':\n this.canvas.style.cursor = 'nw-resize';\n break;\n case this.canvas.id + 'topright':\n this.canvas.style.cursor = 'ne-resize';\n break;\n case this.canvas.id + 'bottomleft':\n this.canvas.style.cursor = 'sw-resize';\n break;\n case this.canvas.id + 'bottomright':\n this.canvas.style.cursor = 'se-resize';\n break;\n }\n }\n else {\n this.canvas.style.cursor = 'default';\n }\n };\n Overview.prototype.mouseMove = function (evt) {\n this.event = false;\n this.updateCursor(evt);\n this.currentPoint = this.mousePosition(evt);\n if (this.actionName) {\n switch (this.actionName) {\n case 'draw':\n if (!this.inAction && (this.startPoint.x !== this.currentPoint.x || this.startPoint.y !== this.currentPoint.y)) {\n this.initHelper();\n this.inAction = true;\n }\n if (this.inAction) {\n this.updateHelper();\n }\n break;\n case 'scale':\n if (!this.inAction) {\n this.initHelper();\n this.inAction = true;\n }\n this.updateOverviewRectangle();\n break;\n case 'pan':\n if ((this.startPoint.x !== this.currentPoint.x || this.startPoint.y === this.currentPoint.y) || this.inAction) {\n this.inAction = true;\n this.translateOverviewRectangle();\n }\n break;\n }\n }\n this.prevPoint = this.currentPoint;\n };\n Overview.prototype.documentMouseUp = function (evt) {\n this.inAction = false;\n this.actionName = '';\n if (this.helper) {\n this.helper.parentNode.removeChild(this.helper);\n this.helper = null;\n }\n this.event = true;\n document.getElementById(this.canvas.id + 'overviewhandle').style.pointerEvents = 'all';\n };\n Overview.prototype.windowResize = function (evt) {\n var _this = this;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n var element = document.getElementById(_this.element.id);\n var bRect = element.getBoundingClientRect();\n _this.model.width = bRect.width;\n _this.model.height = bRect.height;\n _this.renderCanvas();\n _this.setParent(_this.sourceID);\n }, 10);\n return false;\n };\n /** @private */\n Overview.prototype.mouseDown = function (evt) {\n if (evt.target.id === this.canvas.id + '_overviewsvg') {\n this.actionName = 'draw';\n }\n if (evt.target.id === this.canvas.id + 'overviewrect') {\n this.actionName = 'pan';\n }\n if (hasClass(evt.target, 'overviewresizer')) {\n this.actionName = 'scale';\n switch (evt.target.id) {\n case this.canvas.id + 'left':\n this.resizeDirection = 'left';\n break;\n case this.canvas.id + 'right':\n this.resizeDirection = 'right';\n break;\n case this.canvas.id + 'top':\n this.resizeDirection = 'top';\n break;\n case this.canvas.id + 'bottom':\n this.resizeDirection = 'bottom';\n break;\n case this.canvas.id + 'topleft':\n this.resizeDirection = 'topleft';\n break;\n case this.canvas.id + 'topright':\n this.resizeDirection = 'topright';\n break;\n case this.canvas.id + 'bottomleft':\n this.resizeDirection = 'bottomleft';\n break;\n case this.canvas.id + 'bottomright':\n this.resizeDirection = 'bottomright';\n break;\n }\n }\n this.startPoint = this.prevPoint = this.mousePosition(evt);\n this.viewPortRatio = this.parent.scroller.viewPortWidth / this.parent.scroller.viewPortHeight;\n var overViewHandle = document.getElementById(this.canvas.id + 'overviewhandle');\n overViewHandle.style.pointerEvents = 'none';\n };\n Overview.prototype.mouseUp = function (evt) {\n this.currentPoint = this.mousePosition(evt);\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n if (this.actionName) {\n if ((this.startPoint.x !== this.currentPoint.x || this.startPoint.y !== this.currentPoint.y)) {\n if (this.actionName === 'pan') {\n var i = 0;\n }\n else {\n if (this.helper) {\n var bounds = (this.element.getElementsByTagName('rect')[10]).getBBox();\n this.resizeDirection = this.resizeDirection || '';\n var x = bounds.x;\n var y = bounds.y;\n var width = bounds.width;\n var height = bounds.height;\n var adjust = this.resizeDirection === 'topleft' || this.resizeDirection === 'topright' ||\n this.resizeDirection === 'bottomleft' || this.resizeDirection === 'bottomright';\n this.renderOverviewRect(x, y, width, height);\n }\n }\n }\n else {\n if (evt.target.id === this.canvas.id + '_overviewsvg' || evt.target.id === 'helper') {\n var svg = this.element.getElementsByTagName('svg')[2];\n var g = svg.getElementById(this.canvas.id\n + 'overviewrect');\n var bounds = g.getBBox();\n var width = bounds.width;\n var height = bounds.height;\n this.inAction = true;\n this.actionName = 'pan';\n this.renderOverviewRect(this.currentPoint.x - width / 2, this.currentPoint.y - height / 2, width, height);\n this.inAction = false;\n }\n }\n }\n if (this.helper) {\n this.helper.parentNode.removeChild(this.helper);\n this.helper = null;\n }\n this.actionName = '';\n this.startPoint = null;\n this.currentPoint = null;\n this.prevPoint = null;\n this.helper = null;\n this.viewPortRatio = 1;\n this.resizeDirection = '';\n this.inAction = false;\n this.event = true;\n document.getElementById(this.canvas.id + 'overviewhandle').style.pointerEvents = 'all';\n };\n Overview.prototype.initHelper = function () {\n var g = this.element.getElementsByTagName('svg')[2];\n var scale = this.parent.scroller.currentZoom;\n var x = this.startPoint.x;\n var y = this.startPoint.y;\n var width = 1;\n var height = 1;\n if (this.actionName === 'scale') {\n var rect = g.\n getElementById(this.canvas.id + 'overviewrect');\n var bounds = rect.getBBox();\n x = bounds.x;\n y = bounds.y;\n width = bounds.width;\n height = bounds.height;\n }\n var selectionRect = createSvgElement('rect', {\n 'id': 'helper', x: x, y: y, width: width, height: height,\n 'fill': 'transparent', 'stroke': 'gray', 'stroke-dasharray': '2 2', 'shape-rendering': 'crispEdges'\n });\n var overviewLayer = g.getElementById(this.element.id + '_overviewlayer');\n overviewLayer.appendChild(selectionRect);\n this.helper = selectionRect;\n };\n Overview.prototype.mousePosition = function (evt) {\n var touchArg;\n var offsetX;\n var offsetY;\n if (evt.type.indexOf('touch') !== -1) {\n touchArg = evt;\n var pageX = touchArg.changedTouches[0].clientX;\n var pageY = touchArg.changedTouches[0].clientY;\n offsetX = pageX - this.element.offsetLeft;\n offsetY = pageY - this.element.offsetTop;\n }\n else {\n offsetX = evt.clientX;\n offsetY = evt.clientY;\n }\n var boundingRect = this.element.getBoundingClientRect();\n offsetX = offsetX - boundingRect.left;\n offsetY = offsetY - boundingRect.top;\n return { x: offsetX + this.horizontalOffset, y: offsetY + this.verticalOffset };\n };\n // end region - Event handlers\n /**\n * To destroy the Overview\n * @return {void}\n * @private\n */\n Overview.prototype.destroy = function () {\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n if (document.getElementById(this.element.id)) {\n this.element.classList.remove('e-overview');\n var content = document.getElementById(this.element.id + '_canvas');\n if (content) {\n this.element.removeChild(content);\n }\n }\n this.parent.views.splice(this.parent.views.indexOf(this.element.id), 1);\n this.diagramLayerDiv = null;\n this.canvas = null;\n this.parent = null;\n };\n /**\n * Get module name.\n */\n Overview.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Overview';\n };\n __decorate([\n Property('100%')\n ], Overview.prototype, \"width\", void 0);\n __decorate([\n Property('100%')\n ], Overview.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Overview.prototype, \"sourceID\", void 0);\n __decorate([\n Event()\n ], Overview.prototype, \"created\", void 0);\n return Overview;\n}(Component));\nexport { Overview };\n","import * as index from '@syncfusion/ej2-diagrams';\nindex.Diagram.Inject( index.HierarchicalTree,index.MindMap,index.RadialTree,index.ComplexHierarchicalTree,index.DataBinding,index.Snapping,index.PrintAndExport,index.BpmnDiagrams,index.SymmetricLayout,index.ConnectorBridging,index.UndoRedo,index.LayoutAnimation,index.DiagramContextMenu,index.ConnectorEditing);\nindex.SymbolPalette.Inject( index.BpmnDiagrams);\nexport * from '@syncfusion/ej2-diagrams';\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Dictionary = /** @class */ (function () {\n function Dictionary() {\n this.keysInternal = [];\n this.valuesInternal = [];\n this.item = [];\n }\n Object.defineProperty(Dictionary.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return this.keysInternal.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Dictionary.prototype, \"keys\", {\n /**\n * @private\n */\n get: function () {\n return this.getItem();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n Dictionary.prototype.getItem = function () {\n this.item = [];\n for (var i = 0; i < this.keysInternal.length; i++) {\n this.item.push(this.keysInternal[i]);\n }\n return this.item;\n };\n /**\n * @private\n */\n Dictionary.prototype.add = function (key, value) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key or value is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n // if (index < 0 || index > this.keysInternal.length - 1) {\n if (index < 0) {\n this.keysInternal.push(key);\n this.valuesInternal.push(value);\n }\n return 1;\n // else {\n // throw new RangeError('An item with the same key has already been added.');\n // }\n };\n /**\n * @private\n */\n Dictionary.prototype.get = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n return this.valuesInternal[index];\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.set = function (key, value) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.valuesInternal[index] = value;\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.remove = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.keysInternal.splice(index, 1);\n this.valuesInternal.splice(index, 1);\n return true;\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.containsKey = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n Dictionary.prototype.clear = function () {\n this.keysInternal = [];\n this.valuesInternal = [];\n };\n /**\n * @private\n */\n Dictionary.prototype.destroy = function () {\n this.clear();\n this.keysInternal = undefined;\n this.valuesInternal = undefined;\n };\n return Dictionary;\n}());\nexport { Dictionary };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from './dictionary';\n/**\n * @private\n */\nvar WUniqueFormat = /** @class */ (function () {\n function WUniqueFormat(type) {\n this.referenceCount = 0;\n this.uniqueFormatType = type;\n this.propertiesHash = new Dictionary();\n }\n /**\n * @private\n */\n WUniqueFormat.prototype.isEqual = function (source, property, modifiedValue) {\n var isEqual = false;\n switch (this.uniqueFormatType) {\n case 1:\n isEqual = this.isBorderEqual(source, property, modifiedValue);\n break;\n case 2:\n isEqual = this.isCharacterFormatEqual(source, property, modifiedValue);\n break;\n case 3:\n isEqual = this.isParagraphFormatEqual(source, property, modifiedValue);\n break;\n case 4:\n isEqual = this.isCellFormatEqual(source, property, modifiedValue);\n break;\n case 5:\n isEqual = this.isShadingEqual(source, property, modifiedValue);\n break;\n case 6:\n isEqual = this.isRowFormatEqual(source, property, modifiedValue);\n break;\n case 7:\n isEqual = this.isListFormatEqual(source, property, modifiedValue);\n break;\n case 8:\n isEqual = this.isTableFormatEqual(source, property, modifiedValue);\n break;\n case 9:\n isEqual = this.isListLevelEqual(source, property, modifiedValue);\n break;\n case 10:\n isEqual = this.isSectionFormatEqual(source, property, modifiedValue);\n break;\n default:\n break;\n }\n return isEqual;\n };\n // tslint:disable-next-line:max-line-length\n WUniqueFormat.prototype.isNotEqual = function (property, source, modifiedProperty, modifiedValue, uniqueFormatType) {\n var targetValue = undefined;\n var propertyType = WUniqueFormat.getPropertyType(uniqueFormatType, property);\n if (this.propertiesHash.containsKey(propertyType)) {\n targetValue = this.propertiesHash.get(propertyType);\n }\n var sourceValue = undefined;\n if (property === modifiedProperty) {\n sourceValue = modifiedValue;\n }\n else if (source.containsKey(propertyType)) {\n sourceValue = source.get(propertyType);\n }\n // tslint:disable-next-line:max-line-length\n if (!(targetValue === sourceValue || (!isNullOrUndefined(targetValue) && !isNullOrUndefined(sourceValue) && targetValue === sourceValue))) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n WUniqueFormat.getPropertyType = function (uniqueFormatType, property) {\n var type = 0;\n switch (uniqueFormatType) {\n case 1:\n type = this.getBorderPropertyType(property);\n break;\n case 2:\n type = this.getCharacterFormatPropertyType(property);\n break;\n case 3:\n type = this.getParaFormatPropertyType(property);\n break;\n case 4:\n type = this.getCellFormatPropertyType(property);\n break;\n case 5:\n type = this.getShadingPropertyType(property);\n break;\n case 6:\n type = this.getRowFormatType(property);\n break;\n case 7:\n type = this.getListFormatType(property);\n break;\n case 8:\n type = this.getTableFormatType(property);\n break;\n case 9:\n type = this.getListLevelType(property);\n break;\n case 10:\n type = this.getSectionFormatType(property);\n break;\n default:\n break;\n }\n return type;\n };\n WUniqueFormat.getRowFormatType = function (property) {\n if (property === 'allowBreakAcrossPages') {\n return 1;\n }\n if (property === 'isHeader') {\n return 2;\n }\n if (property === 'height') {\n return 3;\n }\n if (property === 'heightType') {\n return 4;\n }\n if (property === 'gridBefore') {\n return 5;\n }\n if (property === 'gridBeforeWidth') {\n return 6;\n }\n if (property === 'gridBeforeWidthType') {\n return 7;\n }\n if (property === 'gridAfter') {\n return 8;\n }\n if (property === 'gridAfterWidth') {\n return 9;\n }\n if (property === 'gridAfterWidthType') {\n return 10;\n }\n return 0;\n };\n WUniqueFormat.getListFormatType = function (property) {\n if (property === 'listId') {\n return 1;\n }\n if (property === 'listLevelNumber') {\n return 2;\n }\n return 0;\n };\n WUniqueFormat.getTableFormatType = function (property) {\n if (property === 'leftMargin') {\n return 1;\n }\n if (property === 'rightMargin') {\n return 2;\n }\n if (property === 'topMargin') {\n return 3;\n }\n if (property === 'bottomMargin') {\n return 4;\n }\n if (property === 'cellSpacing') {\n return 5;\n }\n if (property === 'leftIndent') {\n return 6;\n }\n if (property === 'tableAlignment') {\n return 7;\n }\n if (property === 'preferredWidth') {\n return 8;\n }\n if (property === 'preferredWidthType') {\n return 9;\n }\n return 0;\n };\n WUniqueFormat.getListLevelType = function (property) {\n if (property === 'listLevelPattern') {\n return 1;\n }\n if (property === 'startAt') {\n return 2;\n }\n if (property === 'followCharacter') {\n return 3;\n }\n if (property === 'numberFormat') {\n return 4;\n }\n if (property === 'restartLevel') {\n return 5;\n }\n return 0;\n };\n WUniqueFormat.getShadingPropertyType = function (property) {\n if (property === 'backgroundColor') {\n return 1;\n }\n if (property === 'foregroundColor') {\n return 2;\n }\n if (property === 'textureStyle') {\n return 3;\n }\n return 0;\n };\n WUniqueFormat.getCellFormatPropertyType = function (property) {\n if (property === 'leftMargin') {\n return 1;\n }\n if (property === 'rightMargin') {\n return 2;\n }\n if (property === 'topMargin') {\n return 3;\n }\n if (property === 'bottomMargin') {\n return 4;\n }\n if (property === 'columnSpan') {\n return 5;\n }\n if (property === 'rowSpan') {\n return 6;\n }\n if (property === 'verticalAlignment') {\n return 7;\n }\n if (property === 'preferredWidthType') {\n return 8;\n }\n if (property === 'preferredWidth') {\n return 9;\n }\n if (property === 'cellWidth') {\n return 10;\n }\n return 0;\n };\n WUniqueFormat.getBorderPropertyType = function (property) {\n if (property === 'color') {\n return 1;\n }\n if (property === 'lineStyle') {\n return 2;\n }\n if (property === 'lineWidth') {\n return 3;\n }\n if (property === 'shadow') {\n return 4;\n }\n if (property === 'space') {\n return 5;\n }\n if (property === 'hasNoneStyle') {\n return 6;\n }\n return 0;\n };\n WUniqueFormat.getCharacterFormatPropertyType = function (property) {\n if (property === 'fontColor') {\n return 1;\n }\n if (property === 'fontFamily') {\n return 2;\n }\n if (property === 'fontSize') {\n return 3;\n }\n if (property === 'bold') {\n return 4;\n }\n if (property === 'italic') {\n return 5;\n }\n if (property === 'underline') {\n return 6;\n }\n if (property === 'strikethrough') {\n return 7;\n }\n if (property === 'baselineAlignment') {\n return 8;\n }\n if (property === 'highlightColor') {\n return 9;\n }\n return 0;\n };\n WUniqueFormat.getParaFormatPropertyType = function (property) {\n if (property === 'leftIndent') {\n return 1;\n }\n if (property === 'rightIndent') {\n return 2;\n }\n if (property === 'firstLineIndent') {\n return 3;\n }\n if (property === 'textAlignment') {\n return 4;\n }\n if (property === 'beforeSpacing') {\n return 5;\n }\n if (property === 'afterSpacing') {\n return 6;\n }\n if (property === 'lineSpacing') {\n return 7;\n }\n if (property === 'lineSpacingType') {\n return 8;\n }\n if (property === 'outlineLevel') {\n return 9;\n }\n return 0;\n };\n WUniqueFormat.getSectionFormatType = function (property) {\n if (property === 'headerDistance') {\n return 1;\n }\n if (property === 'footerDistance') {\n return 2;\n }\n if (property === 'differentFirstPage') {\n return 3;\n }\n if (property === 'differentOddAndEvenPages') {\n return 4;\n }\n if (property === 'pageWidth') {\n return 5;\n }\n if (property === 'pageHeight') {\n return 6;\n }\n if (property === 'leftMargin') {\n return 7;\n }\n if (property === 'topMargin') {\n return 8;\n }\n if (property === 'rightMargin') {\n return 9;\n }\n if (property === 'bottomMargin') {\n return 10;\n }\n return 0;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isBorderEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('color', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('lineStyle', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('lineWidth', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('shadow', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('space', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('hasNoneStyle', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isCharacterFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('fontColor', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontFamily', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontSize', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('bold', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('italic', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('underline', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('strikethrough', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('baselineAlignment', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('highlightColor', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n return true;\n };\n WUniqueFormat.prototype.isParagraphFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('rightIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('firstLineIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('textAlignment', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('beforeSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('afterSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('lineSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('lineSpacingType', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('outlineLevel', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isCellFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('columnSpan', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('rowSpan', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('verticalAlignment', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('preferredWidthType', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('preferredWidth', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('cellWidth', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isShadingEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('backgroundColor', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n if (this.isNotEqual('foregroundColor', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n if (this.isNotEqual('textureStyle', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isRowFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('allowBreakAcrossPages', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('isHeader', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('height', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('heightType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBefore', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBeforeWidth', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBeforeWidthType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfter', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfterWidth', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfterWidthType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isListFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('listId', source, modifiedProperty, modifiedValue, 7)) {\n return false;\n }\n if (this.isNotEqual('listLevelNumber', source, modifiedProperty, modifiedValue, 7)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isTableFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('cellSpacing', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('leftIndent', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('tableAlignment', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('preferredWidth', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('preferredWidthType', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isListLevelEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('listLevelPattern', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('startAt', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('followCharacter', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('numberFormat', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('restartLevel', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isSectionFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('headerDistance', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('footerDistance', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('differentFirstPage', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('differentOddAndEvenPages', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('pageWidth', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('pageHeight', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.cloneItems = function (format, property, value, uniqueFormatType) {\n var propertyType = WUniqueFormat.getPropertyType(uniqueFormatType, property);\n var keys = format.propertiesHash.getItem();\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] === propertyType) {\n this.propertiesHash.add(propertyType, value);\n }\n else {\n this.propertiesHash.add(keys[i], format.propertiesHash.get(keys[i]));\n }\n }\n if (!format.propertiesHash.containsKey(propertyType)) {\n this.propertiesHash.add(propertyType, value);\n }\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.mergeProperties = function (format) {\n var hash = format.cloneProperties();\n var keys = this.propertiesHash.keys;\n for (var i = 0; i < keys.length; i++) {\n if (!hash.containsKey(keys[i])) {\n hash.add(keys[i], this.propertiesHash.get(keys[i]));\n }\n }\n return hash;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.cloneProperties = function () {\n var hash = new Dictionary();\n var keys = this.propertiesHash.keys;\n for (var i = 0; i < keys.length; i++) {\n hash.add(keys[i], this.propertiesHash.get(keys[i]));\n }\n return hash;\n };\n // public cloneItemsInternal(format: WUniqueFormat): void {\n // let keys: number[] = format.propertiesHash.getItem();\n // for (let i: number = 0; i < keys.length; i++) {\n // this.propertiesHash.add(keys[i], format.propertiesHash.get(keys[i]));\n // }\n // this.referenceCount = format.referenceCount;\n // }\n /**\n * @private\n */\n WUniqueFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.propertiesHash)) {\n this.propertiesHash.destroy();\n }\n this.propertiesHash = undefined;\n this.referenceCount = undefined;\n this.uniqueFormatType = undefined;\n };\n return WUniqueFormat;\n}());\nexport { WUniqueFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WUniqueFormat } from './unique-format';\n/**\n * @private\n */\nvar WUniqueFormats = /** @class */ (function () {\n function WUniqueFormats() {\n this.items = [];\n }\n /**\n * @private\n */\n WUniqueFormats.prototype.addUniqueFormat = function (format, type) {\n var matchedFormat = undefined;\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].isEqual(format, undefined, undefined)) {\n matchedFormat = this.items[i];\n break;\n }\n }\n if (isNullOrUndefined(matchedFormat)) {\n matchedFormat = new WUniqueFormat(type);\n matchedFormat.propertiesHash = format;\n matchedFormat.referenceCount = 1;\n this.items.push(matchedFormat);\n }\n else {\n matchedFormat.referenceCount++;\n }\n return matchedFormat;\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.updateUniqueFormat = function (uniqueFormat, property, value) {\n var matchedFormat = undefined;\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].isEqual(uniqueFormat.propertiesHash, property, value)) {\n matchedFormat = this.items[i];\n break;\n }\n }\n if (isNullOrUndefined(matchedFormat)) {\n matchedFormat = new WUniqueFormat(uniqueFormat.uniqueFormatType);\n matchedFormat.cloneItems(uniqueFormat, property, value, uniqueFormat.uniqueFormatType);\n matchedFormat.referenceCount = 1;\n this.items.push(matchedFormat);\n }\n else {\n matchedFormat.referenceCount++;\n }\n this.remove(uniqueFormat);\n uniqueFormat = undefined;\n return matchedFormat;\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.remove = function (uniqueFormat) {\n uniqueFormat.referenceCount--;\n if (uniqueFormat.referenceCount <= 0) {\n this.items.splice(this.items.indexOf(uniqueFormat), 1);\n uniqueFormat.destroy();\n uniqueFormat = undefined;\n }\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.clear = function () {\n if (isNullOrUndefined(this.items)) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n }\n this.items = [];\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.destroy = function () {\n this.clear();\n this.items = undefined;\n };\n return WUniqueFormats;\n}());\nexport { WUniqueFormats };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, L10n, setCulture, Browser } from '@syncfusion/ej2-base';\nimport { Save } from '@syncfusion/ej2-file-utils';\nimport { LayoutViewer, PageLayoutViewer, BulletsAndNumberingDialog } from './index';\nimport { Print } from './index';\nimport { BodyWidget, ParagraphWidget } from './index';\nimport { WSectionFormat, WParagraphFormat, WCharacterFormat } from './index';\nimport { SfdtReader } from './index';\nimport { Selection } from './index';\nimport { Editor, EditorHistory } from './index';\nimport { WStyles } from './index';\nimport { Search } from './index';\nimport { OptionsPane } from './index';\nimport { WordExport } from './index';\nimport { TextExport } from './index';\nimport { ContextMenu } from './index';\nimport { ImageResizer } from './index';\nimport { SfdtExport } from './index';\nimport { HyperlinkDialog, TableDialog, BookmarkDialog, StylesDialog, TableOfContentsDialog } from './index';\nimport { PageSetupDialog, ParagraphDialog, ListDialog, StyleDialog, FontDialog } from './index';\nimport { TablePropertiesDialog, BordersAndShadingDialog, CellOptionsDialog, TableOptionsDialog } from './index';\n/**\n * The Document editor component is used to draft, save or print rich text contents as page by page.\n */\nvar DocumentEditor = /** @class */ (function (_super) {\n __extends(DocumentEditor, _super);\n /**\n * Initialize the constructor of DocumentEditor\n */\n function DocumentEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n //Internal Variable\n _this.enableHeaderFooterIn = false;\n /**\n * @private\n */\n _this.isShiftingEnabled = false;\n /**\n * @private\n */\n _this.isLayoutEnabled = true;\n /**\n * @private\n */\n _this.isPastingContent = false;\n /**\n * @private\n */\n _this.parser = undefined;\n _this.disableHistoryIn = false;\n /**\n * @private\n */\n _this.findResultsList = undefined;\n /**\n * Gets or sets the name of the document.\n */\n _this.documentName = '';\n /**\n * @private\n */\n _this.tablePropertiesDialogModule = undefined;\n /**\n * @private\n */\n _this.bordersAndShadingDialogModule = undefined;\n /**\n * @private\n */\n _this.cellOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.tableOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.paragraphDialogModule = undefined;\n /**\n * @private\n */\n _this.imageResizerModule = undefined;\n /**\n * Gets or Sets a value indicating whether holding Ctrl key is required to follow hyperlink on click. The default value is true.\n */\n _this.useCtrlClickToFollowHyperlink = true;\n /**\n * Gets or sets the page outline color.\n */\n _this.pageOutline = '#000000';\n /**\n * Gets or sets a value indicating whether to enable cursor in document editor on read only state or not. The default value is false.\n */\n _this.enableCursorOnReadOnly = false;\n /**\n * Gets or sets a value indicating whether local paste needs to be enabled or not.\n */\n _this.enableLocalPaste = false;\n /**\n * @private\n */\n _this.defaultLocale = {\n 'Table': 'Table',\n 'Row': 'Row',\n 'Cell': 'Cell',\n 'Ok': 'Ok',\n 'Cancel': 'Cancel',\n 'Size': 'Size',\n 'Preferred Width': 'Preferred width',\n 'Points': 'Points',\n 'Percent': 'Percent',\n 'Measure in': 'Measure in',\n 'Alignment': 'Alignment',\n 'Left': 'Left',\n 'Center': 'Center',\n 'Right': 'Right',\n 'Justify': 'Justify',\n 'Indent from left': 'Indent from left',\n 'Borders and Shading': 'Borders and Shading',\n 'Options': 'Options',\n 'Specify height': 'Specify height',\n 'At least': 'At least',\n 'Exactly': 'Exactly',\n 'Row height is': 'Row height is',\n 'Allow row to break across pages': 'Allow row to break across pages',\n 'Repeat as header row at the top of each page': 'Repeat as header row at the top of each page',\n 'Vertical alignment': 'Vertical alignment',\n 'Top': 'Top',\n 'Bottom': 'Bottom',\n 'Default cell margins': 'Default cell margins',\n 'Default cell spacing': 'Default cell spacing',\n 'Allow spacing between cells': 'Allow spacing between cells',\n 'Cell margins': 'Cell margins',\n 'Same as the whole table': 'Same as the whole table',\n 'Borders': 'Borders',\n 'None': 'None',\n 'Single': 'Single',\n 'Dot': 'Dot',\n 'DashSmallGap': 'DashSmallGap',\n 'DashLargeGap': 'DashLargeGap',\n 'DashDot': 'DashDot',\n 'DashDotDot': 'DashDotDot',\n 'Double': 'Double',\n 'Triple': 'Triple',\n 'ThinThickSmallGap': 'ThinThickSmallGap',\n 'ThickThinSmallGap': 'ThickThinSmallGap',\n 'ThinThickThinSmallGap': 'ThinThickThinSmallGap',\n 'ThinThickMediumGap': 'ThinThickMediumGap',\n 'ThickThinMediumGap': 'ThickThinMediumGap',\n 'ThinThickThinMediumGap': 'ThinThickThinMediumGap',\n 'ThinThickLargeGap': 'ThinThickLargeGap',\n 'ThickThinLargeGap': 'ThickThinLargeGap',\n 'ThinThickThinLargeGap': 'ThinThickThinLargeGap',\n 'SingleWavy': 'SingleWavy',\n 'DoubleWavy': 'DoubleWavy',\n 'DashDotStroked': 'DashDotStroked',\n 'Emboss3D': 'Emboss3D',\n 'Engrave3D': 'Engrave3D',\n 'Outset': 'Outset',\n 'Inset': 'Inset',\n 'Thick': 'Thick',\n 'Style': 'Style',\n 'Width': 'Width',\n 'Height': 'Height',\n 'Letter': 'Letter',\n 'Tabloid': 'Tabloid',\n 'Legal': 'Legal',\n 'Statement': 'Statement',\n 'Executive': 'Executive',\n 'A3': 'A3',\n 'A4': 'A4',\n 'A5': 'A5',\n 'B4': 'B4',\n 'B5': 'B5',\n 'Custom Size': 'Custom size',\n 'Different odd and even': 'Different odd and even',\n 'Different first page': 'Different first page',\n 'From edge': 'From edge',\n 'Header': 'Header',\n 'Footer': 'Footer',\n 'Margin': 'Margins',\n 'Paper': 'Paper',\n 'Layout': 'Layout',\n 'Orientation': 'Orientation',\n 'Landscape': 'Landscape',\n 'Portrait': 'Portrait',\n 'Table Of Contents': 'Table Of Contents',\n 'Show page numbers': 'Show page numbers',\n 'Right align page numbers': 'Right align page numbers',\n 'Nothing': 'Nothing',\n 'Tab leader': 'Tab leader',\n 'Show levels': 'Show levels',\n 'Use hyperlinks instead of page numbers': 'Use hyperlinks instead of page numbers',\n 'Build table of contents from': 'Build table of contents from',\n 'Styles': 'Styles',\n 'Available styles': 'Available styles',\n 'TOC level': 'TOC level',\n 'Heading': 'Heading',\n 'List Paragraph': 'List Paragraph',\n 'Normal': 'Normal',\n 'Outline levels': 'Outline levels',\n 'Table entry fields': 'Table entry fields',\n 'Modify': 'Modify',\n 'Color': 'Color',\n 'Setting': 'Setting',\n 'Box': 'Box',\n 'All': 'All',\n 'Custom': 'Custom',\n 'Preview': 'Preview',\n 'Shading': 'Shading',\n 'Fill': 'Fill',\n 'Apply To': 'Apply to',\n 'Table Properties': 'Table Properties',\n 'Cell Options': 'Cell Options',\n 'Table Options': 'Table Options',\n 'Insert Table': 'Insert Table',\n 'Number of columns': 'Number of columns',\n 'Number of rows': 'Number of rows',\n 'Text to display': 'Text to display',\n 'Address': 'Address',\n 'Insert Hyperlink': 'Insert Hyperlink',\n 'Edit Hyperlink': 'Edit Hyperlink',\n 'Insert': 'Insert',\n 'General': 'General',\n 'Indentation': 'Indentation',\n 'Before text': 'Before text',\n 'Special': 'Special',\n 'First line': 'First line',\n 'Hanging': 'Hanging',\n 'After text': 'After text',\n 'By': 'By',\n 'Before': 'Before',\n 'Line Spacing': 'Line spacing',\n 'After': 'After',\n 'At': 'At',\n 'Multiple': 'Multiple',\n 'Spacing': 'Spacing',\n 'Define new Multilevel list': 'Define new Multilevel list',\n 'List level': 'List level',\n 'Choose level to modify': 'Choose level to modify',\n 'Level': 'Level',\n 'Number format': 'Number format',\n 'Number style for this level': 'Number style for this level',\n 'Enter formatting for number': 'Enter formatting for number',\n 'Start at': 'Start at',\n 'Restart list after': 'Restart list after',\n 'Position': 'Position',\n 'Text indent at': 'Text indent at',\n 'Aligned at': 'Aligned at',\n 'Follow number with': 'Follow number with',\n 'Tab character': 'Tab character',\n 'Space': 'Space',\n 'Arabic': 'Arabic',\n 'UpRoman': 'UpRoman',\n 'LowRoman': 'LowRoman',\n 'UpLetter': 'UpLetter',\n 'LowLetter': 'LowLetter',\n 'Number': 'Number',\n 'Leading zero': 'Leading zero',\n 'Bullet': 'Bullet',\n 'Ordinal': 'Ordinal',\n 'Ordinal Text': 'Ordinal Text',\n 'For East': 'For East',\n 'No Restart': 'No Restart',\n 'Font': 'Font',\n 'Font style': 'Font style',\n 'Underline style': 'Underline style',\n 'Font color': 'Font color',\n 'Effects': 'Effects',\n 'Strikethrough': 'Strikethrough',\n 'Superscript': 'Superscript',\n 'Subscript': 'Subscript',\n 'Double strikethrough': 'Double strikethrough',\n 'Regular': 'Regular',\n 'Bold': 'Bold',\n 'Italic': 'Italic',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'Hyperlink': 'Hyperlink',\n 'Open Hyperlink': 'Open Hyperlink',\n 'Copy Hyperlink': 'Copy Hyperlink',\n 'Remove Hyperlink': 'Remove Hyperlink',\n 'Paragraph': 'Paragraph',\n 'Merge Cells': 'Merge Cells',\n 'Insert Above': 'Insert Above',\n 'Insert Below': 'Insert Below',\n 'Insert Left': 'Insert Left',\n 'Insert Right': 'Insert Right',\n 'Delete': 'Delete',\n 'Delete Table': 'Delete Table',\n 'Delete Row': 'Delete Row',\n 'Delete Column': 'Delete Column',\n 'File Name': 'File Name',\n 'Format Type': 'Format Type',\n 'Save': 'Save',\n 'Navigation': 'Navigation',\n 'Results': 'Results',\n 'Replace': 'Replace',\n 'Replace All': 'Replace All',\n 'We replaced all': 'We replaced all',\n 'Find': 'Find',\n 'No matches': 'No matches',\n 'All Done': 'All Done',\n 'Result': 'Result',\n 'of': 'of',\n 'instances': 'instances',\n 'with': 'with',\n 'Click to follow link': 'Click to follow link',\n 'Continue Numbering': 'Continue Numbering',\n 'Bookmark name': 'Bookmark name',\n 'Close': 'Close',\n 'Restart At': 'Restart At',\n 'Properties': 'Properties',\n 'Name': 'Name',\n 'Style type': 'Style type',\n 'Style based on': 'Style based on',\n 'Style for following paragraph': 'Style for following paragraph',\n 'Formatting': 'Formatting',\n 'Numbering and Bullets': 'Numbering and Bullets',\n 'Numbering': 'Numbering',\n 'Update Field': 'Update Field',\n 'Edit Field': 'Edit Field',\n 'Bookmark': 'Bookmark',\n 'Page Setup': 'Page Setup',\n 'No bookmarks found': 'No bookmarks found',\n 'Number format tooltip information': 'Single-level number format:
    [PREFIX]%[LEVELNUMBER][SUFFIX]
    '\n + 'For example, \"Chapter %1.\" will display numbering like
    Chapter 1. Item
    Chapter 2. Item
    …'\n + '
    Chapter N. Item
    '\n + '
    Multilevel number format:
    [PREFIX]%[LEVELNUMBER][SUFFIX]+[PREFIX]%[LEVELNUMBER][SUFFIX]'\n + '
    For example, \"%1.%2.\" will display numbering like
    1.1. Item
    1.2. Item

    1.N. Item',\n 'Format': 'Format',\n 'Create New Style': 'Create New Style',\n 'Modify Style': 'Modify Style',\n 'New': 'New',\n 'Bullets': 'Bullets',\n 'Use bookmarks': 'Use bookmarks',\n 'Table of Contents': 'Table of Contents'\n };\n _this.viewer = new PageLayoutViewer(_this);\n _this.parser = new SfdtReader(_this.viewer);\n return _this;\n }\n DocumentEditor_1 = DocumentEditor;\n Object.defineProperty(DocumentEditor.prototype, \"enableHeaderAndFooter\", {\n /**\n * @private\n */\n get: function () {\n return this.enableHeaderFooterIn;\n },\n set: function (value) {\n this.enableHeaderFooterIn = value;\n this.viewer.updateScrollBars();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"pageCount\", {\n /**\n * Gets the total number of pages.\n */\n get: function () {\n if (!this.isDocumentLoaded || isNullOrUndefined(this.viewer)) {\n return 1;\n }\n return this.viewer.pages.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"selection\", {\n /**\n * Gets the selection object of the document editor.\n * @returns Selection\n * @default undefined\n */\n get: function () {\n return this.selectionModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editor\", {\n /**\n * Gets the editor object of the document editor.\n * @returns Editor\n * @default undefined\n */\n get: function () {\n return this.editorModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editorHistory\", {\n /**\n * Gets the editor history object of the document editor.\n * @returns EditorHistory\n */\n get: function () {\n return this.editorHistoryModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"search\", {\n /**\n * Gets the search object of the document editor.\n * @returns { Search }\n */\n get: function () {\n return this.searchModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"contextMenu\", {\n /**\n * Gets the context menu object of the document editor.\n * @returns ContextMenu\n */\n get: function () {\n return this.contextMenuModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"containerId\", {\n /**\n * @private\n */\n get: function () {\n return this.element.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isDocumentLoaded\", {\n /**\n * @private\n */\n get: function () {\n return this.isDocumentLoadedIn;\n },\n set: function (value) {\n this.isDocumentLoadedIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableHistoryMode\", {\n /**\n * Determines whether history needs to be enabled or not.\n * @default - false\n * @private\n */\n get: function () {\n return this.enableEditorHistory && !isNullOrUndefined(this.editorHistoryModule);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentStart\", {\n /**\n * Gets the start text position in the document.\n * @default undefined\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selection.getDocumentStart();\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentEnd\", {\n /**\n * Gets the end text position in the document.\n * @default undefined\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selection.getDocumentEnd();\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isReadOnlyMode\", {\n /**\n * @private\n */\n get: function () {\n return this.isReadOnly || isNullOrUndefined(this.editorModule) || isNullOrUndefined(this.selectionModule);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableImageResizerMode\", {\n /**\n * Specifies to enable image resizer option\n * default - false\n * @private\n */\n get: function () {\n return this.enableImageResizer && !isNullOrUndefined(this.imageResizerModule);\n },\n enumerable: true,\n configurable: true\n });\n DocumentEditor.prototype.preRender = function () {\n this.findResultsList = [];\n //pre render section\n };\n DocumentEditor.prototype.render = function () {\n this.viewer.initializeComponents();\n this.openBlank();\n if (!isNullOrUndefined(this.element)) {\n var container = this.element;\n container.style.minHeight = '200px';\n container.style.minWidth = '200px';\n }\n };\n /**\n * Get component name\n * @private\n */\n DocumentEditor.prototype.getModuleName = function () {\n return 'DocumentEditor';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n DocumentEditor.prototype.onPropertyChanged = function (model, oldProp) {\n for (var _i = 0, _a = Object.keys(model); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'zoomFactor':\n if (this.viewer) {\n this.viewer.zoomFactor = model.zoomFactor;\n }\n break;\n case 'locale':\n this.localizeDialogs();\n break;\n case 'isReadOnly':\n if (!isNullOrUndefined(this.optionsPaneModule) && this.optionsPaneModule.isOptionsPaneShow) {\n this.optionsPaneModule.showHideOptionsPane(false);\n }\n break;\n }\n }\n };\n DocumentEditor.prototype.localizeDialogs = function () {\n if (this.locale !== '') {\n var l10n = new L10n('documenteditor', this.defaultLocale);\n l10n.setLocale(this.locale);\n setCulture(this.locale);\n if (this.optionsPaneModule) {\n this.optionsPaneModule.initOptionsPane(l10n);\n }\n if (this.paragraphDialogModule) {\n this.paragraphDialogModule.initParagraphDialog(l10n);\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.initPageSetupDialog(l10n);\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.initFontDialog(l10n);\n }\n if (this.hyperlinkDialogModule) {\n this.hyperlinkDialogModule.initHyperlinkDialog(l10n);\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.initContextMenu(l10n);\n }\n if (this.listDialogModule) {\n this.listDialogModule.initListDialog(l10n);\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.initTablePropertyDialog(l10n);\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.initBordersAndShadingsDialog(l10n);\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.initCellMarginsDialog(l10n);\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.initTableOptionsDialog(l10n);\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.initTableDialog(l10n);\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.initStyleDialog(l10n);\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.initTableOfContentDialog(l10n);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n DocumentEditor.prototype.getPersistData = function () {\n return 'documenteditor';\n };\n DocumentEditor.prototype.clearPreservedCollectionsInViewer = function () {\n if (this.viewer instanceof LayoutViewer) {\n this.viewer.clearDocumentItems();\n }\n };\n /**\n * @private\n */\n DocumentEditor.prototype.getDocumentEditorElement = function () {\n return this.element;\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireContentChange = function () {\n var eventArgs = { source: this };\n this.trigger('contentChange', eventArgs);\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireDocumentChange = function () {\n var eventArgs = { source: this };\n this.trigger('documentChange', eventArgs);\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireSelectionChange = function () {\n if (!this.viewer.isCompositionStart && Browser.isDevice && this.editorModule) {\n this.editorModule.predictText();\n }\n var eventArgs = { source: this };\n this.trigger('selectionChange', eventArgs);\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireZoomFactorChange = function () {\n var eventArgs = { source: this };\n this.trigger('zoomFactorChange', eventArgs);\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireViewChange = function () {\n if (this.viewer && this.viewer.pages.length > 0) {\n if (this.viewer.visiblePages.length > 0) {\n var pages = this.viewer.visiblePages;\n var eventArgs = {\n startPage: pages[0].index + 1,\n endPage: pages[pages.length - 1].index + 1,\n source: this\n };\n this.trigger('viewChange', eventArgs);\n }\n }\n };\n /**\n * Shows the Paragraph dialog\n * @private\n */\n DocumentEditor.prototype.showParagraphDialog = function (paragraphFormat) {\n if (this.paragraphDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.paragraphDialogModule.show(paragraphFormat);\n }\n };\n /**\n * Shows the margin dialog\n * @private\n */\n DocumentEditor.prototype.showPageSetupDialog = function () {\n if (this.pageSetupDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.pageSetupDialogModule.show();\n }\n };\n /**\n * Shows the font dialog\n * @private\n */\n DocumentEditor.prototype.showFontDialog = function (characterFormat) {\n if (this.fontDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.fontDialogModule.showFontDialog(characterFormat);\n }\n };\n /**\n * Shows the cell option dialog\n * @private\n */\n DocumentEditor.prototype.showCellOptionsDialog = function () {\n if (this.cellOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.cellOptionsDialogModule.show();\n }\n };\n /**\n * Shows the table options dialog.\n * @private\n */\n DocumentEditor.prototype.showTableOptionsDialog = function () {\n if (this.tableOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOptionsDialogModule.show();\n }\n };\n /**\n * Shows insert table dialog\n * @private\n */\n DocumentEditor.prototype.showTableDialog = function () {\n if (this.tableDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableDialogModule.show();\n }\n };\n /**\n * Shows the table of content dialog\n * @private\n */\n DocumentEditor.prototype.showTableOfContentsDialog = function () {\n if (this.tableOfContentsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOfContentsDialogModule.show();\n }\n };\n /* tslint:enable:no-any */\n /**\n * Shows the style dialog\n * @private\n */\n DocumentEditor.prototype.showStyleDialog = function () {\n if (this.styleDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.styleDialogModule.show();\n }\n };\n /**\n * Shows the hyperlink dialog\n * @private\n */\n DocumentEditor.prototype.showHyperlinkDialog = function () {\n if (this.hyperlinkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.hyperlinkDialogModule.show();\n }\n };\n /**\n * Shows the bookmark dialog.\n * @private\n */\n DocumentEditor.prototype.showBookmarkDialog = function () {\n if (this.bookmarkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bookmarkDialogModule.show();\n }\n };\n /**\n * Shows the styles dialog.\n * @private\n */\n DocumentEditor.prototype.showStylesDialog = function () {\n if (this.stylesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.stylesDialogModule.show();\n }\n };\n /**\n * Shows the List dialog\n * @private\n */\n DocumentEditor.prototype.showListDialog = function () {\n if (this.listDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.listDialogModule.showListDialog();\n }\n };\n /**\n * Shows the table properties dialog\n * @private\n */\n DocumentEditor.prototype.showTablePropertiesDialog = function () {\n if (this.tablePropertiesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tablePropertiesDialogModule.show();\n }\n };\n /**\n * Shows the borders and shading dialog\n * @private\n */\n DocumentEditor.prototype.showBordersAndShadingDialog = function () {\n if (this.bordersAndShadingDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bordersAndShadingDialogModule.show();\n }\n };\n //tslint:disable: max-func-body-length\n DocumentEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.enablePrint) {\n modules.push({\n member: 'Print', args: []\n });\n }\n if (this.enableSfdtExport || this.enableWordExport || this.enableTextExport || this.enableSelection || this.enableEditor) {\n modules.push({\n member: 'SfdtExport', args: [this.viewer]\n });\n }\n if (this.enableWordExport) {\n modules.push({\n member: 'WordExport', args: []\n });\n }\n if (this.enableTextExport) {\n modules.push({\n member: 'TextExport', args: []\n });\n }\n if (this.enableSelection || this.enableSearch || this.enableEditor) {\n modules.push({\n member: 'Selection', args: [this]\n });\n if (this.enableContextMenu) {\n modules.push({\n member: 'ContextMenu', args: [this.viewer]\n });\n }\n }\n if (this.enableSearch) {\n modules.push({\n member: 'Search', args: [this]\n });\n if (this.enableOptionsPane) {\n modules.push({\n member: 'OptionsPane', args: [this.viewer]\n });\n }\n }\n if (this.enableEditor) {\n modules.push({\n member: 'Editor', args: [this.viewer]\n });\n if (this.enableImageResizer) {\n modules.push({\n member: 'ImageResizer', args: [this, this.viewer]\n });\n }\n if (this.enableEditorHistory) {\n modules.push({\n member: 'EditorHistory', args: [this]\n });\n }\n if (this.enableHyperlinkDialog) {\n modules.push({\n member: 'HyperlinkDialog', args: [this.viewer]\n });\n }\n if (this.enableTableDialog) {\n modules.push({\n member: 'TableDialog', args: [this.viewer]\n });\n }\n if (this.enableBookmarkDialog) {\n modules.push({\n member: 'BookmarkDialog', args: [this.viewer]\n });\n }\n if (this.enableTableOfContentsDialog) {\n modules.push({\n member: 'TableOfContentsDialog', args: [this.viewer]\n });\n }\n if (this.enablePageSetupDialog) {\n modules.push({\n member: 'PageSetupDialog', args: [this.viewer]\n });\n }\n if (this.enableStyleDialog) {\n modules.push({\n member: 'StylesDialog', args: [this.viewer]\n });\n modules.push({\n member: 'StyleDialog', args: [this.viewer]\n });\n modules.push({\n member: 'BulletsAndNumberingDialog', args: [this.viewer]\n });\n }\n if (this.enableListDialog) {\n modules.push({\n member: 'ListDialog', args: [this.viewer]\n });\n }\n if (this.enableParagraphDialog) {\n modules.push({\n member: 'ParagraphDialog', args: [this.viewer]\n });\n }\n if (this.enableFontDialog) {\n modules.push({\n member: 'FontDialog', args: [this.viewer]\n });\n }\n if (this.enableTablePropertiesDialog) {\n modules.push({\n member: 'TablePropertiesDialog', args: [this.viewer]\n });\n modules.push({\n member: 'CellOptionsDialog', args: [this.viewer]\n });\n }\n if (this.enableBordersAndShadingDialog) {\n modules.push({\n member: 'BordersAndShadingDialog', args: [this.viewer]\n });\n }\n if (this.enableTableOptionsDialog) {\n modules.push({\n member: 'TableOptionsDialog', args: [this.viewer]\n });\n }\n }\n return modules;\n };\n // Public Implementation Starts\n /**\n * Opens the given Sfdt text.\n * @param {string} sfdtText.\n */\n DocumentEditor.prototype.open = function (sfdtText) {\n if (!isNullOrUndefined(this.viewer)) {\n this.clearPreservedCollectionsInViewer();\n this.viewer.lists = [];\n this.viewer.abstractLists = [];\n this.viewer.styles = new WStyles();\n if (!isNullOrUndefined(sfdtText) && this.viewer) {\n this.viewer.onDocumentChanged(this.parser.convertJsonToDocument(sfdtText));\n if (this.editorModule) {\n this.editorModule.intializeDefaultStyles();\n }\n }\n }\n };\n /**\n * Scrolls view to start of the given page number if exists.\n * @param {number} pageNumber.\n * @returns void\n */\n DocumentEditor.prototype.scrollToPage = function (pageNumber) {\n if (isNullOrUndefined(this.viewer) || pageNumber < 1 || pageNumber > this.viewer.pages.length) {\n return false;\n }\n this.viewer.scrollToPage(pageNumber - 1);\n return true;\n };\n /**\n * Enables all the modules.\n * @returns void\n */\n DocumentEditor.prototype.enableAllModules = function () {\n this.enablePrint = this.enableSfdtExport = this.enableWordExport = this.enableTextExport\n = this.enableSelection = this.enableContextMenu = this.enableSearch = this.enableOptionsPane\n = this.enableEditor = this.enableImageResizer = this.enableEditorHistory\n = this.enableHyperlinkDialog = this.enableTableDialog = this.enableBookmarkDialog\n = this.enableTableOfContentsDialog = this.enablePageSetupDialog = this.enableStyleDialog\n = this.enableListDialog = this.enableParagraphDialog = this.enableFontDialog\n = this.enableTablePropertiesDialog = this.enableBordersAndShadingDialog\n = this.enableTableOptionsDialog = true;\n // tslint:disable-next-line:max-line-length\n DocumentEditor_1.Inject(Print, SfdtExport, WordExport, TextExport, Selection, Search, Editor, ImageResizer, EditorHistory, ContextMenu, OptionsPane, HyperlinkDialog, TableDialog, BookmarkDialog, TableOfContentsDialog, PageSetupDialog, StyleDialog, ListDialog, ParagraphDialog, BulletsAndNumberingDialog, FontDialog, TablePropertiesDialog, BordersAndShadingDialog, TableOptionsDialog, CellOptionsDialog, StylesDialog);\n };\n /**\n * Resizes the component and its sub elements based on given size or container size.\n * @param width\n * @param height\n */\n DocumentEditor.prototype.resize = function (width, height) {\n if (this.element) {\n if (!isNullOrUndefined(width) && width > 200) {\n this.element.style.width = width + 'px';\n }\n if (!isNullOrUndefined(height) && height > 200) {\n this.element.style.height = height + 'px';\n }\n if (this.viewer) {\n this.viewer.updateViewerSize();\n }\n }\n };\n /**\n * Shifts the focus to the document.\n */\n DocumentEditor.prototype.focusIn = function () {\n if (this.viewer) {\n this.viewer.updateFocus();\n }\n };\n /**\n * Fits the page based on given fit type.\n * @param {PageFitType} pageFitType? - Default value of ‘pageFitType’ parameter is 'None'\n * @returns void\n */\n DocumentEditor.prototype.fitPage = function (pageFitType) {\n if (isNullOrUndefined(pageFitType)) {\n pageFitType = 'None';\n }\n if (this.viewer) {\n this.viewer.pageFitType = pageFitType;\n }\n };\n /**\n * Prints the document.\n * @param {Window} printWindow? - Default value of 'printWindow' parameter is undefined.\n */\n DocumentEditor.prototype.print = function (printWindow) {\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (this.printModule) {\n this.printModule.print(this.viewer, printWindow);\n }\n else {\n throw new Error('Invalid operation. Print is not enabled.');\n }\n };\n /**\n * Serialize the data to JSON string.\n */\n DocumentEditor.prototype.serialize = function () {\n var json = '';\n if (this.enableSfdtExport && this.sfdtExportModule instanceof SfdtExport) {\n json = this.sfdtExportModule.serialize();\n }\n else {\n throw new Error('Invalid operation. Sfdt export is not enabled.');\n }\n return json;\n };\n /**\n * Saves the document.\n * @param {string} fileName\n * @param {FormatType} formatType\n */\n DocumentEditor.prototype.save = function (fileName, formatType) {\n fileName = fileName || 'Untitled';\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (formatType === 'Docx' && this.wordExportModule) {\n if (this.wordExportModule) {\n this.wordExportModule.save(this.viewer, fileName);\n }\n }\n else if (formatType === 'Txt' && this.textExportModule) {\n this.textExportModule.save(this.viewer, fileName);\n }\n else if (formatType === 'Sfdt' && this.enableSfdtExport && this.sfdtExportModule) {\n var jsonString = this.serialize();\n var blob = new Blob([jsonString], {\n type: 'application/json'\n });\n Save.save(fileName + '.sfdt', blob);\n }\n else {\n throw new Error('Invalid operation. Specified export is not enabled.');\n }\n };\n /**\n * Saves the document as blob.\n * @param {FormatType} formatType\n */\n DocumentEditor.prototype.saveAsBlob = function (formatType) {\n var _this = this;\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation');\n }\n return new Promise(function (resolve, reject) {\n if (formatType === 'Docx' && _this.wordExportModule) {\n resolve(_this.wordExportModule.saveAsBlob(_this.viewer));\n }\n else if (formatType === 'Txt' && _this.textExportModule) {\n resolve(_this.textExportModule.saveAsBlob(_this.viewer));\n }\n else if (formatType === 'Sfdt' && _this.enableSfdtExport && _this.sfdtExportModule) {\n resolve(_this.sfdtExportModule.saveAsBlob(_this.viewer));\n }\n });\n };\n /**\n * Opens a blank document.\n */\n DocumentEditor.prototype.openBlank = function () {\n var section = new BodyWidget();\n section.index = 0;\n section.sectionFormat = new WSectionFormat(section);\n var paragraph = new ParagraphWidget();\n paragraph.index = 0;\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n section.childWidgets.push(paragraph);\n paragraph.containerWidget = section;\n var sections = [];\n sections.push(section);\n // tslint:disable-next-line:max-line-length\n var hfs = this.parser.parseHeaderFooter({ header: {}, footer: {}, evenHeader: {}, evenFooter: {}, firstPageHeader: {}, firstPageFooter: {} }, undefined);\n if (this.viewer) {\n this.clearPreservedCollectionsInViewer();\n this.viewer.headersFooters.push(hfs);\n this.viewer.onDocumentChanged(sections);\n if (this.editorModule) {\n this.editorModule.intializeDefaultStyles();\n var style = this.viewer.styles.findByName('Normal');\n paragraph.paragraphFormat.baseStyle = style;\n paragraph.paragraphFormat.listFormat.baseStyle = style;\n }\n }\n };\n /**\n * Gets the style names based on given style type.\n * @param styleType\n */\n DocumentEditor.prototype.getStyleNames = function (styleType) {\n if (this.viewer) {\n return this.viewer.styles.getStyleNames(styleType);\n }\n return [];\n };\n /**\n * Gets the style objects on given style type.\n * @param styleType\n */\n DocumentEditor.prototype.getStyles = function (styleType) {\n if (this.viewer) {\n return this.viewer.styles.getStyles(styleType);\n }\n return [];\n };\n /**\n * Shows the dialog.\n * @param {DialogType} dialogType\n * @returns void\n */\n DocumentEditor.prototype.showDialog = function (dialogType) {\n switch (dialogType) {\n case 'Hyperlink':\n this.showHyperlinkDialog();\n break;\n case 'Table':\n this.showTableDialog();\n break;\n case 'Bookmark':\n this.showBookmarkDialog();\n break;\n case 'TableOfContents':\n this.showTableOfContentsDialog();\n break;\n case 'PageSetup':\n this.showPageSetupDialog();\n break;\n case 'List':\n this.showListDialog();\n break;\n case 'Styles':\n this.showStylesDialog();\n break;\n case 'Style':\n this.showStyleDialog();\n break;\n case 'Paragraph':\n this.showParagraphDialog();\n break;\n case 'Font':\n this.showFontDialog();\n break;\n case 'TableProperties':\n this.showTablePropertiesDialog();\n break;\n case 'BordersAndShading':\n this.showBordersAndShadingDialog();\n break;\n case 'TableOptions':\n this.showTableOptionsDialog();\n break;\n }\n };\n /**\n * Shows the options pane.\n */\n DocumentEditor.prototype.showOptionsPane = function () {\n if (!isNullOrUndefined(this.optionsPaneModule) && !isNullOrUndefined(this.viewer)) {\n this.optionsPaneModule.showHideOptionsPane(true);\n }\n };\n /**\n * Destroys all managed resources used by this object.\n */\n DocumentEditor.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.destroyDependentModules();\n if (!isNullOrUndefined(this.viewer)) {\n this.viewer.destroy();\n }\n this.viewer = undefined;\n if (!isNullOrUndefined(this.element)) {\n this.element.classList.remove('e-documenteditor');\n this.element.innerHTML = '';\n }\n this.element = undefined;\n this.findResultsList = [];\n this.findResultsList = undefined;\n };\n DocumentEditor.prototype.destroyDependentModules = function () {\n if (this.printModule) {\n this.printModule.destroy();\n this.printModule = undefined;\n }\n if (this.sfdtExportModule) {\n this.sfdtExportModule.destroy();\n this.sfdtExportModule = undefined;\n }\n if (this.optionsPaneModule) {\n this.optionsPaneModule.destroy();\n this.optionsPaneModule = undefined;\n }\n if (!isNullOrUndefined(this.hyperlinkDialogModule)) {\n this.hyperlinkDialogModule.destroy();\n this.hyperlinkDialogModule = undefined;\n }\n if (this.searchModule) {\n this.searchModule.destroy();\n this.searchModule = undefined;\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.destroy();\n this.contextMenuModule = undefined;\n }\n if (this.editorModule) {\n this.editorModule.destroy();\n this.editorModule = undefined;\n }\n if (this.selectionModule) {\n this.selectionModule.destroy();\n this.selectionModule = undefined;\n }\n if (this.editorHistoryModule) {\n this.editorHistoryModule.destroy();\n this.editorHistoryModule = undefined;\n }\n if (!isNullOrUndefined(this.paragraphDialogModule)) {\n this.paragraphDialogModule.destroy();\n this.paragraphDialogModule = undefined;\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.destroy();\n this.pageSetupDialogModule = undefined;\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.destroy();\n this.fontDialogModule = undefined;\n }\n if (this.listDialogModule) {\n this.listDialogModule.destroy();\n this.listDialogModule = undefined;\n }\n if (this.imageResizerModule) {\n this.imageResizerModule.destroy();\n this.imageResizerModule = undefined;\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.destroy();\n this.tablePropertiesDialogModule = undefined;\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.destroy();\n this.bordersAndShadingDialogModule = undefined;\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.destroy();\n this.cellOptionsDialogModule = undefined;\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.destroy();\n this.tableOptionsDialogModule = undefined;\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.destroy();\n this.tableDialogModule = undefined;\n }\n if (this.styleDialogModule) {\n this.styleDialogModule = undefined;\n }\n if (this.bookmarkDialogModule) {\n this.bookmarkDialogModule.destroy();\n this.bookmarkDialogModule = undefined;\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.destroy();\n this.styleDialogModule = undefined;\n }\n if (this.textExportModule) {\n this.textExportModule.destroy();\n this.textExportModule = undefined;\n }\n if (this.wordExportModule) {\n this.wordExportModule.destroy();\n this.wordExportModule = undefined;\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.destroy();\n this.tableOfContentsDialogModule = undefined;\n }\n };\n __decorate([\n Property(1)\n ], DocumentEditor.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePrint\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSelection\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditor\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditorHistory\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSfdtExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableWordExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTextExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableOptionsPane\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableContextMenu\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableHyperlinkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBookmarkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOfContentsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSearch\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableParagraphDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableListDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTablePropertiesDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBordersAndShadingDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePageSetupDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableStyleDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableFontDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOptionsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableImageResizer\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"documentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"viewChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"zoomFactorChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"requestNavigate\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"contentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"keyDown\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"searchResultsChange\", void 0);\n DocumentEditor = DocumentEditor_1 = __decorate([\n NotifyPropertyChanges\n ], DocumentEditor);\n return DocumentEditor;\n var DocumentEditor_1;\n}(Component));\nexport { DocumentEditor };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Print class\n */\nvar Print = /** @class */ (function () {\n function Print() {\n }\n /**\n * Gets module name.\n */\n Print.prototype.getModuleName = function () {\n return 'Print';\n };\n /**\n * Prints the current viewer\n * @param viewer\n * @param printWindow\n * @private\n */\n Print.prototype.print = function (viewer, printWindow) {\n this.printWindow(viewer, navigator.userAgent, printWindow);\n };\n /**\n * Opens print window and displays current page to print.\n * @private\n */\n Print.prototype.printWindow = function (viewer, browserUserAgent, printWindow) {\n var height = this.getPageHeight(viewer.pages);\n var width = this.getPageWidth(viewer.pages);\n var printElement = document.createElement('div');\n printElement.style.width = '100%';\n printElement.style.height = '100%';\n printElement.style.overflow = 'scroll';\n // Rendering canvas to print\n this.generatePrintContent(viewer, printElement);\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n if ((browserUserAgent.indexOf('Chrome') !== -1) || (browserUserAgent.indexOf('Firefox')) !== -1) {\n // Chrome and Firefox\n printWindow.document.write('');\n // tslint:disable-next-line:max-line-length\n printWindow.document.write('
    ');\n }\n else {\n // Internet Explorer and Edge\n // tslint:disable-next-line:max-line-length\n printWindow.document.write('
    ');\n }\n // tslint:disable-next-line:max-line-length\n printWindow.document.write(printElement.innerHTML + '
    ');\n printElement = undefined;\n printWindow.document.close();\n printWindow.focus();\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n };\n /**\n * Generates print content.\n * @private\n */\n Print.prototype.generatePrintContent = function (viewer, element) {\n // Rendering canvas to print\n var htmlString = '';\n for (var i = 0; i < viewer.pages.length; i++) {\n var page = viewer.pages[i];\n var pageHeight = page.boundingRectangle.height;\n var pageWidth = page.boundingRectangle.width;\n viewer.render.isPrinting = true;\n viewer.render.renderWidgets(page, 0, 0, 0, 0);\n var canvasURL = viewer.render.pageCanvas.toDataURL();\n viewer.render.isPrinting = false;\n // tslint:disable-next-line:max-line-length\n htmlString += '

    ';\n }\n element.innerHTML = htmlString;\n };\n /**\n * Gets page width.\n * @param pages\n * @private\n */\n Print.prototype.getPageWidth = function (pages) {\n var width = 0;\n for (var i = 0; i < pages.length; i++) {\n if (width < pages[i].boundingRectangle.width) {\n width = pages[i].boundingRectangle.width;\n }\n }\n return width;\n };\n /**\n * Gets page height.\n * @private\n */\n Print.prototype.getPageHeight = function (pages) {\n var height = 0;\n for (var i = 0; i < pages.length; i++) {\n if (height < pages[i].boundingRectangle.height) {\n height = pages[i].boundingRectangle.height;\n }\n }\n return height;\n };\n /**\n * @private\n */\n Print.prototype.destroy = function () {\n return;\n };\n return Print;\n}());\nexport { Print };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\n/**\n * @private\n */\nvar WSectionFormat = /** @class */ (function () {\n function WSectionFormat(node) {\n this.uniqueSectionFormat = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WSectionFormat.prototype, \"headerDistance\", {\n get: function () {\n return this.getPropertyValue('headerDistance');\n },\n set: function (value) {\n this.setPropertyValue('headerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"footerDistance\", {\n get: function () {\n return this.getPropertyValue('footerDistance');\n },\n set: function (value) {\n this.setPropertyValue('footerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentFirstPage\", {\n get: function () {\n return this.getPropertyValue('differentFirstPage');\n },\n set: function (value) {\n this.setPropertyValue('differentFirstPage', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentOddAndEvenPages\", {\n get: function () {\n return this.getPropertyValue('differentOddAndEvenPages');\n },\n set: function (value) {\n this.setPropertyValue('differentOddAndEvenPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageHeight\", {\n get: function () {\n return this.getPropertyValue('pageHeight');\n },\n set: function (value) {\n this.setPropertyValue('pageHeight', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageWidth\", {\n get: function () {\n return this.getPropertyValue('pageWidth');\n },\n set: function (value) {\n this.setPropertyValue('pageWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n WSectionFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = undefined;\n };\n WSectionFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n return this.uniqueSectionFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WSectionFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'headerDistance':\n value = 36;\n break;\n case 'footerDistance':\n value = 36;\n break;\n case 'differentFirstPage':\n value = false;\n break;\n case 'differentOddAndEvenPages':\n value = false;\n break;\n case 'pageWidth':\n value = 612;\n break;\n case 'pageHeight':\n value = 792;\n break;\n case 'leftMargin':\n value = 72;\n break;\n case 'topMargin':\n value = 72;\n break;\n case 'rightMargin':\n value = 72;\n break;\n case 'bottomMargin':\n value = 72;\n break;\n }\n return value;\n };\n WSectionFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueSectionFormat) && this.uniqueSectionFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueSectionFormat.propertiesHash.get(propertyType);\n }\n }\n return WSectionFormat.getPropertyDefaultValue(property);\n };\n WSectionFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WSectionFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueSectionFormat)) {\n this.initializeUniqueSectionFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n if (this.uniqueSectionFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueSectionFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.updateUniqueFormat(this.uniqueSectionFormat, property, value);\n }\n };\n WSectionFormat.prototype.initializeUniqueSectionFormat = function (property, propValue) {\n var uniqueSectionFormatTemp = new Dictionary();\n this.addUniqueSectionFormat('headerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentFirstPage', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentOddAndEvenPages', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageWidth', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageHeight', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('leftMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('topMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('rightMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('bottomMargin', property, propValue, uniqueSectionFormatTemp);\n // tslint:disable-next-line:max-line-length\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(uniqueSectionFormatTemp, WSectionFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WSectionFormat.prototype.addUniqueSectionFormat = function (property, modifiedProperty, propValue, uniqueSectionFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueSectionFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueSectionFormatTemp.add(propertyType, WSectionFormat.getPropertyDefaultValue(property));\n }\n };\n WSectionFormat.prototype.copyFormat = function (format, history) {\n if (history && (history.isUndoing || history.isRedoing)) {\n this.uniqueSectionFormat = format.uniqueSectionFormat;\n }\n else {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueSectionFormat) && format.uniqueSectionFormat.propertiesHash) {\n this.updateUniqueSectionFormat(format);\n }\n }\n }\n };\n WSectionFormat.prototype.updateUniqueSectionFormat = function (format) {\n var hash = undefined;\n if (this.uniqueSectionFormat) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n if (this.uniqueSectionFormat.referenceCount === 0) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n this.uniqueSectionFormat = undefined;\n }\n }\n this.uniqueSectionFormat = new WUniqueFormat(WSectionFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(hash, WSectionFormat.uniqueFormatType);\n };\n WSectionFormat.prototype.cloneFormat = function () {\n var format = new WSectionFormat();\n format.uniqueSectionFormat = this.uniqueSectionFormat;\n return format;\n };\n WSectionFormat.clear = function () {\n this.uniqueSectionFormats.clear();\n };\n WSectionFormat.uniqueSectionFormats = new WUniqueFormats();\n WSectionFormat.uniqueFormatType = 10;\n return WSectionFormat;\n}());\nexport { WSectionFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WLevelOverride = /** @class */ (function () {\n function WLevelOverride() {\n }\n WLevelOverride.prototype.destroy = function () {\n if (!isNullOrUndefined(this.overrideListLevel)) {\n this.overrideListLevel.destroy();\n }\n this.levelNumber = undefined;\n this.startAt = undefined;\n this.overrideListLevel = undefined;\n };\n return WLevelOverride;\n}());\nexport { WLevelOverride };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WLevelOverride } from './level-override';\n/**\n * @private\n */\nvar WList = /** @class */ (function () {\n function WList() {\n this.listId = -1;\n this.sourceListId = -1;\n this.abstractListId = -1;\n this.abstractList = undefined;\n this.levelOverrides = [];\n }\n WList.prototype.getListLevel = function (levelNumber) {\n var listLevel = undefined;\n var levelOverride = this.getLevelOverride(levelNumber);\n if (!isNullOrUndefined(levelOverride) && !isNullOrUndefined(levelOverride.overrideListLevel)) {\n listLevel = levelOverride.overrideListLevel;\n }\n else {\n listLevel = this.abstractList.levels[levelNumber];\n }\n return listLevel;\n };\n WList.prototype.getLevelOverride = function (levelNumber) {\n for (var i = 0; i < this.levelOverrides.length; i++) {\n if (this.levelOverrides[i] instanceof WLevelOverride) {\n var levelOverride = this.levelOverrides[i];\n if (levelOverride.levelNumber === levelNumber) {\n return levelOverride;\n }\n }\n }\n return undefined;\n };\n WList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levelOverrides)) {\n this.levelOverrides = [];\n }\n this.abstractListId = undefined;\n this.listId = undefined;\n this.sourceListId = undefined;\n this.levelOverrides = undefined;\n };\n WList.prototype.mergeList = function (list) {\n if (!isNullOrUndefined(this.abstractListId) && this.abstractListId !== -1) {\n this.abstractListId = list.abstractListId;\n }\n if (!isNullOrUndefined(this.listId) && this.listId !== -1) {\n this.listId = list.listId;\n }\n if (!isNullOrUndefined(this.sourceListId) && this.sourceListId !== -1) {\n this.sourceListId = list.sourceListId;\n }\n if (!isNullOrUndefined(this.levelOverrides) && this.levelOverrides.length !== 0) {\n this.levelOverrides = list.levelOverrides;\n }\n };\n return WList;\n}());\nexport { WList };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle } from './style';\nimport { WList } from '../list/list';\n/**\n * @private\n */\nvar WListFormat = /** @class */ (function () {\n function WListFormat(node) {\n this.uniqueListFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.list = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WListFormat.prototype, \"listId\", {\n get: function () {\n return this.getPropertyValue('listId');\n },\n set: function (listId) {\n this.setPropertyValue('listId', listId);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevelNumber\", {\n get: function () {\n return this.getPropertyValue('listLevelNumber');\n },\n set: function (value) {\n this.setPropertyValue('listLevelNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevel\", {\n get: function () {\n var list = undefined;\n if (!isNullOrUndefined(this.list)) {\n list = this.list;\n }\n else {\n /* tslint:disable-next-line:no-any */\n var baseListStyle = this.baseStyle;\n while (!isNullOrUndefined(baseListStyle)) {\n if (baseListStyle.paragraphFormat.listFormat.list) {\n list = baseListStyle.paragraphFormat.listFormat.list;\n break;\n }\n else {\n baseListStyle = baseListStyle.basedOn;\n }\n }\n }\n if (!isNullOrUndefined(list)) {\n return list.getListLevel(this.listLevelNumber);\n }\n else {\n return undefined;\n }\n },\n enumerable: true,\n configurable: true\n });\n WListFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n if (this.baseStyle instanceof WParagraphStyle) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.paragraphFormat.listFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n return baseStyle.paragraphFormat.listFormat.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n return WListFormat.getPropertyDefaultValue(property);\n };\n WListFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListFormat)) {\n this.initializeUniqueListFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n if (this.uniqueListFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueListFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueListFormat = WListFormat.uniqueListFormats.updateUniqueFormat(this.uniqueListFormat, property, value);\n }\n };\n WListFormat.prototype.initializeUniqueListFormat = function (property, propValue) {\n var uniqueListFormatTemp = new Dictionary();\n this.addUniqueListFormat('listId', property, propValue, uniqueListFormatTemp);\n this.addUniqueListFormat('listLevelNumber', property, propValue, uniqueListFormatTemp);\n this.uniqueListFormat = WListFormat.uniqueListFormats.addUniqueFormat(uniqueListFormatTemp, WListFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WListFormat.prototype.addUniqueListFormat = function (property, modifiedProperty, propValue, uniqueListFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueListFormatTemp.add(propertyType, propValue);\n }\n };\n WListFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'listId':\n value = -1;\n break;\n case 'listLevelNumber':\n value = 0;\n break;\n }\n return value;\n };\n WListFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueListFormat)) {\n this.listId = format.listId;\n this.listLevelNumber = format.listLevelNumber;\n }\n if (!isNullOrUndefined(format.baseStyle)) {\n this.baseStyle = format.baseStyle;\n }\n if (!isNullOrUndefined(format.list)) {\n this.list = format.list;\n }\n }\n };\n WListFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueListFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n return this.uniqueListFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WListFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.referenceCount === 0) {\n WListFormat.uniqueListFormats.remove(this.uniqueListFormat);\n }\n this.uniqueListFormat = undefined;\n this.list = undefined;\n };\n WListFormat.prototype.destroy = function () {\n this.clearFormat();\n };\n WListFormat.clear = function () {\n this.uniqueListFormats.clear();\n };\n WListFormat.prototype.ApplyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n };\n /**\n * For internal use\n * @private\n */\n WListFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n /**\n * For internal use\n * @private\n */\n WListFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('listId'))) {\n this.listId = format.getValue('listId');\n }\n if (isNullOrUndefined(this.getValue('listLevelNumber'))) {\n this.listLevelNumber = format.getValue('listLevelNumber');\n }\n if (!isNullOrUndefined(format.list)) {\n if (isNullOrUndefined(this.list)) {\n this.list = new WList();\n }\n this.list.mergeList(format.list);\n }\n };\n WListFormat.uniqueListFormats = new WUniqueFormats();\n WListFormat.uniqueFormatType = 7;\n return WListFormat;\n}());\nexport { WListFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WListFormat } from './list-format';\nimport { WParagraphStyle } from './style';\n/**\n * @private\n */\nvar WTabStop = /** @class */ (function () {\n function WTabStop() {\n }\n Object.defineProperty(WTabStop.prototype, \"position\", {\n get: function () {\n return this.positionIn;\n },\n set: function (value) {\n this.positionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"deletePosition\", {\n get: function () {\n return this.deletePositionIn;\n },\n set: function (value) {\n this.deletePositionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabJustification\", {\n get: function () {\n return this.justification;\n },\n set: function (value) {\n this.justification = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabLeader\", {\n get: function () {\n return this.leader;\n },\n set: function (value) {\n this.leader = value;\n },\n enumerable: true,\n configurable: true\n });\n WTabStop.prototype.destroy = function () {\n this.position = undefined;\n this.deletePosition = undefined;\n this.tabJustification = undefined;\n this.leader = undefined;\n };\n return WTabStop;\n}());\nexport { WTabStop };\n/**\n * @private\n */\nvar WParagraphFormat = /** @class */ (function () {\n function WParagraphFormat(node) {\n this.uniqueParagraphFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.tabs = undefined;\n this.ownerBase = node;\n this.listFormat = new WListFormat(this);\n this.tabs = [];\n }\n WParagraphFormat.prototype.getUpdatedTabs = function () {\n var inTabs = [];\n if (!isNullOrUndefined(this.baseStyle)) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseStyle;\n var tabStops = new Dictionary();\n while (!isNullOrUndefined(baseStyle)) {\n for (var _i = 0, _a = baseStyle.paragraphFormat.tabs; _i < _a.length; _i++) {\n var tab = _a[_i];\n if (!tabStops.containsKey(tab.position)) {\n tabStops.add(tab.position, tab);\n }\n }\n baseStyle = baseStyle.basedOn;\n }\n for (var _b = 0, _c = tabStops.keys; _b < _c.length; _b++) {\n var key = _c[_b];\n if (!this.hasTabStop(key)) {\n inTabs.push(tabStops.get(key));\n }\n }\n inTabs = inTabs.concat(this.tabs.filter(function (a) { return (a.position !== 0 && a.deletePosition === 0); }));\n inTabs = inTabs.sort(function (a, b) { return a.position - b.position; });\n }\n return inTabs;\n };\n WParagraphFormat.prototype.hasTabStop = function (position) {\n for (var i = 0; i < this.tabs.length; i++) {\n if (this.tabs[i].deletePosition === position) {\n return true;\n }\n }\n return false;\n };\n Object.defineProperty(WParagraphFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"rightIndent\", {\n get: function () {\n return this.getPropertyValue('rightIndent');\n },\n set: function (value) {\n this.setPropertyValue('rightIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"firstLineIndent\", {\n get: function () {\n return this.getPropertyValue('firstLineIndent');\n },\n set: function (value) {\n this.setPropertyValue('firstLineIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"beforeSpacing\", {\n get: function () {\n return this.getPropertyValue('beforeSpacing');\n },\n set: function (value) {\n this.setPropertyValue('beforeSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"afterSpacing\", {\n get: function () {\n return this.getPropertyValue('afterSpacing');\n },\n set: function (value) {\n this.setPropertyValue('afterSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacing\", {\n get: function () {\n return this.getPropertyValue('lineSpacing');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacingType\", {\n get: function () {\n return this.getPropertyValue('lineSpacingType');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacingType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"textAlignment\", {\n get: function () {\n return this.getPropertyValue('textAlignment');\n },\n set: function (value) {\n this.setPropertyValue('textAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"outlineLevel\", {\n get: function () {\n return this.getPropertyValue('outlineLevel');\n },\n set: function (value) {\n this.setPropertyValue('outlineLevel', value);\n },\n enumerable: true,\n configurable: true\n });\n WParagraphFormat.prototype.getListFormatParagraphFormat = function (property) {\n if (this.listFormat.listId > -1 && this.listFormat.listLevelNumber > -1) {\n var level = this.listFormat.listLevel;\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(level) && !isNullOrUndefined(level.paragraphFormat.uniqueParagraphFormat) && level.paragraphFormat.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return level.paragraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n WParagraphFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var ifListFormat = this.getListFormatParagraphFormat(property);\n if (!isNullOrUndefined(ifListFormat)) {\n return ifListFormat;\n }\n else {\n if (this.baseStyle instanceof WParagraphStyle) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.paragraphFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n return baseStyle.paragraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WParagraphFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n var docParagraphFormat = this.documentParagraphFormat();\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(docParagraphFormat) && !isNullOrUndefined(docParagraphFormat.uniqueParagraphFormat) && docParagraphFormat.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return docParagraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n else {\n return WParagraphFormat.getPropertyDefaultValue(property);\n }\n };\n WParagraphFormat.prototype.documentParagraphFormat = function () {\n var docParagraphFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.bodyWidget)) {\n docParagraphFormat = this.ownerBase.bodyWidget.page.viewer.paragraphFormat;\n }\n }\n return docParagraphFormat;\n };\n WParagraphFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WParagraphFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueParagraphFormat)) {\n this.initializeUniqueParagraphFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n if (this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueParagraphFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.updateUniqueFormat(this.uniqueParagraphFormat, property, value);\n }\n };\n WParagraphFormat.prototype.initializeUniqueParagraphFormat = function (property, propValue) {\n var uniqueParaFormatTemp = new Dictionary();\n this.addUniqueParaFormat('leftIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('rightIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('firstLineIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('textAlignment', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('beforeSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('afterSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacingType', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('outlineLevel', property, propValue, uniqueParaFormatTemp);\n // tslint:disable-next-line:max-line-length\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(uniqueParaFormatTemp, WParagraphFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WParagraphFormat.prototype.addUniqueParaFormat = function (property, modifiedProperty, propValue, uniqueParaFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueParaFormatTemp.add(propertyType, propValue);\n }\n };\n WParagraphFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftIndent':\n value = 0;\n break;\n case 'rightIndent':\n value = 0;\n break;\n case 'firstLineIndent':\n value = 0;\n break;\n case 'textAlignment':\n value = 'Left';\n break;\n case 'beforeSpacing':\n value = 0;\n break;\n case 'afterSpacing':\n value = 0;\n break;\n case 'lineSpacing':\n value = 1;\n break;\n case 'lineSpacingType':\n value = 'Multiple';\n break;\n case 'styleName':\n value = 'Normal';\n break;\n case 'outlineLevel':\n value = 'BodyText';\n break;\n }\n return value;\n };\n WParagraphFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.clearFormat();\n }\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = undefined;\n this.baseStyle = undefined;\n };\n WParagraphFormat.prototype.destroy = function () {\n this.clearFormat();\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.destroy();\n }\n this.listFormat = undefined;\n if (this.tabs !== undefined) {\n for (var i = 0; i < this.tabs.length; i++) {\n this.tabs[i].destroy();\n }\n this.tabs = undefined;\n }\n };\n WParagraphFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueParagraphFormat)) {\n this.updateUniqueParagraphFormat(format);\n }\n if (!isNullOrUndefined(format.listFormat)) {\n this.listFormat.copyFormat(format.listFormat);\n }\n if (!isNullOrUndefined(format.baseStyle)) {\n this.baseStyle = format.baseStyle;\n }\n if (!isNullOrUndefined(format.tabs)) {\n for (var i = 0; i < format.tabs.length; i++) {\n this.tabs[i] = format.tabs[i];\n }\n }\n }\n };\n WParagraphFormat.prototype.updateUniqueParagraphFormat = function (format) {\n var hash = undefined;\n if (this.uniqueParagraphFormat) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n if (this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n this.uniqueParagraphFormat = undefined;\n }\n }\n this.uniqueParagraphFormat = new WUniqueFormat(WParagraphFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(hash, WParagraphFormat.uniqueFormatType);\n };\n WParagraphFormat.prototype.cloneFormat = function () {\n var format = new WParagraphFormat(undefined);\n format.uniqueParagraphFormat = this.uniqueParagraphFormat;\n format.baseStyle = this.baseStyle;\n if (isNullOrUndefined(this.listFormat)) {\n format.listFormat = undefined;\n }\n else {\n format.listFormat = new WListFormat();\n format.listFormat.listId = this.listFormat.listId;\n format.listFormat.listLevelNumber = this.listFormat.listLevelNumber;\n }\n return format;\n };\n WParagraphFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && !isNullOrUndefined(this.uniqueParagraphFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n return this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WParagraphFormat.clear = function () {\n this.uniqueParagraphFormats.clear();\n };\n WParagraphFormat.prototype.ApplyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n this.listFormat.ApplyStyle(this.baseStyle);\n };\n /**\n * For internal use\n * @private\n */\n WParagraphFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n /**\n * For internal use\n * @private\n */\n WParagraphFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('leftIndent'))) {\n this.leftIndent = format.getValue('leftIndent');\n }\n if (isNullOrUndefined(this.getValue('rightIndent'))) {\n this.rightIndent = format.getValue('rightIndent');\n }\n if (isNullOrUndefined(this.getValue('firstLineIndent'))) {\n this.firstLineIndent = format.getValue('firstLineIndent');\n }\n if (isNullOrUndefined(this.getValue('beforeSpacing'))) {\n this.beforeSpacing = format.getValue('beforeSpacing');\n }\n if (isNullOrUndefined(this.getValue('afterSpacing'))) {\n this.afterSpacing = format.getValue('afterSpacing');\n }\n if (isNullOrUndefined(this.getValue('lineSpacing'))) {\n this.lineSpacing = format.getValue('lineSpacing');\n }\n if (isNullOrUndefined(this.getValue('lineSpacingType'))) {\n this.lineSpacingType = format.getValue('lineSpacingType');\n }\n if (isNullOrUndefined(this.getValue('textAlignment'))) {\n this.textAlignment = format.getValue('textAlignment');\n }\n if (isNullOrUndefined(this.getValue('outlineLevel'))) {\n this.outlineLevel = format.getValue('outlineLevel');\n }\n if (isNullOrUndefined(this.listFormat)) {\n this.listFormat.mergeFormat(format.listFormat);\n }\n };\n WParagraphFormat.uniqueParagraphFormats = new WUniqueFormats();\n WParagraphFormat.uniqueFormatType = 3;\n return WParagraphFormat;\n}());\nexport { WParagraphFormat };\n","import { ParagraphWidget } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle } from './style';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WCharacterFormat = /** @class */ (function () {\n function WCharacterFormat(node) {\n this.uniqueCharacterFormat = undefined;\n this.ownerBase = undefined;\n this.baseCharStyle = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WCharacterFormat.prototype, \"bold\", {\n get: function () {\n return this.getPropertyValue('bold');\n },\n set: function (value) {\n this.setPropertyValue('bold', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"italic\", {\n get: function () {\n return this.getPropertyValue('italic');\n },\n set: function (value) {\n this.setPropertyValue('italic', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontSize\", {\n get: function () {\n return this.getPropertyValue('fontSize');\n },\n set: function (value) {\n this.setPropertyValue('fontSize', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamily\", {\n get: function () {\n return this.getPropertyValue('fontFamily');\n },\n set: function (value) {\n this.setPropertyValue('fontFamily', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"underline\", {\n get: function () {\n return this.getPropertyValue('underline');\n },\n set: function (value) {\n this.setPropertyValue('underline', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"strikethrough\", {\n get: function () {\n return this.getPropertyValue('strikethrough');\n },\n set: function (value) {\n this.setPropertyValue('strikethrough', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"baselineAlignment\", {\n get: function () {\n return this.getPropertyValue('baselineAlignment');\n },\n set: function (value) {\n this.setPropertyValue('baselineAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"highlightColor\", {\n get: function () {\n return this.getPropertyValue('highlightColor');\n },\n set: function (value) {\n this.setPropertyValue('highlightColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontColor\", {\n get: function () {\n return this.getPropertyValue('fontColor');\n },\n set: function (value) {\n this.setPropertyValue('fontColor', value);\n },\n enumerable: true,\n configurable: true\n });\n WCharacterFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var charStyleValue = this.checkCharacterStyle(property);\n if (!isNullOrUndefined(charStyleValue)) {\n return charStyleValue;\n }\n else {\n var baseStyleValue = this.checkBaseStyle(property);\n if (!isNullOrUndefined(baseStyleValue)) {\n return baseStyleValue;\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WCharacterFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n var docCharacterFormat = this.documentCharacterFormat();\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(docCharacterFormat) && !isNullOrUndefined(docCharacterFormat.uniqueCharacterFormat) && docCharacterFormat.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return docCharacterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n else {\n return WCharacterFormat.getPropertyDefaultValue(property);\n }\n };\n WCharacterFormat.prototype.documentCharacterFormat = function () {\n var docCharacterFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph)) {\n docCharacterFormat = this.ownerBase.paragraph.bodyWidget.page.viewer.characterFormat;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase.bodyWidget)) {\n docCharacterFormat = this.ownerBase.bodyWidget.page.viewer.characterFormat;\n }\n }\n }\n return docCharacterFormat;\n };\n WCharacterFormat.prototype.checkBaseStyle = function (property) {\n /* tslint:disable-next-line:no-any */\n var baseStyle;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph)) {\n baseStyle = this.ownerBase.paragraph.paragraphFormat.baseStyle;\n }\n else {\n // tslint:disable-next-line:max-line-length\n if ((this.ownerBase instanceof ParagraphWidget) && !isNullOrUndefined(this.ownerBase.paragraphFormat)) {\n baseStyle = this.ownerBase.paragraphFormat.baseStyle;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase instanceof WParagraphStyle)) {\n baseStyle = this.ownerBase.basedOn;\n }\n }\n }\n }\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.characterFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n return undefined;\n };\n WCharacterFormat.prototype.checkCharacterStyle = function (property) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseCharStyle;\n if (!isNullOrUndefined(baseStyle)) {\n while (!isNullOrUndefined(baseStyle) && baseStyle.name !== 'Default Paragraph Font') {\n var hasKey = baseStyle.characterFormat.hasValue(property);\n if (hasKey) {\n var returnPropertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(returnPropertyType);\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n }\n return undefined;\n };\n WCharacterFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCharacterFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCharacterFormat)) {\n this.initializeUniqueCharacterFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n if (this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType) &&\n // tslint:disable-next-line:max-line-length\n this.uniqueCharacterFormat.propertiesHash.get(propertyType) === value) {\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.updateUniqueFormat(this.uniqueCharacterFormat, property, value);\n }\n };\n WCharacterFormat.prototype.initializeUniqueCharacterFormat = function (property, propValue) {\n var uniqueCharFormatTemp = new Dictionary();\n this.addUniqueCharacterFormat('fontColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamily', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontSize', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bold', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('italic', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('underline', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('strikethrough', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('baselineAlignment', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('highlightColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('styleName', property, propValue, uniqueCharFormatTemp);\n // tslint:disable-next-line:max-line-length\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(uniqueCharFormatTemp, WCharacterFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WCharacterFormat.prototype.addUniqueCharacterFormat = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n };\n WCharacterFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'bold':\n value = false;\n break;\n case 'italic':\n value = false;\n break;\n case 'fontSize':\n value = 11;\n break;\n case 'underline':\n value = 'None';\n break;\n case 'strikethrough':\n value = 'None';\n break;\n case 'baselineAlignment':\n value = 'Normal';\n break;\n case 'highlightColor':\n value = 'NoColor';\n break;\n case 'fontColor':\n value = '#000000';\n break;\n case 'fontFamily':\n value = 'Calibri';\n break;\n case 'styleName':\n value = 'Default Paragraph Font';\n break;\n }\n return value;\n };\n WCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.fontFamily === format.fontFamily\n && this.bold === format.bold\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.underline === format.underline\n && this.fontColor === format.fontColor\n && this.strikethrough === format.strikethrough\n && this.highlightColor === format.highlightColor);\n };\n WCharacterFormat.prototype.isSameFormat = function (format) {\n return this.baseCharStyle === format.baseCharStyle &&\n this.uniqueCharacterFormat === format.uniqueCharacterFormat;\n };\n WCharacterFormat.prototype.cloneFormat = function () {\n var format = new WCharacterFormat(undefined);\n format.uniqueCharacterFormat = this.uniqueCharacterFormat;\n format.baseCharStyle = this.baseCharStyle;\n return format;\n };\n WCharacterFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && !isNullOrUndefined(this.uniqueCharacterFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n return this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCharacterFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = undefined;\n this.baseCharStyle = undefined;\n };\n WCharacterFormat.prototype.destroy = function () {\n this.clearFormat();\n };\n WCharacterFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCharacterFormat) && format.uniqueCharacterFormat.propertiesHash) {\n this.updateUniqueCharacterFormat(format);\n }\n if (!isNullOrUndefined(format.baseCharStyle)) {\n this.baseCharStyle = format.baseCharStyle;\n }\n }\n };\n WCharacterFormat.prototype.updateUniqueCharacterFormat = function (format) {\n var hash = undefined;\n if (this.uniqueCharacterFormat) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n if (this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n this.uniqueCharacterFormat = undefined;\n }\n }\n this.uniqueCharacterFormat = new WUniqueFormat(WCharacterFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(hash, WCharacterFormat.uniqueFormatType);\n };\n WCharacterFormat.clear = function () {\n this.uniqueCharacterFormats.clear();\n };\n WCharacterFormat.prototype.ApplyStyle = function (baseCharStyle) {\n this.baseCharStyle = baseCharStyle;\n };\n /**\n * For internal use\n * @private\n */\n WCharacterFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n /**\n * For internal use\n * @private\n */\n WCharacterFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('bold'))) {\n this.bold = format.getValue('bold');\n }\n if (isNullOrUndefined(this.getValue('italic'))) {\n this.italic = format.getValue('italic');\n }\n if (isNullOrUndefined(this.getValue('fontSize'))) {\n this.fontSize = format.getValue('fontSize');\n }\n if (isNullOrUndefined(this.getValue('fontFamily'))) {\n this.fontFamily = format.getValue('fontFamily');\n }\n if (isNullOrUndefined(this.getValue('underline'))) {\n this.underline = format.getValue('underline');\n }\n if (isNullOrUndefined(this.getValue('strikethrough'))) {\n this.strikethrough = format.getValue('strikethrough');\n }\n if (isNullOrUndefined(this.getValue('baselineAlignment'))) {\n this.baselineAlignment = format.getValue('baselineAlignment');\n }\n if (isNullOrUndefined(this.getValue('highlightColor'))) {\n this.highlightColor = format.getValue('highlightColor');\n }\n if (isNullOrUndefined(this.getValue('fontColor'))) {\n this.fontColor = format.getValue('fontColor');\n }\n };\n WCharacterFormat.uniqueCharacterFormats = new WUniqueFormats();\n WCharacterFormat.uniqueFormatType = 2;\n return WCharacterFormat;\n}());\nexport { WCharacterFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FieldElementBox } from '../viewer/page';\n/**\n * @private\n */\nvar HelperMethods = /** @class */ (function () {\n function HelperMethods() {\n }\n /**\n * Inserts text at specified index in string.\n * @param {string} spanText\n * @param {number} index\n * @param {string} text\n * @private\n */\n HelperMethods.insert = function (spanText, index, text) {\n if (index >= 0) {\n return [spanText.slice(0, index) + text + spanText.slice(index)].join('');\n }\n else {\n return text + this;\n }\n };\n /**\n * Removes text from specified index in string.\n * @param {string} text\n * @param {number} index\n * @param {number} length\n * @private\n */\n HelperMethods.remove = function (text, index, length) {\n if (index === 0) {\n return text.substring(index + 1, text.length);\n }\n else {\n return text.substring(0, index) + text.substring(index + 1, text.length);\n }\n };\n /**\n * Returns the index of word split character in a string.\n * @param {string} text\n * @param {string[]} wordSplitCharacter\n * @private\n */\n /* tslint:disable:no-any */\n HelperMethods.indexOfAny = function (text, wordSplitCharacter) {\n var index = undefined;\n for (var j = 0; j < wordSplitCharacter.length; j++) {\n var temp = text.indexOf(wordSplitCharacter[j]);\n if (temp !== -1 && isNullOrUndefined(index)) {\n index = temp;\n }\n else if (temp !== -1 && temp < index) {\n index = temp;\n }\n }\n return isNullOrUndefined(index) ? -1 : index;\n };\n /**\n * Returns the last index of word split character in a string.\n * @param {string} text\n * @param {string[]} wordSplitCharacter\n * @private\n */\n HelperMethods.lastIndexOfAny = function (text, wordSplitCharacter) {\n for (var i = text.length - 1; i >= 0; i--) {\n for (var j = 0; j <= wordSplitCharacter.length - 1; j++) {\n if (text[i] === wordSplitCharacter[j]) {\n return i;\n }\n }\n }\n return -1;\n };\n /**\n * Adds css styles to document header.\n * @param {string} css\n * @private\n */\n HelperMethods.addCssStyle = function (css) {\n var style = document.createElement('style');\n if (style.style.cssText) {\n style.style.cssText = css;\n }\n else {\n style.appendChild(document.createTextNode(css));\n }\n document.getElementsByTagName('head')[0].appendChild(style);\n };\n /**\n * Gets highlight color code.\n * @param {HighlightColor} highlightColor\n * @private\n */\n HelperMethods.getHighlightColorCode = function (highlightColor) {\n var color = '#ffffff';\n switch (highlightColor) {\n case 'Yellow':\n color = '#ffff00';\n break;\n case 'BrightGreen':\n color = '#00ff00';\n break;\n case 'Turquoise':\n color = '#00ffff';\n break;\n case 'Pink':\n color = '#ff00ff';\n break;\n case 'Blue':\n color = '#0000ff';\n break;\n case 'Red':\n color = '#ff0000';\n break;\n case 'DarkBlue':\n color = '#000080';\n break;\n case 'Teal':\n color = '#008080';\n break;\n case 'Green':\n color = '#008000';\n break;\n case 'Violet':\n color = '#800080';\n break;\n case 'DarkRed':\n color = '#800000';\n break;\n case 'DarkYellow':\n color = '#808000';\n break;\n case 'Gray50':\n color = '#808080';\n break;\n case 'Gray25':\n color = '#c0c0c0';\n break;\n case 'Black':\n color = '#000000';\n break;\n }\n return color;\n };\n /**\n * Converts point to pixel.\n * @param {number} point\n * @private\n */\n HelperMethods.convertPointToPixel = function (point) {\n var pixel = HelperMethods.round((point * 96 / 72), 5);\n return pixel;\n };\n /**\n * Converts pixel to point.\n * @param {number} pixel\n * @private\n */\n HelperMethods.convertPixelToPoint = function (pixel) {\n var point = HelperMethods.round((pixel * 72 / 96), 5);\n return point;\n };\n /**\n * Return true if field linked\n * @private\n */\n HelperMethods.isLinkedFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n return !isNullOrUndefined(inline.fieldEnd);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n return !isNullOrUndefined(inline.fieldBegin) && !isNullOrUndefined(inline.fieldEnd);\n }\n else {\n return !isNullOrUndefined(inline.fieldBegin);\n }\n };\n /**\n * Removes white space in a string.\n * @param {string} text\n * @private\n */\n HelperMethods.removeSpace = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n for (var i = 0; i < text.length; i++) {\n if (text.charAt(i) === ' ') {\n //replace the space by empty string in string\n text = text.replace(' ', '');\n }\n }\n }\n return text;\n };\n /**\n * Trims white space at start of the string.\n * @param {string} text\n * @private\n */\n HelperMethods.trimStart = function (text) {\n var i = 0;\n for (i; i < text.length; i++) {\n if (text[i] !== ' ') {\n break;\n }\n }\n return text.substring(i, text.length);\n };\n /**\n * Trims white space at end of the string.\n * @param {string} text\n * @private\n */\n HelperMethods.trimEnd = function (text) {\n var i = text.length - 1;\n for (i; i >= 0; i--) {\n if (text[i] !== ' ') {\n break;\n }\n }\n return text.substring(0, i + 1);\n };\n /**\n * Checks whether string ends with whitespace.\n * @param {string} text\n * @private\n */\n HelperMethods.endsWith = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n return text[text.length - 1] === ' ';\n }\n return false;\n };\n /**\n * @private\n * Write Characterformat\n * @param {any} characterFormat\n * @param {boolean} isInline\n * @param {WCharacterFormat} format\n */\n HelperMethods.writeCharacterFormat = function (characterFormat, isInline, format) {\n characterFormat.bold = isInline ? format.bold : format.getValue('bold');\n characterFormat.italic = isInline ? format.italic : format.getValue('italic');\n characterFormat.fontSize = isInline ? format.fontSize : format.getValue('fontSize');\n characterFormat.fontFamily = isInline ? format.fontFamily : format.getValue('fontFamily');\n characterFormat.underline = isInline ? format.underline : format.getValue('underline');\n characterFormat.strikethrough = isInline ? format.strikethrough : format.getValue('strikethrough');\n characterFormat.baselineAlignment = isInline ? format.baselineAlignment : format.getValue('baselineAlignment');\n characterFormat.highlightColor = isInline ? format.highlightColor : format.getValue('highlightColor');\n characterFormat.fontColor = isInline ? format.fontColor : format.getValue('fontColor');\n characterFormat.styleName = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : undefined;\n };\n /* tslint:enable:no-any */\n /**\n * Rounds the values with specified decimal digits.\n * @param {number} value\n * @param {number} decimalDigits\n * @private\n */\n HelperMethods.round = function (value, decimalDigits) {\n var temp = value;\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp * 10;\n }\n temp = Math.round(temp);\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp / 10;\n }\n return temp;\n };\n /**\n * @private\n */\n HelperMethods.wordBefore = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordAfter = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordSplitCharacters = [' ', ',', '.', ':', ';', '<', '>', '=',\n '+', '-', '_', '{', '}', '[', ']', '`', '~', '!', '@', '#', '$', '%', '^', '&',\n '*', '(', ')', '\"', '?', '/', '|', '\\\\', '”'];\n return HelperMethods;\n}());\nexport { HelperMethods };\n/**\n * @private\n */\nvar Point = /** @class */ (function () {\n function Point(xPosition, yPosition) {\n this.xIn = 0;\n this.yIn = 0;\n this.xIn = xPosition;\n this.yIn = yPosition;\n }\n Object.defineProperty(Point.prototype, \"x\", {\n /**\n * Gets or sets x value.\n * @private\n */\n get: function () {\n return this.xIn;\n },\n set: function (value) {\n this.xIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Point.prototype, \"y\", {\n /**\n * Gets or sets y value.\n * @private\n */\n get: function () {\n return this.yIn;\n },\n set: function (value) {\n this.yIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n Point.prototype.copy = function (point) {\n this.xIn = point.xIn;\n this.yIn = point.yIn;\n };\n /**\n * Destroys the internal objects maintained.\n * @returns void\n */\n Point.prototype.destroy = function () {\n this.xIn = undefined;\n this.yIn = undefined;\n };\n return Point;\n}());\nexport { Point };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { WParagraphFormat } from './paragraph-format';\nimport { WCharacterFormat } from './character-format';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WStyle = /** @class */ (function () {\n function WStyle() {\n }\n return WStyle;\n}());\nexport { WStyle };\n/**\n * @private\n */\nvar WParagraphStyle = /** @class */ (function (_super) {\n __extends(WParagraphStyle, _super);\n function WParagraphStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n WParagraphStyle.prototype.destroy = function () {\n this.characterFormat.destroy();\n this.paragraphFormat.destroy();\n };\n WParagraphStyle.prototype.copyStyle = function (paraStyle) {\n this.name = paraStyle.name;\n this.ownerBase = paraStyle.ownerBase;\n this.type = paraStyle.type;\n this.next = paraStyle.next;\n this.basedOn = paraStyle.basedOn;\n this.link = paraStyle.link;\n this.characterFormat.copyFormat(paraStyle.characterFormat);\n this.paragraphFormat.copyFormat(paraStyle.paragraphFormat);\n };\n return WParagraphStyle;\n}(WStyle));\nexport { WParagraphStyle };\n/**\n * @private\n */\nvar WCharacterStyle = /** @class */ (function (_super) {\n __extends(WCharacterStyle, _super);\n function WCharacterStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n WCharacterStyle.prototype.destroy = function () {\n this.characterFormat.destroy();\n };\n WCharacterStyle.prototype.copyStyle = function (charStyle) {\n this.name = charStyle.name;\n this.ownerBase = charStyle.ownerBase;\n this.type = charStyle.type;\n this.next = charStyle.next;\n this.basedOn = charStyle.basedOn;\n this.characterFormat.copyFormat(charStyle.characterFormat);\n };\n return WCharacterStyle;\n}(WStyle));\nexport { WCharacterStyle };\n/**\n * @private\n */\nvar WStyles = /** @class */ (function () {\n function WStyles() {\n this.collection = [];\n /* tslint:enable:no-any */\n }\n Object.defineProperty(WStyles.prototype, \"length\", {\n get: function () {\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n WStyles.prototype.remove = function (item) {\n this.collection = this.collection.filter(function (a) { return (a.name !== item.name); });\n };\n WStyles.prototype.push = function (item) {\n if (item != null && item !== undefined) {\n this.collection.push(item);\n }\n return 1;\n };\n WStyles.prototype.getItem = function (index) {\n if (this.collection.length > index) {\n return this.collection[index];\n }\n return null;\n };\n WStyles.prototype.indexOf = function (item) {\n return this.collection.indexOf(item);\n };\n WStyles.prototype.contains = function (item) {\n var index = this.collection.indexOf(item);\n return index > -1 && index < this.collection.length;\n };\n WStyles.prototype.clear = function () {\n while (this.collection.length > 0) {\n this.collection.pop();\n }\n };\n WStyles.prototype.findByName = function (name, type) {\n var returnStyle;\n for (var _i = 0, _a = this.collection; _i < _a.length; _i++) {\n var value = _a[_i];\n if (value.name === name) {\n returnStyle = value;\n if (!isNullOrUndefined(type) && value.type === type) {\n returnStyle = value;\n }\n }\n }\n return returnStyle;\n };\n WStyles.prototype.getStyleNames = function (type) {\n return this.collection.filter(function (a) { return (a.type === type); }).map(function (a) { return a.name; });\n };\n /* tslint:disable:no-any */\n WStyles.prototype.getStyles = function (type) {\n var styles = this.collection.filter(function (a) { return (a.type === type); }).map(function (a) { return a; });\n var styleObjects = [];\n for (var _i = 0, styles_1 = styles; _i < styles_1.length; _i++) {\n var style = styles_1[_i];\n var returnStyle = {};\n var returnStyleObject = {};\n returnStyleObject.characterFormat = {};\n HelperMethods.writeCharacterFormat(returnStyleObject.characterFormat, true, style.characterFormat);\n returnStyle.name = style.name;\n returnStyle.style = JSON.stringify(returnStyleObject);\n styleObjects.push(returnStyle);\n }\n return styleObjects;\n };\n return WStyles;\n}());\nexport { WStyles };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WBorder = /** @class */ (function () {\n function WBorder(node) {\n this.uniqueBorderFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorder.prototype, \"color\", {\n get: function () {\n return this.getPropertyValue('color');\n },\n set: function (value) {\n this.setPropertyValue('color', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineStyle\", {\n get: function () {\n return this.getPropertyValue('lineStyle');\n },\n set: function (value) {\n this.setPropertyValue('lineStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineWidth\", {\n get: function () {\n return this.getPropertyValue('lineWidth');\n },\n set: function (value) {\n this.setPropertyValue('lineWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"shadow\", {\n get: function () {\n return this.getPropertyValue('shadow');\n },\n set: function (value) {\n this.setPropertyValue('shadow', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"space\", {\n get: function () {\n return this.getPropertyValue('space');\n },\n set: function (value) {\n this.setPropertyValue('space', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"hasNoneStyle\", {\n get: function () {\n return this.getPropertyValue('hasNoneStyle');\n },\n set: function (value) {\n this.setPropertyValue('hasNoneStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n WBorder.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueBorderFormat) && this.uniqueBorderFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueBorderFormat.propertiesHash.get(propertyType);\n }\n }\n return WBorder.getPropertyDefaultValue(property);\n };\n WBorder.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WBorder.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueBorderFormat)) {\n this.initializeUniqueBorder(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n if (this.uniqueBorderFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueBorderFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.updateUniqueFormat(this.uniqueBorderFormat, property, value);\n }\n };\n WBorder.prototype.initializeUniqueBorder = function (property, propValue) {\n var uniqueBorderFormatTemp = new Dictionary();\n this.addUniqueBorderFormat('color', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineStyle', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineWidth', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('shadow', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('space', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('hasNoneStyle', property, propValue, uniqueBorderFormatTemp);\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.addUniqueFormat(uniqueBorderFormatTemp, WBorder.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WBorder.prototype.addUniqueBorderFormat = function (property, modifiedProperty, propValue, uniqueBorderFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueBorderFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueBorderFormatTemp.add(propertyType, WBorder.getPropertyDefaultValue(property));\n }\n };\n WBorder.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'color':\n value = '#000000';\n break;\n case 'lineStyle':\n value = 'None';\n break;\n case 'lineWidth':\n value = 0;\n break;\n case 'shadow':\n value = false;\n break;\n case 'space':\n value = 0;\n break;\n case 'hasNoneStyle':\n value = false;\n break;\n }\n return value;\n };\n WBorder.prototype.getLineWidth = function () {\n /* tslint:disable */\n switch (this.lineStyle) {\n case 'None':\n case 'Cleared':\n return 0;\n case 'Triple':\n case 'Double':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'Emboss3D':\n case 'Engrave3D':\n {\n var lineArray = this.getBorderLineWidthArray(this.lineStyle, this.lineWidth);\n var width = 0;\n for (var i = 0; i < lineArray.length; i++) {\n width += lineArray[i];\n }\n return width;\n }\n case 'Single':\n case 'DashLargeGap':\n case 'DashSmallGap':\n case 'Dot':\n case 'DashDot':\n case 'DashDotDot':\n case 'Thick':\n return this.lineWidth;\n case 'SingleWavy':\n return (this.lineWidth === 1.5 ? 3 : 2.5); //Double wave border only draw with the fixed width\n case 'DoubleWavy':\n return (6.75); //Double wave border only draw with the fixed width\n case 'DashDotStroked':\n case 'Outset':\n return this.lineWidth;\n }\n return this.lineWidth;\n /* tslint:enable */\n };\n WBorder.prototype.getBorderLineWidthArray = function (lineStyle, lineWidth) {\n var borderLineArray = [lineWidth];\n switch (lineStyle) {\n case 'Double':\n borderLineArray = [1, 1, 1];\n break;\n case 'ThinThickSmallGap':\n borderLineArray = [1, -0.75, -0.75];\n break;\n case 'ThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1];\n break;\n case 'ThinThickMediumGap':\n borderLineArray = [1, 0.5, 0.5];\n break;\n case 'ThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1];\n break;\n case 'ThinThickLargeGap':\n borderLineArray = [-1.5, 1, -0.75];\n break;\n case 'ThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5];\n break;\n case 'Triple':\n borderLineArray = [1, 1, 1, 1, 1];\n break;\n case 'ThinThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1, -0.75, -0.75];\n break;\n case 'ThinThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1, 0.5, 0.5];\n break;\n case 'ThinThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5, 1, -0.75];\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n borderLineArray = [0.25, 0, 1, 0, 0.25];\n break;\n }\n if (borderLineArray.length === 1) {\n return [lineWidth];\n }\n for (var i = 0; i < borderLineArray.length; i++) {\n if (borderLineArray[i] >= 0) {\n borderLineArray[i] = borderLineArray[i] * lineWidth;\n }\n else {\n borderLineArray[i] = Math.abs(borderLineArray[i]);\n }\n }\n return borderLineArray;\n };\n WBorder.prototype.getBorderWeight = function () {\n var weight = 0;\n var numberOfLines = this.getNumberOfLines();\n var borderNumber = this.getBorderNumber();\n switch (this.lineStyle) {\n case 'Single':\n case 'DashSmallGap':\n case 'DashDot':\n case 'DashDotDot':\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'SingleWavy':\n case 'DoubleWavy':\n case 'DashDotStroked':\n case 'Emboss3D':\n case 'Engrave3D':\n case 'Outset':\n case 'Inset':\n case 'Thick':\n weight = numberOfLines * borderNumber;\n break;\n case 'Dot':\n case 'DashLargeGap':\n weight = 1;\n break;\n }\n return weight;\n };\n WBorder.prototype.getBorderNumber = function () {\n var borderNumber = 0;\n switch (this.lineStyle) {\n case 'Single':\n borderNumber = 1;\n break;\n case 'Thick':\n borderNumber = 2;\n break;\n case 'Double':\n borderNumber = 3;\n break;\n case 'Dot':\n borderNumber = 4;\n break;\n case 'DashLargeGap'://dashed.\n borderNumber = 5;\n break;\n case 'DashDot':\n borderNumber = 6;\n break;\n case 'DashDotDot':\n borderNumber = 7;\n break;\n case 'Triple':\n borderNumber = 8;\n break;\n case 'ThinThickSmallGap':\n borderNumber = 9;\n break;\n case 'ThickThinSmallGap':\n borderNumber = 10;\n break;\n case 'ThinThickThinSmallGap':\n borderNumber = 11;\n break;\n case 'ThinThickMediumGap':\n borderNumber = 12;\n break;\n case 'ThickThinMediumGap':\n borderNumber = 13;\n break;\n case 'ThinThickThinMediumGap':\n borderNumber = 14;\n break;\n case 'ThinThickLargeGap':\n borderNumber = 15;\n break;\n case 'ThickThinLargeGap':\n borderNumber = 16;\n break;\n case 'ThinThickThinLargeGap':\n borderNumber = 17;\n break;\n case 'SingleWavy'://wave.\n borderNumber = 18;\n break;\n case 'DoubleWavy':\n borderNumber = 19;\n break;\n case 'DashSmallGap':\n borderNumber = 20;\n break;\n case 'DashDotStroked':\n borderNumber = 21;\n break;\n case 'Emboss3D':\n borderNumber = 22;\n break;\n case 'Engrave3D':\n borderNumber = 23;\n break;\n case 'Outset':\n borderNumber = 24;\n break;\n case 'Inset':\n borderNumber = 25;\n break;\n }\n return borderNumber;\n };\n WBorder.prototype.getNumberOfLines = function () {\n //ToDo: Need to analyze more on this.\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n case 'Dot':\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n value = 1;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Triple':\n value = 5;\n break;\n case 'ThinThickSmallGap':\n value = 3;\n break;\n case 'ThickThinSmallGap':\n value = 3;\n break;\n case 'ThinThickThinSmallGap':\n value = 5;\n break;\n case 'ThinThickMediumGap':\n value = 3;\n break;\n case 'ThickThinMediumGap':\n value = 3;\n break;\n case 'ThinThickThinMediumGap':\n value = 5;\n break;\n case 'ThinThickLargeGap':\n value = 3;\n break;\n case 'ThickThinLargeGap':\n value = 3;\n break;\n case 'ThinThickThinLargeGap':\n value = 5;\n break;\n case 'SingleWavy':\n value = 1;\n break;\n case 'DoubleWavy':\n value = 2;\n break;\n case 'DashDotStroked':\n value = 1;\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n value = 3;\n break;\n case 'Outset':\n case 'Inset':\n case 'Thick':\n value = 1;\n break;\n }\n return value;\n };\n WBorder.prototype.getPrecedence = function () {\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n value = 1;\n break;\n case 'Thick':\n value = 2;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Dot':\n value = 4;\n break;\n case 'DashLargeGap'://dashed.\n value = 5;\n break;\n case 'DashDot':\n value = 6;\n break;\n case 'DashDotDot':\n value = 7;\n break;\n case 'Triple':\n value = 8;\n break;\n case 'ThinThickSmallGap':\n value = 9;\n break;\n case 'ThickThinSmallGap':\n value = 10;\n break;\n case 'ThinThickThinSmallGap':\n value = 11;\n break;\n case 'ThinThickMediumGap':\n value = 12;\n break;\n case 'ThickThinMediumGap':\n value = 13;\n break;\n case 'ThinThickThinMediumGap':\n value = 14;\n break;\n case 'ThinThickLargeGap':\n value = 15;\n break;\n case 'ThickThinLargeGap':\n value = 16;\n break;\n case 'ThinThickThinLargeGap':\n value = 17;\n break;\n case 'SingleWavy'://wave.\n value = 18;\n break;\n case 'DoubleWavy':\n value = 19;\n break;\n case 'DashSmallGap':\n value = 20;\n break;\n case 'DashDotStroked':\n value = 21;\n break;\n case 'Emboss3D':\n value = 22;\n break;\n case 'Engrave3D':\n value = 23;\n break;\n case 'Outset':\n value = 24;\n break;\n case 'Inset':\n value = 25;\n break;\n }\n return value;\n };\n WBorder.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n return this.uniqueBorderFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WBorder.prototype.cloneFormat = function () {\n var border = new WBorder(undefined);\n border.color = this.color;\n border.lineStyle = this.lineStyle;\n border.lineWidth = this.lineWidth;\n border.shadow = this.shadow;\n border.space = this.space;\n return border;\n };\n WBorder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n WBorder.uniqueBorderFormats.remove(this.uniqueBorderFormat);\n }\n this.uniqueBorderFormat = undefined;\n };\n WBorder.prototype.copyFormat = function (border) {\n if (!isNullOrUndefined(border) && !isNullOrUndefined(border.uniqueBorderFormat)) {\n this.color = border.color;\n this.lineStyle = border.lineStyle;\n this.lineWidth = border.lineWidth;\n this.shadow = border.shadow;\n this.space = border.space;\n }\n };\n WBorder.clear = function () {\n this.uniqueBorderFormats.clear();\n };\n WBorder.uniqueBorderFormats = new WUniqueFormats();\n WBorder.uniqueFormatType = 1;\n return WBorder;\n}());\nexport { WBorder };\n","import { WBorder } from './border';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WBorders = /** @class */ (function () {\n function WBorders(node) {\n this.leftIn = new WBorder(this);\n this.rightIn = new WBorder(this);\n this.topIn = new WBorder(this);\n this.bottomIn = new WBorder(this);\n this.horizontalIn = new WBorder(this);\n this.verticalIn = new WBorder(this);\n this.diagonalUpIn = new WBorder(this);\n this.diagonalDownIn = new WBorder(this);\n this.lineWidthIn = 0;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorders.prototype, \"left\", {\n get: function () {\n return this.leftIn;\n },\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"right\", {\n get: function () {\n return this.rightIn;\n },\n set: function (value) {\n this.rightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"top\", {\n get: function () {\n return this.topIn;\n },\n set: function (value) {\n this.topIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"bottom\", {\n get: function () {\n return this.bottomIn;\n },\n set: function (value) {\n this.bottomIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"horizontal\", {\n get: function () {\n return this.horizontalIn;\n },\n set: function (value) {\n this.horizontalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"vertical\", {\n get: function () {\n return this.verticalIn;\n },\n set: function (value) {\n this.verticalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalUp\", {\n get: function () {\n return this.diagonalUpIn;\n },\n set: function (value) {\n this.diagonalUpIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalDown\", {\n get: function () {\n return this.diagonalDownIn;\n },\n set: function (value) {\n this.diagonalDownIn = value;\n },\n enumerable: true,\n configurable: true\n });\n WBorders.prototype.destroy = function () {\n if (!isNullOrUndefined(this.left)) {\n this.left.destroy();\n }\n if (!isNullOrUndefined(this.top)) {\n this.top.destroy();\n }\n if (!isNullOrUndefined(this.bottom)) {\n this.bottom.destroy();\n }\n if (!isNullOrUndefined(this.right)) {\n this.right.destroy();\n }\n if (!isNullOrUndefined(this.horizontal)) {\n this.horizontal.destroy();\n }\n if (!isNullOrUndefined(this.vertical)) {\n this.vertical.destroy();\n }\n if (!isNullOrUndefined(this.diagonalDown)) {\n this.diagonalDown.destroy();\n }\n if (!isNullOrUndefined(this.diagonalUp)) {\n this.diagonalUp.destroy();\n }\n this.topIn = undefined;\n this.bottomIn = undefined;\n this.leftIn = undefined;\n this.rightIn = undefined;\n this.horizontalIn = undefined;\n this.verticalIn = undefined;\n this.diagonalDownIn = undefined;\n this.diagonalUpIn = undefined;\n this.lineWidthIn = undefined;\n this.valueIn = undefined;\n };\n WBorders.prototype.cloneFormat = function () {\n var borders = new WBorders(undefined);\n borders.top = isNullOrUndefined(this.top) ? undefined : this.top.cloneFormat();\n borders.bottom = isNullOrUndefined(this.bottom) ? undefined : this.bottom.cloneFormat();\n borders.left = isNullOrUndefined(this.left) ? undefined : this.left.cloneFormat();\n borders.right = isNullOrUndefined(this.right) ? undefined : this.right.cloneFormat();\n borders.horizontal = isNullOrUndefined(this.horizontal) ? undefined : this.horizontal.cloneFormat();\n borders.vertical = isNullOrUndefined(this.vertical) ? undefined : this.vertical.cloneFormat();\n borders.diagonalUp = isNullOrUndefined(this.diagonalUp) ? undefined : this.diagonalUp.cloneFormat();\n borders.diagonalDown = isNullOrUndefined(this.diagonalDown) ? undefined : this.diagonalDown.cloneFormat();\n return borders;\n };\n WBorders.prototype.copyFormat = function (borders) {\n if (!isNullOrUndefined(borders.left) && borders.left instanceof WBorder) {\n this.left = new WBorder(this);\n this.left.copyFormat(borders.left);\n }\n if (!isNullOrUndefined(borders.right) && borders.right instanceof WBorder) {\n this.right = new WBorder(this);\n this.right.copyFormat(borders.right);\n }\n if (!isNullOrUndefined(borders.top) && borders.top instanceof WBorder) {\n this.top = new WBorder(this);\n this.top.copyFormat(borders.top);\n }\n if (!isNullOrUndefined(borders.bottom) && borders.bottom instanceof WBorder) {\n this.bottom = new WBorder(this);\n this.bottom.copyFormat(borders.bottom);\n }\n if (!isNullOrUndefined(borders.horizontal) && borders.horizontal instanceof WBorder) {\n this.horizontal = new WBorder(this);\n this.horizontal.copyFormat(borders.horizontal);\n }\n if (!isNullOrUndefined(borders.vertical) && borders.vertical instanceof WBorder) {\n this.vertical = new WBorder(this);\n this.vertical.copyFormat(borders.vertical);\n }\n if (!isNullOrUndefined(borders.diagonalDown) && borders.diagonalDown instanceof WBorder) {\n this.diagonalDown = new WBorder(this);\n this.diagonalDown.copyFormat(borders.diagonalDown);\n }\n if (!isNullOrUndefined(borders.diagonalUp) && borders.diagonalUp instanceof WBorder) {\n this.diagonalUp = new WBorder(this);\n this.diagonalUp.copyFormat(borders.diagonalUp);\n }\n };\n return WBorders;\n}());\nexport { WBorders };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { Dictionary } from '../../base/dictionary';\n/**\n * @private\n */\nvar WShading = /** @class */ (function () {\n function WShading(node) {\n this.uniqueShadingFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WShading.prototype, \"backgroundColor\", {\n get: function () {\n return this.getPropertyValue('backgroundColor');\n },\n set: function (value) {\n this.setPropertyValue('backgroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"foregroundColor\", {\n get: function () {\n return this.getPropertyValue('foregroundColor');\n },\n set: function (value) {\n this.setPropertyValue('foregroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"textureStyle\", {\n get: function () {\n return this.getPropertyValue('textureStyle');\n },\n set: function (value) {\n this.setPropertyValue('textureStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n WShading.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueShadingFormat) && this.uniqueShadingFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueShadingFormat.propertiesHash.get(propertyType);\n }\n }\n return WShading.getPropertyDefaultValue(property);\n };\n WShading.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WShading.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueShadingFormat)) {\n this.initializeUniqueShading(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n if (this.uniqueShadingFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueShadingFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueShadingFormat = WShading.uniqueShadingFormats.updateUniqueFormat(this.uniqueShadingFormat, property, value);\n }\n };\n WShading.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'backgroundColor':\n value = '#ffffff';\n break;\n case 'foregroundColor':\n value = 'empty';\n break;\n case 'textureStyle':\n value = 'TextureNone';\n break;\n }\n return value;\n };\n WShading.prototype.initializeUniqueShading = function (property, propValue) {\n var uniqueShadingTemp = new Dictionary();\n this.addUniqueShading('backgroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('foregroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('textureStyle', property, propValue, uniqueShadingTemp);\n // tslint:disable-next-line:max-line-length \n this.uniqueShadingFormat = WShading.uniqueShadingFormats.addUniqueFormat(uniqueShadingTemp, WShading.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WShading.prototype.addUniqueShading = function (property, modifiedProperty, propValue, uniqueShadingTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueShadingTemp.add(propertyType, propValue);\n }\n else {\n uniqueShadingTemp.add(propertyType, WShading.getPropertyDefaultValue(property));\n }\n };\n WShading.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n WShading.uniqueShadingFormats.remove(this.uniqueShadingFormat);\n }\n this.uniqueShadingFormat = undefined;\n };\n WShading.prototype.cloneFormat = function () {\n var shading = new WShading(undefined);\n shading.backgroundColor = this.backgroundColor;\n shading.foregroundColor = this.foregroundColor;\n shading.textureStyle = this.textureStyle;\n return shading;\n };\n WShading.prototype.copyFormat = function (shading) {\n if (!isNullOrUndefined(shading) && !isNullOrUndefined(shading.uniqueShadingFormat)) {\n this.backgroundColor = shading.backgroundColor;\n this.foregroundColor = shading.foregroundColor;\n this.textureStyle = shading.textureStyle;\n }\n };\n WShading.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n return this.uniqueShadingFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WShading.clear = function () {\n this.uniqueShadingFormats.clear();\n };\n WShading.uniqueShadingFormats = new WUniqueFormats();\n WShading.uniqueFormatType = 5;\n return WShading;\n}());\nexport { WShading };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WTableFormat = /** @class */ (function () {\n function WTableFormat(owner) {\n this.uniqueTableFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this.ownerBase = undefined;\n this.ownerBase = owner;\n this.assignTableMarginValue(5.4, 0, 5.4, 0);\n }\n Object.defineProperty(WTableFormat.prototype, \"cellSpacing\", {\n get: function () {\n return this.getPropertyValue('cellSpacing');\n },\n set: function (value) {\n if (value < 0 || value > 264.6) {\n throw new RangeError('The measurement must be between 0 px and 264.6 px.');\n }\n this.setPropertyValue('cellSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n if (value < -1440 || value > 1440) {\n throw new RangeError('The measurement must be between -1440 px and 1440 px.');\n }\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"tableAlignment\", {\n get: function () {\n return this.getPropertyValue('tableAlignment');\n },\n set: function (value) {\n this.setPropertyValue('tableAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n WTableFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueTableFormat) && this.uniqueTableFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueTableFormat.propertiesHash.get(propertyType);\n }\n }\n return WTableFormat.getPropertyDefaultValue(property);\n };\n WTableFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WTableFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueTableFormat)) {\n this.initializeUniqueTableFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n if (this.uniqueTableFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueTableFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.updateUniqueFormat(this.uniqueTableFormat, property, value);\n }\n };\n WTableFormat.prototype.initializeUniqueTableFormat = function (property, propValue) {\n var uniqueTableFormatTemp = new Dictionary();\n this.addUniqueTableFormat('cellSpacing', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('topMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('bottomMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('rightMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftIndent', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('tableAlignment', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidth', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidthType', property, propValue, uniqueTableFormatTemp);\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.addUniqueFormat(uniqueTableFormatTemp, WTableFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WTableFormat.prototype.addUniqueTableFormat = function (property, modifiedProperty, propValue, uniqueTableFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueTableFormatTemp.add(propertyType, propValue);\n }\n };\n WTableFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'cellSpacing':\n value = 0;\n break;\n case 'leftMargin':\n value = 5.4;\n break;\n case 'topMargin':\n value = 0;\n break;\n case 'bottomMargin':\n value = 0;\n break;\n case 'rightMargin':\n value = 5.4;\n break;\n case 'leftIndent':\n value = 0;\n break;\n case 'tableAlignment':\n value = 'Left';\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WTableFormat.prototype.assignTableMarginValue = function (left, top, right, bottom) {\n this.leftMargin = left;\n this.topMargin = top;\n this.rightMargin = right;\n this.bottomMargin = bottom;\n };\n WTableFormat.prototype.initializeTableBorders = function () {\n this.borders.left.lineStyle = 'Single';\n this.borders.left.lineWidth = 0.5;\n this.borders.right.lineStyle = 'Single';\n this.borders.right.lineWidth = 0.5;\n this.borders.top.lineStyle = 'Single';\n this.borders.top.lineWidth = 0.5;\n this.borders.bottom.lineStyle = 'Single';\n this.borders.bottom.lineWidth = 0.5;\n this.borders.horizontal.lineStyle = 'Single';\n this.borders.horizontal.lineWidth = 0.5;\n this.borders.vertical.lineStyle = 'Single';\n this.borders.vertical.lineWidth = 0.5;\n };\n WTableFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n WTableFormat.uniqueTableFormats.remove(this.uniqueTableFormat);\n }\n this.uniqueTableFormat = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WTableFormat.prototype.cloneFormat = function () {\n var tableFormat = new WTableFormat(undefined);\n tableFormat.leftIndent = this.leftIndent;\n tableFormat.tableAlignment = this.tableAlignment;\n tableFormat.cellSpacing = this.cellSpacing;\n tableFormat.leftMargin = this.leftMargin;\n tableFormat.rightMargin = this.rightMargin;\n tableFormat.topMargin = this.topMargin;\n tableFormat.bottomMargin = this.bottomMargin;\n tableFormat.preferredWidth = this.preferredWidth;\n tableFormat.preferredWidthType = this.preferredWidthType;\n tableFormat.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n tableFormat.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n return tableFormat;\n };\n WTableFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n return this.uniqueTableFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WTableFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueTableFormat)) {\n this.cellSpacing = format.cellSpacing;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.leftIndent = format.leftIndent;\n this.tableAlignment = format.tableAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n }\n };\n WTableFormat.clear = function () {\n this.uniqueTableFormats.clear();\n };\n WTableFormat.uniqueTableFormats = new WUniqueFormats();\n WTableFormat.uniqueFormatType = 8;\n return WTableFormat;\n}());\nexport { WTableFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\n/**\n * @private\n */\nvar WRowFormat = /** @class */ (function () {\n function WRowFormat(node) {\n this.uniqueRowFormat = undefined;\n /**\n * @private\n */\n this.borders = new WBorders(this);\n /**\n * @private\n */\n this.ownerBase = undefined;\n /**\n * @private\n */\n this.beforeWidth = 0;\n /**\n * @private\n */\n this.afterWidth = 0;\n this.ownerBase = node;\n }\n Object.defineProperty(WRowFormat.prototype, \"gridBefore\", {\n get: function () {\n return this.getPropertyValue('gridBefore');\n },\n set: function (value) {\n this.setPropertyValue('gridBefore', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidth\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidthType\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfter\", {\n get: function () {\n return this.getPropertyValue('gridAfter');\n },\n set: function (value) {\n this.setPropertyValue('gridAfter', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidth\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidthType\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"allowBreakAcrossPages\", {\n get: function () {\n return this.getPropertyValue('allowBreakAcrossPages');\n },\n set: function (value) {\n this.setPropertyValue('allowBreakAcrossPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"isHeader\", {\n get: function () {\n return this.getPropertyValue('isHeader');\n },\n set: function (value) {\n this.setPropertyValue('isHeader', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"height\", {\n get: function () {\n return this.getPropertyValue('height');\n },\n set: function (value) {\n if (value === 0 && (this.heightType === 'AtLeast' || this.heightType === 'Exactly')) {\n value = 1;\n }\n else if (this.heightType === 'Auto') {\n value = 0;\n }\n this.setPropertyValue('height', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"heightType\", {\n get: function () {\n return this.getPropertyValue('heightType');\n },\n set: function (value) {\n if (value === 'AtLeast' || value === 'Exactly') {\n this.height = 1;\n }\n else {\n this.height = 0;\n }\n this.setPropertyValue('heightType', value);\n },\n enumerable: true,\n configurable: true\n });\n WRowFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueRowFormat) && this.uniqueRowFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueRowFormat.propertiesHash.get(propertyType);\n }\n }\n return WRowFormat.getPropertyDefaultValue(property);\n };\n WRowFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WRowFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueRowFormat)) {\n this.initializeUniqueRowFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n if (this.uniqueRowFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueRowFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.updateUniqueFormat(this.uniqueRowFormat, property, value);\n }\n };\n WRowFormat.prototype.initializeUniqueRowFormat = function (property, propValue) {\n var uniqueRowFormatTemp = new Dictionary();\n this.addUniqueRowFormat('allowBreakAcrossPages', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('isHeader', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('height', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('heightType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBefore', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfter', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridgridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.addUniqueFormat(uniqueRowFormatTemp, WRowFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WRowFormat.prototype.addUniqueRowFormat = function (property, modifiedProperty, propValue, uniqueRowFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueRowFormatTemp.add(propertyType, propValue);\n }\n };\n WRowFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'allowBreakAcrossPages':\n value = true;\n break;\n case 'isHeader':\n value = false;\n break;\n case 'height':\n value = 0;\n break;\n case 'heightType':\n value = 'Auto';\n break;\n case 'gridBefore':\n value = 0;\n break;\n case 'gridBeforeWidth':\n value = 0;\n break;\n case 'gridBeforeWidthType':\n value = 'Point';\n break;\n case 'gridAfter':\n value = 0;\n break;\n case 'gridAfterWidth':\n value = 0;\n break;\n case 'gridAfterWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WRowFormat.prototype.cloneFormat = function () {\n var format = new WRowFormat();\n format.allowBreakAcrossPages = this.allowBreakAcrossPages;\n format.heightType = this.heightType;\n format.height = this.height;\n format.isHeader = this.isHeader;\n format.gridBefore = this.gridBefore;\n format.gridBeforeWidth = this.gridBeforeWidth;\n format.gridBeforeWidthType = this.gridBeforeWidthType;\n format.gridAfter = this.gridAfter;\n format.gridAfterWidth = this.gridAfterWidth;\n format.gridAfterWidthType = this.gridAfterWidthType;\n return format;\n };\n WRowFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n return this.uniqueRowFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WRowFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueRowFormat)) {\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n this.heightType = format.heightType;\n this.height = format.height;\n this.gridBefore = format.gridBefore;\n this.gridBeforeWidth = format.gridBeforeWidth;\n this.gridBeforeWidthType = format.gridBeforeWidthType;\n this.gridAfter = format.gridAfter;\n this.gridAfterWidth = format.gridAfterWidth;\n this.gridAfterWidthType = format.gridAfterWidthType;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.ownerBase = format;\n this.borders.copyFormat(format.borders);\n }\n }\n };\n WRowFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n WRowFormat.uniqueRowFormats.remove(this.uniqueRowFormat);\n }\n this.beforeWidth = undefined;\n this.afterWidth = undefined;\n this.borders = undefined;\n this.uniqueRowFormat = undefined;\n };\n WRowFormat.clear = function () {\n this.uniqueRowFormats.clear();\n };\n WRowFormat.uniqueRowFormats = new WUniqueFormats();\n WRowFormat.uniqueFormatType = 6;\n return WRowFormat;\n}());\nexport { WRowFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\n/**\n * @private\n */\nvar WCellFormat = /** @class */ (function () {\n function WCellFormat(node) {\n this.uniqueCellFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this.ownerBase = node;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n }\n Object.defineProperty(WCellFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"cellWidth\", {\n get: function () {\n return this.getPropertyValue('cellWidth');\n },\n set: function (value) {\n this.setPropertyValue('cellWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"columnSpan\", {\n get: function () {\n return this.getPropertyValue('columnSpan');\n },\n set: function (value) {\n this.setPropertyValue('columnSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rowSpan\", {\n get: function () {\n return this.getPropertyValue('rowSpan');\n },\n set: function (value) {\n this.setPropertyValue('rowSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"verticalAlignment\", {\n get: function () {\n return this.getPropertyValue('verticalAlignment');\n },\n set: function (value) {\n this.setPropertyValue('verticalAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n WCellFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCellFormat) && this.uniqueCellFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCellFormat.propertiesHash.get(propertyType);\n }\n }\n return WCellFormat.getPropertyDefaultValue(property);\n };\n WCellFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCellFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCellFormat)) {\n this.initializeUniqueCellFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n if (this.uniqueCellFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueCellFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.updateUniqueFormat(this.uniqueCellFormat, property, value);\n }\n };\n WCellFormat.prototype.initializeUniqueCellFormat = function (property, propValue) {\n var uniqueCellFormatTemp = new Dictionary();\n this.addUniqueCellFormat('leftMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('topMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('bottomMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rightMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('cellWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('columnSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rowSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('verticalAlignment', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidthType', property, propValue, uniqueCellFormatTemp);\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.addUniqueFormat(uniqueCellFormatTemp, WCellFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WCellFormat.prototype.addUniqueCellFormat = function (property, modifiedProperty, propValue, uniqueCellFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCellFormatTemp.add(propertyType, propValue);\n }\n };\n WCellFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftMargin':\n value = undefined;\n break;\n case 'topMargin':\n value = undefined;\n break;\n case 'bottomMargin':\n value = undefined;\n break;\n case 'rightMargin':\n value = undefined;\n break;\n case 'cellWidth':\n value = 0;\n break;\n case 'columnSpan':\n value = 1;\n break;\n case 'rowSpan':\n value = 1;\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'verticalAlignment':\n value = 'Top';\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WCellFormat.prototype.containsMargins = function () {\n return (!isNullOrUndefined(this.leftMargin)\n || !isNullOrUndefined(this.rightMargin)\n || !isNullOrUndefined(this.bottomMargin)\n || !isNullOrUndefined(this.topMargin));\n };\n WCellFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n WCellFormat.uniqueCellFormats.remove(this.uniqueCellFormat);\n }\n this.uniqueCellFormat = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WCellFormat.prototype.cloneFormat = function () {\n var format = new WCellFormat(undefined);\n format.verticalAlignment = this.verticalAlignment;\n format.leftMargin = this.leftMargin;\n format.rightMargin = this.rightMargin;\n format.topMargin = this.topMargin;\n format.bottomMargin = this.bottomMargin;\n format.preferredWidth = this.preferredWidth;\n format.preferredWidthType = this.preferredWidthType;\n format.cellWidth = this.cellWidth;\n format.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n format.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n return format;\n };\n WCellFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n return this.uniqueCellFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCellFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCellFormat)) {\n this.cellWidth = format.cellWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.preferredWidth = format.preferredWidth;\n this.columnSpan = format.columnSpan;\n this.rowSpan = format.rowSpan;\n this.preferredWidthType = format.preferredWidthType;\n this.verticalAlignment = format.verticalAlignment;\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n }\n };\n WCellFormat.clear = function () {\n this.uniqueCellFormats.clear();\n };\n WCellFormat.uniqueCellFormats = new WUniqueFormats();\n WCellFormat.uniqueFormatType = 4;\n return WCellFormat;\n}());\nexport { WCellFormat };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { WTableFormat, WRowFormat, WCellFormat } from '../format/index';\nimport { WParagraphFormat, WCharacterFormat, WBorder, WBorders } from '../format/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\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 Object.defineProperty(Rect.prototype, \"right\", {\n /**\n * @private\n */\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottom\", {\n /**\n * @private\n */\n get: function () {\n return this.y + this.height;\n },\n enumerable: true,\n configurable: true\n });\n return Rect;\n}());\nexport { Rect };\n/**\n * @private\n */\nvar Margin = /** @class */ (function () {\n function Margin(leftMargin, topMargin, rightMargin, bottomMargin) {\n this.left = leftMargin;\n this.top = topMargin;\n this.right = rightMargin;\n this.bottom = bottomMargin;\n }\n /**\n * @private\n */\n Margin.prototype.clone = function () {\n return new Margin(this.left, this.top, this.right, this.bottom);\n };\n /**\n * @private\n */\n Margin.prototype.destroy = function () {\n this.left = undefined;\n this.right = undefined;\n this.top = undefined;\n this.bottom = undefined;\n };\n return Margin;\n}());\nexport { Margin };\n/**\n * @private\n */\nvar Widget = /** @class */ (function () {\n function Widget() {\n /**\n * @private\n */\n this.childWidgets = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.index = 0;\n }\n Object.defineProperty(Widget.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n if (this instanceof BodyWidget && this.page) {\n return this.page.bodyWidgets.indexOf(this);\n }\n else if (this.containerWidget && this.containerWidget.childWidgets) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"firstChild\", {\n /**\n * @private\n */\n get: function () {\n return this.childWidgets.length > 0 ? this.childWidgets[0] : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"lastChild\", {\n /**\n * @private\n */\n get: function () {\n if (this.childWidgets) {\n return this.childWidgets.length > 0 ?\n this.childWidgets[this.childWidgets.length - 1] : undefined;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (widget instanceof BodyWidget) {\n widget = index > 0 ? widget.page.bodyWidgets[index - 1] : undefined;\n }\n else {\n widget = index > 0 ? widget.containerWidget.childWidgets[index - 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index === -1) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n widget = index < widget.page.bodyWidgets.length - 1 ?\n widget.page.bodyWidgets[index + 1] : undefined;\n }\n else {\n widget = index < widget.containerWidget.childWidgets.length - 1 ?\n widget.containerWidget.childWidgets[index + 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousRenderedWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index > 0) {\n widget = widget.page.bodyWidgets[index - 1];\n }\n else {\n var page = widget.page.previousPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[page.bodyWidgets.length - 1] : undefined;\n }\n }\n else {\n if (index > 0) {\n widget = widget.containerWidget.childWidgets[index - 1];\n }\n else {\n var previousContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n previousContainer = widget.containerWidget.getPreviousSplitWidget();\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget)) {\n // Since cells are lay outed left to right, we should not navigate to previous row.\n previousContainer = widget.containerWidget.previousRenderedWidget;\n }\n while (previousContainer && previousContainer.childWidgets.length === 0) {\n previousContainer = previousContainer.previousRenderedWidget;\n if (isNullOrUndefined(previousContainer)) {\n break;\n }\n }\n widget = previousContainer && previousContainer.constructor === widget.containerWidget.constructor ?\n previousContainer.lastChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextRenderedWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index < widget.page.bodyWidgets.length - 1) {\n widget = widget.page.bodyWidgets[index + 1];\n }\n else {\n var page = widget.page.nextPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[0] : undefined;\n }\n }\n else {\n if (index < widget.containerWidget.childWidgets.length - 1) {\n widget = widget.containerWidget.childWidgets[index + 1];\n }\n else {\n var nextContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n nextContainer = widget.containerWidget.getNextSplitWidget();\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget)) {\n // Since cells are lay outed left to right, we should not navigate to next row.\n nextContainer = widget.containerWidget.nextRenderedWidget;\n }\n while (nextContainer && nextContainer.childWidgets.length === 0 && !(nextContainer instanceof TableCellWidget)) {\n nextContainer = nextContainer.nextRenderedWidget;\n if (isNullOrUndefined(nextContainer)) {\n break;\n }\n }\n widget = nextContainer && nextContainer.constructor === widget.containerWidget.constructor ?\n nextContainer.firstChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousSplitWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getPreviousSplitWidget();\n }\n else {\n var previous = widget.previousRenderedWidget;\n if (widget instanceof BodyWidget && previous instanceof BodyWidget && widget.equals(previous)) {\n return previous;\n }\n else if (previous instanceof BlockWidget && widget.index === previous.index && widget.equals(previous)) {\n return previous;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextSplitWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getNextSplitWidget();\n }\n else {\n var next = widget.nextRenderedWidget;\n if (widget instanceof BodyWidget && next instanceof BodyWidget && widget.equals(next)) {\n return next;\n }\n else if (next instanceof BlockWidget && widget.index === next.index && widget.equals(next)) {\n return next;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n Widget.prototype.getPreviousSplitWidgets = function () {\n var widgets = [];\n var widget = this.previousSplitWidget;\n while (widget) {\n widgets.unshift(widget);\n widget = widget.previousSplitWidget;\n }\n return widgets;\n };\n /**\n * @private\n */\n Widget.prototype.getSplitWidgets = function () {\n var widgets = this.getPreviousSplitWidgets();\n var widget = this;\n while (widget) {\n widgets.push(widget);\n widget = widget.nextSplitWidget;\n }\n return widgets;\n };\n /**\n * @private\n */\n Widget.prototype.combineWidget = function (viewer) {\n var root = this;\n var widgets = this.getSplitWidgets();\n if (widgets.length > 1) {\n root = widgets.shift();\n while (widgets.length > 0) {\n var splitWidget = widgets.shift();\n root.combine(splitWidget, viewer);\n }\n }\n if (root instanceof TableWidget) {\n root.combineRows(viewer);\n }\n return root;\n };\n Widget.prototype.combine = function (widget, viewer) {\n if (widget.childWidgets.length > 0) {\n var lastChild = this.lastChild;\n if (lastChild instanceof TableWidget) {\n lastChild.combineWidget(viewer);\n }\n else {\n var firstChild = widget.firstChild;\n if (!(widget instanceof TableWidget) && lastChild instanceof Widget && firstChild instanceof Widget &&\n lastChild.index === firstChild.index) {\n lastChild.combine(widget.childWidgets.shift(), viewer);\n }\n }\n this.addWidgets(widget.childWidgets);\n widget.childWidgets = [];\n }\n widget.destroyInternal(viewer);\n };\n /**\n * @private\n */\n Widget.prototype.addWidgets = function (childWidgets) {\n while (childWidgets.length > 0) {\n var widget = childWidgets.shift();\n if (widget instanceof LineWidget && this instanceof ParagraphWidget) {\n widget.paragraph = this;\n this.height += widget.height;\n }\n else if (widget instanceof Widget) {\n var lastChild = this.lastChild;\n widget.containerWidget = this;\n widget.y = lastChild instanceof Widget ? lastChild.y + lastChild.height : this.y;\n this.height += widget.height;\n }\n this.childWidgets.push(widget);\n }\n };\n /**\n * @private\n */\n Widget.prototype.removeChild = function (index) {\n if (index > -1 && index < this.childWidgets.length) {\n this.childWidgets.splice(index, 1);\n }\n };\n /**\n * @private\n */\n Widget.prototype.destroy = function () {\n if (this.childWidgets) {\n while (this.childWidgets.length > 0) {\n var child = this.childWidgets.pop();\n if (child instanceof LineWidget || child instanceof Widget) {\n child.destroy();\n }\n }\n }\n this.childWidgets = undefined;\n if (this.containerWidget) {\n this.containerWidget.removeChild(this.indexInOwner);\n }\n this.containerWidget = undefined;\n // if (this.margin) {\n // this.margin.destroy();\n // }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n this.index = undefined;\n };\n return Widget;\n}());\nexport { Widget };\n/**\n * @private\n */\nvar BlockContainer = /** @class */ (function (_super) {\n __extends(BlockContainer, _super);\n function BlockContainer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.sectionFormatIn = undefined;\n return _this;\n }\n Object.defineProperty(BlockContainer.prototype, \"sectionFormat\", {\n /**\n * @private\n */\n get: function () {\n var container = this;\n if (container instanceof BodyWidget) {\n return container.sectionFormatIn;\n }\n else if (container.page) {\n return container.page.bodyWidgets[0].sectionFormat;\n }\n return undefined;\n },\n /**\n * @private\n */\n set: function (value) {\n if (this instanceof BodyWidget) {\n this.sectionFormatIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockContainer.prototype, \"sectionIndex\", {\n /**\n * @private\n */\n get: function () {\n var container = this;\n var index = 0;\n if (container instanceof BodyWidget) {\n index = container.index;\n }\n else if (container.page) {\n index = container.page.bodyWidgets[0].index;\n }\n return index;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n BlockContainer.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var viewer = undefined;\n var node = this;\n if (node instanceof BodyWidget) {\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n }\n else {\n if (node.headerFooterType.indexOf('Header') !== -1) {\n hierarchicalIndex = 'H' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'F' + ';' + hierarchicalIndex;\n }\n }\n if (!isNullOrUndefined(node.page)) {\n viewer = this.page.viewer;\n var pageIndex = viewer.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n return BlockContainer;\n}(Widget));\nexport { BlockContainer };\n/**\n * @private\n */\nvar BodyWidget = /** @class */ (function (_super) {\n __extends(BodyWidget, _super);\n /**\n * Initialize the constructor of BodyWidget\n */\n function BodyWidget() {\n return _super.call(this) || this;\n }\n /**\n * @private\n */\n BodyWidget.prototype.equals = function (widget) {\n return widget instanceof BodyWidget && widget.sectionFormat === this.sectionFormat;\n };\n /**\n * @private\n */\n BodyWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var viewer = undefined;\n var node = this;\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n if (!isNullOrUndefined(node.page)) {\n viewer = this.page.viewer;\n var pageIndex = viewer.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n BodyWidget.prototype.getTableCellWidget = function (touchPoint) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= touchPoint.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= touchPoint.y) {\n return this.childWidgets[i].getTableCellWidget(touchPoint);\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= touchPoint.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(touchPoint);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(touchPoint);\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n BodyWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var n = 0; n < this.childWidgets.length; n++) {\n var chilgWidget = this.childWidgets[n];\n if (chilgWidget instanceof ParagraphWidget) {\n chilgWidget.destroyInternal(viewer);\n }\n else {\n chilgWidget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n n--;\n }\n this.childWidgets = undefined;\n }\n // if (this instanceof HeaderFooterWidget && ((this as HeaderFooterWidget).currentNode ))) {\n // if (((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets )) {\n // let index: number = ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.indexOf(this);\n // ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.splice(index, 1);\n // }\n // this.currentNode = undefined;\n /* tslint:disable: one-line */\n if (!isNullOrUndefined(this.page)) {\n var index = this.indexInOwner;\n if (this.indexInOwner > -1) {\n this.page.bodyWidgets.splice(index, 1);\n if (this.page.bodyWidgets.length === 0) {\n this.page.destroy();\n // }\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.headerWidget === this) {\n this.page.headerWidget = undefined;\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.footerWidget === this) {\n this.page.footerWidget = undefined;\n }\n this.page = undefined;\n }\n }\n this.destroy();\n };\n /**\n * @private\n */\n BodyWidget.prototype.destroy = function () {\n // if (this.sectionFormat) {\n // this.sectionFormat.destroy();\n // }\n this.sectionFormat = undefined;\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n return BodyWidget;\n}(BlockContainer));\nexport { BodyWidget };\n/**\n * @private\n */\nvar HeaderFooterWidget = /** @class */ (function (_super) {\n __extends(HeaderFooterWidget, _super);\n function HeaderFooterWidget(type) {\n var _this = _super.call(this) || this;\n _this.headerFooterType = type;\n return _this;\n }\n /**\n * @private\n */\n HeaderFooterWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n /**\n * @private\n */\n HeaderFooterWidget.prototype.equals = function (widget) {\n // Todo: Need to work\n return widget instanceof HeaderFooterWidget\n && widget.containerWidget === this.containerWidget;\n };\n /**\n * @private\n */\n HeaderFooterWidget.prototype.clone = function () {\n var headerFooter = new HeaderFooterWidget(this.headerFooterType);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n headerFooter.childWidgets.push(block);\n block.index = i;\n block.containerWidget = headerFooter;\n }\n headerFooter.x = this.x;\n headerFooter.y = this.y;\n headerFooter.height = 0;\n headerFooter.width = 0;\n return headerFooter;\n };\n /**\n * @private\n */\n HeaderFooterWidget.prototype.destroyInternal = function (viewer) {\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n return HeaderFooterWidget;\n}(BlockContainer));\nexport { HeaderFooterWidget };\n/**\n * @private\n */\nvar BlockWidget = /** @class */ (function (_super) {\n __extends(BlockWidget, _super);\n function BlockWidget() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(BlockWidget.prototype, \"bodyWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof BlockContainer) {\n return widget.containerWidget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"leftIndent\", {\n /**\n * @private\n */\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.leftIndent;\n }\n else if (blockAdv instanceof TableWidget && blockAdv.tableFormat instanceof WTableFormat) {\n return blockAdv.tableFormat.leftIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"rightIndent\", {\n /**\n * @private\n */\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.rightIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInsideTable\", {\n /**\n * @private\n */\n get: function () {\n return this.containerWidget instanceof TableCellWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInHeaderFooter\", {\n /**\n * @private\n */\n get: function () {\n return this.bodyWidget instanceof HeaderFooterWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"associatedCell\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableCellWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Check whether the paragraph contains only page break.\n * @private\n */\n BlockWidget.prototype.isPageBreak = function () {\n var isPageBreak = false;\n if (this instanceof ParagraphWidget) {\n var paragraph = this;\n if (paragraph != null && paragraph.childWidgets.length === 1 &&\n paragraph.firstChild.children.length === 1) {\n var pageBreak = paragraph.firstChild.children[0];\n isPageBreak = pageBreak.isPageBreak;\n }\n }\n return isPageBreak;\n };\n /**\n * @private\n */\n BlockWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.containerWidget.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (!isNullOrUndefined(node.containerWidget)) {\n if (node.containerWidget instanceof BlockWidget) {\n return node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n else if (node.containerWidget instanceof BlockContainer) {\n hierarchicalIndex = node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n BlockWidget.prototype.getIndex = function () {\n if (this instanceof ParagraphWidget || this instanceof TableWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n else if (this instanceof TableRowWidget) {\n return this.ownerTable.childWidgets.indexOf(this);\n }\n else if (this instanceof TableCellWidget) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return 0;\n };\n /**\n * @private\n */\n BlockWidget.prototype.getContainerWidth = function () {\n if (this.isInsideTable) {\n return this.associatedCell.cellFormat.cellWidth - (this.associatedCell.margin.left + this.associatedCell.margin.right);\n }\n else {\n var bodyWidget = this.bodyWidget;\n var sectionFormat = bodyWidget.sectionFormat;\n return sectionFormat.pageWidth - (sectionFormat.leftMargin + sectionFormat.rightMargin);\n }\n };\n return BlockWidget;\n}(Widget));\nexport { BlockWidget };\n/**\n * @private\n */\nvar ParagraphWidget = /** @class */ (function (_super) {\n __extends(ParagraphWidget, _super);\n /**\n * Initialize the constructor of ParagraphWidget\n */\n function ParagraphWidget() {\n var _this = _super.call(this) || this;\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n Object.defineProperty(ParagraphWidget.prototype, \"isEndsWithPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this.childWidgets.length > 0) {\n return this.lastChild.isEndsWithPageBreak;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ParagraphWidget.prototype.equals = function (widget) {\n return widget instanceof ParagraphWidget && widget.paragraphFormat === this.paragraphFormat;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.isEmpty = function () {\n if (isNullOrUndefined(this.childWidgets) || this.childWidgets.length === 0) {\n return true;\n }\n for (var j = 0; j < this.childWidgets.length; j++) {\n var inlineElement = this.childWidgets[j];\n for (var i = 0; i < inlineElement.children.length; i++) {\n var inline = inlineElement.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return false;\n }\n }\n }\n return true;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.getInline = function (offset, indexInInline) {\n var inline = undefined;\n var count = 0;\n var isStarted = false;\n var splittedWidget = this.getSplitWidgets();\n for (var k = 0; k < splittedWidget.length; k++) {\n var widget = splittedWidget[k];\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n inline = line.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || inline instanceof BookmarkElementBox || inline instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inline))) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inline.length) {\n indexInInline = (offset - count);\n return { 'element': inline, 'index': indexInInline };\n }\n count += inline.length;\n }\n }\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inline) ? offset : inline.length;\n }\n return { 'element': inline, 'index': indexInInline };\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.getLength = function () {\n var length = 0;\n for (var j = 0; j < this.childWidgets.length; j++) {\n var line = this.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n length += element.length;\n }\n }\n return length;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.clone = function () {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(this.paragraphFormat);\n paragraph.characterFormat.copyFormat(this.characterFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var line = this.childWidgets[i];\n var cloneLine = line.clone();\n paragraph.childWidgets.push(cloneLine);\n cloneLine.paragraph = paragraph;\n }\n paragraph.x = this.x;\n paragraph.y = this.y;\n paragraph.height = this.height;\n paragraph.width = this.width;\n return paragraph;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroy();\n if (this.childWidgets.length === 1 && isNullOrUndefined(this.childWidgets[0].children)) {\n this.childWidgets = undefined;\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget) && !isNullOrUndefined(this.containerWidget.childWidgets)\n && this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n this.containerWidget.height -= height;\n // if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n // && this.containerWidget instanceof BodyWidget) {\n // // (this.containerWidget as BodyWidget).destroyInternal(viewer);\n // }\n this.containerWidget = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.destroy = function () {\n // if (this.paragraphFormat) {\n // this.paragraphFormat.destroy();\n // }\n this.paragraphFormat = undefined;\n // if (this.characterFormat) {\n // this.characterFormat.destroy();\n // }\n this.characterFormat = undefined;\n _super.prototype.destroy.call(this);\n };\n return ParagraphWidget;\n}(BlockWidget));\nexport { ParagraphWidget };\n/**\n * @private\n */\nvar TableWidget = /** @class */ (function (_super) {\n __extends(TableWidget, _super);\n function TableWidget() {\n var _this = _super.call(this) || this;\n _this.flags = 0;\n /**\n * @private\n */\n _this.leftMargin = 0;\n /**\n * @private\n */\n _this.topMargin = 0;\n /**\n * @private\n */\n _this.rightMargin = 0;\n /**\n * @private\n */\n _this.bottomMargin = 0;\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.tableFormat = new WTableFormat(_this);\n _this.tableHolder = new WTableHolder();\n _this.spannedRowCollection = new Dictionary();\n return _this;\n }\n Object.defineProperty(TableWidget.prototype, \"isGridUpdated\", {\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x4) >> 2) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFB) | ((value ? 1 : 0) << 2));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"continueHeader\", {\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x2) >> 1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFD) | ((value ? 1 : 0) << 1));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"header\", {\n /**\n * @private\n */\n get: function () {\n return (this.flags & 0x1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFE) | (value ? 1 : 0));\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableWidget.prototype.equals = function (widget) {\n return widget instanceof TableWidget && widget.tableFormat === this.tableFormat;\n };\n /**\n * @private\n */\n TableWidget.prototype.combineRows = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (row.childWidgets.length === 0) {\n row.destroy();\n i--;\n }\n else {\n row.combineCells(viewer);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.contains = function (tableCell) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return this.equals(tableCell.ownerTable);\n };\n /**\n * @private\n */\n TableWidget.prototype.getOwnerWidth = function (isBasedOnViewer) {\n var width = this.getContainerWidth();\n // Left and right indents should be neglected.\n width = width - this.leftIndent - this.rightIndent;\n return width >= 0 ? width : 0;\n };\n TableWidget.prototype.getTableWidth = function () {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidth = 0;\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n rowWidth += row.childWidgets[j].cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableClientWidth = function (clientWidth) {\n var tableWidth = clientWidth;\n if (this.tableFormat.preferredWidthType === 'Point'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = this.tableFormat.preferredWidth;\n }\n else {\n if (this.tableFormat.preferredWidthType === 'Percent'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = tableWidth * this.tableFormat.preferredWidth / 100;\n }\n else {\n //By default, if Table preferred widthType is auto , width is set based on ClientWidth and type is set as 'Point'\n this.tableFormat.preferredWidthType = 'Point';\n this.tableFormat.preferredWidth = tableWidth;\n }\n }\n return tableWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.getCellWidth = function (preferredWidth, preferredWidthType, containerWidth, cell) {\n var cellWidth = preferredWidth;\n if (preferredWidthType === 'Percent') {\n cellWidth = (preferredWidth * containerWidth) / 100;\n }\n else if (preferredWidthType === 'Point') {\n cellWidth = preferredWidth;\n }\n else if (!isNullOrUndefined(cell)) {\n cellWidth = cell.getMinimumPreferredWidth();\n }\n return cellWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitCellsToClientArea = function (clientWidth) {\n var tableWidth = this.getTableWidth();\n var factor = clientWidth / tableWidth;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.rowFormat.gridAfterWidth *= factor;\n row.rowFormat.gridBeforeWidth *= factor;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].cellFormat.cellWidth *= factor;\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableCellWidget = function (point) {\n var tableCellWidget = undefined;\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n tableCellWidget = this.childWidgets[i].getTableCellWidget(point);\n break;\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n TableWidget.prototype.calculateGrid = function () {\n var tempGrid = [];\n var spannedCells = [];\n var containerWidth = this.getOwnerWidth(true);\n var tableWidth = this.getTableClientWidth(containerWidth);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowFormat = row.rowFormat;\n var cellWidth = 0;\n var columnSpan = row.rowFormat.gridBefore;\n var currOffset = 0;\n if (tempGrid.indexOf(currOffset) < 0) {\n tempGrid.push(currOffset);\n }\n //Converts the row grid before width from point to twips point by 15 factor.\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, tableWidth, null);\n currOffset += cellWidth;\n var startOffset = Math.round(currOffset);\n if (tempGrid.indexOf(startOffset) < 0) {\n tempGrid.push(startOffset);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < spannedCells.length; k++) {\n if (spannedCells[k].columnIndex < columnSpan) {\n continue;\n }\n var rowSpan = spannedCells[k].cellFormat.rowSpan;\n var removeSpannedCell = true;\n if (spannedCells[k].columnIndex > columnSpan) {\n {\n removeSpannedCell = false;\n // If the cell is the last cell in the row and the row has grid after value..\n if (j === row.childWidgets.length - 1 && row.rowFormat.gridAfter > 0) {\n // tslint:disable-next-line:max-line-length\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n }\n }\n }\n else {\n // If the table gird alone calculted then column index of the rowspanned cell will be directly taken. \n // If the gird calculation is done from the UI level opearations such as resizing then table holder \n // will have the columns at that time we can get the column index from the table holder.\n //Converts the cell width from point to twips point by 15 factor.\n // tslint:disable-next-line:max-line-length\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - spannedCells[k].ownerRow.rowIndex === rowSpan - 1) {\n spannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (spannedCells.length === 0 || spannedCells[spannedCells.length - 1].columnIndex <= columnSpan) {\n spannedCells.push(cell);\n }\n else {\n for (var m = spannedCells.length; m > 0; m--) {\n if (spannedCells[m - 1].columnIndex > columnSpan) {\n spannedCells.splice(m - 1, 0, cell);\n }\n }\n }\n }\n columnSpan += cell.cellFormat.columnSpan;\n //Converts the cell width from pixel to twips point by 15 factor.\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n var offset = Math.round(currOffset);\n if (tempGrid.indexOf(offset) < 0) {\n tempGrid.push(offset);\n }\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfter > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n currOffset += cellWidth;\n if (tempGrid.indexOf(Math.round(currOffset)) < 0) {\n tempGrid.push(Math.round(currOffset));\n }\n columnSpan += rowFormat.gridAfter;\n }\n }\n }\n tempGrid.sort(function (a, b) { return a - b; });\n if (tempGrid.length - 1 !== this.tableHolder.columns.length) {\n this.updateColumnSpans(tempGrid, tableWidth);\n }\n };\n TableWidget.prototype.updateColumnSpans = function (tempGrid, containerWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (row.rowFormat.gridBeforeWidth >= 0) {\n row.rowFormat.gridBefore = row.getGridCount(tempGrid, -1, containerWidth);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnSpan = row.getGridCount(tempGrid, cell.getIndex(), containerWidth);\n if (columnSpan > 0 && cell.cellFormat.columnSpan !== columnSpan) {\n cell.cellFormat.columnSpan = columnSpan;\n }\n }\n if (row.rowFormat.gridAfterWidth >= 0) {\n row.rowFormat.gridAfter = row.getGridCount(tempGrid, row.childWidgets.length, containerWidth);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.buildTableColumns = function () {\n if (this.isGridUpdated) {\n return;\n }\n // Clear existing columns in order to start creating columns freshly.\n this.tableHolder.resetColumns();\n var containerWidth = 0;\n var tableWidth = 0;\n var rowSpannedCells = [];\n var isAutoWidth = this.tableFormat.preferredWidthType === 'Auto';\n // For continuous layout, window width should be considered. \n // If preferred width exceeds this limit, it can take upto maximum of 2112 pixels (1584 points will be assigned by Microsoft Word).\n containerWidth = this.getOwnerWidth(true);\n tableWidth = this.getTableClientWidth(containerWidth);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowFormat = row.rowFormat;\n var columnSpan = 0;\n var cellWidth = 0;\n var offset = 0;\n if (rowFormat.gridBefore > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, row.rowFormat.gridAfterWidthType, tableWidth, null);\n this.tableHolder.addColumns(columnSpan, columnSpan = rowFormat.gridBefore, cellWidth, cellWidth, offset = cellWidth);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (rowSpannedCells.length === 0) {\n cell.columnIndex = columnSpan;\n }\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.columnIndex < columnSpan) {\n cell.columnIndex = columnSpan;\n continue;\n }\n var rowSpan = 1;\n var removeSpannedCell = true;\n rowSpan = rowSpannedCell.cellFormat.rowSpan;\n if (rowSpannedCell.columnIndex > columnSpan) {\n cell.columnIndex = columnSpan;\n removeSpannedCell = false;\n }\n else {\n // tslint:disable-next-line:max-line-length\n cellWidth = this.getCellWidth(rowSpannedCell.cellFormat.preferredWidth, rowSpannedCell.cellFormat.preferredWidthType, tableWidth, rowSpannedCell);\n var minWidth_1 = rowSpannedCell.getMinimumPreferredWidth();\n // If the table gird alone calculted then column index of the rowspanned cell will be directly taken. \n // tslint:disable-next-line:max-line-length\n // If the gird calculation is done from the UI level opearations such as resizing then table holder will have the columns at that time we can get the column index from the table holder.\n // tslint:disable-next-line:max-line-length\n if (this.tableHolder.columns.length > 0) {\n this.tableHolder.addColumns(columnSpan, columnSpan = this.tableHolder.columns.indexOf(rowSpannedCell.ownerColumn) + rowSpannedCell.cellFormat.columnSpan, cellWidth, minWidth_1, offset += cellWidth);\n cell.columnIndex = columnSpan;\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.tableHolder.addColumns(columnSpan, columnSpan = rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan, cellWidth, minWidth_1, offset += cellWidth);\n cell.columnIndex = columnSpan;\n }\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - rowSpannedCell.ownerRow.rowIndex === rowSpan - 1) {\n rowSpannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (rowSpannedCells.length === 0 || rowSpannedCells[rowSpannedCells.length - 1].columnIndex <= columnSpan) {\n rowSpannedCells.push(cell);\n }\n else {\n for (var m = rowSpannedCells.length; m > 0; m--) {\n if (rowSpannedCells[m - 1].columnIndex > columnSpan) {\n rowSpannedCells.splice(m - 1, 0, cell);\n }\n }\n }\n }\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, cell);\n var minWidth = cell.getMinimumPreferredWidth();\n this.tableHolder.addColumns(columnSpan, columnSpan += cell.cellFormat.columnSpan, cellWidth, minWidth, offset += cellWidth);\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfterWidth > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n this.tableHolder.addColumns(columnSpan, columnSpan += rowFormat.gridAfter, cellWidth, cellWidth, offset += cellWidth);\n }\n }\n }\n this.tableHolder.validateColumnWidths();\n // Fits the column width based on preferred width. i.e. Fixed layout.\n this.tableHolder.fitColumns(containerWidth, tableWidth, isAutoWidth);\n //Sets the width to cells\n this.setWidthToCells(tableWidth, isAutoWidth);\n };\n /**\n * @private\n */\n TableWidget.prototype.setWidthToCells = function (tableWidth, isAutoWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rw = this.childWidgets[i];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.beforeWidth = this.tableHolder.getCellWidth(0, rowFormat.gridBefore, tableWidth, isAutoWidth);\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[j];\n // tslint:disable-next-line:max-line-length\n cell.cellFormat.cellWidth = this.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth, isAutoWidth);\n //By default, if cell preferred widthType is auto , width set based on table width and type is changed to 'Point'\n if (cell.cellFormat.preferredWidthType !== 'Percent') {\n cell.cellFormat.preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.afterWidth = this.tableHolder.getCellWidth(0, rowFormat.gridAfter, tableWidth, isAutoWidth);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getMaxRowWidth = function (clientWidth) {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, clientWidth, cell);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateWidth = function (dragValue) {\n var totalPreferredWidth = this.tableHolder.getTotalWidth();\n var containerWidth = this.getTableClientWidth(this.getOwnerWidth(true));\n if (containerWidth <= totalPreferredWidth) {\n if (this.tableFormat.preferredWidthType === 'Auto') {\n this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (this.tableFormat.preferredWidthType !== 'Auto') {\n if (this.tableFormat.preferredWidthType === 'Point') {\n this.tableFormat.preferredWidth = this.getMaxRowWidth(containerWidth);\n }\n // else\n // { //ToDo:Need to anzlyze more the Percentage calculation for table width.\n // let value:number = ConvertPixelToPercent(GetMaxRowWidth(containerWidth));\n // this.tableFormat.preferredWidth = value;\n // }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.convertPointToPercent = function (tablePreferredWidth, ownerWidth) {\n var value = 0;\n value = (tablePreferredWidth / ownerWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n /**\n * @private\n */\n TableWidget.prototype.clone = function () {\n var table = new TableWidget();\n table.tableHolder = this.tableHolder.clone();\n table.tableFormat.copyFormat(this.tableFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i].clone();\n table.childWidgets.push(row);\n row.containerWidget = table;\n row.index = i;\n }\n table.x = this.x;\n table.y = this.y;\n table.height = this.height;\n table.width = this.width;\n table.containerWidget = this.containerWidget;\n return table;\n };\n /**\n * @private\n */\n TableWidget.getTableOf = function (node) {\n if (node instanceof WBorders) {\n var row = TableRowWidget.getRowOf(node);\n if (!isNullOrUndefined(row)) {\n return row.ownerTable;\n }\n else if (node.ownerBase instanceof WTableFormat && node.ownerBase.ownerBase instanceof TableWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitChildToClientArea = function () {\n var clientWidth = this.getContainerWidth();\n if (Math.round(clientWidth) < Math.round(this.getTableWidth())) {\n this.fitCellsToClientArea(clientWidth);\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n if (cell.childWidgets[k] instanceof TableWidget) {\n cell.childWidgets[k].fitChildToClientArea();\n }\n }\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getColumnCellsForSelection = function (startCell, endCell) {\n var cells = [];\n var start = startCell.columnIndex;\n var end = endCell.columnIndex + endCell.cellFormat.columnSpan;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnIndex = cell.columnIndex;\n var columnSpan = cell.cellFormat.columnSpan;\n if ((columnIndex + columnSpan > start && columnIndex + columnSpan < end) || (columnIndex > start && columnIndex < end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if ((columnIndex > start && columnIndex < end && columnIndex + columnSpan < end)\n || (columnIndex < start && columnIndex + columnSpan > end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if (columnIndex === start || columnIndex + columnSpan === end) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n /**\n * Splits width equally for all the cells.\n * @param tableClientWidth\n * @private\n */\n TableWidget.prototype.splitWidthToTableCells = function (tableClientWidth) {\n for (var row = 0; row < this.childWidgets.length; row++) {\n this.childWidgets[row].splitWidthToRowCells(tableClientWidth);\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.insertTableRowsInternal = function (tableRows, startIndex) {\n for (var i = 0; i < tableRows.length; i++) {\n var row = tableRows.splice(i, 1)[0];\n row.containerWidget = this;\n this.childWidgets.splice(startIndex, 0, row);\n i--;\n }\n this.updateRowIndex(startIndex);\n this.isGridUpdated = false;\n this.buildTableColumns();\n this.isGridUpdated = true;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateRowIndex = function (startIndex) {\n for (var i = startIndex; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.index = i;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].index = j;\n row.childWidgets[j].rowIndex = row.rowIndex;\n }\n startIndex++;\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var j = 0; j < this.childWidgets.length; j++) {\n var widget = undefined;\n var childWidget = this.childWidgets[j];\n widget = childWidget;\n if (!isNullOrUndefined(widget)) {\n widget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n j--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n if (this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n }\n this.containerWidget.height -= height;\n // if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n // && this.containerWidget instanceof BodyWidget) {\n // // (this.containerWidget as BodyWidget).destroyInternal(viewer);\n // }\n }\n this.containerWidget = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableWidget.prototype.destroy = function () {\n // if (this.tableFormat) {\n // this.tableFormat.destroy();\n // }\n this.tableFormat = undefined;\n // if (this.spannedRowCollection) {\n // this.spannedRowCollection.destroy();\n // }\n this.spannedRowCollection = undefined;\n this.tableGrids = [];\n this.tableGrids = undefined;\n // if (this.tableHolder) {\n // this.tableHolder.destroy();\n // }\n this.tableHolder = undefined;\n this.flags = undefined;\n this.leftMargin = undefined;\n this.topMargin = undefined;\n this.rightMargin = undefined;\n this.bottomMargin = undefined;\n this.headerHeight = undefined;\n this.description = undefined;\n this.title = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableWidget;\n}(BlockWidget));\nexport { TableWidget };\n/**\n * @private\n */\nvar TableRowWidget = /** @class */ (function (_super) {\n __extends(TableRowWidget, _super);\n function TableRowWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.spannedRowCollection = [];\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.rowFormat = new WRowFormat(_this);\n return _this;\n }\n Object.defineProperty(TableRowWidget.prototype, \"rowIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"nextRow\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.ownerTable.childWidgets.length - 1) {\n return this.ownerTable.childWidgets[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableRowWidget.prototype.equals = function (widget) {\n return widget instanceof TableRowWidget && widget.rowFormat === this.rowFormat;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.combineCells = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n cell.combineWidget(viewer);\n if (cell.cellFormat.rowSpan === 1) {\n var cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n if ((this.height - this.ownerTable.tableFormat.cellSpacing) < cell.height) {\n this.height = this.ownerTable.tableFormat.cellSpacing + cell.height;\n }\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.getRowOf = function (node) {\n if (node instanceof WBorders) {\n var cell = TableCellWidget.getCellOf(node);\n if (!isNullOrUndefined(cell)) {\n return cell.ownerRow;\n }\n else if (node.ownerBase instanceof WRowFormat && node.ownerBase.ownerBase instanceof TableRowWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getCell = function (rowIndex, cellIndex) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n if (cell.rowIndex === rowIndex && cell.index === cellIndex) {\n return cell;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.splitWidthToRowCells = function (tableClientWidth) {\n var cells = this.childWidgets;\n var cellWidth = tableClientWidth / cells.length;\n for (var cell = 0; cell < cells.length; cell++) {\n cells[cell].cellFormat.preferredWidth = cellWidth;\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getGridCount = function (tableGrid, index, containerWidth) {\n var prevOffset = 0;\n var width = 0;\n var ownerTable = this.ownerTable;\n var rowFormat = this.rowFormat;\n if (index === -1) {\n width = ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n }\n else {\n prevOffset += ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n if (index > 0) {\n prevOffset += this.getCellOffset(index, containerWidth);\n }\n if (index < this.childWidgets.length) {\n var cell = this.childWidgets[index];\n width = ownerTable.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, containerWidth, null);\n }\n else {\n width = ownerTable.getCellWidth(rowFormat.gridAfterWidth, rowFormat.gridAfterWidthType, containerWidth, null);\n }\n }\n var gridStartIndex = this.getOffsetIndex(tableGrid, prevOffset);\n var gridEndIndex = this.getOffsetIndex(tableGrid, prevOffset + width);\n return gridEndIndex - gridStartIndex;\n };\n TableRowWidget.prototype.getOffsetIndex = function (tableGrid, offset) {\n offset = Math.round(offset);\n var index = 0;\n if (tableGrid.indexOf(offset) >= 0) {\n index = tableGrid.indexOf(offset);\n }\n else {\n for (var i = 0; i < tableGrid.length; i++) {\n if (tableGrid[i] > offset) {\n return i;\n }\n }\n index = tableGrid.length - 1;\n }\n return index;\n };\n TableRowWidget.prototype.getCellOffset = function (index, containerWidth) {\n var prevOffset = 0;\n var ownerTable = this.ownerTable;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cellFormat = this.childWidgets[i].cellFormat;\n if (i === index) {\n break;\n }\n prevOffset += ownerTable.getCellWidth(cellFormat.preferredWidth, cellFormat.preferredWidthType, containerWidth, null);\n }\n return prevOffset;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.updateRowBySpannedCells = function () {\n var rowSpannedCells = this.getPreviousRowSpannedCells();\n var currentRowIndex = this.rowIndex;\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCell = rowSpannedCells[i];\n var rowSpanEnd = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n // If current row is row span end or includes spanned cells. then, decrease the rowspan\n if (rowSpanEnd >= currentRowIndex) {\n spannedCell.cellFormat.rowSpan -= 1;\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getPreviousRowSpannedCells = function (include) {\n var rowSpannedCells = [];\n var row = include ? this : this.previousWidget;\n while (!isNullOrUndefined(row)) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.splice(0, 0, cell);\n }\n }\n row = row.previousWidget;\n }\n return rowSpannedCells;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var x = Math.round(this.childWidgets[i].x);\n if (x - this.childWidgets[i].margin.left - 1 <= point.x\n && (x + this.childWidgets[i].width) >= point.x) {\n return this.childWidgets[i];\n }\n else if (i === this.childWidgets.length - 1\n && (this.childWidgets[i].x + this.childWidgets[i].width) + 1 <= point.x) {\n return this.childWidgets[i];\n }\n }\n var cellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].x <= point.x) {\n cellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n cellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return cellWidget;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroyInternal(viewer);\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n && this.containerWidget instanceof TableWidget) {\n this.containerWidget.destroyInternal(viewer);\n }\n else if (this.containerWidget.containerWidget instanceof BodyWidget) {\n this.containerWidget.containerWidget.height -= height;\n }\n this.containerWidget.height -= height;\n }\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableRowWidget.prototype.clone = function () {\n var row = new TableRowWidget();\n row.rowFormat.copyFormat(this.rowFormat);\n row.topBorderWidth = this.topBorderWidth;\n row.bottomBorderWidth = this.bottomBorderWidth;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i].clone();\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = i;\n cell.rowIndex = this.rowIndex;\n }\n row.x = this.x;\n row.y = this.y;\n row.height = this.height;\n row.width = this.width;\n return row;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroy = function () {\n // if (this.rowFormat) {\n // this.rowFormat.destroy();\n // }\n this.rowFormat = undefined;\n this.rowFormat = undefined;\n this.spannedRowCollection = [];\n this.spannedRowCollection = undefined;\n this.topBorderWidth = undefined;\n this.bottomBorderWidth = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableRowWidget;\n}(BlockWidget));\nexport { TableRowWidget };\n/**\n * @private\n */\nvar TableCellWidget = /** @class */ (function (_super) {\n __extends(TableCellWidget, _super);\n function TableCellWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.rowIndex = -1;\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.cellFormat = new WCellFormat(_this);\n return _this;\n }\n Object.defineProperty(TableCellWidget.prototype, \"ownerColumn\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerTable.tableHolder.columns[this.columnIndex];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"leftMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.leftMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.leftMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"topMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.topMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.topMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"rightMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.rightMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.rightMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"bottomMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.bottomMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.bottomMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"cellIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.ownerRow) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableRowWidget) {\n return this.containerWidget.ownerTable;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerRow\", {\n /**\n * @private\n */\n get: function () {\n return this.containerWidget;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableCellWidget.prototype.equals = function (widget) {\n return widget instanceof TableCellWidget && widget.cellFormat === this.cellFormat;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getContainerTable = function () {\n var table = this.ownerTable;\n while (table instanceof TableWidget && table.associatedCell instanceof TableCellWidget) {\n table = table.associatedCell.getContainerTable();\n }\n return table;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousSplitWidget = function () {\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.previousRenderedWidget;\n if (isNullOrUndefined(row) || row.index < this.rowIndex) {\n break;\n }\n var previousCell = row.getCell(this.rowIndex, this.index);\n if (previousCell && this.equals(previousCell)) {\n return previousCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getNextSplitWidget = function () {\n var rowSpan = this.cellFormat.rowSpan;\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.nextRenderedWidget;\n if (isNullOrUndefined(row) || row.index > this.rowIndex + rowSpan) {\n break;\n }\n var nextCell = row.getCell(this.rowIndex, this.index);\n if (nextCell && this.equals(nextCell)) {\n return nextCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n return this.childWidgets[i].getTableCellWidget(point);\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= point.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.updateWidth = function (preferredWidth) {\n if (this.cellFormat.preferredWidthType === 'Auto') {\n this.cellFormat.preferredWidth = preferredWidth;\n this.cellFormat.preferredWidthType = 'Point';\n }\n else if (this.cellFormat.preferredWidthType === 'Point') {\n this.cellFormat.preferredWidth = preferredWidth;\n }\n else if (this.cellFormat.preferredWidthType === 'Percent') {\n this.cellFormat.preferredWidth = this.convertPointToPercent(preferredWidth);\n }\n this.cellFormat.cellWidth = preferredWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.convertPointToPercent = function (cellPreferredWidth) {\n var value = 0;\n var clientWidth = this.ownerTable.getOwnerWidth(true);\n var tableWidth = this.ownerTable.getTableClientWidth(clientWidth);\n value = (cellPreferredWidth / tableWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n /**\n * @private\n */\n TableCellWidget.getCellLeftBorder = function (tableCell) {\n var leftBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.left)) {\n leftBorder = cellBorder.left;\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n else {\n var prevCell = undefined;\n if (!isNullOrUndefined(tableCell.previousWidget)) {\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n prevCell = tableCell.previousWidget;\n }\n else if ((tableCell.cellFormat.columnSpan > 1 || tableCell.columnIndex > 1) && tableCell.ownerRow.rowIndex > 0) {\n var previousRow = tableCell.ownerRow.previousWidget;\n while (!isNullOrUndefined(previousRow) && previousRow.childWidgets.length > 0) {\n for (var i = 0; i < previousRow.childWidgets.length; i++) {\n var prevRowCell = previousRow.childWidgets[i];\n if (prevRowCell.columnIndex + prevRowCell.cellFormat.columnSpan === tableCell.columnIndex) {\n prevCell = previousRow.childWidgets[i];\n break;\n }\n }\n if (!isNullOrUndefined(prevCell)) {\n break;\n }\n previousRow = previousRow.previousWidget;\n }\n }\n leftBorder = tableCell.getPreviousCellLeftBorder(leftBorder, prevCell);\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderWidth = function () {\n var borderWidth = 0;\n //let ownerTable = this.ownerTable;\n //Added null condition check for asynchronous loading.\n // if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n // update the margins values respect to layouting of borders.\n //For normal table cells only left border is rendred. for last cell left and right border is rendred.\n // this border widths are not included in margins.\n // boderWidth = this.cellFormat.borders.GetRightBorderToRender(this).GetLineWidth();\n //need to render rightBorder specifically for all the cells when the cellSpacing is greater than zero or for last cell of each row.\n // }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderWidth = function () {\n var borderWidth = 0;\n var ownerTable = this.ownerTable;\n //Added null condition check for asynchronous loading.\n // if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n ///need to render right border specifically for all the cells when the cell spacing is \n //greater than zero or for last cell of each row.\n // let isLastCell: boolean = false;\n // isLastCell = this.cellIndex === 0;\n // if (ownerTable.tableFormat.cellSpacing > 0 || isLastCell) {\n // boderWidth = this.cellFormat.borders.getLeftBorderToRender(this).GetLineWidth();\n // }\n // }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellSpacing = function () {\n var actualCellSpacing = this.ownerTable && this.ownerTable.tableFormat ? this.ownerTable.tableFormat.cellSpacing : 0;\n var cellSpacingToLayout = actualCellSpacing;\n // Considers the left, right margins and border widths(only available for Layouted table) for Minimum width.\n if (this.ownerRow.childWidgets.length === 1) {\n cellSpacingToLayout = actualCellSpacing * 2;\n }\n else if (this.cellIndex === 0 || this.cellIndex === this.ownerRow.childWidgets.length - 1) {\n cellSpacingToLayout = actualCellSpacing + (actualCellSpacing / 2);\n }\n else {\n cellSpacingToLayout = actualCellSpacing;\n }\n return cellSpacingToLayout;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getMinimumPreferredWidth = function () {\n var defaultWidth = 0;\n defaultWidth = this.leftMargin + this.rightMargin + this.getLeftBorderWidth() + this.getRightBorderWidth() + this.getCellSpacing();\n return defaultWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellLeftBorder = function (leftBorder, previousCell) {\n // tslint:disable-next-line:max-line-length\n if ((isNullOrUndefined(previousCell) || (!isNullOrUndefined(leftBorder) && (leftBorder.lineStyle === 'None' && !leftBorder.hasNoneStyle)))) {\n if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var prevCellRightBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(previousCell.cellFormat.borders) && !isNullOrUndefined(previousCell.cellFormat.borders.right) && previousCell.cellFormat.borders.right.lineStyle !== 'None') {\n prevCellRightBorder = previousCell.cellFormat.borders.right;\n }\n if (!isNullOrUndefined(prevCellRightBorder) && prevCellRightBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(prevCellRightBorder, leftBorder);\n }\n else if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBorderBasedOnPriority = function (border, adjacentBorder) {\n // If the cell and its adjacent cell defined different borders then based on this algorithm the border choose to render.\n // Reference link :https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.wordprocessing.tablecellborders.aspx\n if (isNullOrUndefined(border)) {\n return adjacentBorder;\n }\n else if (isNullOrUndefined(adjacentBorder)) {\n return border;\n }\n var borderWeight = border.getBorderWeight();\n var adjacentBorderWeight = adjacentBorder.getBorderWeight();\n //the border with higher wight shall be displayed.\n if (borderWeight === adjacentBorderWeight) {\n //if the border is equal weight the based on the priority the border will be choosen to render.\n var borderPriority = border.getPrecedence();\n var adjacentBorderPriority = adjacentBorder.getPrecedence();\n if (borderPriority === adjacentBorderPriority) {\n //The color with the smaller brightness value shall be displayed.\n var borderColInRGB = this.convertHexToRGB(border.color);\n var R1 = borderColInRGB.r;\n var G1 = borderColInRGB.g;\n var B1 = borderColInRGB.b;\n var adjacentBorderColInRGB = this.convertHexToRGB(adjacentBorder.color);\n var R2 = adjacentBorderColInRGB.r;\n var G2 = adjacentBorderColInRGB.g;\n var B2 = adjacentBorderColInRGB.b;\n var borderBrightness = (R1 + B1 + (2 * G1));\n var adjacentBorderBrightness = (R2 + B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n borderBrightness = (B1 + (2 * G1));\n adjacentBorderBrightness = (B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n if (G1 === G2) {\n return border;\n }\n else if (G1 > G2) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderPriority > adjacentBorderPriority) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n }\n else if (borderWeight > adjacentBorderWeight) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderToRenderByHierarchy = function (leftBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(leftBorder) && (leftBorder.lineStyle !== 'None' || (leftBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(leftBorder.lineStyle === 'None' && leftBorder.lineWidth === 0 && leftBorder.color === '#000000')))) {\n return leftBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(leftBorder) && (leftBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(leftBorder.ownerBase).columnIndex === 0) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.left)) {\n leftBorder = tableBorders.left;\n }\n return leftBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.vertical) && rowBorders.vertical.lineStyle !== 'None') {\n return leftBorder = rowBorders.vertical;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.vertical) && tableBorders.vertical.lineStyle !== 'None') {\n return leftBorder = tableBorders.vertical;\n }\n else {\n return leftBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.getCellRightBorder = function (tableCell) {\n var rightBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.right)) {\n rightBorder = cellBorder.right;\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n else {\n var nextCell = undefined;\n if (!isNullOrUndefined(tableCell.nextWidget)) {\n nextCell = tableCell.nextWidget;\n }\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n rightBorder = tableCell.getAdjacentCellRightBorder(rightBorder, nextCell);\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellRightBorder = function (rightBorder, nextCell) {\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(nextCell) || (!isNullOrUndefined(rightBorder) && (rightBorder.lineStyle === 'None' && !rightBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var nextCellLeftBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(nextCell.cellFormat.borders) && !isNullOrUndefined(nextCell.cellFormat.borders.left) && nextCell.cellFormat.borders.left.lineStyle !== 'None') {\n nextCellLeftBorder = nextCell.cellFormat.borders.left;\n }\n if (!isNullOrUndefined(nextCellLeftBorder) && nextCellLeftBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(rightBorder, nextCellLeftBorder);\n }\n else if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderToRenderByHierarchy = function (rightBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(rightBorder) && (rightBorder.lineStyle !== 'None' || (rightBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(rightBorder.lineStyle === 'None' && rightBorder.lineWidth === 0 && rightBorder.color === '#000000')))) {\n return rightBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(rightBorder) && (rightBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(rightBorder.ownerBase).columnIndex === TableCellWidget.getCellOf(rightBorder.ownerBase).ownerRow.childWidgets.length - 1) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.right)) {\n rightBorder = tableBorders.right;\n }\n return rightBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.vertical) && rowBorders.vertical.lineStyle !== 'None') {\n return rightBorder = rowBorders.vertical;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.vertical) && tableBorders.vertical.lineStyle !== 'None') {\n return rightBorder = tableBorders.vertical;\n }\n else {\n return rightBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.getCellTopBorder = function (tableCell) {\n var topBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.top)) {\n topBorder = cellBorder.top;\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n else {\n var prevTopCell = undefined;\n //ToDo: Need to analyze more to get the previous cell.\n var prevRow = tableCell.ownerRow.previousWidget;\n while (!isNullOrUndefined(prevRow) && prevRow.childWidgets.length > 0) {\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n var prevRowCell = prevRow.childWidgets[i];\n if (prevRowCell.columnIndex + prevRowCell.cellFormat.columnSpan - 1 >= tableCell.columnIndex) {\n prevTopCell = prevRow.childWidgets[i];\n break;\n }\n }\n if (!isNullOrUndefined(prevTopCell)) {\n break;\n }\n prevRow = prevRow.previousWidget;\n //If all the previous rows checked and the previous top cell is null\n // then TableCell previus row matched column index cell is taken for border calculation.\n if (isNullOrUndefined(prevRow) && isNullOrUndefined(prevTopCell)) {\n prevRow = tableCell.ownerRow.previousWidget;\n if (tableCell.columnIndex < prevRow.childWidgets.length) {\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n var prevRowCell = prevRow.childWidgets[i];\n if (prevRowCell.columnIndex === tableCell.columnIndex) {\n prevTopCell = prevRow.childWidgets[i];\n break;\n }\n }\n //If table cell Column index is greater than previous row cells count then last cell is taken as previous top cell.\n }\n else {\n // tslint:disable-next-line:max-line-length\n prevTopCell = tableCell.ownerRow.previousWidget.childWidgets[tableCell.ownerRow.previousWidget.childWidgets.length - 1];\n }\n }\n }\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n topBorder = tableCell.getPreviousCellTopBorder(topBorder, prevTopCell);\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellTopBorder = function (topBorder, previousTopCell) {\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(previousTopCell) || (!isNullOrUndefined(topBorder) && (topBorder.lineStyle === 'None' && !topBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var prevTopCellBottomBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(previousTopCell.cellFormat.borders) && !isNullOrUndefined(previousTopCell.cellFormat.borders.bottom) && previousTopCell.cellFormat.borders.bottom.lineStyle !== 'None') {\n prevTopCellBottomBorder = previousTopCell.cellFormat.borders.bottom;\n }\n if (!isNullOrUndefined(prevTopCellBottomBorder) && prevTopCellBottomBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(topBorder, prevTopCellBottomBorder);\n }\n else if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTopBorderToRenderByHierarchy = function (topBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(topBorder) && (topBorder.lineStyle !== 'None' || (topBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(topBorder.lineStyle === 'None' && topBorder.lineWidth === 0 && topBorder.color === '#000000')))) {\n return topBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(topBorder) && (topBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(topBorder.ownerBase).ownerRow.rowIndex === 0) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.top)) {\n topBorder = tableBorders.top;\n }\n return topBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.horizontal) && rowBorders.horizontal.lineStyle !== 'None') {\n return topBorder = rowBorders.horizontal;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.horizontal) && tableBorders.horizontal.lineStyle !== 'None') {\n return topBorder = tableBorders.horizontal;\n }\n else {\n return topBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.getCellBottomBorder = function (tableCell) {\n var bottomBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.bottom)) {\n bottomBorder = cellBorder.bottom;\n }\n if (isNullOrUndefined(bottomBorder)) {\n // tslint:disable-next-line:max-line-length\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders); // select the left border based on heirarchy.\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders);\n }\n else {\n var nextBottomCell = undefined;\n var nextRow = tableCell.ownerRow.nextWidget;\n if (!isNullOrUndefined(nextRow) && tableCell.columnIndex < nextRow.childWidgets.length) {\n nextBottomCell = nextRow.childWidgets[tableCell.columnIndex];\n }\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n bottomBorder = tableCell.getAdjacentCellBottomBorder(bottomBorder, nextBottomCell);\n }\n if (isNullOrUndefined(bottomBorder)) {\n bottomBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellBottomBorder = function (bottomBorder, nextBottomCell) {\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(nextBottomCell) || (!isNullOrUndefined(bottomBorder) && (bottomBorder.lineStyle === 'None' && !bottomBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var prevBottomCellTopBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(nextBottomCell.cellFormat.borders) && !isNullOrUndefined(nextBottomCell.cellFormat.borders.top) && nextBottomCell.cellFormat.borders.top.lineStyle !== 'None') {\n prevBottomCellTopBorder = nextBottomCell.cellFormat.borders.top;\n }\n if (!isNullOrUndefined(prevBottomCellTopBorder) && prevBottomCellTopBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(bottomBorder, prevBottomCellTopBorder);\n }\n else if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBottomBorderToRenderByHierarchy = function (bottomBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(bottomBorder) && (bottomBorder.lineStyle !== 'None' || (bottomBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(bottomBorder.lineStyle === 'None' && bottomBorder.lineWidth === 0 && bottomBorder.color === '#000000')))) {\n return bottomBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(bottomBorder) && (bottomBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(bottomBorder.ownerBase).ownerRow.rowIndex + TableCellWidget.getCellOf(bottomBorder.ownerBase).cellFormat.rowSpan === TableCellWidget.getCellOf(bottomBorder.ownerBase).ownerTable.childWidgets.length) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.bottom)) {\n bottomBorder = tableBorders.bottom;\n }\n return bottomBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.horizontal) && rowBorders.horizontal.lineStyle !== 'None') {\n return bottomBorder = rowBorders.horizontal;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.horizontal) && tableBorders.horizontal.lineStyle !== 'None') {\n return bottomBorder = tableBorders.horizontal;\n }\n else {\n return bottomBorder;\n }\n };\n TableCellWidget.prototype.convertHexToRGB = function (colorCode) {\n if (colorCode) {\n colorCode = colorCode.replace(/[^0-9A-‌​F]/gi, ''); // To remove # from color code string.\n var colCodeNo = parseInt(colorCode, 16);\n var r = (colCodeNo >> 16) & 255;\n var g = (colCodeNo >> 8) & 255;\n var b = colCodeNo & 255;\n return { 'r': r, 'g': g, 'b': b };\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.getCellOf = function (node) {\n if (node instanceof WBorders) {\n if (node.ownerBase instanceof WCellFormat && node.ownerBase.ownerBase instanceof TableCellWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroyInternal = function (viewer) {\n // let viewer: LayoutViewer = undefined;\n // let page: Page = this.getPage();\n // if (!isNullOrUndefined(page ))\n // viewer = page.viewer;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n if (widget instanceof ParagraphWidget) {\n widget.destroyInternal(viewer);\n }\n else {\n widget.destroyInternal(viewer);\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableCellWidget.prototype.clone = function () {\n var cell = new TableCellWidget();\n cell.cellFormat.copyFormat(this.cellFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n cell.childWidgets.push(block);\n block.containerWidget = cell;\n block.index = i;\n }\n cell.leftBorderWidth = this.leftBorderWidth;\n cell.rightBorderWidth = this.rightBorderWidth;\n if (this.margin) {\n cell.margin = this.margin.clone();\n }\n cell.columnIndex = this.columnIndex;\n cell.x = this.x;\n cell.y = this.y;\n cell.height = this.height;\n cell.width = this.width;\n return cell;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroy = function () {\n // if (this.cellFormat) {\n // this.cellFormat.destroy();\n // }\n this.cellFormat = undefined;\n this.rowIndex = undefined;\n this.columnIndex = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableCellWidget;\n}(BlockWidget));\nexport { TableCellWidget };\n/**\n * @private\n */\nvar LineWidget = /** @class */ (function () {\n /**\n * Initialize the constructor of LineWidget\n */\n function LineWidget(paragraphWidget) {\n /**\n * @private\n */\n this.children = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n this.paragraph = paragraphWidget;\n }\n Object.defineProperty(LineWidget.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n if (this.paragraph && this.paragraph.childWidgets) {\n return this.paragraph.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"nextLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n if (lineIndex <= paragraph.childWidgets.length - 2) {\n return paragraph.childWidgets[lineIndex + 1];\n }\n else if (paragraph.nextSplitWidget) {\n var line = paragraph.nextSplitWidget.firstChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"previousLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n var splitParagraph = paragraph.previousSplitWidget;\n if (lineIndex > 0) {\n return paragraph.childWidgets[lineIndex - 1];\n }\n else if (splitParagraph instanceof ParagraphWidget) {\n var line = splitParagraph.lastChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"isEndsWithPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this.children.length > 0) {\n var lastElement = this.children[this.children.length - 1];\n if (lastElement instanceof TextElementBox) {\n return lastElement.isPageBreak;\n }\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n LineWidget.prototype.isFirstLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && this.paragraph.previousSplitWidget === undefined) {\n return index === 0;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.isLastLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && this.paragraph.nextSplitWidget === undefined) {\n return index === this.paragraph.childWidgets.length - 1;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.getOffset = function (inline, index) {\n if (isNullOrUndefined(inline)) {\n return index;\n }\n var textIndex = index;\n var line = inline.line;\n var lineIndex = inline.line.paragraph.childWidgets.indexOf(inline.line);\n for (var i = 0; i < line.children.length; i++) {\n var inlineElement = line.children[i];\n if (inline === inlineElement) {\n break;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n textIndex += inlineElement.length;\n }\n return textIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.getEndOffset = function () {\n var startOffset = 0;\n var count = 0;\n for (var i = 0; i < this.children.length; i++) {\n var inlineElement = this.children[i];\n if (inlineElement.length === 0) {\n continue;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (inlineElement instanceof TextElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof BookmarkElementBox || (inlineElement instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n startOffset = count + inlineElement.length;\n }\n count += inlineElement.length;\n }\n return startOffset;\n };\n /**\n * @private\n */\n LineWidget.prototype.getInline = function (offset, indexInInline) {\n var inlineElement = undefined;\n var count = 0;\n var isStarted = false;\n if (this.children.length === 0) {\n if (this.previousLine) {\n var elementBox = this.previousLine.children[this.previousLine.children.length - 1];\n if (elementBox instanceof TextElementBox && elementBox.text === '\\v') {\n inlineElement = this.previousLine.children[this.previousLine.children.length - 1];\n indexInInline = 1;\n return { 'element': inlineElement, 'index': indexInInline };\n }\n }\n }\n for (var i = 0; i < this.children.length; i++) {\n inlineElement = this.children[i];\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inlineElement instanceof TextElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof BookmarkElementBox\n || inlineElement instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inlineElement.length) {\n indexInInline = (offset - count);\n return { 'element': inlineElement, 'index': indexInInline };\n }\n count += inlineElement.length;\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inlineElement) ? offset : inlineElement.length;\n }\n return { 'element': inlineElement, 'index': indexInInline };\n };\n /**\n * @private\n */\n LineWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.paragraph.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (node.paragraph instanceof BlockWidget) {\n return node.paragraph.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.clone = function () {\n var line = new LineWidget(undefined);\n for (var j = 0; j < this.children.length; j++) {\n var element = this.children[j];\n var clone = element.clone();\n line.children.push(clone);\n clone.line = line;\n }\n line.width = this.width;\n line.height = this.height;\n return line;\n };\n /**\n * @private\n */\n LineWidget.prototype.destroy = function () {\n if (!isNullOrUndefined(this.children)) {\n for (var i = 0; i < this.children.length; i++) {\n this.children[i].destroy();\n }\n this.children = [];\n }\n this.children = undefined;\n if (this.paragraph) {\n this.paragraph.removeChild(this.indexInOwner);\n }\n this.paragraph = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n return LineWidget;\n}());\nexport { LineWidget };\n/**\n * @private\n */\nvar ElementBox = /** @class */ (function () {\n /**\n * Initialize the constructor of ElementBox\n */\n function ElementBox() {\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.margin = new Margin(0, 0, 0, 0);\n /**\n * @private\n */\n this.characterFormat = undefined;\n this.characterFormat = new WCharacterFormat(this);\n this.margin = new Margin(0, 0, 0, 0);\n }\n Object.defineProperty(ElementBox.prototype, \"isPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this instanceof TextElementBox) {\n return this.text === '\\f';\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ElementBox.prototype.linkFieldCharacter = function (viewer) {\n if (!(this instanceof FieldElementBox)) {\n return;\n }\n if (this.fieldType === 0) {\n var fieldBegin = this;\n if (isNullOrUndefined(fieldBegin.fieldEnd)) {\n this.linkFieldTraversingForward(this.line, fieldBegin, fieldBegin);\n if (viewer.fields.indexOf(fieldBegin) === -1) {\n viewer.fields.push(fieldBegin);\n }\n }\n }\n else if (this.fieldType === 2) {\n var fieldSeparator = this;\n //Links the field begin for the current separator.\n if (isNullOrUndefined(fieldSeparator.fieldBegin)) {\n this.linkFieldTraversingBackwardSeparator(this.line, fieldSeparator, fieldSeparator);\n }\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n if (!isNullOrUndefined(fieldSeparator.fieldBegin)) {\n //Links to field end traversing from field separator.\n var isFieldEnd = this.linkFieldTraversingForward(this.line, fieldSeparator.fieldBegin, fieldSeparator);\n if (isNullOrUndefined(fieldSeparator.fieldEnd) && isFieldEnd) {\n fieldSeparator.fieldEnd = fieldSeparator.fieldBegin.fieldEnd;\n }\n if (fieldSeparator.fieldEnd) {\n fieldSeparator.fieldEnd.fieldSeparator = fieldSeparator;\n }\n }\n }\n else {\n var fieldEnd = this;\n //Links the field begin and separator for the current end.\n if (isNullOrUndefined(fieldEnd.fieldBegin)) {\n this.linkFieldTraversingBackward(this.line, fieldEnd, fieldEnd);\n }\n }\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackward = function (line, fieldEnd, previousNode) {\n var k = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n k = line.children.indexOf(previousNode) - 1;\n }\n for (var j = k; j >= 0; j--) {\n var childNode = line.children[j];\n if (childNode instanceof FieldElementBox) {\n if (childNode.fieldType === 0) {\n if (isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldEnd)) {\n childNode.fieldEnd = fieldEnd;\n }\n if (fieldEnd.fieldSeparator && isNullOrUndefined(fieldEnd.fieldSeparator.fieldBegin)) {\n fieldEnd.fieldSeparator.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldSeparator)) {\n childNode.fieldSeparator = fieldEnd.fieldSeparator;\n }\n }\n }\n return !isNullOrUndefined(fieldEnd.fieldBegin);\n }\n else if (childNode.fieldType === 2 && isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldSeparator = childNode;\n childNode.fieldEnd = fieldEnd;\n if (!isNullOrUndefined(childNode.fieldBegin)) {\n fieldEnd.fieldBegin = childNode.fieldBegin;\n }\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackward(line.previousLine, fieldEnd, this);\n }\n else if (line.paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n var prevParagraph = line.paragraph.previousRenderedWidget;\n // tslint:disable-next-line:max-line-length\n this.linkFieldTraversingBackward(prevParagraph.childWidgets[prevParagraph.childWidgets.length - 1], fieldEnd, this);\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingForward = function (line, fieldBegin, previousNode) {\n var i = 0;\n if (line.children.indexOf(previousNode) > -1) {\n i = line.children.indexOf(previousNode) + 1;\n }\n for (var j = i; j < line.children.length; j++) {\n var node = line.children[j];\n if (node instanceof FieldElementBox) {\n if (node.fieldType === 1) {\n if (isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldEnd = node;\n }\n if (fieldBegin.fieldEnd && isNullOrUndefined(fieldBegin.fieldEnd.fieldBegin)) {\n fieldBegin.fieldEnd.fieldBegin = fieldBegin;\n }\n return true;\n }\n else if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n if (node.fieldType === 2 && isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldSeparator = node;\n if (!isNullOrUndefined(node.fieldEnd)) {\n fieldBegin.fieldEnd = node.fieldEnd;\n return true;\n }\n }\n else {\n return false;\n }\n }\n }\n }\n if (line.nextLine) {\n this.linkFieldTraversingForward(line.nextLine, fieldBegin, this);\n }\n else if (line.paragraph.nextRenderedWidget instanceof ParagraphWidget) {\n this.linkFieldTraversingForward(line.paragraph.nextRenderedWidget.childWidgets[0], fieldBegin, this);\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackwardSeparator = function (line, fieldSeparator, previousNode) {\n var index = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n index = line.children.indexOf(previousNode) - 1;\n }\n for (var i = index; i >= 0; i--) {\n var childElement = line.children[i];\n if (childElement instanceof FieldElementBox) {\n if (childElement instanceof FieldElementBox && childElement.fieldType === 0) {\n if (isNullOrUndefined(childElement.fieldSeparator)) {\n fieldSeparator.fieldBegin = childElement;\n }\n return !isNullOrUndefined(fieldSeparator.fieldBegin);\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackwardSeparator(line.previousLine, fieldSeparator, this);\n }\n else if (line.paragraph.nextRenderedWidget instanceof ParagraphWidget) {\n // tslint:disable-next-line:max-line-length\n line = line.paragraph.previousRenderedWidget.childWidgets[line.paragraph.previousRenderedWidget.childWidgets.length - 1];\n this.linkFieldTraversingBackwardSeparator(line, fieldSeparator, this);\n }\n else {\n return true;\n }\n return true;\n };\n Object.defineProperty(ElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return this.getLength();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n return this.line instanceof LineWidget && this.line.children ? this.line.children.indexOf(this) : -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > 0 && index < this.line.children.length) {\n return this.line.children[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n else if (lineIndex < this.line.paragraph.childWidgets.length - 1) {\n return this.line.paragraph.childWidgets[lineIndex + 1].children[0];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index > 0) {\n return this.line.children[index - 1];\n }\n else if (lineIndex > 0) {\n var lineWidget = this.line.paragraph.childWidgets[lineIndex - 1];\n return lineWidget.children[lineWidget.children.length - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n if (this.line) {\n return this.line.paragraph;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ElementBox.prototype.destroy = function () {\n if (!isNullOrUndefined(this.line) && this.line.children && this.line.children.indexOf(this) > -1) {\n var index = this.line.children.indexOf(this);\n this.line.children.splice(index, 1);\n }\n this.line = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n }\n this.characterFormat = undefined;\n if (this.margin) {\n this.margin.destroy();\n }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n /**\n * @private\n */\n ElementBox.objectCharacter = String.fromCharCode(65532);\n return ElementBox;\n}());\nexport { ElementBox };\n/**\n * @private\n */\nvar FieldElementBox = /** @class */ (function (_super) {\n __extends(FieldElementBox, _super);\n function FieldElementBox(type) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.fieldType = 0;\n /**\n * @private\n */\n _this.hasFieldEnd = false;\n _this.fieldBeginInternal = undefined;\n _this.fieldSeparatorInternal = undefined;\n _this.fieldEndInternal = undefined;\n _this.fieldType = type;\n return _this;\n }\n Object.defineProperty(FieldElementBox.prototype, \"fieldBegin\", {\n get: function () {\n return this.fieldBeginInternal;\n },\n set: function (field) {\n this.fieldBeginInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldSeparator\", {\n get: function () {\n return this.fieldSeparatorInternal;\n },\n set: function (field) {\n this.fieldSeparatorInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldEnd\", {\n get: function () {\n return this.fieldEndInternal;\n },\n set: function (field) {\n this.fieldEndInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.clone = function () {\n var field = new FieldElementBox(this.fieldType);\n field.characterFormat.copyFormat(this.characterFormat);\n if (this.margin) {\n field.margin = this.margin.clone();\n }\n field.width = this.width;\n field.height = this.height;\n return field;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.destroy = function () {\n this.fieldType = undefined;\n this.hasFieldEnd = undefined;\n this.fieldBeginInternal = undefined;\n this.fieldEndInternal = undefined;\n this.fieldSeparatorInternal = undefined;\n _super.prototype.destroy.call(this);\n };\n return FieldElementBox;\n}(ElementBox));\nexport { FieldElementBox };\n/**\n * @private\n */\nvar TextElementBox = /** @class */ (function (_super) {\n __extends(TextElementBox, _super);\n function TextElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.text = '';\n return _this;\n }\n /**\n * @private\n */\n TextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n TextElementBox.prototype.clone = function () {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(this.characterFormat);\n span.text = this.text;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n /**\n * @private\n */\n TextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n return TextElementBox;\n}(ElementBox));\nexport { TextElementBox };\n/**\n * @private\n */\nvar FieldTextElementBox = /** @class */ (function (_super) {\n __extends(FieldTextElementBox, _super);\n function FieldTextElementBox() {\n var _this = _super.call(this) || this;\n _this.fieldText = '';\n return _this;\n }\n Object.defineProperty(FieldTextElementBox.prototype, \"text\", {\n get: function () {\n return this.fieldText;\n },\n set: function (value) {\n this.fieldText = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldTextElementBox.prototype.clone = function () {\n var span = new FieldTextElementBox();\n span.characterFormat.copyFormat(this.characterFormat);\n span.fieldBegin = this.fieldBegin;\n span.text = this.text;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n return FieldTextElementBox;\n}(TextElementBox));\nexport { FieldTextElementBox };\n/**\n * @private\n */\nvar TabElementBox = /** @class */ (function (_super) {\n __extends(TabElementBox, _super);\n function TabElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.tabText = '';\n /**\n * @private\n */\n _this.tabLeader = 'None';\n return _this;\n }\n /**\n * @private\n */\n TabElementBox.prototype.destroy = function () {\n this.tabText = undefined;\n this.tabLeader = undefined;\n };\n /**\n * @private\n */\n TabElementBox.prototype.clone = function () {\n var span = new TabElementBox();\n span.characterFormat.copyFormat(this.characterFormat);\n span.tabText = this.tabText;\n span.tabLeader = this.tabLeader;\n span.text = this.text;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n return TabElementBox;\n}(TextElementBox));\nexport { TabElementBox };\n/**\n * @private\n */\nvar BookmarkElementBox = /** @class */ (function (_super) {\n __extends(BookmarkElementBox, _super);\n function BookmarkElementBox(type) {\n var _this = _super.call(this) || this;\n _this.bookmarkTypeIn = 0;\n _this.refereneceIn = undefined;\n _this.nameIn = '';\n _this.bookmarkTypeIn = type;\n return _this;\n }\n Object.defineProperty(BookmarkElementBox.prototype, \"bookmarkType\", {\n /**\n * @private\n */\n get: function () {\n return this.bookmarkTypeIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"name\", {\n /**\n * @private\n */\n get: function () {\n return this.nameIn;\n },\n /**\n * @private\n */\n set: function (name) {\n this.nameIn = name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"reference\", {\n /**\n * @private\n */\n get: function () {\n return this.refereneceIn;\n },\n /**\n * @private\n */\n set: function (reference) {\n this.refereneceIn = reference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n BookmarkElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n BookmarkElementBox.prototype.destroy = function () {\n this.name = undefined;\n this.reference = undefined;\n this.bookmarkTypeIn = undefined;\n };\n /**\n * Clones the bookmark element box.\n * @param element - book mark element\n */\n /**\n * @private\n */\n BookmarkElementBox.prototype.clone = function () {\n var span = new BookmarkElementBox(this.bookmarkType);\n span.name = this.name;\n span.reference = this.reference;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n return BookmarkElementBox;\n}(ElementBox));\nexport { BookmarkElementBox };\n/**\n * @private\n */\nvar ImageElementBox = /** @class */ (function (_super) {\n __extends(ImageElementBox, _super);\n function ImageElementBox(isInlineImage) {\n var _this = _super.call(this) || this;\n _this.imageStr = '';\n _this.imgElement = undefined;\n _this.isInlineImageIn = true;\n /**\n * @private\n */\n _this.isMetaFile = false;\n _this.isInlineImageIn = isInlineImage;\n return _this;\n }\n Object.defineProperty(ImageElementBox.prototype, \"isInlineImage\", {\n /**\n * @private\n */\n get: function () {\n return this.isInlineImageIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"element\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.imgElement)) {\n this.imgElement = document.createElement('img');\n }\n return this.imgElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"imageString\", {\n /**\n * @private\n */\n get: function () {\n return this.imageStr;\n },\n /**\n * @private\n */\n set: function (value) {\n this.imageStr = value;\n if (!isNullOrUndefined(value)) {\n this.element.src = this.imageStr;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ImageElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.clone = function () {\n var image = new ImageElementBox(this.isInlineImage);\n image.characterFormat.copyFormat(this.characterFormat);\n image.imageString = this.imageString;\n image.isMetaFile = this.isMetaFile;\n image.width = this.width;\n image.height = this.height;\n if (this.margin) {\n image.margin = this.margin.clone();\n }\n return image;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.destroy = function () {\n this.imgElement = undefined;\n this.imageString = undefined;\n this.isInlineImageIn = undefined;\n _super.prototype.destroy.call(this);\n };\n return ImageElementBox;\n}(ElementBox));\nexport { ImageElementBox };\n/**\n * @private\n */\nvar ListTextElementBox = /** @class */ (function (_super) {\n __extends(ListTextElementBox, _super);\n function ListTextElementBox(listLevel, isListFollowCharacter) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.isFollowCharacter = false;\n _this.listLevel = listLevel;\n _this.isFollowCharacter = isListFollowCharacter;\n return _this;\n }\n /**\n * @private\n */\n ListTextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.clone = function () {\n var list = new ListTextElementBox(this.listLevel, this.isFollowCharacter);\n list.text = this.text;\n list.baselineOffset = this.baselineOffset;\n if (this.margin) {\n list.margin = this.margin.clone();\n }\n list.width = this.width;\n list.height = this.height;\n return list;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n return ListTextElementBox;\n}(ElementBox));\nexport { ListTextElementBox };\n/**\n * @private\n */\nvar Page = /** @class */ (function () {\n /**\n * Initialize the constructor of Page\n */\n function Page() {\n /**\n * Specifies the Bonding Rectangle\n * @private\n */\n this.boundingRectangle = new Rect(96, 96, 816, 1056);\n /**\n * @private\n */\n this.repeatHeaderRowTableWidget = false;\n /**\n * Specifies the bodyWidgets\n * @default []\n * @private\n */\n this.bodyWidgets = [];\n /**\n * @private\n */\n this.headerWidget = undefined;\n /**\n * @private\n */\n this.footerWidget = undefined;\n // let text: string = 'DocumentEditor';\n }\n Object.defineProperty(Page.prototype, \"index\", {\n /**\n * @private\n */\n get: function () {\n if (this.viewer) {\n return this.viewer.pages.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"previousPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index > 0) {\n return this.viewer.pages[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"nextPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index < this.viewer.pages.length - 1) {\n return this.viewer.pages[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"sectionIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.bodyWidgets.length > 0) {\n return this.bodyWidgets[0].index;\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Page.prototype.destroy = function () {\n if (this.headerWidget) {\n if (this.viewer && this.viewer.owner.editor) {\n this.viewer.owner.editor.removeFieldInWidget(this.headerWidget);\n }\n this.headerWidget.destroy();\n }\n this.headerWidget = undefined;\n if (this.footerWidget) {\n if (this.viewer && this.viewer.owner.editor) {\n this.viewer.owner.editor.removeFieldInWidget(this.footerWidget);\n }\n this.footerWidget.destroy();\n }\n this.footerWidget = undefined;\n this.bodyWidgets = [];\n this.bodyWidgets = undefined;\n if (!isNullOrUndefined(this.viewer)) {\n if (!isNullOrUndefined(this.viewer.pages)) {\n this.viewer.removePage(this);\n }\n }\n this.viewer = undefined;\n };\n return Page;\n}());\nexport { Page };\n/**\n * @private\n */\nvar WTableHolder = /** @class */ (function () {\n function WTableHolder() {\n this.tableColumns = [];\n /**\n * @private\n */\n this.tableWidth = 0;\n }\n Object.defineProperty(WTableHolder.prototype, \"columns\", {\n get: function () {\n return this.tableColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n WTableHolder.prototype.resetColumns = function () {\n for (var i = 0; i < this.tableColumns.length; i++) {\n this.tableColumns[i].destroy();\n }\n this.tableColumns = [];\n };\n /**\n * @private\n */\n WTableHolder.prototype.getPreviousSpannedCellWidth = function (previousColumnIndex, curColumnIndex) {\n var width = 0;\n for (var i = previousColumnIndex; i < curColumnIndex; i++) {\n width += this.tableColumns[i].preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.addColumns = function (currentColumnIndex, columnSpan, width, minWidth, offset) {\n for (var i = this.columns.length; i < columnSpan; i++) {\n this.columns.push(new WColumn());\n }\n var availableWidth = 0;\n for (var j = currentColumnIndex; j < columnSpan; j++) {\n availableWidth += this.columns[j].preferredWidth;\n }\n // If width to add is greater than preferred width, then preferred width will be increased.\n // In case of Gridspan > 1, only last grid column width will be updated.\n var gridSpan = columnSpan - currentColumnIndex;\n if (!(gridSpan > 1) && availableWidth < width) {\n this.columns[columnSpan - 1].preferredWidth += (width - availableWidth);\n }\n if (minWidth > this.columns[columnSpan - 1].minWidth) {\n this.columns[columnSpan - 1].minWidth = minWidth;\n }\n if (offset > this.columns[columnSpan - 1].endOffset) {\n this.columns[columnSpan - 1].endOffset = offset;\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.getTotalWidth = function () {\n var width = 0;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n width += column.preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.isFitColumns = function (containerWidth, preferredTableWidth, isAutoWidth) {\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth();\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = preferredTableWidth > totalColumnWidth ? totalColumnWidth : preferredTableWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n factor = isNaN(factor) ? 1 : factor;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n //column.PreferredWidth = factor * column.PreferredWidth;\n if (factor * column.preferredWidth < column.minWidth) {\n return false;\n }\n }\n return true;\n }\n else {\n return true;\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.fitColumns = function (containerWidth, preferredTableWidth, isAutoWidth) {\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth();\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = preferredTableWidth > totalColumnWidth ? totalColumnWidth : preferredTableWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n column.preferredWidth = factor * column.preferredWidth;\n }\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.getCellWidth = function (columnIndex, columnSpan, preferredTableWidth, isAutoWidth) {\n var width = 0;\n if (isAutoWidth) {\n var cellWidth = preferredTableWidth / this.tableColumns.length;\n for (var i = 0; i < columnSpan; i++) {\n width += cellWidth;\n }\n }\n else {\n for (var i = 0; i < columnSpan; i++) {\n width += this.tableColumns[i + columnIndex].preferredWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.validateColumnWidths = function () {\n for (var i = 0; i < this.columns.length; i++) {\n if (i === 0) {\n if (this.columns[i].preferredWidth !== this.columns[i].endOffset) {\n this.columns[i].preferredWidth = this.columns[i].endOffset;\n }\n }\n else {\n // If Previous column offset + current column preferred width is less than current column offset, \n // Then current column preferred width is set to current column offset - previous column offset.\n if (this.columns[i - 1].endOffset + this.columns[i].preferredWidth < this.columns[i].endOffset) {\n this.columns[i].preferredWidth = this.columns[i].endOffset - this.columns[i - 1].endOffset;\n }\n }\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.clone = function () {\n var tableHolder = new WTableHolder();\n tableHolder.tableWidth = this.tableWidth;\n for (var i = 0; i < this.columns.length; i++) {\n tableHolder.columns.push(this.columns[i].clone());\n }\n return tableHolder;\n };\n /**\n * @private\n */\n WTableHolder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.tableColumns)) {\n for (var i = 0; i < this.tableColumns.length; i++) {\n var column = this.tableColumns[i];\n column.destroy();\n }\n }\n this.tableColumns = [];\n this.tableColumns = undefined;\n this.tableWidth = undefined;\n };\n return WTableHolder;\n}());\nexport { WTableHolder };\n/**\n * @private\n */\nvar WColumn = /** @class */ (function () {\n function WColumn() {\n /**\n * @private\n */\n this.preferredWidth = 0;\n /**\n * @private\n */\n this.minWidth = 0;\n /**\n * @private\n */\n this.maxWidth = 0;\n /**\n * @private\n */\n this.endOffset = 0;\n }\n /**\n * @private\n */\n WColumn.prototype.clone = function () {\n var column = new WColumn();\n column.preferredWidth = this.preferredWidth;\n column.minWidth = this.minWidth;\n column.maxWidth = this.maxWidth;\n return column;\n };\n /**\n * @private\n */\n WColumn.prototype.destroy = function () {\n this.preferredWidth = undefined;\n this.minWidth = undefined;\n this.maxWidth = undefined;\n };\n return WColumn;\n}());\nexport { WColumn };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined, L10n, setCulture, classList } from '@syncfusion/ej2-base';\nimport { FieldElementBox } from './viewer/page';\nvar CONTEXTMENU_COPY = '_contextmenu_copy';\nvar CONTEXTMENU_CUT = '_contextmenu_cut';\nvar CONTEXTMENU_PASTE = '_contextmenu_paste';\nvar CONTEXTMENU_UPDATE_FIELD = '_contextmenu_update_field';\nvar CONTEXTMENU_EDIT_FIELD = '_contextmenu_edit_field';\nvar CONTEXTMENU_HYPERLINK = '_contextmenu_hyperlink';\nvar CONTEXTMENU_OPEN_HYPERLINK = '_contextmenu_open_hyperlink';\nvar CONTEXTMENU_COPY_HYPERLINK = '_contextmenu_copy_hyperlink';\nvar CONTEXTMENU_REMOVE_HYPERLINK = '_contextmenu_remove_hyperlink';\nvar CONTEXTMENU_EDIT_HYPERLINK = '_contextmenu_edit_hyperlink';\nvar CONTEXTMENU_FONT_DIALOG = '_contextmenu_font_dialog';\nvar CONTEXTMENU_PARAGRAPH = '_contextmenu_paragraph_dialog';\nvar CONTEXTMENU_TABLE = '_contextmenu_table_dialog';\nvar CONTEXTMENU_INSERT_TABLE = '_contextmenu_insert_table';\nvar CONTEXTMENU_DELETE_TABLE = '_contextmenu_delete_table';\nvar CONTEXTMENU_INSERT_ABOVE = '_contextmenu_insert_above';\nvar CONTEXTMENU_INSERT_BELOW = '_contextmenu_insert_below';\nvar CONTEXTMENU_INSERT_RIGHT = '_contextmenu_insert_right';\nvar CONTEXTMENU_INSERT_LEFT = '_contextmenu_insert_left';\nvar CONTEXTMENU_COMPLETE_DELETE_TABLE = '_contextmenu_complete_table_delete';\nvar CONTEXTMENU_DELETE_ROW = '_contextmenu_delete_row';\nvar CONTEXTMENU_DELETE_COLUMN = '_contextmenu_delete_column';\nvar CONTEXTMENU_MERGE_CELL = '_contextmenu_merge_cell';\nvar CONTEXTMENU_CONTINUE_NUMBERING = '_contextmenu_continue_numbering';\nvar CONTEXTMENU_RESTART_AT = '_contextmenu_restart_at';\n/**\n * Context Menu class\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * @private\n */\n function ContextMenu(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.contextMenuInstance = undefined;\n /**\n * Handles on context menu key pressed.\n * @param {PointerEvent} event\n * @private\n */\n this.onContextMenuInternal = function (event) {\n if (_this.showHideElements(_this.viewer.selection)) {\n _this.contextMenuInstance.open(event.y, event.x);\n event.preventDefault();\n }\n };\n this.viewer = viewer;\n var locale = new L10n('documenteditor', this.viewer.owner.defaultLocale);\n locale.setLocale(this.viewer.owner.locale);\n setCulture(this.viewer.owner.locale);\n this.initContextMenu(locale);\n }\n /**\n * Gets module name.\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'ContextMenu';\n };\n /**\n * Initialize context menu.\n * @param localValue Localize value.\n * @private\n */\n // tslint:disable:max-func-body-length\n ContextMenu.prototype.initContextMenu = function (localValue) {\n var _this = this;\n var id = this.viewer.owner.element.id;\n this.contextMenu = document.createElement('div');\n this.contextMenu.id = this.viewer.owner.containerId + 'e-de-contextmenu';\n document.body.appendChild(this.contextMenu);\n var ul = document.createElement('ul');\n ul.style.width = 'auto';\n ul.id = this.viewer.owner.containerId + 'e-de-contextmenu-list';\n ul.style.listStyle = 'none';\n ul.style.margin = '0px';\n ul.style.padding = '0px';\n ul.style.maxHeight = 'auto';\n ul.oncontextmenu = this.disableBrowserContextmenu;\n this.contextMenu.appendChild(ul);\n var menuItems = [\n {\n text: localValue.getConstant('Cut'),\n iconCss: 'e-icons e-de-cut',\n id: id + CONTEXTMENU_CUT\n },\n {\n text: localValue.getConstant('Copy'),\n iconCss: 'e-icons e-de-copy',\n id: id + CONTEXTMENU_COPY\n },\n {\n text: localValue.getConstant('Paste'),\n iconCss: 'e-icons e-de-paste',\n id: id + CONTEXTMENU_PASTE\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Update Field'),\n iconCss: 'e-icons e-de-update_field',\n id: id + CONTEXTMENU_UPDATE_FIELD\n },\n {\n text: localValue.getConstant('Edit Field'),\n iconCss: 'e-icons e-de-edit_field',\n id: id + CONTEXTMENU_EDIT_FIELD\n },\n {\n text: localValue.getConstant('Continue Numbering'),\n iconCss: 'e-icons e-de-continue-numbering',\n id: id + CONTEXTMENU_CONTINUE_NUMBERING\n },\n {\n text: localValue.getConstant('Restart At') + ' 1',\n iconCss: 'e-icons e-de-restart-at',\n id: id + CONTEXTMENU_RESTART_AT\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Hyperlink'),\n iconCss: 'e-icons e-de-insertlink',\n id: id + CONTEXTMENU_HYPERLINK\n },\n {\n text: localValue.getConstant('Edit Hyperlink') + '...',\n iconCss: 'e-icons e-de-edit-hyperlink',\n id: id + CONTEXTMENU_EDIT_HYPERLINK\n },\n {\n text: localValue.getConstant('Open Hyperlink'),\n iconCss: 'e-icons e-de-open-hyperlink',\n id: id + CONTEXTMENU_OPEN_HYPERLINK\n },\n {\n text: localValue.getConstant('Copy Hyperlink'),\n iconCss: 'e-icons e-de-copy-hyperlink',\n id: id + CONTEXTMENU_COPY_HYPERLINK\n },\n {\n text: localValue.getConstant('Remove Hyperlink'),\n iconCss: 'e-icons e-de-remove-hyperlink',\n id: id + CONTEXTMENU_REMOVE_HYPERLINK\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Font'),\n iconCss: 'e-icons e-de-fonts',\n id: id + CONTEXTMENU_FONT_DIALOG\n },\n {\n text: localValue.getConstant('Paragraph'),\n iconCss: 'e-icons e-de-paragraph',\n id: id + CONTEXTMENU_PARAGRAPH\n },\n {\n separator: true,\n },\n {\n text: localValue.getConstant('Table Properties'),\n id: id + CONTEXTMENU_TABLE,\n iconCss: 'e-icons e-de-table'\n },\n {\n text: localValue.getConstant('Merge Cells'),\n id: id + CONTEXTMENU_MERGE_CELL,\n iconCss: 'e-icons e-de-icon-table-merge-cells'\n },\n {\n text: localValue.getConstant('Insert'),\n id: id + CONTEXTMENU_INSERT_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Insert Above'),\n id: id + CONTEXTMENU_INSERT_ABOVE,\n iconCss: 'e-icons e-de-insertabove'\n },\n {\n text: localValue.getConstant('Insert Below'),\n id: id + CONTEXTMENU_INSERT_BELOW,\n iconCss: 'e-icons e-de-insertbelow'\n },\n {\n text: localValue.getConstant('Insert Left'),\n id: id + CONTEXTMENU_INSERT_LEFT,\n iconCss: 'e-icons e-de-insertleft'\n },\n {\n text: localValue.getConstant('Insert Right'),\n id: id + CONTEXTMENU_INSERT_RIGHT,\n iconCss: 'e-icons e-de-insertright'\n }\n ]\n },\n {\n text: localValue.getConstant('Delete'),\n id: id + CONTEXTMENU_DELETE_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Delete Table'),\n id: id + CONTEXTMENU_COMPLETE_DELETE_TABLE,\n iconCss: 'e-icons e-de-delete-table'\n },\n {\n text: localValue.getConstant('Delete Row'),\n id: id + CONTEXTMENU_DELETE_ROW,\n iconCss: 'e-icons e-de-deleterow'\n },\n {\n text: localValue.getConstant('Delete Column'),\n id: id + CONTEXTMENU_DELETE_COLUMN,\n iconCss: 'e-icons e-de-deletecolumn'\n }\n ]\n },\n ];\n var menuOptions = {\n target: '#' + this.viewer.owner.containerId + 'e-de-contextmenu',\n items: menuItems,\n select: function (args) {\n var item = args.element.id;\n _this.handleContextMenuItem(item);\n },\n };\n this.contextMenuInstance = new Menu(menuOptions, '#' + this.viewer.owner.containerId + 'e-de-contextmenu-list');\n this.contextMenuInstance.beforeOpen = function () {\n if (_this.viewer && _this.viewer.selection) {\n classList(_this.viewer.selection.caret, [], ['e-de-cursor-animation']);\n _this.viewer.selection.showCaret();\n }\n };\n this.contextMenuInstance.onClose = function () {\n if (_this.viewer && _this.viewer.selection) {\n classList(_this.viewer.selection.caret, ['e-de-cursor-animation'], []);\n _this.viewer.updateFocus();\n }\n };\n };\n /**\n * Disable browser context menu.\n */\n ContextMenu.prototype.disableBrowserContextmenu = function () {\n return false;\n };\n /**\n * Handles context menu items.\n * @param {string} item Specifies which item is selected.\n * @private\n */\n ContextMenu.prototype.handleContextMenuItem = function (item) {\n var id = this.viewer.owner.element.id;\n switch (item) {\n case id + CONTEXTMENU_COPY:\n this.viewer.selection.copy();\n break;\n case id + CONTEXTMENU_CUT:\n this.viewer.owner.editor.cut();\n break;\n case id + CONTEXTMENU_PASTE:\n if (!this.viewer.owner.isReadOnlyMode) {\n this.viewer.owner.editorModule.pasteInternal(undefined);\n }\n break;\n case id + CONTEXTMENU_UPDATE_FIELD:\n if (!this.viewer.owner.isReadOnlyMode) {\n this.viewer.owner.editorModule.updateToc();\n }\n break;\n case id + CONTEXTMENU_EDIT_FIELD:\n if (!this.viewer.owner.isReadOnlyMode) {\n this.viewer.owner.tableOfContentsDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_FONT_DIALOG:\n if (this.viewer.owner.fontDialogModule) {\n this.viewer.owner.fontDialogModule.showFontDialog();\n }\n break;\n case id + CONTEXTMENU_OPEN_HYPERLINK:\n this.viewer.selection.navigateHyperlink();\n break;\n case id + CONTEXTMENU_COPY_HYPERLINK:\n this.viewer.selection.copyHyperlink();\n break;\n case id + CONTEXTMENU_EDIT_HYPERLINK:\n case id + CONTEXTMENU_HYPERLINK:\n if (this.viewer.owner.hyperlinkDialogModule) {\n this.viewer.owner.hyperlinkDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_REMOVE_HYPERLINK:\n this.viewer.owner.editor.removeHyperlink();\n break;\n case id + CONTEXTMENU_PARAGRAPH:\n if (this.viewer.owner.paragraphDialogModule) {\n this.viewer.owner.paragraphDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_TABLE:\n this.viewer.owner.tablePropertiesDialogModule.show();\n break;\n case id + CONTEXTMENU_MERGE_CELL:\n this.viewer.owner.editor.mergeCells();\n break;\n case id + CONTEXTMENU_INSERT_ABOVE:\n this.viewer.owner.editor.insertRow(true);\n break;\n case id + CONTEXTMENU_INSERT_BELOW:\n this.viewer.owner.editor.insertRow(false);\n break;\n case id + CONTEXTMENU_INSERT_LEFT:\n this.viewer.owner.editor.insertColumn(true);\n break;\n case id + CONTEXTMENU_INSERT_RIGHT:\n this.viewer.owner.editor.insertColumn(false);\n break;\n case id + CONTEXTMENU_COMPLETE_DELETE_TABLE:\n this.viewer.owner.editor.deleteTable();\n break;\n case id + CONTEXTMENU_DELETE_ROW:\n this.viewer.owner.editor.deleteRow();\n break;\n case id + CONTEXTMENU_DELETE_COLUMN:\n this.viewer.owner.editor.deleteColumn();\n break;\n case id + CONTEXTMENU_CONTINUE_NUMBERING:\n this.viewer.owner.editorModule.applyContinueNumbering(this.viewer.selection);\n break;\n case id + CONTEXTMENU_RESTART_AT:\n this.viewer.owner.editorModule.applyRestartNumbering(this.viewer.selection);\n break;\n }\n };\n ContextMenu.prototype.showHideElements = function (selection) {\n var owner = this.viewer.owner;\n var id = owner.element.id;\n var copy = document.getElementById(id + CONTEXTMENU_COPY);\n var cut = document.getElementById(id + CONTEXTMENU_CUT);\n var paste = document.getElementById(id + CONTEXTMENU_PASTE);\n var updateField = document.getElementById(id + CONTEXTMENU_UPDATE_FIELD);\n var editField = document.getElementById(id + CONTEXTMENU_EDIT_FIELD);\n var font = document.getElementById(id + CONTEXTMENU_FONT_DIALOG);\n var paragraph = document.getElementById(id + CONTEXTMENU_PARAGRAPH);\n var tableProperties = document.getElementById(id + CONTEXTMENU_TABLE);\n var insertTable = document.getElementById(id + CONTEXTMENU_INSERT_TABLE);\n var deleteTable = document.getElementById(id + CONTEXTMENU_DELETE_TABLE);\n var mergeCells = document.getElementById(id + CONTEXTMENU_MERGE_CELL);\n var hyperlink = document.getElementById(id + CONTEXTMENU_HYPERLINK);\n var openHyperlink = document.getElementById(id + CONTEXTMENU_OPEN_HYPERLINK);\n var editHyperlink = document.getElementById(id + CONTEXTMENU_EDIT_HYPERLINK);\n var copyHyperlink = document.getElementById(id + CONTEXTMENU_COPY_HYPERLINK);\n var removeHyperlink = document.getElementById(id + CONTEXTMENU_REMOVE_HYPERLINK);\n var continueNumbering = document.getElementById(id + CONTEXTMENU_CONTINUE_NUMBERING);\n var restartAt = document.getElementById(id + CONTEXTMENU_RESTART_AT);\n cut.style.display = 'none';\n paste.style.display = 'none';\n paste.nextSibling.style.display = 'none';\n hyperlink.style.display = 'none';\n openHyperlink.style.display = 'none';\n copyHyperlink.style.display = 'none';\n editHyperlink.style.display = 'none';\n removeHyperlink.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n mergeCells.style.display = 'none';\n font.style.display = 'none';\n paragraph.style.display = 'none';\n paragraph.nextSibling.style.display = 'none';\n insertTable.style.display = 'none';\n deleteTable.style.display = 'none';\n tableProperties.style.display = 'none';\n updateField.style.display = 'none';\n editField.style.display = 'none';\n continueNumbering.style.display = 'none';\n restartAt.style.display = 'none';\n restartAt.nextSibling.style.display = 'none';\n if (isNullOrUndefined(selection)) {\n return false;\n }\n selection.hideToolTip();\n if (selection.isEmpty) {\n cut.classList.add('e-disabled');\n copy.classList.add('e-disabled');\n }\n else {\n cut.classList.remove('e-disabled');\n copy.classList.remove('e-disabled');\n }\n if (owner.isReadOnlyMode) {\n return true;\n }\n cut.style.display = 'block';\n paste.style.display = 'block';\n paste.nextSibling.style.display = 'block';\n insertTable.classList.add('e-blankicon');\n deleteTable.classList.add('e-blankicon');\n updateField.classList.add('e-blankicon');\n editField.classList.add('e-blankicon');\n if (owner.enableLocalPaste && !isNullOrUndefined(owner.editor.copiedData)) {\n paste.classList.remove('e-disabled');\n }\n else {\n paste.classList.add('e-disabled');\n }\n if (selection.contextType === 'TableOfContents') {\n updateField.style.display = 'block';\n editField.style.display = 'block';\n restartAt.nextSibling.style.display = 'block';\n }\n else {\n var start = selection.start;\n var end = selection.end;\n if (selection.contextType === 'List'\n && owner.editorModule.getListLevel(start.paragraph).listLevelPattern !== 'Bullet') {\n continueNumbering.style.display = 'block';\n restartAt.style.display = 'block';\n restartAt.nextSibling.style.display = 'block';\n }\n var isCellOrRowSelected = start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end));\n if (isCellOrRowSelected) {\n hyperlink.classList.add('e-disabled');\n }\n else {\n if (hyperlink.classList.contains('e-disabled')) {\n hyperlink.classList.remove('e-disabled');\n }\n }\n var field = selection.getHyperlinkField();\n if (field instanceof FieldElementBox && !selection.isImageField()) {\n openHyperlink.style.display = 'block';\n copyHyperlink.style.display = 'block';\n if (owner.hyperlinkDialogModule) {\n editHyperlink.style.display = 'block';\n }\n removeHyperlink.style.display = 'block';\n removeHyperlink.nextSibling.style.display = 'block';\n }\n else {\n if (owner.hyperlinkDialogModule) {\n hyperlink.style.display = 'block';\n }\n }\n }\n if (this.viewer.owner.selection.start.paragraph.isInsideTable\n && this.viewer.owner.selection.end.paragraph.isInsideTable) {\n paragraph.nextSibling.style.display = 'block';\n if (owner.tablePropertiesDialogModule) {\n tableProperties.style.display = 'block';\n }\n insertTable.style.display = 'block';\n deleteTable.style.display = 'block';\n if (this.viewer.owner.editor.canMergeCells()) {\n mergeCells.style.display = 'block';\n }\n }\n else {\n if (this.viewer.owner.fontDialogModule) {\n font.style.display = 'block';\n font.previousSibling.style.display = 'block';\n }\n if (this.viewer.owner.paragraphDialogModule) {\n paragraph.style.display = 'block';\n }\n }\n if (selection.contextType === 'Image') {\n font.style.display = 'none';\n paragraph.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n }\n return true;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ContextMenu.prototype.destroy = function () {\n if (this.contextMenuInstance) {\n this.contextMenuInstance.destroy();\n }\n if (this.contextMenu) {\n if (this.contextMenu.parentElement) {\n this.contextMenu.parentElement.removeChild(this.contextMenu);\n }\n this.contextMenu.innerHTML = '';\n }\n this.contextMenu = undefined;\n this.contextMenuInstance = undefined;\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WAbstractList = /** @class */ (function () {\n function WAbstractList() {\n this.abstractListIdIn = -1;\n this.levels = [];\n }\n Object.defineProperty(WAbstractList.prototype, \"abstractListId\", {\n get: function () {\n return this.abstractListIdIn;\n },\n set: function (abstractListId) {\n this.abstractListIdIn = abstractListId;\n },\n enumerable: true,\n configurable: true\n });\n WAbstractList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levels)) {\n for (var i = 0; i < this.levels.length; i++) {\n var listLevel = this.levels[i];\n listLevel.destroy();\n this.levels.splice(this.levels.indexOf(listLevel), 1);\n i--;\n }\n this.levels = [];\n }\n this.levels = undefined;\n };\n return WAbstractList;\n}());\nexport { WAbstractList };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { WAbstractList } from './abstract-list';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WListLevel = /** @class */ (function () {\n function WListLevel(node) {\n this.uniqueListLevel = undefined;\n this.paragraphFormat = undefined;\n this.characterFormat = undefined;\n if (node instanceof WAbstractList) {\n this.ownerBase = node;\n }\n else {\n this.ownerBase = node;\n }\n this.characterFormat = new WCharacterFormat(undefined);\n this.paragraphFormat = new WParagraphFormat(undefined);\n }\n Object.defineProperty(WListLevel.prototype, \"listLevelPattern\", {\n get: function () {\n return this.getPropertyValue('listLevelPattern');\n },\n set: function (listLevelPattern) {\n this.setPropertyValue('listLevelPattern', listLevelPattern);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"followCharacter\", {\n get: function () {\n return this.getPropertyValue('followCharacter');\n },\n set: function (followCharacter) {\n this.setPropertyValue('followCharacter', followCharacter);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"startAt\", {\n get: function () {\n return this.getPropertyValue('startAt');\n },\n set: function (startAt) {\n this.setPropertyValue('startAt', startAt);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"numberFormat\", {\n get: function () {\n return this.getPropertyValue('numberFormat');\n },\n set: function (numberFormat) {\n this.setPropertyValue('numberFormat', numberFormat);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"restartLevel\", {\n get: function () {\n return this.getPropertyValue('restartLevel');\n },\n set: function (restartLevel) {\n this.setPropertyValue('restartLevel', restartLevel);\n },\n enumerable: true,\n configurable: true\n });\n WListLevel.prototype.getPropertyValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListLevel) && this.uniqueListLevel.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListLevel.propertiesHash.get(propertyType);\n }\n return WListLevel.getPropertyDefaultValue(property);\n };\n WListLevel.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListLevel.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListLevel)) {\n this.initializeUniqueWListLevel(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListLevel.uniqueFormatType, property);\n if (this.uniqueListLevel.propertiesHash.containsKey(propertyType) &&\n // tslint:disable-next-line:max-line-length\n this.uniqueListLevel.propertiesHash.get(propertyType) === value) {\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueListLevel = WListLevel.uniqueListLevels.updateUniqueFormat(this.uniqueListLevel, property, value);\n }\n };\n WListLevel.prototype.initializeUniqueWListLevel = function (property, propValue) {\n var uniqueListLevelTemp = new Dictionary();\n this.addUniqueWListLevel('listLevelPattern', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('startAt', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('followCharacter', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('numberFormat', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('restartLevel', property, propValue, uniqueListLevelTemp);\n // tslint:disable-next-line:max-line-length \n this.uniqueListLevel = WListLevel.uniqueListLevels.addUniqueFormat(uniqueListLevelTemp, WListLevel.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WListLevel.prototype.addUniqueWListLevel = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueCharFormatTemp.add(propertyType, WListLevel.getPropertyDefaultValue(property));\n }\n };\n WListLevel.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'listLevelPattern':\n value = 'Arabic';\n break;\n case 'startAt':\n value = 0;\n break;\n case 'followCharacter':\n value = 'Tab';\n break;\n case 'numberFormat':\n value = '';\n break;\n case 'restartLevel':\n value = 0;\n break;\n }\n return value;\n };\n WListLevel.prototype.destroy = function () {\n if (!isNullOrUndefined(this.characterFormat)) {\n this.characterFormat.destroy();\n }\n if (!isNullOrUndefined(this.paragraphFormat)) {\n this.paragraphFormat.destroy();\n }\n if (!isNullOrUndefined(this.uniqueListLevel)) {\n WListLevel.uniqueListLevels.remove(this.uniqueListLevel);\n }\n this.uniqueListLevel = undefined;\n this.characterFormat = undefined;\n this.paragraphFormat = undefined;\n };\n WListLevel.clear = function () {\n this.uniqueListLevels.clear();\n };\n WListLevel.dotBullet = '\\uf0b7';\n WListLevel.squareBullet = '\\uf0a7'; //Symbol font \\u25aa.\n WListLevel.arrowBullet = '\\u27a4';\n WListLevel.circleBullet = '\\uf06f' + '\\u0020';\n WListLevel.uniqueListLevels = new WUniqueFormats();\n WListLevel.uniqueFormatType = 9;\n return WListLevel;\n}());\nexport { WListLevel };\n","import { Dictionary } from '../../base/dictionary';\nimport { WListLevel } from '../list/list-level';\nimport { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WBorder } from '../format/index';\nimport { PageLayoutViewer } from './viewer';\nimport { LineWidget, Rect, Widget, Margin, ParagraphWidget, BodyWidget, TextElementBox, ElementBox, ListTextElementBox, TableCellWidget, TableRowWidget, TableWidget, FieldElementBox, BlockWidget, HeaderFooterWidget, BlockContainer, BookmarkElementBox, FieldTextElementBox, TabElementBox } from './page';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Layout = /** @class */ (function () {\n /**\n * viewer definition\n */\n function Layout(viewer) {\n /**\n * @private\n */\n this.allowLayout = true;\n /**\n * @private\n */\n this.isInitialLoad = true;\n this.fieldBegin = undefined;\n this.maxTextHeight = 0;\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.isFieldCode = false;\n this.viewer = viewer;\n }\n /**\n * @private\n */\n Layout.prototype.layout = function () {\n // Todo: Need to handle complete document layout(relayout).\n var page = this.viewer.pages[0];\n var body = page.bodyWidgets[0];\n };\n /**\n * Releases un-managed and - optionally - managed resources.\n */\n Layout.prototype.destroy = function () {\n this.viewer = undefined;\n this.value = undefined;\n this.allowLayout = undefined;\n this.isInitialLoad = undefined;\n this.fieldBegin = undefined;\n this.maxTextHeight = undefined;\n this.maxBaseline = undefined;\n this.maxTextBaseline = undefined;\n this.isFieldCode = undefined;\n };\n /**\n * Layouts the items\n * @private\n */\n Layout.prototype.layoutItems = function (sections) {\n var page;\n for (var i = 0; i < sections.length; i++) {\n var section = sections[i];\n page = this.viewer.createNewPage(section);\n this.addBodyWidget(this.viewer.clientActiveArea, section);\n if (this.viewer.pages.length > 1) {\n var pageIndex = 0;\n for (var i_1 = 0; i_1 < this.viewer.pages.length; i_1++) {\n var prevPage = this.viewer.pages[i_1];\n var prevSectionIndex = prevPage.sectionIndex;\n var index = section.index;\n if (prevSectionIndex > index || prevPage === page) {\n break;\n }\n pageIndex++;\n }\n if (pageIndex < this.viewer.pages.length - 1) {\n this.viewer.insertPage(pageIndex, page);\n }\n }\n this.layoutSection(section, 0, this.viewer);\n }\n this.updateFieldElements();\n this.viewer.updateScrollBars();\n this.isInitialLoad = false;\n };\n /**\n * Layouts the items\n * @param section\n * @param viewer\n * @private\n */\n Layout.prototype.layoutSection = function (section, index, viewer, ownerWidget) {\n var block = section.firstChild;\n var nextBlock;\n do {\n this.viewer.updateClientAreaForBlock(block, true);\n nextBlock = this.layoutBlock(block, index);\n index = 0;\n this.viewer.updateClientAreaForBlock(block, false);\n block = nextBlock;\n } while (block);\n };\n /**\n * Layouts the header footer items\n * @param section\n * @param viewer\n * @private\n */\n Layout.prototype.layoutHeaderFooter = function (section, viewer, page) {\n //Header layout\n var headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, true);\n if (headerFooterWidget) {\n var header = headerFooterWidget.clone();\n header.page = page;\n viewer.updateHFClientArea(section.sectionFormat, true);\n page.headerWidget = this.layoutHeaderFooterItems(viewer, header);\n this.updateHeaderFooterToParent(header);\n }\n //Footer Layout\n headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, false);\n if (headerFooterWidget) {\n var footer = headerFooterWidget.clone();\n footer.page = page;\n viewer.updateHFClientArea(section.sectionFormat, false);\n page.footerWidget = this.layoutHeaderFooterItems(viewer, footer);\n this.updateHeaderFooterToParent(footer);\n }\n };\n /**\n * @private\n */\n Layout.prototype.updateHeaderFooterToParent = function (node) {\n var sectionIndex = node.page.sectionIndex;\n var typeIndex = this.viewer.getHeaderFooter(node.headerFooterType);\n var clone = node.clone();\n this.viewer.headersFooters[sectionIndex][typeIndex] = clone;\n for (var j = 0; j < clone.childWidgets.length; j++) {\n var child = clone.childWidgets[j];\n if (child instanceof TableWidget) {\n this.clearTableWidget(child, false, true);\n }\n }\n return clone;\n };\n Layout.prototype.linkFieldInHeaderFooter = function (widget) {\n var firstChild = widget.firstChild;\n do {\n if (firstChild instanceof ParagraphWidget) {\n this.linkFieldInParagraph(firstChild);\n }\n else {\n this.linkFieldInTable(firstChild);\n }\n //tslint:disable:no-conditional-assignment\n } while (firstChild = firstChild.nextWidget);\n };\n /**\n * @private\n */\n Layout.prototype.linkFieldInParagraph = function (widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof FieldElementBox && element.fieldType !== 0) {\n element.linkFieldCharacter(this.viewer);\n }\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.linkFieldInTable = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var row = widget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n if (block instanceof ParagraphWidget) {\n this.linkFieldInParagraph(block);\n }\n else {\n this.linkFieldInTable(block);\n }\n }\n }\n }\n };\n /**\n * Layouts the header footer items.\n * @param viewer\n * @param hfModule\n * @private\n */\n Layout.prototype.layoutHeaderFooterItems = function (viewer, widget) {\n this.viewer.updateClientAreaLocation(widget, viewer.clientActiveArea);\n if (widget.childWidgets.length === 0) {\n var pargaraph = new ParagraphWidget();\n var line = new LineWidget(pargaraph);\n pargaraph.childWidgets.push(line);\n widget.childWidgets.push(pargaraph);\n pargaraph.containerWidget = widget;\n }\n this.linkFieldInHeaderFooter(widget);\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var block = widget.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n var type = widget.headerFooterType;\n if (type === 'OddFooter' || type === 'EvenFooter' || type === 'FirstPageFooter') {\n this.shiftChildLocation(viewer.clientArea.y - viewer.clientActiveArea.y, widget);\n }\n return widget;\n };\n /**\n * Shifts the child location\n * @param shiftTop\n * @param bodyWidget\n */\n Layout.prototype.shiftChildLocation = function (shiftTop, bodyWidget) {\n var widgetTop = bodyWidget.y + shiftTop;\n var footerMaxHeight = bodyWidget.page.boundingRectangle.height - (bodyWidget.page.boundingRectangle.height / 100) * 40;\n widgetTop = Math.max(widgetTop, footerMaxHeight);\n shiftTop = widgetTop - bodyWidget.y;\n bodyWidget.y = widgetTop;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var childWidget = bodyWidget.childWidgets[i];\n if (childWidget instanceof ParagraphWidget) {\n childWidget.x = childWidget.x;\n childWidget.y = childWidget.y + shiftTop;\n }\n else {\n this.shiftChildLocationForTableWidget(childWidget, shiftTop);\n }\n }\n };\n /**\n * Shifts the child location for table widget.\n * @param tableWidget\n * @param shiftTop\n */\n Layout.prototype.shiftChildLocationForTableWidget = function (tableWidget, shiftTop) {\n tableWidget.y = tableWidget.y + shiftTop;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var childWidget = tableWidget.childWidgets[i];\n if (childWidget instanceof TableRowWidget) {\n this.shiftChildLocationForTableRowWidget(childWidget, shiftTop);\n }\n }\n };\n /**\n * Shifts the child location for table row widget.\n * @param rowWidget\n * @param shiftTop\n */\n Layout.prototype.shiftChildLocationForTableRowWidget = function (rowWidget, shiftTop) {\n rowWidget.y = rowWidget.y + shiftTop;\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n this.shiftChildLocationForTableCellWidget(rowWidget.childWidgets[i], shiftTop);\n }\n };\n /**\n * Shifts the child location for table cell widget.\n * @param cellWidget\n * @param shiftTop\n */\n Layout.prototype.shiftChildLocationForTableCellWidget = function (cellWidget, shiftTop) {\n cellWidget.y = cellWidget.y + shiftTop;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n cellWidget.childWidgets[i].x = cellWidget.childWidgets[i].x;\n cellWidget.childWidgets[i].y = cellWidget.childWidgets[i].y + shiftTop;\n }\n else {\n this.shiftChildLocationForTableWidget(cellWidget.childWidgets[i], shiftTop);\n }\n }\n };\n /**\n * Layouts specified block.\n * @param block\n * @private\n */\n Layout.prototype.layoutBlock = function (block, index, moveToLine) {\n var nextBlock;\n if (block instanceof ParagraphWidget) {\n nextBlock = this.layoutParagraph(block, index);\n }\n else {\n nextBlock = this.layoutTable(block, index);\n }\n return nextBlock.nextRenderedWidget;\n };\n /**\n * Adds paragraph widget.\n * @param area\n */\n Layout.prototype.addParagraphWidget = function (area, paragraphWidget) {\n var ownerParaWidget = undefined;\n if (paragraphWidget.isEmpty() && !isNullOrUndefined(paragraphWidget.paragraphFormat) &&\n (paragraphWidget.paragraphFormat.textAlignment === 'Center' || paragraphWidget.paragraphFormat.textAlignment === 'Right') &&\n paragraphWidget.paragraphFormat.listFormat.listId === -1) {\n var top_1 = 0;\n var bottom = 0;\n var width = this.viewer.textHelper.getParagraphMarkWidth(paragraphWidget.characterFormat);\n var left = area.x;\n if (paragraphWidget.paragraphFormat.textAlignment === 'Center') {\n left += (area.width - width) / 2;\n }\n else {\n left += area.width - width;\n }\n paragraphWidget.width = width;\n paragraphWidget.x = left;\n paragraphWidget.y = area.y;\n }\n else {\n paragraphWidget.width = area.width;\n paragraphWidget.x = area.x;\n paragraphWidget.y = area.y;\n }\n return paragraphWidget;\n };\n /**\n * Adds line widget.\n * @param paragraph\n */\n Layout.prototype.addLineWidget = function (paragraphWidget) {\n var line = undefined;\n line = new LineWidget(paragraphWidget);\n line.width = paragraphWidget.width;\n paragraphWidget.childWidgets.push(line);\n line.paragraph = paragraphWidget;\n return line;\n };\n /**\n * Layouts specified paragraph.\n * @private\n * @param paragraph\n */\n Layout.prototype.layoutParagraph = function (paragraph, lineIndex) {\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n this.layoutListItems(paragraph);\n if (paragraph.isEmpty()) {\n this.layoutEmptyLineWidget(paragraph, true);\n }\n else {\n var line = lineIndex < paragraph.childWidgets.length ?\n paragraph.childWidgets[lineIndex] : undefined;\n while (line instanceof LineWidget) {\n if (line.isFirstLine() && isNullOrUndefined(this.fieldBegin)) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)) {\n // tslint:disable-next-line:max-line-length\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n }\n line = this.layoutLine(line, 0);\n paragraph = line.paragraph;\n line = line.nextLine;\n }\n }\n this.updateWidgetToPage(this.viewer, paragraph);\n return paragraph;\n };\n Layout.prototype.clearLineMeasures = function () {\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.maxTextHeight = 0;\n };\n Layout.prototype.moveElementFromNextLine = function (line) {\n var nextLine = line.nextLine;\n while (nextLine instanceof LineWidget) {\n if (nextLine.children.length > 0) {\n var element = nextLine.children.splice(0, 1)[0];\n line.children.push(element);\n element.line = line;\n break;\n }\n else {\n if (nextLine.paragraph.childWidgets.length === 1) {\n nextLine.paragraph.destroy();\n }\n else {\n nextLine.destroy();\n }\n nextLine = line.nextLine;\n }\n }\n };\n Layout.prototype.layoutLine = function (line, count) {\n var paragraph = line.paragraph;\n if (line.children.length === 0) {\n this.moveElementFromNextLine(line);\n }\n var element = line.children[count];\n this.clearLineMeasures();\n while (element instanceof ElementBox) {\n this.layoutElement(element, paragraph);\n line = element.line;\n element = element.nextElement;\n }\n return line;\n };\n // tslint:disable:max-func-body-length\n Layout.prototype.layoutElement = function (element, paragraph) {\n var line = element.line;\n var text = '';\n var index = element.indexInOwner;\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0 && this.viewer.fields.indexOf(element) === -1) {\n this.viewer.fields.push(element);\n }\n this.layoutFieldCharacters(element);\n if (element.line.isLastLine() && isNullOrUndefined(element.nextNode) && !this.isFieldCode) {\n if (isNullOrUndefined(element.fieldSeparator)) {\n this.layoutEmptyLineWidget(paragraph, false, element.line);\n }\n this.moveToNextLine(line);\n }\n else if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n else if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width === 0) {\n this.moveToNextLine(line);\n if (line.paragraph.lastChild === line && !isNullOrUndefined(line.nextLine) &&\n this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n }\n return;\n }\n if (element instanceof ListTextElementBox || this.isFieldCode || element instanceof BookmarkElementBox) {\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement)) {\n if (this.hasValidElement(line.paragraph)) {\n this.moveToNextLine(line);\n }\n else {\n this.layoutEmptyLineWidget(line.paragraph, false, line, false);\n }\n }\n return;\n }\n var width = element.width;\n if (element instanceof FieldTextElementBox) {\n text = this.viewer.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n }\n else {\n text = element.text;\n }\n }\n else if (element instanceof TextElementBox) {\n this.checkAndSplitTabOrLineBreakCharacter(element.text, element);\n text = element.text;\n }\n // Here field code width and height update need to skipped based on the hidden property.\n if (element instanceof TextElementBox) {\n width = this.viewer.textHelper.getTextSize(element, element.characterFormat);\n if (element.text === '\\t') {\n element.width = this.getTabWidth(paragraph, this.viewer, index, line, element);\n }\n }\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, line);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n if (element.previousElement) {\n this.cutClientWidth(element.previousElement);\n }\n }\n if (width < this.viewer.clientActiveArea.width || !this.viewer.textWrap) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n else if (!element.line.isLastLine() && isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width === 0) {\n this.moveToNextLine(line);\n if (line.paragraph.lastChild === line && this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n }\n }\n else if (element instanceof TextElementBox) {\n if (element.text === '\\t') {\n var currentLine = element.line;\n this.addSplittedLineWidget(currentLine, currentLine.children.indexOf(element));\n this.moveToNextLine(currentLine);\n // Recalculates tab width based on new client active area X position\n element.width = this.getTabWidth(paragraph, this.viewer, index, line, element);\n this.addElementToLine(paragraph, element);\n }\n else {\n //Splits the text and arrange line by line, till end of text.\n do {\n line = element.line;\n this.splitTextForClientArea(line, element, element.text, element.width, element.characterFormat);\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n } while (element.line !== line && this.cutClientWidth(element));\n }\n }\n else {\n do {\n line = element.line;\n this.splitElementForClientArea(paragraph, element);\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n } while (element.line !== line && this.cutClientWidth(element));\n }\n if (text === '\\v' || text === '\\f') {\n var elementIndex = line.children.indexOf(element);\n if (elementIndex > -1) {\n this.addSplittedLineWidget(line, elementIndex);\n }\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement) || text === '\\v' || text === '\\f') {\n this.moveToNextLine(element.line);\n if (text === '\\v' && isNullOrUndefined(element.nextNode)) {\n this.layoutEmptyLineWidget(paragraph, true, line, true);\n }\n else if (text === '\\f') {\n if (isNullOrUndefined(element.nextNode)) {\n this.moveToNextPage(this.viewer, element.line, true);\n }\n else {\n this.moveToNextPage(this.viewer, element.line.nextLine, false);\n }\n }\n }\n };\n /**\n * Return true if paragraph has valid inline\n * @private\n */\n Layout.prototype.hasValidElement = function (paragraph) {\n var line = paragraph.firstChild;\n if (line && !isNullOrUndefined(this.viewer.selection)) {\n var elementBox = line.children[0];\n while (elementBox) {\n if (elementBox instanceof FieldElementBox) {\n elementBox = this.viewer.selection.getNextValidElementForField(elementBox);\n if (!elementBox.line.paragraph.equals(paragraph)) {\n return false;\n }\n }\n if (elementBox instanceof TextElementBox) {\n return true;\n }\n elementBox = elementBox.nextNode;\n }\n }\n return false;\n };\n Layout.prototype.updateFieldText = function (element) {\n // tslint:disable-next-line:max-line-length\n var text = this.viewer.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n this.viewer.textHelper.getTextSize(element, element.characterFormat);\n }\n };\n Layout.prototype.checkLineWidgetWithClientArea = function (line, element) {\n if (line !== element.line || element.line === line && isNullOrUndefined(element.nextElement)\n && !element.line.isLastLine()) {\n this.moveToNextLine(line);\n }\n if (element.line !== line && this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height &&\n this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, element.line);\n }\n else if (element.line === line && isNullOrUndefined(element.nextElement)\n && line.paragraph.lastChild === line && !line.isLastLine() && this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n };\n Layout.prototype.checkAndSplitTabOrLineBreakCharacter = function (text, element) {\n var char = ['\\t', '\\v', '\\f'];\n var index = HelperMethods.indexOfAny(text, char);\n if (index > -1) {\n var character = text[index];\n if ((character === '\\t' && text !== '\\t') || (character === '\\v' && text !== '\\v')\n || (character === '\\f' && text !== '\\f')) {\n this.splitByLineBreakOrTab(this.viewer, element, index, character);\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.moveFromNextPage = function (line) {\n var nextLine = line.nextLine;\n if (nextLine && line.paragraph.childWidgets.indexOf(nextLine) === -1) {\n nextLine.paragraph.childWidgets.splice(nextLine.indexInOwner, 1);\n line.paragraph.childWidgets.push(nextLine);\n nextLine.paragraph = line.paragraph;\n }\n };\n Layout.prototype.cutClientWidth = function (currentElement) {\n this.clearLineMeasures();\n var line = currentElement.line;\n var width = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n width += element.width;\n if (currentElement === element) {\n break;\n }\n }\n var splitCurrentWidget = this.viewer.clientActiveArea.width - width < 0;\n if (!splitCurrentWidget) {\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + width);\n if (currentElement.line.paragraph.paragraphFormat.textAlignment === 'Justify' &&\n currentElement instanceof TextElementBox) {\n this.splitTextElementWordByWord(currentElement);\n }\n if (isNullOrUndefined(currentElement.nextElement) && this.viewer.clientActiveArea.width > 0\n && !currentElement.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n }\n else if (currentElement.previousElement) {\n this.cutClientWidth(currentElement.previousElement);\n }\n return splitCurrentWidget;\n };\n Layout.prototype.layoutFieldCharacters = function (element) {\n if (element.fieldType === 0) {\n if (!this.isFieldCode && (!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n this.viewer.fieldStacks.push(element);\n this.isFieldCode = true;\n element.hasFieldEnd = true;\n }\n }\n else if (this.viewer.fieldStacks.length > 0) {\n if (element.fieldType === 2) {\n var field = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n if (field.fieldSeparator === element && (!isNullOrUndefined(field.fieldEnd) || field.hasFieldEnd)) {\n this.isFieldCode = false;\n }\n }\n else {\n var field = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n if (element === field.fieldEnd) {\n this.viewer.fieldStacks.pop();\n this.isFieldCode = false;\n }\n }\n }\n };\n /**\n * Layouts empty line widget.\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.layoutEmptyLineWidget = function (paragraph, isEmptyLine, line, isShiftEnter) {\n isShiftEnter = isNullOrUndefined(isShiftEnter) ? false : isShiftEnter;\n //Calculate line height and descent based on formatting defined in paragraph.\n var paragraphMarkSize = this.viewer.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var maxHeight = paragraphMarkSize.Height;\n var beforeSpacing = this.getBeforeSpacing(paragraph);\n var lineWidget;\n if (paragraph.childWidgets.length > 0 && !isShiftEnter) {\n lineWidget = paragraph.childWidgets[0];\n }\n else {\n lineWidget = isEmptyLine ? this.addLineWidget(paragraph) : line;\n }\n //isNullOrUndefined(this.viewer.currentHeaderFooter) && \n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < beforeSpacing + maxHeight\n && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, lineWidget);\n }\n //Gets line spacing.\n var lineSpacing = this.getLineSpacing(paragraph, maxHeight);\n var maxDescent = maxHeight - paragraphMarkSize.BaselineOffset;\n //Calculate the bottom position of current line - max height + line spacing.\n if (!isNaN(this.maxTextHeight)\n && maxHeight < this.maxTextHeight) {\n maxHeight = this.maxTextHeight;\n maxDescent = maxHeight - this.maxTextBaseline;\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var height = maxHeight;\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n else if (lineSpacing > topMargin + height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += HelperMethods.convertPointToPixel(paragraph.paragraphFormat.afterSpacing);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (element instanceof ListTextElementBox) {\n var textAlignment = paragraph.paragraphFormat.textAlignment;\n if (textAlignment === 'Right') {\n leftMargin = this.viewer.clientArea.width - element.width;\n }\n else if (textAlignment === 'Center') {\n leftMargin = (this.viewer.clientArea.width - element.width) / 2;\n }\n element.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n element.line = lineWidget;\n lineWidget.height = topMargin + height + bottomMargin;\n }\n }\n lineWidget.height = topMargin + height + bottomMargin;\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + lineWidget.height);\n //Clears the previous line elements from collection. \n };\n /**\n * @private\n */\n Layout.prototype.layoutListItems = function (paragraph) {\n if (!this.isFieldCode) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)\n && !isNullOrUndefined(this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId)) &&\n paragraph.paragraphFormat.listFormat.listLevelNumber >= 0\n && paragraph.paragraphFormat.listFormat.listLevelNumber < 9) {\n this.clearListElementBox(paragraph);\n this.layoutList(paragraph, this.viewer);\n }\n else if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId === -1) {\n this.clearListElementBox(paragraph);\n }\n }\n };\n /**\n * Layouts list.\n * @param viewer\n */\n Layout.prototype.layoutList = function (paragraph, viewer) {\n var list = viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n viewer.updateClientWidth(-HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n var currentListLevel = this.getListLevel(list, paragraph.paragraphFormat.listFormat.listLevelNumber);\n // if (isNullOrUndefined(currentListLevel)) {\n // return;\n // }\n var lineWidget = paragraph.childWidgets[0];\n if (isNullOrUndefined(lineWidget)) {\n lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n }\n var element = new ListTextElementBox(currentListLevel, false);\n element.line = lineWidget;\n if (currentListLevel.listLevelPattern === 'Bullet') {\n element.text = currentListLevel.numberFormat;\n }\n else {\n element.text = this.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n viewer.textHelper.updateTextSize(element, paragraph);\n var moveToNextPage;\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n moveToNextPage = true;\n }\n viewer.cutFromLeft(viewer.clientActiveArea.x + element.width);\n //Adds the text element to the line\n lineWidget.children.splice(0, 0, element);\n if (currentListLevel.followCharacter !== 'None') {\n element = new ListTextElementBox(currentListLevel, true);\n if (currentListLevel.followCharacter === 'Tab') {\n element.text = '\\t';\n var index = lineWidget.children.indexOf(element);\n element.width = this.getTabWidth(paragraph, viewer, index, lineWidget, undefined);\n }\n else {\n element.text = ' ';\n viewer.textHelper.updateTextSize(element, paragraph);\n }\n viewer.cutFromLeft(viewer.clientActiveArea.x + element.width);\n //Adds the tabSpace to the line\n lineWidget.children.splice(1, 0, element);\n element.line = lineWidget;\n }\n if (moveToNextPage) {\n this.moveToNextPage(this.viewer, lineWidget);\n this.cutClientWidth(element);\n return;\n }\n if (currentListLevel.followCharacter !== 'None') {\n viewer.updateClientWidth(HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n }\n };\n /**\n * Adds body widget.\n * @param area\n * @param section\n * @private\n */\n Layout.prototype.addBodyWidget = function (area, widget) {\n var bodyWidget;\n if (widget) {\n bodyWidget = widget;\n }\n else {\n bodyWidget = new BodyWidget();\n }\n bodyWidget.width = area.width;\n bodyWidget.x = area.x;\n bodyWidget.y = area.y;\n // this.addSectionInDictionary(this.viewer, section, bodyWidget);\n return bodyWidget;\n };\n /**\n * Adds list level.\n * @param abstractList\n */\n Layout.prototype.addListLevels = function (abstractList) {\n for (var i = abstractList.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractList);\n var val = i % 3;\n if (abstractList.levels[0].listLevelPattern === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = val === 0 ? '\\uf0b7' : val === 1 ? '\\uf0a7' : '\\uf0d8';\n listLevel.characterFormat.fontFamily = listLevel.numberFormat === '\\uf0a7' || '\\uf0d8' ? 'Wingdings' : 'Symbol';\n }\n else {\n listLevel.listLevelPattern = this.getListLevelPattern(val);\n listLevel.numberFormat = '%' + (i + 1).toString() + '.';\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n listLevel.paragraphFormat = new WParagraphFormat(undefined);\n listLevel.paragraphFormat.leftIndent = 48 * (i + 1);\n listLevel.paragraphFormat.firstLineIndent = -24;\n abstractList.levels.push(listLevel);\n }\n };\n Layout.prototype.addSplittedLineWidget = function (lineWidget, elementIndex, splittedElementBox) {\n var paragraph = lineWidget.paragraph;\n var movedElementBox = [];\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n if (!isNullOrUndefined(splittedElementBox)) {\n movedElementBox.push(splittedElementBox);\n }\n var newLineWidget = undefined;\n //Move Next element box to temp collection\n for (var i = elementIndex + 1; i < lineWidget.children.length; i++) {\n movedElementBox.push(lineWidget.children[i]);\n }\n if (movedElementBox.length > 0) {\n if (lineIndex === paragraph.childWidgets.length - 1) {\n newLineWidget = new LineWidget(paragraph);\n }\n else {\n newLineWidget = paragraph.childWidgets[lineIndex + 1];\n }\n for (var j = 0; j < movedElementBox.length; j++) {\n movedElementBox[j].line = newLineWidget;\n }\n lineWidget.children.splice(elementIndex + 1, lineWidget.children.length - 1);\n newLineWidget.children = movedElementBox.concat(newLineWidget.children);\n if (paragraph.childWidgets.indexOf(newLineWidget) === -1) {\n paragraph.childWidgets.splice(lineIndex + 1, 0, newLineWidget);\n }\n }\n };\n /**\n * Adds element to line.\n * @param element\n */\n Layout.prototype.addElementToLine = function (paragraph, element) {\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n if (paragraph.paragraphFormat.textAlignment === 'Justify' && element instanceof TextElementBox) {\n this.splitTextElementWordByWord(element);\n }\n };\n /**\n * Splits element for client area.\n * @param element\n */\n Layout.prototype.splitElementForClientArea = function (paragraph, element) {\n var line = element.line;\n if (element.line.children.length > 0) {\n var previousElement = element.previousElement;\n var index = element.indexInOwner;\n // if line widget contain only single image element box need to skip this from splitting\n // else move element to next line\n if (element.line.children.length > 1) {\n if (previousElement && this.viewer.clientActiveArea.x !== this.viewer.clientArea.x) {\n index -= 1;\n }\n }\n this.addSplittedLineWidget(element.line, index);\n }\n };\n /**\n * Splits by word\n * @param elementBox\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitByWord = function (lineWidget, paragraph, elementBox, text, width, characterFormat) {\n var index = this.getSplitIndexByWord(this.viewer.clientActiveArea.width, text, width, characterFormat);\n if (index > 0 && index < elementBox.length) {\n var indexOf = lineWidget.children.indexOf(elementBox);\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElementBox = new TextElementBox();\n text = text.substring(index);\n splittedElementBox.text = text;\n if (text[0] === ' ') {\n var prevLength = text.length;\n text = HelperMethods.trimStart(text); //To trim white space at starting of the text.\n index += prevLength - text.length;\n }\n splittedElementBox.characterFormat.copyFormat(elementBox.characterFormat);\n splittedElementBox.width = this.viewer.textHelper.getWidth(splittedElementBox.text, characterFormat);\n elementBox.text = elementBox.text.substr(0, index);\n elementBox.width -= splittedElementBox.width;\n splittedElementBox.height = elementBox.height;\n splittedElementBox.baselineOffset = elementBox.baselineOffset;\n this.addSplittedLineWidget(lineWidget, indexOf, splittedElementBox);\n this.addElementToLine(paragraph, elementBox);\n if (elementBox.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n };\n /**\n * Splits by character.\n * @param textElement\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitByCharacter = function (lineWidget, textElement, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n // tslint:disable-next-line:max-line-length\n var index = this.getTextSplitIndexByCharacter(this.viewer.clientArea.width, this.viewer.clientActiveArea.width, text, width, characterFormat);\n var splitWidth = 0;\n if (index < textElement.length) {\n splitWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, index), characterFormat);\n text = text.substring(index);\n }\n if (splitWidth > this.viewer.clientActiveArea.width && textElement.indexInOwner > 0) {\n this.addSplittedLineWidget(lineWidget, textElement.indexInOwner - 1);\n return;\n }\n var indexOf = lineWidget.children.indexOf(textElement);\n if (index < textElement.length) {\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElement = new TextElementBox();\n splittedElement.text = text;\n textElement.text = textElement.text.substr(0, index);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.width = this.viewer.textHelper.getWidth(splittedElement.text, characterFormat);\n textElement.width -= splittedElement.width;\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n lineWidget.children.splice(textElement.indexInOwner + 1, 0, splittedElement);\n this.addSplittedLineWidget(lineWidget, indexOf);\n this.addElementToLine(paragraph, textElement);\n if (textElement.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n else {\n //Adds the last text element on inline to line elements collection. \n this.addSplittedLineWidget(lineWidget, indexOf);\n this.addElementToLine(paragraph, textElement);\n }\n };\n /**\n * Splits text element word by word.\n * @param textElement\n */\n Layout.prototype.splitTextElementWordByWord = function (textElement) {\n var lineWidget = textElement.line;\n var indexOf = lineWidget.children.indexOf(textElement);\n var text = textElement.text;\n var format;\n var characterUptoWs = text.trim().indexOf(' ');\n if (characterUptoWs >= 0) {\n lineWidget.children.splice(indexOf, 1);\n format = textElement.characterFormat;\n var fontSize = format.fontSize;\n var index = textElement.length - HelperMethods.trimStart(text).length; //Trim start\n while (index < textElement.length) {\n index = this.getTextIndexAfterSpace(text, index);\n if (index === 0 || index === textElement.length) {\n break;\n }\n if (index < textElement.length) {\n var splittedElement = new TextElementBox();\n var splittedText = text.substring(0, index);\n text = text.substring(index);\n if (text.substring(0, 1) === ' ') {\n // start of the text is trimmed and its length is reduced from text length. \n index += text.length - HelperMethods.trimStart(text).length;\n }\n splittedElement.text = splittedText;\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.line = lineWidget;\n splittedElement.width = this.viewer.textHelper.getWidth(splittedElement.text, format);\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n lineWidget.children.splice(indexOf, 0, splittedElement);\n textElement.text = text;\n textElement.width -= splittedElement.width;\n if (textElement.width === 0) {\n lineWidget.children.splice(lineWidget.children.indexOf(textElement), 1);\n }\n index = 0;\n indexOf++;\n }\n }\n textElement.text = text;\n lineWidget.children.splice(indexOf, 0, textElement);\n }\n };\n /**\n * Splits text for client area.\n * @param element\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitTextForClientArea = function (lineWidget, element, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n var isSplitByWord = true;\n var index = -1;\n if (!(text.substring(0, 1) === ' ')) {\n var textWidth = width;\n var characterUptoWS = 0;\n characterUptoWS = HelperMethods.trimEnd(text).indexOf(' ') + 1;\n index = characterUptoWS;\n //Checks whether text not starts with white space. If starts with white space, no need to check previous text blocks.\n if (index > 0) {\n textWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, index), characterFormat);\n }\n if (this.viewer.clientActiveArea.width < textWidth) {\n //Check and split the previous text elements to next line. \n isSplitByWord = this.checkPreviousElement(lineWidget, lineWidget.children.indexOf(element), characterFormat);\n if (isSplitByWord) {\n //lineWidget = paragraph.childWidgets[paragraph.childWidgets.indexOf(lineWidget) + 1] as LineWidget;\n //isSplitByWord = textWidth <= this.viewer.clientActiveArea.width;\n return;\n }\n }\n }\n else {\n index = 1;\n }\n if (width <= this.viewer.clientActiveArea.width) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n }\n else if (isSplitByWord && (index > 0 || text.indexOf(' ') !== -1)) {\n this.splitByWord(lineWidget, paragraph, element, text, width, characterFormat);\n }\n else {\n this.splitByCharacter(lineWidget, element, text, width, characterFormat);\n }\n };\n /**\n * Handle tab or line break character splitting\n * @param {LayoutViewer} viewer\n * @param {TextElementBox} span\n * @param {number} index\n * @param {string} spiltBy\n * @private\n */\n Layout.prototype.splitByLineBreakOrTab = function (viewer, span, index, spiltBy) {\n // Splits tab character to separate SpanAdv\n var inlineIndex = span.line.children.indexOf(span);\n var value = span.text;\n var remainder = value.substring(index);\n var newSpan = spiltBy === '\\t' ? new TabElementBox() : new TextElementBox();\n newSpan.line = span.line;\n newSpan.characterFormat.copyFormat(span.characterFormat);\n span.line.children.splice(inlineIndex + 1, 0, newSpan);\n if (index > 0 && remainder.length === 1) {\n newSpan.text = value.substring(index);\n span.text = value.substring(0, index);\n }\n else if (index > 0) {\n newSpan.text = spiltBy;\n var newText = new TextElementBox();\n newText.line = span.line;\n newText.text = value.substring(index + 1);\n newText.characterFormat.copyFormat(span.characterFormat);\n span.line.children.splice(inlineIndex + 2, 0, newText);\n span.text = value.substring(0, index);\n }\n else if (remainder !== '') {\n newSpan.text = value.substring(index + 1);\n span.text = spiltBy;\n }\n };\n /**\n * Moves to next line.\n */\n Layout.prototype.moveToNextLine = function (line) {\n var paragraph = line.paragraph;\n var paraFormat = paragraph.paragraphFormat;\n var isParagraphStart = line.isFirstLine();\n var isParagraphEnd = line.isLastLine();\n var height = 0;\n var maxDescent = 0;\n var afterSpacing = 0;\n var beforeSpacing = 0;\n var lineSpacing = 0;\n var firstLineIndent = 0;\n this.updateLineWidget(line);\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n //Updates before spacing at the top of Paragraph first line.\n if (isParagraphStart) {\n beforeSpacing = this.getBeforeSpacing(paragraph);\n firstLineIndent = HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n //Updates after spacing at the bottom of Paragraph last line.\n if (isParagraphEnd) {\n afterSpacing = HelperMethods.convertPointToPixel(paraFormat.afterSpacing);\n }\n if (isNaN(this.maxTextHeight)) {\n //Calculate line height and descent based on formatting defined in paragraph.\n var measurement = this.viewer.textHelper.measureText('a', paragraph.characterFormat);\n height = measurement.Height;\n maxDescent = height - measurement.BaselineOffset;\n }\n else {\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n }\n // Gets line spacing.\n lineSpacing = this.getLineSpacing(paragraph, height);\n if (paraFormat.lineSpacingType === 'Exactly'\n && lineSpacing < maxDescent + this.maxBaseline) {\n lineSpacing = maxDescent + this.maxBaseline;\n }\n var subWidth = 0;\n var whiteSpaceCount = 0;\n var textAlignment = paraFormat.textAlignment;\n //Calculates the sub width, for text alignments - Center, Right, Justify.\n if (textAlignment !== 'Left' && this.viewer.textWrap && !(textAlignment === 'Justify' && isParagraphEnd)) {\n // tslint:disable-next-line:max-line-length\n var getWidthAndSpace = this.getSubWidth(line, textAlignment === 'Justify', whiteSpaceCount, firstLineIndent);\n subWidth = getWidthAndSpace.subWidth;\n whiteSpaceCount = getWidthAndSpace.spaceCount;\n }\n var addSubWidth = false;\n var lineSpacingType = paraFormat.lineSpacingType;\n for (var i = 0; i < line.children.length; i++) {\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var elementBox = line.children[i];\n // tslint:disable-next-line:max-line-length\n var alignElements = this.alignLineElements(elementBox, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, i === line.children.length - 1);\n topMargin = alignElements.topMargin;\n bottomMargin = alignElements.bottomMargin;\n addSubWidth = alignElements.addSubWidth;\n whiteSpaceCount = alignElements.whiteSpaceCount;\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > height) {\n bottomMargin += lineSpacing - height;\n }\n else {\n topMargin += lineSpacing - height;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n else if (lineSpacing > topMargin + elementBox.height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += afterSpacing;\n if (i === 0) {\n line.height = topMargin + elementBox.height + bottomMargin;\n if (textAlignment === 'Right') {\n //Aligns the text as right justified.\n leftMargin = subWidth;\n }\n else if (textAlignment === 'Center') {\n //Aligns the text as center justified.\n leftMargin = subWidth / 2;\n }\n }\n elementBox.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n elementBox.line = line;\n }\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + line.height);\n };\n Layout.prototype.updateLineWidget = function (line) {\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n if (this.maxTextHeight < element.height) {\n this.maxTextHeight = element.height;\n this.maxTextBaseline = element.baselineOffset;\n }\n if (this.maxBaseline < this.maxTextBaseline) {\n this.maxBaseline = this.maxTextBaseline;\n }\n }\n else if (this.maxBaseline < element.height) {\n this.maxBaseline = element.height;\n }\n }\n };\n /**\n * @param viewer\n */\n Layout.prototype.moveToNextPage = function (viewer, line, isPageBreak) {\n var paragraphWidget = line.paragraph;\n var index = 0;\n if (!isNullOrUndefined(line)) {\n index = paragraphWidget.childWidgets.indexOf(line);\n if (index > 0 || isPageBreak) {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n }\n }\n var nextBody = this.moveBlocksToNextPage(paragraphWidget);\n this.viewer.updateClientArea(nextBody.sectionFormat, nextBody.page);\n this.viewer.updateClientAreaForBlock(paragraphWidget, true);\n if (index > 0) {\n if (line.isLastLine() && isPageBreak) {\n return;\n }\n var nextParagraph = void 0;\n if (nextBody.firstChild instanceof ParagraphWidget && nextBody.firstChild.equals(paragraphWidget)) {\n nextParagraph = nextBody.firstChild;\n }\n else {\n nextParagraph = new ParagraphWidget();\n }\n nextParagraph = this.addParagraphWidget(this.viewer.clientActiveArea, nextParagraph);\n nextParagraph.index = paragraphWidget.index;\n var insertIndex = 0;\n for (var i = index; i < paragraphWidget.childWidgets.length; i++) {\n var lineWidget = paragraphWidget.childWidgets[i];\n lineWidget.paragraph = nextParagraph;\n nextParagraph.childWidgets.splice(insertIndex, 0, lineWidget);\n lineWidget.paragraph = nextParagraph;\n insertIndex++;\n }\n nextParagraph.paragraphFormat = paragraphWidget.paragraphFormat;\n nextParagraph.characterFormat = paragraphWidget.characterFormat;\n paragraphWidget.childWidgets.splice(index);\n paragraphWidget = nextParagraph;\n }\n else if (!isPageBreak) {\n paragraphWidget.containerWidget.removeChild(paragraphWidget.indexInOwner);\n }\n if (!isPageBreak) {\n if (nextBody.childWidgets.indexOf(paragraphWidget) === -1) {\n nextBody.childWidgets.splice(0, 0, paragraphWidget);\n }\n paragraphWidget.containerWidget = nextBody;\n this.viewer.updateClientAreaLocation(paragraphWidget, this.viewer.clientActiveArea);\n }\n };\n /**\n * Aligns line elements\n * @param element\n * @param topMargin\n * @param bottomMargin\n * @param maxDescent\n * @param addSubWidth\n * @param subWidth\n * @param textAlignment\n * @param whiteSpaceCount\n * @param isLastElement\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.alignLineElements = function (element, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, isLastElement) {\n if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n var textElement = element instanceof TextElementBox ? element : undefined;\n //Updates the text to base line offset.\n // tslint:disable-next-line:max-line-length\n var baselineOffset = element instanceof TextElementBox ? textElement.baselineOffset : element.baselineOffset;\n topMargin += this.maxBaseline - baselineOffset;\n bottomMargin += maxDescent - (element.height - baselineOffset);\n //Updates the text to base line offset.\n if (!isNullOrUndefined(textElement) && textAlignment === 'Justify' && whiteSpaceCount > 0) {\n //Aligns the text as Justified.\n var width = textElement.width;\n var text = textElement.text;\n if (!addSubWidth) {\n text = HelperMethods.trimStart(text); // trim start\n addSubWidth = (text.length > 0);\n }\n if (addSubWidth) {\n var spaceCount = text.length - HelperMethods.removeSpace(text).length;\n if (isLastElement) {\n spaceCount -= text.length - HelperMethods.trimEnd(text).length;\n }\n if (whiteSpaceCount < spaceCount) {\n width = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text, textElement.characterFormat);\n spaceCount = whiteSpaceCount;\n }\n if (spaceCount > 0) {\n textElement.width = width + subWidth * spaceCount;\n whiteSpaceCount -= spaceCount;\n }\n }\n }\n }\n else {\n addSubWidth = true;\n //Updates the Image/UIElement to base line offset.\n topMargin += this.maxBaseline - element.height;\n bottomMargin += maxDescent;\n }\n return { 'topMargin': topMargin, 'bottomMargin': bottomMargin, 'addSubWidth': addSubWidth, 'whiteSpaceCount': whiteSpaceCount };\n };\n /**\n * Updates widget to page.\n * @param viewer\n * @param block\n * @private\n */\n Layout.prototype.updateWidgetToPage = function (viewer, paragraphWidget) {\n if (paragraphWidget.isInsideTable) {\n var cellWidget = paragraphWidget.associatedCell;\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n // if (viewer instanceof PageLayoutViewer) {\n if (isNullOrUndefined(paragraphWidget.associatedCell) || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow)\n || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow.rowFormat)) {\n return;\n }\n if (paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'Exactly') {\n cellWidget.height = HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height);\n }\n else {\n // tslint:disable-next-line:max-line-length\n if ([cellWidget].length <= 1 && paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'AtLeast') {\n cellWidget.height = Math.max(HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height), this.getCellContentHeight(cellWidget));\n }\n else {\n cellWidget.height = cellWidget.height + paragraphWidget.height;\n }\n }\n // } else {\n // cellWidget.height = cellWidget.height + paragraphWidget.height;\n // }\n // cellWidget.childWidgets.push(paragraphWidget);\n paragraphWidget.containerWidget = cellWidget;\n }\n else {\n if (!paragraphWidget.isEndsWithPageBreak) {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n }\n //Adds the paragraph widget to the Header Footer/ Body widget.\n // this.updateWidgetsToBody(paragraphWidget, viewer, paragraphWidget);\n //For canvas no need to render paragraph widget here. In case of div, need to render paragraph here.\n // tslint:disable-next-line:max-line-length \n // this.render.renderParagraphWidget((paragraphWidget.containerWidget as BodyWidget).page, paragraphWidget);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget) {\n if (!paragraphWidget.isInsideTable) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n }\n if (this.viewer.owner.enableHeaderAndFooter && paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.shiftFooterChildLocation = function (widget, viewer) {\n var pageHeight = widget.page.bodyWidgets[0].sectionFormat.pageHeight;\n if (widget.headerFooterType.indexOf('Footer') !== -1) {\n var footerDistance = widget.page.bodyWidgets[0].sectionFormat.footerDistance;\n var height = HelperMethods.convertPointToPixel(pageHeight - footerDistance);\n var top_2;\n if (widget.y + widget.height > height) {\n top_2 = height - (widget.y + widget.height);\n }\n else if (widget.y + widget.height < height) {\n top_2 = (widget.y + widget.height) - height;\n }\n if (!isNullOrUndefined(top_2)) {\n top_2 = height - (widget.y + widget.height);\n this.shiftChildLocation(top_2, widget);\n viewer.clientActiveArea.y += top_2;\n }\n }\n };\n /**\n * Checks previous element.\n * @param characterFormat\n */\n Layout.prototype.checkPreviousElement = function (line, index, characterFormat) {\n var paragraph = line.paragraph;\n var isSplitByWord = false;\n var lastTextElement = 0;\n for (var i = index - 1; i >= 0; i--) {\n var textElement = line.children[i];\n if (textElement instanceof TextElementBox) {\n var text = textElement.text;\n lastTextElement = i;\n if (text.length > 0 && text[text.length - 1] === ' ') {\n if (i === index - 1) {\n this.addSplittedLineWidget(line, index - 1);\n return true;\n }\n isSplitByWord = true;\n break;\n }\n else if (text === '\\t') {\n return false;\n }\n else if (text.indexOf(' ') >= 0) {\n isSplitByWord = true;\n var index_1 = text.lastIndexOf(' ') + 1;\n //Splits the text element by space.\n var splittedElement = new TextElementBox();\n splittedElement.text = text.substr(index_1);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n textElement.text = text.substr(0, index_1);\n this.viewer.textHelper.getTextSize(splittedElement, characterFormat);\n textElement.width -= splittedElement.width;\n textElement.height = splittedElement.height;\n if (textElement.width === 0) {\n line.children.splice(i, 1);\n }\n //Adds the text element to the line\n line.children.splice(i + 1, 0, splittedElement);\n break;\n }\n }\n else if (!(textElement instanceof ListTextElementBox)) {\n //Handled for inline images/UIelements.\n lastTextElement = i;\n isSplitByWord = true;\n break;\n }\n }\n if (isSplitByWord) {\n lastTextElement++;\n if (lastTextElement < line.children.length) {\n var splitWidth = 0;\n for (var i = lastTextElement; i < line.children.length; i++) {\n splitWidth += line.children[i].width;\n this.addSplittedLineWidget(line, i - 1);\n i--;\n }\n this.viewer.updateClientWidth(splitWidth);\n }\n }\n return isSplitByWord;\n };\n /**\n * @private\n */\n Layout.prototype.clearListElementBox = function (paragraph) {\n if (paragraph.childWidgets.length === 0) {\n return;\n }\n var line = paragraph.childWidgets[0];\n if (isNullOrUndefined(line.children)) {\n return;\n }\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof ListTextElementBox) {\n line.children.splice(i, 1);\n i--;\n }\n else {\n break;\n }\n }\n };\n /**\n * Gets list number.\n * @param listFormat\n * @param document\n * @private\n */\n Layout.prototype.getListNumber = function (listFormat) {\n var list = this.viewer.getListById(listFormat.listId);\n var levelNumber = listFormat.listLevelNumber;\n var listLevel = this.getListLevel(list, listFormat.listLevelNumber);\n // tslint:disable-next-line:max-line-length\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[levelNumber] : undefined;\n // If LevelOverride exists and have either override list level or StartAtOverride, then only list numbering will be restarted.\n // tslint:disable-next-line:max-line-length\n // if (!isNullOrUndefined(levelOverride) && !(document.renderedLevelOverrides.indexOf(levelOverride) > -1) && isNullOrUndefined(levelOverride.overrideListLevel)) {\n // //Add List Override style\n // document.renderedLevelOverrides.push(list.levelOverrides.getItem(levelNumber) as WLevelOverride);\n // if (document.renderedLists.containsKey((list.wordDocument as WordDocument).getAbstractListById(list.abstractListId))) {\n // tslint:disable-next-line:max-line-length\n // let levels: Dictionary = document.renderedLists.get((list.wordDocument as WordDocument).getAbstractListById(list.abstractListId));\n // if (levels.containsKey(levelNumber)) {\n // levels.remove(levelNumber);\n // }\n // }\n // }\n this.updateListValues(list, levelNumber);\n return this.getListText(list, levelNumber, listLevel);\n };\n /**\n * Gets list start value\n * @param listLevelNumber\n * @param list\n * @private\n */\n Layout.prototype.getListStartValue = function (listLevelNumber, list) {\n // tslint:disable-next-line:max-line-length\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[listLevelNumber] : undefined;\n if (!isNullOrUndefined(levelOverride) && isNullOrUndefined(levelOverride.overrideListLevel)) {\n return levelOverride.startAt;\n }\n var listLevel = this.getListLevel(list, listLevelNumber);\n if (isNullOrUndefined(listLevel)) {\n return 0;\n }\n else {\n return listLevel.startAt;\n }\n };\n /**\n * Updates list values.\n * @param list\n * @param listLevelNumber\n * @param document\n */\n Layout.prototype.updateListValues = function (list, listLevelNumber) {\n if (!this.viewer.renderedLists.containsKey(this.viewer.getAbstractListById(list.abstractListId))) {\n var startVal = new Dictionary();\n this.viewer.renderedLists.add(this.viewer.getAbstractListById(list.abstractListId), startVal);\n var listLevel = this.getListLevel(list, listLevelNumber);\n for (var i = 0; i <= listLevelNumber; i++) {\n startVal.add(i, this.getListStartValue(i, list));\n }\n }\n else {\n // tslint:disable-next-line:max-line-length\n var levels = this.viewer.renderedLists.get(this.viewer.getAbstractListById(list.abstractListId));\n if (levels.containsKey(listLevelNumber)) {\n var startAt = levels.get(listLevelNumber);\n levels.set(listLevelNumber, startAt + 1);\n var levelNumber = listLevelNumber + 1;\n while (levelNumber < this.viewer.getAbstractListById(list.abstractListId).levels.length) {\n var listLevel = this.getListLevel(list, levelNumber);\n // if (!isNullOrUndefined(listLevel)) {\n if (levels.containsKey(levelNumber) && listLevel.restartLevel > listLevelNumber) {\n levels.remove(levelNumber);\n // if (document.renderedListLevels.indexOf(listLevel) > -1) {\n // document.renderedListLevels.pop();\n // }\n }\n // }\n levelNumber++;\n }\n }\n else {\n var levelNumber = listLevelNumber;\n while (!levels.containsKey(levelNumber - 1) && levelNumber > 0) {\n var listLevel = this.getListLevel(list, levelNumber - 1);\n // if (!isNullOrUndefined(listLevel)) {\n levels.add(levelNumber - 1, this.getListStartValue(levelNumber - 1, list));\n // if (document.renderedListLevels.indexOf(listLevel) !== -1) {\n // document.renderedListLevels.push(listLevel);\n // }\n // }\n levelNumber--;\n }\n var startAt = this.getListStartValue(listLevelNumber, list);\n levels.add(listLevelNumber, startAt);\n }\n }\n };\n /**\n * Gets list text\n * @param listAdv\n * @param listLevelNumber\n * @param currentListLevel\n * @param document\n */\n Layout.prototype.getListText = function (listAdv, listLevelNumber, currentListLevel) {\n var listText = currentListLevel.numberFormat;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.renderedLists.containsKey(this.viewer.getAbstractListById(listAdv.abstractListId))) {\n var levels = this.viewer.renderedLists.get(this.viewer.getAbstractListById(listAdv.abstractListId));\n var keys = levels.keys;\n for (var i = 0; i < keys.length; i++) {\n var levelNumber = keys[i];\n var levelKey = '%' + (levelNumber + 1).toString();\n var listLevel = this.getListLevel(listAdv, levelNumber);\n if (listText.match(levelKey)) {\n if (levelNumber > listLevelNumber) {\n return '';\n }\n else if (levels.containsKey(levelNumber) && !isNullOrUndefined(listLevel)) {\n listText = listText.replace(levelKey, this.getListTextListLevel(listLevel, levels.get(levelNumber)));\n }\n else {\n listText = listText.replace(levelKey, '0');\n }\n }\n }\n }\n return listText;\n };\n /**\n * Gets the roman letter.\n * @param number\n * @private\n */\n Layout.prototype.getAsLetter = function (number) {\n // if (number <= 0) {\n // return '';\n // }\n var quotient = number / 26;\n var remainder = number % 26;\n if (remainder === 0) {\n //If number denotes the factor of 26, then reduce quotient by 1 and set remainder as 26.\n remainder = 26;\n quotient--;\n }\n //Index of A char in the ASCII table. \n var letter = String.fromCharCode(65 - 1 + remainder);\n var listValue = '';\n while (quotient >= 0) {\n listValue = listValue + letter.toString();\n quotient--;\n }\n return listValue;\n };\n /**\n * Gets list text using list level pattern.\n * @param listLevel\n * @param listValue\n * @private\n */\n Layout.prototype.getListTextListLevel = function (listLevel, listValue) {\n switch (listLevel.listLevelPattern) {\n case 'UpRoman':\n return this.getAsRoman(listValue).toUpperCase();\n case 'LowRoman':\n return this.getAsRoman(listValue).toLowerCase();\n case 'UpLetter':\n return this.getAsLetter(listValue).toUpperCase();\n case 'LowLetter':\n return this.getAsLetter(listValue).toLowerCase();\n case 'Arabic':\n return (listValue).toString();\n case 'LeadingZero':\n return this.getAsLeadingZero(listValue);\n case 'Number':\n return (listValue).toString();\n case 'OrdinalText':\n return (listValue).toString();\n case 'Ordinal':\n return (listValue).toString();\n case 'FarEast':\n return (listValue).toString();\n case 'Special':\n return (listValue).toString();\n default:\n return '';\n }\n };\n /**\n * Generate roman number for the specified number.\n * @param number\n * @param magnitude\n * @param letter\n */\n Layout.prototype.generateNumber = function (number, magnitude, letter) {\n var numberstring = '';\n while (number >= magnitude) {\n number -= magnitude;\n numberstring += letter;\n this.value = number;\n }\n return numberstring.toString();\n };\n /**\n * Gets list value prefixed with zero, if less than 10\n * @param listValue\n */\n Layout.prototype.getAsLeadingZero = function (listValue) {\n if (listValue < 10) {\n return '0' + listValue.toString();\n }\n else {\n return listValue.toString();\n }\n };\n /**\n * Gets the roman number\n * @param number\n * @private\n */\n Layout.prototype.getAsRoman = function (number) {\n var retval = '';\n this.value = number;\n retval += this.generateNumber(this.value, 1000, 'M');\n retval += this.generateNumber(this.value, 900, 'CM');\n retval += this.generateNumber(this.value, 500, 'D');\n retval += this.generateNumber(this.value, 400, 'CD');\n retval += this.generateNumber(this.value, 100, 'C');\n retval += this.generateNumber(this.value, 90, 'XC');\n retval += this.generateNumber(this.value, 50, 'L');\n retval += this.generateNumber(this.value, 40, 'XL');\n retval += this.generateNumber(this.value, 10, 'X');\n retval += this.generateNumber(this.value, 9, 'IX');\n retval += this.generateNumber(this.value, 5, 'V');\n retval += this.generateNumber(this.value, 4, 'IV');\n retval += this.generateNumber(this.value, 1, 'I');\n return retval.toString();\n };\n /**\n * Gets the list level\n * @param list\n * @param listLevelNumber\n * @private\n */\n Layout.prototype.getListLevel = function (list, listLevelNumber) {\n if (!isNullOrUndefined(list)) {\n var abstractList = this.viewer.getAbstractListById(list.abstractListId);\n if (!isNullOrUndefined(list) && abstractList.levels.length <= listLevelNumber\n && listLevelNumber >= 0 && listLevelNumber < 9) {\n this.addListLevels(abstractList);\n }\n var levelOverrideAdv = undefined;\n var level = false;\n level = (!isNullOrUndefined(list.levelOverrides))\n && !isNullOrUndefined(((levelOverrideAdv = list.levelOverrides[listLevelNumber])))\n && (!isNullOrUndefined(levelOverrideAdv.overrideListLevel));\n if (level) {\n return levelOverrideAdv.overrideListLevel;\n }\n else if (!isNullOrUndefined(abstractList) && listLevelNumber >= 0 && listLevelNumber < abstractList.levels.length) {\n return abstractList.levels[listLevelNumber];\n }\n }\n return undefined;\n };\n /**\n * Gets tab width\n * @param paragraph\n * @param viewer\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getTabWidth = function (paragraph, viewer, index, lineWidget, element) {\n var fposition = 0;\n var isCustomTab = false;\n var tabs = paragraph.paragraphFormat.getUpdatedTabs();\n // Calculate hanging width\n if (viewer.clientActiveArea.x < viewer.clientArea.x) {\n return viewer.clientArea.x - viewer.clientActiveArea.x;\n }\n // Calculates tabwidth based on pageleftmargin and defaulttabwidth property\n var position = viewer.clientActiveArea.x -\n (viewer.clientArea.x - HelperMethods.convertPointToPixel(paragraph.paragraphFormat.leftIndent));\n var defaultTabWidth = HelperMethods.convertPointToPixel(viewer.defaultTabWidth);\n if (tabs.length === 0 && (position === 0 || defaultTabWidth === 0)) {\n return defaultTabWidth;\n }\n else {\n if (tabs.length > 0) {\n for (var i = 0; i < tabs.length; i++) {\n var tabPosition = HelperMethods.convertPointToPixel(tabs[i].position);\n if (tabs[i].tabJustification === 'Left' && position < tabPosition) {\n fposition = tabPosition;\n isCustomTab = true;\n if (!isNullOrUndefined(element)) {\n element.tabLeader = tabs[i].tabLeader;\n element.tabText = '';\n }\n break;\n }\n else if (tabs[i].tabJustification === 'Right' && position < tabPosition) {\n var tabwidth = tabPosition - position;\n var width = this.getRightTabWidth(index + 1, lineWidget, paragraph);\n if (width < tabwidth) {\n defaultTabWidth = tabwidth - width;\n }\n else {\n defaultTabWidth = 0;\n }\n fposition = position;\n isCustomTab = true;\n if (!isNullOrUndefined(element)) {\n element.tabLeader = tabs[i].tabLeader;\n element.tabText = '';\n }\n break;\n }\n }\n }\n if (!isCustomTab) {\n var diff = ((Math.round(position) * 100) % (Math.round(defaultTabWidth) * 100)) / 100;\n var cnt = (Math.round(position) - diff) / Math.round(defaultTabWidth);\n fposition = (cnt + 1) * defaultTabWidth;\n }\n return (fposition - position) > 0 ? fposition - position : defaultTabWidth;\n }\n };\n /**\n * Returns the right tab width\n * @param index - index of starting inline\n * @param lineWidget - current line widget\n * @param paragraph - current paragraph widget\n */\n Layout.prototype.getRightTabWidth = function (index, lineWidget, paragraph) {\n var width = 0;\n var isFieldCode = false;\n while (index < lineWidget.children.length) {\n var elementBox = lineWidget.children[index];\n if ((elementBox instanceof FieldElementBox) || (elementBox instanceof BookmarkElementBox) || isFieldCode) {\n if (elementBox instanceof FieldElementBox) {\n if (elementBox.fieldType === 0) {\n isFieldCode = true;\n }\n else if (elementBox.fieldType === 2) {\n isFieldCode = false;\n }\n }\n elementBox.width = 0;\n }\n else {\n this.viewer.textHelper.getTextSize(elementBox, elementBox.characterFormat);\n }\n if (elementBox instanceof TextElementBox && elementBox.text === '\\t') {\n return width;\n }\n else {\n width = width + elementBox.width;\n }\n index++;\n }\n return width;\n };\n /**\n * Gets split index by word.\n * @param clientActiveWidth\n * @param text\n * @param width\n * @param characterFormat\n */\n Layout.prototype.getSplitIndexByWord = function (clientActiveWidth, text, width, characterFormat) {\n var index = 0;\n var length = text.length;\n while (index < length) {\n var nextIndex = this.getTextIndexAfterSpace(text, index);\n if (nextIndex === 0 || nextIndex === length) {\n nextIndex = length - 1;\n }\n var splitWidth = width;\n if ((nextIndex < length - 1 || (nextIndex === length - 1 && text[nextIndex - 1] === ' ')) && index !== nextIndex) {\n splitWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, nextIndex), characterFormat);\n }\n if (splitWidth <= clientActiveWidth) {\n index = nextIndex;\n }\n else {\n if (index === 0 && text[0] === ' ') {\n index = this.getTextIndexAfterSpace(text, 0);\n }\n break;\n }\n }\n return index;\n };\n /**\n * Gets split index by character\n * @param totalClientWidth\n * @param clientActiveAreaWidth\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getTextSplitIndexByCharacter = function (totalClientWidth, clientActiveAreaWidth, text, width, characterFormat) {\n var length = text.length;\n for (var i = 0; i < length; i++) {\n var splitWidth = width;\n if (i + 1 < length) {\n splitWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, i + 1), characterFormat);\n }\n if (splitWidth > clientActiveAreaWidth) {\n if (i === 0 && splitWidth > totalClientWidth) {\n //Handle for cell/section having client width less than a character's width.\n return (length > 1 && text[1] === ' ') ? this.getTextIndexAfterSpace(text, 1) : 1;\n }\n return i;\n }\n }\n return 0;\n };\n /**\n * Gets sub width.\n * @param justify\n * @param spaceCount\n * @param firstLineIndent\n */\n Layout.prototype.getSubWidth = function (lineWidget, justify, spaceCount, firstLineIndent) {\n var width = 0;\n var trimSpace = true;\n var lineText = '';\n for (var i = lineWidget.children.length - 1; i >= 0; i--) {\n var element = lineWidget.children[i];\n if (element instanceof TextElementBox) {\n var elementText = element.text;\n lineText = elementText + lineText;\n if (trimSpace && (elementText.trim() !== '' || elementText === '\\t')) {\n if (HelperMethods.endsWith(elementText)) {\n width += this.viewer.textHelper.measureTextExcludingSpaceAtEnd(elementText, element.characterFormat);\n }\n else {\n width += element.width;\n }\n trimSpace = false;\n }\n else if (!trimSpace) {\n width += element.width;\n }\n }\n else {\n lineText = 'a' + lineText;\n trimSpace = false;\n width += element.width;\n }\n if (!justify) {\n width = Math.round(width);\n }\n }\n lineText = lineText.trim();\n spaceCount = lineText.length - HelperMethods.removeSpace(lineText).length;\n var subWidth = (this.viewer.clientArea.width - firstLineIndent - width);\n if (subWidth <= 0 || (spaceCount === 0 && justify)) {\n spaceCount = 0;\n subWidth = 0;\n }\n else if (justify) {\n subWidth = subWidth / spaceCount;\n }\n return { 'subWidth': subWidth, 'spaceCount': spaceCount };\n };\n /**\n * Gets before spacing.\n * @param paragraph\n * @private\n */\n Layout.prototype.getBeforeSpacing = function (paragraph) {\n var beforeSpacing = 0;\n if (paragraph.previousWidget instanceof ParagraphWidget) {\n if (paragraph.previousWidget.paragraphFormat.afterSpacing < paragraph.paragraphFormat.beforeSpacing) {\n // tslint:disable-next-line:max-line-length\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing - paragraph.previousWidget.paragraphFormat.afterSpacing;\n }\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n return beforeSpacing;\n };\n /**\n * Gets line spacing.\n * @param paragraph\n * @param maxHeight\n * @private\n */\n Layout.prototype.getLineSpacing = function (paragraph, maxHeight) {\n if (isNullOrUndefined(paragraph.paragraphFormat)) {\n return 0;\n }\n var lineSpacing = 0;\n switch (paragraph.paragraphFormat.lineSpacingType) {\n case 'AtLeast':\n case 'Exactly':\n lineSpacing = paragraph.paragraphFormat.lineSpacing;\n break;\n default:\n lineSpacing = paragraph.paragraphFormat.lineSpacing * maxHeight;\n break;\n }\n return lineSpacing;\n };\n /**\n * Checks whether current line is first line in a paragraph.\n * @param paragraph\n */\n Layout.prototype.isParagraphFirstLine = function (paragraph, line) {\n var widget = paragraph;\n if (isNullOrUndefined(widget.childWidgets) || widget.childWidgets.indexOf(line) === 0) {\n //If the line elements conatins the elements from previous paragraph then need to retun false.\n //Example scenario, Field start and field end in different paragraphs.\n if (line.children.length > 0 && !isNullOrUndefined(paragraph.previousWidget)\n && paragraph.previousWidget instanceof ParagraphWidget) {\n return line.paragraph.index !== paragraph.previousWidget.index;\n }\n return true; //If the line elements count is zero then also need to return true.\n }\n return false;\n };\n /**\n * Checks whether current line is last line in a paragraph.\n * @param paragraph\n */\n Layout.prototype.isParagraphLastLine = function (element) {\n var paragraph = element.line.paragraph;\n var lastLineWidget = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n var lastInline = lastLineWidget.children[lastLineWidget.children.length - 1];\n if (element === lastInline) {\n // tslint:disable-next-line:max-line-length \n return (lastInline instanceof FieldElementBox) || ((!(lastInline instanceof TextElementBox && lastInline.text === '\\v')));\n }\n return false;\n };\n /**\n * Gets text index after space.\n * @param text\n * @param startIndex\n */\n Layout.prototype.getTextIndexAfterSpace = function (text, startIndex) {\n var length = text.length;\n var index = 0;\n index = text.indexOf(' ', startIndex) + 1;\n var nextIndex = index;\n if (nextIndex === 0 || nextIndex === length) {\n return nextIndex;\n }\n while (text[nextIndex] === ' ') {\n nextIndex++;\n if (nextIndex === length) {\n break;\n }\n }\n return nextIndex;\n };\n //#region Table\n /**\n * @private\n */\n Layout.prototype.moveNextWidgetsToTable = function (tableWidget, rowWidgets, moveFromNext) {\n var currentRow = moveFromNext ? rowWidgets[rowWidgets.length - 2] : rowWidgets[rowWidgets.length - 1];\n var rowIndex = currentRow.indexInOwner;\n var currentTable = tableWidget[tableWidget.length - 1];\n if (moveFromNext) {\n rowIndex += 1;\n }\n var nextWidgets = currentRow.containerWidget.childWidgets.splice(rowIndex);\n for (var i = 0; i < nextWidgets.length; i++) {\n currentTable.childWidgets.push(nextWidgets[i]);\n nextWidgets[i].containerWidget = currentTable;\n }\n };\n /**\n * Adds table cell widget.\n * @param cell\n * @param area\n * @param maxCellMarginTop\n * @param maxCellMarginBottom\n */\n Layout.prototype.addTableCellWidget = function (cell, area, maxCellMarginTop, maxCellMarginBottom) {\n //let tableCellWidget: TableCellWidget = new TableCellWidget(cell);\n var prevColumnIndex = 0;\n var cellspace = 0;\n var left = 0;\n var top = maxCellMarginTop;\n var right = 0;\n var bottom = maxCellMarginBottom;\n if (!isNullOrUndefined(cell.cellFormat)) {\n if (cell.cellFormat.containsMargins()) {\n // tslint:disable-next-line:max-line-length\n left = isNullOrUndefined(cell.cellFormat.leftMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.leftMargin);\n right = isNullOrUndefined(cell.cellFormat.rightMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.rightMargin);\n }\n else {\n left = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin);\n right = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin);\n }\n }\n cell.margin = new Margin(left, top, right, bottom);\n cell.width = HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n if (!isNullOrUndefined(cell.previousWidget)) {\n // tslint:disable-next-line:max-line-length\n prevColumnIndex = cell.previousWidget.columnIndex + cell.previousWidget.cellFormat.columnSpan;\n }\n // tslint:disable-next-line:max-line-length\n cellspace = !isNullOrUndefined(cell.ownerTable) && !isNullOrUndefined(cell.ownerTable.tableFormat) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) : 0;\n var prevSpannedCellWidth = 0;\n if (prevColumnIndex < cell.columnIndex) {\n // tslint:disable-next-line:max-line-length\n prevSpannedCellWidth = HelperMethods.convertPointToPixel(cell.ownerTable.tableHolder.getPreviousSpannedCellWidth(prevColumnIndex, cell.columnIndex));\n if (prevColumnIndex === 0) {\n prevSpannedCellWidth = prevSpannedCellWidth - cellspace / 2;\n }\n }\n cell.x = area.x + prevSpannedCellWidth + cell.margin.left;\n cell.y = area.y + cell.margin.top + cellspace;\n cell.width = cell.width - cell.margin.left - cell.margin.right;\n if (cellspace > 0) {\n cell.x += cellspace;\n if (cell.ownerTable.tableHolder.columns.length === 1) {\n cell.width -= cellspace * 2;\n }\n else if (cell.columnIndex === 0 || cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1) {\n cell.width -= ((cellspace * 2) - cellspace / 2);\n }\n else {\n cell.width -= cellspace;\n }\n }\n // update the margins values respect to layouting of borders.\n // tslint:disable-next-line:max-line-length\n //For normal table cells only left border is rendred. for last cell left and right border is rendred. this border widths are not included in margins.\n cell.leftBorderWidth = HelperMethods.convertPointToPixel(TableCellWidget.getCellLeftBorder(cell).getLineWidth());\n cell.x += cell.leftBorderWidth;\n cell.width -= cell.leftBorderWidth;\n if (cellspace > 0 || cell.cellIndex === cell.ownerRow.childWidgets.length - 1) {\n cell.rightBorderWidth = TableCellWidget.getCellRightBorder(cell).getLineWidth();\n cell.width -= cell.rightBorderWidth;\n }\n //Add the border widths to respective margin side.\n cell.margin.left = cell.margin.left + cell.leftBorderWidth;\n cell.margin.right = cell.margin.right + cell.rightBorderWidth;\n //cell.ownerWidget = owner;\n return cell;\n };\n /**\n * Adds specified row widget to table.\n * @param viewer\n * @param tableRowWidget\n * @param row\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.addWidgetToTable = function (viewer, tableCollection, rowCollection, row, endRowWidget) {\n //Adds table row widget to owner table widget.\n var tableWidget = tableCollection[0];\n var index = tableWidget.childWidgets.length;\n var prevWidget = undefined;\n var rowWidgetIndex = rowCollection.indexOf(row);\n if (rowWidgetIndex > 0) {\n prevWidget = rowCollection[rowWidgetIndex - 1];\n // Need to update on this further\n }\n else if (row.previousRenderedWidget instanceof TableRowWidget &&\n row.previousRenderedWidget.ownerTable.equals(row.ownerTable)) {\n // Need to update on this further\n prevWidget = row.previousRenderedWidget;\n }\n if (!isNullOrUndefined(prevWidget)) {\n tableWidget = prevWidget.containerWidget;\n // index = tableWidget.childWidgets.length;\n index = tableWidget.childWidgets.indexOf(prevWidget) + 1;\n if (Math.round(row.y) !== Math.round(prevWidget.y + prevWidget.height)) {\n var prevIndex = tableCollection.indexOf(tableWidget);\n if (prevIndex + 1 >= tableCollection.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableCollection, true);\n }\n tableWidget = tableCollection[prevIndex + 1];\n index = tableWidget.childWidgets.length;\n }\n if (rowWidgetIndex > 0) {\n index = 0;\n }\n }\n this.updateRowHeightBySpannedCell(tableWidget, row, index);\n this.updateRowHeightByCellSpacing(tableCollection, row, viewer);\n //Remove widget from previous container after splitteing\n if (row.containerWidget && row.containerWidget !== tableWidget &&\n row.containerWidget.childWidgets.indexOf(row) !== -1) {\n row.containerWidget.childWidgets.splice(row.containerWidget.childWidgets.indexOf(row), 1);\n }\n if (tableWidget.childWidgets.indexOf(row) === -1) {\n tableWidget.childWidgets.splice(index, 0, row);\n }\n row.containerWidget = tableWidget;\n tableWidget.height = tableWidget.height + row.height;\n if (!isNullOrUndefined(tableWidget.containerWidget)\n && tableWidget.containerWidget.childWidgets.indexOf(tableWidget) >= 0 &&\n !(tableWidget.containerWidget instanceof HeaderFooterWidget)) {\n tableWidget.containerWidget.height += row.height;\n }\n this.updateHeightForRowWidget(viewer, false, tableCollection, rowCollection, row, false, endRowWidget);\n viewer.cutFromTop(row.y + row.height);\n };\n /**\n * Updates row height by spanned cell.\n * @param tableWidget\n * @param rowWidget\n * @param insertIndex\n * @param row\n * @private\n */\n Layout.prototype.updateRowHeightBySpannedCell = function (tableWidget, row, insertIndex) {\n var rowSpan = 1;\n if (tableWidget.childWidgets.length === 0 || insertIndex === 0) {\n this.updateRowHeight(row, row);\n return;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n this.updateSpannedRowCollection(rowSpan, row);\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n for (var i = 0; i < row.ownerTable.spannedRowCollection.length; i++) {\n if (row.ownerTable.spannedRowCollection.keys[i] === row.index) {\n // Back track to previous table row widgets and update it height if vertical merge ends with this row.\n for (var j = 0; j < insertIndex; j++) {\n var prevRowWidget = tableWidget.childWidgets[j];\n this.updateRowHeight(prevRowWidget, row);\n }\n row.ownerTable.spannedRowCollection.remove(row.ownerTable.spannedRowCollection.keys[i]);\n break;\n }\n }\n }\n };\n /**\n * Updates row height.\n * @param prevRowWidget\n * @param rowWidget\n * @param row\n */\n Layout.prototype.updateRowHeight = function (prevRowWidget, row) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < prevRowWidget.childWidgets.length; i++) {\n var cellWidget = prevRowWidget.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n //To update Row height- if row has row span value greater than 1, need to add it in spannedRowCollection \n this.updateSpannedRowCollection(rowSpan, row);\n if (rowIndex - cellWidget.rowIndex === rowSpan - 1) {\n var mergedCellHeight = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - row.y;\n if (row.height < mergedCellHeight) {\n row.height = mergedCellHeight;\n }\n }\n }\n };\n //if row has row span value greater than 1, need to add it in spannedRowCollection\n Layout.prototype.updateSpannedRowCollection = function (rowSpan, row) {\n if (rowSpan > 1 && !isNullOrUndefined(row.ownerTable)) {\n //Checks the rowspan is already exist in the list\n if (!row.ownerTable.spannedRowCollection.containsKey(row.index + rowSpan - 1)) {\n row.ownerTable.spannedRowCollection.add(row.index + rowSpan - 1, row.index);\n }\n }\n };\n /**\n * Updates row height by cell spacing\n * @param rowWidget\n * @param viewer\n * @param row\n */\n Layout.prototype.updateRowHeightByCellSpacing = function (tableCollection, row, viewer) {\n if (row.ownerTable.tableFormat.cellSpacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page. \n // In such case we have update the row height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n // tslint:disable-next-line:max-line-length\n if (tableCollection.length > 1 && row.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n row.height = row.height - HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) / 2;\n }\n }\n };\n /**\n * Checks whether row span is end.\n * @param row\n * @param viewer\n */\n Layout.prototype.isRowSpanEnd = function (row, viewer) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < viewer.splittedCellWidgets.length; i++) {\n var splittedCell = viewer.splittedCellWidgets[i];\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1) {\n return true;\n }\n }\n return false;\n };\n /**\n * Checks whether vertical merged cell to continue or not.\n * @param row\n * @private\n */\n Layout.prototype.isVerticalMergedCellContinue = function (row) {\n var colIndex = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (colIndex < cell.columnIndex) {\n return true;\n }\n colIndex += cell.cellFormat.columnSpan;\n }\n return colIndex < row.ownerTable.tableHolder.columns.length;\n };\n /**\n * Splits widgets.\n * @param tableRowWidget\n * @param viewer\n * @param splittedWidget\n * @param row\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitWidgets = function (tableRowWidget, viewer, tableCollection, rowCollection, splittedWidget, isLastRow) {\n if (this.isFirstLineFitForRow(viewer.clientArea.bottom, tableRowWidget) && tableRowWidget.childWidgets.length > 0) {\n splittedWidget = this.getSplittedWidgetForRow(viewer.clientArea.bottom, tableCollection, rowCollection, tableRowWidget);\n if (viewer.splittedCellWidgets.length > 0 || splittedWidget !== tableRowWidget) {\n if (isLastRow) {\n for (var i = 0; i < splittedWidget.childWidgets.length; i++) {\n var cell = splittedWidget.childWidgets[i];\n if (cell.rowIndex !== splittedWidget.index) {\n splittedWidget.childWidgets.splice(i, 1);\n i--;\n }\n }\n }\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.indexInOwner - 1);\n }\n }\n else {\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.indexInOwner - 1);\n }\n return splittedWidget;\n };\n /**\n * Gets splitted widget for row.\n * @param bottom\n * @param tableRowWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getSplittedWidgetForRow = function (bottom, tableCollection, rowCollection, tableRowWidget) {\n var splittedWidget = undefined;\n var rowIndex = tableRowWidget.index;\n for (var i = 0; i < tableRowWidget.childWidgets.length; i++) {\n var cellWidget = tableRowWidget.childWidgets[i];\n var splittedCell = this.getSplittedWidget(bottom, true, tableCollection, rowCollection, cellWidget);\n if (!isNullOrUndefined(splittedCell)) {\n if (splittedCell === cellWidget) {\n //Returns if the whole content of the row does not fit in current page.\n return tableRowWidget;\n }\n if (tableRowWidget.childWidgets.indexOf(splittedCell) !== -1) {\n tableRowWidget.childWidgets.splice(tableRowWidget.childWidgets.indexOf(splittedCell), 1);\n }\n if (i === 0 || tableRowWidget.height < cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom) {\n tableRowWidget.height = cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new TableRowWidget();\n splittedWidget.containerWidget = tableRowWidget.containerWidget;\n splittedWidget.index = tableRowWidget.index;\n splittedWidget.rowFormat = tableRowWidget.rowFormat;\n this.updateWidgetLocation(tableRowWidget, splittedWidget);\n splittedWidget.height = 0;\n rowCollection.push(splittedWidget);\n }\n var rowSpan = 1;\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1\n && splittedWidget.height < splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom) {\n splittedWidget.height = splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom;\n }\n splittedWidget.childWidgets.push(splittedCell);\n splittedCell.containerWidget = splittedWidget;\n }\n }\n return splittedWidget;\n };\n /**\n * Updates widget to table.\n * @param row\n * @param viewer\n */\n /* tslint:disable */\n Layout.prototype.updateWidgetsToTable = function (tableWidgets, rowWidgets, row) {\n var rowHeight = this.getRowHeight(row, [row]);\n var viewer = this.viewer;\n //initializing row properties with default values.\n var isHeader = row.rowFormat.isHeader;\n var isAllowBreakAcrossPages = row.rowFormat.allowBreakAcrossPages;\n var heightType = row.rowFormat.heightType;\n var cellSpacing = 0;\n var count = 0;\n var tableRowWidget = row;\n var moveRowToNextTable = false;\n if (row.ownerTable.continueHeader && !isHeader) {\n row.ownerTable.continueHeader = false;\n }\n var isLastRow = false;\n cellSpacing = (!isNullOrUndefined(row.ownerTable) && !isNullOrUndefined(row.ownerTable.tableFormat)) ? HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) : 0;\n while (count < rowWidgets.length) {\n count = rowWidgets.length;\n if (row.ownerTable.isInsideTable || (viewer.splittedCellWidgets.length === 0 && tableRowWidget.y + tableRowWidget.height + cellSpacing <= viewer.clientArea.bottom)) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n if (viewer.splittedCellWidgets.length > 0 && isNullOrUndefined(rowWidgets[rowWidgets.length - 1].nextRow)) {\n count--;\n isLastRow = true;\n }\n }\n else {\n //Split widget for next page\n if (viewer.splittedCellWidgets.length > 0 && tableRowWidget.y + tableRowWidget.height <= viewer.clientArea.bottom) {\n var isRowSpanEnd = this.isRowSpanEnd(row, viewer);\n if (!isRowSpanEnd) {\n if (this.isVerticalMergedCellContinue(row) && tableRowWidget.y == viewer.clientArea.y) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.indexInOwner - 1);\n }\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n continue;\n }\n }\n var splittedWidget = tableRowWidget;\n var tableWidget = tableWidgets[tableWidgets.length - 1];\n if (rowHeight + tableRowWidget.y > viewer.clientArea.bottom) {\n // tslint:disable-next-line:max-line-length\n if (!isAllowBreakAcrossPages || (isHeader && row.ownerTable.continueHeader) || (heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientArea.bottom)) {\n // tslint:disable-next-line:max-line-length\n if ((heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientActiveArea.height && isAllowBreakAcrossPages) || (heightType !== 'Exactly' && tableRowWidget.y === viewer.clientArea.y) || (heightType === 'Auto' && isAllowBreakAcrossPages)) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n }\n if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n count++;\n }\n if (isHeader && row.ownerTable.continueHeader) {\n row.ownerTable.header = false;\n row.ownerTable.continueHeader = false;\n row.ownerTable.headerHeight = 0;\n var pages = undefined;\n // if (viewer instanceof PageLayoutViewer) {\n pages = viewer.pages;\n // }\n if (!isNullOrUndefined(pages)) {\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget) {\n pages[i].repeatHeaderRowTableWidget = false;\n }\n }\n }\n }\n }\n else {\n if ((heightType === 'Auto' || heightType === 'AtLeast') && isAllowBreakAcrossPages) {\n // tslint:disable-next-line:max-line-length\n if (!(HelperMethods.convertPointToPixel(row.rowFormat.height) > viewer.clientArea.bottom) || tableRowWidget.y === viewer.clientArea.y) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n }\n }\n else if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n count++;\n }\n }\n }\n else {\n var isInsertSplittedWidgets = false;\n // Splitting handled for the merged cell with allowRowBreakAcross pages. \n if (this.isVerticalMergedCellContinue(row) && (isAllowBreakAcrossPages ||\n (isInsertSplittedWidgets = tableRowWidget.y == viewer.clientArea.y))) {\n if (isInsertSplittedWidgets) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, splittedWidget, tableRowWidget.indexInOwner - 1);\n }\n else {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n }\n }\n else if (isLastRow && !isAllowBreakAcrossPages) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n }\n }\n //Create New table for splitted widget\n if (!isNullOrUndefined(splittedWidget)) {\n if (splittedWidget !== tableRowWidget) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, tableRowWidget.nextRow);\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, tableRowWidget.nextRow);\n var index_2 = tableWidgets.indexOf(tableRowWidget.containerWidget);\n if (index_2 + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n tableRowWidget = splittedWidget;\n }\n else {\n if (row.index > 0) {\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, row);\n // Need to update on this further\n if (row.previousRenderedWidget instanceof TableRowWidget) {\n // Need to update on this further\n var prevWidget = row.previousRenderedWidget;\n if (HelperMethods.round(tableRowWidget.y, 2) === HelperMethods.round(prevWidget.y + prevWidget.height, 2)) {\n var prevIndex = tableWidgets.indexOf(prevWidget.containerWidget);\n if (prevIndex + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n moveRowToNextTable = true;\n count--;\n }\n tableWidget = tableWidgets[tableWidgets.length - 1];\n var prevBodyWidget = undefined;\n if (tableWidgets.length > 1) {\n //Get Previous Splitted Widget container\n prevBodyWidget = tableWidgets[tableWidgets.length - 2].containerWidget;\n }\n else {\n var previousBlock = row.ownerTable.previousRenderedWidget;\n prevBodyWidget = previousBlock.containerWidget;\n }\n var pageIndex = 0;\n if (!isNullOrUndefined(prevBodyWidget)) {\n pageIndex = viewer.pages.indexOf(prevBodyWidget.page);\n }\n var index = row.ownerTable.containerWidget.index;\n var bodyWidget = void 0;\n var block = void 0;\n if (moveRowToNextTable && tableWidgets.length === 1) {\n block = tableWidgets[tableWidgets.length - 1];\n }\n else {\n block = tableWidgets[tableWidgets.length - 2];\n }\n bodyWidget = this.moveBlocksToNextPage(block);\n var curretTable = tableWidgets[tableWidgets.length - 1];\n //Move Next RowWidge to next page\n if (moveRowToNextTable) {\n // tslint:disable-next-line:max-line-length\n if (row.index === 0 && curretTable.containerWidget && curretTable.containerWidget.childWidgets.indexOf(curretTable) !== -1) {\n curretTable.containerWidget.childWidgets.splice(curretTable.containerWidget.childWidgets.indexOf(curretTable), 1);\n }\n }\n if (bodyWidget.childWidgets.indexOf(curretTable) !== -1) {\n bodyWidget.childWidgets.splice(bodyWidget.childWidgets.indexOf(curretTable), 1);\n }\n bodyWidget.childWidgets.unshift(curretTable);\n curretTable.containerWidget = bodyWidget;\n if (moveRowToNextTable && row.index > 0 || rowWidgets.length > 1) {\n this.moveNextWidgetsToTable(tableWidgets, rowWidgets, !moveRowToNextTable);\n }\n moveRowToNextTable = false;\n if (row.ownerTable.header && tableRowWidget.height < viewer.clientArea.bottom) {\n // if (viewer instanceof PageLayoutViewer) {\n viewer.currentRenderingPage.repeatHeaderRowTableWidget = true;\n // }\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(row.ownerTable, true, tableWidgets);\n // tslint:disable-next-line:max-line-length\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y + row.ownerTable.headerHeight;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y + row.ownerTable.headerHeight - cellspace, splittedWidget);\n }\n else {\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(row.ownerTable, true, tableWidgets);\n // tslint:disable-next-line:max-line-length\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y - cellspace, splittedWidget);\n }\n }\n isLastRow = false;\n }\n if (isHeader && row.ownerTable.continueHeader) {\n row.ownerTable.header = true;\n row.ownerTable.headerHeight = rowHeight + row.ownerTable.headerHeight;\n }\n if (isHeader && !isNullOrUndefined(this.getHeader(row.ownerTable)) && row.index === this.getHeader(row.ownerTable).index) {\n var headerHeight = this.getHeaderHeight(row.ownerTable, row, rowWidgets);\n if (headerHeight > row.ownerTable.headerHeight || headerHeight > row.ownerTable.headerHeight) {\n row.ownerTable.headerHeight = headerHeight;\n }\n if (row.ownerTable.headerHeight > viewer.clientArea.height) {\n row.ownerTable.header = false;\n row.ownerTable.continueHeader = false;\n row.ownerTable.headerHeight = 0;\n var pages = viewer.pages;\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget) {\n pages[i].repeatHeaderRowTableWidget = false;\n }\n }\n }\n }\n if (tableWidgets.length > 2 && row.ownerTable.header && tableRowWidget.height < viewer.clientActiveArea.bottom &&\n !viewer.currentRenderingPage.repeatHeaderRowTableWidget) {\n viewer.currentRenderingPage.repeatHeaderRowTableWidget = true;\n }\n }\n };\n /* tslint:enable */\n /**\n * Gets header.\n * @param table\n * @private\n */\n Layout.prototype.getHeader = function (table) {\n var header = undefined;\n var flag = true;\n table = table.getSplitWidgets()[0];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.isHeader) {\n header = row;\n }\n else {\n flag = false;\n }\n if (!flag) {\n break;\n }\n }\n return header;\n };\n /**\n * Gets header height.\n * @param ownerTable\n * @param row\n */\n Layout.prototype.getHeaderHeight = function (ownerTable, row, rowCollection) {\n var height = 0;\n if (row.ownerTable.childWidgets.length > 0 && ownerTable.childWidgets[0].rowFormat.isHeader) {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row_1 = ownerTable.childWidgets[i];\n if (row_1.rowFormat.isHeader) {\n height = height + this.getRowHeight(row_1, rowCollection);\n }\n else {\n break;\n }\n }\n }\n return height;\n };\n /**\n * Updates widgets to row.\n * @param cell\n */\n Layout.prototype.updateWidgetToRow = function (cell) {\n var viewer = this.viewer;\n //Adds table cell widget to owner row widget.\n var rowWidget = cell.ownerRow;\n var cellLeft = rowWidget.x;\n if (rowWidget.childWidgets.length > 0) {\n var lastWidget = rowWidget.childWidgets[rowWidget.childWidgets.length - 1];\n cellLeft = lastWidget.x + lastWidget.width + lastWidget.margin.right;\n }\n // rowWidget.childWidgets.push(cell);\n cell.containerWidget = rowWidget;\n //If the row height is set as Atleast then height is set to atleast height for the first cell of the row.\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(cell.ownerRow) && cell.ownerRow.rowFormat.heightType !== 'Exactly' && HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height) > 0 && cell.cellIndex === 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height);\n }\n //Add condition not cell merged vertically.\n if (cell.cellFormat.rowSpan === 1) {\n var cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n if (rowWidget.height - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) < cellHeight) {\n rowWidget.height = cellHeight + HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n }\n }\n };\n /**\n * Updates height for row widget.\n * @param viewer\n * @param isUpdateVerticalPosition\n * @param rowWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.updateHeightForRowWidget = function (viewer, isUpdateVerticalPosition, tableCollection, rowCollection, rowWidget, isLayouted, endRowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellspacing = 0;\n var cellWidget = undefined;\n var childWidget = rowWidget.childWidgets[i];\n // if (childWidget instanceof TableCellWidget) {\n cellWidget = childWidget;\n // }\n var rowSpan = 1;\n rowSpan = cellWidget.cellFormat.rowSpan;\n cellspacing = HelperMethods.convertPointToPixel(cellWidget.ownerTable.tableFormat.cellSpacing);\n if (rowSpan > 1) {\n var currentRowWidgetIndex = rowWidget.containerWidget.childWidgets.indexOf(rowWidget);\n // tslint:disable-next-line:max-line-length\n var rowSpanWidgetEndIndex = currentRowWidgetIndex + rowSpan - 1 - (rowWidget.index - cellWidget.rowIndex);\n if (viewer.clientArea.bottom < cellWidget.y + cellWidget.height + cellWidget.margin.bottom\n || rowSpanWidgetEndIndex >= currentRowWidgetIndex + 1) {\n this.splitSpannedCellWidget(cellWidget, tableCollection, rowCollection, viewer);\n }\n var spanEndRowWidget = rowWidget;\n if (rowSpanWidgetEndIndex > 0) {\n if (rowSpanWidgetEndIndex < rowWidget.containerWidget.childWidgets.length) {\n var childWidget_1 = rowWidget.containerWidget.childWidgets[rowSpanWidgetEndIndex];\n if (childWidget_1 instanceof TableRowWidget) {\n spanEndRowWidget = childWidget_1;\n if (spanEndRowWidget === endRowWidget) {\n spanEndRowWidget = rowWidget;\n }\n }\n }\n else {\n // tslint:disable-next-line:max-line-length\n spanEndRowWidget = rowWidget.containerWidget.childWidgets[rowWidget.containerWidget.childWidgets.length - 1];\n }\n }\n if (cellWidget.y + cellWidget.height + cellWidget.margin.bottom < spanEndRowWidget.y + spanEndRowWidget.height) {\n cellWidget.height = spanEndRowWidget.y + spanEndRowWidget.height - cellWidget.y - cellWidget.margin.bottom;\n // tslint:disable-next-line:max-line-length\n }\n else if (isLayouted && spanEndRowWidget && (spanEndRowWidget.y !== 0 && spanEndRowWidget.height !== 0) && cellWidget.y + cellWidget.height + cellWidget.margin.bottom > spanEndRowWidget.y + spanEndRowWidget.height) {\n spanEndRowWidget.height = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - spanEndRowWidget.y;\n // tslint:disable-next-line:max-line-length\n //Update the next rowlayout widget location. Reason for the updation is previous row height is updated when cell height is greater. So already layouted next row location has to be updated again.\n // if (rowWidget === spanEndRowWidget && rowWidget.nextWidget instanceof TableRowWidget) {\n // let nextRow: TableRowWidget = rowWidget.nextWidget as TableRowWidget;\n // // Need to update on this further\n // // if (viewer.renderedElements.containsKey(nextRow)) {\n // // let nextWidget: TableRowWidget[] = viewer.renderedElements.get(nextRow) as TableRowWidget[];\n // // if (nextWidget.length > 0) {\n // // nextWidget[0].x = nextWidget[0].x;\n // // nextWidget[0].y = rowWidget.y + rowWidget.height;\n // // }\n // // }\n // }\n }\n }\n else {\n if (cellspacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page. \n // In such case we have update the cell height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n // tslint:disable-next-line:max-line-length\n if (tableCollection.length > 1 && rowWidget.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n cellspacing = cellspacing / 2;\n }\n }\n cellWidget.height = rowWidget.height - cellWidget.margin.top - cellWidget.margin.bottom - cellspacing;\n }\n this.updateHeightForCellWidget(viewer, tableCollection, rowCollection, cellWidget);\n var widget = rowWidget.containerWidget;\n while (widget.containerWidget instanceof Widget) {\n widget = widget.containerWidget;\n }\n var page = undefined;\n if (widget instanceof BodyWidget) {\n page = widget.page;\n }\n // tslint:disable-next-line:max-line-length\n if ((viewer instanceof PageLayoutViewer && viewer.visiblePages.indexOf(page) !== -1) || isUpdateVerticalPosition) {\n this.updateCellVerticalPosition(cellWidget, false, false);\n }\n //Renders the current table row contents, after relayout based on editing.\n // if (viewer instanceof PageLayoutViewer && (viewer as PageLayoutViewer).visiblePages.indexOf(page) !== -1) {\n // //Added proper undefined condition check for Asynchronous operation.\n // if (!isNullOrUndefined(rowWidget.tableRow) && !isNullOrUndefined(rowWidget.tableRow.rowFormat)) {\n // this.viewer.updateScrollBars();\n // //this.render.renderTableCellWidget(page, cellWidget);\n // }\n // }\n }\n };\n /**\n * Updates height for cell widget.\n * @param viewer\n * @param cellWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.updateHeightForCellWidget = function (viewer, tableWidget, rowCollection, cellWidget) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.updateHeightForTableWidget(tableWidget, rowCollection, cellWidget.childWidgets[i]);\n }\n }\n };\n /**\n * Gets row height.\n * @param row\n * @private\n */\n Layout.prototype.getRowHeight = function (row, rowCollection) {\n var height = 0;\n if (row.rowFormat.heightType === 'Exactly') {\n height = row.rowFormat.height;\n }\n else {\n for (var i = 0; i < rowCollection.length; i++) {\n if (rowCollection[i] instanceof TableRowWidget) {\n height = rowCollection[i].height + height;\n }\n }\n height = Math.max(height, row.rowFormat.height);\n }\n return height;\n };\n /**\n * splits spanned cell widget.\n * @param cellWidget\n * @param viewer\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitSpannedCellWidget = function (cellWidget, tableCollection, rowCollection, viewer) {\n var splittedCell = this.getSplittedWidget(viewer.clientArea.bottom, false, tableCollection, rowCollection, cellWidget);\n if (!isNullOrUndefined(splittedCell)) {\n //Adds the splitted contents of a vertical merged cell, in order preserve in next page.\n viewer.splittedCellWidgets.push(splittedCell);\n }\n };\n /**\n * Inserts splitted cell widgets.\n * @param viewer\n * @param rowWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.insertSplittedCellWidgets = function (viewer, tableCollection, rowWidget, previousRowIndex) {\n var left = rowWidget.x;\n var tableWidth = 0;\n tableWidth = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableHolder.tableWidth);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n if (Math.round(left) < Math.round(cellWidget.x - cellWidget.margin.left)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i)) {\n i--;\n continue;\n }\n var length_1 = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i, previousRowIndex);\n if (length_1 < rowWidget.childWidgets.length) {\n i--;\n continue;\n }\n }\n left += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n if (i === rowWidget.childWidgets.length - 1 && Math.round(left) < Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i + 1, previousRowIndex);\n continue;\n }\n }\n // tslint:disable-next-line:max-line-length\n // Special case: when the child widgets of row is equal to 0 then the splitted widgets in the viewer is added in the table row widgets. \n if ((isNullOrUndefined(rowWidget.childWidgets) || rowWidget.childWidgets.length === 0) && viewer.splittedCellWidgets.length > 0) {\n for (var j = 0; j < viewer.splittedCellWidgets.length; j++) {\n var widget = viewer.splittedCellWidgets[j];\n if (Math.round(left) <= Math.round(widget.x - widget.margin.left)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j)) {\n j--;\n continue;\n }\n var count = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j, previousRowIndex);\n if (count < rowWidget.childWidgets.length) {\n j--;\n continue;\n }\n }\n left += widget.margin.left + widget.width + widget.margin.right;\n if (j === rowWidget.childWidgets.length - 1 && Math.round(left) <\n Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j + 1, previousRowIndex);\n continue;\n }\n }\n }\n if (viewer.splittedCellWidgets.length > 0) {\n viewer.splittedCellWidgets = [];\n }\n };\n /**\n * Inserts spanned row widget.\n * @param rowWidget\n * @param viewer\n * @param left\n * @param index\n */\n Layout.prototype.insertRowSpannedWidget = function (rowWidget, viewer, left, index) {\n var cellSpacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n cellSpacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < viewer.splittedCellWidgets.length; i++) {\n var splittedCell = viewer.splittedCellWidgets[i];\n if (Math.round(left) === Math.round(splittedCell.x - splittedCell.margin.left)) {\n rowWidget.childWidgets.splice(index, 0, splittedCell);\n splittedCell.containerWidget = rowWidget;\n //If the splitted cell location differs from expected location update the location of row child widgets.\n if (splittedCell.y !== rowWidget.y + splittedCell.margin.top + cellSpacing) {\n this.updateChildLocationForRow(rowWidget.y, rowWidget);\n }\n viewer.splittedCellWidgets = [];\n return true;\n }\n }\n return false;\n };\n /**\n * Inserts empty splitted cell widgets.\n * @param rowWidget\n * @param left\n * @param index\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.insertEmptySplittedCellWidget = function (currentRow, tableCollection, left, index, previousRowIndex) {\n var tableWidget = tableCollection[tableCollection.length - 1];\n for (var i = previousRowIndex; i >= 0; i--) {\n var rowWidget = tableWidget.childWidgets[i];\n var previousLeft = rowWidget.x;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var rowSpan = 1;\n var cellWidget = rowWidget.childWidgets[j];\n if (Math.round(left) === Math.round(previousLeft)) {\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan :\n cellWidget.cellFormat.rowSpan;\n if (rowSpan > 1) {\n var emptyCellWidget = this.createCellWidget(cellWidget);\n currentRow.childWidgets.splice(index, 0, emptyCellWidget);\n emptyCellWidget.containerWidget = currentRow;\n }\n return;\n }\n previousLeft += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n }\n }\n };\n /**\n * Gets spllited widget.\n * @param bottom\n * @param splitMinimalWidget\n * @param cellWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getSplittedWidget = function (bottom, splitMinimalWidget, tableCollection, rowCollection, cellWidget) {\n var splittedWidget = undefined;\n if (cellWidget.y + cellWidget.height > bottom - cellWidget.margin.bottom) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var paragraphWidget = cellWidget.childWidgets[i];\n var splittedPara = this.getSplittedWidgetForPara(bottom - cellWidget.margin.bottom, paragraphWidget);\n if (!isNullOrUndefined(splittedPara)) {\n if (i === 0 && splittedPara === paragraphWidget) {\n //Returns if the whole content of the cell does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedPara) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedPara), 1);\n i--;\n }\n cellWidget.height -= splittedPara.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedPara.height;\n splittedWidget.childWidgets.push(splittedPara);\n splittedPara.containerWidget = splittedWidget;\n }\n }\n else {\n var tableWidget = cellWidget.childWidgets[i];\n var tableCol = [tableWidget];\n //Check for nested table.\n if (bottom - cellWidget.margin.bottom < tableWidget.y + tableWidget.height) {\n var tableHeight = tableWidget.height;\n // tslint:disable-next-line:max-line-length\n var splittedTable = this.getSplittedWidgetForTable(bottom - cellWidget.margin.bottom, tableCol, tableWidget);\n if (!isNullOrUndefined(splittedTable)) {\n if (i === 0 && splittedTable === tableWidget) {\n //Returns if the whole table does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedTable) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedTable), 1);\n i--;\n cellWidget.height -= splittedTable.height;\n }\n else {\n cellWidget.height -= tableHeight - tableWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedTable.height;\n splittedWidget.childWidgets.push(splittedTable);\n splittedTable.containerWidget = splittedWidget;\n }\n }\n }\n }\n }\n if (isNullOrUndefined(splittedWidget) && splitMinimalWidget) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n return splittedWidget;\n };\n /**\n * Gets list level pattern\n * @param value\n * @private\n */\n Layout.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case 0:\n return 'Arabic';\n case 1:\n return 'UpRoman';\n case 2:\n return 'LowRoman';\n case 3:\n return 'UpLetter';\n case 4:\n return 'LowLetter';\n case 5:\n return 'Ordinal';\n case 6:\n return 'Number';\n case 7:\n return 'OrdinalText';\n case 8:\n return 'LeadingZero';\n case 9:\n return 'Bullet';\n case 10:\n return 'FarEast';\n case 11:\n return 'Special';\n default:\n return 'None';\n }\n };\n /**\n * Creates cell widget.\n * @param cell\n */\n Layout.prototype.createCellWidget = function (cell) {\n var cellWidget = new TableCellWidget();\n cellWidget.cellFormat = cell.cellFormat;\n cellWidget.index = cell.index;\n cellWidget.rowIndex = cell.rowIndex;\n cellWidget.columnIndex = cell.columnIndex;\n cellWidget.containerWidget = cell.containerWidget;\n this.updateWidgetLocation(cell, cellWidget);\n cellWidget.margin = cell.margin;\n cellWidget.leftBorderWidth = HelperMethods.convertPointToPixel(cell.leftBorderWidth);\n cellWidget.rightBorderWidth = HelperMethods.convertPointToPixel(cell.rightBorderWidth);\n return cellWidget;\n };\n /**\n * Create Table Widget\n */\n Layout.prototype.createTableWidget = function (table) {\n var newTable = new TableWidget();\n if (table.header) {\n newTable.header = table.header;\n newTable.headerHeight = table.headerHeight;\n }\n newTable.index = table.index;\n newTable.tableFormat = table.tableFormat;\n newTable.tableHolder = table.tableHolder;\n newTable.isGridUpdated = table.isGridUpdated;\n return newTable;\n };\n /**\n * Gets splitted widget for paragraph.\n * @param bottom\n * @param paragraphWidget\n */\n Layout.prototype.getSplittedWidgetForPara = function (bottom, paragraphWidget) {\n var lineBottom = paragraphWidget.y;\n var splittedWidget = undefined;\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var lineWidget = paragraphWidget.childWidgets[i];\n if (bottom < lineBottom + lineWidget.height) {\n if (i === 0) {\n if (lineWidget.paragraph.containerWidget instanceof TableCellWidget) {\n //checks first line of the page is exceed the page height\n if (lineWidget.paragraph.containerWidget.y === paragraphWidget.y) {\n lineBottom += lineWidget.height;\n continue;\n }\n }\n splittedWidget = paragraphWidget;\n break;\n }\n if (paragraphWidget.childWidgets.indexOf(lineWidget) !== -1) {\n paragraphWidget.childWidgets.splice(paragraphWidget.childWidgets.indexOf(lineWidget), 1);\n i--;\n }\n paragraphWidget.height -= lineWidget.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new ParagraphWidget();\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.index = paragraphWidget.index;\n this.updateWidgetLocation(paragraphWidget, splittedWidget);\n splittedWidget.height = lineWidget.height;\n }\n else {\n splittedWidget.height += lineWidget.height;\n }\n splittedWidget.childWidgets.push(lineWidget);\n lineWidget.paragraph = splittedWidget;\n }\n lineBottom += lineWidget.height;\n }\n return splittedWidget;\n };\n /**\n * Gets splitted table widget.\n * @param bottom\n * @param tableWidget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getSplittedWidgetForTable = function (bottom, tableCollection, tableWidget) {\n var rowBottom = tableWidget.y;\n var splittedWidget = undefined;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = undefined;\n var childWidget = tableWidget.childWidgets[i];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n var rowHeight = rowWidget.height;\n if (bottom < rowBottom + rowHeight || !isNullOrUndefined(splittedWidget)) {\n //ToDo: Check whether row included in vertical merge or AllowRowSplitbyPage is true, if so split row.\n //Checks if atleast first line fits in the client area. \n var splittedRow = undefined;\n var allowRowBreakAcrossPages = true;\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(rowWidget.rowFormat)) {\n allowRowBreakAcrossPages = rowWidget.rowFormat.allowBreakAcrossPages;\n }\n if (allowRowBreakAcrossPages) {\n // tslint:disable-next-line:max-line-length\n splittedRow = (isNullOrUndefined(splittedWidget) && this.isFirstLineFitForRow(bottom, rowWidget)) ? this.getSplittedWidgetForRow(bottom, tableCollection, [rowWidget], rowWidget) : rowWidget;\n }\n if (!isNullOrUndefined(splittedRow)) {\n if (i === 0 && splittedRow === rowWidget) {\n //Returns if the whole table does not fit in current page.\n return tableWidget;\n }\n if (tableWidget.childWidgets.indexOf(splittedRow) !== -1) {\n tableWidget.childWidgets.splice(tableWidget.childWidgets.indexOf(splittedRow), 1);\n i--;\n tableWidget.height -= splittedRow.height;\n }\n else {\n tableWidget.height -= rowHeight - rowWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createTableWidget(tableWidget);\n this.updateWidgetLocation(tableWidget, splittedWidget);\n splittedWidget.height = splittedRow.height;\n }\n else {\n splittedWidget.height += splittedRow.height;\n }\n splittedWidget.childWidgets.push(splittedRow);\n splittedRow.containerWidget = splittedWidget;\n }\n }\n rowBottom += rowWidget.height;\n }\n return splittedWidget;\n };\n /**\n * Checks whether first line fits for paragraph or not.\n * @param bottom\n * @param paraWidget\n */\n Layout.prototype.isFirstLineFitForPara = function (bottom, paraWidget) {\n var lineWidget = paraWidget.childWidgets[0];\n var cellwidget = lineWidget.paragraph.containerWidget;\n // let document: WordDocument = undefined;\n // if (!isNullOrUndefined(lineWidget.paragraph.currentNode) && !isNullOrUndefined(cellwidget.containerWidget)) {\n // document = WordDocument.getDocumentOf(lineWidget.paragraph.currentNode);\n // }\n //checks first line of the page is exceed the page height\n if (this.viewer.isFirstLineFitInShiftWidgets) {\n if (this.viewer.clientActiveArea.y === this.viewer.clientArea.y && paraWidget.y + lineWidget.height >= bottom) {\n return true;\n }\n }\n else {\n // For nested tables,\n if (cellwidget.ownerTable.isInsideTable) {\n // Gets the container cell widgets, consider it as client area for the cell widget.\n var containerCellWidget = undefined;\n if (cellwidget.containerWidget instanceof TableRowWidget &&\n cellwidget.containerWidget.containerWidget instanceof TableWidget\n && cellwidget.containerWidget.containerWidget.containerWidget instanceof TableCellWidget) {\n containerCellWidget = cellwidget.containerWidget.containerWidget.containerWidget;\n }\n if (!isNullOrUndefined(containerCellWidget) && cellwidget.containerWidget.y === containerCellWidget.y\n && paraWidget.y + lineWidget.height >= bottom) {\n return true;\n }\n }\n else if (cellwidget.containerWidget.y === this.viewer.clientArea.y && paraWidget.y + lineWidget.height >= bottom) {\n return true;\n }\n }\n return (paraWidget.y + lineWidget.height <= bottom);\n };\n /**\n * Checks whether first line fits for table or not.\n * @param bottom\n * @param tableWidget\n * @private\n */\n Layout.prototype.isFirstLineFitForTable = function (bottom, tableWidget) {\n var rowWidget = undefined;\n var isFit = false;\n var childWidget = tableWidget.childWidgets[0];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n if (!isNullOrUndefined(rowWidget)) {\n isFit = this.isFirstLineFitForRow(bottom, rowWidget);\n }\n return isFit;\n };\n /**\n * Checks whether first line fits for row or not.\n * @param bottom\n * @param rowWidget\n */\n Layout.prototype.isFirstLineFitForRow = function (bottom, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n if (!this.isFirstLineFitForCell(bottom, cellWidget)) {\n return false;\n }\n }\n return true;\n };\n /**\n * Checks whether first line fits for cell or not.\n * @param bottom\n * @param cellWidget\n */\n Layout.prototype.isFirstLineFitForCell = function (bottom, cellWidget) {\n if (cellWidget.childWidgets.length === 0) {\n return true;\n }\n if (cellWidget.childWidgets[0] instanceof ParagraphWidget) {\n var paraWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForPara(bottom - cellWidget.margin.bottom, paraWidget);\n }\n else {\n var tableWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForTable(bottom - cellWidget.margin.bottom, tableWidget);\n }\n };\n /**\n * Updates widget location.\n * @param widget\n * @param table\n */\n Layout.prototype.updateWidgetLocation = function (widget, table) {\n table.x = widget.x;\n table.y = widget.y;\n table.width = widget.width;\n };\n /**\n * Updates child location for table.\n * @param top\n * @param tableWidget\n * @private\n */\n Layout.prototype.updateChildLocationForTable = function (top, tableWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n rowWidget.x = rowWidget.x;\n rowWidget.y = top;\n this.updateChildLocationForRow(top, rowWidget);\n top += rowWidget.height;\n }\n };\n /**\n * Updates child location for row.\n * @param top\n * @param rowWidget\n * @private\n */\n Layout.prototype.updateChildLocationForRow = function (top, rowWidget) {\n var spacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n spacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n cellWidget.x = cellWidget.x;\n cellWidget.y = top + cellWidget.margin.top + spacing;\n this.updateChildLocationForCell(cellWidget.y, cellWidget);\n }\n };\n /**\n * Updates child location for cell.\n * @param top\n * @param cellWidget\n */\n Layout.prototype.updateChildLocationForCell = function (top, cellWidget) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n cellWidget.childWidgets[i].x = cellWidget.childWidgets[i].x;\n cellWidget.childWidgets[i].y = top;\n if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.updateChildLocationForTable(top, cellWidget.childWidgets[i]);\n }\n top += cellWidget.childWidgets[i].height;\n }\n };\n /**\n * Updates cell vertical position.\n * @param cellWidget\n * @param isUpdateToTop\n * @param isInsideTable\n * @private\n */\n Layout.prototype.updateCellVerticalPosition = function (cellWidget, isUpdateToTop, isInsideTable) {\n if (cellWidget.ownerTable.containerWidget instanceof BodyWidget || isInsideTable) {\n var displacement = this.getDisplacement(cellWidget, isUpdateToTop);\n //Update Y position alone for the child widget of cell\n this.updateCellContentVerticalPosition(cellWidget, displacement, isUpdateToTop);\n }\n };\n /**\n * Updates cell content vertical position.\n * @param cellWidget\n * @param displacement\n * @param isUpdateToTop\n */\n Layout.prototype.updateCellContentVerticalPosition = function (cellWidget, displacement, isUpdateToTop) {\n if (displacement === 0) {\n return;\n }\n var location = cellWidget.y + displacement;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n cellWidget.childWidgets[i].y = location;\n }\n else {\n location = this.updateTableWidgetLocation(cellWidget.childWidgets[i], location, isUpdateToTop);\n }\n location = location + cellWidget.childWidgets[i].height;\n }\n };\n /**\n * Updates table widget location.\n * @param tableWidget\n * @param location\n * @param isUpdateToTop\n */\n Layout.prototype.updateTableWidgetLocation = function (tableWidget, location, isUpdateToTop) {\n tableWidget.y = location = location + tableWidget.topBorderWidth;\n var cellSpacing = 0;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n rowWidget.y = location;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.y = location + cellWidget.margin.top + cellSpacing;\n this.updateCellVerticalPosition(cellWidget, isUpdateToTop, true);\n }\n location = location + rowWidget.height;\n }\n return location;\n };\n /**\n * Gets displacement.\n * @param cellWidget\n * @param isUpdateToTop\n */\n Layout.prototype.getDisplacement = function (cellWidget, isUpdateToTop) {\n //Gets the height of row\n var rowHeight = 0;\n var rowWidget = cellWidget.containerWidget;\n var padding = cellWidget.margin.top + cellWidget.margin.bottom;\n if (!isNullOrUndefined(cellWidget.cellFormat) && cellWidget.cellFormat.rowSpan > 1) {\n rowHeight = cellWidget.height;\n }\n else {\n rowHeight = ((!isNullOrUndefined(rowWidget) ? rowWidget.height : 0) - padding);\n }\n //Gets the height of content within the cell\n var cellContentHeight = this.getCellContentHeight(cellWidget);\n //Displacement field holds the value which has reduced from rowHeight and cellContentHeight\n var displacement = 0;\n if (rowHeight > cellContentHeight) {\n displacement = rowHeight - cellContentHeight;\n if (cellWidget.cellFormat.verticalAlignment === 'Center') {\n displacement = displacement / 2;\n }\n else if ((cellWidget.cellFormat.verticalAlignment === 'Top' || isUpdateToTop)) {\n displacement = 0;\n }\n }\n return displacement;\n };\n /**\n * Gets cell content height.\n * @param cellWidget\n */\n Layout.prototype.getCellContentHeight = function (cellWidget) {\n if (isNullOrUndefined(cellWidget.childWidgets)) {\n return 0;\n }\n var contentHeight = 0;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n contentHeight += cellWidget.childWidgets[i].height;\n }\n else {\n contentHeight += cellWidget.childWidgets[i].height;\n }\n }\n return contentHeight;\n };\n /**\n * Gets table left borders.\n * @param borders\n * @private\n */\n Layout.prototype.getTableLeftBorder = function (borders) {\n if (!isNullOrUndefined(borders.left)) {\n return borders.left;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Gets table right border.\n * @param borders\n * @private\n */\n Layout.prototype.getTableRightBorder = function (borders) {\n if (!isNullOrUndefined(borders.right)) {\n return borders.right;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Get table top border.\n * @param borders\n * @private\n */\n Layout.prototype.getTableTopBorder = function (borders) {\n if (!isNullOrUndefined(borders.top)) {\n return borders.top;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Gets table bottom border.\n * @param borders\n * @private\n */\n Layout.prototype.getTableBottomBorder = function (borders) {\n if (!isNullOrUndefined(borders.bottom)) {\n return borders.bottom;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Get diagonal cell up border.\n * @param tableCell\n * @private\n */\n Layout.prototype.getCellDiagonalUpBorder = function (tableCell) {\n var diagonalUpBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalUpBorder = cellBorder.diagonalUp;\n return diagonalUpBorder;\n };\n /**\n * Gets diagonal cell down border\n * @param tableCell\n * @private\n */\n Layout.prototype.getCellDiagonalDownBorder = function (tableCell) {\n var diagonalDownBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalDownBorder = cellBorder.diagonalDown;\n return diagonalDownBorder;\n };\n /**\n * Gets table width.\n * @param table\n * @private\n */\n Layout.prototype.getTableWidth = function (table) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n //#region shifting\n /**\n * @private\n */\n Layout.prototype.layoutNextItemsBlock = function (blockAdv, viewer) {\n var sectionIndex = blockAdv.bodyWidget.sectionIndex;\n var block = blockAdv;\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n if (isNullOrUndefined(nextBlock) || this.viewer.blockToShift === block) {\n this.viewer.blockToShift = undefined;\n }\n var updateNextBlockList = true;\n while (nextBlock instanceof BlockWidget && nextBlock.bodyWidget.sectionIndex === sectionIndex) {\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n // if (viewer.fieldEndParagraph === block) {\n // //Sets field end paragraph to undefined, inorder to hold reLayouting with this paragraph.\n // viewer.fieldEndParagraph = undefined;\n // }\n block = nextBlock;\n if (viewer.blockToShift === block) {\n viewer.blockToShift = undefined;\n }\n updateNextBlockList = false;\n var nextWidget = undefined;\n nextWidget = block.getSplitWidgets()[0];\n // tslint:disable-next-line:max-line-length\n if (viewer.fieldStacks.length === 0 && !isNullOrUndefined(nextWidget) && currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(currentWidget.y + currentWidget.height, 2))) {\n if (!isNullOrUndefined(viewer.blockToShift)) {\n viewer.blockToShift = block;\n break;\n }\n if (isNullOrUndefined(nextWidget.nextWidget)) {\n break;\n }\n }\n updateNextBlockList = true;\n if (viewer.owner.isShiftingEnabled && viewer.fieldStacks.length === 0) {\n viewer.blockToShift = block;\n break;\n }\n else if (isNullOrUndefined(this.viewer.owner.editorModule) || !this.viewer.owner.editorModule.isInsertingTOC) {\n block = block.combineWidget(this.viewer);\n var paragraph = void 0;\n if (currentWidget.containerWidget !== block.containerWidget) {\n if (!(currentWidget instanceof ParagraphWidget) ||\n (currentWidget instanceof ParagraphWidget) && !currentWidget.isEndsWithPageBreak) {\n // tslint:disable-next-line:max-line-length\n this.updateContainerWidget(block, currentWidget.containerWidget, currentWidget.indexInOwner + 1, false);\n }\n }\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n block.isGridUpdated = false;\n paragraph = this.viewer.selection.getFirstParagraphInFirstCell(block);\n }\n else {\n paragraph = block;\n }\n if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n }\n viewer.updateClientAreaForBlock(block, true);\n this.viewer.layout.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n splittedWidget = nextBlock.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (!viewer.owner.isShiftingEnabled || this.viewer.blockToShift !== block) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n };\n /**\n * @private\n */\n Layout.prototype.updateClientAreaForLine = function (paragraph, startLineWidget, elementIndex) {\n //Clears the line widget starting from current line.\n var top = this.viewer.selection.getTop(startLineWidget);\n var left = this.viewer.clientArea.x;\n this.viewer.cutFromTop(top);\n this.viewer.cutFromLeft(left);\n };\n /**\n * @private\n */\n Layout.prototype.getParentTable = function (block) {\n var widget = block;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof BlockContainer) {\n return widget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n };\n /**\n * @private\n */\n Layout.prototype.reLayoutParagraph = function (paragraphWidget, lineIndex, elementBoxIndex) {\n if (this.viewer.blockToShift === paragraphWidget) {\n this.layoutBodyWidgetCollection(paragraphWidget.index, paragraphWidget.containerWidget, paragraphWidget, false);\n }\n // let isElementMoved: boolean = elementBoxIndex > 0;\n if (paragraphWidget.isInsideTable) {\n this.reLayoutTable(paragraphWidget);\n }\n else {\n this.reLayoutLine(paragraphWidget, lineIndex);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget &&\n paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n };\n /**\n * @private\n */\n Layout.prototype.reLayoutTable = function (block) {\n //Get Top level owner of block\n var table = this.getParentTable(block);\n //Combine splitted table in to single table\n // this.combineTableWidgets(this.viewer, table, undefined);\n //Get Parent table\n var currentTable = table.combineWidget(this.viewer);\n currentTable.isGridUpdated = false;\n currentTable.buildTableColumns();\n currentTable.isGridUpdated = true;\n var bodyWidget = currentTable.containerWidget;\n if (this.viewer.owner.enableHeaderAndFooter || block.isInHeaderFooter) {\n bodyWidget.height -= currentTable.height;\n // tslint:disable-next-line:max-line-length\n this.viewer.updateHCFClientAreaWithTop(table.bodyWidget.sectionFormat, this.viewer.isBlockInHeader(table), bodyWidget.page);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n //Clear Hieght for all the content \n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n var block_1 = this.viewer.selection.getFirstParagraphInFirstCell(currentTable);\n this.viewer.owner.editorModule.updateWholeListItems(block_1);\n }\n this.viewer.updateClientAreaForBlock(currentTable, true);\n //Remove border width\n currentTable.x -= currentTable.leftBorderWidth;\n currentTable.y -= currentTable.topBorderWidth;\n //Update Client area for current position\n this.viewer.cutFromTop(currentTable.y);\n this.clearTableWidget(currentTable, true, true);\n this.layoutBlock(currentTable, 0, true);\n this.viewer.updateClientAreaForBlock(currentTable, false);\n this.layoutNextItemsBlock(currentTable, this.viewer);\n };\n /**\n * @private\n */\n Layout.prototype.clearTableWidget = function (table, clearPosition, clearHeight) {\n table.height = 0;\n if (clearPosition) {\n table.y = 0;\n table.x = 0;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n this.clearRowWidget(row, clearPosition, clearHeight);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearRowWidget = function (row, clearPosition, clearHeight) {\n row.height = 0;\n if (clearPosition) {\n row.y = 0;\n row.x = 0;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n this.clearCellWidget(cell, clearPosition, clearHeight);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearCellWidget = function (cell, clearPosition, clearHeight) {\n cell.height = 0;\n if (clearPosition) {\n cell.y = 0;\n cell.x = 0;\n }\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n if (clearHeight) {\n block.height = 0;\n }\n }\n else {\n this.clearTableWidget(block, clearPosition, clearHeight);\n }\n }\n };\n /**\n * @param blockIndex\n * @param bodyWidget\n * @param block\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.layoutBodyWidgetCollection = function (blockIndex, bodyWidget, block, shiftNextWidget) {\n if (!isNullOrUndefined(this.viewer.owner)\n && this.viewer.owner.isLayoutEnabled) {\n if (bodyWidget instanceof BlockContainer) {\n var curretBlock = this.checkAndGetBlock(bodyWidget, blockIndex);\n if (isNullOrUndefined(curretBlock)) {\n return;\n }\n if (bodyWidget instanceof HeaderFooterWidget) {\n // tslint:disable-next-line:max-line-length\n this.viewer.updateHCFClientAreaWithTop(bodyWidget.sectionFormat, bodyWidget.headerFooterType.indexOf('Header') !== -1, bodyWidget.page);\n curretBlock.containerWidget.height -= curretBlock.height;\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n if (blockIndex > 0) {\n var prevWidget = curretBlock.getSplitWidgets()[0].previousRenderedWidget;\n if (!(prevWidget instanceof ParagraphWidget) ||\n (prevWidget instanceof ParagraphWidget) && !prevWidget.isEndsWithPageBreak) {\n this.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n if (curretBlock.containerWidget !== prevWidget.containerWidget) {\n // tslint:disable-next-line:max-line-length\n this.updateContainerWidget(curretBlock, prevWidget.containerWidget, prevWidget.indexInOwner + 1, false);\n }\n }\n else if (prevWidget instanceof ParagraphWidget && prevWidget.isEndsWithPageBreak &&\n prevWidget.containerWidget === curretBlock.containerWidget) {\n this.moveBlocksToNextPage(prevWidget);\n }\n }\n var currentParagraph = void 0;\n curretBlock = curretBlock.combineWidget(this.viewer);\n if (curretBlock instanceof TableWidget) {\n this.clearTableWidget(curretBlock, true, true);\n curretBlock.isGridUpdated = false;\n currentParagraph = this.viewer.selection.getFirstParagraphInFirstCell(curretBlock);\n }\n else {\n currentParagraph = curretBlock;\n }\n if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(currentParagraph);\n }\n this.viewer.updateClientAreaForBlock(curretBlock, true);\n this.viewer.layout.layoutBlock(curretBlock, 0, true);\n this.viewer.updateClientAreaForBlock(curretBlock, false);\n if (shiftNextWidget) {\n this.shiftNextWidgets(curretBlock);\n }\n else {\n this.layoutNextItemsBlock(curretBlock, this.viewer);\n }\n }\n else if (bodyWidget instanceof TableCellWidget) {\n var table = this.viewer.layout.getParentTable(bodyWidget.ownerTable.getSplitWidgets()[0]);\n this.reLayoutTable(bodyWidget.ownerTable);\n this.layoutNextItemsBlock(table, this.viewer);\n }\n }\n };\n Layout.prototype.checkAndGetBlock = function (containerWidget, blockIndex) {\n var sectionIndex = containerWidget.index;\n while (containerWidget && containerWidget.index === sectionIndex) {\n if (containerWidget.childWidgets.length > 0 && containerWidget.firstChild.index <= blockIndex &&\n containerWidget.lastChild.index >= blockIndex) {\n for (var i = 0; i < containerWidget.childWidgets.length; i++) {\n var block = containerWidget.childWidgets[i];\n if (block.index === blockIndex) {\n return block;\n }\n }\n }\n if (containerWidget instanceof BodyWidget) {\n containerWidget = containerWidget.nextRenderedWidget;\n }\n else {\n break;\n }\n }\n return undefined;\n };\n //#endregion\n //#region Table\n /**\n * Layouts table.\n * @param table\n * @private\n */\n Layout.prototype.layoutTable = function (table, startIndex) {\n if (!table.isGridUpdated) {\n table.buildTableColumns();\n table.isGridUpdated = true;\n }\n var tableView = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tableView);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var isHeader = table.childWidgets[0].rowFormat.isHeader;\n if (table.childWidgets.length > 0) {\n table.header = isHeader;\n table.continueHeader = isHeader;\n table.headerHeight = 0;\n }\n var row = table.childWidgets[startIndex];\n while (row) {\n row = this.layoutRow(tableView, row);\n row = row.nextRow;\n }\n this.updateWidgetsToPage(tableView, [], table);\n return tableView[tableView.length - 1];\n };\n /**\n * Adds table widget.\n * @param area\n * @param table\n * @private\n */\n Layout.prototype.addTableWidget = function (area, table, create) {\n var tableWidget = table[table.length - 1];\n if (create) {\n tableWidget = this.createTableWidget(tableWidget);\n table.push(tableWidget);\n }\n tableWidget.width = area.width;\n tableWidget.x = area.x;\n tableWidget.y = area.y;\n //Update the table height of tableWidget when cell spacing has been defined. \n if (tableWidget.tableFormat.cellSpacing > 0) {\n tableWidget.height = tableWidget.height + HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n // tslint:disable-next-line:max-line-length\n tableWidget.leftBorderWidth = HelperMethods.convertPointToPixel(this.getTableLeftBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.rightBorderWidth = HelperMethods.convertPointToPixel(this.getTableRightBorder(tableWidget.tableFormat.borders).getLineWidth());\n // tslint:disable-next-line:max-line-length\n tableWidget.topBorderWidth = HelperMethods.convertPointToPixel(this.getTableTopBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(this.getTableBottomBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.x += tableWidget.leftBorderWidth;\n tableWidget.y += tableWidget.topBorderWidth;\n tableWidget.width -= tableWidget.leftBorderWidth;\n tableWidget.width -= tableWidget.rightBorderWidth;\n tableWidget.height += tableWidget.bottomBorderWidth;\n }\n return tableWidget;\n };\n /**\n * Updates widget to page.\n * @param table\n * @private\n */\n Layout.prototype.updateWidgetsToPage = function (tables, rows, table, endRowWidget) {\n var viewer = this.viewer;\n var tableWidget = tables[tables.length - 1];\n if (!table.isInsideTable) {\n this.updateHeightForTableWidget(tables, rows, tableWidget, endRowWidget);\n if (tableWidget.childWidgets.length > 0 && tableWidget.y !== tableWidget.childWidgets[0].y) {\n tableWidget.y = tableWidget.childWidgets[0].y;\n }\n // Need to update on this further\n //Adds the table widget to owner cell widget.\n // tslint:disable-next-line:max-line-length\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).childWidgets.push(tableWidget);\n // tableWidget.containerWidget = viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as BodyWidget;\n // tslint:disable-next-line:max-line-length\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height = (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height + tableWidget.height;\n }\n if (table.tableFormat.cellSpacing > 0) {\n // tslint:disable-next-line:max-line-length\n if (tableWidget.y + tableWidget.height + HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) > viewer.clientArea.bottom && viewer instanceof PageLayoutViewer) {\n //update the table height when split to next page. Which is equivalent Ms Word Behaviour. \n //In Ms Word if the Table Split to next page the bottom spacing of the table will be half of the current spacing.\n //And the Remaining space will be used in next page top of the table.\n tableWidget.height = tableWidget.height - HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) / 2;\n }\n //Update the current Y position of current clientactivearea.\n viewer.cutFromTop(tableWidget.y + tableWidget.height);\n }\n if (table.bodyWidget instanceof HeaderFooterWidget) {\n table.containerWidget.height += table.height;\n if (this.viewer.owner.enableHeaderAndFooter && table.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(table.bodyWidget, this.viewer);\n }\n }\n };\n /**\n * Updates height for table widget.\n * @param viewer\n * @param tableWidget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.updateHeightForTableWidget = function (tables, rows, tableWidget, endRowWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n if (rowWidget === endRowWidget) {\n break;\n }\n this.updateHeightForRowWidget(this.viewer, true, tables, rows, rowWidget, true, endRowWidget);\n }\n };\n //#endregion\n //#region Row\n /**\n * Layouts table row.\n * @param row\n * @private\n */\n Layout.prototype.layoutRow = function (tableWidget, row) {\n var viewer = this.viewer;\n var rowWidgets = [row];\n var widget = this.addTableRowWidget(viewer.clientActiveArea, rowWidgets);\n viewer.updateClientAreaForRow(row, true);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n this.layoutCell(cell, this.getMaxTopOrBottomCellMargin(row, 0) + row.topBorderWidth, this.getMaxTopOrBottomCellMargin(row, 1) + row.bottomBorderWidth, widget);\n }\n viewer.updateClientAreaForRow(row, false);\n var rows = [row];\n this.updateWidgetsToTable(tableWidget, rows, row);\n return rows[rows.length - 1];\n };\n /**\n * @param area\n * @param row\n */\n Layout.prototype.addTableRowWidget = function (area, row) {\n var rowWidget = row[row.length - 1];\n rowWidget.x = area.x + rowWidget.rowFormat.gridBeforeWidth;\n rowWidget.y = area.y;\n rowWidget.width = area.width;\n var borderWidth = 0;\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat)\n && rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n //Update the table height with the border width to layout the border when the cell spacing is defined..\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n if (!isNullOrUndefined(rowWidget.childWidgets[j].cellFormat)\n && !isNullOrUndefined(rowWidget.childWidgets[j].cellFormat.borders)) {\n // tslint:disable-next-line:max-line-length\n var width = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[j]).getLineWidth();\n if (width > borderWidth) {\n borderWidth = width;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n if (rowWidget.index > 0 && !isNullOrUndefined(rowWidget.previousWidget)) {\n var prevRow = rowWidget.previousWidget;\n borderWidth = 0;\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(prevRow.childWidgets[i].cellFormat) && !isNullOrUndefined(prevRow.childWidgets[i].cellFormat.borders)) {\n var value = TableCellWidget.getCellBottomBorder(prevRow.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n }\n if (!isNullOrUndefined(rowWidget.childWidgets)) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n var value = TableCellWidget.getCellTopBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n //Update the table height of tableWidget when cell spacing has been defined. \n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat) && rowWidget.ownerTable.tableFormat.cellSpacing <= 0 && rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n // Update the bottom width for last row .\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n var value = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n //tableRowWidget.ownerWidget = owner;\n return rowWidget;\n };\n /**\n * Gets maximum top or bottom cell margin.\n * @param row\n * @param topOrBottom\n */\n Layout.prototype.getMaxTopOrBottomCellMargin = function (row, topOrBottom) {\n if (isNullOrUndefined(row.childWidgets)) {\n return 0;\n }\n var value = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n if (row.childWidgets.length > 0) {\n var cellFormat = row.childWidgets[i].cellFormat;\n if (cellFormat.containsMargins()) {\n if (topOrBottom === 0 && !isNullOrUndefined(cellFormat.topMargin) &&\n HelperMethods.convertPointToPixel(cellFormat.topMargin) > value) {\n value = HelperMethods.convertPointToPixel(cellFormat.topMargin);\n }\n else if (topOrBottom === 1 && !isNullOrUndefined(cellFormat.bottomMargin) &&\n HelperMethods.convertPointToPixel(cellFormat.bottomMargin) > value) {\n value = HelperMethods.convertPointToPixel(cellFormat.bottomMargin);\n }\n }\n else {\n var tableFormat = row.childWidgets[i].ownerTable.tableFormat;\n if (topOrBottom === 0 && HelperMethods.convertPointToPixel(tableFormat.topMargin) > value) {\n value = HelperMethods.convertPointToPixel(tableFormat.topMargin);\n }\n else if (topOrBottom === 1 && HelperMethods.convertPointToPixel(tableFormat.bottomMargin) > value) {\n value = HelperMethods.convertPointToPixel(tableFormat.bottomMargin);\n }\n }\n }\n }\n return value;\n };\n //#endregion Row\n //#region cell\n /**\n * Layouts cell\n * @param cell\n * @param maxCellMarginTop\n * @param maxCellMarginBottom\n */\n Layout.prototype.layoutCell = function (cell, maxCellMarginTop, maxCellMarginBottom, owner) {\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n viewer.updateClientAreaForCell(cell, true);\n if (cell.childWidgets.length === 0) {\n var paragraphWidget = new ParagraphWidget();\n paragraphWidget.characterFormat = new WCharacterFormat();\n paragraphWidget.paragraphFormat = new WParagraphFormat();\n paragraphWidget.index = 0;\n var lineWidget = new LineWidget(undefined);\n paragraphWidget.childWidgets.push(lineWidget);\n cell.childWidgets.push(paragraphWidget);\n }\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n block.containerWidget = cell;\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n };\n //endregion cell\n //#region Shifting\n /**\n * @private\n */\n Layout.prototype.shiftLayoutedItems = function () {\n if (isNullOrUndefined(this.viewer.blockToShift) || isNullOrUndefined(this.viewer.blockToShift.containerWidget)) {\n this.viewer.blockToShift = undefined;\n return;\n }\n var block = this.viewer.blockToShift;\n var sectionIndex = block.bodyWidget.index;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n var updateNextBlockList = true;\n // If flow layout, then all sections are in single page. Hence need to update till last block of last section.\n // Todo: For page layout and section break continuous, need to handle the same.\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n while (nextBlock instanceof BlockWidget && nextBlock.bodyWidget.index === sectionIndex) {\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n block = nextBlock;\n updateNextBlockList = false;\n var nextWidget = undefined;\n blocks = block.getSplitWidgets();\n if (block instanceof ParagraphWidget) {\n nextWidget = blocks[0];\n }\n else {\n if (block instanceof TableWidget) {\n nextWidget = blocks[0];\n }\n }\n if (currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(this.viewer.clientActiveArea.y, 2)) &&\n isNullOrUndefined(nextWidget.nextWidget)) {\n break;\n }\n updateNextBlockList = true;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n splittedWidget = block.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n this.viewer.blockToShift = undefined;\n var viewer = this.viewer;\n // if (viewer instanceof PageLayoutViewer) {\n viewer.removeEmptyPages();\n this.updateFieldElements();\n viewer.updateScrollBars();\n // }\n };\n /**\n * @private\n */\n Layout.prototype.updateFieldElements = function () {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n var fieldBegin = this.viewer.fields[i];\n if (!isNullOrUndefined(this.viewer.selection)) {\n var fieldCode = this.viewer.selection.getFieldCode(fieldBegin);\n if (!isNullOrUndefined(fieldCode) && fieldCode.toLowerCase().match('numpages')) {\n var textElement = fieldBegin.fieldSeparator.nextNode;\n if (!isNullOrUndefined(textElement)) {\n textElement.text = this.viewer.pages.length.toString();\n var paragraph = fieldBegin.line.paragraph;\n if (!isNullOrUndefined(paragraph.bodyWidget) && !isNullOrUndefined(paragraph.bodyWidget.page)) {\n var lineIndex = paragraph.childWidgets.indexOf(fieldBegin.line);\n var elementIndex = fieldBegin.line.children.indexOf(textElement);\n this.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n }\n }\n }\n }\n };\n Layout.prototype.reLayoutOrShiftWidgets = function (blockAdv, viewer) {\n var reLayoutItems = false;\n var block = blockAdv;\n // if (block instanceof ParagraphWidget) {\n // reLayoutItems = viewer.renderedElements.get(block as ParagraphWidget).length === 0;\n // } else {\n // reLayoutItems = viewer.renderedElements.get(block as TableWidget).length === 0;\n // }\n // if (reLayoutItems) {\n // //Handle layouting the block.\n // viewer.updateClientAreaForBlock(block, true);\n // this.layoutMod.layoutBlock(block);\n // viewer.updateClientAreaForBlock(block, false);\n // } else {\n //Handled to check client area and shift layouted widget.\n this.shiftWidgetsBlock(block, viewer);\n //Updates the list value of the rendered paragraph.\n if (this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateRenderedListItems(block);\n }\n // }\n };\n Layout.prototype.shiftWidgetsBlock = function (block, viewer) {\n if (block instanceof ParagraphWidget) {\n this.shiftWidgetsForPara(block, viewer);\n }\n else if (block instanceof TableWidget) {\n this.shiftWidgetsForTable(block, viewer);\n }\n };\n Layout.prototype.shiftWidgetsForPara = function (paragraph, viewer) {\n var prevBodyObj = this.getBodyWidgetOfPreviousBlock(paragraph, 0);\n var prevBodyWidget = prevBodyObj.bodyWidget;\n var index = prevBodyObj.index;\n var prevWidget = undefined;\n for (var i = 0; i < paragraph.getSplitWidgets().length; i++) {\n var widget = paragraph.getSplitWidgets()[i];\n if (!isNullOrUndefined(prevWidget)) {\n var isPageBreak = prevWidget.lastChild ? prevWidget.lastChild.isEndsWithPageBreak : false;\n this.shiftToPreviousWidget(widget, viewer, prevWidget, isPageBreak);\n if ((isNullOrUndefined(widget.childWidgets) || widget.childWidgets.length === 0) && !isPageBreak) {\n i--;\n continue;\n }\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n if (isPageBreak) {\n viewer.updateClientAreaByWidget(widget);\n }\n }\n }\n if (this.isFitInClientArea(widget, viewer)) {\n //Check whether this widget is moved to previous container widget.\n prevWidget = widget;\n widget.y = viewer.clientActiveArea.y;\n viewer.cutFromTop(viewer.clientActiveArea.y + widget.height);\n //Moves the paragraph widget to previous body widget.\n if (!isNullOrUndefined(prevBodyWidget) && prevBodyWidget !== widget.containerWidget) {\n index++;\n if (!prevBodyWidget.lastChild.isEndsWithPageBreak) {\n this.updateContainerWidget(widget, prevBodyWidget, index, true);\n }\n }\n if (widget.isEndsWithPageBreak) {\n var nextBodyWidget = this.createOrGetNextBodyWidget(prevBodyWidget, this.viewer);\n nextBodyWidget = this.moveBlocksToNextPage(widget);\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n }\n }\n else {\n var previousBlock = widget.previousRenderedWidget;\n var isPageBreak = false;\n if (previousBlock instanceof ParagraphWidget && previousBlock.isEndsWithPageBreak) {\n isPageBreak = true;\n }\n var isSplittedToNewPage = this.splitWidget(widget, viewer, prevBodyWidget, index + 1, isPageBreak);\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n i--;\n }\n index = prevBodyWidget.childWidgets.indexOf(widget);\n if (isSplittedToNewPage) {\n prevBodyWidget = paragraph.getSplitWidgets()[i + 1].containerWidget;\n }\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.shiftTableWidget = function (table, viewer) {\n var tables = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tables);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var row = table.childWidgets[0];\n while (row) {\n row = this.shiftRowWidget(tables, row);\n row = row.nextRow;\n }\n this.updateWidgetsToPage(tables, [], table);\n return tables[tables.length - 1];\n };\n /**\n * @private\n */\n Layout.prototype.shiftRowWidget = function (tables, row) {\n var viewer = this.viewer;\n var rows = [row];\n var widget = this.addTableRowWidget(viewer.clientActiveArea, rows);\n viewer.updateClientAreaForRow(row, true);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n this.shiftCellWidget(cell, this.getMaxTopOrBottomCellMargin(row, 0) + row.topBorderWidth, this.getMaxTopOrBottomCellMargin(row, 1) + row.bottomBorderWidth);\n }\n viewer.updateClientAreaForRow(row, false);\n this.updateWidgetsToTable(tables, rows, row);\n return rows[rows.length - 1];\n };\n /**\n * @private\n */\n Layout.prototype.shiftCellWidget = function (cell, maxCellMarginTop, maxCellMarginBottom) {\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n viewer.updateClientAreaForCell(cell, true);\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n if (block instanceof ParagraphWidget) {\n this.shiftParagraphWidget(block);\n }\n else {\n this.shiftTableWidget(block, viewer);\n }\n viewer.updateClientAreaForBlock(block, false);\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n };\n /**\n * @private\n */\n Layout.prototype.shiftParagraphWidget = function (paragraph) {\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + paragraph.height);\n this.updateWidgetToPage(this.viewer, paragraph);\n };\n Layout.prototype.shiftWidgetsForTable = function (table, viewer) {\n var prevObj = this.getBodyWidgetOfPreviousBlock(table, 0);\n var prevBodyWidget = prevObj.bodyWidget;\n var index = prevObj.index;\n var isPageBreak = prevBodyWidget.lastChild.lastChild.isEndsWithPageBreak;\n if (prevBodyWidget !== table.containerWidget) {\n if (!isPageBreak) {\n this.updateContainerWidget(table, prevBodyWidget, index + 1, true);\n }\n else {\n viewer.updateClientArea(table.bodyWidget.sectionFormat, table.bodyWidget.page);\n }\n }\n if (table.isInHeaderFooter) {\n table.containerWidget.height -= table.height;\n }\n table.y = this.viewer.clientActiveArea.y;\n this.updateVerticalPositionToTop(table, true);\n var isPageLayout = viewer instanceof PageLayoutViewer;\n var combinedTable = table.combineWidget(this.viewer);\n this.viewer.layout.updateChildLocationForTable(combinedTable.y, combinedTable);\n this.clearTableWidget(combinedTable, true, false);\n this.shiftTableWidget(combinedTable, this.viewer);\n this.updateVerticalPositionToTop(table, false);\n };\n Layout.prototype.updateVerticalPositionToTop = function (table, isUpdateTop) {\n //Iterate the tableWidgets counts\n for (var i = 0; i < table.getSplitWidgets().length; i++) {\n var tablewidget = table.getSplitWidgets()[i];\n //Iterate the tableWidget child items\n for (var j = 0; j < tablewidget.childWidgets.length; j++) {\n var rowWidget = tablewidget.childWidgets[j];\n //Iterate the RowWidgets child items\n for (var k = 0; k < rowWidget.childWidgets.length; k++) {\n var cellWidget = rowWidget.childWidgets[k];\n //Iterate the RowWidgets child items\n this.viewer.layout.updateCellVerticalPosition(cellWidget, isUpdateTop, false);\n }\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitWidget = function (paragraphWidget, viewer, previousBodyWidget, index, isPageBreak) {\n var firstLine = paragraphWidget.childWidgets[0];\n var maxElementHeight = this.getMaxElementHeight(firstLine, viewer);\n var paragraphView = paragraphWidget.getSplitWidgets();\n var nextBodyWidget = paragraphWidget.containerWidget;\n if (viewer.clientActiveArea.height >= maxElementHeight && !isPageBreak) {\n var splittedWidget = undefined;\n var widgetIndex = paragraphView.indexOf(paragraphWidget);\n if (widgetIndex < (paragraphView.length - 1)) {\n splittedWidget = paragraphView[widgetIndex + 1];\n nextBodyWidget = splittedWidget.containerWidget;\n }\n else {\n splittedWidget = new ParagraphWidget();\n splittedWidget.index = paragraphWidget.index;\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.width = paragraphWidget.width;\n splittedWidget.x = paragraphWidget.x;\n splittedWidget.y = paragraphWidget.y;\n paragraphView.push(splittedWidget);\n }\n if (previousBodyWidget !== paragraphWidget.containerWidget) {\n this.updateContainerWidget(paragraphWidget, previousBodyWidget, index, true);\n }\n for (var i = paragraphWidget.childWidgets.length - 1; i > 0; i--) {\n if (this.isFitInClientArea(paragraphWidget, viewer)) {\n break;\n }\n else {\n var line = paragraphWidget.childWidgets[i];\n //Moves the line widget to next widget.\n this.updateParagraphWidgetInternal(line, splittedWidget, 0);\n }\n }\n if (isNullOrUndefined(splittedWidget.containerWidget) && splittedWidget.childWidgets.length > 0) {\n var y = viewer.clientActiveArea.y;\n // tslint:disable-next-line:max-line-length\n var clientArea = new Rect(viewer.clientArea.x, viewer.clientArea.y, viewer.clientArea.width, viewer.clientArea.height);\n var activeArea = new Rect(viewer.clientActiveArea.x, viewer.clientActiveArea.y, viewer.clientActiveArea.width, viewer.clientActiveArea.height);\n //Checks whether next node exists, else adds new page.\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget);\n // nextBodyWidget = this.createOrGetNextBodyWidget(previousBodyWidget, viewer);\n nextBodyWidget.childWidgets.splice(0, 0, splittedWidget);\n nextBodyWidget.height += splittedWidget.height;\n splittedWidget.containerWidget = nextBodyWidget;\n if (nextBodyWidget.childWidgets.length === 1 && nextBodyWidget.firstChild instanceof ParagraphWidget &&\n nextBodyWidget.firstChild.equals(paragraphWidget)) {\n paragraphWidget.x = paragraphWidget.x;\n paragraphWidget.y = y;\n return true;\n }\n else {\n //Resetting Client area\n viewer.clientArea = clientArea;\n viewer.clientActiveArea = activeArea;\n }\n }\n }\n else {\n nextBodyWidget = this.createOrGetNextBodyWidget(previousBodyWidget, this.viewer);\n if (paragraphWidget.containerWidget !== nextBodyWidget) {\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget);\n this.updateContainerWidget(paragraphWidget, nextBodyWidget, 0, true);\n }\n }\n if (previousBodyWidget === paragraphWidget.containerWidget) {\n paragraphWidget.y = viewer.clientActiveArea.y;\n viewer.cutFromTop(viewer.clientActiveArea.y + paragraphWidget.height);\n }\n else {\n //Updates client area based on next body widget.\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n }\n return false;\n };\n Layout.prototype.getMaxElementHeight = function (lineWidget, viewer) {\n var height = 0;\n // tslint:disable-next-line:max-line-length\n if (lineWidget.children.length === 0 || ((lineWidget.children.length === 1 && lineWidget.children[0] instanceof ListTextElementBox) || (lineWidget.children.length === 2 && lineWidget.children[0] instanceof ListTextElementBox && lineWidget.children[1] instanceof ListTextElementBox))) {\n var topMargin = 0;\n var bottomMargin = 0;\n height = viewer.selection.getParagraphMarkSize(lineWidget.paragraph, topMargin, bottomMargin).height;\n height += topMargin;\n if (lineWidget.children.length > 0) {\n var element = lineWidget.children[0];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n else {\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n return height;\n };\n Layout.prototype.createOrGetNextBodyWidget = function (bodyWidget, viewer) {\n var nextBodyWidget = undefined;\n var pageIndex = 0;\n pageIndex = viewer.pages.indexOf(bodyWidget.page);\n var page = undefined;\n var index = undefined;\n index = bodyWidget.index;\n if (pageIndex === viewer.pages.length - 1\n || viewer.pages[pageIndex + 1].sectionIndex !== index) {\n var currentWidget = new BodyWidget();\n currentWidget.sectionFormat = bodyWidget.sectionFormat;\n currentWidget.index = bodyWidget.index;\n page = viewer.createNewPage(currentWidget);\n if (viewer.pages[pageIndex + 1].sectionIndex !== index) {\n viewer.insertPage(pageIndex + 1, page);\n }\n nextBodyWidget = page.bodyWidgets[0];\n }\n else {\n page = viewer.pages[pageIndex + 1];\n nextBodyWidget = page.bodyWidgets[0];\n }\n return nextBodyWidget;\n };\n Layout.prototype.isFitInClientArea = function (paragraphWidget, viewer) {\n var lastLine = paragraphWidget.childWidgets[paragraphWidget.childWidgets.length - 1];\n var height = paragraphWidget.height;\n var maxElementHeight = this.getMaxElementHeight(lastLine, viewer);\n if (lastLine.height > maxElementHeight) {\n height -= lastLine.height - maxElementHeight;\n }\n return viewer.clientActiveArea.height >= height;\n };\n // tslint:disable-next-line:max-line-length\n Layout.prototype.shiftToPreviousWidget = function (paragraphWidget, viewer, previousWidget, isPageBreak) {\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var line = paragraphWidget.childWidgets[i];\n var maxElementHeight = this.getMaxElementHeight(line, viewer);\n if (viewer.clientActiveArea.height >= maxElementHeight && !isPageBreak) {\n //Moves the line widget to previous widget.\n this.updateParagraphWidgetInternal(line, previousWidget, previousWidget.childWidgets.length);\n i--;\n viewer.cutFromTop(viewer.clientActiveArea.y + line.height);\n if (isNullOrUndefined(paragraphWidget.childWidgets)) {\n break;\n }\n }\n else {\n var bodyWidget = previousWidget.containerWidget;\n var nextBodyWidget = this.createOrGetNextBodyWidget(bodyWidget, viewer);\n if (paragraphWidget.containerWidget !== nextBodyWidget) {\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget);\n }\n if (bodyWidget !== nextBodyWidget) {\n this.updateContainerWidget(paragraphWidget, nextBodyWidget, 0, true);\n }\n //Updates client area based on next page.\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n break;\n }\n }\n };\n Layout.prototype.updateParagraphWidgetInternal = function (lineWidget, newParagraphWidget, index) {\n if (!isNullOrUndefined(lineWidget.paragraph)) {\n lineWidget.paragraph.childWidgets.splice(lineWidget.paragraph.childWidgets.indexOf(lineWidget), 1);\n lineWidget.paragraph.height -= lineWidget.height;\n if (!isNullOrUndefined(lineWidget.paragraph.containerWidget)) {\n lineWidget.paragraph.containerWidget.height -= lineWidget.height;\n }\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(lineWidget.paragraph.childWidgets) || lineWidget.paragraph.childWidgets.length === 0) {\n lineWidget.paragraph.destroyInternal(this.viewer);\n }\n }\n newParagraphWidget.childWidgets.splice(index, 0, lineWidget);\n lineWidget.paragraph = newParagraphWidget;\n newParagraphWidget.height += lineWidget.height;\n if (!isNullOrUndefined(newParagraphWidget.containerWidget)) {\n newParagraphWidget.containerWidget.height += lineWidget.height;\n }\n };\n Layout.prototype.shiftNextWidgets = function (blockAdv) {\n var block = blockAdv;\n while (block.nextWidget instanceof BlockWidget) {\n block = block.nextWidget;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n }\n };\n /**\n * @private\n */\n Layout.prototype.updateContainerWidget = function (widget, bodyWidget, index, destroyAndScroll) {\n if (!isNullOrUndefined(widget.containerWidget)) {\n widget.containerWidget.childWidgets.splice(widget.containerWidget.childWidgets.indexOf(widget), 1);\n widget.containerWidget.height -= bodyWidget.height;\n if ((isNullOrUndefined(widget.containerWidget.childWidgets) || widget.containerWidget.childWidgets.length === 0)\n && widget.containerWidget instanceof BodyWidget && widget.containerWidget !== bodyWidget && destroyAndScroll) {\n var page = widget.containerWidget.page;\n if (this.viewer.pages[this.viewer.pages.length - 1] === page &&\n this.viewer.visiblePages.indexOf(page) !== -1) {\n this.viewer.scrollToBottom();\n }\n if (isNullOrUndefined(page.nextPage) || page.nextPage.bodyWidgets[0].index !== widget.containerWidget.index) {\n widget.containerWidget.destroyInternal(this.viewer);\n }\n }\n }\n bodyWidget.childWidgets.splice(index, 0, widget);\n bodyWidget.height += bodyWidget.height;\n widget.containerWidget = bodyWidget;\n };\n Layout.prototype.getBodyWidgetOfPreviousBlock = function (block, index) {\n index = 0;\n var prevBodyWidget = undefined;\n var previousBlock = block.previousRenderedWidget;\n prevBodyWidget = (previousBlock && previousBlock.containerWidget.equals(block.containerWidget)) ?\n previousBlock.containerWidget : block.containerWidget;\n index = previousBlock && previousBlock.containerWidget.equals(block.containerWidget) ?\n prevBodyWidget.childWidgets.indexOf(previousBlock) : block.containerWidget.childWidgets.indexOf(block);\n return { bodyWidget: prevBodyWidget, index: index };\n };\n /**\n * @private\n */\n Layout.prototype.moveBlocksToNextPage = function (block) {\n var body = block.bodyWidget;\n var page = body.page;\n var pageIndex = page.index + 1;\n var nextPage = undefined;\n var nextBody = undefined;\n var insertPage = false;\n if (this.viewer.pages.length > pageIndex) {\n nextPage = this.viewer.pages[pageIndex];\n if (nextPage.bodyWidgets.length === 0 || !body.equals(nextPage.bodyWidgets[0])) {\n nextPage = undefined;\n insertPage = true;\n }\n else {\n nextBody = nextPage.bodyWidgets[0];\n this.viewer.updateClientArea(nextBody.sectionFormat, nextBody.page);\n }\n }\n if (isNullOrUndefined(nextPage)) {\n nextBody = this.createSplitBody(body);\n nextPage = this.viewer.createNewPage(nextBody, pageIndex);\n if (insertPage) {\n this.viewer.insertPage(pageIndex, nextPage);\n }\n }\n //tslint:disable :no-constant-condition\n do {\n var lastBlock = body.lastChild;\n if (block === lastBlock) {\n break;\n }\n body.childWidgets.pop();\n nextBody.childWidgets.splice(0, 0, lastBlock);\n lastBlock.containerWidget = nextBody;\n nextBody.height += lastBlock.height;\n } while (true);\n return nextBody;\n };\n Layout.prototype.createSplitBody = function (body) {\n var newBody = this.addBodyWidget(this.viewer.clientActiveArea);\n newBody.sectionFormat = body.sectionFormat;\n newBody.index = body.index;\n return newBody;\n };\n //endregion\n //#region Relayout Parargaph \n /**\n * Relayout Paragraph from specified line widget\n * @param paragraph Paragraph to reLayout\n * @param lineIndex start line index to reLayout\n * @private\n */\n Layout.prototype.reLayoutLine = function (paragraph, lineIndex) {\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n }\n var lineWidget;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n lineWidget = paragraph.getSplitWidgets()[0].firstChild;\n }\n else {\n lineWidget = paragraph.childWidgets[lineIndex];\n }\n var lineToLayout = lineWidget.previousLine;\n if (isNullOrUndefined(lineToLayout)) {\n lineToLayout = lineWidget;\n }\n var currentParagraph = lineToLayout.paragraph;\n var bodyWidget = paragraph.containerWidget;\n bodyWidget.height -= paragraph.height;\n if (this.viewer.owner.enableHeaderAndFooter || paragraph.isInHeaderFooter) {\n // tslint:disable-next-line:max-line-length\n this.viewer.updateHCFClientAreaWithTop(paragraph.bodyWidget.sectionFormat, this.viewer.isBlockInHeader(paragraph), bodyWidget.page);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n this.viewer.updateClientAreaForBlock(paragraph, true);\n if (lineToLayout.paragraph.isEmpty()) {\n this.viewer.cutFromTop(paragraph.y);\n this.layoutParagraph(paragraph, 0);\n }\n else {\n this.updateClientAreaForLine(lineToLayout.paragraph, lineToLayout, 0);\n this.layoutListItems(lineToLayout.paragraph);\n if (lineToLayout.isFirstLine() && !isNullOrUndefined(paragraph.paragraphFormat)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n do {\n lineToLayout = this.layoutLine(lineToLayout, 0);\n paragraph = lineToLayout.paragraph;\n lineToLayout = lineToLayout.nextLine;\n } while (lineToLayout);\n this.updateWidgetToPage(this.viewer, paragraph);\n this.viewer.updateClientAreaForBlock(paragraph, false);\n }\n this.layoutNextItemsBlock(paragraph, this.viewer);\n };\n return Layout;\n}());\nexport { Layout };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Rect, ImageElementBox, ParagraphWidget, ListTextElementBox, TableRowWidget, TableWidget, TableCellWidget, FieldElementBox, TabElementBox } from './page';\nimport { Layout } from './layout';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar Renderer = /** @class */ (function () {\n function Renderer(viewer) {\n this.isPrinting = false;\n this.pageLeft = 0;\n this.pageTop = 0;\n this.isFieldCode = false;\n this.viewer = viewer;\n }\n Object.defineProperty(Renderer.prototype, \"pageCanvas\", {\n /**\n * Gets page canvas.\n * @private\n */\n get: function () {\n if (this.isPrinting) {\n if (isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn = document.createElement('canvas');\n this.pageCanvasIn.getContext('2d').save();\n }\n return this.pageCanvasIn;\n }\n return isNullOrUndefined(this.viewer) ? undefined : this.viewer.containerCanvas;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionCanvas\", {\n /**\n * Gets selection canvas.\n */\n get: function () {\n return isNullOrUndefined(this.viewer) ? undefined : this.viewer.selectionCanvas;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"pageContext\", {\n /**\n * Gets page context.\n */\n get: function () {\n return this.pageCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionContext\", {\n /**\n * Gets selection context.\n */\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the color.\n */\n Renderer.prototype.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n if (color.length > 7) {\n return color.substr(0, 7);\n }\n }\n }\n return color;\n };\n /**\n * Renders widgets.\n * @param {Page} page\n * @param {number} left\n * @param {number} top\n * @param {number} width\n * @param {number} height\n * @private\n */\n Renderer.prototype.renderWidgets = function (page, left, top, width, height) {\n if (isNullOrUndefined(this.pageCanvas) || isNullOrUndefined(page)) {\n return;\n }\n this.pageContext.fillStyle = this.getColor(this.viewer.backgroundColor);\n this.pageContext.beginPath();\n this.pageContext.fillRect(left, top, width, height);\n this.pageContext.closePath();\n this.pageContext.strokeStyle = this.viewer.owner.pageOutline;\n this.pageContext.strokeRect(left, top, width, height);\n this.pageLeft = left;\n this.pageTop = top;\n if (this.isPrinting) {\n this.setPageSize(page);\n }\n else {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(left, top, width, height);\n this.pageContext.clip();\n }\n if (page.headerWidget) {\n this.renderHFWidgets(page, page.headerWidget, width, true);\n }\n if (page.footerWidget) {\n this.renderHFWidgets(page, page.footerWidget, width, false);\n }\n for (var i = 0; i < page.bodyWidgets.length; i++) {\n this.render(page, page.bodyWidgets[i]);\n }\n if (this.viewer.owner.enableHeaderAndFooter && !this.isPrinting) {\n this.renderHeaderSeparator(page, this.pageLeft, this.pageTop, page.headerWidget);\n }\n this.pageLeft = 0;\n this.pageTop = 0;\n this.pageContext.restore();\n };\n /**\n * Sets page size.\n * @param {Page} page\n */\n Renderer.prototype.setPageSize = function (page) {\n this.pageContext.clearRect(0, 0, this.pageCanvas.width, this.pageCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n this.pageContext.restore();\n this.selectionContext.restore();\n var width = page.boundingRectangle.width;\n var height = page.boundingRectangle.height;\n var dpr = Math.max(1, window.devicePixelRatio || 1);\n if (this.pageCanvas.width !== width * dpr || this.pageCanvas.height !== height * dpr) {\n this.pageCanvas.height = height * dpr;\n this.pageCanvas.width = width * dpr;\n this.pageCanvas.style.height = height + 'px';\n this.pageCanvas.style.width = width + 'px';\n this.pageContext.globalAlpha = 1;\n this.pageContext.scale(dpr, dpr);\n }\n };\n /**\n * Renders header footer widget.\n * @param {Page} page\n * @param {HeaderFooterWidget} headFootWidget\n */\n Renderer.prototype.renderHFWidgets = function (page, widget, width, isHeader) {\n this.pageContext.globalAlpha = this.viewer.owner.enableHeaderAndFooter ? 1 : 0.65;\n var cliped = false;\n if (isHeader) {\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var widgetHeight = Math.max((widget.y + widget.height), topMargin);\n var headerFooterHeight = page.boundingRectangle.height / 100 * 40;\n if (widgetHeight > headerFooterHeight) {\n cliped = true;\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.pageLeft, this.pageTop, width, this.getScaledValue(headerFooterHeight));\n this.pageContext.clip();\n }\n }\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var block = widget.childWidgets[i];\n this.renderWidget(page, block);\n }\n if (cliped) {\n this.pageContext.restore();\n }\n this.pageContext.globalAlpha = this.viewer.owner.enableHeaderAndFooter ? 0.65 : 1;\n };\n Renderer.prototype.renderHeaderSeparator = function (page, left, top, widget) {\n //Header Widget\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var y = this.getScaledValue(Math.max((widget.y + widget.height), topMargin));\n var pageWidth = this.getScaledValue(page.boundingRectangle.width);\n var ctx = this.pageContext;\n ctx.save();\n ctx.globalAlpha = 0.65;\n var headerFooterHeight = (this.getScaledValue(page.boundingRectangle.height) / 100) * 40;\n //Maximum header height limit \n y = Math.min(y, headerFooterHeight);\n //Dash line Separator\n this.renderDashLine(ctx, left, top + y, pageWidth);\n var type = this.getHeaderFooterType(page, true);\n ctx.font = '9pt Arial';\n var width = ctx.measureText(type).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + y, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type, left + 10, y + top + 15);\n if (page.footerWidget) {\n //Footer Widget\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n // tslint:disable-next-line:max-line-length\n var footerHeight = this.getScaledValue(page.boundingRectangle.height) -\n this.getScaledValue(Math.max(page.footerWidget.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidget.sectionFormat.bottomMargin)));\n //Maximum footer height limit \n footerHeight = Math.max((this.getScaledValue(page.boundingRectangle.height) - headerFooterHeight), footerHeight);\n this.renderDashLine(ctx, left, top + footerHeight, pageWidth);\n type = this.getHeaderFooterType(page, false);\n width = ctx.measureText(type).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + footerHeight - 20, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type, left + 10, top + footerHeight - 5);\n ctx.restore();\n }\n };\n Renderer.prototype.getHeaderFooterType = function (page, isHeader) {\n var type;\n type = isHeader ? 'Header' : 'Footer';\n if (page.bodyWidgets[0].sectionFormat.differentFirstPage && this.viewer.pages.indexOf(page) === 0) {\n type = isHeader ? 'First Page Header' : 'First Page Footer';\n }\n else if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if ((this.viewer.pages.indexOf(page) + 1) % 2 === 0) {\n type = isHeader ? 'Even Page Header' : 'Even Page Footer';\n }\n else {\n type = isHeader ? 'Odd Page Header' : 'Odd Page Footer';\n }\n }\n return type;\n };\n Renderer.prototype.renderDashLine = function (ctx, x, y, width) {\n ctx.beginPath();\n ctx.strokeStyle = '#000000';\n ctx.lineWidth = 1;\n ctx.setLineDash([6, 4]);\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n ctx.setLineDash([]);\n ctx.closePath();\n };\n Renderer.prototype.renderHeaderFooterMark = function (ctx, x, y, w, h) {\n ctx.beginPath();\n ctx.fillStyle = 'lightgray';\n ctx.fillRect(x, y, w, h);\n ctx.strokeStyle = 'black';\n ctx.strokeRect(x, y, w, h);\n ctx.closePath();\n };\n Renderer.prototype.renderHeaderFooterMarkText = function (ctx, content, x, y) {\n ctx.beginPath();\n ctx.fillStyle = '#000000';\n ctx.textBaseline = 'alphabetic';\n ctx.fillText(content, x, y);\n ctx.closePath();\n };\n /**\n * Renders body widget.\n * @param {Page} page\n * @param {BodyWidget} bodyWidget\n */\n Renderer.prototype.render = function (page, bodyWidget) {\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var widget = bodyWidget.childWidgets[i];\n if (i === 0 && bodyWidget.childWidgets[0] instanceof TableWidget && page.repeatHeaderRowTableWidget) {\n // tslint:disable-next-line:max-line-length\n this.renderHeader(page, widget, this.viewer.layout.getHeader(bodyWidget.childWidgets[0]));\n }\n this.renderWidget(page, widget);\n }\n };\n /**\n * Renders block widget.\n * @param {Page} page\n * @param {Widget} widget\n */\n Renderer.prototype.renderWidget = function (page, widget) {\n if (widget instanceof ParagraphWidget) {\n this.renderParagraphWidget(page, widget);\n }\n else {\n this.renderTableWidget(page, widget);\n }\n };\n /**\n * Renders header.\n * @param {Page} page\n * @param {TableWidget} widget\n * @param {WRow} header\n * @private\n */\n Renderer.prototype.renderHeader = function (page, widget, header) {\n if (isNullOrUndefined(header)) {\n return;\n }\n var top = page.viewer.clientArea.y;\n for (var i = 0; i <= header.rowIndex; i++) {\n if (header.ownerTable.getSplitWidgets()[0].childWidgets.length === 0) {\n return;\n }\n var row = header.ownerTable.getSplitWidgets()[0].childWidgets[0];\n var headerWidget = row.clone();\n headerWidget.containerWidget = row.containerWidget;\n // tslint:disable-next-line:max-line-length\n page.viewer.updateClientAreaLocation(headerWidget, new Rect(page.viewer.clientArea.x, top, headerWidget.width, headerWidget.height));\n page.viewer.layout.updateChildLocationForRow(top, headerWidget);\n var cell = undefined;\n //Renders table cell outline rectangle - Border and background color.\n for (var j = 0; j < headerWidget.childWidgets.length; j++) {\n cell = headerWidget.childWidgets[j];\n this.renderTableCellWidget(page, cell);\n }\n top += headerWidget.height;\n }\n if (widget.y !== top) {\n //this.Location.Y = top;\n page.viewer.layout.updateChildLocationForTable(top, widget);\n }\n };\n /**\n * Renders paragraph widget.\n * @param {Page} page\n * @param {ParagraphWidget} paraWidget\n */\n Renderer.prototype.renderParagraphWidget = function (page, paraWidget) {\n var top = paraWidget.y;\n var left = paraWidget.x;\n for (var i = 0; i < paraWidget.childWidgets.length; i++) {\n var widget = paraWidget.childWidgets[i];\n this.renderLine(widget, page, left, top);\n top += widget.height;\n }\n };\n /**\n * Renders table widget.\n * @param {Page} page\n * @param {TableWidget} tableWidget\n */\n Renderer.prototype.renderTableWidget = function (page, tableWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var widget = tableWidget.childWidgets[i];\n this.renderTableRowWidget(page, widget);\n if (tableWidget.tableFormat.cellSpacing > 0) {\n this.renderTableOutline(tableWidget);\n }\n }\n };\n /**\n * Renders table row widget.\n * @param {Page} page\n * @param {Widget} rowWidget\n */\n Renderer.prototype.renderTableRowWidget = function (page, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n this.renderTableCellWidget(page, widget);\n }\n };\n /**\n * Renders table cell widget.\n * @param {Page} page\n * @param {TableCellWidget} cellWidget\n */\n Renderer.prototype.renderTableCellWidget = function (page, cellWidget) {\n if (!this.isPrinting) {\n if (this.getScaledValue(cellWidget.y, 2) + cellWidget.height * this.viewer.zoomFactor < 0 ||\n this.getScaledValue(cellWidget.y, 2) > this.viewer.visibleBounds.height) {\n return;\n }\n }\n var widgetHeight = 0;\n if (!this.isPrinting && page.viewer.owner.selection && page.viewer.owner.selection.selectedWidgets.length > 0) {\n page.viewer.owner.selection.addSelectionHighlightTable(this.selectionContext, cellWidget);\n }\n this.renderTableCellOutline(page.viewer, cellWidget);\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n var widget = cellWidget.childWidgets[i];\n var width = cellWidget.width + cellWidget.margin.left - cellWidget.leftBorderWidth;\n this.clipRect(cellWidget.x, cellWidget.y, this.getScaledValue(width), this.getScaledValue(cellWidget.height));\n this.renderWidget(page, widget);\n this.pageContext.restore();\n }\n };\n /**\n * Renders line widget.\n * @param {LineWidget} lineWidget\n * @param {Page} page\n * @param {number} left\n * @param {number} top\n */\n Renderer.prototype.renderLine = function (lineWidget, page, left, top) {\n if (!this.isPrinting && page.viewer.owner.selection && page.viewer.owner.selection.selectedWidgets.length > 0) {\n page.viewer.owner.selection.addSelectionHighlight(this.selectionContext, lineWidget, top);\n }\n if (lineWidget.isFirstLine()) {\n left += HelperMethods.convertPointToPixel(lineWidget.paragraph.paragraphFormat.firstLineIndent);\n }\n if (this.viewer.owner.searchModule) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(page.viewer.owner.searchModule.searchHighlighters) && page.viewer.owner.searchModule.searchHighlighters.containsKey(lineWidget)) {\n var widgetInfo = page.viewer.owner.searchModule.searchHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = '#ffe97f';\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(lineWidget.height));\n }\n }\n }\n for (var i = 0; i < lineWidget.children.length; i++) {\n var elementBox = lineWidget.children[i];\n if (elementBox instanceof FieldElementBox || this.isFieldCode ||\n (elementBox.width === 0 && elementBox.height === 0)) {\n if (this.isFieldCode) {\n elementBox.width = 0;\n }\n left += elementBox.width + elementBox.margin.left;\n this.toSkipFieldCode(elementBox);\n continue;\n }\n var underlineY = this.getUnderlineYPosition(lineWidget);\n if (!this.isPrinting) {\n if (this.getScaledValue(top + elementBox.margin.top, 2) + elementBox.height * this.viewer.zoomFactor < 0 ||\n this.getScaledValue(top + elementBox.margin.top, 2) > this.viewer.visibleBounds.height) {\n left += elementBox.width + elementBox.margin.left;\n continue;\n }\n }\n if (elementBox instanceof ListTextElementBox) {\n this.renderListTextElementBox(elementBox, left, top, underlineY);\n }\n else if (elementBox instanceof ImageElementBox) {\n this.renderImageElementBox(elementBox, left, top, underlineY);\n }\n else {\n this.renderTextElementBox(elementBox, left, top, underlineY);\n }\n left += elementBox.width + elementBox.margin.left;\n }\n };\n Renderer.prototype.toSkipFieldCode = function (element) {\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n if ((!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n this.isFieldCode = true;\n }\n }\n else if (element.fieldType === 2 || element.fieldType === 1) {\n this.isFieldCode = false;\n }\n }\n };\n /**\n * Gets underline y position.\n * @param {LineWidget} lineWidget\n */\n Renderer.prototype.getUnderlineYPosition = function (lineWidget) {\n var height = 0;\n var lineHeight = 0;\n for (var i = 0; i < lineWidget.children.length; i++) {\n if (lineWidget.children[i] instanceof FieldElementBox ||\n (lineWidget.children[i].width === 0 && lineWidget.children[i].height === 0)) {\n continue;\n }\n if (height < lineWidget.children[i].height + lineWidget.children[i].margin.top) {\n height = lineWidget.children[i].margin.top + lineWidget.children[i].height;\n lineHeight = lineWidget.children[i].height / 20;\n }\n }\n return height - 2 * lineHeight;\n };\n /**\n * Renders list element box\n * @param {ListTextElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n */\n Renderer.prototype.renderListTextElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var format = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = elementBox.line.paragraph.characterFormat;\n var color = format.fontColor === '#000000' ? breakCharacterFormat.fontColor : format.fontColor;\n this.pageContext.textBaseline = 'top';\n var bold = '';\n var italic = '';\n var fontFamily = format.fontFamily === 'Verdana' ? breakCharacterFormat.fontFamily : format.fontFamily;\n var fontSize = format.fontSize === 11 ? breakCharacterFormat.fontSize : format.fontSize;\n // tslint:disable-next-line:max-line-length\n var baselineAlignment = format.baselineAlignment === 'Normal' ? breakCharacterFormat.baselineAlignment : format.baselineAlignment;\n bold = format.bold ? 'bold' : breakCharacterFormat.bold ? 'bold' : '';\n italic = format.italic ? 'italic' : breakCharacterFormat.italic ? 'italic' : '';\n fontSize = fontSize === 0 ? 0.5 : fontSize / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var strikethrough = format.strikethrough === 'None' ? breakCharacterFormat.strikethrough : format.strikethrough;\n var highlightColor = format.highlightColor === 'NoColor' ? breakCharacterFormat.highlightColor :\n format.highlightColor;\n if (highlightColor !== 'NoColor') {\n if (highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(highlightColor);\n }\n else {\n this.pageContext.fillStyle = this.getColor(highlightColor);\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize * this.viewer.zoomFactor + 'pt' + ' ' + fontFamily;\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n this.pageContext.fillStyle = this.getColor(color);\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillText(elementBox.text, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width));\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline)) {\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, baselineAlignment);\n }\n if (strikethrough !== 'None') {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, baselineAlignment);\n }\n };\n /**\n * Renders text element box.\n * @param {TextElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderTextElementBox = function (elementBox, left, top, underlineY) {\n var isHeightType = false;\n var containerWidget = elementBox.line.paragraph.containerWidget;\n if (containerWidget instanceof TableCellWidget) {\n isHeightType = (containerWidget.ownerRow.rowFormat.heightType === 'Exactly');\n }\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n if (isHeightType) {\n // tslint:disable-next-line:max-line-length\n this.clipRect(containerWidget.x, containerWidget.y, this.getScaledValue(containerWidget.width), this.getScaledValue(containerWidget.height));\n }\n var format = elementBox.characterFormat;\n if (format.highlightColor !== 'NoColor') {\n if (format.highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(format.highlightColor);\n }\n else {\n this.pageContext.fillStyle = this.getColor(format.highlightColor);\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n var color = format.fontColor;\n this.pageContext.textBaseline = 'top';\n var bold = '';\n var italic = '';\n var fontSize = 11;\n bold = format.bold ? 'bold' : '';\n italic = format.italic ? 'italic' : '';\n fontSize = format.fontSize === 0 ? 0.5 : format.fontSize / (format.baselineAlignment === 'Normal' ? 1 : 1.5);\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize * this.viewer.zoomFactor + 'pt' + ' ' + format.fontFamily;\n if (format.baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n this.pageContext.fillStyle = this.getColor(color);\n var scaledWidth = this.getScaledValue(elementBox.width);\n var text = elementBox.text;\n // tslint:disable-next-line:max-line-length\n if (elementBox instanceof TabElementBox) {\n var tabElement = elementBox;\n if (tabElement.tabText === '' && !isNullOrUndefined(tabElement.tabLeader) && tabElement.tabLeader !== 'None') {\n text = this.getTabLeader(elementBox);\n tabElement.tabText = text;\n }\n else if (tabElement.tabText !== '') {\n text = tabElement.tabText;\n }\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillText(text, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), scaledWidth);\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline)) {\n // tslint:disable-next-line:max-line-length\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, format.baselineAlignment);\n }\n if (format.strikethrough !== 'None' && !isNullOrUndefined(format.strikethrough)) {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, format.baselineAlignment);\n }\n if (isHeightType) {\n this.pageContext.restore();\n }\n };\n /**\n * Returns tab leader\n */\n Renderer.prototype.getTabLeader = function (elementBox) {\n var textWidth = 0;\n var tabString = this.getTabLeaderString(elementBox.tabLeader);\n var tabText = tabString;\n textWidth = this.viewer.textHelper.getWidth(tabText, elementBox.characterFormat);\n var count = Math.floor(elementBox.width / textWidth);\n for (var i = 0; i <= count; i++) {\n tabText += tabString;\n }\n return tabText.slice(0, -1);\n };\n /**\n * Returns tab leader string.\n */\n Renderer.prototype.getTabLeaderString = function (tabLeader) {\n var tabString = '';\n switch (tabLeader) {\n case 'Dot':\n tabString = '.';\n break;\n case 'Hyphen':\n tabString = '-';\n break;\n case 'Underscore':\n tabString = '_';\n break;\n }\n return tabString;\n };\n /**\n * Clips the rectangle with specified position.\n * @param {number} xPos\n * @param {number} yPos\n * @param {number} width\n * @param {number} height\n */\n Renderer.prototype.clipRect = function (xPos, yPos, width, height) {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.getScaledValue(xPos, 1), this.getScaledValue(yPos, 2), width, height);\n this.pageContext.clip();\n };\n /**\n * Renders underline.\n * @param {ElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n * @param {string} color\n * @param {Underline} underline\n * @param {BaselineAlignment} baselineAlignment\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderUnderline = function (elementBox, left, top, underlineY, color, underline, baselineAlignment) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n var underlineHeight = renderedHeight / 20;\n var y = 0;\n if (baselineAlignment === 'Subscript' || elementBox instanceof ListTextElementBox) {\n y = (renderedHeight - 2 * underlineHeight) + top;\n topMargin += elementBox.height - renderedHeight;\n y += topMargin > 0 ? topMargin : 0;\n }\n else {\n y = underlineY + top;\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y, 2), this.getScaledValue(elementBox.width), this.getScaledValue(underlineHeight));\n };\n /**\n * Renders strike through.\n * @param {ElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {Strikethrough} strikethrough\n * @param {string} color\n * @param {BaselineAlignment} baselineAlignment\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderStrikeThrough = function (elementBox, left, top, strikethrough, color, baselineAlignment) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - renderedHeight;\n }\n top += topMargin > 0 ? topMargin : 0;\n var lineHeight = renderedHeight / 20;\n var y = (renderedHeight / 2) + (0.5 * lineHeight);\n var lineCount = 0;\n if (strikethrough === 'DoubleStrike') {\n y -= lineHeight;\n }\n while (lineCount < (strikethrough === 'DoubleStrike' ? 2 : 1)) {\n lineCount++;\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y + top, 2), this.getScaledValue(elementBox.width), this.getScaledValue(lineHeight));\n y += 2 * lineHeight;\n }\n };\n /**\n * Renders image element box.\n * @param {ImageElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderImageElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var color = 'black';\n this.pageContext.textBaseline = 'top';\n var widgetWidth = 0;\n var isClipped = false;\n if (topMargin < 0 || elementBox.line.paragraph.width < elementBox.width) {\n var containerWid = elementBox.line.paragraph.containerWidget;\n // if (containerWid instanceof BodyWidget) {\n // widgetWidth = containerWid.width + containerWid.x;\n // } else \n if (containerWid instanceof TableCellWidget) {\n var leftIndent = 0;\n if (containerWid.childWidgets[0] instanceof ParagraphWidget) {\n var paraAdv = containerWid.childWidgets[0];\n leftIndent = paraAdv.paragraphFormat.leftIndent;\n }\n widgetWidth = containerWid.width + containerWid.margin.left - containerWid.leftBorderWidth - leftIndent;\n isClipped = true;\n // tslint:disable-next-line:max-line-length\n this.clipRect(left + leftMargin, top + topMargin, this.getScaledValue(widgetWidth), this.getScaledValue(containerWid.height));\n }\n }\n if (elementBox.isMetaFile) {\n /* tslint:disable:no-empty */\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.pageContext.drawImage(elementBox.element, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n if (isClipped) {\n this.pageContext.restore();\n }\n };\n /**\n * Renders table outline.\n * @param {TableWidget} tableWidget\n */\n Renderer.prototype.renderTableOutline = function (tableWidget) {\n var layout = new Layout(this.viewer);\n var table = tableWidget;\n tableWidget.width = this.viewer.layout.getTableWidth(table);\n var border = layout.getTableTopBorder(table.tableFormat.borders);\n var lineWidth = 0;\n //ToDo: Need to draw the borders based on the line style.\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth);\n // }\n border = layout.getTableTopBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y - lineWidth / 2, lineWidth);\n // }\n border = layout.getTableRightBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth);\n // }\n border = layout.getTableBottomBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y + tableWidget.height - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y + tableWidget.height - lineWidth / 2, lineWidth);\n // }\n };\n /**\n * Renders table cell outline.\n * @param {LayoutViewer} viewer\n * @param {TableCellWidget} cellWidget\n */\n Renderer.prototype.renderTableCellOutline = function (viewer, cellWidget) {\n var layout = viewer.layout;\n var borders = undefined;\n var tableCell = cellWidget;\n var cellTopMargin = 0;\n var cellBottomMargin = 0;\n var cellLeftMargin = 0;\n var cellRightMargin = 0;\n var height = 0;\n borders = tableCell.cellFormat.borders;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n cellBottomMargin = cellWidget.margin.bottom - cellWidget.containerWidget.bottomBorderWidth;\n cellTopMargin = cellWidget.margin.top - cellWidget.containerWidget.topBorderWidth;\n }\n cellLeftMargin = cellWidget.margin.left - cellWidget.leftBorderWidth;\n cellRightMargin = cellWidget.margin.right - cellWidget.rightBorderWidth;\n if (!isNullOrUndefined(tableCell.ownerRow) && tableCell.ownerRow.rowFormat.heightType === 'Exactly') {\n height = HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n if (!isNullOrUndefined(tableCell.ownerRow) && [tableCell.ownerRow].length <= 1) {\n // tslint:disable-next-line:max-line-length\n height = Math.max(HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height), cellWidget.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n height = cellWidget.height + cellTopMargin + cellBottomMargin;\n }\n }\n this.renderCellBackground(height, cellWidget);\n var border = TableCellWidget.getCellLeftBorder(tableCell);\n var lineWidth = 0;\n // if (!isNullOrUndefined(border )) { \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth()); //Renders the cell left border.\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y - cellTopMargin, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n // }\n border = TableCellWidget.getCellTopBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell top border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellWidget.margin.left, cellWidget.y - cellWidget.margin.top + lineWidth / 2, cellWidget.x + cellWidget.width + cellWidget.margin.right, cellWidget.y - cellWidget.margin.top + lineWidth / 2, lineWidth);\n // }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0 || tableCell.cellIndex === tableCell.ownerRow.childWidgets.length - 1) {\n border = TableCellWidget.getCellRightBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell right border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y - cellTopMargin, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n // }\n }\n var nextRow = tableCell.ownerRow.nextWidget;\n //Specifies the next row is within the current table widget.\n //True means current row is not rendered at page end; Otherwise False.\n var nextRowIsInCurrentTableWidget = false;\n if (!isNullOrUndefined(nextRow)) {\n var nextRowWidget = undefined;\n // if (viewer.renderedElements.containsKey(nextRow) && viewer.renderedElements.get(nextRow).length > 0) {\n nextRowWidget = nextRow;\n // }\n if (nextRowWidget instanceof TableRowWidget) {\n // tslint:disable-next-line:max-line-length\n if (cellWidget.containerWidget instanceof TableRowWidget && cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n nextRowIsInCurrentTableWidget = cellWidget.containerWidget.containerWidget.childWidgets.indexOf(nextRowWidget) !== -1;\n }\n }\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0 || tableCell.ownerRow.rowIndex === tableCell.ownerTable.childWidgets.length - 1\n || (tableCell.cellFormat.rowSpan > 1\n && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan === tableCell.ownerTable.childWidgets.length) ||\n !nextRowIsInCurrentTableWidget) {\n // tslint:disable-next-line:max-line-length\n border = (tableCell.cellFormat.rowSpan > 1 && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan === tableCell.ownerTable.childWidgets.length) ?\n //true part for vertically merged cells specifically.\n tableCell.getBorderBasedOnPriority(tableCell.cellFormat.borders.bottom, TableCellWidget.getCellBottomBorder(tableCell))\n //false part for remaining cases that has been handled inside method. \n : TableCellWidget.getCellBottomBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell bottom border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellWidget.margin.left, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, cellWidget.x + cellWidget.width + cellWidget.margin.right, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, lineWidth);\n // }\n }\n border = layout.getCellDiagonalUpBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal up border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellLeftMargin, cellWidget.y + cellWidget.height + cellBottomMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y - cellTopMargin, lineWidth);\n // }\n }\n border = layout.getCellDiagonalDownBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal down border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellLeftMargin, cellWidget.y - cellTopMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n }\n // }\n };\n /**\n * Renders cell background.\n * @param {number} height\n * @param {TableCellWidget} cellWidget\n */\n Renderer.prototype.renderCellBackground = function (height, cellWidget) {\n var cellFormat = cellWidget.cellFormat;\n var bgColor = cellFormat.shading.backgroundColor === '#ffffff' ?\n cellWidget.ownerTable.tableFormat.shading.backgroundColor : cellFormat.shading.backgroundColor;\n this.pageContext.beginPath();\n if (bgColor !== 'empty') {\n this.pageContext.fillStyle = this.getColor(bgColor);\n var left = cellWidget.x - cellWidget.margin.left + cellWidget.leftBorderWidth;\n var top_1 = cellWidget.y - HelperMethods.convertPointToPixel(cellWidget.topMargin);\n // tslint:disable-next-line:max-line-length\n var width = cellWidget.width + cellWidget.margin.left + cellWidget.margin.right - cellWidget.leftBorderWidth - cellWidget.rightBorderWidth;\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left, 1), this.getScaledValue(top_1, 2), this.getScaledValue(width), this.getScaledValue(height));\n this.pageContext.closePath();\n }\n };\n /**\n * Renders single border.\n * @param {WBorder} border\n * @param {number} startX\n * @param {number} startY\n * @param {number} endX\n * @param {number} endY\n * @param {number} lineWidth\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderSingleBorder = function (border, startX, startY, endX, endY, lineWidth) {\n this.pageContext.beginPath();\n this.pageContext.moveTo(this.getScaledValue(startX, 1), this.getScaledValue(startY, 2));\n this.pageContext.lineTo(this.getScaledValue(endX, 1), this.getScaledValue(endY, 2));\n this.pageContext.lineWidth = this.getScaledValue(lineWidth);\n // set line color\n this.pageContext.strokeStyle = border.color;\n if (lineWidth > 0) {\n this.pageContext.stroke();\n }\n this.pageContext.closePath();\n };\n /**\n * Gets scaled value.\n * @param {number} value\n * @param {number} type\n * @private\n */\n Renderer.prototype.getScaledValue = function (value, type) {\n if (this.isPrinting) {\n return value;\n }\n if (isNullOrUndefined(type)) {\n type = 0;\n }\n var x = value * this.viewer.zoomFactor;\n return x + (type === 1 ? this.pageLeft : (type === 2 ? this.pageTop : 0));\n };\n /**\n * Destroys the internal objects which is maintained.\n */\n Renderer.prototype.destroy = function () {\n this.viewer = undefined;\n if (!isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn.innerHTML = '';\n }\n this.pageCanvasIn = undefined;\n };\n return Renderer;\n}());\nexport { Renderer };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WCharacterFormat } from '../index';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar TextHelper = /** @class */ (function () {\n function TextHelper(viewer) {\n this.owner = viewer;\n if (!isNullOrUndefined(viewer)) {\n this.context = viewer.containerContext;\n }\n }\n Object.defineProperty(TextHelper.prototype, \"paragraphMark\", {\n get: function () {\n return '¶';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextHelper.prototype, \"lineBreakMark\", {\n get: function () {\n return '↲';\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TextHelper.prototype.getParagraphMarkWidth = function (characterFormat) {\n return this.getWidth(this.paragraphMark, characterFormat);\n };\n /**\n * @private\n */\n TextHelper.prototype.getParagraphMarkSize = function (characterFormat) {\n // Gets the text element's width;\n var width = this.getWidth(this.paragraphMark, characterFormat);\n var height = 0;\n var baselineOffset = 0;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n return {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n };\n /**\n * @private\n */\n TextHelper.prototype.getTextSize = function (elementBox, characterFormat) {\n // Gets the text element's width;\n var textTrimEndWidth = 0;\n textTrimEndWidth = this.getWidth(elementBox.text, characterFormat);\n elementBox.width = textTrimEndWidth;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n elementBox.height = textHelper.Height;\n elementBox.baselineOffset = textHelper.BaselineOffset;\n if (elementBox.text[elementBox.text.length - 1] === ' ') {\n textTrimEndWidth = this.getWidth(HelperMethods.trimEnd(elementBox.text), characterFormat);\n }\n return textTrimEndWidth;\n };\n /**\n * @private\n */\n TextHelper.prototype.getHeight = function (characterFormat) {\n // Get character format property as below predefined structure to make it easy to check and retrieve\n // Predefined static structure `[FontName];[FontSize];bold;italic` to maintain as key in the collection \n var key = this.getFormatText(characterFormat);\n if (!isNullOrUndefined(this.owner.heightInfoCollection[key])) {\n return this.owner.heightInfoCollection[key];\n }\n var sizeInfo = this.getHeightInternal(characterFormat);\n this.owner.heightInfoCollection[key] = sizeInfo;\n return sizeInfo;\n };\n /**\n * @private\n */\n TextHelper.prototype.getFormatText = function (characterFormat) {\n var formatText = characterFormat.fontFamily.toLocaleLowerCase();\n formatText += ';' + characterFormat.fontSize;\n if (characterFormat.bold) {\n formatText += ';' + 'bold';\n }\n if (characterFormat.italic) {\n formatText += ';' + 'italic';\n }\n return formatText;\n };\n /**\n * @private\n */\n TextHelper.prototype.getHeightInternal = function (characterFormat) {\n var textHeight = 0;\n var baselineOffset = 0;\n var spanElement = document.createElement('span');\n spanElement.id = 'tempSpan';\n spanElement.style.whiteSpace = 'nowrap';\n spanElement.innerText = 'm';\n this.applyStyle(spanElement, characterFormat);\n var body = document.getElementsByTagName('body');\n var parentDiv = document.createElement('div');\n parentDiv.style.display = 'inline-block';\n var tempDiv = document.createElement('div');\n tempDiv.setAttribute('style', 'display:inline-block;width: 1px; height: 0px;vertical-align: baseline;');\n parentDiv.appendChild(spanElement);\n parentDiv.appendChild(tempDiv);\n document.body.appendChild(parentDiv);\n // Sets the text element's height.\n textHeight = spanElement.offsetHeight;\n // Calculate the text element's baseline offset.\n var textTopVal = spanElement.offsetTop;\n var tempDivTopVal = tempDiv.offsetTop;\n baselineOffset = tempDivTopVal - textTopVal;\n document.body.removeChild(parentDiv);\n return { 'Height': textHeight, 'BaselineOffset': baselineOffset };\n };\n /**\n * @private\n */\n TextHelper.prototype.measureTextExcludingSpaceAtEnd = function (text, characterFormat) {\n return this.getWidth(HelperMethods.trimEnd(text), characterFormat);\n };\n /**\n * @private\n */\n TextHelper.prototype.getWidth = function (text, characterFormat) {\n if (text.match('\\v')) {\n text.replace('\\v', this.lineBreakMark);\n }\n var bold = '';\n var italic = '';\n var fontFamily = '';\n var fontSize = characterFormat.fontSize;\n bold = characterFormat.bold ? 'bold' : '';\n italic = characterFormat.italic ? 'italic' : '';\n fontFamily = characterFormat.fontFamily;\n fontSize = fontSize === 0 ? 0.5 : fontSize / (characterFormat.baselineAlignment === 'Normal' ? 1 : 1.5);\n this.context.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + fontFamily;\n return this.context.measureText(text).width;\n };\n /**\n * @private\n */\n TextHelper.prototype.applyStyle = function (spanElement, characterFormat) {\n if (!isNullOrUndefined(spanElement) && !isNullOrUndefined(characterFormat)) {\n if (characterFormat.fontFamily !== '') {\n spanElement.style.fontFamily = characterFormat.fontFamily;\n }\n var fontSize = characterFormat.fontSize;\n if (fontSize <= 0.5) {\n fontSize = 0.5;\n }\n spanElement.style.fontSize = fontSize.toString() + 'pt';\n if (characterFormat.bold) {\n spanElement.style.fontWeight = 'bold';\n }\n if (characterFormat.italic) {\n spanElement.style.fontStyle = 'italic';\n }\n }\n };\n /**\n * @private\n */\n TextHelper.prototype.measureText = function (text, characterFormat) {\n // Gets the text element's width;\n var width = this.getWidth(text, characterFormat);\n var height = 0;\n var baselineOffset = 0;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n return {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n };\n /**\n * @private\n */\n TextHelper.prototype.updateTextSize = function (elementBox, paragraph) {\n var format = new WCharacterFormat(undefined);\n var listCharacterFormat = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = paragraph.characterFormat;\n format.fontSize = listCharacterFormat.fontSize === 11 ? breakCharacterFormat.fontSize : listCharacterFormat.fontSize;\n format.fontFamily = listCharacterFormat.fontFamily === 'Verdana' ? breakCharacterFormat.fontFamily\n : listCharacterFormat.fontFamily;\n var bold = '';\n var italic = '';\n var baselineAlignment = listCharacterFormat.baselineAlignment === 'Normal' ?\n breakCharacterFormat.baselineAlignment : listCharacterFormat.baselineAlignment;\n bold = listCharacterFormat.bold ? 'bold' : breakCharacterFormat.bold ? 'bold' : '';\n italic = listCharacterFormat.italic ? 'italic' : breakCharacterFormat.italic ? 'italic' : '';\n format.baselineAlignment = baselineAlignment;\n if (bold) {\n format.bold = true;\n }\n if (italic) {\n format.italic = true;\n }\n elementBox.width = this.getWidth(elementBox.text, format);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(format);\n elementBox.height = textHelper.Height;\n elementBox.baselineOffset = textHelper.BaselineOffset;\n };\n TextHelper.prototype.destroy = function () {\n this.owner = undefined;\n this.context = undefined;\n };\n return TextHelper;\n}());\nexport { TextHelper };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Zoom = /** @class */ (function () {\n function Zoom(viewer) {\n var _this = this;\n this.onMouseWheelInternal = function (event) {\n if (event.ctrlKey === true) {\n event.preventDefault();\n var pageX = event.pageX - _this.viewer.viewerContainer.offsetLeft;\n if (pageX < _this.viewer.pageContainer.offsetWidth) {\n var wheel = navigator.userAgent.match('Firefox') ? event.detail < 0 : event.wheelDelta > 0;\n var zoomFactor = _this.viewer.zoomFactor;\n if (wheel) {\n if (zoomFactor <= 4.90) {\n zoomFactor += .10;\n }\n else {\n zoomFactor = 5.00;\n }\n }\n else {\n if (zoomFactor >= .20) {\n zoomFactor -= .10;\n }\n else {\n zoomFactor = 0.10;\n }\n }\n _this.viewer.zoomFactor = zoomFactor;\n }\n }\n };\n this.viewer = viewer;\n }\n Zoom.prototype.setZoomFactor = function (value) {\n this.onZoomFactorChanged();\n if (!isNullOrUndefined(this.viewer.selection)) {\n this.viewer.selection.updateCaretPosition();\n }\n this.viewer.updateTouchMarkPosition();\n if (!isNullOrUndefined(this.viewer.owner.imageResizerModule)) {\n this.viewer.owner.imageResizerModule.updateImageResizerPosition();\n }\n this.viewer.owner.fireZoomFactorChange();\n };\n //Zoom Implementation Starts\n Zoom.prototype.onZoomFactorChanged = function () {\n if (this.viewer.zoomFactor > 5) {\n this.viewer.zoomFactor = 5;\n }\n else if (this.viewer.zoomFactor < 0.1) {\n this.viewer.zoomFactor = 0.1;\n }\n this.zoom();\n };\n Zoom.prototype.zoom = function () {\n var viewer = this.viewer;\n viewer.clearContent();\n viewer.handleZoom();\n viewer.updateFocus();\n };\n return Zoom;\n}());\nexport { Zoom };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Dictionary } from '../../base/dictionary';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WCharacterFormat, WParagraphFormat, WStyles } from '../format/index';\nimport { Layout } from './layout';\nimport { Renderer } from './render';\nimport { createElement, Browser } from '@syncfusion/ej2-base';\nimport { Page, Rect, ListTextElementBox, ParagraphWidget, HeaderFooterWidget } from './page';\nimport { LineWidget, TableWidget } from './page';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { TextHelper } from './text-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Zoom } from './zooming';\nimport { Dialog } from '@syncfusion/ej2-popups';\n/**\n * @private\n */\nvar LayoutViewer = /** @class */ (function () {\n //#endregion\n function LayoutViewer(owner) {\n var _this = this;\n /**\n * @private\n */\n this.textWrap = true;\n /**\n * @private\n */\n this.currentPage = undefined;\n this.selectionStartPageIn = undefined;\n this.selectionEndPageIn = undefined;\n /**\n * @private\n */\n this.fieldStacks = [];\n /**\n * @private\n */\n this.splittedCellWidgets = [];\n /**\n * @private\n */\n this.tableLefts = [];\n this.tapCount = 0;\n this.timer = -1;\n this.isTimerStarted = false;\n /**\n * @private\n */\n this.isFirstLineFitInShiftWidgets = false;\n /**\n * @private\n */\n this.preZoomFactor = 0;\n /**\n * @private\n */\n this.preDifference = -1;\n /**\n * @private\n */\n this.fieldEndParagraph = undefined;\n /**\n * @private\n */\n this.fieldToLayout = undefined;\n /**\n * @private\n */\n this.backgroundColor = '#FFFFFF';\n /**\n * @private\n */\n this.containerTop = 0;\n /**\n * @private\n */\n this.containerLeft = 0;\n // Event \n /**\n * @private\n */\n this.isMouseDown = false;\n /**\n * @private\n */\n this.isSelectionChangedOnMouseMoved = false;\n /**\n * @private\n */\n this.isControlPressed = false;\n /**\n * @private\n */\n this.isTouchInput = false;\n /**\n * @private\n */\n this.useTouchSelectionMark = false;\n /**\n * @private\n */\n this.touchDownOnSelectionMark = 0;\n /**\n * @private\n */\n this.isCompositionStart = false;\n /**\n * @private\n */\n this.isCompositionUpdated = false;\n /**\n * @private\n */\n this.isCompositionCanceled = false;\n /**\n * @private\n */\n this.isCompositionEnd = false;\n /**\n * @private\n */\n this.prefix = '';\n /**\n * @private\n */\n this.suffix = '';\n /**\n * @private\n */\n this.fields = [];\n /**\n * @private\n */\n this.heightInfoCollection = {};\n /**\n * @private\n */\n this.defaultTabWidth = 36;\n /**\n * @private\n */\n this.lists = [];\n /**\n * @private\n */\n this.abstractLists = [];\n /**\n * @private\n */\n this.styles = new WStyles();\n /**\n * @private\n */\n this.preDefinedStyles = undefined;\n /**\n * @private\n */\n this.isRowOrCellResizing = false;\n this.isMouseDownInFooterRegion = false;\n this.pageFitTypeIn = 'None';\n /**\n * @private\n */\n this.fieldCollection = [];\n /**\n * @private\n */\n this.isPageField = false;\n /**\n * @private\n */\n this.mouseDownOffset = new Point(0, 0);\n this.zoomFactorInternal = 1;\n /**\n * Fires when composition starts.\n * @private\n */\n this.compositionStart = function (event) {\n event.preventDefault();\n _this.isCompositionStart = true;\n };\n /**\n * Fires on every input during composition.\n * @private\n */\n this.compositionUpdated = function (event) {\n event.preventDefault();\n _this.isCompositionUpdated = true;\n };\n /**\n * Fires when user selects a character/word and finalizes the input.\n * @private\n */\n this.compositionEnd = function (event) {\n event.preventDefault();\n _this.isCompositionUpdated = false;\n _this.isCompositionEnd = true;\n };\n // tslint:disable:no-any \n this.onImageResizer = function (args) {\n if (!isNullOrUndefined(_this.owner.imageResizerModule) && _this.owner.imageResizerModule.isImageResizerVisible\n && _this.owner.imageResizerModule.isImageResizing) {\n if (args instanceof MouseEvent) {\n _this.onMouseUpInternal(args);\n }\n else if (args instanceof TouchEvent) {\n _this.onTouchUpInternal(args);\n }\n }\n };\n // tslint:enable:no-any \n this.onKeyPressInternal = function (event) {\n event.preventDefault();\n if (!isNullOrUndefined(_this.selection)) {\n var key = event.keyCode || event.charCode;\n var char = '';\n if (key) {\n char = String.fromCharCode(key);\n }\n else if (event.key) {\n char = event.key;\n }\n // tslint:disable-next-line:max-line-length\n if (char !== 'Spacebar' && char !== '\\r' && char !== '\\b' && char !== '\\u001B' && !_this.owner.isReadOnlyMode && event.ctrlKey === false) {\n _this.owner.editorModule.handleTextInput(char);\n }\n else if (char === 'Spacebar') {\n _this.owner.editorModule.handleTextInput(' ');\n }\n }\n };\n this.onTextInputInternal = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.owner.editorModule.onTextInputInternal(event);\n }\n else {\n _this.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n * @param {ClipboardEvent} event\n * @private\n */\n this.onPaste = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.owner.editorModule.pasteInternal(event);\n }\n _this.editableDiv.innerText = '';\n event.preventDefault();\n };\n /**\n * Fires when editable div loses focus.\n * @private\n */\n this.onFocusOut = function () {\n if (!isNullOrUndefined(_this.selection)) {\n if (_this.owner.contextMenuModule && _this.owner.contextMenuModule.contextMenuInstance &&\n _this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n _this.selection.hideCaret();\n }\n };\n /**\n * Updates focus to editor area.\n * @private\n */\n this.updateFocus = function () {\n if (_this.selection) {\n _this.editableDiv.focus();\n _this.selection.showCaret();\n }\n };\n /**\n * Fires on scrolling.\n */\n this.scrollHandler = function () {\n _this.clearContent();\n _this.updateScrollBars();\n var vtHeight = _this.containerTop + _this.visibleBounds.height;\n if (vtHeight > _this.pageContainer.offsetHeight) {\n _this.viewerContainer.scrollTop = _this.containerTop - (vtHeight - _this.pageContainer.offsetHeight);\n }\n var viewer = _this;\n if (viewer instanceof PageLayoutViewer && !isNullOrUndefined(_this.owner)) {\n _this.owner.fireViewChange();\n }\n };\n /**\n * Fires when the window gets resized.\n * @private\n */\n this.onWindowResize = function () {\n var viewer = _this;\n var resizeTimer;\n /* tslint:disable:align */\n resizeTimer = setTimeout(function () {\n if (!isNullOrUndefined(viewer.owner) && !isNullOrUndefined(_this.owner.element)) {\n viewer.updateViewerSizeInternal(document.getElementById(viewer.owner.element.id));\n viewer.updateScrollBars();\n if (!isNullOrUndefined(_this.selection)) {\n _this.selection.updateCaretPosition();\n }\n viewer.updateTouchMarkPosition();\n if (viewer.owner.contextMenuModule && viewer.owner.contextMenuModule.contextMenuInstance) {\n viewer.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (resizeTimer) {\n clearTimeout(resizeTimer);\n }\n }\n }, 100);\n };\n /**\n * @private\n */\n this.onContextMenu = function (event) {\n if (_this.owner.contextMenuModule) {\n _this.owner.contextMenuModule.onContextMenuInternal(event);\n }\n };\n /**\n * Called on mouse down.\n * @param {MouseEvent} event\n * @private\n */\n this.onMouseDownInternal = function (event) {\n if (_this.isTouchInput || event.offsetX > (_this.visibleBounds.width - (_this.visibleBounds.width - _this.viewerContainer.clientWidth))\n || event.offsetY > (_this.visibleBounds.height - (_this.visibleBounds.height - _this.viewerContainer.clientHeight))) {\n return;\n }\n if (!isNullOrUndefined(_this.selection)) {\n _this.updateCursor(event);\n // tslint:disable-next-line:max-line-length\n if (_this.isLeftButtonPressed(event) && !_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n event.preventDefault();\n if (!_this.isTouchInput) {\n _this.selection.hideCaret();\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.findFocusedPage(cursorPoint, true);\n _this.mouseDownOffset.x = touchPoint.x;\n _this.mouseDownOffset.y = touchPoint.y;\n // tslint:disable-next-line:max-line-length\n _this.isMouseDownInFooterRegion = _this.selection.isCursorInsidePageRect(cursorPoint, _this.currentPage) && _this.selection.isCursorInFooterRegion(cursorPoint, _this.currentPage);\n _this.isSelectionChangedOnMouseMoved = false;\n if (!_this.owner.isReadOnlyMode && (_this.owner.editorModule.tableResize.isInCellResizerArea(touchPoint) ||\n _this.owner.editorModule.tableResize.isInRowResizerArea(touchPoint))) {\n _this.selection.hideCaret();\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n if (_this.isLeftButtonPressed(event)) {\n _this.owner.editorModule.tableResize.startingPoint.x = touchPoint.x;\n _this.owner.editorModule.tableResize.startingPoint.y = touchPoint.y;\n _this.owner.editorModule.tableResize.handleResize(touchPoint);\n }\n return;\n }\n if (event.ctrlKey) {\n _this.isControlPressed = true;\n }\n if (_this.owner.selection.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n if (event.which === 3 && !_this.owner.selection.isEmpty\n && _this.selection.checkCursorIsInSelection(_this.getLineWidget(touchPoint), touchPoint)) {\n event.preventDefault();\n return;\n }\n _this.isTouchInput = false;\n _this.isMouseDown = true;\n _this.updateFocus();\n /* tslint:disable:align */\n _this.timer = setTimeout(function () {\n _this.tapCount++;\n if (_this.tapCount === 4) {\n _this.tapCount = 1;\n }\n }, 200);\n }\n };\n /**\n * Called on mouse move.\n * @param {MouseEvent} event\n * @private\n */\n this.onMouseMoveInternal = function (event) {\n event.preventDefault();\n if (!isNullOrUndefined(_this.selection)) {\n //For image Resizing\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode\n && _this.owner.imageResizerModule.isImageResizing) {\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnMouse(event);\n }\n return;\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.findFocusedPage(cursorPoint, !_this.owner.enableHeaderAndFooter);\n if (_this.isMouseDown) {\n if (!isNullOrUndefined(_this.currentPage)) {\n var xPosition = touchPoint.x;\n var yPosition = touchPoint.y;\n if (!_this.owner.isReadOnlyMode && _this.isRowOrCellResizing) {\n _this.owner.editorModule.tableResize.handleResizing(touchPoint);\n }\n else {\n if (!(_this.isTouchInput || _this.isSelectionChangedOnMouseMoved || _this.touchDownOnSelectionMark > 0)) {\n _this.updateTextPositionForSelection(touchPoint, 1);\n }\n if (_this.isLeftButtonPressed(event)) {\n event.preventDefault();\n var touchY = yPosition;\n var textPosition = _this.owner.selection.end;\n var touchPoint_1 = new Point(xPosition, touchY);\n if (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizerVisible) {\n _this.owner.selection.moveTextPosition(touchPoint_1, textPosition);\n }\n _this.isSelectionChangedOnMouseMoved = true;\n }\n }\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!_this.isRowOrCellResizing && !_this.isSelectionChangedOnMouseMoved) {\n _this.updateCursor(event);\n }\n if (_this.isRowOrCellResizing) {\n _this.selection.hideCaret();\n }\n }\n };\n /**\n * Fired on double tap.\n * @param {MouseEvent} event\n * @private\n */\n this.onDoubleTap = function (event) {\n if (!isNullOrUndefined(_this.selection)) {\n _this.isTouchInput = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n if (_this.selection.checkAndEnableHeaderFooter(cursorPoint, _this.findFocusedPage(cursorPoint, true))) {\n return;\n }\n // tslint:disable-next-line:max-line-length\n if (_this.selection.isEmpty && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)) {\n _this.owner.selection.selectCurrentWord();\n _this.selection.checkForCursorVisibility();\n _this.tapCount = 2;\n }\n }\n };\n /**\n * Called on mouse up.\n * @param {MouseEvent} event\n * @private\n */\n this.onMouseUpInternal = function (event) {\n event.preventDefault();\n _this.isListTextSelected = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.findFocusedPage(cursorPoint, true);\n if (!isNullOrUndefined(_this.selection)) {\n var tapCount = 1;\n if (!Browser.isIE) {\n if (event.detail > 2) {\n tapCount = event.detail;\n }\n }\n else {\n tapCount = _this.tapCount;\n }\n if (_this.isRowOrCellResizing) {\n _this.owner.editorModule.tableResize.updateResizingHistory(touchPoint);\n }\n if (_this.isMouseDown && !_this.isSelectionChangedOnMouseMoved\n && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)\n && (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizing)) {\n if (_this.touchDownOnSelectionMark === 0 && !_this.isRowOrCellResizing) {\n _this.updateTextPositionForSelection(touchPoint, tapCount);\n if (Browser.isIE && tapCount === 2) {\n _this.selection.checkAndEnableHeaderFooter(cursorPoint, touchPoint);\n }\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)\n && (_this.owner.selection.isEmpty || _this.owner.selection.isImageSelected) &&\n (((event.ctrlKey && _this.owner.useCtrlClickToFollowHyperlink ||\n !_this.owner.useCtrlClickToFollowHyperlink) && _this.isLeftButtonPressed(event) === true))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, false);\n }\n if (!_this.owner.isReadOnlyMode && _this.isSelectionInListText(touchPoint)) {\n _this.selection.selectListText();\n }\n // tslint:disable-next-line:max-line-length\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.scrollToPosition(_this.owner.selection.start, _this.owner.selection.end);\n _this.owner.imageResizerModule.isImageResizing = false;\n _this.owner.imageResizerModule.updateHistoryForImageResizer();\n }\n // tslint:disable-next-line:max-line-length\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && !isNullOrUndefined(_this.selection.caret)) {\n _this.selection.caret.style.display = 'none';\n }\n _this.isMouseDown = false;\n _this.isSelectionChangedOnMouseMoved = false;\n _this.isTouchInput = false;\n _this.useTouchSelectionMark = true;\n _this.isControlPressed = false;\n _this.updateFocus();\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n if (_this.owner.enableImageResizerMode) {\n var imageResizer = _this.owner.imageResizerModule;\n imageResizer.isImageResizing = false;\n imageResizer.isImageMoveToNextPage = false;\n imageResizer.leftValue = undefined;\n imageResizer.topValue = undefined;\n }\n _this.isMouseDownInFooterRegion = false;\n }\n };\n /**\n * Fired on touch start.\n * @param {TouchEvent} event\n * @private\n */\n this.onTouchStartInternal = function (event) {\n if (_this.selection) {\n _this.isCompositionStart = false;\n _this.isCompositionEnd = false;\n _this.isCompositionUpdated = false;\n _this.isCompositionCanceled = true;\n _this.isTouchInput = true;\n if (_this.isTimerStarted) {\n if (_this.tapCount === 1) {\n _this.tapCount = 2;\n }\n else {\n _this.tapCount = 3;\n _this.isTimerStarted = false;\n }\n }\n else {\n _this.isTimerStarted = true;\n _this.tapCount = 1;\n }\n if (event.touches.length === 1) {\n _this.zoomX = event.touches[0].clientX;\n _this.zoomY = event.touches[0].clientY;\n if (_this.owner.selection.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n var point = void 0;\n if (_this.isMouseDown) {\n point = _this.getTouchOffsetValue(event);\n }\n point = _this.findFocusedPage(point, true);\n if (_this.owner.enableImageResizerMode) {\n var resizeObj = _this.owner.imageResizerModule.getImagePointOnTouch(point);\n _this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n }\n // tslint:disable-next-line:max-line-length\n if (_this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n var x = _this.owner.selection.end.location.x;\n var y = _this.selection.getCaretBottom(_this.owner.selection.end, _this.owner.selection.isEmpty) + 9;\n //TouchDownOnSelectionMark will be 2 when touch end is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 1 : 0;\n if (!_this.owner.selection.isEmpty && _this.touchDownOnSelectionMark === 0) {\n x = _this.owner.selection.start.location.x;\n y = _this.selection.getCaretBottom(_this.owner.selection.start, false) + 9;\n //TouchDownOnSelectionMark will be 1 when touch start is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 2 : 0;\n }\n }\n if (!isNullOrUndefined(_this.owner.contextMenuModule) && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (_this.touchDownOnSelectionMark || event.touches.length > 1) {\n event.preventDefault();\n }\n _this.timer = setTimeout(function () {\n _this.isTimerStarted = false;\n }, 200);\n }\n };\n /**\n * Fired on touch move.\n * @param {TouchEvent} event\n * @private\n */\n this.onTouchMoveInternal = function (event) {\n var touch = event.touches;\n var cursorPoint;\n if (!isNullOrUndefined(_this.selection)) {\n // tslint:disable-next-line:max-line-length\n if (_this.owner.editorModule && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n event.preventDefault();\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnTouch(event);\n _this.selection.caret.style.display = 'none';\n }\n return;\n }\n if (_this.isMouseDown) {\n cursorPoint = _this.getTouchOffsetValue(event);\n var touchPoint = _this.findFocusedPage(cursorPoint, true);\n if (_this.touchDownOnSelectionMark > 0 /*|| !this.useTouchSelectionMark*/) {\n event.preventDefault();\n var touchY = touchPoint.y;\n var textPosition = _this.owner.selection.end;\n var touchPointer = void 0;\n if (touchPoint.y <= 26) {\n touchY -= touchPoint.y < 0 ? 0 : touchPoint.y + 0.5;\n }\n else {\n touchY -= 36.5;\n }\n textPosition = _this.touchDownOnSelectionMark === 2 ? _this.selection.start : _this.selection.end;\n touchPoint = new Point(touchPoint.x, touchY);\n _this.owner.selection.moveTextPosition(touchPoint, textPosition);\n _this.isSelectionChangedOnMouseMoved = true;\n }\n _this.selection.checkForCursorVisibility();\n }\n }\n if (touch.length > 1) {\n event.preventDefault();\n _this.isMouseDown = false;\n _this.zoomX = (touch[0].clientX + touch[1].clientX) / 2;\n _this.zoomY = (touch[0].clientY + touch[1].clientY) / 2;\n // tslint:disable-next-line:max-line-length\n var currentDiff = Math.sqrt(Math.pow((touch[0].clientX - touch[1].clientX), 2) + Math.pow((touch[0].clientY - touch[1].clientY), 2));\n if (_this.preDifference > -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchOutInternal(event);\n }\n else if (currentDiff < _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n else if (_this.zoomFactor < 2) {\n if (_this.preDifference !== -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n else if (_this.preDifference === -1) {\n if (_this.zoomFactor > 2) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n _this.preDifference = currentDiff;\n }\n };\n /**\n * Fired on touch up.\n * @param {TouchEvent} event\n * @private\n */\n this.onTouchUpInternal = function (event) {\n if (!isNullOrUndefined(_this.selection)) {\n var point = _this.getTouchOffsetValue(event);\n var touchPoint = _this.findFocusedPage(point, true);\n if (event.changedTouches.length === 1) {\n _this.zoomX = undefined;\n _this.zoomY = undefined;\n // tslint:disable-next-line:max-line-length\n if (_this.isMouseDown && !_this.isSelectionChangedOnMouseMoved && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)) {\n if (_this.touchDownOnSelectionMark === 0) {\n _this.updateTextPositionForSelection(new Point(touchPoint.x, touchPoint.y), _this.tapCount);\n if (_this.tapCount === 2) {\n _this.selection.checkAndEnableHeaderFooter(point, touchPoint);\n }\n }\n if (_this.owner.selection.isEmpty) {\n _this.selection.updateCaretPosition();\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.selection.start)\n && !_this.isSelectionChangedOnMouseMoved && (_this.selection.isEmpty ||\n _this.selection.isImageField() && (!_this.owner.enableImageResizerMode ||\n _this.owner.enableImageResizerMode && !_this.owner.imageResizerModule.isImageResizing))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, true);\n }\n _this.isMouseDown = false;\n _this.touchDownOnSelectionMark = 0;\n _this.useTouchSelectionMark = true;\n _this.isSelectionChangedOnMouseMoved = false;\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.owner.imageResizerModule.isImageResizing = false;\n _this.owner.imageResizerModule.isImageMoveToNextPage = false;\n _this.scrollToPosition(_this.owner.selection.start, _this.owner.selection.end);\n _this.owner.imageResizerModule.updateHistoryForImageResizer();\n }\n // tslint:disable-next-line:max-line-length\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && _this.isTouchInput) {\n _this.touchStart.style.display = 'none';\n _this.touchEnd.style.display = 'none';\n }\n // if (!this.owner.isReadOnlyMode && this.isSelectionInListText(touchPoint)) {\n // this.selection.selectListText();\n // }\n event.preventDefault();\n }\n _this.preDifference = -1;\n _this.isTouchInput = false;\n if (!_this.isTimerStarted) {\n _this.tapCount = 1;\n }\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n };\n /**\n * Fired on keyup event.\n * @private\n */\n this.onKeyUpInternal = function (event) {\n if (Browser.isDevice) {\n if (window.getSelection().anchorOffset !== _this.prefix.length) {\n _this.selection.setEditableDivCaretPosition(_this.editableDiv.innerText.length);\n }\n }\n if (event.ctrlKey || (event.keyCode === 17 || event.which === 17)) {\n _this.isControlPressed = false;\n }\n };\n /**\n * Fired on keydown.\n * @private\n */\n this.onKeyDownInternal = function (event) {\n var isHandled = false;\n var keyEventArgs = { 'event': event, 'isHandled': false, source: _this.owner };\n _this.owner.trigger('keyDown', keyEventArgs);\n if (keyEventArgs.isHandled) {\n return;\n }\n var key = event.which || event.keyCode;\n var ctrl = (event.ctrlKey || event.metaKey) ? true : ((key === 17) ? true : false); // ctrl detection \n var shift = event.shiftKey ? event.shiftKey : ((key === 16) ? true : false); // Shift Key detection \n var alt = event.altKey ? event.altKey : ((key === 18) ? true : false); // alt key detection\n if (ctrl && !shift && !alt) {\n switch (key) {\n case 80:\n event.preventDefault();\n _this.owner.print();\n isHandled = true;\n break;\n case 83:\n event.preventDefault();\n _this.owner.save(_this.owner.documentName === '' ? 'sample' : _this.owner.documentName, 'Sfdt');\n isHandled = true;\n break;\n }\n }\n if (!isHandled && !isNullOrUndefined(_this.selection)) {\n _this.selection.onKeyDownInternal(event, ctrl, shift, alt);\n }\n if (isHandled) {\n event.preventDefault();\n }\n };\n this.owner = owner;\n this.pages = [];\n this.render = new Renderer(this);\n this.lists = [];\n this.abstractLists = [];\n this.characterFormat = new WCharacterFormat(this);\n this.paragraphFormat = new WParagraphFormat(this);\n this.renderedLists = new Dictionary();\n this.headersFooters = [];\n this.styles = new WStyles();\n this.preDefinedStyles = new Dictionary();\n this.initalizeStyles();\n this.bookmarks = new Dictionary();\n }\n Object.defineProperty(LayoutViewer.prototype, \"containerCanvas\", {\n //#region Properties\n /**\n * Gets container canvas.\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn = document.createElement('canvas');\n this.containerCanvasIn.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.containerCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.containerCanvasIn);\n }\n return this.containerCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionCanvas\", {\n /**\n * Gets selection canvas.\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn = document.createElement('canvas');\n this.selectionCanvas.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.selectionCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.selectionCanvasIn);\n }\n return this.selectionCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"containerContext\", {\n /**\n * Gets container context.\n * @private\n */\n get: function () {\n return this.containerCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionContext\", {\n /**\n * Gets selection context.\n * @private\n */\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"currentRenderingPage\", {\n /**\n * Gets the current rendering page.\n */\n get: function () {\n if (this.pages.length === 0) {\n return undefined;\n }\n return this.pages[this.pages.length - 1];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"visibleBounds\", {\n /**\n * Gets visible bounds.\n * @private\n */\n get: function () {\n return this.visibleBoundsIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"zoomFactor\", {\n /**\n * Gets or sets zoom factor.\n * @private\n */\n get: function () {\n return this.zoomFactorInternal;\n },\n set: function (value) {\n if (this.zoomFactorInternal !== value) {\n this.preZoomFactor = this.zoomFactor;\n this.zoomFactorInternal = value;\n this.zoomModule.setZoomFactor(value);\n this.owner.zoomFactor = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selection\", {\n /**\n * Gets the selection.\n * @private\n */\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionStartPage\", {\n /**\n * Gets or sets selection start page.\n * @private\n */\n get: function () {\n return this.selectionStartPageIn;\n },\n set: function (value) {\n this.selectionStartPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionEndPage\", {\n /**\n * Gets or sets selection end page.\n * @private\n */\n get: function () {\n return this.selectionEndPageIn;\n },\n set: function (value) {\n this.selectionEndPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"dialog\", {\n /**\n * Gets the initialized default dialog.\n * @private\n */\n get: function () {\n if (!this.dialogInternal) {\n this.initDialog();\n }\n return this.dialogInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"dialog2\", {\n /**\n * Gets the initialized default dialog.\n * @private\n */\n get: function () {\n if (!this.dialogInternal2) {\n this.initDialog2();\n }\n return this.dialogInternal2;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"pageFitType\", {\n /**\n * Gets or sets page fit type.\n * @private\n */\n get: function () {\n return this.pageFitTypeIn;\n },\n set: function (value) {\n this.pageFitTypeIn = value;\n this.onPageFitTypeChanged(this.pageFitTypeIn);\n },\n enumerable: true,\n configurable: true\n });\n LayoutViewer.prototype.initalizeStyles = function () {\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Normal', '{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 1', '{\"type\":\"Paragraph\",\"name\":\"Heading 1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 1 Char\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":12.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level1\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 2', '{\"type\":\"Paragraph\",\"name\":\"Heading 2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 2 Char\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level2\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 3', '{\"type\":\"Paragraph\",\"name\":\"Heading 3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 3 Char\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level3\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 4', '{\"type\":\"Paragraph\",\"name\":\"Heading 4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 4 Char\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level4\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 5', '{\"type\":\"Paragraph\",\"name\":\"Heading 5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 5 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level5\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 6', '{\"type\":\"Paragraph\",\"name\":\"Heading 6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 6 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level6\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Default Paragraph Font', '{\"type\":\"Character\",\"name\":\"Default Paragraph Font\"}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 1 Char', '{\"type\":\"Character\",\"name\":\"Heading 1 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 2 Char', '{\"type\":\"Character\",\"name\":\"Heading 2 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 3 Char', '{\"type\":\"Character\",\"name\":\"Heading 3 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\": \"#1F3763\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 4 Char', '{\"type\":\"Character\",\"name\":\"Heading 4 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 5 Char', '{\"type\":\"Character\",\"name\":\"Heading 5 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 6 Char', '{\"type\":\"Character\",\"name\":\"Heading 6 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Hyperlink', '{\"type\":\"Character\",\"name\":\"Hyperlink\",\"basedOn\":\"Default Paragraph Font\",\"next\":\"Normal\",\"characterFormat\":{\"fontColor\":\"#0563C1\",\"underline\": \"Single\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc1', '{\"type\":\"Paragraph\",\"name\":\"Toc1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc2', '{\"type\":\"Paragraph\",\"name\":\"Toc2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :11.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc3', '{\"type\":\"Paragraph\",\"name\":\"Toc3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :22.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc4', '{\"type\":\"Paragraph\",\"name\":\"Toc4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :33.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc5', '{\"type\":\"Paragraph\",\"name\":\"Toc5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :44.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc6', '{\"type\":\"Paragraph\",\"name\":\"Toc6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :55.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc7', '{\"type\":\"Paragraph\",\"name\":\"Toc7\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :66.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc8', '{\"type\":\"Paragraph\",\"name\":\"Toc8\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :77.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc9', '{\"type\":\"Paragraph\",\"name\":\"Toc9\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :88.0,\"afterSpacing\":5.0}}');\n };\n /**\n * @private\n */\n LayoutViewer.prototype.clearDocumentItems = function () {\n this.headersFooters = [];\n this.fields = [];\n this.bookmarks.clear();\n this.styles.clear();\n this.characterFormat.clearFormat();\n this.paragraphFormat.clearFormat();\n };\n /**\n * @private\n */\n LayoutViewer.prototype.getAbstractListById = function (id) {\n if (isNullOrUndefined(this.abstractLists)) {\n return undefined;\n }\n for (var i = 0; i < this.abstractLists.length; i++) {\n var abstractList = this.abstractLists[i];\n if (abstractList instanceof WAbstractList && abstractList.abstractListId === id) {\n return abstractList;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.getListById = function (id) {\n if (isNullOrUndefined(this.lists)) {\n return undefined;\n }\n for (var i = 0; i < this.lists.length; i++) {\n if (!isNullOrUndefined(this.lists[i]) && this.lists[i].listId === id) {\n return this.lists[i];\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n LayoutViewer.getListLevelNumber = function (listLevel) {\n if (listLevel.ownerBase instanceof WLevelOverride) {\n return listLevel.ownerBase.levelNumber;\n }\n else if (listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(listLevel.ownerBase.levels)) {\n return listLevel.ownerBase.levels.indexOf(listLevel);\n }\n else {\n return -1;\n }\n };\n /**\n * Gets the bookmarks.\n * @private\n */\n LayoutViewer.prototype.getBookmarks = function (includeHidden) {\n var bookmarks = [];\n for (var i = 0; i < this.bookmarks.keys.length; i++) {\n var bookmark = this.bookmarks.keys[i];\n if (includeHidden || bookmark.indexOf('_') !== 0) {\n bookmarks.push(bookmark);\n }\n }\n return bookmarks;\n };\n /**\n * Initializes components.\n * @private\n */\n LayoutViewer.prototype.initializeComponents = function () {\n var element = this.owner.element;\n if (isNullOrUndefined(element)) {\n return;\n }\n var viewer = this;\n this.viewerContainer = createElement('div', { id: this.owner.containerId + '_viewerContainer' });\n this.viewerContainer.style.cssText = 'position:relative;backgroundColor:#FBFBFB;overflow:auto';\n element.appendChild(this.viewerContainer);\n this.viewerContainer.tabIndex = 0;\n this.viewerContainer.style.outline = 'none';\n this.pageContainer = createElement('div', { id: this.owner.containerId + '_pageContainer', className: 'e-de-background' });\n this.viewerContainer.appendChild(this.pageContainer);\n this.pageContainer.style.top = '0px';\n this.pageContainer.style.left = '0px';\n this.pageContainer.style.position = 'relative';\n this.pageContainer.style.pointerEvents = 'none';\n this.editableDiv = document.createElement('div');\n this.editableDiv.contentEditable = 'true';\n this.editableDiv.style.position = 'fixed';\n this.editableDiv.style.left = '-150em';\n this.editableDiv.style.width = '100%';\n this.editableDiv.style.height = '100%';\n this.editableDiv.id = element.id + '_editableDiv';\n document.body.appendChild(this.editableDiv);\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.initializeImageResizer();\n }\n this.updateViewerSizeInternal(element);\n this.layout = new Layout(this);\n this.textHelper = new TextHelper(this);\n this.zoomModule = new Zoom(this);\n // let locale: L10n = new L10n('documenteditor', this.owner.defaultLocale);\n // locale.setLocale(this.owner.locale);\n // setCulture(this.owner.locale);\n this.initTouchEllipse();\n this.wireEvent();\n };\n /**\n * Wires events and methods.\n */\n LayoutViewer.prototype.wireEvent = function () {\n if (!isNullOrUndefined(this.selection)) {\n this.selection.initCaret();\n }\n this.editableDiv.addEventListener('paste', this.onPaste);\n if (Browser.isIE) {\n this.editableDiv.addEventListener('keypress', this.onKeyPressInternal);\n }\n else {\n this.editableDiv.addEventListener('input', this.onTextInputInternal);\n }\n this.editableDiv.addEventListener('blur', this.onFocusOut);\n this.editableDiv.addEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.addEventListener('compositionstart', this.compositionStart);\n this.editableDiv.addEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.addEventListener('compositionend', this.compositionEnd);\n this.viewerContainer.addEventListener('scroll', this.scrollHandler);\n this.viewerContainer.addEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.addEventListener('keydown', this.onKeyDownInternal);\n this.viewerContainer.addEventListener('mousemove', this.onMouseMoveInternal);\n this.viewerContainer.addEventListener('contextmenu', this.onContextMenu);\n this.viewerContainer.addEventListener('dblclick', this.onDoubleTap);\n this.viewerContainer.addEventListener('mouseup', this.onMouseUpInternal);\n window.addEventListener('resize', this.onWindowResize);\n window.addEventListener('keyup', this.onKeyUpInternal);\n window.addEventListener('mouseup', this.onImageResizer);\n window.addEventListener('touchend', this.onImageResizer);\n this.viewerContainer.addEventListener('touchstart', this.onTouchStartInternal);\n this.viewerContainer.addEventListener('touchmove', this.onTouchMoveInternal);\n this.viewerContainer.addEventListener('touchend', this.onTouchUpInternal);\n if (navigator.userAgent.match('Firefox')) {\n this.viewerContainer.addEventListener('DOMMouseScroll', this.zoomModule.onMouseWheelInternal);\n }\n this.viewerContainer.addEventListener('mousewheel', this.zoomModule.onMouseWheelInternal);\n };\n /**\n * Initializes dialog template.\n */\n LayoutViewer.prototype.initDialog = function () {\n if (!this.dialogInternal) {\n this.dialogTarget = createElement('div', { className: 'e-de-dlg-target' });\n document.body.appendChild(this.dialogTarget);\n this.dialogInternal = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, visible: false, width: '1px', isModal: true, position: { X: 'center', Y: 'center' }, zIndex: 20\n });\n this.dialogInternal.open = this.selection.hideCaret;\n this.dialogInternal.beforeClose = this.updateFocus;\n this.dialogInternal.appendTo(this.dialogTarget);\n }\n };\n /**\n * Initializes dialog template.\n */\n LayoutViewer.prototype.initDialog2 = function () {\n if (!this.dialogInternal2) {\n var target = createElement('div', { className: 'e-de-dlg-target' });\n document.body.appendChild(target);\n this.dialogInternal2 = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, visible: false, width: '1px', isModal: true, position: { X: 'center', Y: 'Top' }, zIndex: 10\n });\n this.dialogInternal2.appendTo(target);\n }\n };\n /**\n * Clears the context.\n * @private\n */\n LayoutViewer.prototype.clearContent = function () {\n this.containerContext.clearRect(0, 0, this.containerCanvas.width, this.containerCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n };\n /**\n * Fired when the document gets changed.\n * @param {WordDocument} document\n */\n LayoutViewer.prototype.onDocumentChanged = function (sections) {\n this.clearContent();\n if (this.owner.editorModule) {\n this.owner.editorModule.tocStyles = {};\n this.owner.editorModule.tocBookmarkId = 0;\n }\n this.heightInfoCollection = {};\n this.owner.isDocumentLoaded = false;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].bodyWidgets[0].destroy();\n }\n this.pages = [];\n if (!isNullOrUndefined(this.renderedLists)) {\n this.renderedLists.clear();\n }\n if (!isNullOrUndefined(this.owner.editorHistory)) {\n this.owner.editorHistory.destroy();\n }\n this.owner.isDocumentLoaded = true;\n this.layout.isInitialLoad = true;\n this.layout.layoutItems(sections);\n if (this.owner.selection) {\n this.owner.selection.selectRange(this.owner.documentStart, this.owner.documentStart);\n }\n if (this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n }\n this.owner.fireDocumentChange();\n };\n /**\n * Initialize touch ellipse.\n */\n LayoutViewer.prototype.initTouchEllipse = function () {\n var style = 'height: 30px;width: 30px;position: absolute;background-color: transparent;margin: 0px;padding: 0px;z-index:5';\n // tslint:disable-next-line:max-line-length\n var ellipse = ' height: 12px;width: 12px;border-radius: 50%;background-color: white;position: absolute;margin: 0px 6px 0px 6px;border-width: 2px;border-style: solid;border-color: #000000;';\n this.touchStart = createElement('div', { className: 'e-touch-ellipse', styles: style });\n var start = createElement('div', { styles: ellipse });\n this.touchEnd = createElement('div', { className: 'e-touch-ellipse', styles: style });\n this.touchStart.style.display = 'none';\n var end = createElement('div', { styles: ellipse });\n this.touchStart.appendChild(start);\n this.touchEnd.appendChild(end);\n this.touchEnd.style.display = 'none';\n this.viewerContainer.appendChild(this.touchStart);\n this.viewerContainer.appendChild(this.touchEnd);\n };\n /**\n * Updates touch mark position.\n * @private\n */\n LayoutViewer.prototype.updateTouchMarkPosition = function () {\n if (this.touchStart.style.display !== 'none' && !isNullOrUndefined(this.selection)) {\n if (!this.selection.isEmpty) {\n var y = this.selection.getCaretBottom(this.selection.start, false);\n var page = this.selection.getPage(this.selection.start.paragraph);\n var viewer = this;\n // tslint:disable-next-line:max-line-length\n var pageTop = (page.boundingRectangle.y - viewer.pageGap * (this.pages.indexOf(page) + 1)) * this.zoomFactor + viewer.pageGap * (this.pages.indexOf(page) + 1);\n // tslint:disable-next-line:max-line-length\n this.touchStart.style.left = page.boundingRectangle.x + (Math.round(this.selection.start.location.x) * this.zoomFactor - 14) + 'px';\n this.touchStart.style.top = pageTop + ((y) * this.zoomFactor) + 'px';\n if (!this.selection.isEmpty) {\n y = this.selection.getCaretBottom(this.selection.end, false);\n page = this.selection.getPage(this.selection.end.paragraph);\n }\n // tslint:disable-next-line:max-line-length\n this.touchEnd.style.left = page.boundingRectangle.x + (Math.round(this.selection.end.location.x) * this.zoomFactor - 14) + 'px';\n this.touchEnd.style.top = pageTop + (y * this.zoomFactor) + 'px';\n }\n else {\n this.selection.updateCaretPosition();\n }\n }\n };\n LayoutViewer.prototype.isSelectionInListText = function (cursorPoint) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget) && widget.children[0] instanceof ListTextElementBox) {\n var left = this.getLeftValue(widget);\n var width = widget.children[0].width;\n var height = widget.children[0].height;\n if (this.isInsideRect(left, widget.paragraph.y, width, height, cursorPoint)) {\n this.selectionLineWidget = widget;\n return true;\n }\n }\n return false;\n };\n /**\n * Check whether touch point is inside the rectangle or not.\n * @param x\n * @param y\n * @param width\n * @param height\n * @param touchPoint\n * @private\n */\n LayoutViewer.prototype.isInsideRect = function (x, y, width, height, touchPoint) {\n if ((touchPoint.x > x && touchPoint.x <= x + width) && (touchPoint.y > y && touchPoint.y <= y + height)) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.getLeftValue = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.selection.isParagraphFirstLine(widget)) {\n if (paragraphFormat.textAlignment === 'Right') {\n left -= HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n left -= HelperMethods.convertPointToPixel(paragraphFormat.leftIndent);\n }\n else {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n }\n var element = widget.children[0];\n if (element instanceof ListTextElementBox) {\n left += element.margin.left;\n }\n return left;\n };\n /**\n * Checks whether left mouse button is pressed or not.\n */\n LayoutViewer.prototype.isLeftButtonPressed = function (event) {\n this.isTouchInput = false;\n var button = event.which || event.button;\n return button === 1;\n };\n /**\n * Gets touch offset value.\n */\n LayoutViewer.prototype.getTouchOffsetValue = function (event) {\n var targetElement = this.viewerContainer;\n var offset = targetElement.getBoundingClientRect();\n var touchOffsetValues = event.touches[0];\n if (isNullOrUndefined(touchOffsetValues)) {\n touchOffsetValues = event.changedTouches[0];\n }\n var offsetX = touchOffsetValues.pageX - offset.left;\n var offsetY = touchOffsetValues.pageY - offset.top;\n return new Point(offsetX, offsetY);\n };\n /**\n * Fired on pinch zoom in.\n * @param {TouchEvent} event\n */\n LayoutViewer.prototype.onPinchInInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor - 0.01;\n if (updatedZoomFactor < 5 && updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor - 0.01;\n }\n if (updatedZoomFactor < 0.1) {\n updatedZoomFactor = 0.1;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n /**\n * Fired on pinch zoom out.\n * @param {TouchEvent} event\n */\n LayoutViewer.prototype.onPinchOutInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor + 0.01;\n if (updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor + 0.01;\n }\n if (updatedZoomFactor > 5) {\n updatedZoomFactor = 5;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n /**\n * Gets page width.\n * @private\n */\n LayoutViewer.prototype.getPageWidth = function (page) {\n var width = page.boundingRectangle.width;\n return width;\n };\n /**\n * Removes specified page.\n * @private\n */\n LayoutViewer.prototype.removePage = function (page) {\n if (this.currentPage === page) {\n this.currentPage = undefined;\n }\n var index = this.pages.indexOf(page);\n // if (index > -1) {\n this.pages.splice(index, 1);\n // } \n //this.removeRenderedPages();\n var viewer = this;\n if (!isNullOrUndefined(viewer.visiblePages)) {\n if ((viewer.visiblePages).indexOf(page) > -1) {\n var pageIndex = (viewer.visiblePages).indexOf(page);\n (viewer.visiblePages).splice(pageIndex, 1);\n }\n }\n //(viewer as PageLayoutViewer).visiblePages.remove(page);\n var height = 0;\n for (var i = 0; i < this.pages.length; i++) {\n height = height + this.pages[i].boundingRectangle.height;\n }\n //Updates the vertical height.\n height -= page.boundingRectangle.height + 20;\n //ToDo:Update horizontal width, if removed page has max width.\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n if (index !== -1) {\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n // tslint:disable-next-line:max-line-length\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n page.repeatHeaderRowTableWidget = false;\n }\n }\n };\n // private removeRenderedPages(): void {\n // for (let i: number = 0; i < this.pages.length; i++) {\n // this.clearContainer(this.pages[i]);\n // }\n // }\n /**\n * Updates viewer size on window resize.\n * @private\n */\n LayoutViewer.prototype.updateViewerSize = function () {\n var viewer = this;\n var element = this.owner.getDocumentEditorElement();\n viewer.updateViewerSizeInternal(element);\n viewer.updateScrollBars();\n if (!isNullOrUndefined(this.selection)) {\n this.selection.updateCaretPosition();\n }\n };\n /**\n * Updates viewer size.\n */\n LayoutViewer.prototype.updateViewerSizeInternal = function (element) {\n if (!isNullOrUndefined(element)) {\n var rect = element.getBoundingClientRect();\n var width = 0;\n var height = 0;\n height = rect.height > 0 ? rect.height : 200;\n if (this.owner.optionsPaneModule && this.owner.optionsPaneModule.isOptionsPaneShow) {\n var optionsRect = this.owner.optionsPaneModule.optionsPane.getBoundingClientRect();\n width = (rect.width - optionsRect.width) > 0 ? (rect.width - optionsRect.width) : 200;\n }\n else {\n width = rect.width > 0 ? rect.width : 200;\n }\n this.viewerContainer.style.height = height.toString() + 'px';\n this.viewerContainer.style.width = Math.ceil(width) + 'px';\n this.visibleBoundsIn = new Rect(0, 0, width, height);\n this.containerCanvas.width = width;\n this.containerCanvas.height = height;\n this.selectionCanvas.width = width;\n this.selectionCanvas.height = height;\n }\n };\n /**\n * Updates client area for block.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForBlock = function (block, beforeLayout, tableCollection) {\n var leftIndent = HelperMethods.convertPointToPixel(block.leftIndent);\n var rightIndent = HelperMethods.convertPointToPixel(block.rightIndent);\n if (beforeLayout) {\n if (block instanceof TableWidget && tableCollection) {\n var tableWidget = tableCollection[0];\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n //Updates the location of last item.\n tableWidget = tableCollection[tableCollection.length - 1];\n tableWidget.x = this.clientActiveArea.x;\n tableWidget.y = this.clientActiveArea.y;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n else {\n // tslint:disable-next-line:max-line-length\n if (block instanceof TableWidget && !isNullOrUndefined(block.tableFormat) && block.tableFormat.tableAlignment !== 'Left') {\n if (!block.isGridUpdated) {\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n var tableWidth = block.getMaxRowWidth(block.getTableClientWidth(block.getOwnerWidth(false)));\n // Fore resizing table, the tableholder table width taken for updated width. \n // Since, the columns will be cleared if we performed resizing.\n if (this.owner.editor && this.owner.editor.tableResize.currentResizingTable === block\n && this.owner.editor.tableResize.resizerPosition === 0) {\n tableWidth = block.tableHolder.tableWidth;\n }\n tableWidth = HelperMethods.convertPointToPixel(tableWidth);\n if (block.tableFormat.tableAlignment === 'Center') {\n leftIndent = (this.clientArea.width - tableWidth) / 2;\n }\n else {\n leftIndent = this.clientArea.width - tableWidth;\n }\n this.tableLefts.push(leftIndent);\n }\n this.clientActiveArea.x = this.clientArea.x = this.clientArea.x + leftIndent;\n var width = this.clientArea.width - (leftIndent + rightIndent);\n this.clientActiveArea.width = this.clientArea.width = width > 0 ? width : 0;\n // tslint:disable-next-line:max-line-length\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n }\n else {\n // tslint:disable-next-line:max-line-length\n if (block instanceof TableWidget && block.tableFormat.tableAlignment !== 'Left' && this.tableLefts.length > 0) {\n leftIndent = this.tableLefts.pop();\n }\n this.clientActiveArea.x = this.clientArea.x = this.clientArea.x - leftIndent;\n var width = this.clientArea.width + leftIndent + rightIndent;\n this.clientActiveArea.width = this.clientArea.width = width > 0 ? width : 0;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n /**\n * Updates client active area left.\n * @private\n */\n LayoutViewer.prototype.cutFromLeft = function (x) {\n if (x < this.clientActiveArea.x) {\n x = this.clientActiveArea.x;\n }\n if (x > this.clientActiveArea.right && this.textWrap) {\n x = this.clientActiveArea.right;\n }\n this.clientActiveArea.width = this.clientActiveArea.right > x ? this.clientActiveArea.right - x : 0;\n this.clientActiveArea.x = x;\n };\n /**\n * Updates client active area top.\n * @private\n */\n LayoutViewer.prototype.cutFromTop = function (y) {\n if (y < this.clientActiveArea.y) {\n y = this.clientActiveArea.y;\n }\n if (y > this.clientActiveArea.bottom) {\n y = this.clientActiveArea.bottom;\n }\n this.clientActiveArea.height = this.clientActiveArea.bottom - y;\n this.clientActiveArea.x = this.clientArea.x;\n this.clientActiveArea.width = this.clientArea.width;\n this.clientActiveArea.y = y;\n };\n /**\n * Updates client width.\n * @private\n */\n LayoutViewer.prototype.updateClientWidth = function (width) {\n this.clientActiveArea.x -= width;\n if (this.clientActiveArea.width + width > 0) {\n this.clientActiveArea.width += width;\n }\n else {\n this.clientActiveArea.width = 0;\n }\n };\n /**\n * Inserts page in specified index.\n * @private\n */\n LayoutViewer.prototype.insertPage = function (index, page) {\n if (this.pages.indexOf(page) > -1) {\n this.pages.splice(this.pages.indexOf(page), 1);\n }\n this.pages.splice(index, 0, page);\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n }\n };\n /**\n * Updates client area.\n * @private\n */\n LayoutViewer.prototype.updateClientArea = function (sectionFormat, page) {\n var top = 0;\n var headerDistance = 48;\n var footerDistance = 48;\n var pageHeight = HelperMethods.convertPointToPixel(sectionFormat.pageHeight);\n var bottomMargin = HelperMethods.convertPointToPixel(sectionFormat.bottomMargin);\n if (!isNullOrUndefined(sectionFormat)) {\n top = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n }\n if (!isNullOrUndefined(page.headerWidget)) {\n top = Math.min(Math.max(headerDistance + page.headerWidget.height, top), pageHeight / 100 * 40);\n }\n var bottom = 0.667 + bottomMargin;\n if (!isNullOrUndefined(page.footerWidget)) {\n bottom = 0.667 + Math.min(pageHeight / 100 * 40, Math.max(footerDistance + page.footerWidget.height, bottomMargin));\n }\n var width = 0;\n var height = 0;\n if (!isNullOrUndefined(sectionFormat)) {\n width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n height = pageHeight - top - bottom;\n }\n if (width < 0) {\n width = 0;\n }\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), top, width, pageHeight - top - bottom);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n };\n /**\n * Updates client area left or top position.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaTopOrLeft = function (tableWidget, beforeLayout) {\n if (beforeLayout) {\n this.clientActiveArea.y = this.clientActiveArea.y + tableWidget.topBorderWidth;\n this.clientActiveArea.x = this.clientActiveArea.x + tableWidget.leftBorderWidth;\n }\n };\n /**\n * Updates client area for table.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForTable = function (tableWidget) {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n };\n /**\n * Updates client area for row.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForRow = function (row, beforeLayout) {\n // tslint:disable-next-line:max-line-length\n var tableWidget = row.ownerTable;\n if (beforeLayout) {\n //tslint:disable:no-empty\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n /**\n * Updates client area for cell.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForCell = function (cell, beforeLayout) {\n // tslint:disable-next-line:max-line-length\n var rowWidget = cell.ownerRow;\n var cellWidget = cell;\n if (beforeLayout) {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x;\n this.clientActiveArea.y = cellWidget.y;\n this.clientActiveArea.width = this.clientArea.width = cellWidget.width > 0 ? cellWidget.width : 0;\n if (this instanceof PageLayoutViewer) {\n this.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x + cellWidget.width + cellWidget.margin.right;\n if (rowWidget.x + rowWidget.width - this.clientArea.x < 0) {\n this.clientActiveArea.width = this.clientArea.width = 0;\n }\n else {\n this.clientActiveArea.width = this.clientArea.width = rowWidget.x + rowWidget.width - this.clientArea.x;\n }\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea.y = cellWidget.y - cellWidget.margin.top - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n if (!cell.ownerTable.isInsideTable) {\n this.clientActiveArea.height = this.clientArea.bottom - rowWidget.y > 0 ? this.clientArea.bottom - rowWidget.y : 0;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n /**\n * Updates the client area based on widget.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaByWidget = function (widget) {\n this.clientArea.x = widget.x;\n this.clientArea.y = widget.y;\n this.clientActiveArea.x = widget.x;\n this.clientActiveArea.y = widget.y;\n };\n //Widget\n /**\n * Updates client area location.\n * @param widget\n * @param area\n * @private\n */\n LayoutViewer.prototype.updateClientAreaLocation = function (widget, area) {\n widget.x = area.x;\n widget.y = area.y;\n widget.width = area.width;\n };\n /**\n * Updates text position for selection.\n * @param cursorPoint\n * @param tapCount\n * @param clearMultiSelection\n * @private\n */\n LayoutViewer.prototype.updateTextPositionForSelection = function (cursorPoint, tapCount) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n this.selection.updateTextPosition(widget, cursorPoint);\n }\n if (tapCount > 1) {\n this.isMouseDown = false;\n this.useTouchSelectionMark = false;\n if (this.pages.length === 0) {\n return;\n }\n //Double tap/triple tap selection\n if (!isNullOrUndefined(this.currentPage) && !isNullOrUndefined(this.owner.selection.start)) {\n if (tapCount % 2 === 0) {\n this.owner.selection.selectCurrentWord();\n }\n else {\n this.owner.selection.selectCurrentParagraph();\n }\n }\n }\n };\n /**\n * Scrolls to specified position.\n * @param startPosition\n * @param endPosition\n * @private\n */\n LayoutViewer.prototype.scrollToPosition = function (startPosition, endPosition) {\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizing\n || this.isMouseDownInFooterRegion || this.isRowOrCellResizing) {\n return;\n }\n var lineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, true);\n if (isNullOrUndefined(lineWidget)) {\n return;\n }\n var top = this.selection.getTop(lineWidget);\n if (this.isMouseDown) {\n var prevLineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, false);\n var prevTop = this.selection.getTop(prevLineWidget);\n if (prevLineWidget !== lineWidget && endPosition.location.y >= prevTop) {\n lineWidget = prevLineWidget;\n }\n }\n var height = lineWidget.height;\n //Gets current page.\n var endPage = this.selection.getPage(lineWidget.paragraph);\n this.currentPage = endPage;\n var x = 0;\n var y = 0;\n var viewer = this;\n var horizontalWidth = 0;\n var isPageLayout = viewer instanceof PageLayoutViewer;\n if (isPageLayout) {\n var pageLayout = viewer;\n if (isNullOrUndefined(endPage)) {\n return;\n }\n var pageWidth = endPage.boundingRectangle.width;\n x = (this.visibleBounds.width - pageWidth * this.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n // tslint:disable-next-line:max-line-length\n y = endPage.boundingRectangle.y * this.zoomFactor + (this.pages.indexOf(endPage) + 1) * viewer.pageGap * (1 - this.zoomFactor);\n }\n var scrollTop = this.containerTop;\n var scrollLeft = this.containerLeft;\n var pageHeight = this.visibleBounds.height;\n var caretInfo = this.selection.updateCaretSize(this.owner.selection.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (endPosition.location.x) * this.zoomFactor;\n y += (endPosition.location.y + topMargin) * this.zoomFactor;\n //vertical scroll bar update\n if ((scrollTop + 20) > y) {\n this.viewerContainer.scrollTop = (y - 10);\n }\n else if (scrollTop + pageHeight < y + caretHeight) {\n this.viewerContainer.scrollTop = y + caretHeight - pageHeight + 10;\n }\n else {\n this.selection.updateCaretToPage(startPosition, endPage);\n }\n this.selection.updateCaretToPage(startPosition, endPage);\n var scrollBarWidth = this.viewerContainer.offsetWidth - this.viewerContainer.clientWidth;\n if (scrollLeft > x) {\n this.viewerContainer.scrollLeft = x - (viewer.pageContainer.offsetWidth / 100) * 20;\n }\n else if (scrollLeft + this.visibleBounds.width < x + scrollBarWidth) {\n this.viewerContainer.scrollLeft = scrollLeft + (viewer.pageContainer.offsetWidth / 100) * 15 + scrollBarWidth;\n }\n };\n /**\n * Gets line widget using cursor point.\n * @private\n */\n LayoutViewer.prototype.getLineWidget = function (cursorPoint) {\n return this.getLineWidgetInternal(cursorPoint, false);\n };\n /**\n * Gets line widget.\n * @private\n */\n LayoutViewer.prototype.getLineWidgetInternal = function (cursorPoint, isMouseDragged) {\n var widget = undefined;\n if (!isNullOrUndefined(this.currentPage)) {\n var childWidgets = void 0;\n if (this.owner.enableHeaderAndFooter) {\n var page = this.currentPage;\n var pageTop = this.selection.getPageTop(page);\n var pageBottom = page.boundingRectangle.height;\n var headerHeight = Math.max((page.headerWidget.y + page.headerWidget.height), HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin)) * this.zoomFactor;\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = (page.boundingRectangle.height -\n Math.max(page.footerWidget.height + footerDistance, footerDistance * 2));\n if (isMouseDragged) {\n if (this.isBlockInHeader(this.selection.start.paragraph)) {\n childWidgets = this.currentPage.headerWidget;\n }\n else {\n childWidgets = this.currentPage.footerWidget;\n }\n }\n else {\n if (cursorPoint.y <= pageBottom && cursorPoint.y >= footerHeight) {\n childWidgets = this.currentPage.footerWidget;\n }\n else if ((cursorPoint.y) >= 0 && (cursorPoint.y) <= headerHeight) {\n childWidgets = this.currentPage.headerWidget;\n }\n }\n if (isNullOrUndefined(childWidgets)) {\n return undefined;\n }\n return this.selection.getLineWidgetBodyWidget(childWidgets, cursorPoint);\n }\n else {\n for (var i = 0; i < this.currentPage.bodyWidgets.length; i++) {\n var bodyWidgets = this.currentPage.bodyWidgets[i];\n widget = this.selection.getLineWidgetBodyWidget(bodyWidgets, cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n }\n return widget;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.isBlockInHeader = function (block) {\n while (!(block.containerWidget instanceof HeaderFooterWidget)) {\n if (!block.containerWidget) {\n return false;\n }\n block = block.containerWidget;\n }\n return block.containerWidget.headerFooterType.indexOf('Header') !== -1;\n };\n /**\n * Clears selection highlight.\n * @private\n */\n LayoutViewer.prototype.clearSelectionHighlight = function () {\n var canClear = true;\n canClear = (!this.isControlPressed || !this.isMouseDown);\n // if (this.owner.selection.selectionRanges.length > 0 && canClear) {\n if (this.owner.selection.clearSelectionHighlightInSelectedWidgets()) {\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n }\n // } else if (!isNullOrUndefined(this.owner.selection.currentSelectionRange) && this.isMouseDown) {\n // this.owner.selection.currentSelectionRange.clearSelectionHighlight();\n // }\n //this.renderVisiblePages();\n };\n /**\n * @private\n */\n LayoutViewer.prototype.removeEmptyPages = function () {\n var scrollToLastPage = false;\n var viewer = this;\n for (var j = 0; j < this.pages.length; j++) {\n var page = this.pages[j];\n if (page.bodyWidgets.length === 0 || page.bodyWidgets[0].childWidgets.length === 0) {\n // tslint:disable-next-line:max-line-length\n if (j === this.pages.length - 1 && viewer instanceof PageLayoutViewer && viewer.visiblePages.indexOf(this.pages[j]) !== -1) {\n scrollToLastPage = true;\n }\n this.removePage(this.pages[j]);\n j--;\n }\n }\n if (scrollToLastPage) {\n this.scrollToBottom();\n }\n };\n /**\n * @private\n */\n LayoutViewer.prototype.scrollToBottom = function () {\n if (this.selection.start.paragraph && this.selection.start.paragraph.bodyWidget) {\n var page = this.selection.start.paragraph.bodyWidget.page;\n var containerHeight = this.visibleBounds.height;\n this.viewerContainer.scrollTop = page.boundingRectangle.bottom - containerHeight;\n }\n };\n /**\n * Returns the field code result.\n * @private\n */\n LayoutViewer.prototype.getFieldResult = function (fieldBegin, page) {\n if (!isNullOrUndefined(page) && !isNullOrUndefined(this.selection)) {\n var fieldCode = this.selection.getFieldCode(fieldBegin);\n var fieldCodes = fieldCode.split('\\*');\n if (fieldCodes.length > 1) {\n var fieldCategory = fieldCodes[0].replace(/[^\\w\\s]/gi, '').trim().toLowerCase();\n var fieldPattern = fieldCodes[1].replace(/[^\\w\\s]/gi, '').trim();\n switch (fieldCategory) {\n case 'page':\n return this.getFieldText(fieldPattern, (page.index + 1));\n case 'numpages':\n return this.getFieldText(fieldPattern, page.viewer.pages.length);\n default:\n break;\n }\n }\n }\n return '';\n };\n /**\n * Returns field text.\n */\n LayoutViewer.prototype.getFieldText = function (pattern, value) {\n switch (pattern) {\n case 'ALPHABETIC':\n return this.layout.getAsLetter(value).toUpperCase();\n case 'alphabetic':\n return this.layout.getAsLetter(value).toLowerCase();\n case 'roman':\n return this.layout.getAsRoman(value).toLowerCase();\n case 'ROMAN':\n return this.layout.getAsRoman(value).toUpperCase();\n default:\n return value.toString();\n }\n };\n /**\n * Destroys the internal objects maintained for control.\n */\n LayoutViewer.prototype.destroy = function () {\n if (!isNullOrUndefined(this.owner)) {\n this.unWireEvent();\n }\n this.pages = [];\n this.pages = undefined;\n this.fieldStacks = [];\n this.fieldStacks = undefined;\n this.splittedCellWidgets = [];\n this.splittedCellWidgets = undefined;\n this.fields = [];\n this.fields = undefined;\n if (this.layout) {\n this.layout.destroy();\n }\n this.layout = undefined;\n if (!isNullOrUndefined(this.render)) {\n this.render.destroy();\n }\n this.render = undefined;\n if (this.dialogInternal) {\n this.dialogInternal.destroy();\n }\n this.dialogInternal = undefined;\n if (this.dialogTarget && this.dialogTarget.parentElement) {\n this.dialogTarget.parentElement.removeChild(this.dialogTarget);\n }\n this.dialogTarget = undefined;\n if (!isNullOrUndefined(this.touchStart)) {\n this.touchStart.innerHTML = '';\n }\n if (this.textHelper) {\n this.textHelper.destroy();\n }\n this.textHelper = undefined;\n this.touchStart = undefined;\n if (!isNullOrUndefined(this.touchEnd)) {\n this.touchEnd.innerHTML = '';\n }\n this.touchEnd = undefined;\n if (!isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn.innerHTML = '';\n }\n this.containerCanvasIn = undefined;\n if (!isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn.innerHTML = '';\n }\n this.selectionCanvasIn = undefined;\n if (!isNullOrUndefined(this.editableDiv)) {\n this.editableDiv.innerHTML = '';\n this.editableDiv.parentElement.removeChild(this.editableDiv);\n }\n this.editableDiv = undefined;\n if (!isNullOrUndefined(this.pageContainer)) {\n this.pageContainer.innerHTML = '';\n }\n this.pageContainer = undefined;\n if (!isNullOrUndefined(this.viewerContainer)) {\n this.viewerContainer.innerHTML = '';\n }\n this.viewerContainer = undefined;\n this.owner = undefined;\n this.heightInfoCollection = undefined;\n };\n /**\n * Un-Wires events and methods\n */\n LayoutViewer.prototype.unWireEvent = function () {\n this.viewerContainer.removeEventListener('scroll', this.scrollHandler);\n this.viewerContainer.removeEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.removeEventListener('mousemove', this.onMouseMoveInternal);\n if (Browser.isIE) {\n this.editableDiv.removeEventListener('keypress', this.onKeyPressInternal);\n }\n else {\n this.editableDiv.removeEventListener('input', this.onTextInputInternal);\n }\n this.editableDiv.removeEventListener('paste', this.onPaste);\n this.viewerContainer.removeEventListener('contextmenu', this.onContextMenu);\n this.editableDiv.removeEventListener('blur', this.onFocusOut);\n this.editableDiv.removeEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.removeEventListener('compositionstart', this.compositionStart);\n this.editableDiv.removeEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.removeEventListener('compositionend', this.compositionEnd);\n this.viewerContainer.removeEventListener('mouseup', this.onMouseUpInternal);\n this.viewerContainer.removeEventListener('dblclick', this.onDoubleTap);\n window.removeEventListener('resize', this.onWindowResize);\n window.removeEventListener('keyup', this.onKeyUpInternal);\n window.removeEventListener('mouseup', this.onImageResizer);\n window.removeEventListener('touchend', this.onImageResizer);\n };\n return LayoutViewer;\n}());\nexport { LayoutViewer };\n/**\n * @private\n */\nvar PageLayoutViewer = /** @class */ (function (_super) {\n __extends(PageLayoutViewer, _super);\n /**\n * Initialize the constructor of PageLayoutViewer\n */\n function PageLayoutViewer(owner) {\n var _this = _super.call(this, owner) || this;\n _this.pageLeft = 30;\n /**\n * @private\n */\n _this.pageGap = 20;\n /**\n * @private\n */\n _this.visiblePages = [];\n if (isNullOrUndefined(owner) || isNullOrUndefined(owner.element)) {\n return _this;\n }\n return _this;\n }\n /**\n * Creates new page.\n * @private\n */\n PageLayoutViewer.prototype.createNewPage = function (section, index) {\n var viewer = this;\n var yPos = this.pageGap;\n if (this.pages.length > 0) {\n yPos = this.pages[this.pages.length - 1].boundingRectangle.bottom + this.pageGap;\n }\n var page = new Page();\n page.viewer = this;\n // tslint:disable-next-line:max-line-length\n var pageWidth = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth) : 816;\n // tslint:disable-next-line:max-line-length\n var pageHeight = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight) : 1056;\n var xPos = (this.visibleBounds.width - pageWidth * this.zoomFactor) / 2;\n if (xPos < this.pageLeft) {\n xPos = this.pageLeft;\n }\n page.boundingRectangle = new Rect(xPos, yPos, pageWidth, pageHeight);\n if (isNullOrUndefined(index)) {\n this.pages.push(page);\n }\n else {\n this.pages.splice(index, 0, page);\n }\n this.updateClientArea(section.sectionFormat, page);\n page.bodyWidgets.push(section);\n page.bodyWidgets[page.bodyWidgets.length - 1].page = page;\n this.layout.layoutHeaderFooter(section, viewer, page);\n this.updateClientArea(section.sectionFormat, page);\n return page;\n };\n /**\n * Updates cursor.\n */\n PageLayoutViewer.prototype.updateCursor = function (event) {\n var hyperlinkField = undefined;\n var div = this.viewerContainer;\n var point = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.findFocusedPage(point, true);\n var widget = this.getLineWidget(touchPoint);\n var widgetInfo;\n var left;\n var top;\n var editor = !this.owner.isReadOnlyMode ? this.owner.editorModule : undefined;\n var isRowResize = editor ? editor.tableResize.isInRowResizerArea(touchPoint) : false;\n var isCellResize = editor ? editor.tableResize.isInCellResizerArea(touchPoint) : false;\n var resizePosition = '';\n if (this.owner.enableImageResizerMode) {\n var resizeObj = this.owner.imageResizerModule.getImagePoint(touchPoint);\n this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n resizePosition = resizeObj.resizePosition;\n }\n var lineLeft = 0;\n if (!isNullOrUndefined(widget)) {\n lineLeft = this.selection.getLineStartLeft(widget);\n hyperlinkField = this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint);\n widgetInfo = this.selection.updateTextPositionIn(widget, undefined, 0, touchPoint, true);\n left = this.selection.getLeft(widget);\n top = this.selection.getTop(widget);\n this.selection.setHyperlinkContentToToolTip(hyperlinkField, widget, touchPoint.x);\n }\n if (!isNullOrUndefined(hyperlinkField) && (event.ctrlKey &&\n this.owner.useCtrlClickToFollowHyperlink || !this.owner.useCtrlClickToFollowHyperlink)) {\n div.style.cursor = 'pointer';\n return;\n }\n else if (touchPoint.x >= lineLeft &&\n event.offsetX < (this.visibleBounds.width - (this.visibleBounds.width - this.viewerContainer.clientWidth)) &&\n event.offsetY < (this.visibleBounds.height - (this.visibleBounds.height - this.viewerContainer.clientHeight))) {\n if (this.selection.isEmpty) {\n div.style.cursor = 'text';\n }\n else {\n div.style.cursor = this.selection.checkCursorIsInSelection(widget, touchPoint) ? 'default' : 'text';\n }\n }\n else {\n div.style.cursor = 'default';\n }\n if (!isNullOrUndefined(resizePosition) && resizePosition !== '') {\n div.style.cursor = resizePosition;\n }\n else if (!isNullOrUndefined(widgetInfo) && widgetInfo.isImageSelected && left < touchPoint.x && top < touchPoint.y &&\n left + widget.width > touchPoint.x && top + widget.height > touchPoint.y) {\n div.style.cursor = 'move';\n }\n if (isRowResize) {\n div.style.cursor = 'row-resize';\n }\n else if (isCellResize) {\n div.style.cursor = 'col-resize';\n }\n };\n /**\n * Finds focused page.\n * @private\n */\n PageLayoutViewer.prototype.findFocusedPage = function (currentPoint, updateCurrentPage) {\n var point = new Point(currentPoint.x, currentPoint.y);\n point.x += this.viewerContainer.scrollLeft;\n point.y += this.viewerContainer.scrollTop;\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n var pageTop = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.zoomFactor + this.pageGap * (i + 1);\n var pageHeight = (page.boundingRectangle.height * this.zoomFactor) + this.pageGap;\n var pageLeft = page.boundingRectangle.x;\n var pageRight = ((page.boundingRectangle.right - pageLeft) * this.zoomFactor) + pageLeft;\n if (pageTop <= point.y && pageTop + pageHeight >= point.y) {\n if (updateCurrentPage) {\n this.currentPage = page;\n }\n point.y = (point.y - (pageTop)) / this.zoomFactor;\n if (point.x > pageRight) {\n point.x = page.boundingRectangle.right;\n }\n else if (point.x < pageLeft) {\n point.x = 0;\n }\n else {\n point.x = (point.x - pageLeft) / this.zoomFactor;\n }\n return point;\n }\n }\n return point;\n };\n /**\n * Fired when page fit type changed.\n * @private\n */\n PageLayoutViewer.prototype.onPageFitTypeChanged = function (pageFitType) {\n var width = this.visibleBounds.width;\n var height = this.visibleBounds.height;\n var section = this.visiblePages[0].bodyWidgets[0];\n var pageWidth = HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth);\n var pageHeight = HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight);\n switch (pageFitType) {\n case 'FitOnePage':\n if (height > 0 && pageHeight > 0) {\n var zoomFactor = (this.visibleBounds.height - 2 * this.pageGap - (this.pageGap - 2)) / pageHeight;\n if (zoomFactor === this.zoomFactor) {\n if (!isNullOrUndefined(this.owner.selection) && !isNullOrUndefined(this.owner.selection.start) &&\n !isNullOrUndefined(this.owner.selection.end)) {\n this.scrollToPosition(this.owner.selection.start, this.owner.selection.end);\n }\n }\n else {\n this.zoomFactor = zoomFactor;\n }\n }\n break;\n case 'FitPageWidth':\n if (width > 0 && pageWidth > 0) {\n this.zoomFactor = (this.visibleBounds.width - 80) / pageWidth;\n }\n break;\n default:\n this.zoomFactor = 100 / 100;\n break;\n }\n };\n /**\n * @private\n */\n PageLayoutViewer.prototype.handleZoom = function () {\n var prevScaleFactor = this.preZoomFactor;\n var page = null;\n var verticalHeight = 0;\n var scrollToPosition = false;\n if (this.selection && isNullOrUndefined(this.zoomX && isNullOrUndefined(this.zoomY))) {\n var x = 0;\n var y = 0;\n var endPage = this.selection.getPage(this.selection.end.currentWidget.paragraph);\n x = (this.visibleBounds.width - endPage.boundingRectangle.width * prevScaleFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n // tslint:disable-next-line:max-line-length\n y = endPage.boundingRectangle.y * prevScaleFactor + (this.pages.indexOf(endPage) + 1) * this.pageGap * (1 - prevScaleFactor);\n var caretInfo = this.selection.updateCaretSize(this.owner.selection.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (this.selection.end.location.x) * prevScaleFactor;\n y += (this.selection.end.location.y + topMargin) * prevScaleFactor;\n if (x >= this.containerLeft && x <= this.visibleBounds.width &&\n y >= this.containerTop && y <= this.containerTop + this.visibleBounds.height) {\n scrollToPosition = true;\n }\n }\n for (var i = 0; i < this.pages.length; i++) {\n verticalHeight = verticalHeight + this.pages[i].boundingRectangle.height;\n }\n var horizontalWidth = 0;\n for (var i = 0; i < this.pages.length; i++) {\n if (horizontalWidth < this.pages[i].boundingRectangle.width) {\n horizontalWidth = this.pages[i].boundingRectangle.width;\n }\n }\n // tslint:disable-next-line:max-line-length\n var height = (verticalHeight * this.zoomFactor + (this.pages.length + 1) * this.pageGap * (1 - this.zoomFactor)) - this.visibleBounds.height;\n var horWidth = horizontalWidth * this.zoomFactor - this.visibleBounds.width;\n if (this.visibleBounds.width - horizontalWidth * this.zoomFactor < 60) {\n horWidth += 60;\n }\n //Update Vertical Scroll bar\n if (height > 0) {\n var value = this.containerTop;\n if (this.visiblePages.length > 0) {\n page = this.visiblePages[0];\n // tslint:disable-next-line:max-line-length\n var prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n var zoomY = this.zoomY;\n if (isNullOrUndefined) {\n zoomY = this.visibleBounds.height / 2;\n }\n var prevY = value + zoomY;\n while (prevY > prevPageTop + (page.boundingRectangle.height * prevScaleFactor)) {\n var pageIndex = page.index + 1;\n if (pageIndex === this.pages.length) {\n break;\n }\n page = this.pages[pageIndex];\n // tslint:disable-next-line:max-line-length\n prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n }\n // tslint:disable-next-line:max-line-length\n var currentY = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * this.zoomFactor + (page.index + 1) * this.pageGap\n + ((prevY - prevPageTop) < 0 ? prevY - prevPageTop : (prevY - prevPageTop) * (this.zoomFactor / prevScaleFactor));\n value = currentY - zoomY;\n zoomY = this.visibleBounds.height / 2;\n }\n this.viewerContainer.scrollTop = value;\n }\n else {\n this.viewerContainer.scrollTop = 0;\n }\n // update Horizontal Scroll Bar\n if (horWidth > 0) {\n var value = this.containerLeft;\n if (this.visiblePages.length > 0) {\n if (page === null) {\n page = this.visiblePages[0];\n }\n var zoomX = this.zoomX;\n if (isNullOrUndefined(zoomX)) {\n zoomX = this.visibleBounds.width / 2;\n }\n var prevValue = (page.boundingRectangle.width * prevScaleFactor) / page.boundingRectangle.width;\n var prevX = value + zoomX;\n // tslint:disable-next-line:max-line-length\n var currentX = page.boundingRectangle.x\n + ((prevX - page.boundingRectangle.x) < 0 ? prevX - page.boundingRectangle.x : (prevX - page.boundingRectangle.x) * (this.zoomFactor / prevValue));\n value = currentX - zoomX;\n zoomX = this.visibleBounds.width / 2;\n }\n this.viewerContainer.scrollLeft = value;\n }\n else {\n this.viewerContainer.scrollLeft = 0;\n }\n this.updateScrollBars();\n if (scrollToPosition) {\n this.scrollToPosition(this.selection.start, this.selection.end);\n }\n };\n /**\n * Gets current page header footer.\n * @private\n */\n PageLayoutViewer.prototype.getCurrentPageHeaderFooter = function (section, isHeader) {\n return this.getCurrentHeaderFooter(this.getHeaderFooterType(section, isHeader), section.index);\n };\n /**\n * Get header footer type\n * @private\n */\n PageLayoutViewer.prototype.getHeaderFooterType = function (section, isHeader) {\n var type;\n type = isHeader ? 'OddHeader' : 'OddFooter';\n // tslint:disable-next-line:max-line-length\n if (section.sectionFormat.differentFirstPage && (this.pages.length === 1 || this.pages[this.pages.length - 1].bodyWidgets[0].index !== section.index)) {\n type = isHeader ? 'FirstPageHeader' : 'FirstPageFooter';\n }\n else if (section.sectionFormat.differentOddAndEvenPages && this.pages.length % 2 === 0) {\n type = isHeader ? 'EvenHeader' : 'EvenFooter';\n }\n return type;\n };\n /**\n * Gets current header footer.\n * @param type\n * @param section\n * @private\n */\n PageLayoutViewer.prototype.getCurrentHeaderFooter = function (type, sectionIndex) {\n if (this.headersFooters[sectionIndex]) {\n var index = this.getHeaderFooter(type);\n var headerFooter = this.headersFooters[sectionIndex][index];\n if (!headerFooter) {\n headerFooter = this.createHeaderFooterWidget(type);\n this.headersFooters[sectionIndex][index] = headerFooter;\n }\n return headerFooter;\n }\n else if (sectionIndex > 0) {\n return this.getCurrentHeaderFooter(type, sectionIndex - 1);\n }\n return undefined;\n };\n PageLayoutViewer.prototype.createHeaderFooterWidget = function (type) {\n var headerFooter = new HeaderFooterWidget(type);\n var paragraph = new ParagraphWidget();\n paragraph.childWidgets.push(new LineWidget(paragraph));\n return headerFooter;\n };\n /**\n * Gets header footer.\n * @param type\n * @private\n */\n PageLayoutViewer.prototype.getHeaderFooter = function (type) {\n switch (type) {\n case 'OddHeader':\n return 0;\n case 'OddFooter':\n return 1;\n case 'EvenHeader':\n return 2;\n case 'EvenFooter':\n return 3;\n case 'FirstPageHeader':\n return 4;\n case 'FirstPageFooter':\n return 5;\n }\n };\n /**\n * Updates header footer client area.\n * @private\n */\n PageLayoutViewer.prototype.updateHFClientArea = function (sectionFormat, isHeader) {\n // tslint:disable-next-line:max-line-length\n var width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n if (width < 0) {\n width = 0;\n }\n if (isHeader) {\n // tslint:disable-next-line:max-line-length\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.headerDistance), width, Number.POSITIVE_INFINITY);\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.pageHeight - sectionFormat.footerDistance), width, Number.POSITIVE_INFINITY);\n }\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n };\n /**\n * @private\n */\n PageLayoutViewer.prototype.updateHCFClientAreaWithTop = function (sectionFormat, isHeader, page) {\n this.updateHFClientArea(sectionFormat, isHeader);\n if (!isHeader) {\n if (page.footerWidget.y < this.clientActiveArea.y) {\n this.clientActiveArea.y = page.footerWidget.y;\n this.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n }\n };\n /**\n * Scrolls to the specified page\n * @private\n */\n PageLayoutViewer.prototype.scrollToPage = function (pageIndex) {\n var top = 0;\n for (var i = 0; i < this.pages.length; i++) {\n top = this.pages[i].boundingRectangle.y - (this.pageGap / 2);\n if (i === pageIndex) {\n break;\n }\n }\n this.viewerContainer.scrollTop = top;\n this.updateScrollBars();\n };\n /**\n * Updates scroll bars.\n * @private\n */\n PageLayoutViewer.prototype.updateScrollBars = function () {\n var height = 0;\n for (var i = 0; i < this.pages.length; i++) {\n height = height + this.pages[i].boundingRectangle.height;\n }\n var width = 0;\n for (var i = 0; i < this.pages.length; i++) {\n if (width < this.pages[i].boundingRectangle.width) {\n width = this.pages[i].boundingRectangle.width;\n }\n }\n var containerWidth = (width * this.zoomFactor) + (this.pageLeft * 2);\n var containerHeight = (height * this.zoomFactor) + (this.pages.length + 1) * this.pageGap;\n var viewerWidth = this.visibleBounds.width;\n var viewerHeight = this.visibleBounds.height;\n if (this.visibleBounds.width !== this.viewerContainer.clientWidth) {\n viewerWidth -= (this.visibleBounds.width - this.viewerContainer.clientWidth);\n }\n else if (containerHeight > viewerHeight) {\n viewerWidth -= this.viewerContainer.offsetWidth - this.viewerContainer.clientWidth;\n }\n if (containerWidth > viewerWidth) {\n viewerHeight -= (this.visibleBounds.height - this.viewerContainer.clientHeight);\n }\n width = containerWidth > viewerWidth ? containerWidth : viewerWidth;\n height = containerHeight > viewerHeight ? containerHeight : viewerHeight;\n if (parseInt(this.pageContainer.style.width.replace('px', ''), 10) !== width ||\n parseInt(this.pageContainer.style.height.replace('px', ''), 10) !== width) {\n this.pageContainer.style.width = width.toString() + 'px';\n this.pageContainer.style.height = height.toString() + 'px';\n }\n // if (!isNullOrUndefined(this.selection) && !this.selection.isEmpty) {\n // this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n // }\n var displayPixelRatio = Math.max(1, window.devicePixelRatio || 1);\n if (this.containerCanvas.width !== Math.floor(viewerWidth * displayPixelRatio)\n || this.containerCanvas.height !== Math.floor(viewerHeight * displayPixelRatio)) {\n this.containerCanvas.width = viewerWidth * displayPixelRatio;\n this.containerCanvas.height = viewerHeight * displayPixelRatio;\n this.containerCanvas.style.width = viewerWidth + 'px';\n this.containerCanvas.style.height = viewerHeight + 'px';\n this.containerContext.scale(displayPixelRatio, displayPixelRatio);\n this.selectionCanvas.width = viewerWidth * displayPixelRatio;\n this.selectionCanvas.height = viewerHeight * displayPixelRatio;\n this.selectionCanvas.style.width = viewerWidth + 'px';\n this.selectionCanvas.style.height = viewerHeight + 'px';\n this.selectionContext.scale(displayPixelRatio, displayPixelRatio);\n }\n this.containerContext.globalAlpha = 1;\n this.selectionContext.globalAlpha = 0.4;\n for (var i = 0; i < this.pages.length; i++) {\n var left = (width - this.pages[i].boundingRectangle.width * this.zoomFactor) / 2;\n if (left > this.pageLeft) {\n // tslint:disable-next-line:max-line-length\n this.pages[i].boundingRectangle = new Rect(left, this.pages[i].boundingRectangle.y, this.pages[i].boundingRectangle.width, this.pages[i].boundingRectangle.height);\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.pages[i].boundingRectangle = new Rect(this.pageLeft, this.pages[i].boundingRectangle.y, this.pages[i].boundingRectangle.width, this.pages[i].boundingRectangle.height);\n }\n }\n this.updateScrollBarPosition(containerWidth, containerHeight, viewerWidth, viewerHeight, width, height);\n };\n // tslint:disable-next-line:max-line-length\n PageLayoutViewer.prototype.updateScrollBarPosition = function (containerWidth, containerHeight, viewerWidth, viewerHeight, width, height) {\n var left = 0;\n var viewerHeight1 = parseFloat(this.viewerContainer.style.height);\n var containerHeight1 = parseFloat(this.pageContainer.style.height);\n this.containerTop = this.viewerContainer.scrollTop;\n this.containerCanvas.style.position = 'absolute';\n this.containerCanvas.style.top = this.containerTop.toString() + 'px';\n this.selectionCanvas.style.position = 'absolute';\n this.selectionCanvas.style.top = this.containerTop.toString() + 'px';\n this.containerLeft = this.viewerContainer.scrollLeft;\n this.containerCanvas.style.left = this.containerLeft + 'px';\n this.selectionCanvas.style.left = this.containerLeft + 'px';\n this.updateVisiblePages();\n };\n /**\n * Updates visible pages.\n * @private\n */\n PageLayoutViewer.prototype.updateVisiblePages = function () {\n var left = 0;\n var width = 0;\n // Clears the container first.\n this.visiblePages = [];\n var height = this.visibleBounds.height;\n var vertical = this.viewerContainer.scrollTop;\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.zoomFactor + this.pageGap * (i + 1);\n var pageH = page.boundingRectangle.height * this.zoomFactor;\n var left_1 = page.boundingRectangle.x;\n var isTopFit = y >= vertical && y <= vertical + height;\n var isBottomFit = y + pageH >= vertical && y + pageH <= vertical + height;\n var isMiddleFit = y <= vertical && y + pageH >= vertical + height;\n //UI Virtualization\n if (isTopFit || isBottomFit || isMiddleFit) {\n this.addVisiblePage(page, left_1, y);\n }\n }\n };\n /**\n * Adds visible pages.\n */\n PageLayoutViewer.prototype.addVisiblePage = function (page, x, y) {\n var width = page.boundingRectangle.width * this.zoomFactor;\n var height = page.boundingRectangle.height * this.zoomFactor;\n // tslint:disable-next-line:max-line-length\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.currentPage !== undefined && this.owner.imageResizerModule.currentPage === page && this.owner.imageResizerModule.isImageResizerVisible) {\n this.owner.imageResizerModule.setImageResizerPositions(x, y, width, height);\n }\n this.visiblePages.push(page);\n this.renderPage(page, x, y, width, height);\n };\n /**\n * Render specified page widgets.\n */\n PageLayoutViewer.prototype.renderPage = function (page, x, y, width, height) {\n this.render.renderWidgets(page, x - this.containerLeft, y - this.containerTop, width, height);\n };\n /**\n * Renders visible pages.\n * @private\n */\n PageLayoutViewer.prototype.renderVisiblePages = function () {\n if (isNullOrUndefined(this.visiblePages) || this.visiblePages.length < 1) {\n return;\n }\n this.clearContent();\n for (var i = 0; i < this.visiblePages.length; i++) {\n var page = this.visiblePages[i];\n var width = page.boundingRectangle.width * this.zoomFactor;\n var height = page.boundingRectangle.height * this.zoomFactor;\n var x = page.boundingRectangle.x;\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.zoomFactor + this.pageGap * (i + 1);\n this.renderPage(page, x, y, width, height);\n }\n };\n return PageLayoutViewer;\n}(LayoutViewer));\nexport { PageLayoutViewer };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WListLevel } from '../list/list-level';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WCharacterFormat, WListFormat, WParagraphFormat, WCellFormat, WTableFormat, WSectionFormat, WRowFormat } from '../format/index';\nimport { WCharacterStyle, WParagraphStyle, WTabStop } from '../format/index';\nimport { LineWidget, ParagraphWidget, ImageElementBox, BodyWidget, TextElementBox, TableCellWidget, TableRowWidget, TableWidget, FieldElementBox, HeaderFooterWidget, BookmarkElementBox, FieldTextElementBox, TabElementBox } from './page';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar SfdtReader = /** @class */ (function () {\n function SfdtReader(viewer) {\n /* tslint:disable:no-any */\n this.viewer = undefined;\n this.viewer = viewer;\n }\n Object.defineProperty(SfdtReader.prototype, \"isPasting\", {\n get: function () {\n return this.viewer && this.viewer.owner.isPastingContent;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param json\n */\n SfdtReader.prototype.convertJsonToDocument = function (json) {\n var sections = [];\n var jsonObject = JSON.parse(json);\n this.parseCharacterFormat(jsonObject.characterFormat, this.viewer.characterFormat);\n this.parseParagraphFormat(jsonObject.paragraphFormat, this.viewer.paragraphFormat);\n if (!isNullOrUndefined(jsonObject.background)) {\n this.viewer.backgroundColor = this.getColor(jsonObject.background.color);\n }\n if (!isNullOrUndefined(jsonObject.abstractLists)) {\n this.parseAbstractList(jsonObject, this.viewer.abstractLists);\n }\n if (!isNullOrUndefined(jsonObject.lists)) {\n this.parseList(jsonObject, this.viewer.lists);\n }\n if (!isNullOrUndefined(jsonObject.styles)) {\n this.parseStyles(jsonObject, this.viewer.styles);\n }\n if (!isNullOrUndefined(jsonObject.sections)) {\n this.parseSections(jsonObject.sections, sections);\n }\n return sections;\n };\n SfdtReader.prototype.parseStyles = function (data, styles) {\n for (var i = 0; i < data.styles.length; i++) {\n if (isNullOrUndefined(this.viewer.styles.findByName(data.styles[i].name))) {\n this.parseStyle(data, data.styles[i], styles);\n }\n }\n };\n SfdtReader.prototype.parseStyle = function (data, style, styles) {\n var wStyle;\n if (!isNullOrUndefined(style.type)) {\n if (style.type === 'Paragraph') {\n wStyle = new WParagraphStyle();\n wStyle.type = 'Paragraph';\n }\n if (style.type === 'Character') {\n wStyle = new WCharacterStyle();\n wStyle.type = 'Character';\n }\n if (!isNullOrUndefined(style.name)) {\n wStyle.name = style.name;\n }\n styles.push(wStyle);\n if (!isNullOrUndefined(style.basedOn)) {\n var basedOn = styles.findByName(style.basedOn);\n if (!isNullOrUndefined(basedOn)) {\n if (basedOn.type === wStyle.type) {\n wStyle.basedOn = basedOn;\n }\n }\n else {\n var basedStyle = this.getStyle(style.basedOn, data);\n var styleString = void 0;\n if (!isNullOrUndefined(basedStyle) && basedStyle.type === wStyle.type) {\n styleString = basedStyle;\n }\n else {\n if (wStyle.type === 'Paragraph') {\n styleString = JSON.parse('{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n }\n else {\n styleString = JSON.parse('{\"type\": \"Character\",\"name\": \"Default Paragraph Font\"}');\n }\n }\n this.parseStyle(data, styleString, styles);\n wStyle.basedOn = styles.findByName(styleString.name);\n }\n }\n if (!isNullOrUndefined(style.link)) {\n var link = styles.findByName(style.link);\n var linkStyle = this.getStyle(style.link, data);\n var styleString = void 0;\n if (isNullOrUndefined(link)) {\n if (isNullOrUndefined(linkStyle)) {\n //Construct the CharacterStyle string\n var charaStyle = {};\n charaStyle.characterFormat = style.characterFormat;\n charaStyle.name = style.name + ' Char';\n charaStyle.type = 'Character';\n //TODO: Implement basedOn\n charaStyle.basedOn = style.basedOn === 'Normal' ? 'Default Paragraph Font' : (style.basedOn + ' Char');\n styleString = charaStyle;\n }\n else {\n styleString = linkStyle;\n }\n this.parseStyle(data, styleString, styles);\n wStyle.link = isNullOrUndefined(styles.findByName(styleString.name)) ? style.link : styles.findByName(styleString.name);\n }\n else {\n wStyle.link = link;\n }\n }\n if (!isNullOrUndefined(style.characterFormat)) {\n this.parseCharacterFormat(style.characterFormat, wStyle.characterFormat);\n }\n if (!isNullOrUndefined(style.paragraphFormat)) {\n this.parseParagraphFormat(style.paragraphFormat, wStyle.paragraphFormat);\n }\n if (!isNullOrUndefined(style.next)) {\n if (style.next === style.name) {\n wStyle.next = wStyle;\n }\n else {\n var next = styles.findByName(style.next);\n if (!isNullOrUndefined(next) && next.type === wStyle.type) {\n wStyle.next = next;\n }\n else {\n var nextStyleString = this.getStyle(style.next, data);\n if (!isNullOrUndefined(nextStyleString)) {\n this.parseStyle(data, nextStyleString, styles);\n wStyle.next = styles.findByName(nextStyleString.name);\n }\n else {\n wStyle.next = wStyle;\n }\n }\n }\n }\n }\n };\n SfdtReader.prototype.getStyle = function (name, data) {\n for (var i = 0; i < data.styles.length; i++) {\n if (data.styles[i].name === name) {\n return data.styles[i];\n }\n }\n return undefined;\n };\n SfdtReader.prototype.parseAbstractList = function (data, abstractLists) {\n for (var i = 0; i < data.abstractLists.length; i++) {\n var abstractList = new WAbstractList();\n var abstract = data.abstractLists[i];\n abstractLists.push(abstractList);\n if (!isNullOrUndefined(abstract)) {\n if (!isNullOrUndefined(abstract.abstractListId)) {\n abstractList.abstractListId = abstract.abstractListId;\n }\n if (!isNullOrUndefined(abstract.levels)) {\n for (var j = 0; j < abstract.levels.length; j++) {\n var level = abstract.levels[j];\n if (!isNullOrUndefined(level)) {\n var listLevel = this.parseListLevel(level, abstractList);\n abstractList.levels.push(listLevel);\n }\n }\n }\n }\n }\n };\n SfdtReader.prototype.parseListLevel = function (data, owner) {\n var listLevel = new WListLevel(owner);\n if (data.listLevelPattern === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = !isNullOrUndefined(data.numberFormat) ? data.numberFormat : '';\n }\n else {\n listLevel.listLevelPattern = data.listLevelPattern;\n listLevel.startAt = data.startAt;\n listLevel.numberFormat = !isNullOrUndefined(data.numberFormat) ? data.numberFormat : '';\n if (data.restartLevel >= 0) {\n listLevel.restartLevel = data.restartLevel;\n }\n else {\n listLevel.restartLevel = data.levelNumber;\n }\n }\n listLevel.followCharacter = data.followCharacter;\n this.parseCharacterFormat(data.characterFormat, listLevel.characterFormat);\n this.parseParagraphFormat(data.paragraphFormat, listLevel.paragraphFormat);\n return listLevel;\n };\n SfdtReader.prototype.parseList = function (data, listCollection) {\n for (var i = 0; i < data.lists.length; i++) {\n var list = new WList();\n var lists = data.lists[i];\n if (!isNullOrUndefined(lists.abstractListId)) {\n list.abstractListId = lists.abstractListId;\n list.abstractList = this.viewer.getAbstractListById(lists.abstractListId);\n }\n listCollection.push(list);\n if (!isNullOrUndefined(lists.listId)) {\n list.listId = lists.listId;\n }\n if (lists.hasOwnProperty('levelOverrides')) {\n this.parseLevelOverride(lists.levelOverrides, list);\n }\n }\n };\n SfdtReader.prototype.parseLevelOverride = function (data, list) {\n if (isNullOrUndefined(data)) {\n return;\n }\n for (var i = 0; i < data.length; i++) {\n var levelOverrides = new WLevelOverride();\n var levelOverride = data[i];\n levelOverrides.startAt = levelOverride.startAt;\n levelOverrides.levelNumber = levelOverride.levelNumber;\n if (!isNullOrUndefined(levelOverride.overrideListLevel)) {\n levelOverrides.overrideListLevel = this.parseListLevel(levelOverride.overrideListLevel, levelOverrides);\n }\n list.levelOverrides.push(levelOverrides);\n }\n };\n SfdtReader.prototype.parseSections = function (data, sections) {\n for (var i = 0; i < data.length; i++) {\n var section = new BodyWidget();\n section.sectionFormat = new WSectionFormat(section);\n section.index = i;\n var item = data[i];\n if (!isNullOrUndefined(item.sectionFormat)) {\n this.parseSectionFormat(item.sectionFormat, section.sectionFormat);\n }\n if (isNullOrUndefined(item.headersFooters)) {\n item.headersFooters = {};\n }\n this.viewer.headersFooters.push(this.parseHeaderFooter(item.headersFooters, this.viewer.headersFooters));\n this.parseTextBody(item.blocks, section);\n for (var i_1 = 0; i_1 < section.childWidgets.length; i_1++) {\n section.childWidgets[i_1].containerWidget = section;\n }\n sections.push(section);\n }\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseHeaderFooter = function (data, headersFooters) {\n var hfs = {};\n if (!isNullOrUndefined(data.header)) {\n var oddHeader = new HeaderFooterWidget('OddHeader');\n hfs[0] = oddHeader;\n this.parseTextBody(data.header.blocks, oddHeader);\n }\n if (!isNullOrUndefined(data.footer)) {\n var oddFooter = new HeaderFooterWidget('OddFooter');\n hfs[1] = oddFooter;\n this.parseTextBody(data.footer.blocks, oddFooter);\n }\n if (!isNullOrUndefined(data.evenHeader)) {\n var evenHeader = new HeaderFooterWidget('EvenHeader');\n hfs[2] = evenHeader;\n this.parseTextBody(data.evenHeader.blocks, evenHeader);\n }\n if (!isNullOrUndefined(data.evenFooter)) {\n var evenFooter = new HeaderFooterWidget('EvenFooter');\n hfs[3] = evenFooter;\n this.parseTextBody(data.evenFooter.blocks, evenFooter);\n }\n if (!isNullOrUndefined(data.firstPageHeader)) {\n var firstPageHeader = new HeaderFooterWidget('FirstPageHeader');\n hfs[4] = firstPageHeader;\n this.parseTextBody(data.firstPageHeader.blocks, firstPageHeader);\n }\n if (!isNullOrUndefined(data.firstPageFooter)) {\n var firstPageFooter = new HeaderFooterWidget('FirstPageFooter');\n hfs[5] = firstPageFooter;\n this.parseTextBody(data.firstPageFooter.blocks, firstPageFooter);\n }\n return hfs;\n };\n SfdtReader.prototype.parseTextBody = function (data, section) {\n this.parseBody(data, section.childWidgets, section);\n };\n SfdtReader.prototype.parseBody = function (data, blocks, container) {\n if (!isNullOrUndefined(data)) {\n for (var i = 0; i < data.length; i++) {\n var block = data[i];\n if (block.hasOwnProperty('inlines')) {\n var writeInlineFormat = false;\n //writeInlineFormat = this.isPasting && i === data.length - 1;\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n this.parseCharacterFormat(block.characterFormat, paragraph.characterFormat);\n this.parseParagraphFormat(block.paragraphFormat, paragraph.paragraphFormat);\n var styleObj = void 0;\n if (!isNullOrUndefined(block.paragraphFormat) && !isNullOrUndefined(block.paragraphFormat.styleName)) {\n styleObj = this.viewer.styles.findByName(block.paragraphFormat.styleName, 'Paragraph');\n if (!isNullOrUndefined(styleObj)) {\n paragraph.paragraphFormat.ApplyStyle(styleObj);\n }\n }\n if (block.inlines.length > 0) {\n this.parseParagraph(block.inlines, paragraph, writeInlineFormat);\n }\n blocks.push(paragraph);\n paragraph.index = i;\n paragraph.containerWidget = container;\n }\n else if (block.hasOwnProperty('rows')) {\n this.parseTable(block, blocks, i, container);\n }\n }\n }\n };\n SfdtReader.prototype.parseTable = function (block, blocks, index, section) {\n var table = new TableWidget();\n table.index = index;\n table.tableFormat = new WTableFormat(table);\n if (!isNullOrUndefined(block.tableFormat)) {\n this.parseTableFormat(block.tableFormat, table.tableFormat);\n }\n table.title = block.title;\n table.description = block.description;\n for (var i = 0; i < block.rows.length; i++) {\n var row = new TableRowWidget();\n row.rowFormat = new WRowFormat(row);\n var tableRow = block.rows[i];\n if (tableRow.hasOwnProperty('rowFormat')) {\n this.parseRowFormat(tableRow.rowFormat, row.rowFormat);\n this.parseRowGridValues(tableRow, row.rowFormat);\n this.parseRowGridValues(tableRow.rowFormat, row.rowFormat);\n row.index = i;\n for (var j = 0; j < block.rows[i].cells.length; j++) {\n var cell = new TableCellWidget();\n cell.cellFormat = new WCellFormat(cell);\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = j;\n cell.rowIndex = i;\n if (block.rows[i].cells[j].hasOwnProperty('cellFormat')) {\n this.parseCellFormat(block.rows[i].cells[j].cellFormat, cell.cellFormat);\n }\n this.parseTextBody(block.rows[i].cells[j].blocks, cell);\n }\n }\n table.childWidgets.push(row);\n row.containerWidget = table;\n }\n table.containerWidget = section;\n blocks.push(table);\n table.isGridUpdated = false;\n };\n SfdtReader.prototype.parseRowGridValues = function (data, rowFormat) {\n if (!isNullOrUndefined(data.gridBefore)) {\n rowFormat.gridBefore = data.gridBefore;\n }\n if (!isNullOrUndefined(data.gridBeforeWidth)) {\n rowFormat.gridBeforeWidth = data.gridBeforeWidth;\n }\n if (!isNullOrUndefined(data.gridBeforeWidthType)) {\n rowFormat.gridBeforeWidthType = data.gridBeforeWidthType;\n }\n if (!isNullOrUndefined(data.gridAfter)) {\n rowFormat.gridAfter = data.gridAfter;\n }\n if (!isNullOrUndefined(data.gridAfterWidth)) {\n rowFormat.gridAfterWidth = data.gridAfterWidth;\n }\n if (!isNullOrUndefined(data.gridAfterWidthType)) {\n rowFormat.gridAfterWidthType = data.gridAfterWidthType;\n }\n };\n SfdtReader.prototype.parseParagraph = function (data, paragraph, writeInlineFormat) {\n var lineWidget = new LineWidget(paragraph);\n for (var i = 0; i < data.length; i++) {\n var inline = data[i];\n if (inline.hasOwnProperty('text')) {\n var textElement = undefined;\n if (this.viewer.isPageField) {\n textElement = new FieldTextElementBox();\n textElement.fieldBegin = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n }\n else if (inline.text === '\\t') {\n textElement = new TabElementBox();\n }\n else {\n textElement = new TextElementBox();\n }\n textElement.characterFormat = new WCharacterFormat(textElement);\n this.parseCharacterFormat(inline.characterFormat, textElement.characterFormat, writeInlineFormat);\n /*�tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(inline.characterFormat) && !isNullOrUndefined(inline.characterFormat.styleName)) {\n var charStyle = this.viewer.styles.findByName(inline.characterFormat.styleName, 'Character');\n textElement.characterFormat.ApplyStyle(charStyle);\n }\n textElement.text = inline.text;\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n }\n else if (inline.hasOwnProperty('imageString')) {\n var image = new ImageElementBox(data[i].isInlineImage);\n image.isMetaFile = data[i].isMetaFile;\n image.characterFormat = new WCharacterFormat(image);\n image.line = lineWidget;\n lineWidget.children.push(image);\n image.imageString = inline.imageString;\n image.width = HelperMethods.convertPointToPixel(inline.width);\n image.height = HelperMethods.convertPointToPixel(inline.height);\n this.parseCharacterFormat(inline.characterFormat, image.characterFormat);\n }\n else if (inline.hasOwnProperty('hasFieldEnd') || (inline.hasOwnProperty('fieldType') && inline.fieldType === 0)) {\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.hasFieldEnd = inline.hasFieldEnd;\n this.viewer.fieldStacks.push(fieldBegin);\n fieldBegin.line = lineWidget;\n this.viewer.fields.push(fieldBegin);\n lineWidget.children.push(fieldBegin);\n }\n else if (inline.hasOwnProperty('fieldType')) {\n var field = undefined;\n if (inline.fieldType === 2) {\n field = new FieldElementBox(2);\n this.fieldSeparator = field;\n if (this.viewer.fieldStacks.length > 0) {\n field.fieldBegin = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n field.fieldBegin.fieldSeparator = field;\n //finds the whether the field is page filed or not\n var lineWidgetCount = lineWidget.children.length;\n if (lineWidgetCount >= 2 && (lineWidget.children[lineWidgetCount - 2] instanceof FieldElementBox)\n && lineWidget.children[lineWidgetCount - 2].hasFieldEnd\n && (lineWidget.children[lineWidgetCount - 1] instanceof TextElementBox)) {\n var fieldElementText = lineWidget.children[lineWidgetCount - 1].text;\n if (fieldElementText.match('PAGE')) {\n this.viewer.isPageField = true;\n }\n }\n }\n }\n else if (inline.fieldType === 1) {\n field = new FieldElementBox(1);\n //For Field End Updated begin and separator. \n if (this.viewer.fieldStacks.length > 0) {\n field.fieldBegin = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n field.fieldBegin.fieldEnd = field;\n }\n if (!isNullOrUndefined(field.fieldBegin) && field.fieldBegin.fieldSeparator) {\n field.fieldSeparator = field.fieldBegin.fieldSeparator;\n field.fieldBegin.fieldSeparator.fieldEnd = field;\n }\n //After setting all the property clear the field values\n this.viewer.fieldStacks.splice(this.viewer.fieldStacks.length - 1, 1);\n this.fieldSeparator = undefined;\n this.viewer.isPageField = false;\n this.viewer.fieldCollection.push(field.fieldBegin);\n }\n field.line = lineWidget;\n lineWidget.children.push(field);\n }\n else if (inline.hasOwnProperty('bookmarkType')) {\n var bookmark = undefined;\n bookmark = new BookmarkElementBox(inline.bookmarkType);\n bookmark.name = inline.name;\n lineWidget.children.push(bookmark);\n bookmark.line = lineWidget;\n if (inline.bookmarkType === 0) {\n this.viewer.bookmarks.add(bookmark.name, bookmark);\n }\n else if (inline.bookmarkType === 1) {\n if (this.viewer.bookmarks.containsKey(bookmark.name)) {\n var bookmarkStart = this.viewer.bookmarks.get(bookmark.name);\n bookmarkStart.reference = bookmark;\n bookmark.reference = bookmarkStart;\n }\n }\n }\n }\n paragraph.childWidgets.push(lineWidget);\n };\n SfdtReader.prototype.parseTableFormat = function (sourceFormat, tableFormat) {\n this.parseBorders(sourceFormat.borders, tableFormat.borders);\n if (!isNullOrUndefined(sourceFormat.cellSpacing)) {\n tableFormat.cellSpacing = sourceFormat.cellSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n tableFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n tableFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n tableFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n tableFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n tableFormat.leftIndent = sourceFormat.leftIndent;\n }\n this.parseShading(sourceFormat.shading, tableFormat.shading);\n if (!isNullOrUndefined(sourceFormat.tableAlignment)) {\n tableFormat.tableAlignment = sourceFormat.tableAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidth)) {\n tableFormat.preferredWidth = sourceFormat.preferredWidth;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidthType)) {\n tableFormat.preferredWidthType = sourceFormat.preferredWidthType;\n }\n };\n SfdtReader.prototype.parseCellFormat = function (sourceFormat, cellFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n this.parseBorders(sourceFormat.borders, cellFormat.borders);\n if (!sourceFormat.isSamePaddingAsTable) {\n // cellFormat.ClearMargins();\n //else\n this.parseCellMargin(sourceFormat, cellFormat);\n }\n if (!isNullOrUndefined(sourceFormat.cellWidth)) {\n cellFormat.cellWidth = sourceFormat.cellWidth;\n }\n if (!isNullOrUndefined(sourceFormat.columnSpan)) {\n cellFormat.columnSpan = sourceFormat.columnSpan;\n }\n if (!isNullOrUndefined(sourceFormat.rowSpan)) {\n cellFormat.rowSpan = sourceFormat.rowSpan;\n }\n this.parseShading(sourceFormat.shading, cellFormat.shading);\n if (!isNullOrUndefined(sourceFormat.verticalAlignment)) {\n cellFormat.verticalAlignment = sourceFormat.verticalAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidthType)) {\n cellFormat.preferredWidthType = sourceFormat.preferredWidthType;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidth)) {\n cellFormat.preferredWidth = sourceFormat.preferredWidth;\n }\n }\n };\n SfdtReader.prototype.parseCellMargin = function (sourceFormat, cellFormat) {\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n cellFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n cellFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n cellFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n cellFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n };\n SfdtReader.prototype.parseRowFormat = function (sourceFormat, rowFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat.allowBreakAcrossPages)) {\n rowFormat.allowBreakAcrossPages = sourceFormat.allowBreakAcrossPages;\n }\n if (!isNullOrUndefined(sourceFormat.isHeader)) {\n rowFormat.isHeader = sourceFormat.isHeader;\n }\n if (!isNullOrUndefined(sourceFormat.heightType)) {\n rowFormat.heightType = sourceFormat.heightType;\n }\n if (!isNullOrUndefined(sourceFormat.height)) {\n rowFormat.height = sourceFormat.height;\n }\n this.parseBorders(sourceFormat.borders, rowFormat.borders);\n }\n };\n SfdtReader.prototype.parseBorders = function (sourceBorders, destBorder) {\n if (!isNullOrUndefined(sourceBorders)) {\n this.parseBorder(sourceBorders.left, destBorder.left);\n this.parseBorder(sourceBorders.right, destBorder.right);\n this.parseBorder(sourceBorders.top, destBorder.top);\n this.parseBorder(sourceBorders.bottom, destBorder.bottom);\n this.parseBorder(sourceBorders.vertical, destBorder.vertical);\n this.parseBorder(sourceBorders.horizontal, destBorder.horizontal);\n this.parseBorder(sourceBorders.diagonalDown, destBorder.diagonalDown);\n this.parseBorder(sourceBorders.diagonalUp, destBorder.diagonalUp);\n }\n };\n SfdtReader.prototype.parseBorder = function (sourceBorder, destBorder) {\n if (!isNullOrUndefined(sourceBorder)) {\n if (!isNullOrUndefined(sourceBorder.color)) {\n destBorder.color = this.getColor(sourceBorder.color);\n }\n if (!isNullOrUndefined(sourceBorder.lineStyle)) {\n destBorder.lineStyle = sourceBorder.lineStyle;\n }\n if (!isNullOrUndefined(sourceBorder.lineWidth)) {\n destBorder.lineWidth = sourceBorder.lineWidth;\n }\n if (!isNullOrUndefined(sourceBorder.hasNoneStyle)) {\n destBorder.hasNoneStyle = sourceBorder.hasNoneStyle;\n }\n }\n };\n SfdtReader.prototype.parseShading = function (sourceShading, destShading) {\n if (!isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(sourceShading.backgroundColor)) {\n destShading.backgroundColor = this.getColor(sourceShading.backgroundColor);\n }\n if (!isNullOrUndefined(sourceShading.foregroundColor)) {\n destShading.foregroundColor = this.getColor(sourceShading.foregroundColor);\n }\n if (!isNullOrUndefined(sourceShading.texture)) {\n destShading.textureStyle = sourceShading.texture;\n }\n }\n };\n SfdtReader.prototype.parseCharacterFormat = function (sourceFormat, characterFormat, writeInlineFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (writeInlineFormat && sourceFormat.hasOwnProperty('inlineFormat')) {\n this.parseCharacterFormat(sourceFormat.inlineFormat, characterFormat);\n return;\n }\n if (!isNullOrUndefined(sourceFormat.baselineAlignment)) {\n characterFormat.baselineAlignment = sourceFormat.baselineAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.underline)) {\n characterFormat.underline = sourceFormat.underline;\n }\n if (!isNullOrUndefined(sourceFormat.strikethrough)) {\n characterFormat.strikethrough = sourceFormat.strikethrough;\n }\n if (!isNullOrUndefined(sourceFormat.fontSize)) {\n characterFormat.fontSize = sourceFormat.fontSize;\n }\n if (!isNullOrUndefined(sourceFormat.fontFamily)) {\n characterFormat.fontFamily = sourceFormat.fontFamily;\n }\n if (!isNullOrUndefined(sourceFormat.bold)) {\n characterFormat.bold = sourceFormat.bold;\n }\n if (!isNullOrUndefined(sourceFormat.italic)) {\n characterFormat.italic = sourceFormat.italic;\n }\n if (!isNullOrUndefined(sourceFormat.highlightColor)) {\n characterFormat.highlightColor = sourceFormat.highlightColor;\n }\n if (!isNullOrUndefined(sourceFormat.fontColor)) {\n characterFormat.fontColor = this.getColor(sourceFormat.fontColor);\n }\n }\n };\n SfdtReader.prototype.getColor = function (color) {\n var convertColor = color;\n return convertColor || '#ffffff';\n };\n SfdtReader.prototype.parseParagraphFormat = function (sourceFormat, paragraphFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n paragraphFormat.leftIndent = sourceFormat.leftIndent;\n }\n if (!isNullOrUndefined(sourceFormat.rightIndent)) {\n paragraphFormat.rightIndent = sourceFormat.rightIndent;\n }\n if (!isNullOrUndefined(sourceFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = sourceFormat.firstLineIndent;\n }\n if (!isNullOrUndefined(sourceFormat.afterSpacing)) {\n paragraphFormat.afterSpacing = sourceFormat.afterSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.beforeSpacing)) {\n paragraphFormat.beforeSpacing = sourceFormat.beforeSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.lineSpacing)) {\n paragraphFormat.lineSpacing = sourceFormat.lineSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.lineSpacingType)) {\n paragraphFormat.lineSpacingType = sourceFormat.lineSpacingType;\n }\n if (!isNullOrUndefined(sourceFormat.textAlignment)) {\n paragraphFormat.textAlignment = sourceFormat.textAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.outlineLevel)) {\n paragraphFormat.outlineLevel = sourceFormat.outlineLevel;\n }\n paragraphFormat.listFormat = new WListFormat();\n if (sourceFormat.hasOwnProperty('listFormat')) {\n this.parseListFormat(sourceFormat, paragraphFormat.listFormat);\n }\n if (sourceFormat.hasOwnProperty('tabs')) {\n this.parseTabStop(sourceFormat.tabs, paragraphFormat.tabs);\n }\n }\n };\n SfdtReader.prototype.parseListFormat = function (block, listFormat) {\n if (!isNullOrUndefined(block.listFormat)) {\n if (!isNullOrUndefined(block.listFormat.listId)) {\n listFormat.listId = block.listFormat.listId;\n listFormat.list = this.viewer.getListById(block.listFormat.listId);\n }\n if (!isNullOrUndefined(block.listFormat.listLevelNumber)) {\n listFormat.listLevelNumber = block.listFormat.listLevelNumber;\n }\n }\n };\n SfdtReader.prototype.parseSectionFormat = function (data, sectionFormat) {\n if (!isNullOrUndefined(data.pageWidth)) {\n sectionFormat.pageWidth = data.pageWidth;\n }\n if (!isNullOrUndefined(data.pageHeight)) {\n sectionFormat.pageHeight = data.pageHeight;\n }\n if (!isNullOrUndefined(data.leftMargin)) {\n sectionFormat.leftMargin = data.leftMargin;\n }\n if (!isNullOrUndefined(data.topMargin)) {\n sectionFormat.topMargin = data.topMargin;\n }\n if (!isNullOrUndefined(data.rightMargin)) {\n sectionFormat.rightMargin = data.rightMargin;\n }\n if (!isNullOrUndefined(data.bottomMargin)) {\n sectionFormat.bottomMargin = data.bottomMargin;\n }\n if (!isNullOrUndefined(data.headerDistance)) {\n sectionFormat.headerDistance = data.headerDistance;\n }\n if (!isNullOrUndefined(data.footerDistance)) {\n sectionFormat.footerDistance = data.footerDistance;\n }\n if (!isNullOrUndefined(data.differentFirstPage)) {\n sectionFormat.differentFirstPage = data.differentFirstPage;\n }\n if (!isNullOrUndefined(data.differentOddAndEvenPages)) {\n sectionFormat.differentOddAndEvenPages = data.differentOddAndEvenPages;\n }\n };\n SfdtReader.prototype.parseTabStop = function (wTabs, tabs) {\n for (var i = 0; i < wTabs.length; i++) {\n var tabStop = new WTabStop();\n tabStop.position = wTabs[i].position;\n tabStop.tabLeader = wTabs[i].tabLeader;\n tabStop.deletePosition = wTabs[i].deletePosition;\n tabStop.tabJustification = wTabs[i].tabJustification;\n tabs.push(tabStop);\n }\n };\n return SfdtReader;\n}());\nexport { SfdtReader };\n","import { WShading } from '../format/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\n/**\n * Selection character format implementation\n */\nvar SelectionCharacterFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionCharacterFormat(selection) {\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.fontSizeIn = 0;\n this.fontColorIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontSize\", {\n /**\n * Gets or sets the font size of selected contents.\n */\n get: function () {\n return this.fontSizeIn;\n },\n set: function (value) {\n if (value === this.fontSizeIn) {\n return;\n }\n this.fontSizeIn = value;\n this.notifyPropertyChanged('fontSize');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontFamily\", {\n /**\n * Gets or sets the font family of selected contents.\n */\n get: function () {\n return this.fontFamilyIn;\n },\n set: function (value) {\n if (value === this.fontFamilyIn) {\n return;\n }\n this.fontFamilyIn = value;\n this.notifyPropertyChanged('fontFamily');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontColor\", {\n /**\n * Gets or sets the font color of selected contents.\n */\n get: function () {\n return this.fontColorIn;\n },\n set: function (value) {\n if (value === this.fontColorIn) {\n return;\n }\n this.fontColorIn = value;\n this.notifyPropertyChanged('fontColor');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"bold\", {\n /**\n * Gets or sets the bold formatting of selected contents.\n */\n get: function () {\n return this.boldIn;\n },\n set: function (value) {\n if (value === this.boldIn) {\n return;\n }\n this.boldIn = value;\n this.notifyPropertyChanged('bold');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"italic\", {\n /**\n * Gets or sets the italic formatting of selected contents.\n */\n get: function () {\n return this.italicIn;\n },\n set: function (value) {\n if (value === this.italic) {\n return;\n }\n this.italicIn = value;\n this.notifyPropertyChanged('italic');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"strikethrough\", {\n /**\n * Gets or sets the strikethrough property of selected contents.\n */\n get: function () {\n return this.strikeThroughIn;\n },\n set: function (value) {\n if (value === this.strikeThroughIn) {\n return;\n }\n this.strikeThroughIn = value;\n this.notifyPropertyChanged('strikethrough');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"baselineAlignment\", {\n /**\n * Gets or sets the baseline alignment property of selected contents.\n */\n get: function () {\n return this.baselineAlignmentIn;\n },\n set: function (value) {\n if (value === this.baselineAlignmentIn) {\n return;\n }\n this.baselineAlignmentIn = value;\n this.notifyPropertyChanged('baselineAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"underline\", {\n /**\n * Gets or sets the underline style of selected contents.\n */\n get: function () {\n return this.underlineIn;\n },\n set: function (value) {\n if (value === this.underlineIn) {\n return;\n }\n this.underlineIn = value;\n this.notifyPropertyChanged('underline');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"highlightColor\", {\n /**\n * Gets or sets the highlight color of selected contents.\n */\n get: function () {\n return this.highlightColorIn;\n },\n set: function (value) {\n if (value === this.highlightColorIn) {\n return;\n }\n this.highlightColorIn = value;\n this.notifyPropertyChanged('highlightColor');\n },\n enumerable: true,\n configurable: true\n });\n SelectionCharacterFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'bold':\n return this.bold;\n case 'italic':\n return this.italic;\n case 'fontSize':\n if (this.fontSize >= 1) {\n return this.fontSize;\n }\n return undefined;\n case 'fontFamily':\n return this.fontFamily;\n case 'strikethrough':\n return this.strikethrough;\n case 'baselineAlignment':\n return this.baselineAlignment;\n case 'highlightColor':\n return this.highlightColor;\n case 'underline':\n return this.underline;\n case 'fontColor':\n return this.fontColor;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever property gets changed.\n * @param {string} propertyName\n */\n SelectionCharacterFormat.prototype.notifyPropertyChanged = function (propertyName) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared || this.selection.owner.isReadOnlyMode || !this.selection.owner.isDocumentLoaded || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var propertyValue = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(propertyValue)) {\n this.selection.owner.editorModule.onApplyCharacterFormat(propertyName, propertyValue);\n }\n }\n };\n /**\n * Copies the source format.\n * @param {WCharacterFormat} format\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.copyFormat = function (format) {\n this.styleName = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : 'Default Paragraph Font';\n this.fontSize = format.fontSize;\n this.fontFamily = format.fontFamily;\n this.bold = format.bold;\n this.italic = format.italic;\n this.baselineAlignment = format.baselineAlignment;\n this.underline = format.underline;\n this.fontColor = format.fontColor;\n this.highlightColor = format.highlightColor;\n this.strikethrough = format.strikethrough;\n };\n /**\n * Combines the format.\n * @param {WCharacterFormat} format\n * @private\n */\n SelectionCharacterFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.bold) && this.bold !== format.bold) {\n this.bold = undefined;\n }\n if (!isNullOrUndefined(this.italic) && this.italic !== format.italic) {\n this.italic = undefined;\n }\n if (this.fontSize !== 0 && this.fontSize !== format.fontSize) {\n this.fontSize = 0;\n }\n if (!isNullOrUndefined(this.fontFamily) && this.fontFamily !== format.fontFamily) {\n this.fontFamily = undefined;\n }\n if (!isNullOrUndefined(this.highlightColor) && this.highlightColor !== format.highlightColor) {\n this.highlightColor = undefined;\n }\n if (!isNullOrUndefined(this.baselineAlignment) && this.baselineAlignment !== format.baselineAlignment) {\n this.baselineAlignment = undefined;\n }\n if (!isNullOrUndefined(this.fontColor) && (this.fontColor !== format.fontColor)) {\n this.fontColor = undefined;\n }\n if (!isNullOrUndefined(this.underline) && this.underline !== format.underline) {\n this.underline = undefined;\n }\n if (!isNullOrUndefined(this.strikethrough) && this.strikethrough !== format.strikethrough) {\n this.strikethrough = undefined;\n }\n };\n /**\n * Clones the format.\n * @param {SelectionCharacterFormat} selectionCharacterFormat\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.cloneFormat = function (selectionCharacterFormat) {\n this.bold = selectionCharacterFormat.bold;\n this.italic = selectionCharacterFormat.italic;\n this.underline = selectionCharacterFormat.underline;\n this.strikethrough = selectionCharacterFormat.strikethrough;\n this.baselineAlignment = selectionCharacterFormat.baselineAlignment;\n this.highlightColor = selectionCharacterFormat.highlightColor;\n this.fontSize = selectionCharacterFormat.fontSize;\n this.fontFamily = selectionCharacterFormat.fontFamily;\n this.fontColor = selectionCharacterFormat.fontColor;\n this.styleName = selectionCharacterFormat.styleName;\n };\n /**\n * Checks whether current format is equal to the source format or not.\n * @param {SelectionCharacterFormat} format\n * @returns boolean\n * @private\n */\n SelectionCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.strikethrough === format.strikethrough\n && this.bold === format.bold\n && this.fontFamily === format.fontFamily\n && this.underline === format.underline\n && this.highlightColor === format.highlightColor\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.fontColor === format.fontColor);\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.clearFormat = function () {\n this.fontSizeIn = 0;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.highlightColorIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.styleName = undefined;\n };\n /**\n * Destroys the maintained resources.\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.destroy = function () {\n this.fontSizeIn = undefined;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n };\n return SelectionCharacterFormat;\n}());\nexport { SelectionCharacterFormat };\n/**\n * Selection paragraph format implementation\n */\nvar SelectionParagraphFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionParagraphFormat(selection, viewer) {\n // Declaring the character format properties.\n this.leftIndentIn = 0;\n this.rightIndentIn = 0;\n this.beforeSpacingIn = 0;\n this.afterSpacingIn = 0;\n this.textAlignmentIn = undefined;\n this.firstLineIndentIn = 0;\n this.lineSpacingIn = 1;\n this.lineSpacingTypeIn = undefined;\n this.listLevelNumberIn = -1;\n this.selection = selection;\n this.viewer = viewer;\n }\n Object.defineProperty(SelectionParagraphFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.leftIndentIn;\n },\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"rightIndent\", {\n /**\n * Gets or Sets the right indent for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.rightIndentIn;\n },\n set: function (value) {\n if (value === this.rightIndentIn) {\n return;\n }\n this.rightIndentIn = value;\n this.notifyPropertyChanged('rightIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or Sets the first line indent for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.firstLineIndentIn;\n },\n set: function (value) {\n if (value === this.firstLineIndentIn) {\n return;\n }\n this.firstLineIndentIn = value;\n this.notifyPropertyChanged('firstLineIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"textAlignment\", {\n /**\n * Gets or Sets the text alignment for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.textAlignmentIn;\n },\n set: function (value) {\n if (value === this.textAlignmentIn) {\n return;\n }\n this.textAlignmentIn = value;\n this.notifyPropertyChanged('textAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"afterSpacing\", {\n /**\n * Gets or Sets the after spacing for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.afterSpacingIn;\n },\n set: function (value) {\n if (value === this.afterSpacingIn) {\n return;\n }\n this.afterSpacingIn = value;\n this.notifyPropertyChanged('afterSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"beforeSpacing\", {\n /**\n * Gets or Sets the before spacing for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.beforeSpacingIn;\n },\n set: function (value) {\n if (value === this.beforeSpacingIn) {\n return;\n }\n this.beforeSpacingIn = value;\n this.notifyPropertyChanged('beforeSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or Sets the line spacing for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.lineSpacingIn;\n },\n set: function (value) {\n if (value === this.lineSpacingIn) {\n return;\n }\n this.lineSpacingIn = value;\n this.notifyPropertyChanged('lineSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacingType\", {\n /**\n * Gets or Sets the line spacing type for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.lineSpacingTypeIn;\n },\n set: function (value) {\n if (value === this.lineSpacingTypeIn) {\n return;\n }\n this.lineSpacingTypeIn = value;\n this.notifyPropertyChanged('lineSpacingType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listLevelNumber\", {\n /**\n * Gets or Sets the list level number for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.listLevelNumberIn;\n },\n set: function (value) {\n if (value === this.listLevelNumberIn) {\n return;\n }\n this.listLevelNumberIn = value;\n this.notifyPropertyChanged('listLevelNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listText\", {\n /**\n * Gets the list text for selected paragraphs.\n */\n get: function () {\n var listFormat = undefined;\n var list = this.viewer.getListById(this.listId);\n if (list instanceof WList && this.listLevelNumberIn > -1 && this.listLevelNumberIn < 9) {\n var listLevel = list.getListLevel(this.listLevelNumber);\n if (listLevel instanceof WListLevel) {\n if (listLevel.listLevelPattern === 'Bullet') {\n listFormat = listLevel.numberFormat;\n }\n else {\n listFormat = listLevel.numberFormat;\n for (var i = 0; i < 9; i++) {\n var levelPattern = '%' + (i + 1);\n if (listFormat.indexOf(levelPattern) > -1) {\n var level = i === this.listLevelNumberIn ? listLevel : list.getListLevel(i);\n var listText = this.selection.owner.viewer.layout.getListTextListLevel(level, 1);\n listFormat = listFormat.replace(levelPattern, listText);\n }\n }\n }\n }\n }\n return listFormat;\n },\n enumerable: true,\n configurable: true\n });\n SelectionParagraphFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'leftIndent':\n return this.leftIndent;\n case 'rightIndent':\n return this.rightIndent;\n case 'firstLineIndent':\n return this.firstLineIndent;\n case 'beforeSpacing':\n return this.beforeSpacing;\n case 'afterSpacing':\n return this.afterSpacing;\n case 'textAlignment':\n return this.textAlignment;\n case 'lineSpacing':\n return this.lineSpacing;\n case 'lineSpacingType':\n return this.lineSpacingType;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever the property gets changed.\n * @param {string} propertyName\n */\n SelectionParagraphFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) &&\n (this.selection.owner.isReadOnlyMode || !this.selection.owner.isDocumentLoaded)\n && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var editorModule = this.selection.owner.editorModule;\n var value = this.getPropertyValue(propertyName);\n if ((propertyName === 'leftIndent' || propertyName === 'rightIndent' || propertyName === 'firstLineIndent')\n && !(value >= -1056 && value < 1056)) {\n return;\n }\n if (propertyName === 'listLevelNumber') {\n editorModule.onApplyListInternal(this.viewer.getListById(this.listId), this.listLevelNumber);\n }\n else {\n editorModule.onApplyParagraphFormat(propertyName, value, propertyName === 'textAlignment' ? true : false, false);\n }\n }\n };\n /**\n * Copies the format.\n * @param {WParagraphFormat} format\n * @returns void\n * @private\n */\n SelectionParagraphFormat.prototype.copyFormat = function (format) {\n this.styleName = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : 'Normal';\n this.leftIndent = format.leftIndent;\n this.rightIndent = format.rightIndent;\n this.firstLineIndent = format.firstLineIndent;\n this.afterSpacing = format.afterSpacing;\n this.beforeSpacing = format.beforeSpacing;\n this.lineSpacing = format.lineSpacing;\n this.lineSpacingType = format.lineSpacingType;\n this.textAlignment = format.textAlignment;\n if (!isNullOrUndefined(format.listFormat) && !isNullOrUndefined(format.listFormat.listId)) {\n this.listId = format.listFormat.listId;\n this.listLevelNumber = format.listFormat.listLevelNumber;\n }\n else {\n this.listId = undefined;\n this.listLevelNumber = 0;\n }\n };\n /**\n * Copies to format.\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.copyToFormat = function (format) {\n if (isNullOrUndefined(format)) {\n return;\n }\n if (!isNullOrUndefined(this.afterSpacing)) {\n format.afterSpacing = this.afterSpacing;\n }\n if (!isNullOrUndefined(this.beforeSpacing)) {\n format.beforeSpacing = this.beforeSpacing;\n }\n if (!isNullOrUndefined(this.leftIndent)) {\n format.leftIndent = this.leftIndent;\n }\n if (!isNullOrUndefined(this.rightIndent)) {\n format.rightIndent = this.rightIndent;\n }\n if (!isNullOrUndefined(this.textAlignment)) {\n format.textAlignment = this.textAlignment;\n }\n if (!isNullOrUndefined(this.lineSpacing)) {\n format.lineSpacing = this.lineSpacing;\n }\n if (!isNullOrUndefined(this.lineSpacingType)) {\n format.lineSpacingType = this.lineSpacingType;\n }\n if (!isNullOrUndefined(this.firstLineIndent)) {\n format.firstLineIndent = this.firstLineIndent;\n }\n };\n /**\n * Combines the format.\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftIndent) && this.leftIndent !== format.leftIndent) {\n this.leftIndent = undefined;\n }\n if (!isNullOrUndefined(this.rightIndent) && this.rightIndent !== format.rightIndent) {\n this.rightIndent = undefined;\n }\n if (!isNullOrUndefined(this.firstLineIndent) && this.firstLineIndent !== format.firstLineIndent) {\n this.firstLineIndent = undefined;\n }\n if (this.lineSpacing !== 0 && this.lineSpacing !== format.lineSpacing) {\n this.lineSpacing = 0;\n }\n if (this.beforeSpacing !== -1 && this.beforeSpacing !== format.beforeSpacing) {\n this.beforeSpacing = -1;\n }\n if (this.afterSpacing !== -1 && this.afterSpacing !== format.afterSpacing) {\n this.afterSpacing = -1;\n }\n if (!isNullOrUndefined(this.lineSpacingType) && this.lineSpacingType !== format.lineSpacingType) {\n this.lineSpacingType = undefined;\n }\n if (!isNullOrUndefined(this.textAlignment) && this.textAlignment !== format.textAlignment) {\n this.textAlignment = undefined;\n }\n // tslint:disable-next-line:max-line-length\n if (this.listLevelNumber >= 0 && !isNullOrUndefined(this.listId) && (isNullOrUndefined(format.listFormat) || format.listFormat.listLevelNumber !== this.listLevelNumber)) {\n this.listLevelNumber = -1;\n }\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(format.listFormat) || isNullOrUndefined(format.listFormat.listId) || (!isNullOrUndefined(this.listId) && this.listId !== format.listFormat.listId)) {\n this.listId = undefined;\n }\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionParagraphFormat.prototype.clearFormat = function () {\n this.leftIndent = 0;\n this.rightIndent = 0;\n this.beforeSpacing = 0;\n this.afterSpacing = 0;\n this.firstLineIndent = 0;\n this.lineSpacing = 1;\n this.textAlignment = undefined;\n this.lineSpacingType = undefined;\n this.listId = undefined;\n this.listLevelNumber = -1;\n this.styleName = undefined;\n };\n /**\n * Gets the clone of list at current selection.\n * @returns WList\n * @private\n */\n SelectionParagraphFormat.prototype.getList = function () {\n var list = this.viewer.getListById(this.listId);\n if (!isNullOrUndefined(list)) {\n var listAdv = new WList();\n var abstractList = new WAbstractList();\n var currentAbstractList = this.viewer.getAbstractListById(list.abstractListId);\n var editor = this.selection.owner.editorModule;\n if (!isNullOrUndefined(currentAbstractList)) {\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var level = editor.cloneListLevel(currentAbstractList.levels[i]);\n abstractList.levels.push(level);\n level.ownerBase = abstractList;\n }\n }\n else {\n abstractList.levels.push(new WListLevel(abstractList));\n }\n if (!isNullOrUndefined(list.levelOverrides)) {\n for (var i = 0; i < list.levelOverrides.length; i++) {\n var levelOverride = editor.cloneLevelOverride(list.levelOverrides[i]);\n listAdv.levelOverrides.push(levelOverride);\n }\n }\n listAdv.abstractList = abstractList;\n listAdv.abstractListId = abstractList.abstractListId;\n listAdv.sourceListId = list.listId;\n return listAdv;\n }\n return undefined;\n };\n /**\n * Modifies the list at current selection.\n * @param {WList} listAdv\n * @private\n */\n SelectionParagraphFormat.prototype.setList = function (listAdv) {\n if (this.viewer.owner.isReadOnlyMode || !this.viewer.owner.isDocumentLoaded) {\n return;\n }\n var list = this.viewer.getListById(this.listId);\n var collection = undefined;\n var currentAbstractList = listAdv ? this.viewer.getAbstractListById(listAdv.abstractListId) : undefined;\n if (!isNullOrUndefined(list) && !isNullOrUndefined(listAdv)\n && !isNullOrUndefined(currentAbstractList) && listAdv.sourceListId === list.listId) {\n var history_1 = this.viewer.owner.editorHistory;\n var listLevel = this.viewer.layout.getListLevel(list, 1);\n this.selection.owner.isLayoutEnabled = false;\n this.viewer.owner.editorModule.setOffsetValue(this.selection);\n if (history_1) {\n collection = history_1.updateListChangesInHistory(currentAbstractList, list);\n }\n this.viewer.owner.editorModule.updateListParagraphs();\n if (history_1) {\n history_1.applyListChanges(this.selection, collection);\n }\n this.selection.owner.isLayoutEnabled = true;\n this.viewer.renderedLists.clear();\n // this.viewer.pages = [];\n this.viewer.owner.editorModule.layoutWholeDocument();\n this.viewer.owner.editorModule.updateSelectionTextPosition(false);\n if (history_1 && history_1.currentBaseHistoryInfo) {\n if (history_1.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history_1.currentBaseHistoryInfo.updateSelection();\n }\n history_1.updateHistory();\n }\n this.viewer.owner.editorModule.fireContentChange();\n }\n else if (!isNullOrUndefined(listAdv)) {\n this.selection.owner.isLayoutEnabled = false;\n if (!isNullOrUndefined(currentAbstractList) && this.viewer.abstractLists.indexOf(currentAbstractList) === -1) {\n this.viewer.abstractLists.push(currentAbstractList);\n }\n if (this.viewer.lists.indexOf(listAdv) === -1) {\n this.viewer.lists.push(listAdv);\n }\n //currentAbstractList.listType = 'Numbering';\n this.selection.owner.isLayoutEnabled = true;\n this.selection.owner.editorModule.onApplyList(listAdv);\n }\n else {\n this.selection.owner.editorModule.onApplyList(undefined);\n }\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionParagraphFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.rightIndentIn = undefined;\n this.beforeSpacingIn = undefined;\n this.afterSpacingIn = undefined;\n this.firstLineIndentIn = undefined;\n this.lineSpacingIn = undefined;\n this.textAlignmentIn = undefined;\n this.lineSpacingTypeIn = undefined;\n this.listId = undefined;\n this.listLevelNumberIn = undefined;\n this.viewer = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n };\n return SelectionParagraphFormat;\n}());\nexport { SelectionParagraphFormat };\n/**\n * Selection section format implementation\n */\nvar SelectionSectionFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionSectionFormat(selection) {\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageHeight\", {\n /**\n * Gets or sets the page height.\n */\n get: function () {\n return this.pageHeightIn;\n },\n set: function (value) {\n this.pageHeightIn = value;\n this.notifyPropertyChanged('pageHeight');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageWidth\", {\n /**\n * Gets or sets the page width.\n */\n get: function () {\n return this.pageWidthIn;\n },\n set: function (value) {\n this.pageWidthIn = value;\n this.notifyPropertyChanged('pageWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"leftMargin\", {\n /**\n * Gets or sets the page left margin.\n */\n get: function () {\n return this.leftMarginIn;\n },\n set: function (value) {\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or sets the page bottom margin.\n */\n get: function () {\n return this.bottomMarginIn;\n },\n set: function (value) {\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"topMargin\", {\n /**\n * Gets or sets the page top margin.\n */\n get: function () {\n return this.topMarginIn;\n },\n set: function (value) {\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"rightMargin\", {\n /**\n * Gets or sets the page right margin.\n */\n get: function () {\n return this.rightMarginIn;\n },\n set: function (value) {\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"headerDistance\", {\n /**\n * Gets or sets the header distance.\n */\n get: function () {\n return this.headerDistanceIn;\n },\n set: function (value) {\n this.headerDistanceIn = value;\n this.notifyPropertyChanged('headerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"footerDistance\", {\n /**\n * Gets or sets the footer distance.\n */\n get: function () {\n return this.footerDistanceIn;\n },\n set: function (value) {\n this.footerDistanceIn = value;\n this.notifyPropertyChanged('footerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentFirstPage\", {\n /**\n * Gets or sets a value indicating whether the section has different first page.\n */\n get: function () {\n return this.differentFirstPageIn;\n },\n set: function (value) {\n this.differentFirstPageIn = value;\n this.notifyPropertyChanged('differentFirstPage');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentOddAndEvenPages\", {\n /**\n * Gets or sets a value indicating whether the section has different odd and even page.\n */\n get: function () {\n return this.differentOddAndEvenPagesIn;\n },\n set: function (value) {\n this.differentOddAndEvenPagesIn = value;\n this.notifyPropertyChanged('differentOddAndEvenPages');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Copies the format.\n * @param {WSectionFormat} format\n * @returns void\n * @private\n */\n SelectionSectionFormat.prototype.copyFormat = function (format) {\n this.pageHeight = format.pageHeight;\n this.pageWidth = format.pageWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.headerDistance = format.headerDistance;\n this.footerDistance = format.footerDistance;\n this.differentFirstPage = format.differentFirstPage;\n this.differentOddAndEvenPages = format.differentOddAndEvenPages;\n };\n SelectionSectionFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isPastingContent\n || selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded)\n && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyvalue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplySectionFormat(propertyName, value);\n }\n }\n };\n SelectionSectionFormat.prototype.getPropertyvalue = function (propertyName) {\n switch (propertyName) {\n case 'pageHeight':\n if (this.pageHeight > 0) {\n return this.pageHeight;\n }\n return undefined;\n case 'pageWidth':\n if (this.pageWidth > 0) {\n return this.pageWidth;\n }\n return undefined;\n case 'leftMargin':\n if (this.leftMargin >= 0) {\n return this.leftMargin;\n }\n return undefined;\n case 'rightMargin':\n if (this.rightMargin >= 0) {\n return this.rightMargin;\n }\n return undefined;\n case 'topMargin':\n if (this.topMargin >= 0) {\n return this.topMargin;\n }\n return undefined;\n case 'bottomMargin':\n if (this.bottomMargin >= 0) {\n return this.bottomMargin;\n }\n return undefined;\n case 'differentFirstPage':\n if (!isNullOrUndefined(this.differentFirstPage)) {\n return this.differentFirstPage;\n }\n return undefined;\n case 'differentOddAndEvenPages':\n if (!isNullOrUndefined(this.differentOddAndEvenPages)) {\n return this.differentOddAndEvenPages;\n }\n return undefined;\n case 'headerDistance':\n return this.headerDistanceIn;\n case 'footerDistance':\n return this.footerDistance;\n default:\n return undefined;\n }\n };\n /**\n * Combines the format.\n * @param {WSectionFormat} format\n * @private\n */\n SelectionSectionFormat.prototype.combineFormat = function (format) {\n if (this.pageHeight > 0 && this.pageHeight !== format.pageHeight) {\n this.pageHeight = 0;\n }\n if (this.pageWidth > 0 && this.pageWidth !== format.pageWidth) {\n this.pageWidth = 0;\n }\n if (this.leftMargin > -1 && this.leftMargin !== format.leftMargin) {\n this.leftMargin = -1;\n }\n if (this.topMargin > -1 && this.topMargin !== format.topMargin) {\n this.topMargin = -1;\n }\n if (this.rightMargin > -1 && this.rightMargin !== format.rightMargin) {\n this.rightMargin = -1;\n }\n if (this.bottomMargin > -1 && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = -1;\n }\n if (this.headerDistance !== 0 && this.headerDistance !== format.headerDistance) {\n this.headerDistance = 0;\n }\n if (this.footerDistance !== 0 && this.footerDistance !== format.footerDistance) {\n this.footerDistance = 0;\n }\n if (!isNullOrUndefined(this.differentFirstPage) && this.differentFirstPage !== format.differentFirstPage) {\n this.differentFirstPage = undefined;\n }\n if (!isNullOrUndefined(this.differentOddAndEvenPages) && this.differentOddAndEvenPages !== format.differentOddAndEvenPages) {\n this.differentOddAndEvenPages = undefined;\n }\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionSectionFormat.prototype.clearFormat = function () {\n this.headerDistance = 0;\n this.footerDistance = 0;\n this.pageHeight = 0;\n this.pageWidth = 0;\n this.leftMargin = -1;\n this.rightMargin = -1;\n this.topMargin = -1;\n this.bottomMargin = -1;\n this.differentFirstPage = undefined;\n this.differentOddAndEvenPages = undefined;\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionSectionFormat.prototype.destroy = function () {\n this.headerDistanceIn = undefined;\n this.footerDistanceIn = undefined;\n this.pageHeightIn = undefined;\n this.pageWidthIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n this.selection = undefined;\n };\n return SelectionSectionFormat;\n}());\nexport { SelectionSectionFormat };\n/**\n * Selection table format implementation\n */\nvar SelectionTableFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionTableFormat(selection) {\n this.leftIndentIn = 0;\n this.backgroundIn = undefined;\n this.tableAlignmentIn = undefined;\n this.cellSpacingIn = 0;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.preferredWidthIn = 0;\n this.selection = selection;\n }\n Object.defineProperty(SelectionTableFormat.prototype, \"table\", {\n /**\n * Gets or sets the table.\n * @private\n */\n get: function () {\n return this.tableIn;\n },\n set: function (value) {\n this.tableIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected table.\n * @private\n */\n get: function () {\n return this.leftIndentIn;\n },\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the default top margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.topMarginIn;\n },\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected table.\n * @default undefined\n */\n get: function () {\n return this.backgroundIn;\n },\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"tableAlignment\", {\n /**\n * Gets or Sets the table alignment for selected table.\n * @default undefined\n */\n get: function () {\n return this.tableAlignmentIn;\n },\n set: function (value) {\n if (value === this.tableAlignmentIn) {\n return;\n }\n this.tableAlignmentIn = value;\n this.notifyPropertyChanged('tableAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the default left margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.leftMarginIn;\n },\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the default bottom margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.bottomMarginIn;\n },\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"cellSpacing\", {\n /**\n * Gets or Sets the cell spacing for selected table.\n * @default undefined\n */\n get: function () {\n return this.cellSpacingIn;\n },\n set: function (value) {\n if (value === this.cellSpacingIn) {\n return;\n }\n this.cellSpacingIn = value;\n this.notifyPropertyChanged('cellSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the default right margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.rightMarginIn;\n },\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected table.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthIn;\n },\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidthType\", {\n /**\n * Gets or Sets the preferred width type for selected table.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n SelectionTableFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'tableAlignment':\n return this.tableAlignment;\n case 'leftIndent':\n return this.leftIndent;\n case 'cellSpacing':\n return this.cellSpacing;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n default:\n return undefined;\n }\n };\n SelectionTableFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared\n || !this.selection.owner.isDocumentLoaded || this.selection.owner.isReadOnlyMode\n || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableFormat(propertyName, value);\n }\n }\n };\n /**\n * Copies the format.\n * @param {WTableFormat} format Format to copy.\n * @returns void\n * @private\n */\n SelectionTableFormat.prototype.copyFormat = function (format) {\n this.leftIndent = format.leftIndent;\n this.background = format.shading.backgroundColor;\n this.tableAlignment = format.tableAlignment;\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.cellSpacing = format.cellSpacing;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionTableFormat.prototype.clearFormat = function () {\n this.table = undefined;\n this.leftIndent = 0;\n this.background = undefined;\n this.leftIndent = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.bottomMargin = 0;\n this.cellSpacing = 0;\n this.tableAlignment = undefined;\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionTableFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.backgroundIn = undefined;\n this.leftIndentIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.cellSpacingIn = undefined;\n this.tableAlignmentIn = undefined;\n this.tableIn = undefined;\n this.selection = undefined;\n };\n return SelectionTableFormat;\n}());\nexport { SelectionTableFormat };\n/**\n * Selection cell format implementation\n */\nvar SelectionCellFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionCellFormat(selection) {\n this.verticalAlignmentIn = undefined;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.backgroundIn = undefined;\n this.preferredWidthTypeIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCellFormat.prototype, \"verticalAlignment\", {\n /**\n * Gets or sets the vertical alignment of the selected cells.\n * @default undefined\n */\n get: function () {\n return this.verticalAlignmentIn;\n },\n set: function (value) {\n if (value === this.verticalAlignmentIn) {\n return;\n }\n this.verticalAlignmentIn = value;\n this.notifyPropertyChanged('verticalAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the left margin for selected cells.\n * @default undefined\n */\n /* tslint:disable */\n get: function () {\n return this.leftMarginIn;\n },\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the right margin for selected cells.\n * @default undefined\n */\n get: function () {\n return this.rightMarginIn;\n },\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the top margin for selected cells.\n * @default undefined\n */\n get: function () {\n return this.topMarginIn;\n },\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the bottom margin for selected cells.\n * @default undefined\n */\n get: function () {\n return this.bottomMarginIn;\n },\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected cells.\n * @default undefined\n */\n get: function () {\n return this.backgroundIn;\n },\n /* tslint:enable */\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidthType\", {\n /* tslint:disable */\n /**\n * Gets or Sets the preferred width type for selected cells.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected cells.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthIn;\n },\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n /* tslint:enable */\n SelectionCellFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection)) {\n if ((selection.isCleared || !selection.owner.isDocumentLoaded\n || selection.owner.isReadOnlyMode || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableCellFormat(propertyName, value);\n }\n }\n }\n };\n SelectionCellFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'verticalAlignment':\n return this.verticalAlignment;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n * @param {WCellFormat} format Source Format to copy.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.copyFormat = function (format) {\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.background = format.shading.backgroundColor;\n this.verticalAlignment = format.verticalAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.clearCellFormat = function () {\n this.leftMargin = undefined;\n this.rightMargin = undefined;\n this.topMargin = undefined;\n this.bottomMargin = undefined;\n this.background = undefined;\n this.verticalAlignment = undefined;\n };\n /**\n * Combines the format.\n * @param {WCellFormat} format\n * @private\n */\n SelectionCellFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftMargin) && this.leftMargin !== format.leftMargin) {\n this.leftMargin = undefined;\n }\n if (!isNullOrUndefined(this.topMargin) && this.topMargin !== format.topMargin) {\n this.topMargin = undefined;\n }\n if (!isNullOrUndefined(this.rightMargin) && this.rightMargin !== format.rightMargin) {\n this.rightMargin = undefined;\n }\n if (!isNullOrUndefined(this.bottomMargin) && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = undefined;\n }\n if (!isNullOrUndefined(this.background) && this.background !== format.shading.backgroundColor) {\n this.background = undefined;\n }\n if (!isNullOrUndefined(this.verticalAlignment) && this.verticalAlignment !== format.verticalAlignment) {\n this.verticalAlignment = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidth) && this.preferredWidth !== format.preferredWidth) {\n this.preferredWidth = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidthType) && this.preferredWidthType !== format.preferredWidthType) {\n this.preferredWidthType = undefined;\n }\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.clearFormat = function () {\n this.background = undefined;\n this.bottomMargin = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.verticalAlignment = undefined;\n };\n /**\n * Destroys the manages resources.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.destroy = function () {\n this.backgroundIn = undefined;\n this.verticalAlignmentIn = undefined;\n this.bottomMarginIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.selection = undefined;\n };\n return SelectionCellFormat;\n}());\nexport { SelectionCellFormat };\n/**\n * Selection row format implementation\n */\nvar SelectionRowFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionRowFormat(selection) {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.isHeaderIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionRowFormat.prototype, \"height\", {\n /**\n * Gets or Sets the height for selected rows.\n * @default undefined\n */\n get: function () {\n return this.heightIn;\n },\n set: function (value) {\n if (value === this.heightIn) {\n return;\n }\n this.heightIn = value;\n this.notifyPropertyChanged('height');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"heightType\", {\n /**\n * Gets or Sets the height type for selected rows.\n * @default undefined\n */\n get: function () {\n return this.heightTypeIn;\n },\n set: function (value) {\n if (value === this.heightTypeIn) {\n return;\n }\n this.heightTypeIn = value;\n this.notifyPropertyChanged('heightType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"isHeader\", {\n /**\n * Gets or Sets a value indicating whether the selected rows are header rows or not.\n * @default undefined\n */\n get: function () {\n return this.isHeaderIn;\n },\n set: function (value) {\n if (value === this.isHeaderIn) {\n return;\n }\n this.isHeaderIn = value;\n this.notifyPropertyChanged('isHeader');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"allowBreakAcrossPages\", {\n /**\n * Gets or Sets a value indicating whether to allow break across pages for selected rows.\n * @default undefined\n */\n get: function () {\n return this.allowRowBreakAcrossPagesIn;\n },\n set: function (value) {\n if (value === this.allowRowBreakAcrossPagesIn) {\n return;\n }\n this.allowRowBreakAcrossPagesIn = value;\n this.notifyPropertyChanged('allowBreakAcrossPages');\n },\n enumerable: true,\n configurable: true\n });\n SelectionRowFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isReadOnlyMode\n || !selection.owner.isDocumentLoaded || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplyTableRowFormat(propertyName, value);\n }\n }\n };\n SelectionRowFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'height':\n return this.height;\n case 'heightType':\n return this.heightType;\n case 'isHeader':\n return this.isHeader;\n case 'allowBreakAcrossPages':\n return this.allowBreakAcrossPages;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n * @param {WRowFormat} format\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.copyFormat = function (format) {\n this.height = format.height;\n this.heightType = format.heightType;\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n };\n /**\n * Combines the format.\n * @param {WRowFormat} format\n * @private\n */\n SelectionRowFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.height) && this.height !== format.height) {\n this.height = undefined;\n }\n if (!isNullOrUndefined(this.heightType) && this.heightType !== format.heightType) {\n this.heightType = undefined;\n }\n if (!isNullOrUndefined(this.allowBreakAcrossPages) && this.allowBreakAcrossPages !== format.allowBreakAcrossPages) {\n this.allowBreakAcrossPages = undefined;\n }\n if (!isNullOrUndefined(this.isHeader) && this.isHeader !== format.isHeader) {\n this.isHeader = undefined;\n }\n };\n /**\n * Clears the row format.\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.clearRowFormat = function () {\n this.height = undefined;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.clearFormat = function () {\n this.height = 0;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.destroy = function () {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.isHeaderIn = undefined;\n this.selection = undefined;\n };\n return SelectionRowFormat;\n}());\nexport { SelectionRowFormat };\n/**\n * Selection image format implementation\n */\nvar SelectionImageFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionImageFormat(selection) {\n this.selection = selection;\n }\n Object.defineProperty(SelectionImageFormat.prototype, \"width\", {\n /**\n * Gets the width of the image.\n */\n get: function () {\n if (this.image) {\n return this.image.width;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionImageFormat.prototype, \"height\", {\n /**\n * Gets the height of the image.\n */\n get: function () {\n if (this.image) {\n return this.image.height;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Resizes the image based on given size.\n * @param width\n * @param height\n */\n SelectionImageFormat.prototype.resize = function (width, height) {\n this.updateImageFormat(width, height);\n };\n /**\n * Update image width and height\n * @private\n */\n SelectionImageFormat.prototype.updateImageFormat = function (width, height) {\n if (this.image) {\n if (this.selection.owner.editorModule) {\n this.selection.owner.editorModule.onImageFormat(this.image, width, height);\n }\n }\n };\n /**\n * @private\n */\n SelectionImageFormat.prototype.copyImageFormat = function (image) {\n this.image = image;\n };\n /**\n * @private\n */\n SelectionImageFormat.prototype.clearImageFormat = function () {\n this.image = undefined;\n };\n return SelectionImageFormat;\n}());\nexport { SelectionImageFormat };\n/* tslint:enable */ \n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar HtmlExport = /** @class */ (function () {\n function HtmlExport() {\n /* tslint:disable:no-any */\n this.document = undefined;\n /* tslint:disable:no-any */\n /**\n * @private\n */\n this.fieldCheck = 0;\n /* tslint:enable:no-any */\n }\n /* tslint:disable:no-any */\n /**\n * @private\n */\n HtmlExport.prototype.writeHtml = function (document) {\n this.document = document;\n var html = '';\n for (var i = 0; i < document.sections.length; i++) {\n html = this.serializeSection(document.sections[i]);\n }\n return html;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeSection = function (section) {\n var string = '';\n for (var i = 0; i < section.blocks.length; i++) {\n var block = section.blocks[i];\n if (block.hasOwnProperty('inlines')) {\n string += this.serializeParagraph(block);\n }\n else {\n string += this.serializeTable(block);\n }\n }\n return string;\n };\n // Serialize Paragraph \n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraph = function (paragraph) {\n var blockStyle = '';\n var startString = undefined;\n var isList = false;\n var tagAttributes = [];\n tagAttributes.push('style=\"' + this.serializeParagraphStyle(paragraph, '', isList) + '\"');\n blockStyle += this.createAttributesTag('p', tagAttributes);\n if (paragraph.inlines.length === 0) {\n //Handled to preserve non breaking space for empty paragraphs similar to MS Word behavior.\n blockStyle += ' ';\n }\n else {\n blockStyle = this.serializeInlines(paragraph, blockStyle);\n }\n blockStyle += this.endTag('p');\n return blockStyle;\n };\n //SerializeInlines\n /**\n * @private\n */\n HtmlExport.prototype.serializeInlines = function (paragraph, blockStyle) {\n var inline = undefined;\n var i = 0;\n while (paragraph.inlines.length > i) {\n inline = paragraph.inlines[i];\n if (inline.hasOwnProperty('imageString')) {\n blockStyle += this.serializeImageContainer(inline);\n }\n else if (inline.hasOwnProperty('fieldType')) {\n if (inline.fieldType === 0) {\n this.fieldCheck = 1;\n var tagAttributes = [];\n tagAttributes.push('style=\"' + this.serializeInlineStyle(inline.characterFormat, '') + '\"');\n blockStyle += this.createAttributesTag('a', tagAttributes);\n }\n else if (inline.fieldType === 2) {\n this.fieldCheck = 2;\n }\n else {\n blockStyle += this.endTag('a');\n this.fieldCheck = 0;\n }\n }\n else {\n var text = isNullOrUndefined(inline.text) ? '' : inline.text;\n if (this.fieldCheck === 0) {\n blockStyle += this.serializeSpan(text, inline.characterFormat);\n }\n if (this.fieldCheck === 1) {\n var hyperLink = text.replace('\\\"', '');\n blockStyle += ' href= \\\"' + hyperLink.replace('HYPERLINK', '').trim();\n blockStyle += '\\\"';\n blockStyle += '>';\n }\n if (this.fieldCheck === 2) {\n blockStyle += text;\n }\n }\n i++;\n }\n return blockStyle;\n };\n // Serialize Span\n /**\n * @private\n */\n HtmlExport.prototype.serializeSpan = function (spanText, characterFormat) {\n var spanClass = '';\n if (spanText.indexOf('\\v') !== -1) {\n spanClass += '
    ';\n return spanClass.toString();\n }\n var tagAttributes = [];\n this.serializeInlineStyle(characterFormat, '');\n tagAttributes.push('style=\"' + this.serializeInlineStyle(characterFormat, '') + '\"');\n spanClass += this.createAttributesTag('span', tagAttributes);\n var ignoreFirstSpace = false;\n // Todo: Need to handle it.\n // If the text starts with white-space, need to check whether it is a continuous space.\n // if (characterFormat.ownerBase instanceof WInline) {\n // let inline: WInline = (characterFormat.ownerBase as WInline);\n // tslint:disable:max-line-length \n // if (inline instanceof WSpan && !isNullOrUndefined(inline.text) && inline.text !== '' && (inline as WSpan).text[0] === ' ') {\n // Check previous inline until, it has valid rendered text.\n // do {\n // inline = WInline.getPreviousTextInline((inline as WSpan));\n // } while (inline instanceof WSpan && !isNullOrUndefined(inline.text));\n // } else {\n // inline = undefined;\n // }\n // If current white-space is a continuation of consecutive spaces, this will be set true.\n // ignoreFirstSpace = inline instanceof WSpan && !isNullOrUndefined(inline.text)\n // && (inline as WSpan).text[(inline as WSpan).text.length - 1] === ' ';\n // }\n var text = this.decodeHtmlNames(spanText.toString());\n spanClass += text;\n spanClass += this.endTag('span');\n return spanClass.toString();\n };\n //Serialize Image\n /**\n * @private\n */\n HtmlExport.prototype.serializeImageContainer = function (image) {\n var imageStyle = '';\n var tagAttributes = [];\n this.serializeInlineStyle(image.characterFormat, '');\n var imageSource = '';\n if (!isNullOrUndefined(image.imageString)) {\n imageSource = image.imageString;\n }\n var width = HelperMethods.convertPointToPixel(image.width);\n var height = HelperMethods.convertPointToPixel(image.height);\n tagAttributes.push('width=\"', width.toString() + '\"');\n tagAttributes.push('height=\"', height.toString() + '\"');\n tagAttributes.push('src=\"', imageSource + '\"');\n imageStyle += this.createAttributesTag('img', tagAttributes);\n imageStyle += (this.endTag('img'));\n return imageStyle.toString();\n };\n // Serialize Table Cell\n /**\n * @private\n */\n HtmlExport.prototype.serializeCell = function (cell) {\n var blockStyle = '';\n var tagAttributes = [];\n var cellHtml = '';\n tagAttributes = [];\n if (!isNullOrUndefined(cell.cellFormat)) {\n //if (cell.cellFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n tagAttributes.push('bgcolor=\"' + cell.cellFormat.shading.backgroundColor + '\"');\n // }\n if (cell.cellFormat.columnSpan > 1) {\n tagAttributes.push('colspan=\"' + cell.cellFormat.columnSpan.toString() + '\"');\n }\n if (cell.cellFormat.rowSpan > 1) {\n tagAttributes.push('rowspan=\"' + cell.cellFormat.rowSpan.toString() + '\"');\n }\n if (cell.cellFormat.cellWidth !== 0) {\n tagAttributes.push('width=\"' + cell.cellFormat.cellWidth.toString() + '\"');\n }\n if (cell.cellFormat.verticalAlignment !== 'Top') {\n tagAttributes.push('valign=\"' + cell.cellFormat.verticalAlignment.toString().toLowerCase() + '\"');\n }\n if (!isNullOrUndefined(cell.cellFormat.leftMargin) && cell.cellFormat.leftMargin !== 0) {\n cellHtml += ('padding-left:' + cell.cellFormat.leftMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.rightMargin) && cell.cellFormat.rightMargin !== 0) {\n cellHtml += ('padding-right:' + cell.cellFormat.rightMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.topMargin) && cell.cellFormat.topMargin !== 0) {\n cellHtml += ('padding-top:' + cell.cellFormat.topMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.bottomMargin) && cell.cellFormat.bottomMargin !== 0) {\n cellHtml += ('padding-bottom:' + cell.cellFormat.bottomMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.borders)) {\n cellHtml += this.serializeCellBordersStyle(cell.cellFormat.borders);\n }\n }\n if (cellHtml.length !== 0) {\n tagAttributes.push('style=\"' + cellHtml + '\"');\n }\n blockStyle += (this.createAttributesTag('td', tagAttributes));\n for (var k = 0; k < cell.blocks.length; k++) {\n var block = cell.blocks[k];\n if (block.hasOwnProperty('rows')) {\n blockStyle += this.serializeTable(block);\n }\n else {\n blockStyle += this.serializeParagraph(block);\n }\n }\n blockStyle += (this.endTag('td'));\n return blockStyle;\n };\n // Serialize Table\n /**\n * @private\n */\n HtmlExport.prototype.serializeTable = function (table) {\n var html = '';\n html += this.createTableStartTag(table);\n for (var j = 0; j < table.rows.length; j++) {\n html += this.serializeRow(table.rows[j]);\n }\n html += this.createTableEndTag();\n return html;\n };\n // Serialize Row\n /**\n * @private\n */\n HtmlExport.prototype.serializeRow = function (row) {\n var html = '';\n html += this.createRowStartTag(row);\n for (var k = 0; k < row.cells.length; k++) {\n html += this.serializeCell(row.cells[k]);\n }\n return html;\n };\n // Serialize Styles\n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraphStyle = function (paragraph, className, isList) {\n var paragraphClass = '';\n paragraphClass += this.serializeCharacterFormat(paragraph.characterFormat);\n paragraphClass += this.serializeParagraphFormat(paragraph.paragraphFormat, isList);\n return paragraphClass;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeInlineStyle = function (characterFormat, className) {\n return this.serializeCharacterFormat(characterFormat);\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeTableBorderStyle = function (borders) {\n var borderStyle = '';\n borderStyle += ('border-left-style:' + this.convertBorderLineStyle(borders.left.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-left-width:' + borders.left.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-left-color:' + borders.left.color);\n borderStyle += ';';\n borderStyle += ('border-right-style:' + this.convertBorderLineStyle(borders.right.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-right-width:' + borders.right.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-right-color:' + borders.right.color);\n borderStyle += ';';\n borderStyle += ('border-top-style:' + this.convertBorderLineStyle(borders.top.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-top-width:' + borders.top.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-top-color:' + borders.top.color);\n borderStyle += ';';\n borderStyle += ('border-Bottom-style:' + this.convertBorderLineStyle(borders.bottom.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-Bottom-width:' + borders.bottom.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-Bottom-color:' + borders.bottom.color);\n borderStyle += ';';\n return borderStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeCellBordersStyle = function (borders) {\n var borderStyle = '';\n borderStyle = 'border:solid 1px;';\n // Todo: handle\n // let border: WBorder = undefined;\n // //LeftBorder\n // border = WCell.getCellLeftBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'left');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-left-style:none;');\n // }\n // //RightBorder\n // border = WCell.getCellRightBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'right');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-right-style:none');\n // }\n // //TopBorder\n // border = WCell.getCellTopBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'top');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-top-style:none');\n // }\n // //BottomBorder\n // border = WCell.getCellBottomBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'bottom');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-bottom-style:none');\n // }\n return borderStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeBorderStyle = function (border, borderPosition) {\n var borderStyle = '';\n borderStyle += ('border-' + borderPosition + '-style:' + this.convertBorderLineStyle(border.lineStyle));\n borderStyle += ';';\n if (border.lineWidth > 0) {\n borderStyle += ('border-' + borderPosition + '-width:' + border.lineWidth.toString() + 'pt;');\n }\n //if (border.color !== Color.FromArgb(0, 0, 0, 0))\n borderStyle += ('border-' + borderPosition + '-color:' + border.color + ';');\n return borderStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.convertBorderLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'None':\n return 'none';\n case 'Single':\n return 'solid';\n case 'Dot':\n return 'dotted';\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n return 'dashed';\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n return 'double';\n case 'SingleWavy':\n return 'solid';\n case 'DoubleWavy':\n return 'double';\n case 'DashDotStroked':\n return 'solid';\n case 'Emboss3D':\n return 'ridge';\n case 'Engrave3D':\n return 'groove';\n case 'Outset':\n return 'outset';\n case 'Inset':\n return 'inset';\n default:\n return 'solid';\n }\n };\n // Serialize Format\n /**\n * @private\n */\n HtmlExport.prototype.serializeCharacterFormat = function (characterFormat) {\n if (!isNullOrUndefined(characterFormat.inlineFormat)) {\n return this.serializeCharacterFormat(characterFormat.inlineFormat);\n }\n var propertyValue;\n var charStyle = '';\n if (characterFormat.bold) {\n charStyle += 'font-weight';\n charStyle += ':';\n charStyle += 'bold';\n charStyle += ';';\n }\n charStyle += 'font-style';\n charStyle += ':';\n if (characterFormat.italic) {\n charStyle += 'italic';\n }\n else {\n charStyle += 'normal';\n }\n charStyle += ';';\n // Double strike through will become Single strike through while saving HTML using MS Word.\n if (characterFormat.strikethrough === 'SingleStrike' || characterFormat.strikethrough === 'DoubleStrike') {\n charStyle += 'text-decoration';\n charStyle += ':';\n charStyle += 'line-through';\n charStyle += ';';\n }\n //Text Baseline Alignment\n // tslint:disable-next-line:max-line-length\n if (characterFormat.baselineAlignment === 'Superscript' || characterFormat.baselineAlignment === 'Subscript') {\n charStyle += 'vertical-align';\n charStyle += ':';\n charStyle += characterFormat.baselineAlignment === 'Superscript' ? 'super' : 'sub';\n charStyle += ';';\n }\n //Text Foreground and Background Color \n if (!isNullOrUndefined(characterFormat.highlightColor)) {\n charStyle += 'background-color';\n charStyle += ':';\n charStyle += characterFormat.highlightColor.toString();\n charStyle += ';';\n }\n //Font Color\n propertyValue = characterFormat.fontColor;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'color';\n charStyle += ':';\n charStyle += propertyValue;\n charStyle += ';';\n }\n if (!isNullOrUndefined(characterFormat.underline) && characterFormat.underline !== 'None') {\n charStyle += 'text-decoration';\n charStyle += ':';\n charStyle += 'underline';\n charStyle += ';';\n }\n propertyValue = characterFormat.fontSize;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-size';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += 'pt';\n charStyle += ';';\n }\n propertyValue = characterFormat.fontFamily;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-family';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += ';';\n }\n return charStyle.toString();\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraphFormat = function (paragraphFormat, isList) {\n if (!isNullOrUndefined(paragraphFormat.inlineFormat)) {\n return this.serializeParagraphFormat(paragraphFormat.inlineFormat, isList);\n }\n var propertyValue;\n var paraStyle = '';\n propertyValue = paragraphFormat.textAlignment;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'text-align:' + propertyValue.toLowerCase() + ';';\n }\n propertyValue = paragraphFormat.beforeSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-top:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.rightIndent;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-right:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.afterSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-bottom:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.leftIndent;\n if (isList) {\n if (isNullOrUndefined(propertyValue)) {\n propertyValue = -48;\n }\n else {\n propertyValue -= 48;\n }\n }\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-left:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.firstLineIndent;\n if (isList) {\n if (isNullOrUndefined(propertyValue)) {\n propertyValue = 24;\n }\n else {\n propertyValue += 24;\n }\n }\n if (!isNullOrUndefined(propertyValue) && propertyValue !== 0) {\n paraStyle += 'text-indent:' + propertyValue.toString() + 'pt;';\n }\n propertyValue = paragraphFormat.lineSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n if (paragraphFormat.lineSpacingType === 'Multiple') {\n propertyValue = (propertyValue * 100).toString() + '%;';\n }\n else {\n propertyValue = propertyValue.toString() + 'pt;';\n }\n paraStyle += 'line-height:' + propertyValue;\n }\n return paraStyle.toString();\n };\n /**\n * @private\n */\n HtmlExport.prototype.createAttributesTag = function (tagValue, localProperties) {\n var sb = '';\n sb += '<';\n sb += tagValue;\n for (var i = 0; i < localProperties.length; i++) {\n sb += ' ';\n sb += localProperties[i];\n }\n if (tagValue !== 'a') {\n sb += '>';\n }\n return sb;\n };\n /**\n * @private\n */\n HtmlExport.prototype.createTag = function (tagValue) {\n var s = '';\n s += '<';\n s += tagValue;\n s += '>';\n return s;\n };\n /**\n * @private\n */\n HtmlExport.prototype.endTag = function (tagValue) {\n var sb = '';\n sb += '<';\n sb += '/';\n sb += tagValue;\n sb += '>';\n return sb;\n };\n /**\n * @private\n */\n HtmlExport.prototype.createTableStartTag = function (table) {\n var blockStyle = '';\n var tableStyle = '';\n var tagAttributes = [];\n tagAttributes.push('border=\"' + '1\"');\n if (!isNullOrUndefined(table.tableFormat)) {\n //if (table.tableFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n tagAttributes.push('bgcolor=\"' + table.tableFormat.shading.backgroundColor + '\"');\n //}\n if (table.tableFormat.leftIndent !== 0) {\n tagAttributes.push('left-indent=\"' + table.tableFormat.leftIndent.toString() + 'pt;');\n }\n if (table.tableFormat.cellSpacing > 0) {\n tagAttributes.push('cellspacing=\"' + (((table.tableFormat.cellSpacing * 72) / 96) * 2).toString() + '\"');\n }\n else {\n tableStyle += ('border-collapse:collapse;');\n }\n tagAttributes.push('cellpadding=\"' + '0\"');\n if (!isNullOrUndefined(table.tableFormat.borders)) {\n tableStyle += this.serializeTableBorderStyle(table.tableFormat.borders);\n }\n }\n if (tableStyle.length !== 0) {\n tagAttributes.push('style=\"', tableStyle.toString() + '\"');\n }\n return blockStyle += (this.createAttributesTag('table', tagAttributes));\n };\n /**\n * @private\n */\n HtmlExport.prototype.createTableEndTag = function () {\n var blockStyle = '';\n blockStyle += (this.endTag('table'));\n return blockStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.createRowStartTag = function (row) {\n var blockStyle = '';\n var tagAttributes = [];\n if (row.rowFormat.isHeader) {\n blockStyle += (this.createTag('thead'));\n }\n if (row.rowFormat.height > 0) {\n tagAttributes.push('height=\"' + row.rowFormat.height + '\"');\n }\n return blockStyle + this.createAttributesTag('tr', tagAttributes);\n };\n /**\n * @private\n */\n HtmlExport.prototype.createRowEndTag = function (row) {\n var blockStyle = '';\n blockStyle += (this.endTag('tr'));\n if (row.rowFormat.isHeader) {\n blockStyle += (this.endTag('thead'));\n }\n return blockStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.decodeHtmlNames = function (text) {\n if (text === '\\t') {\n return ' ';\n }\n var splittedText = text.split(' ');\n var htmlText = '';\n if (splittedText.length > 0) {\n htmlText = splittedText[0];\n for (var i = 0; i < splittedText.length - 1; i++) {\n htmlText += ' ' + splittedText[i + 1];\n }\n }\n return htmlText;\n };\n return HtmlExport;\n}());\nexport { HtmlExport };\n","import { Widget, TableRowWidget, TableWidget, LineWidget, ElementBox, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockContainer, BookmarkElementBox } from '../index';\nimport { HelperMethods } from '../index';\nimport { Point } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar TextPosition = /** @class */ (function () {\n function TextPosition(owner) {\n /**\n * @private\n */\n this.location = new Point(0, 0);\n /**\n * @private\n */\n this.isUpdateLocation = true;\n this.owner = owner;\n this.viewer = this.owner.viewer;\n }\n Object.defineProperty(TextPosition.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n return this.currentWidget.paragraph;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isAtParagraphStart\", {\n /**\n * @private\n */\n get: function () {\n return this.offset === this.owner.selection.getStartOffset(this.paragraph);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isAtParagraphEnd\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.selection.isParagraphLastLine(this.currentWidget)\n && this.offset === this.owner.selection.getLineLength(this.currentWidget);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"selection\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"hierarchicalPosition\", {\n /**\n * Gets the hierarchical position of logical text position in the document\n * @returns {string}\n */\n get: function () {\n return this.getHierarchicalIndexInternal();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return clone of current text position\n * @private\n */\n TextPosition.prototype.clone = function () {\n var textPosition = new TextPosition(this.owner);\n textPosition.currentWidget = this.currentWidget;\n textPosition.offset = this.offset;\n textPosition.location = this.location;\n return textPosition;\n };\n /**\n * Set text position for paragraph and inline\n * @private\n */\n TextPosition.prototype.setPositionForSelection = function (line, element, index, physicalLocation) {\n //Set the start end position\n var isParagraphEnd = false;\n if (isNullOrUndefined(element)) {\n this.currentWidget = line;\n }\n else {\n this.currentWidget = element.line;\n if (element.nextNode instanceof FieldElementBox && index > element.length) {\n isParagraphEnd = this.selection.isLastRenderedInline(element, element.length);\n }\n }\n this.location = physicalLocation;\n if (isParagraphEnd) {\n this.offset = this.selection.getParagraphLength(this.currentWidget.paragraph) + 1;\n }\n else {\n this.offset = this.currentWidget.getOffset(element, index);\n }\n };\n /**\n * Set text position\n * @private\n */\n TextPosition.prototype.setPositionFromLine = function (line, offset, location) {\n this.currentWidget = line;\n this.offset = offset;\n if (location instanceof Point) {\n this.location.copy(location);\n }\n };\n /**\n * Set text position\n * @private\n */\n TextPosition.prototype.setPosition = function (line, positionAtStart) {\n this.currentWidget = line;\n this.offset = positionAtStart ? this.selection.getStartOffset(line.paragraph)\n : this.selection.getParagraphLength(line.paragraph) + 1;\n this.updatePhysicalPosition(true);\n };\n /**\n * Set position for text position\n * @private\n */\n TextPosition.prototype.setPositionInternal = function (textPosition) {\n this.currentWidget = textPosition.currentWidget;\n this.offset = textPosition.offset;\n this.location = textPosition.location;\n };\n /**\n * Set position for current index\n * @private\n */\n TextPosition.prototype.setPositionForCurrentIndex = function (hierarchicalIndex) {\n var index = { index: hierarchicalIndex };\n var paragraph = this.getParagraphWidget(index); //ref hierarchicalIndex\n this.offset = parseFloat(index.index);\n this.setPositionParagraph(paragraph, this.offset);\n };\n /**\n * Get Page\n */\n TextPosition.prototype.getPage = function (position) {\n var page;\n var index = position.index.indexOf(';');\n var newValue = '0';\n if (index >= 0) {\n newValue = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n index = parseInt(newValue, 10);\n page = this.viewer.pages[index];\n return page;\n };\n /**\n * @private\n */\n TextPosition.prototype.getParagraphWidget = function (position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var page = this.getPage(position);\n var child = this.getLineWidget(undefined, position, page);\n return child;\n };\n /**\n * @private\n */\n TextPosition.prototype.getLineWidget = function (widget, position, page) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n if (value === 'H' || value === 'F') {\n if (value === 'H') {\n widget = page.headerWidget;\n }\n else {\n widget = page.footerWidget;\n }\n }\n else if (!isNullOrUndefined(page)) {\n widget = page.bodyWidgets[0];\n }\n index = parseInt(value, 10);\n if (widget instanceof BlockContainer) {\n index = position.index.indexOf(';');\n value = '0';\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n }\n if (widget instanceof TableRowWidget && index >= widget.childWidgets.length) {\n position.index = '0;0';\n index = widget.childWidgets.length - 1;\n }\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[index];\n if (child instanceof LineWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getLineWidget(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.getLineWidget(this.selection.getFirstParagraphInFirstCell(child), position);\n }\n else if (child instanceof TableRowWidget && position.index.indexOf(';') === -1) {\n return this.selection.getFirstParagraphInFirstCell(child.ownerTable).childWidgets[0];\n }\n return undefined;\n }\n }\n }\n else if (widget.nextRenderedWidget instanceof Widget) {\n position.index = '0';\n if (widget.nextRenderedWidget instanceof TableWidget) {\n return this.selection.getFirstParagraphInFirstCell(widget.nextRenderedWidget).firstChild;\n }\n return this.getLineWidget(widget.nextRenderedWidget, position);\n }\n return undefined;\n };\n /**\n * Update physical location of paragraph\n * @private\n */\n TextPosition.prototype.updatePhysicalPosition = function (moveNextLine) {\n if (this.currentWidget && this.owner.isLayoutEnabled && this.isUpdateLocation) {\n this.location = this.selection.getPhysicalPositionInternal(this.currentWidget, this.offset, moveNextLine);\n }\n };\n /**\n * Return true if text position are in same paragraph and offset\n * @private\n */\n TextPosition.prototype.isAtSamePosition = function (textPosition) {\n return this.currentWidget === textPosition.currentWidget\n && this.offset === textPosition.offset;\n };\n /**\n * Return true if text position is in same paragraph\n * @private\n */\n TextPosition.prototype.isInSameParagraph = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n return this.paragraph === textPosition.paragraph;\n };\n /**\n * Return true is current text position exist before given text position\n * @private\n */\n TextPosition.prototype.isExistBefore = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset < textPosition.offset;\n }\n var currentParagraph = this.currentWidget.paragraph;\n var paragraph = textPosition.currentWidget.paragraph;\n if (currentParagraph === paragraph) {\n return currentParagraph.childWidgets.indexOf(this.currentWidget) < paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n if (currentParagraph.containerWidget === paragraph.containerWidget) {\n if (currentParagraph.isInsideTable) {\n return currentParagraph.associatedCell.childWidgets.indexOf(currentParagraph) <\n paragraph.associatedCell.childWidgets.indexOf(paragraph);\n //handle after header footer implementation\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) <\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph)) <\n (paragraph.containerWidget.childWidgets.indexOf(paragraph));\n }\n }\n return this.owner.selection.isExistBefore(currentParagraph, paragraph);\n };\n /**\n * Return true is current text position exist after given text position\n * @private\n */\n TextPosition.prototype.isExistAfter = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset > textPosition.offset;\n }\n if (this.currentWidget.paragraph === textPosition.currentWidget.paragraph) {\n return this.currentWidget.paragraph.childWidgets.indexOf(this.currentWidget) >\n textPosition.currentWidget.paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n var startParagraph = this.currentWidget.paragraph;\n var endParagraph = textPosition.currentWidget.paragraph;\n if (startParagraph.containerWidget.index === endParagraph.containerWidget.index) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) >\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n (endParagraph.containerWidget.childWidgets.indexOf(endParagraph)));\n }\n }\n return this.owner.selection.isExistAfter(startParagraph, endParagraph);\n };\n /**\n * Return hierarchical index of current text position\n * @private\n */\n TextPosition.prototype.getHierarchicalIndexInternal = function () {\n return this.getHierarchicalIndex(this.currentWidget, this.offset.toString());\n };\n /**\n * @private\n */\n TextPosition.prototype.getHierarchicalIndex = function (line, hierarchicalIndex) {\n var node = line;\n if (node) {\n return node.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionParagraph = function (line, offsetInLine) {\n this.currentWidget = line;\n this.offset = offsetInLine;\n this.updatePhysicalPosition(true);\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionForLineWidget = function (lineWidget, offset) {\n var lineLength = this.selection.getLineLength(lineWidget);\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n if (offset > lineLength + 1) {\n var nextLineWidget = void 0;\n if (lineIndex >= lineWidget.paragraph.childWidgets.length - 1) {\n var nextBlock = this.selection.getNextRenderedBlock(lineWidget.paragraph);\n if (nextBlock && nextBlock.index === lineWidget.paragraph.index) {\n nextLineWidget = nextBlock.firstChild;\n }\n }\n else {\n nextLineWidget = lineWidget.paragraph.childWidgets[lineIndex + 1];\n }\n this.setPositionForLineWidget(nextLineWidget, offset - lineLength);\n return;\n }\n else if (offset < 0) {\n var prevLine = lineWidget.paragraph.childWidgets[lineIndex - 1];\n var curretOffSet = this.selection.getLineLength(prevLine) + offset;\n this.setPositionForLineWidget(prevLine, curretOffSet);\n return;\n }\n else {\n this.currentWidget = lineWidget;\n this.offset = offset;\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move to next text position\n * @private\n */\n TextPosition.prototype.moveNextPosition = function (isNavigate) {\n if (isNullOrUndefined(isNavigate)) {\n isNavigate = true;\n }\n var inline = this.selection.getNextStartInline(this.currentWidget, this.offset);\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNavigate) {\n this.moveNextPositionInternal(inline);\n this.moveNextPosition();\n return;\n }\n else {\n var line = inline.fieldEnd.line;\n var fieldEnd = inline.fieldEnd;\n var fieldEndOffset = line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(line, fieldEndOffset.toString());\n if (TextPosition.isForwardSelection(this.selection.end.getHierarchicalIndexInternal(), fieldEndIndex)) {\n //If field end is after selection end, extend selection end to field end.\n this.selection.end.moveToInline(inline.fieldEnd, 1);\n return;\n }\n this.moveToInline(inline.fieldEnd, 1);\n }\n }\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var index = 0;\n if (nextOffset > this.offset) {\n this.offset = nextOffset;\n var info = this.currentWidget.getInline(this.offset, index);\n inline = info.element;\n index = info.index;\n if (!isNullOrUndefined(inline) && index === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1) {\n inline = nextValidInline;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n }\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n }\n else {\n this.updateOffsetToNextParagraph(index, false);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move text position to previous paragraph inside table\n * @private\n */\n TextPosition.prototype.moveToPreviousParagraphInTable = function (selection) {\n var previousParagraph;\n var currentPara = this.currentWidget.paragraph;\n if (currentPara.isInsideTable) {\n previousParagraph = selection.getPreviousSelectionCell(currentPara.associatedCell);\n }\n else {\n previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n }\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n TextPosition.prototype.updateOffsetToNextParagraph = function (indexInInline, isHighlight) {\n //Moves to owner and get next paragraph.\n var inline;\n var positionAtStart = false;\n var nextParagraph = undefined;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (!isHighlight) {\n nextParagraph = this.selection.getNextParagraphBlock(this.paragraph);\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = 0;\n }\n }\n else {\n nextParagraph = this.selection.getNextSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(nextParagraph)) {\n if (nextParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, nextParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(nextParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(nextParagraph) && nextParagraph.childWidgets.length > 0) {\n if (!positionAtStart) {\n this.currentWidget = nextParagraph.firstChild;\n this.offset = isHighlight ? 1 : this.selection.getStartLineOffset(this.currentWidget);\n }\n else {\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.selection.getLineLength(this.currentWidget) + 1;\n }\n }\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n };\n TextPosition.prototype.updateOffsetToPrevPosition = function (index, isHighlight) {\n var inlineInfo;\n var inline;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var prevOffset = this.selection.getPreviousValidOffset(this.currentWidget.paragraph, this.offset);\n if (this.offset > prevOffset) {\n this.offset = prevOffset;\n }\n else if (lineIndex > 0) {\n var prevLineWidget = this.paragraph.childWidgets[lineIndex - 1];\n if (prevLineWidget) {\n this.currentWidget = prevLineWidget;\n this.offset = this.currentWidget.getEndOffset();\n }\n }\n else {\n //Moves to owner and get previous paragraph.\n var previousParagraph = undefined;\n var positionAtStart = false;\n if (!isHighlight) {\n previousParagraph = this.selection.getPreviousParagraphBlock(this.paragraph);\n }\n else {\n previousParagraph = this.selection.getPreviousSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(previousParagraph)) {\n if (previousParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, previousParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(previousParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(previousParagraph)) {\n if (!positionAtStart) {\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n else {\n this.currentWidget = previousParagraph.firstChild;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n }\n }\n index = 0;\n inlineInfo = this.currentWidget.getInline(this.offset, index);\n inline = inlineInfo.element;\n index = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var previousInline = this.selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n inline = previousInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset--;\n }\n }\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the next paragraph.\n */\n TextPosition.prototype.moveToNextParagraphStartInternal = function () {\n var paragraph = this.currentWidget.paragraph;\n if (!isNullOrUndefined(this.selection.getNextParagraphBlock(paragraph))) {\n // tslint:disable-next-line:max-line-length\n this.currentWidget = this.selection.getNextParagraphBlock(paragraph).firstChild;\n this.offset = this.selection.getStartOffset(paragraph);\n this.updatePhysicalPosition(true);\n }\n };\n /**\n * Move to previous position\n * @private\n */\n TextPosition.prototype.movePreviousPosition = function () {\n var index = 0;\n var inlineInfo = this.currentWidget.getInline(this.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(index, false);\n };\n /**\n * Move to next position\n * @private\n */\n TextPosition.prototype.moveNextPositionInternal = function (fieldBegin) {\n var inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n // tslint:disable-next-line:max-line-length\n if (this.currentWidget === fieldBegin.fieldEnd.line && !this.selection.hasValidInline(this.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n };\n /**\n * Move text position backward\n * @private\n */\n TextPosition.prototype.moveBackward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!this.owner.selection.isEmpty && !isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n // tslint:disable-next-line:max-line-length\n var fieldEndOffset = nextInline.fieldEnd.line.getOffset(nextInline.fieldEnd, 1);\n // tslint:disable-next-line:max-line-length\n var fieldEndIndex = this.getHierarchicalIndex(nextInline.fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, hierarchicalIndex)) {\n //If field end is after selection start, move selection start to field end.\n // tslint:disable-next-line:max-line-length\n this.owner.selection.start.setPositionParagraph(nextInline.fieldEnd.line, fieldEndOffset);\n return;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var fieldEndOffset = inline.line.getOffset(inline, 1);\n var fieldEndIndex = this.getHierarchicalIndex(inline.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldEndIndex)) {\n //If field end is after selection start, extend selection end to field begin.\n // tslint:disable-next-line:max-line-length\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n this.currentWidget = inline.fieldBegin.line;\n this.offset = fieldBeginOffset;\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(indexInInline, true);\n };\n /**\n * Move text position forward\n * @private\n */\n TextPosition.prototype.moveForward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (!this.owner.selection.isEmpty && indexInInline === inline.length && inline instanceof FieldElementBox\n && inline.fieldType === 1) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n // tslint:disable-next-line:max-line-length\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n // tslint:disable-next-line:max-line-length\n var fieldBeginIndex = this.getHierarchicalIndex(inline.fieldBegin.line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldBeginIndex)) {\n //If field begin is before selection start, move selection start to field begin.\n // tslint:disable-next-line:max-line-length\n this.owner.selection.start.setPositionParagraph(inline.fieldBegin.line, fieldBeginOffset);\n return;\n }\n }\n inline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n }\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var selectionStartParagraph = this.owner.selection.start.paragraph;\n var selectionStartIndex = 0;\n // tslint:disable-next-line:max-line-length\n var selectionStartInlineObj = selectionStartParagraph.getInline(this.owner.selection.start.offset, selectionStartIndex);\n var selectionStartInline = selectionStartInlineObj.element;\n selectionStartIndex = selectionStartInlineObj.index;\n var nextRenderInline = this.selection.getNextRenderedElementBox(selectionStartInline, selectionStartIndex);\n if (nextRenderInline === inline) {\n this.moveNextPositionInternal(inline);\n }\n else {\n //If selection start is before field begin, extend selection end to field end.\n inline = inline.fieldEnd;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n }\n else if ((inline instanceof FieldElementBox)\n && (inline.fieldType === 0 || inline.fieldType === 1)) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n indexInInline = 0;\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var length = this.selection.getLineLength(this.currentWidget);\n var isParagraphEnd = this.selection.isParagraphLastLine(this.currentWidget);\n if (this.offset < nextOffset) {\n this.offset = nextOffset;\n var inlineObj_1 = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj_1.element;\n indexInInline = inlineObj_1.index;\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1) {\n inline = nextValidInline;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n }\n }\n else if (this.offset === nextOffset && this.offset < length + 1 && isParagraphEnd) {\n this.offset = length + 1;\n }\n else {\n this.updateOffsetToNextParagraph(indexInInline, true);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to given inline\n * @private\n */\n TextPosition.prototype.moveToInline = function (inline, index) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, index);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Return true is start element exist before end element\n * @private\n */\n TextPosition.isForwardSelection = function (start, end) {\n if (start === end) {\n return true;\n }\n start = start.replace(/C;/g, '');\n end = end.replace(/C;/g, '');\n start = start.replace(/H;/g, '');\n end = end.replace(/H;/g, '');\n start = start.replace(/F;/g, '');\n end = end.replace(/F;/g, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n var length = selectionStart.length;\n if (length > selectionEnd.length) {\n length = selectionEnd.length - 1;\n }\n for (var i = 0; i < length; i++) {\n var startOffset = parseFloat(selectionStart[i]);\n var endOffset = parseFloat(selectionEnd[i]);\n if (startOffset !== endOffset) {\n return startOffset < endOffset;\n }\n }\n return false;\n };\n /**\n * Move to previous position offset\n * @private\n */\n TextPosition.prototype.movePreviousPositionInternal = function (fieldEnd) {\n var inline;\n if (isNullOrUndefined(fieldEnd.fieldSeparator)) {\n inline = this.selection.getPreviousValidElement(fieldEnd.fieldBegin);\n }\n else {\n inline = this.selection.getPreviousValidElement(fieldEnd);\n }\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline instanceof FieldElementBox ? 0 : inline.length);\n };\n /**\n * Moves the text position to start of the word.\n * @private\n */\n TextPosition.prototype.moveToWordStartInternal = function (type) {\n var endOffset = this.currentWidget.getEndOffset();\n var currentPara = this.currentWidget.paragraph;\n var selection = this.selection;\n if (type === 2 && (this.offset === endOffset || this.offset === endOffset + 1)) {\n return;\n }\n if (this.offset === endOffset + 1) {\n this.offset = endOffset;\n }\n else if (this.offset === selection.getStartOffset(currentPara) && this.currentWidget === currentPara.childWidgets[0]) {\n var previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n else {\n if (this.offset === selection.getStartLineOffset(this.currentWidget)) {\n var lineIndex = currentPara.childWidgets.indexOf(this.currentWidget);\n if (lineIndex - 1 >= 0) {\n this.currentWidget = currentPara.childWidgets[lineIndex - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n }\n var isStarted = false;\n var endSelection = false;\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // tslint:disable-next-line:max-line-length \n this.getPreviousWordOffset(inline, selection, indexInInline, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, this);\n }\n if (type === 1) {\n this.calculateOffset();\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Get next word offset\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffset = function (inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (inline instanceof TextElementBox) {\n this.getNextWordOffsetSpan(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof ImageElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetImage(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldBegin(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2 || inline instanceof BookmarkElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldSeperator(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldEnd(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n /**\n * get next word offset from field begin\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetFieldBegin = function (fieldBegin, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n this.getNextWordOffsetFieldEnd(fieldBegin.fieldEnd, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (type === 0) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldSeperator(fieldBegin.fieldSeparator, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n var inline = fieldBegin.fieldSeparator;\n // tslint:disable-next-line:max-line-length\n if (inline.line.paragraph === fieldBegin.fieldEnd.line.paragraph && !this.selection.hasValidInline(inline.line.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffset(inline, 0, type, !(endPosition.paragraph === fieldBegin.line.paragraph && endPosition.offset === startOffset), endSelection, endPosition, excludeSpace);\n // tslint:disable-next-line:max-line-length\n if (endSelection && !isNullOrUndefined(fieldBegin.fieldSeparator) && (endPosition.paragraph === fieldBegin.line.paragraph) && (endPosition.offset === fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length))) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n return;\n }\n if (!endSelection) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(fieldBegin.fieldEnd.line, fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, fieldBegin.fieldEnd.length));\n }\n }\n };\n /**\n * get next word offset from image\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetImage = function (image, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n var startOffset = image.line.getOffset(image, 0);\n endSelection = true;\n if (endPosition.offset === startOffset) {\n if (isNullOrUndefined(image.nextNode)) {\n endPosition.setPositionParagraph(image.line, startOffset + image.length);\n }\n else {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n endPosition.setPositionParagraph(image.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(image.nextNode)) {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n /**\n * get next word offset from span\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetSpan = function (span, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n endSelection = true;\n var startOffset = span.line.getOffset(span, 0);\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(span.line, startOffset + span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n var wordEndIndex = 0;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0]) === -1)) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n if (isInField) {\n return;\n }\n }\n else if (indexInInline < span.length) {\n // tslint:disable-next-line:max-line-length\n var txt = indexInInline > 0 && span.text.length - 1 >= indexInInline ? span.text.slice(indexInInline, span.length) : span.text;\n wordEndIndex = HelperMethods.indexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordEndIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n var offset = span.line.getOffset(span, wordEndIndex + indexInInline);\n // tslint:disable-next-line:max-line-length\n if ((excludeSpace || txt[wordEndIndex] !== ' ') && !endSelection && span.line.paragraph === endPosition.paragraph && offset !== endPosition.offset) {\n endSelection = true;\n endPosition.setPositionParagraph(span.line, offset);\n return;\n }\n wordEndIndex++;\n while (wordEndIndex < txt.length && HelperMethods.wordSplitCharacters.indexOf(txt[wordEndIndex]) !== -1) {\n if (txt[wordEndIndex] !== ' ' && txt[wordEndIndex] !== ' ') {\n break;\n }\n wordEndIndex++;\n }\n endSelection = true;\n if (wordEndIndex < txt.length) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n };\n /**\n * get next word offset from field separator\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetFieldSeperator = function (fieldSeparator, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (!isNullOrUndefined(fieldSeparator.nextNode)) {\n this.getNextWordOffset(fieldSeparator.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n /**\n * get next word offset from field end\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetFieldEnd = function (fieldEnd, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n if (isNullOrUndefined(fieldEnd.nextNode)) {\n return;\n }\n }\n if (!isNullOrUndefined(fieldEnd.nextNode)) {\n this.getNextWordOffset(fieldEnd.nextNode, 0, type, false, endSelection, endPosition, excludeSpace);\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n }\n else {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n endSelection = true;\n };\n /**\n * Get previous word offset\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffset = function (inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (inline instanceof TextElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetSpan(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ImageElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetImage(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetFieldBegin(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetFieldSeparator(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetFieldEnd(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof BookmarkElementBox) {\n this.getPreviousWordOffsetBookMark(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ListTextElementBox && inline.previousNode) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetSpan(inline.previousNode, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetBookMark = function (bookmark, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (bookmark.previousNode) {\n if (bookmark.previousNode instanceof TextElementBox) {\n var inline = bookmark.previousNode;\n if (HelperMethods.lastIndexOfAny(inline.text, HelperMethods.wordSplitCharacters) !== inline.text.length - 1) {\n this.getPreviousWordOffset(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, bookmark.line.getOffset(bookmark, 0));\n }\n }\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, selection.getStartLineOffset(bookmark.line));\n }\n };\n /**\n * get previous word offset from field end\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetFieldEnd = function (fieldEnd, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (isNullOrUndefined(fieldEnd.fieldSeparator)) {\n this.getPreviousWordOffsetFieldBegin(fieldEnd.fieldBegin, selection, 0, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (type === 0 && !isNullOrUndefined(fieldEnd.previousNode)) {\n var inline = fieldEnd.previousNode;\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(inline, selection, inline.length, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, endPosition);\n }\n else if (!isNullOrUndefined(fieldEnd.fieldBegin) && type !== 0) {\n var inline = fieldEnd.previousNode;\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(inline) || (inline.line.paragraph === fieldEnd.fieldBegin.line.paragraph && !selection.hasValidInline(inline.line.paragraph, inline, fieldEnd.fieldBegin))) {\n inline = fieldEnd.fieldBegin;\n }\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(inline, selection, inline.length, type, !(endPosition.paragraph === fieldEnd.line.paragraph && endPosition.offset === endOffset), isStarted, endSelection, endPosition);\n if (endSelection && endPosition.paragraph === fieldEnd.line.paragraph\n && endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n return;\n }\n if (!endSelection) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(fieldEnd.fieldBegin.line, fieldEnd.fieldBegin.line.getOffset(fieldEnd.fieldBegin, 0));\n }\n }\n };\n /**\n * get previous word offset from field separator\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetFieldSeparator = function (fieldSeparator, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n this.getPreviousWordOffsetFieldBegin(fieldSeparator.fieldBegin, selection, fieldSeparator.fieldBegin.length, type, isInField, isStarted, endSelection, endPosition);\n };\n /**\n * get previous word offset from field begin\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetFieldBegin = function (fieldBegin, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n }\n if (!isNullOrUndefined(fieldBegin.previousNode)) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(fieldBegin.previousNode, selection, fieldBegin.previousNode.length, type, false, isStarted, endSelection, endPosition);\n if (endPosition.offset === startOffset) {\n if (type !== 0 && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(fieldBegin.line, fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length));\n }\n }\n }\n else {\n endPosition.setPositionParagraph(fieldBegin.line, selection.getStartLineOffset(fieldBegin.line));\n }\n };\n /**\n * get previous word offset from image\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetImage = function (image, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === image.length) {\n var endOffset = image.line.getOffset(image, image.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(image.line, endOffset - image.length);\n }\n else {\n endPosition.setPositionParagraph(image.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(image.previousNode)) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(image.previousNode, selection, image.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n /**\n * Get previous word offset from span\n * @private\n */\n // tslint:disable-next-line:max-line-length \n TextPosition.prototype.getPreviousWordOffsetSpan = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endSelection = false;\n return;\n }\n if (indexInInline === span.length) {\n endSelection = true;\n var endOffset = span.line.getOffset(span, span.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(span.line, endOffset - span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(span.previousNode)) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n var wordStartIndex = 0;\n if (!isStarted) {\n while (indexInInline > 0 && span.text[indexInInline - 1] === ' ') {\n indexInInline--;\n }\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n }\n if (indexInInline > 0) {\n isStarted = true;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0])) === -1) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = true;\n return;\n }\n var txt = span.text.length > indexInInline ? span.text.slice(0, indexInInline) : span.text;\n wordStartIndex = HelperMethods.lastIndexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordStartIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n while (wordStartIndex > 0 && endSelection && txt[wordStartIndex] !== ' '\n && (HelperMethods.wordSplitCharacters.indexOf(txt[wordStartIndex - 1])) !== -1) {\n wordStartIndex--;\n }\n if (txt[wordStartIndex] === ' ' || txt[wordStartIndex] === ' ' || !endSelection) {\n wordStartIndex++;\n }\n endSelection = true;\n if (wordStartIndex > 0) {\n var offset = span.line.getOffset(span, wordStartIndex);\n if (span.line.paragraph === endPosition.paragraph && offset === endPosition.offset) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetSpan(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, offset);\n }\n }\n else if (span.previousNode instanceof TextElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, 0));\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n };\n /**\n * set previous word offset in span\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.setPreviousWordOffset = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.previousNode instanceof ElementBox && span.line === span.previousNode.line) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, selection.getStartLineOffset(span.line));\n }\n };\n /**\n * Validate if text position is in field forward\n * @private\n */\n TextPosition.prototype.validateForwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var isPositionMoved = false;\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(currentIndex, selectionEndIndex)) {\n if (!isPositionMoved) {\n textPosition.moveNextPosition(false);\n var nextIndex = textPosition.getHierarchicalIndexInternal();\n //Handled specifically to break infinite looping, if selection ends at last paragraph mark.\n if (currentIndex === nextIndex) {\n break;\n }\n }\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n if (indexInInline === inline.length && inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var lineWidget = inline.fieldBegin.line;\n var fieldBeginOffset = lineWidget.getOffset(inline.fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(lineWidget, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n this.selection.start.setPositionParagraph(lineWidget, fieldBeginOffset);\n }\n }\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (!isNullOrUndefined(nextInline) && nextInline instanceof ElementBox) {\n inline = nextInline;\n }\n }\n isPositionMoved = (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd));\n if (isPositionMoved) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var fieldEnd = inline.fieldEnd;\n var paragraph = fieldEnd.line.paragraph;\n var fieldEndOffset = fieldEnd.line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n //If selection end is after field begin, extend selection end to field end.\n this.moveToInline(inline.fieldEnd, 1);\n return;\n }\n textPosition.moveToInline(inline.fieldEnd, 1);\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * Validate if text position is in field backward\n * @private\n */\n TextPosition.prototype.validateBackwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(selectionEndIndex, currentIndex)) {\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var paragraph = nextInline.fieldEnd.line;\n var fieldEndOffset = paragraph.getOffset(nextInline.fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(paragraph, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionStartIndex)) {\n this.selection.start.setPositionParagraph(paragraph, fieldEndOffset);\n selectionStartIndex = fieldEndIndex;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var line = inline.fieldBegin.line;\n var fieldBegin = inline.fieldBegin;\n var fieldBeginOffset = line.getOffset(fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionEndIndex, fieldBeginIndex)) {\n //If field begin is before selection end, extend selection end to field begin.\n this.moveToInline(inline.fieldBegin, 0);\n return;\n }\n textPosition.moveToInline(inline.fieldBegin, 0);\n }\n else {\n textPosition.movePreviousPosition();\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * @private\n */\n TextPosition.prototype.paragraphStartInternal = function (selection, moveToPreviousParagraph) {\n var offset = selection.getStartLineOffset(this.currentWidget);\n if (this.offset === offset && moveToPreviousParagraph) {\n var startParagraph = this.moveToNextParagraphInTableCheck();\n if (startParagraph) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var paragraphValue = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = paragraphValue.childWidgets[0];\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n }\n else {\n this.currentWidget = this.currentWidget.paragraph.getSplitWidgets()[0].childWidgets[0];\n this.offset = offset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.calculateOffset = function () {\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the paragraph.\n * @private\n */\n TextPosition.prototype.moveToParagraphStartInternal = function (selection, moveToPreviousParagraph) {\n var startOffset = selection.getStartOffset(this.paragraph);\n if (this.offset === startOffset && moveToPreviousParagraph) {\n var paragraphstart = this.moveToNextParagraphInTableCheck();\n if (paragraphstart) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.paragraph))) {\n this.currentWidget = selection.getPreviousParagraphBlock(this.paragraph).firstChild;\n this.offset = selection.getStartOffset(this.paragraph);\n }\n }\n else {\n this.currentWidget = this.paragraph.firstChild;\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(false);\n };\n /**\n * Moves the text position to end of the paragraph.\n * @private\n */\n TextPosition.prototype.moveToParagraphEndInternal = function (selection, moveToNextParagraph) {\n // tslint:disable-next-line:max-line-length\n var splittedParagraph = this.currentWidget.paragraph;\n while (splittedParagraph.nextSplitWidget) {\n splittedParagraph = splittedParagraph.nextSplitWidget;\n }\n this.currentWidget = splittedParagraph.childWidgets[splittedParagraph.childWidgets.length - 1];\n var endOffset = this.currentWidget.getEndOffset() + 1;\n if (this.offset === endOffset && moveToNextParagraph) {\n var paragraphEnd = this.moveToNextParagraphInTableCheck();\n if (paragraphEnd) {\n this.moveToNextParagraphInTable();\n }\n else if (!isNullOrUndefined(selection.getNextParagraphBlock(this.currentWidget.paragraph))) {\n var endParagraph = selection.getNextParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = endParagraph.childWidgets[endParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n }\n }\n else {\n this.offset = endOffset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.moveUp = function (selection, left) {\n var paragraph = this.currentWidget.paragraph;\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n //Moves previous line starting.\n this.movePreviousPosition();\n var prevLine = undefined;\n var currentParagraph = this.currentWidget.paragraph;\n if (paragraph.isInsideTable && paragraph !== currentParagraph && paragraph.associatedCell !== currentParagraph.associatedCell\n // tslint:disable-next-line:max-line-length\n && (!isNullOrUndefined(currentParagraph.associatedCell) && (paragraph.associatedCell.ownerRow === currentParagraph.associatedCell.ownerRow))) {\n var ownerRow = currentParagraph.associatedCell.ownerRow;\n if (ownerRow.previousRenderedWidget instanceof TableRowWidget) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getFirstCellInRegion(ownerRow.previousRenderedWidget, currentParagraph.associatedCell, left, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n var prevBlock = ownerRow.ownerTable.previousRenderedWidget;\n do {\n if (prevBlock instanceof TableWidget) {\n prevBlock = selection.getLastBlockInLastCell(prevBlock);\n }\n } while (prevBlock instanceof TableWidget);\n if (prevBlock instanceof ParagraphWidget) {\n this.setPosition(prevBlock.childWidgets[prevBlock.childWidgets.length - 1], false);\n }\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!paragraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getFirstCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n // tslint:disable-next-line:max-line-length\n }\n else if (paragraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && paragraph.associatedCell.ownerRow.previousRenderedWidget !== paragraph.associatedCell.ownerRow.previousSplitWidget &&\n paragraph.associatedCell.ownerRow.previousRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = selection.getTop(prevLine);\n selection.updateTextPositionWidget(prevLine, new Point(left, top), this, false);\n };\n /**\n * @private\n */\n TextPosition.prototype.moveDown = function (selection, left) {\n //Moves text position to end of line.\n var prevParagraph = this.currentWidget.paragraph;\n var prevOffset = this.offset;\n this.moveToLineEndInternal(selection, true);\n var length = this.selection.getParagraphLength(this.currentWidget.paragraph);\n if (this.offset > length) {\n this.offset = length;\n }\n //Moves next line starting.\n this.moveNextPosition();\n var nextLine = undefined;\n // tslint:disable-next-line:max-line-length\n if (prevParagraph.isInsideTable && prevParagraph !== this.currentWidget.paragraph && prevParagraph.associatedCell !== this.currentWidget.paragraph.associatedCell && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var ownerRow = this.currentWidget.paragraph.associatedCell.ownerRow;\n // tslint:disable-next-line:max-line-length\n if (prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable && prevParagraph.associatedCell.cellFormat.rowSpan > 1 && prevParagraph.associatedCell.cellFormat.rowSpan + prevParagraph.associatedCell.ownerRow.rowIndex === prevParagraph.associatedCell.ownerTable.childWidgets.length) {\n //If the prevParagraph owner cell is Verically merged upto the last row, then theposition moved to next column. the position moved to out of the current tabel so owner row is assigned to last row.\n // tslint:disable-next-line:max-line-length\n ownerRow = this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets[this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets.length - 1];\n }\n if (ownerRow.nextRenderedWidget instanceof TableRowWidget) {\n // tslint:disable-next-line:max-line-length\n var cell = this.selection.getLastCellInRegion(ownerRow.nextRenderedWidget, this.currentWidget.paragraph.associatedCell, left, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n }\n else {\n var nextBlock = this.selection.getNextRenderedBlock(ownerRow.ownerTable);\n do {\n if (nextBlock instanceof TableWidget) {\n nextBlock = this.selection.getFirstBlockInFirstCell(nextBlock);\n }\n } while (nextBlock instanceof TableWidget);\n if (nextBlock instanceof ParagraphWidget) {\n this.setPosition(nextBlock.childWidgets[0], true);\n }\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var cell = this.selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n // tslint:disable-next-line:max-line-length\n }\n else if (prevParagraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow.nextRenderedWidget !== prevParagraph.associatedCell.ownerRow.nextSplitWidget\n && prevParagraph.associatedCell.ownerRow.nextRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n this.setPosition(selection.getFirstParagraph(cell).childWidgets[0], false);\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = this.selection.getTop(nextLine);\n this.selection.updateTextPositionWidget(nextLine, new Point(left, top), this, false);\n };\n /**\n * Moves the text position to start of the line.\n * @private\n */\n TextPosition.prototype.moveToLineStartInternal = function (selection, moveToPreviousLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetInternal(this.currentWidget, this.offset, moveToPreviousLine);\n var firstElement = selection.getFirstElementInternal(currentLine);\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n if (isNullOrUndefined(firstElement) && this.offset > startOffset) {\n var index = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n var inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof TextElementBox && inline.text !== '\\v') {\n this.offset = startOffset;\n }\n }\n else if (!isNullOrUndefined(firstElement)) {\n var indexInInline = selection.getIndexInInline(firstElement);\n this.currentWidget = firstElement.line;\n this.offset = this.currentWidget.getOffset(firstElement, indexInInline);\n indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var prevInline = selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(prevInline)) {\n inline = prevInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox) {\n this.offset--;\n }\n }\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Check paragraph is inside table\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTableCheck = function () {\n if ((this.selection.start.paragraph.isInsideTable || this.paragraph.isInsideTable)\n && (this.selection.start.paragraph.associatedCell !== this.paragraph.associatedCell\n || this.selection.isCellSelected(this.selection.start.paragraph.associatedCell, this.selection.start, this))) {\n return true;\n }\n return false;\n };\n /**\n * Moves the text position to end of the word.\n * @private\n */\n TextPosition.prototype.moveToWordEndInternal = function (type, excludeSpace) {\n // type === 0 -------->CTRL+ARROW Navigation\n // type === 1 -------->CTRL+SHIFT+ARROW Selection\n // type === 2 -------->Double-tap Word Selection\n var incrementValue = 0;\n var endOffset = this.currentWidget.getEndOffset();\n if (this.selection.isParagraphFirstLine(this.currentWidget)) {\n if (this.currentWidget.children[0] instanceof ListTextElementBox) {\n incrementValue = 1;\n }\n if (this.currentWidget.children[1] instanceof ListTextElementBox) {\n incrementValue = 2;\n }\n }\n if (this.offset + incrementValue === endOffset || this.offset === endOffset + 1) {\n if (this.offset === endOffset && type !== 0) {\n this.setPositionParagraph(this.currentWidget, endOffset + 1);\n }\n else {\n var nextParagraph = this.selection.getNextParagraphBlock(this.currentWidget.paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[0];\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n if (type === 1) {\n // tslint:disable-next-line:max-line-length\n var nextWord = this.moveToNextParagraphInTableCheck();\n if (nextWord) {\n this.moveToNextParagraphInTable();\n }\n else {\n this.moveToWordEndInternal(type, excludeSpace);\n }\n }\n }\n }\n else {\n var indexInInline = 0;\n var endSelection = false;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.getNextWordOffset(inline, indexInInline, type, false, endSelection, this, excludeSpace);\n }\n if (type !== 0) {\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move text position to next paragraph inside table\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTable = function () {\n var paragraph = this.currentWidget.paragraph;\n var nextParagraph = (paragraph.isInsideTable) ? this.selection.getNextSelectionCell(paragraph.associatedCell) :\n this.selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n /**\n * Moves the text position to start of the previous paragraph.\n */\n TextPosition.prototype.moveToPreviousParagraph = function (selection) {\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n // tslint:disable-next-line:max-line-length\n if (this.offset === startOffset && !isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var previousParagraph = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = previousParagraph.childWidgets[0];\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n else {\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to previous line from current position\n * @private\n */\n TextPosition.prototype.moveToPreviousLine = function (selection, left) {\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveUpInTable(selection);\n }\n else {\n this.moveBackward();\n }\n var prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(prevLine);\n var lineWidth = selection.getWidth(prevLine, true);\n //Moves till the Up/Down selection width.\n if (lineWidth + lineStart >= left && currentLine !== prevLine) {\n var top_1 = selection.getTop(prevLine);\n var point = new Point(left, top_1);\n selection.updateTextPositionWidget(prevLine, point, this, true);\n }\n //Checks if the current position is between field result, then move to field begin.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateBackwardFieldSelection(currentIndex, selectionEndIndex);\n };\n /**\n * @private\n */\n TextPosition.prototype.moveToLineEndInternal = function (selection, moveToNextLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var firstElement = selection.getFirstElementInternal(currentLine);\n if (isNullOrUndefined(firstElement) && this.offset === selection.getStartLineOffset(this.currentWidget)) {\n this.offset = selection.getParagraphLength(this.paragraph) + 1;\n this.updatePhysicalPosition(true);\n }\n else if (!isNullOrUndefined(firstElement)) {\n var lastElement = currentLine.children[currentLine.children.length - 1];\n var index = 0;\n index += lastElement instanceof TextElementBox ? lastElement.length : 1;\n this.currentWidget = lastElement.line;\n if (index === lastElement.length\n && isNullOrUndefined(lastElement.nextNode) && selection.isParagraphLastLine(this.currentWidget)) {\n var length_1 = selection.getLineLength(this.currentWidget);\n this.offset = moveToNextLine ? length_1 + 1 : length_1;\n }\n else {\n var inline = lastElement;\n while (!isNullOrUndefined(inline) && inline.length === index && inline.nextNode instanceof FieldElementBox) {\n var nextInline = selection.getNextValidElement(inline.nextNode);\n if (inline !== nextInline) {\n inline = nextInline;\n index = 0;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n if (this.currentWidget === fieldBegin.fieldEnd.line\n && !selection.hasValidInline(this.currentWidget.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n }\n if (inline instanceof FieldElementBox) {\n index = 1;\n }\n }\n if (index === inline.length && isNullOrUndefined(inline.nextNode)) {\n index++;\n }\n if (!moveToNextLine && inline instanceof ElementBox && inline.text === '\\v') {\n index--;\n }\n this.offset = this.currentWidget.getOffset(inline, index);\n }\n this.updatePhysicalPosition(moveToNextLine);\n }\n };\n /**\n * Move to next line\n * @private\n */\n TextPosition.prototype.moveToNextLine = function (left) {\n var selection = this.selection;\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionInternal(this);\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var isAtLineStart = this.offset === 0 ? true : false;\n //Moves text position to end of line.\n this.moveToLineEndInternal(selection, true);\n var isMoveToLineEnd = !textPosition.isAtSamePosition(this);\n textPosition.setPositionInternal(this);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveDownInTable(selection);\n }\n else {\n this.moveNextPosition();\n this.moveForward();\n }\n var nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(nextLine);\n var firstElement = selection.getFirstElementInternal(nextLine);\n // tslint:disable-next-line:max-line-length\n var firstItemWidth = isNullOrUndefined(firstElement) ? selection.getWidth(nextLine, true) : selection.getLeftInternal(nextLine, firstElement, 1) - lineStart;\n //Moves till the Up/Down selection width.\n if (lineStart < left && (firstItemWidth / 2 < left - lineStart)) {\n var top_2 = selection.getTop(nextLine);\n var point = new Point(left, top_2);\n selection.updateTextPositionWidget(nextLine, point, this, true);\n var width = selection.getWidth(nextLine, true);\n if (width < left - lineStart) {\n this.moveToLineEndInternal(selection, true);\n }\n }\n else if (isMoveToLineEnd && this.currentWidget.paragraph.isInsideTable\n && this.currentWidget === this.owner.selection.start.currentWidget) {\n this.setPositionInternal(textPosition);\n }\n else if (!isMoveToLineEnd) {\n this.moveToLineEndInternal(selection, true);\n }\n //Checks if the current position is between field result, then move to field end.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateForwardFieldSelection(currentIndex, selectionEndIndex);\n };\n /**\n * Move upward in table\n * @private\n */\n TextPosition.prototype.moveUpInTable = function (selection) {\n var isPositionUpdated = false;\n var end = this.owner.selection.end;\n var isBackwardSelection = !this.owner.selection.isEmpty;\n isPositionUpdated = end.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.currentWidget.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(endCell, startCell);\n isPositionUpdated = containerCell.ownerTable.contains(startCell);\n if (isPositionUpdated) {\n endCell = selection.getSelectedCell(endCell, containerCell);\n startCell = selection.getSelectedCell(startCell, containerCell);\n // tslint:disable-next-line:max-line-length\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this, end);\n if (!isContainerCellSelected) {\n // tslint:disable-next-line:max-line-length\n isContainerCellSelected = this.currentWidget.paragraph === selection.getFirstParagraph(containerCell) && this.isAtParagraphStart;\n }\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(startCell.ownerRow.previousRenderedWidget)) {\n //Moves to cell in previous row.\n var row = startCell.ownerRow.previousRenderedWidget;\n // tslint:disable-next-line:max-line-length\n var cell = selection.getFirstCellInRegion(row, containerCell, this.owner.selection.upDownSelectionLength, true);\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(startCell.ownerRow.previousRenderedWidget) || !isInContainerCell) {\n if (isBackwardSelection) {\n //Moves to first cell of row.\n startCell = startCell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to last cell of row.\n startCell = startCell.ownerRow.childWidgets[startCell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to previous row / previous block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isBackwardSelection) {\n //Moves to first cell of row.\n cell = cell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n //Moves to previous row / previous block.\n this.moveBackward();\n };\n /**\n * Move down inside table\n * @private\n */\n TextPosition.prototype.moveDownInTable = function (selection) {\n var isPositionUpdated = false;\n var isForwardSelection = this.owner.selection.isEmpty || this.owner.selection.isForward;\n isPositionUpdated = this.owner.selection.start.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.owner.selection.start.paragraph.associatedCell;\n var endCell = this.currentWidget.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(startCell, endCell);\n isPositionUpdated = containerCell.ownerTable.contains(endCell);\n if (isPositionUpdated) {\n startCell = selection.getSelectedCell(startCell, containerCell);\n endCell = selection.getSelectedCell(endCell, containerCell);\n // tslint:disable-next-line:max-line-length\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this.owner.selection.start, this);\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(endCell.ownerRow.nextRenderedWidget)) {\n //Moves to cell in next row.\n var row = endCell.ownerRow.nextRenderedWidget;\n // tslint:disable-next-line:max-line-length\n var cell = selection.getLastCellInRegion(row, containerCell, this.owner.selection.upDownSelectionLength, false);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(endCell.ownerRow.nextRenderedWidget) || !isInContainerCell) {\n if (isForwardSelection) {\n //Moves to last cell of row.\n endCell = endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n //Moves to first cell of row.\n endCell = endCell.ownerRow.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to next row / next block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isForwardSelection) {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else if (cell.ownerRow.nextRenderedWidget) {\n //Moves to first cell of row.\n cell = cell.ownerRow.nextRenderedWidget.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n //Moves to next row / next block.\n this.moveForward();\n };\n /**\n * @private\n */\n TextPosition.prototype.destroy = function () {\n this.offset = undefined;\n this.isUpdateLocation = undefined;\n if (!isNullOrUndefined(this.location)) {\n this.location.destroy();\n }\n this.location = undefined;\n this.currentWidget = undefined;\n this.owner = undefined;\n this.viewer = undefined;\n };\n return TextPosition;\n}());\nexport { TextPosition };\n/**\n * @private\n */\nvar SelectionWidgetInfo = /** @class */ (function () {\n function SelectionWidgetInfo(left, width) {\n this.leftIn = 0;\n this.widthIn = 0;\n this.leftIn = left;\n this.widthIn = width;\n }\n Object.defineProperty(SelectionWidgetInfo.prototype, \"left\", {\n /**\n * @private\n */\n get: function () {\n return this.leftIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionWidgetInfo.prototype, \"width\", {\n /**\n * @private\n */\n get: function () {\n return this.widthIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n SelectionWidgetInfo.prototype.destroy = function () {\n this.widthIn = undefined;\n this.leftIn = undefined;\n };\n return SelectionWidgetInfo;\n}());\nexport { SelectionWidgetInfo };\n/**\n * @private\n */\nvar Hyperlink = /** @class */ (function () {\n function Hyperlink(fieldBeginAdv, selection) {\n this.linkInternal = '';\n this.localRef = '';\n this.opensNewWindow = false;\n var fieldCode = selection.getFieldCode(fieldBeginAdv);\n var lowercase = fieldCode.toLowerCase();\n if (lowercase.substring(0, 9) === 'hyperlink') {\n this.parseFieldValues(fieldCode.substring(9).trim(), selection);\n }\n }\n Object.defineProperty(Hyperlink.prototype, \"navigationLink\", {\n /**\n * Gets navigation link.\n * @returns string\n * @private\n */\n get: function () {\n return this.linkInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"localReference\", {\n /**\n * Gets the local reference if any.\n * @returns string\n * @private\n */\n get: function () {\n return this.localRef;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"linkType\", {\n /**\n * Gets hyper link type.\n * @returns HyperLinkType\n * @private\n */\n get: function () {\n return this.typeInternal;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Parse field values\n * @param {string} value\n * @returns Void\n */\n Hyperlink.prototype.parseFieldValues = function (value, selection) {\n var codes = value.split(' ');\n var isLocalRef = false;\n for (var i = 0; i < codes.length; i++) {\n var code = codes[i];\n if (code.length < 1) {\n continue;\n }\n if (code === '\\\\t' || code === '\\\\l') {\n isLocalRef = true;\n }\n else if (code === '\\\\n') {\n this.opensNewWindow = true;\n }\n else {\n code = this.parseFieldValue(code, code[0] === '\\\"' ? '\\\"' : undefined);\n if (isLocalRef) {\n this.localRef = code;\n isLocalRef = false;\n }\n else {\n this.linkInternal = code;\n }\n }\n }\n this.setLinkType();\n };\n Hyperlink.prototype.parseFieldValue = function (value, endChar) {\n value = value.substring(1);\n var endIndex = endChar ? value.indexOf(endChar) : -1;\n if (endIndex < 0) {\n endIndex = value.length;\n }\n return value.substring(0, endIndex).trim();\n };\n Hyperlink.prototype.setLinkType = function () {\n // If only local reference.\n if (isNullOrUndefined(this.linkInternal) || this.linkInternal.length < 1) {\n this.typeInternal = 'Bookmark';\n return;\n }\n // Validates link.\n if (this.linkInternal.substring(0, 4) === ('www.')) {\n this.linkInternal = 'http://' + this.navigationLink;\n }\n else if (this.linkInternal[0] === '@') {\n this.linkInternal = 'mailto:' + this.navigationLink;\n }\n // Finds proper link type.\n if (this.linkInternal.substring(0, 7) === 'http://'\n || this.linkInternal.substring(0, 8) === 'https://') {\n this.typeInternal = 'WebPage';\n }\n else if (this.linkInternal.substring(0, 7) === 'mailto:') {\n this.typeInternal = 'Email';\n }\n else {\n this.typeInternal = 'File';\n }\n };\n /**\n * @private\n */\n Hyperlink.prototype.destroy = function () {\n this.linkInternal = undefined;\n this.localRef = undefined;\n this.typeInternal = undefined;\n this.opensNewWindow = undefined;\n };\n return Hyperlink;\n}());\nexport { Hyperlink };\n/**\n * @private\n */\nvar ImageFormat = /** @class */ (function () {\n /**\n * Constructor for image format class\n * @param imageContainer - Specifies for image width and height values.\n */\n function ImageFormat(imageContainer) {\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n this.width = imageContainer.width;\n this.height = imageContainer.height;\n }\n /**\n * Dispose the internal objects which are maintained.\n * @private\n */\n ImageFormat.prototype.destroy = function () {\n this.width = undefined;\n this.height = undefined;\n };\n return ImageFormat;\n}());\nexport { ImageFormat };\n","import { Widget, BodyWidget, TableRowWidget, TableWidget, LineWidget, ElementBox, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockWidget, HeaderFooterWidget, BlockContainer, BookmarkElementBox } from '../viewer/page';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { SelectionCharacterFormat, SelectionCellFormat, SelectionParagraphFormat, SelectionRowFormat, SelectionSectionFormat, SelectionTableFormat, SelectionImageFormat } from './selection-format';\nimport { Point } from '../editor/editor-helper';\nimport { isNullOrUndefined, createElement, L10n } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WParagraphFormat, WParagraphStyle } from '../index';\nimport { HtmlExport } from '../writer/html-export';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { TextPosition, SelectionWidgetInfo, Hyperlink } from './selection-helper';\n/**\n * Selection\n */\nvar Selection = /** @class */ (function () {\n /**\n * @private\n */\n function Selection(documentEditor) {\n var _this = this;\n /**\n * @private\n */\n this.upDownSelectionLength = 0;\n /**\n * @private\n */\n this.isSkipLayouting = false;\n /**\n * @private\n */\n this.isImageSelected = false;\n this.contextTypeInternal = undefined;\n /**\n * @private\n */\n this.caret = undefined;\n //Format Retrieval Field\n /**\n * @private\n */\n this.isRetrieveFormatting = false;\n /**\n * @private\n */\n this.skipFormatRetrieval = false;\n this.isMoveDownOrMoveUp = false;\n /**\n * @private\n */\n this.selectedWidgets = undefined;\n /**\n * Hides caret.\n * @private\n */\n this.hideCaret = function () {\n _this.caret.style.display = 'none';\n };\n this.owner = documentEditor;\n this.viewer = this.owner.viewer;\n this.start = new TextPosition(this.owner);\n this.end = new TextPosition(this.owner);\n this.selectedWidgets = new Dictionary();\n this.characterFormatIn = new SelectionCharacterFormat(this);\n this.paragraphFormatIn = new SelectionParagraphFormat(this, this.viewer);\n this.sectionFormatIn = new SelectionSectionFormat(this);\n this.rowFormatIn = new SelectionRowFormat(this);\n this.cellFormatIn = new SelectionCellFormat(this);\n this.tableFormatIn = new SelectionTableFormat(this);\n this.imageFormatInternal = new SelectionImageFormat(this);\n }\n Object.defineProperty(Selection.prototype, \"htmlWriter\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.htmlWriterIn)) {\n this.htmlWriterIn = new HtmlExport();\n }\n return this.htmlWriterIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"start\", {\n /**\n * Gets the start text position of last range in the selection\n * @returns {TextPosition}\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.viewer)) {\n if (isNullOrUndefined(this.startInternal)) {\n this.startInternal = this.owner.documentStart;\n }\n return this.startInternal;\n }\n return undefined;\n },\n /**\n * @private\n */\n set: function (value) {\n this.startInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"characterFormat\", {\n //Format retrieval properties\n /**\n * Gets the instance of selection character format.\n * @default undefined\n * @return {SelectionCharacterFormat}\n */\n get: function () {\n return this.characterFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"paragraphFormat\", {\n /**\n * Gets the instance of selection paragraph format.\n * @default undefined\n * @return {SelectionParagraphFormat}\n */\n get: function () {\n return this.paragraphFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"sectionFormat\", {\n /**\n * Gets the instance of selection section format.\n * @default undefined\n * @return {SelectionSectionFormat}\n */\n get: function () {\n return this.sectionFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"tableFormat\", {\n /**\n * Gets the instance of selection table format.\n * @default undefined\n * @return {SelectionTableFormat}\n */\n get: function () {\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"cellFormat\", {\n /**\n * Gets the instance of selection cell format.\n * @default undefined\n * @return {SelectionCellFormat}\n */\n get: function () {\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"rowFormat\", {\n /**\n * Gets the instance of selection row format.\n * @default undefined\n * @returns SelectionRowFormat\n */\n get: function () {\n return this.rowFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"imageFormat\", {\n /**\n * Gets the instance of selection image format.\n * @default undefined\n * @returns SelectionImageFormat\n */\n get: function () {\n return this.imageFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"end\", {\n /**\n * Gets the start text position of selection range.\n * @private\n */\n get: function () {\n return this.endInternal;\n },\n /**\n * For internal use\n * @private\n */\n set: function (value) {\n this.endInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"startPage\", {\n /**\n * Gets the page number where the selection ends.\n * @private\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || isNullOrUndefined(this.viewer.selectionStartPage)) {\n return 1;\n }\n return this.viewer.pages.indexOf(this.viewer.selectionStartPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"endPage\", {\n /**\n * Gets the page number where the selection ends.\n * @private\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || isNullOrUndefined(this.viewer.selectionEndPage)) {\n return 1;\n }\n return this.viewer.pages.indexOf(this.viewer.selectionEndPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isForward\", {\n /**\n * Determines whether the selection direction is forward or not.\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n return this.start.isExistBefore(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isEmpty\", {\n /**\n * Determines whether the start and end positions are same or not.\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.start)) {\n return true;\n }\n return this.start.isAtSamePosition(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"text\", {\n /**\n * Gets the text within selection.\n * @default ''\n * @returns {string}\n */\n get: function () {\n return this.getText(false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"contextType\", {\n /**\n * Gets the context type of the selection.\n */\n get: function () {\n return this.contextTypeInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isCleared\", {\n /**\n * @private\n */\n get: function () {\n return isNullOrUndefined(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n //Public API\n /**\n * Moves the selection to the header of current page.\n */\n Selection.prototype.goToHeader = function () {\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.headerWidget);\n };\n /**\n * Moves the selection to the footer of current page.\n */\n Selection.prototype.goToFooter = function () {\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.footerWidget);\n };\n /**\n * Closes the header and footer region.\n */\n Selection.prototype.closeHeaderFooter = function () {\n this.disableHeaderFooter();\n };\n /**\n * Moves the selection to the start of specified page number.\n */\n Selection.prototype.goToPage = function (pageNumber) {\n if (pageNumber >= 1 && pageNumber <= this.viewer.pages.length) {\n var page = this.viewer.pages[pageNumber - 1];\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n }\n };\n /**\n * Selects the entire table if the context is within table.\n */\n Selection.prototype.selectTable = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableInternal();\n };\n /**\n * Selects the entire row if the context is within table.\n */\n Selection.prototype.selectRow = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableRow();\n };\n /**\n * Selects the entire column if the context is within table.\n */\n Selection.prototype.selectColumn = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectColumnInternal();\n };\n /**\n * Selects the entire cell if the context is within table.\n */\n Selection.prototype.selectCell = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableCell();\n };\n /**\n * Select content based on selection settings\n */\n Selection.prototype.select = function (selectionSettings) {\n var point = new Point(selectionSettings.x, selectionSettings.y);\n var pageCoordinates = this.viewer.findFocusedPage(point, true);\n if (selectionSettings.extend) {\n this.moveTextPosition(pageCoordinates, this.end);\n }\n else {\n this.viewer.updateTextPositionForSelection(pageCoordinates, 1);\n }\n };\n /**\n * Toggles the bold property of selected contents.\n * @private\n */\n Selection.prototype.toggleBold = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleBold();\n }\n };\n /**\n * Toggles the italic property of selected contents.\n * @private\n */\n Selection.prototype.toggleItalic = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleItalic();\n }\n };\n /**\n * Toggles the underline property of selected contents.\n * @param underline Default value of ‘underline’ parameter is Single.\n * @private\n */\n Selection.prototype.toggleUnderline = function (underline) {\n if (this.owner.editor) {\n this.owner.editor.toggleUnderline(underline);\n }\n };\n /**\n * Toggles the strike through property of selected contents.\n * @param {Strikethrough} strikethrough Default value of strikethrough parameter is SingleStrike.\n * @private\n */\n Selection.prototype.toggleStrikethrough = function (strikethrough) {\n if (this.owner.editor) {\n this.owner.editor.toggleStrikethrough(strikethrough);\n }\n };\n /**\n * Toggles the highlight color property of selected contents.\n * @param {HighlightColor} highlightColor Default value of ‘underline’ parameter is Yellow.\n * @private\n */\n Selection.prototype.toggleHighlightColor = function (highlightColor) {\n if (this.owner.editor) {\n this.owner.editor.toggleHighlightColor(highlightColor);\n }\n };\n /**\n * Toggles the subscript formatting of selected contents.\n * @private\n */\n Selection.prototype.toggleSubscript = function () {\n if (this.owner.editor) {\n this.owner.editor.toggleSubscript();\n }\n };\n /**\n * Toggles the superscript formatting of selected contents.\n * @private\n */\n Selection.prototype.toggleSuperscript = function () {\n if (this.owner.editor) {\n this.owner.editor.toggleSuperscript();\n }\n };\n /**\n * Toggles the text alignment property of selected contents.\n * @param {TextAlignment} textAlignment Default value of ‘textAlignment parameter is TextAlignment.Left.\n * @private\n */\n Selection.prototype.toggleTextAlignment = function (textAlignment) {\n if (this.owner.editor) {\n this.owner.editor.toggleTextAlignment(textAlignment);\n }\n };\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n * @private\n */\n Selection.prototype.increaseIndent = function () {\n if (this.owner.editor) {\n this.owner.editor.increaseIndent();\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n * @private\n */\n Selection.prototype.decreaseIndent = function () {\n if (this.owner.editor) {\n this.owner.editor.decreaseIndent();\n }\n };\n /**\n * Fires the `requestNavigate` event if current selection context is in hyperlink.\n */\n Selection.prototype.navigateHyperlink = function () {\n var fieldBegin = this.getHyperlinkField();\n if (fieldBegin) {\n this.fireRequestNavigate(fieldBegin);\n }\n };\n /**\n * Navigate Hyperlink\n * @param fieldBegin\n * @private\n */\n Selection.prototype.fireRequestNavigate = function (fieldBegin) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n var eventArgs = {\n isHandled: false,\n navigationLink: hyperlink.navigationLink,\n linkType: hyperlink.linkType,\n localReference: hyperlink.localReference,\n source: this.owner\n };\n this.owner.trigger('requestNavigate', eventArgs);\n if (!eventArgs.isHandled) {\n this.viewer.selection.navigateBookmark(hyperlink.localReference, true);\n }\n };\n /**\n * Copies the hyperlink URL if the context is within hyperlink.\n */\n Selection.prototype.copyHyperlink = function () {\n var hyperLinkField = this.getHyperlinkField();\n var linkText = this.getLinkText(hyperLinkField);\n this.copyToClipboard(linkText);\n };\n //Selection add, Highlight, remove API starts\n /**\n * @private\n */\n Selection.prototype.highlightSelection = function (isSelectionChanged) {\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.hideImageResizer();\n }\n if (this.isEmpty) {\n this.updateCaretPosition();\n }\n else {\n if (this.isForward) {\n this.highlightSelectedContent(this.start, this.end);\n }\n else {\n this.highlightSelectedContent(this.end, this.start);\n }\n }\n this.viewer.updateTouchMarkPosition();\n if (isSelectionChanged) {\n this.viewer.scrollToPosition(this.start, this.end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.createHighlightBorder = function (lineWidget, width, left, top) {\n if (width < 0) {\n width = 0;\n }\n var page = this.getPage(lineWidget.paragraph);\n var height = lineWidget.height;\n var selectionWidget = undefined;\n if (!this.selectedWidgets.containsKey(lineWidget)) {\n selectionWidget = new SelectionWidgetInfo(left, width);\n this.selectedWidgets.add(lineWidget, selectionWidget);\n }\n var viewer = this.viewer;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n if (viewer.containerTop <= pageTop\n || pageTop < viewer.containerTop + viewer.selectionCanvas.height) {\n viewer.selectionContext.fillStyle = 'gray';\n viewer.selectionContext.globalAlpha = 0.4;\n var zoomFactor = viewer.zoomFactor;\n this.clipSelection(page, pageTop);\n // tslint:disable-next-line:max-line-length\n viewer.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - viewer.containerLeft, (pageTop + (top * zoomFactor)) - viewer.containerTop, width * zoomFactor, height * zoomFactor);\n viewer.selectionContext.restore();\n }\n };\n /**\n * Create selection highlight inside table\n * @private\n */\n Selection.prototype.createHighlightBorderInsideTable = function (cellWidget) {\n var page = this.getPage(cellWidget);\n var selectionWidget = undefined;\n var left = cellWidget.x - cellWidget.margin.left + cellWidget.leftBorderWidth;\n var width = cellWidget.width + cellWidget.margin.left\n + cellWidget.margin.right - cellWidget.leftBorderWidth - cellWidget.rightBorderWidth;\n var top = cellWidget.y;\n var height = cellWidget.height;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n var isVisiblePage = this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + this.viewer.selectionCanvas.height;\n if (this.selectedWidgets.containsKey(cellWidget)) {\n selectionWidget = this.selectedWidgets.get(cellWidget);\n if (isVisiblePage) {\n // tslint:disable-next-line:max-line-length\n this.viewer.selectionContext.clearRect((pageLeft + (selectionWidget.left * this.viewer.zoomFactor) - this.viewer.containerLeft), (pageTop + (top * this.viewer.zoomFactor)) - this.viewer.containerTop, selectionWidget.width * this.viewer.zoomFactor, height * this.viewer.zoomFactor);\n }\n }\n selectionWidget = new SelectionWidgetInfo(left, width);\n this.selectedWidgets.add(cellWidget, selectionWidget);\n if (isVisiblePage) {\n this.viewer.selectionContext.fillStyle = 'gray';\n this.viewer.selectionContext.globalAlpha = 0.4;\n var zoomFactor = this.viewer.zoomFactor;\n this.clipSelection(page, pageTop);\n // tslint:disable-next-line:max-line-length\n this.viewer.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (top * zoomFactor)) - this.viewer.containerTop, width * zoomFactor, height * zoomFactor);\n this.viewer.selectionContext.restore();\n }\n };\n /**\n * @private\n */\n Selection.prototype.clipSelection = function (page, pageTop) {\n var viewer = this.viewer;\n var width = page.boundingRectangle.width * viewer.zoomFactor;\n var height = page.boundingRectangle.height * viewer.zoomFactor;\n var left = page.boundingRectangle.x;\n viewer.selectionContext.beginPath();\n viewer.selectionContext.save();\n viewer.selectionContext.rect(left - viewer.containerLeft, pageTop - viewer.containerTop, width, height);\n viewer.selectionContext.clip();\n };\n /**\n * Add selection highlight\n * @private\n */\n Selection.prototype.addSelectionHighlight = function (canvasContext, widget, top) {\n if (this.selectedWidgets.containsKey(widget)) {\n var height = this.viewer.render.getScaledValue(widget.height);\n var widgetInfo = this.selectedWidgets.get(widget);\n var width = this.viewer.render.getScaledValue(widgetInfo.width);\n var left = this.viewer.render.getScaledValue(widgetInfo.left, 1);\n canvasContext.fillStyle = 'gray';\n var page = this.owner.selection.getPage(widget.paragraph);\n this.owner.selection.clipSelection(page, this.owner.selection.getPageTop(page));\n canvasContext.fillRect(left, this.viewer.render.getScaledValue(top, 2), width, height);\n canvasContext.restore();\n }\n };\n /**\n * Add Selection highlight inside table\n * @private\n */\n Selection.prototype.addSelectionHighlightTable = function (canvasContext, tableCellWidget) {\n if (this.selectedWidgets.containsKey(tableCellWidget)) {\n var selectionWidget = this.selectedWidgets.get(tableCellWidget);\n var left = this.viewer.render.getScaledValue(selectionWidget.left, 1);\n var top_1 = this.viewer.render.getScaledValue(tableCellWidget.y, 2);\n var width = this.viewer.render.getScaledValue(selectionWidget.width);\n var height = this.viewer.render.getScaledValue(tableCellWidget.height);\n canvasContext.fillStyle = 'gray';\n var page = this.owner.selection.getPage(tableCellWidget);\n this.owner.selection.clipSelection(page, this.owner.selection.getPageTop(page));\n canvasContext.fillRect(left, top_1, width, height);\n canvasContext.restore();\n }\n };\n /**\n * Remove Selection highlight\n * @private\n */\n Selection.prototype.removeSelectionHighlight = function (widget) {\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n var page = undefined;\n if (widget instanceof LineWidget) {\n var lineWidget = widget;\n var currentParaWidget = lineWidget.paragraph;\n page = !isNullOrUndefined(currentParaWidget) ?\n this.getPage((lineWidget.paragraph)) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = this.getTop(lineWidget);\n height = lineWidget.height;\n }\n else if (widget instanceof TableCellWidget) {\n page = !isNullOrUndefined(widget) ?\n this.getPage(widget) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = widget.y;\n height = widget.height;\n }\n if (isNullOrUndefined(page)) {\n return;\n }\n var widgetInfo = this.selectedWidgets.get(widget);\n width = widgetInfo.width;\n left = widgetInfo.left;\n var pageRect = page.boundingRectangle;\n var pageIndex = this.viewer.pages.indexOf(page);\n var pageGap = this.viewer.pageGap;\n var pageTop = (pageRect.y - pageGap * (pageIndex + 1)) * this.viewer.zoomFactor + pageGap * (pageIndex + 1);\n var pageLeft = pageRect.x;\n var zoomFactor = this.viewer.zoomFactor;\n if (this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + this.viewer.selectionCanvas.height) {\n // tslint:disable-next-line:max-line-length\n this.viewer.selectionContext.clearRect((pageLeft + (left * zoomFactor) - this.viewer.containerLeft) - 0.5, (pageTop + (top * zoomFactor)) - this.viewer.containerTop - 0.5, width * zoomFactor + 0.5, height * zoomFactor + 0.5);\n }\n };\n /**\n * Select Current word\n * @private\n */\n Selection.prototype.selectCurrentWord = function () {\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n this.selectCurrentWordRange(startPosition, endPosition, false);\n this.selectRange(startPosition, endPosition);\n };\n /**\n * Select current paragraph\n * @private\n */\n Selection.prototype.selectCurrentParagraph = function () {\n if (!isNullOrUndefined(this.start)) {\n this.start.paragraphStartInternal(this, false);\n this.end.moveToParagraphEndInternal(this, false);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select current word range\n * @private\n */\n Selection.prototype.selectCurrentWordRange = function (startPosition, endPosition, excludeSpace) {\n if (!isNullOrUndefined(startPosition)) {\n if (startPosition.offset > 0) {\n var wordStart = startPosition.clone();\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline) && inline instanceof FieldElementBox && inline.fieldType === 1) {\n // tslint:disable-next-line:max-line-length\n if (startPosition.offset > 2 && (!isNullOrUndefined(inline.fieldSeparator) || isNullOrUndefined(inline.fieldBegin))) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 2);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset - 1)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n else if (startPosition.offset > 3 && isNullOrUndefined(inline.fieldSeparator)) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 3);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n else {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 1);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n endPosition.moveToWordEndInternal(2, excludeSpace);\n }\n };\n /**\n * Extend selection to paragraph start\n * @private\n */\n Selection.prototype.extendToParagraphStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.paragraphStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to paragraph end\n * @private\n */\n Selection.prototype.extendToParagraphEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToParagraphEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to next text position\n * @private\n */\n Selection.prototype.moveNextPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.moveNextPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateForwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to next paragraph\n * @private\n */\n Selection.prototype.moveToNextParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextParagraphStartInternal();\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to previous text position\n * @private\n */\n Selection.prototype.movePreviousPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.movePreviousPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateBackwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to previous paragraph\n * @private\n */\n Selection.prototype.moveToPreviousParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousParagraph(this);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to previous line\n * @private\n */\n Selection.prototype.extendToPreviousLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousLine(this, this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to line end\n * @private\n */\n Selection.prototype.extendToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend to line start\n * @private\n */\n Selection.prototype.extendToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.moveUp = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.upDownSelectionLength = this.start.location.x;\n this.start.moveUp(this, this.upDownSelectionLength);\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.moveDown = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.start.moveDown(this, this.upDownSelectionLength);\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n Selection.prototype.updateForwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n }\n };\n Selection.prototype.updateBackwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlockInFirstCell = function (table) {\n if (table.childWidgets.length > 0) {\n var firstrow = table.childWidgets[0];\n if (firstrow.childWidgets.length > 0) {\n var firstcell = firstrow.childWidgets[0];\n if (firstcell.childWidgets.length === 0) {\n return undefined;\n }\n return firstcell.childWidgets[0];\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getFirstCellInRegion = function (row, startCell, selectionLength, isMovePrevious) {\n var cellStart = this.getCellLeft(row, startCell);\n var cellEnd = cellStart + startCell.cellFormat.cellWidth;\n var flag = true;\n if (cellStart <= selectionLength && selectionLength < cellEnd) {\n for (var k = 0; k < row.childWidgets.length; k++) {\n var left = this.getCellLeft(row, row.childWidgets[k]);\n if (HelperMethods.round(cellStart, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(cellEnd, 2)) {\n flag = false;\n return row.childWidgets[k];\n }\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cellLeft = this.getCellLeft(row, row.childWidgets[j]);\n if (cellLeft <= selectionLength && cellLeft +\n row.childWidgets[j].cellFormat.cellWidth > selectionLength) {\n flag = false;\n return row.childWidgets[j];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrevious) {\n var previousWidget = row.previousRenderedWidget;\n return this.getFirstCellInRegion(previousWidget, startCell, selectionLength, isMovePrevious);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrevious) {\n return this.getFirstCellInRegion(row.nextRenderedWidget, startCell, selectionLength, isMovePrevious);\n }\n }\n return row.childWidgets[0];\n };\n /**\n * @private\n */\n Selection.prototype.getFirstParagraph = function (tableCell) {\n while (tableCell.previousSplitWidget) {\n tableCell = tableCell.previousSplitWidget;\n }\n var firstBlock = tableCell.firstChild;\n return this.getFirstParagraphBlock(firstBlock);\n };\n /**\n * Get last block in last cell\n * @private\n */\n //Table\n Selection.prototype.getLastBlockInLastCell = function (table) {\n if (table.childWidgets.length > 0) {\n var lastrow = table.childWidgets[table.childWidgets.length - 1];\n var lastcell = lastrow.childWidgets[lastrow.childWidgets.length - 1];\n return lastcell.childWidgets[lastcell.childWidgets.length - 1];\n }\n return undefined;\n };\n /**\n * Move to line start\n * @private\n */\n Selection.prototype.moveToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateBackwardSelection();\n this.start.moveToLineStartInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to line end\n * @private\n */\n Selection.prototype.moveToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateForwardSelection();\n this.start.moveToLineEndInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Get Page top\n * @private\n */\n Selection.prototype.getPageTop = function (page) {\n // tslint:disable-next-line:max-line-length\n return (page.boundingRectangle.y - this.viewer.pageGap * (this.viewer.pages.indexOf(page) + 1)) * this.viewer.zoomFactor + this.viewer.pageGap * (this.viewer.pages.indexOf(page) + 1);\n };\n /**\n * Move text position to cursor point\n * @private\n */\n Selection.prototype.moveTextPosition = function (cursorPoint, textPosition) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n //Updates the text position based on the cursor position.\n var widget = this.viewer.getLineWidgetInternal(cursorPoint, true);\n if (!isNullOrUndefined(widget)) {\n this.updateTextPositionWidget(widget, cursorPoint, textPosition, true);\n }\n this.upDownSelectionLength = textPosition.location.x;\n var selectionStartIndex = this.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.end.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n // Extends selection end to field begin or field end.\n if (TextPosition.isForwardSelection(selectionStartIndex, selectionEndIndex)) {\n textPosition.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n else {\n textPosition.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.fireSelectionChanged(true);\n };\n //Helper Method Implementation \n //Document\n /**\n * Get document start position\n * @private\n */\n Selection.prototype.getDocumentStart = function () {\n var textPosition = undefined;\n var block = this.viewer.pages[0].bodyWidgets[0].childWidgets[0];\n return this.setPositionForBlock(block, true);\n };\n /**\n * Get document end position\n * @private\n */\n Selection.prototype.getDocumentEnd = function () {\n var textPosition = undefined;\n var documentStart = this.owner.documentStart;\n var lastPage = this.viewer.pages[this.viewer.pages.length - 1];\n if (!isNullOrUndefined(documentStart) && lastPage.bodyWidgets[0].childWidgets.length > 0) {\n var block = undefined;\n var section = lastPage.bodyWidgets[0];\n var blocks = section.childWidgets;\n var lastBlkItem = blocks.length - 1;\n var lastBlock = blocks[lastBlkItem];\n if (lastBlock instanceof BlockWidget) {\n block = lastBlock;\n }\n textPosition = this.setPositionForBlock(block, false);\n }\n return textPosition;\n };\n //Keyboard shortcut internal API\n /**\n * @private\n * Handles control end key.\n */\n Selection.prototype.handleControlEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.owner.selection.selectContent(documentEnd, true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control home key.\n */\n Selection.prototype.handleControlHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.owner.selection.selectContent(documentStart, true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control left key.\n */\n Selection.prototype.handleControlLeftKey = function () {\n this.extendToWordStart(true);\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control right key.\n */\n Selection.prototype.handleControlRightKey = function () {\n this.extendToWordEnd(true);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control down key.\n * @private\n */\n Selection.prototype.handleControlDownKey = function () {\n this.moveToNextParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control up key.\n * @private\n */\n Selection.prototype.handleControlUpKey = function () {\n this.moveToPreviousParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles shift left key.\n */\n Selection.prototype.handleShiftLeftKey = function () {\n this.extendBackward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift up key.\n * @private\n */\n Selection.prototype.handleShiftUpKey = function () {\n this.extendToPreviousLine();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift right key.\n * @private\n */\n Selection.prototype.handleShiftRightKey = function () {\n this.extendForward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift down key.\n * @private\n */\n Selection.prototype.handleShiftDownKey = function () {\n this.extendToNextLine();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control shift left key.\n */\n Selection.prototype.handleControlShiftLeftKey = function () {\n this.extendToWordStart(false);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift up key.\n * @private\n */\n Selection.prototype.handleControlShiftUpKey = function () {\n this.extendToParagraphStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift right key\n * @private\n */\n Selection.prototype.handleControlShiftRightKey = function () {\n this.extendToWordEnd(false);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift down key.\n * @private\n */\n Selection.prototype.handleControlShiftDownKey = function () {\n this.extendToParagraphEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles left key.\n * @private\n */\n Selection.prototype.handleLeftKey = function () {\n this.movePreviousPosition();\n this.checkForCursorVisibility();\n };\n /**\n * Handles up key.\n * @private\n */\n Selection.prototype.handleUpKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveUp();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles right key.\n * @private\n */\n Selection.prototype.handleRightKey = function () {\n this.moveNextPosition();\n this.checkForCursorVisibility();\n };\n /**\n * Handles end key.\n * @private\n */\n Selection.prototype.handleEndKey = function () {\n this.moveToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles home key.\n * @private\n */\n Selection.prototype.handleHomeKey = function () {\n this.moveToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles down key.\n * @private\n */\n Selection.prototype.handleDownKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveDown();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift end key.\n * @private\n */\n Selection.prototype.handleShiftEndKey = function () {\n this.extendToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift home key.\n * @private\n */\n Selection.prototype.handleShiftHomeKey = function () {\n this.extendToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift end key.\n * @private\n */\n Selection.prototype.handleControlShiftEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.end.setPosition(documentEnd.currentWidget, false);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift home key.\n * @private\n */\n Selection.prototype.handleControlShiftHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.end.setPositionInternal(documentStart);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles tab key.\n * @param isNavigateInCell\n * @param isShiftTab\n * @private\n */\n Selection.prototype.handleTabKey = function (isNavigateInCell, isShiftTab) {\n var start = this.start;\n if (isNullOrUndefined(start)) {\n return;\n }\n if (start.paragraph.isInsideTable && this.end.paragraph.isInsideTable && (isNavigateInCell || isShiftTab)) {\n //Perform tab navigation\n if (isShiftTab) {\n this.selectPreviousCell();\n }\n else {\n this.selectNextCell();\n }\n }\n else if ((isNavigateInCell || isShiftTab) && !isNullOrUndefined(start) && start.offset === this.getStartOffset(start.paragraph)\n && !isNullOrUndefined(start.paragraph.paragraphFormat) && !isNullOrUndefined(start.paragraph.paragraphFormat.listFormat)\n && start.paragraph.paragraphFormat.listFormat.listId !== -1 && !this.owner.isReadOnlyMode) {\n this.owner.editorModule.updateListLevel(isShiftTab ? false : true);\n }\n else if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.handleTextInput('\\t');\n }\n this.checkForCursorVisibility();\n };\n Selection.prototype.selectPreviousCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.previousWidget)) {\n if (!isNullOrUndefined(tableRow.previousRenderedWidget)) {\n //Move text selection or cursor to previous row's last cell\n var prevRow = undefined;\n if (tableRow.previousRenderedWidget instanceof TableRowWidget) {\n prevRow = tableRow.previousRenderedWidget;\n }\n this.selectTableCellInternal(prevRow.childWidgets[prevRow.childWidgets.length - 1], true);\n }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var prevCell = undefined;\n if (tableCell.previousWidget instanceof TableCellWidget) {\n prevCell = tableCell.previousWidget;\n }\n this.selectTableCellInternal(prevCell, true);\n }\n };\n Selection.prototype.selectNextCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.nextWidget)) {\n if (isNullOrUndefined(tableRow.nextRenderedWidget) && !this.owner.isReadOnlyMode) {\n //Insert new row below \n this.owner.editorModule.insertRow(false);\n }\n else {\n //Move text selection or cursor to next row's first cell\n var nextRow = undefined;\n if (tableRow.nextRenderedWidget instanceof TableRowWidget) {\n nextRow = tableRow.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextRow.childWidgets[0], true);\n }\n // }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var nextCell = undefined;\n if (tableCell.nextRenderedWidget instanceof TableCellWidget) {\n nextCell = tableCell.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextCell, true);\n }\n };\n /**\n * Select given table cell\n * @private\n */\n Selection.prototype.selectTableCellInternal = function (tableCell, clearMultiSelection) {\n var firstParagraph = this.getFirstParagraph(tableCell);\n var lastParagraph = this.getLastParagraph(tableCell);\n if (firstParagraph === lastParagraph && lastParagraph.isEmpty()) {\n this.selectParagraph(lastParagraph, true);\n }\n else {\n var firstLineWidget = lastParagraph.childWidgets[0];\n this.start.setPosition(firstParagraph.childWidgets[0], true);\n this.end.setPositionParagraph(firstLineWidget, firstLineWidget.getEndOffset());\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select while table\n * @private\n */\n Selection.prototype.selectTableInternal = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.getTable(start, end))) {\n var containerCell = this.getContainerCellOf(start.paragraph.associatedCell, end.paragraph.associatedCell);\n var table = containerCell.ownerTable;\n var firstPara = this.getFirstParagraphBlock(table);\n var lastPara = this.getLastParagraphBlock(table);\n var offset = lastPara.lastChild.getEndOffset();\n this.start.setPosition(firstPara.childWidgets[0], true);\n this.end.setPositionParagraph(lastPara.lastChild, offset + 1);\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single column\n * @private\n */\n Selection.prototype.selectColumnInternal = function () {\n var startTextPos = this.start;\n var endTextPos = this.end;\n if (!this.isForward) {\n startTextPos = this.end;\n endTextPos = this.start;\n }\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(startTextPos) && !isNullOrUndefined(endTextPos) && !isNullOrUndefined(this.getTable(startTextPos, endTextPos))) {\n var containerCell = this.getContainerCellOf(startTextPos.paragraph.associatedCell, endTextPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endTextPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startTextPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endTextPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endTextPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var columnCells = containerCell.ownerTable.getColumnCellsForSelection(containerCell, containerCell);\n if (columnCells.length > 0) {\n var firstPara = this.getFirstParagraph(columnCells[0]);\n var lastPara = this.getLastParagraph(columnCells[columnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n else {\n var startCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(startCell, startCell);\n var endCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(endCell, endCell);\n if (startCellColumnCells.length > 0 && endCellColumnCells.length > 0) {\n var firstPara = this.getFirstParagraph(startCellColumnCells[0]);\n // tslint:disable-next-line:max-line-length\n var lastPara = this.getLastParagraph(endCellColumnCells[endCellColumnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single row\n * @private\n */\n Selection.prototype.selectTableRow = function () {\n var startPos = this.start;\n var endPos = this.end;\n if (!this.isForward) {\n startPos = this.end;\n endPos = this.start;\n }\n if (!isNullOrUndefined(startPos) && !isNullOrUndefined(endPos) && !isNullOrUndefined(this.getTable(startPos, endPos))) {\n var containerCell = void 0;\n containerCell = this.getContainerCellOf(startPos.paragraph.associatedCell, endPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var firstPara = this.getFirstParagraph(row.childWidgets[0]);\n var lastPara = this.getLastParagraph(row.childWidgets[row.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n var firstPara = this.getFirstParagraph(startCell.ownerRow.childWidgets[0]);\n var lastPara = void 0;\n // tslint:disable-next-line:max-line-length\n lastPara = this.getLastParagraph(endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single cell\n * @private\n */\n Selection.prototype.selectTableCell = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(this.getTable(start, end))) {\n return;\n }\n if (this.isEmpty) {\n if (start.paragraph.isInsideTable && !isNullOrUndefined(start.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(start.paragraph.associatedCell);\n var lastPara = this.getLastParagraph(end.paragraph.associatedCell);\n if (firstPara === lastPara) {\n this.start.setPosition(lastPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n else {\n var containerCell = this.getContainerCell(start.paragraph.associatedCell);\n // tslint:disable-next-line:max-line-length\n if (this.containsCell(containerCell, start.paragraph.associatedCell) && this.containsCell(containerCell, end.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(containerCell);\n var lastPara = this.getLastParagraph(containerCell);\n if (!isNullOrUndefined(firstPara) && !isNullOrUndefined(lastPara)) {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * @private\n * Selects the entire document.\n */\n Selection.prototype.selectAll = function () {\n var documentStart;\n var documentEnd;\n if (this.owner.enableHeaderAndFooter) {\n var headerFooter = this.getContainerWidget(this.start.paragraph);\n documentStart = this.setPositionForBlock(headerFooter.firstChild, true);\n documentEnd = this.setPositionForBlock(headerFooter.lastChild, false);\n }\n else {\n documentStart = this.owner.documentStart;\n documentEnd = this.owner.documentEnd;\n }\n //Selects the entire document. \n if (!isNullOrUndefined(documentStart)) {\n this.start.setPositionInternal(documentStart);\n this.end.setPositionParagraph(documentEnd.currentWidget, documentEnd.offset + 1);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Extend selection backward\n * @private\n */\n Selection.prototype.extendBackward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveBackward();\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extent selection forward\n * @private\n */\n Selection.prototype.extendForward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveForward();\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to word start and end\n * @private\n */\n Selection.prototype.extendToWordStartEnd = function () {\n if ((this.start.paragraph.isInsideTable || this.end.paragraph.isInsideTable)\n && (this.start.paragraph.associatedCell !== this.end.paragraph.associatedCell\n || this.isCellSelected(this.start.paragraph.associatedCell, this.start, this.end))) {\n return true;\n }\n return false;\n };\n /**\n * Extend selection to word start\n * @private\n */\n Selection.prototype.extendToWordStart = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelected = this.extendToWordStartEnd();\n if (isCellSelected) {\n this.end.moveToPreviousParagraphInTable(this);\n }\n else {\n this.end.moveToWordStartInternal(isNavigation ? 0 : 1);\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extent selection to word end\n * @private\n */\n Selection.prototype.extendToWordEnd = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelect = this.extendToWordStartEnd();\n if (isCellSelect) {\n this.end.moveToNextParagraphInTable();\n }\n else {\n this.end.moveToWordEndInternal(isNavigation ? 0 : 1, false);\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to next line\n * @private\n */\n Selection.prototype.extendToNextLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextLine(this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n //Selection Text get API\n //Selection add, Highlight, remove API enda\n Selection.prototype.getTextPosition = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(hierarchicalIndex);\n return textPosition;\n };\n /**\n * Get Selected text\n * @private\n */\n Selection.prototype.getText = function (includeObject) {\n if (isNullOrUndefined(this.start) || isNullOrUndefined(this.end)\n || isNullOrUndefined(this.start.paragraph) || isNullOrUndefined(this.end.paragraph)) {\n return undefined;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (startPosition.isAtSamePosition(endPosition)) {\n return '';\n }\n return this.getTextInternal(startPosition, endPosition, includeObject);\n };\n /**\n * Get selected text\n * @private\n */\n Selection.prototype.getTextInternal = function (start, end, includeObject) {\n if (start.isExistAfter(end)) {\n var temp = end;\n end = start;\n start = temp;\n }\n var startPosition = start;\n var endPosition = end;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n var startIndex = 0;\n var endIndex = 0;\n var startOffset = start.offset;\n var endOffset = end.offset;\n var startInlineObj = start.currentWidget.getInline(startOffset, startIndex);\n startIndex = startInlineObj.index;\n var inline = startInlineObj.element;\n // If the start position is at the beginning of field begin that has field end, then field code should be skipped.\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var elementInfo = this.getRenderedInline(inline, startIndex);\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n var endInlineObj = end.currentWidget.getInline(endOffset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n var text = '';\n // Retrieves the text from start inline.\n if (inline instanceof ImageElementBox && includeObject && startIndex === 0) {\n text = ElementBox.objectCharacter;\n }\n else if (inline instanceof TextElementBox) {\n // tslint:disable-next-line:max-line-length\n text = ((isNullOrUndefined(inline.text)) || (inline.text) === '') || inline.text.length < startIndex ? text : inline.text.substring(startIndex);\n }\n if (startPosition.paragraph === endPosition.paragraph) {\n if (inline instanceof ElementBox) {\n if (inline === endInline && inline instanceof TextElementBox) {\n text = text.length < endIndex - startIndex ? text : text.substring(0, endIndex - startIndex);\n }\n else if (inline.nextNode instanceof ElementBox) {\n // tslint:disable-next-line:max-line-length\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n else {\n if (inline instanceof ElementBox && inline.nextNode instanceof ElementBox) {\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, undefined, 0, includeObject);\n }\n else {\n // tslint:disable-next-line:max-line-length\n var nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(startPosition.paragraph);\n text = text + '\\r';\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endPosition.paragraph) {\n return text;\n }\n nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n // tslint:disable-next-line:max-line-length\n text = text + this.getTextInline(nextParagraphWidget.childWidgets[0].children[0], endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n // If the selection includes end paragraph mark.\n if (endOffset === (endPosition.currentWidget).getEndOffset() + 1) {\n text = text + '\\r';\n }\n return text;\n }\n return undefined;\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getTextInline = function (inlineElement, endParagraphWidget, endInline, endIndex, includeObject) {\n var text = '';\n do {\n if (inlineElement === endInline) {\n if (inlineElement instanceof TextElementBox) {\n var span = inlineElement;\n if (!(isNullOrUndefined(span.text) || span.text === '')) {\n if (span.text.length < endIndex) {\n text = text + span.text;\n }\n else {\n text = text + span.text.substring(0, endIndex);\n }\n }\n // tslint:disable-next-line:max-line-length\n }\n else if (inlineElement instanceof ImageElementBox && includeObject && endIndex === inlineElement.length) {\n text = text + ElementBox.objectCharacter;\n }\n return text;\n }\n if (inlineElement instanceof TextElementBox) {\n text = text + inlineElement.text;\n }\n else if (inlineElement instanceof ImageElementBox && includeObject) {\n text = text + ElementBox.objectCharacter;\n }\n else if (inlineElement instanceof FieldElementBox && !isNullOrUndefined(inlineElement.fieldEnd)) {\n if (!isNullOrUndefined(inlineElement.fieldSeparator)) {\n inlineElement = inlineElement.fieldSeparator;\n }\n else {\n inlineElement = inlineElement.fieldEnd;\n }\n }\n if (isNullOrUndefined(inlineElement.nextNode)) {\n break;\n }\n inlineElement = inlineElement.nextNode;\n } while (!isNullOrUndefined(inlineElement));\n if (endParagraphWidget === inlineElement.line.paragraph) {\n return text;\n }\n // tslint:disable-next-line:max-line-length\n var nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(inlineElement.line.paragraph);\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endParagraphWidget) {\n return text;\n }\n nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n var lineWidget = nextParagraphWidget.childWidgets[0];\n // tslint:disable-next-line:max-line-length\n text = text + '\\r' + this.getTextInline(lineWidget.children[0], endParagraphWidget, endInline, endIndex, includeObject);\n }\n return text;\n };\n /**\n * Returns field code.\n * @private\n * @param fieldBegin\n */\n Selection.prototype.getFieldCode = function (fieldBegin) {\n var fieldCode = '';\n if (!(fieldBegin.fieldEnd instanceof FieldElementBox)) {\n return fieldCode;\n }\n var paragraph = fieldBegin.paragraph;\n var endParagraph = fieldBegin.fieldEnd.paragraph;\n if (fieldBegin.fieldSeparator instanceof FieldElementBox) {\n endParagraph = fieldBegin.fieldSeparator.paragraph;\n }\n var startLineIndex = fieldBegin.line.indexInOwner;\n var startIndex = fieldBegin.indexInOwner;\n do {\n fieldCode += this.getFieldCodeInternal(paragraph, startLineIndex, startIndex);\n if (paragraph === endParagraph) {\n break;\n }\n paragraph = this.getNextParagraphBlock(paragraph);\n startLineIndex = 0;\n startIndex = 0;\n } while (paragraph instanceof ParagraphWidget);\n return fieldCode.trim();\n };\n Selection.prototype.getFieldCodeInternal = function (paragraph, startLineIndex, inlineIndex) {\n var fieldCode = '';\n for (var i = startLineIndex; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var i_1 = inlineIndex; i_1 < line.children.length; i_1++) {\n var element = line.children[i_1];\n if (element instanceof TextElementBox) {\n fieldCode += element.text;\n }\n if (element instanceof FieldElementBox\n && (element.fieldType === 2 || element.fieldType === 1)) {\n return fieldCode;\n }\n }\n inlineIndex = 0;\n }\n return fieldCode;\n };\n /**\n * @private\n */\n Selection.prototype.getTocFieldInternal = function () {\n var paragraph = this.start.paragraph;\n if (!this.isEmpty && !this.isForward) {\n paragraph = this.end.paragraph;\n }\n while (paragraph instanceof ParagraphWidget && paragraph.childWidgets.length > 0) {\n var line = paragraph.firstChild;\n if (line.children.length > 0) {\n var element = line.children[0];\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') === 0) {\n return element;\n }\n }\n paragraph = paragraph.previousRenderedWidget;\n }\n return undefined;\n };\n /**\n * Get next paragraph in bodyWidget\n * @private\n */\n Selection.prototype.getNextParagraph = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousParagraph = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var bodyWidget = section.previousRenderedWidget;\n var block = bodyWidget.childWidgets[bodyWidget.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get first paragraph in cell\n * @private\n */\n Selection.prototype.getFirstParagraphInCell = function (cell) {\n var firstBlock = cell.childWidgets[0];\n if (firstBlock instanceof ParagraphWidget) {\n return firstBlock;\n }\n else {\n return this.getFirstParagraphInFirstCell(firstBlock);\n }\n };\n /**\n * Get first paragraph in first cell\n * @private\n */\n Selection.prototype.getFirstParagraphInFirstCell = function (table) {\n if (table.childWidgets.length > 0) {\n var firstRow = table.childWidgets[0];\n var cell = firstRow.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in last cell\n * @private\n */\n Selection.prototype.getLastParagraphInLastCell = function (table) {\n if (table.childWidgets.length > 0) {\n var lastrow = table.lastChild;\n var lastcell = lastrow.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get last paragraph in first row\n * @private\n */\n Selection.prototype.getLastParagraphInFirstRow = function (table) {\n if (table.childWidgets.length > 0) {\n var row = table.firstChild;\n var lastcell = row.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get Next start inline\n * @private\n */\n Selection.prototype.getNextStartInline = function (line, offset) {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * Get previous text inline\n * @private\n */\n Selection.prototype.getPreviousTextInline = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (inline.previousNode instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline.previousNode)) {\n if (inline.previousNode.fieldType === 0 || inline.previousNode.fieldType === 1) {\n return inline.previousNode;\n }\n return inline.previousNode.fieldBegin;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextInline((inline.previousNode));\n }\n return undefined;\n };\n /**\n * Get next text inline\n * @private\n */\n Selection.prototype.getNextTextInline = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (inline.nextNode instanceof FieldElementBox && (HelperMethods.isLinkedFieldCharacter(inline.nextNode))) {\n if (inline.nextNode.fieldType === 1 || inline.nextNode.fieldType === 0) {\n return inline.nextNode;\n }\n return inline.nextNode.fieldEnd;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextInline((inline.nextNode));\n }\n return undefined;\n };\n /**\n * Get container table\n * @private\n */\n Selection.prototype.getContainerTable = function (block) {\n if (block.isInsideTable) {\n if (block.associatedCell.ownerTable.isInsideTable) {\n block = this.getContainerTable(block.associatedCell.ownerTable);\n }\n else {\n block = block.associatedCell.ownerTable;\n }\n }\n if (block instanceof TableWidget) {\n return block;\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.isExistBefore = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) < cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex < cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n //Checks if current block exists before the block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistBefore(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistBefore(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex < cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n return this.isExistBefore(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistBefore(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistBefore(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistBefore(start, ownerTable);\n }\n else {\n {\n if (start.containerWidget === block.containerWidget) {\n return start.index <\n block.index;\n }\n if (start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget) {\n //Splitted blocks \n var startPage = this.viewer.pages.indexOf(start.containerWidget.page);\n var endPage = this.viewer.pages.indexOf(block.containerWidget.page);\n return startPage < endPage;\n }\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isExistAfter = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n //Current paragraph in cell, paragraph in cell\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) > cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex > cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n //Checks if this block exists before block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistAfter(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistAfter(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex > cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n return this.isExistAfter(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistAfter(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistAfter(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistAfter(start, ownerTable);\n }\n else {\n if (start.containerWidget === block.containerWidget) {\n return start.index >\n block.index;\n }\n if (start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget) {\n //Splitted blocks \n var startPage = this.viewer.pages.indexOf(start.containerWidget.page);\n var endPage = this.viewer.pages.indexOf(block.containerWidget.page);\n return startPage > endPage;\n }\n // if (start.owner instanceof WHeaderFooter) {\n // return (start.owner as WHeaderFooter).childWidgets.indexOf(start) \n // > (block.owner as WHeaderFooter).childWidgets.indexOf(block);\n // } else if (start.section === block.section && start.section instanceof WSection) {\n // return (start.section as WSection).childWidgets.indexOf(start)\n // > (start.section as WSection).childWidgets.indexOf(block);\n // } else if (start.wordDocument instanceof WordDocument) {\n // tslint:disable-next-line:max-line-length\n // return (start.wordDocument as WordDocument).sections.indexOf(start.section as WSection) > (start.wordDocument as WordDocument).sections.indexOf(block.section as WSection);\n }\n return false;\n };\n /**\n * Return true if current inline in exist before inline\n * @private\n */\n Selection.prototype.isExistBeforeInline = function (currentInline, inline) {\n if (currentInline.line === inline.line) {\n return currentInline.line.children.indexOf(currentInline) <\n inline.line.children.indexOf(inline);\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n < inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) <\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) <\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistBefore(startParagraph, endParagraph);\n };\n /**\n * Return true id current inline is exist after inline\n * @private\n */\n Selection.prototype.isExistAfterInline = function (currentInline, inline) {\n if (currentInline.line === inline.line) {\n return currentInline.line.children.indexOf(currentInline) >\n inline.line.children.indexOf(inline);\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n > inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistAfter(startParagraph, endParagraph);\n };\n /**\n * Get next rendered block\n * @private\n */\n Selection.prototype.getNextRenderedBlock = function (block) {\n if (isNullOrUndefined(block.nextWidget)) {\n return block.nextRenderedWidget;\n }\n return block.nextWidget;\n };\n /**\n * Get next rendered block\n * @private\n */\n Selection.prototype.getPreviousRenderedBlock = function (block) {\n if (isNullOrUndefined(block.previousWidget)) {\n return block.previousRenderedWidget;\n }\n return block.previousWidget;\n };\n /**\n * Get Next paragraph in block\n * @private\n */\n Selection.prototype.getNextParagraphBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n return this.getFirstParagraphInFirstCell(block.nextRenderedWidget);\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextParagraphCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n var bodyWidget = block.containerWidget;\n return this.getNextParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp) {\n return this.getFirstBlockInNextHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlockInNextHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var nextBlock;\n if (headerFooter.headerFooterType.indexOf('Header') !== -1) {\n nextBlock = headerFooter.page.footerWidget.firstChild;\n }\n else if (headerFooter.page.nextPage) {\n nextBlock = headerFooter.page.nextPage.headerWidget.firstChild;\n }\n else {\n return undefined;\n }\n if (nextBlock instanceof ParagraphWidget) {\n return nextBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(nextBlock);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getLastBlockInPreviousHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var previousBlock;\n if (headerFooter.headerFooterType.indexOf('Footer') !== -1) {\n previousBlock = headerFooter.page.headerWidget.lastChild;\n }\n else if (headerFooter.page.previousPage) {\n previousBlock = headerFooter.page.previousPage.footerWidget.lastChild;\n }\n else {\n return undefined;\n }\n if (previousBlock instanceof ParagraphWidget) {\n return previousBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(previousBlock);\n }\n };\n /**\n * Get previous paragraph in block\n * @private\n */\n Selection.prototype.getPreviousParagraphBlock = function (block) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n return this.getLastParagraphInLastCell((block.previousRenderedWidget));\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousParagraphCell((block.containerWidget));\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp) {\n return this.getLastBlockInPreviousHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * Get first paragraph in block\n * @private\n */\n Selection.prototype.getFirstParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getFirstParagraphInFirstCell(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in block\n * @private\n */\n Selection.prototype.getLastParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getLastParagraphInLastCell(block);\n }\n return undefined;\n };\n /**\n * Return true if paragraph has valid inline\n * @private\n */\n Selection.prototype.hasValidInline = function (paragraph, start, end) {\n var index = paragraph.childWidgets.indexOf(start.line);\n for (var i = index; i < paragraph.childWidgets.length; i++) {\n for (var j = 0; j < paragraph.childWidgets[i].children.length; j++) {\n var inline = paragraph.childWidgets[i].children[j];\n if (inline.length === 0) {\n continue;\n }\n if (inline === end) {\n return false;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Get paragraph length\n * @private\n */\n Selection.prototype.getParagraphLength = function (paragraph, endLine, elementInfo) {\n var length = 0;\n for (var j = 0; j < paragraph.childWidgets.length; j++) {\n var line = paragraph.childWidgets[j];\n if (endLine instanceof LineWidget && endLine === line) {\n if (elementInfo) {\n length += this.getLineLength(line, elementInfo);\n }\n break;\n }\n length += this.getLineLength(line);\n }\n return length;\n };\n /**\n * Get Line length\n * @private\n */\n Selection.prototype.getLineLength = function (line, elementInfo) {\n var length = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (elementInfo && elementInfo.element instanceof ElementBox && elementInfo.element === element) {\n length += elementInfo.index;\n break;\n }\n length += element.length;\n }\n return length;\n };\n /**\n * Get line information\n * @private\n */\n Selection.prototype.getLineInfo = function (paragraph, offset) {\n var line = undefined;\n var length = 0;\n var childLength = paragraph.childWidgets.length;\n for (var j = 0; j < childLength; j++) {\n line = paragraph.childWidgets[j];\n length = this.getLineLength(line);\n if (offset <= length || j === childLength - 1) {\n break;\n }\n else {\n offset = offset - length;\n }\n }\n return { 'line': line, 'offset': offset };\n };\n /**\n * @private\n */\n Selection.prototype.getElementInfo = function (line, offset) {\n var index = 0;\n var element = undefined;\n for (var i = 0; i < line.children.length; i++) {\n element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (offset > element.length\n && (!(offset === element.length + 1 && isNullOrUndefined(element.nextNode)))) {\n offset = offset - element.length;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'index': offset };\n };\n /**\n * Get paragraph start offset\n * @private\n */\n Selection.prototype.getStartOffset = function (paragraph) {\n var startOffset = 0;\n if (paragraph.childWidgets.length > 0) {\n var childWidgets = paragraph.childWidgets[0];\n return this.getStartLineOffset(childWidgets);\n }\n return startOffset;\n };\n /**\n * @private\n */\n Selection.prototype.getStartLineOffset = function (line) {\n var startOffset = 0;\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return startOffset;\n }\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n startOffset += inline.length;\n }\n return startOffset;\n };\n /**\n * Get previous paragraph from selection\n * @private\n */\n Selection.prototype.getPreviousSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget)) {\n if (!this.isForward) {\n var block = cell.previousRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getFirstParagraphInLastRow(block);\n }\n }\n else {\n var widgets = cell.previousRenderedWidget.childWidgets;\n var block = widgets[widgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n // tslint:disable-next-line:max-line-length\n return this.getPreviousParagraphSelection(block.childWidgets[block.childWidgets.length - 1]);\n }\n }\n }\n return this.getPreviousSelectionRow(cell.ownerRow);\n };\n /**\n * Get previous paragraph selection in selection\n * @private\n */\n Selection.prototype.getPreviousSelectionRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n if (!this.isForward) {\n var cell = row.previousRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n else {\n return this.getPreviousParagraphSelection(row.previousRenderedWidget);\n }\n }\n return this.getPreviousSelectionBlock(row.ownerTable);\n };\n /**\n * @private\n */\n Selection.prototype.getNextSelectionBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n if (this.isEmpty || this.isForward) {\n return this.getLastParagraphInFirstRow(block.nextRenderedWidget);\n }\n else {\n return this.getNextParagraphSelection(block.nextRenderedWidget.childWidgets[0]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getNextSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get next paragraph from selected cell\n * @private\n */\n Selection.prototype.getNextSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.nextRenderedWidget)) {\n if (this.isEmpty || this.isForward) {\n // tslint:disable-next-line:max-line-length\n var block = cell.nextRenderedWidget.childWidgets[cell.nextRenderedWidget.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n else {\n //Return first paragraph in cell. \n var block = cell.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return this.getNextSelectionRow(cell.ownerRow);\n };\n /**\n * Get next paragraph in selection\n * @private\n */\n Selection.prototype.getNextSelectionRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var isForwardSelection = this.isEmpty || this.isForward;\n if (isForwardSelection) {\n // tslint:disable-next-line:max-line-length\n var cell = row.nextRenderedWidget.childWidgets[row.nextRenderedWidget.childWidgets.length - 1];\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n else {\n return this.getNextParagraphSelection(row.nextRenderedWidget);\n }\n }\n return this.getNextSelectionBlock(row.ownerTable);\n };\n /**\n * Get next block with selection\n * @private\n */\n Selection.prototype.getNextSelection = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (this.isEmpty || this.isForward) {\n return this.getLastParagraphInFirstRow(block);\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[0];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getFirstCellInRegion(row, startCell, this.upDownSelectionLength, false);\n }\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousSelectionBlock = function (block) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n if (!this.isForward) {\n return this.getFirstParagraphInLastRow(block.previousRenderedWidget);\n }\n else {\n // tslint:disable-next-line:max-line-length\n return this.getPreviousParagraphSelection(block.previousRenderedWidget.childWidgets[block.previousRenderedWidget.childWidgets.length - 1]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get previous paragraph in selection\n * @private\n */\n Selection.prototype.getPreviousSelection = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var prevBodyWidget = section.previousRenderedWidget;\n var block = prevBodyWidget.childWidgets[prevBodyWidget.childWidgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (!this.isForward) {\n return this.getFirstParagraphInLastRow(block);\n }\n else {\n var tableWidget = block;\n // tslint:disable-next-line:max-line-length\n return this.getPreviousParagraphSelection(tableWidget.childWidgets[tableWidget.childWidgets.length - 1]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[row.childWidgets.length - 1];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getLastCellInRegion(row, startCell, this.upDownSelectionLength, true);\n }\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n };\n /**\n * Get last cell in the selected region\n * @private\n */\n Selection.prototype.getLastCellInRegion = function (row, startCell, selLength, isMovePrev) {\n var start = this.getCellLeft(row, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var flag = true;\n if (start <= selLength && selLength < end) {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n else {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (left <= selLength && left + row.childWidgets[i].cellFormat.cellWidth > selLength) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrev) {\n return this.getLastCellInRegion(row.previousRenderedWidget, startCell, selLength, isMovePrev);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrev) {\n return this.getLastCellInRegion(row.nextRenderedWidget, startCell, selLength, isMovePrev);\n }\n }\n return row.childWidgets[row.childWidgets.length - 1];\n };\n /**\n * Get Container table\n * @private\n */\n Selection.prototype.getCellInTable = function (table, tableCell) {\n while (tableCell.ownerTable.isInsideTable) {\n if (table.equals(tableCell.ownerTable)) {\n return tableCell;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return tableCell;\n };\n /**\n * Get first paragraph in last row\n * @private\n */\n Selection.prototype.getFirstParagraphInLastRow = function (table) {\n if (table.childWidgets.length > 0) {\n var lastRow = table.childWidgets[table.childWidgets.length - 1];\n var lastCell = lastRow.childWidgets[0];\n var lastBlock = lastCell.childWidgets[0];\n return this.getFirstParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get previous valid offset\n * @private\n */\n Selection.prototype.getPreviousValidOffset = function (paragraph, offset) {\n if (offset === 0) {\n return 0;\n }\n var validOffset = 0;\n var count = 0;\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (inline.length === 0) {\n continue;\n }\n if (offset <= count + inline.length) {\n return offset - 1 === count ? validOffset : offset - 1;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n validOffset = count + inline.length;\n }\n count += inline.length;\n }\n }\n return offset - 1 === count ? validOffset : offset - 1;\n };\n /**\n * Get next valid offset\n * @private\n */\n Selection.prototype.getNextValidOffset = function (line, offset) {\n var count = 0;\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0 || inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset < count + inline.length) {\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return (offset > count ? offset : count) + 1;\n }\n }\n count += inline.length;\n }\n return offset;\n };\n /**\n * Get paragraph mark size info\n * @private\n */\n Selection.prototype.getParagraphMarkSize = function (paragraph, topMargin, bottomMargin) {\n var size = this.viewer.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var baselineOffset = size.BaselineOffset;\n var maxHeight = size.Height;\n var maxBaselineOffset = baselineOffset;\n if (paragraph instanceof ParagraphWidget) {\n // let paragraphWidget: ParagraphWidget[] = paragraph.renderedElement() as ParagraphWidget[];\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n }\n //Gets line spacing.\n var lineSpacing = this.viewer.layout.getLineSpacing(paragraph, maxHeight);\n var beforeSpacing = this.viewer.layout.getBeforeSpacing(paragraph);\n topMargin = maxBaselineOffset - baselineOffset;\n bottomMargin = maxHeight - maxBaselineOffset - (size.Height - baselineOffset);\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n else if (lineSpacing > topMargin + size.Height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += paragraph.paragraphFormat.afterSpacing;\n }\n return { 'width': size.Width, 'height': size.Height, 'topMargin': topMargin, 'bottomMargin': bottomMargin };\n };\n /**\n * @private\n */\n Selection.prototype.getPhysicalPositionInternal = function (line, offset, moveNextLine) {\n if (line.paragraph.isEmpty()) {\n var paragraphWidget = line.paragraph;\n var left = paragraphWidget.x;\n if (paragraphWidget.childWidgets.length > 0) {\n var lineWidget = paragraphWidget.childWidgets[0];\n left = this.getLeft(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(line.paragraph, topMargin, bottomMargin);\n if (offset > 0) {\n left += size.width;\n }\n return new Point(left, paragraphWidget.y + topMargin);\n }\n else {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline);\n var inline = inlineObj.element; //return indexInInline must\n indexInInline = inlineObj.index;\n // tslint:disable-next-line:max-line-length\n // if (inline.length === indexInInline && !isNullOrUndefined(inline.nextNode) && this.viewer.renderedElements.containsKey(inline) &&\n // this.viewer.renderedElements.get(inline).length > 0 && this.viewer.renderedElements.containsKey(inline.nextNode as WInline)\n // && this.viewer.renderedElements.get(inline.nextNode as WInline).length > 0 &&\n // tslint:disable-next-line:max-line-length\n // (this.viewer.renderedElements.get(inline)[this.viewer.renderedElements.get(inline).length - 1] as ElementBox).line !== (this.viewer.renderedElements.get(inline.nextNode as WInline)[0] as ElementBox).line) {\n // //Handled specifically to move the cursor at start of next line.\n // inline = inline.nextNode as WInline;\n // indexInInline = 0;\n // }\n return this.getPhysicalPositionInline(inline, indexInInline, moveNextLine);\n }\n };\n /**\n * Highlight selected content\n * @private\n */\n Selection.prototype.highlightSelectedContent = function (start, end) {\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || (!start.paragraph.associatedCell.equals(end.paragraph.associatedCell))\n || this.isCellSelected(start.paragraph.associatedCell, start, end))) {\n this.highlightCell(start.paragraph.associatedCell, this, start, end);\n }\n else {\n var inline = undefined;\n var index = 0;\n if (!this.owner.isReadOnlyMode && start.paragraph === end.paragraph) {\n if (start.offset + 1 === end.offset) {\n var inlineObj = end.currentWidget.getInline(end.offset, index);\n inline = inlineObj.element; // return index value\n index = inlineObj.index;\n if (inline instanceof ImageElementBox) {\n var startOffset = start.currentWidget.getOffset(inline, 0);\n if (startOffset !== start.offset) {\n inline = undefined;\n }\n }\n }\n else {\n var indexInInline = 0;\n var startInlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var startInline = startInlineObj.element; //return indexInInline\n indexInInline = startInlineObj.index;\n if (indexInInline === startInline.length) {\n startInline = this.getNextRenderedElementBox(startInline, indexInInline);\n }\n var endInlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n var endInline = endInlineObj.element; //return indexInInline\n indexInInline = endInlineObj.index;\n // tslint:disable-next-line:max-line-length\n if (startInline instanceof FieldElementBox && endInline instanceof FieldElementBox && !isNullOrUndefined(startInline.fieldSeparator)) {\n var fieldValue = startInline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n inline = fieldValue;\n }\n }\n }\n }\n if (!this.owner.isReadOnlyMode && inline instanceof ImageElementBox && this.owner.isDocumentLoaded) {\n var elementBoxObj = this.getElementBoxInternal(inline, index);\n var elementBox = elementBoxObj.element; //return index \n index = elementBoxObj.index;\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.positionImageResizer(elementBox);\n this.owner.imageResizerModule.showImageResizer();\n }\n if (this.viewer.isTouchInput) {\n this.viewer.touchStart.style.display = 'none';\n this.viewer.touchEnd.style.display = 'none';\n }\n }\n else {\n this.highlight(start.paragraph, start, end);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlight = function (paragraph, start, end) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = undefined;\n var endElement = undefined;\n var startLineWidget = undefined;\n var endLineWidget = undefined;\n //return start Element and selection start index\n var startLineObj = this.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n startElement = startLineObj.element;\n if (isNullOrUndefined(startElement)) {\n startLineWidget = paragraph.childWidgets[0];\n }\n else {\n startLineWidget = startElement.line;\n }\n selectionStartIndex = startLineObj.index;\n var endLineObj = this.getEndLineWidget(end, endElement, selectionEndIndex);\n endElement = endLineObj.element;\n if (endElement) {\n endLineWidget = endElement.line;\n }\n else {\n endLineWidget = end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n }\n selectionEndIndex = endLineObj.index;\n var top = 0;\n var left = 0;\n if (!isNullOrUndefined(startLineWidget)) {\n top = this.getTop(startLineWidget);\n left = this.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n }\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //Selection ends in current line.\n var right = this.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n this.createHighlightBorder(startLineWidget, right - left, left, top);\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n var x = startLineWidget.paragraph.x;\n this.createHighlightBorder(startLineWidget, this.getWidth(startLineWidget, true) - (left - x), left, top);\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or selection end. \n this.highlightParagraph(paragraph, lineIndex + 1, endLineWidget, endElement, selectionEndIndex);\n if (paragraph.childWidgets.indexOf(end.currentWidget) !== -1) {\n return;\n }\n }\n this.highlightNextBlock(paragraph, start, end);\n }\n };\n Selection.prototype.highlightNextBlock = function (paragraph, start, end) {\n var block = paragraph.nextRenderedWidget;\n if (!isNullOrUndefined(block)) {\n if (block instanceof ParagraphWidget) {\n this.highlight(block, start, end);\n }\n else {\n this.highlightTable(block, start, end);\n }\n }\n };\n /**\n * Get start line widget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getStartLineWidget = function (paragraph, start, startElement, selectionStartIndex) {\n var offset = paragraph === start.paragraph ? start.offset : this.getStartOffset(paragraph);\n var startInlineObj = undefined;\n if (paragraph === start.paragraph) {\n startInlineObj = start.currentWidget.getInline(offset, selectionStartIndex);\n }\n else {\n startInlineObj = paragraph.firstChild.getInline(offset, selectionStartIndex);\n }\n startElement = startInlineObj.element; //return selectionStartIndex\n selectionStartIndex = startInlineObj.index;\n if (startElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(startElement, selectionStartIndex);\n startElement = inlineInfo.element;\n selectionStartIndex = inlineInfo.index;\n }\n if (offset === this.getParagraphLength(start.paragraph) + 1) {\n selectionStartIndex++;\n }\n return {\n 'index': selectionStartIndex, 'element': startElement\n };\n };\n /**\n * Get end line widget\n * @private\n */\n Selection.prototype.getEndLineWidget = function (end, endElement, selectionEndIndex) {\n var endInlineObj = end.currentWidget.getInline(end.offset, selectionEndIndex);\n endElement = endInlineObj.element; //return selection end index\n selectionEndIndex = endInlineObj.index;\n if (endElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(endElement, selectionEndIndex);\n endElement = inlineInfo.element;\n selectionEndIndex = inlineInfo.index;\n }\n var lineIndex = end.paragraph.childWidgets.indexOf(end.currentWidget);\n if (lineIndex === end.paragraph.childWidgets.length - 1 && end.offset === this.getLineLength(end.currentWidget) + 1) {\n selectionEndIndex = endElement ? endElement.length + 1 : 1;\n }\n return { 'index': selectionEndIndex, 'element': endElement };\n };\n /**\n * Get line widget\n * @private\n */\n Selection.prototype.getLineWidgetInternal = function (line, offset, moveToNextLine) {\n var lineWidget = undefined;\n if (line.children.length === 0 && line instanceof LineWidget) {\n lineWidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n lineWidget = inline instanceof ElementBox ? inline.line\n : this.getLineWidgetInternalInline(inline, indexInInline, moveToNextLine);\n }\n return lineWidget;\n };\n /**\n * Get last line widget\n * @private\n */\n Selection.prototype.getLineWidgetParagraph = function (offset, line) {\n var linewidget = undefined;\n if (line.children.length === 0) {\n linewidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n linewidget = this.getLineWidget(inline, indexInInline);\n }\n return linewidget;\n };\n /**\n * Highlight selected cell\n * @private\n */\n /* tslint:disable */\n // tslint:disable-next-line:max-line-length \n Selection.prototype.highlightCells = function (table, startCell, endCell) {\n var start = this.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > this.upDownSelectionLength) {\n start = this.upDownSelectionLength;\n }\n if (end < this.upDownSelectionLength) {\n end = this.upDownSelectionLength;\n }\n var tableWidgetCollection = table.getSplitWidgets();\n var startTableIndex = tableWidgetCollection.indexOf(startCell.ownerRow.ownerTable);\n var endTableIndex = tableWidgetCollection.indexOf(endCell.ownerRow.ownerTable);\n if (startTableIndex === endTableIndex) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n this.highlightRow(table.childWidgets[i], start, end);\n }\n }\n else {\n var startRowIndex = 0;\n var endRowIndex = 0;\n for (var i = startTableIndex; i <= endTableIndex; i++) {\n table = tableWidgetCollection[i];\n if (i === startTableIndex) {\n startRowIndex = table.childWidgets.indexOf(startCell.ownerRow);\n }\n else {\n startRowIndex = 0;\n }\n if (i === endTableIndex) {\n endRowIndex = table.childWidgets.indexOf(endCell.ownerRow);\n }\n else {\n endRowIndex = table.childWidgets.length - 1;\n }\n for (var j = startRowIndex; j <= endRowIndex; j++) {\n this.highlightRow(table.childWidgets[j], start, end);\n }\n }\n }\n };\n /* tslint:enable */\n /**\n * highlight selected table\n * @private\n */\n Selection.prototype.highlightTable = function (table, start, end) {\n this.highlightInternal(table.childWidgets[0], start, end);\n if (!end.paragraph.isInsideTable //Selection end is outside the table cell.\n || !table.contains(end.paragraph.associatedCell)) {\n this.highlightNextBlock(table, start, end);\n }\n };\n /**\n * Get cell left\n * @private\n */\n Selection.prototype.getCellLeft = function (row, cell) {\n var left = 0;\n left += cell.x - cell.margin.left;\n return left;\n };\n /**\n * Get next paragraph for row\n * @private\n */\n Selection.prototype.getNextParagraphRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var cell = row.nextRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return this.getNextParagraphBlock(row.ownerTable);\n };\n /**\n * Get previous paragraph from row\n * @private\n */\n Selection.prototype.getPreviousParagraphRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n // tslint:disable-next-line:max-line-length\n var cell = row.previousRenderedWidget.lastChild;\n var block = cell.lastChild ? cell.lastChild : (cell.previousSplitWidget).lastChild;\n return this.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphBlock(row.ownerTable);\n };\n /**\n * Return true if row contain cell\n * @private\n */\n Selection.prototype.containsRow = function (row, tableCell) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return row.childWidgets.indexOf(tableCell) !== -1;\n };\n /**\n * Highlight selected row\n * @private\n */\n Selection.prototype.highlightRow = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.highlightInternal = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n else if (row.nextRenderedWidget instanceof TableRowWidget) {\n this.highlightInternal(row.nextRenderedWidget, start, end);\n }\n };\n /**\n * Get last paragraph in cell\n * @private\n */\n Selection.prototype.getLastParagraph = function (cell) {\n while (cell.nextSplitWidget) {\n if (cell.nextSplitWidget.childWidgets.length > 0) {\n cell = cell.nextSplitWidget;\n }\n else {\n break;\n }\n }\n var lastBlock;\n if (cell.childWidgets.length > 0) {\n lastBlock = cell.lastChild;\n }\n else {\n lastBlock = cell.previousSplitWidget.lastChild;\n }\n return this.getLastParagraphBlock(lastBlock);\n };\n /**\n * Return true is source cell contain cell\n * @private\n */\n Selection.prototype.containsCell = function (sourceCell, cell) {\n if (sourceCell.equals(cell)) {\n return true;\n }\n while (cell.ownerTable.isInsideTable) {\n if (sourceCell.equals(cell.ownerTable.associatedCell)) {\n return true;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return false;\n };\n /**\n * Return true if cell is selected\n * @private\n */\n Selection.prototype.isCellSelected = function (cell, startPosition, endPosition) {\n var lastParagraph = this.getLastParagraph(cell);\n // tslint:disable-next-line:max-line-length\n var isAtCellEnd = lastParagraph === endPosition.paragraph && endPosition.offset === this.getParagraphLength(lastParagraph) + 1;\n return isAtCellEnd || (!this.containsCell(cell, startPosition.paragraph.associatedCell) ||\n !this.containsCell(cell, endPosition.paragraph.associatedCell));\n };\n /**\n * Return Container cell\n * @private\n */\n Selection.prototype.getContainerCellOf = function (cell, tableCell) {\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.contains(tableCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Get Selected cell\n * @private\n */\n Selection.prototype.getSelectedCell = function (cell, containerCell) {\n if (cell.ownerTable.equals(containerCell.ownerTable)) {\n return cell;\n }\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.associatedCell.equals(containerCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * @private\n */\n Selection.prototype.getSelectedCells = function () {\n var cells = [];\n for (var i = 0; i < this.selectedWidgets.keys.length; i++) {\n var widget = this.selectedWidgets.keys[i];\n if (widget instanceof TableCellWidget) {\n cells.push(widget);\n }\n }\n return cells;\n };\n /**\n * Get Next paragraph from cell\n * @private\n */\n Selection.prototype.getNextParagraphCell = function (cell) {\n if (cell.nextRenderedWidget && cell.nextRenderedWidget instanceof TableCellWidget) {\n //Return first paragraph in cell. \n cell = cell.nextRenderedWidget;\n var block = cell.firstChild;\n if (block) {\n return this.getFirstParagraphBlock(block);\n }\n else {\n return this.getNextParagraphCell(cell);\n }\n }\n return this.getNextParagraphRow(cell.containerWidget);\n };\n /**\n * Get previous paragraph from cell\n * @private\n */\n Selection.prototype.getPreviousParagraphCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget) && cell.previousRenderedWidget instanceof TableCellWidget) {\n cell = cell.previousRenderedWidget;\n var block = cell.lastChild;\n return this.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphRow(cell.ownerRow);\n };\n /**\n * Get cell's container cell\n * @private\n */\n Selection.prototype.getContainerCell = function (cell) {\n while (!isNullOrUndefined(cell.ownerTable) && cell.ownerTable.isInsideTable) {\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Highlight selected cell\n * @private\n */\n /* tslint:disable */\n Selection.prototype.highlightCell = function (cell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n /* tslint:enable */\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.highlightCellWidget(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.highlight(start.paragraph, start, end);\n }\n else {\n this.highlightContainer(startCell, start, end);\n }\n }\n }\n else {\n //Selection end is not in container cell.\n this.highlightCellWidget(containerCell);\n if (containerCell.ownerRow.equals(endCell.ownerRow)) {\n //Highlight other selected cells in current row.\n startCell = containerCell;\n while (!isNullOrUndefined(startCell.nextRenderedWidget)) {\n startCell = startCell.nextRenderedWidget;\n this.highlightCellWidget(startCell);\n if (startCell === endCell) {\n break;\n }\n }\n }\n else {\n this.highlightCells(containerCell.ownerTable, containerCell, endCell);\n }\n }\n }\n else {\n this.highlightContainer(containerCell, start, end);\n }\n }\n else {\n var cell1 = this.getContainerCell(cell);\n this.highlightContainer(cell1, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlightContainer = function (cell, start, end) {\n this.highlightInternal(cell.containerWidget, start, end);\n this.highlightNextBlock(cell.ownerTable, start, end);\n };\n /**\n * Get previous valid element\n * @private\n */\n Selection.prototype.getPreviousValidElement = function (inline) {\n var previousValidInline = undefined;\n while (inline instanceof FieldElementBox) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n previousValidInline = inline;\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n previousValidInline = inline;\n if (isNullOrUndefined(inline.fieldSeparator)) {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n else {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n inline = inline.previousNode;\n }\n return isNullOrUndefined(previousValidInline) ? inline : previousValidInline;\n };\n /**\n * Get next valid element\n * @private\n */\n Selection.prototype.getNextValidElement = function (inline) {\n var nextValidInline = undefined;\n while (inline instanceof FieldElementBox) {\n if (inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n return isNullOrUndefined(nextValidInline) ? inline : nextValidInline;\n }\n else if (inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n nextValidInline = inline;\n }\n inline = inline.nextNode;\n }\n return (isNullOrUndefined(nextValidInline) ? inline : nextValidInline);\n };\n /**\n * Return next valid inline with index\n * @private\n */\n Selection.prototype.validateTextPosition = function (inline, index) {\n if (inline.length === index && inline.nextNode instanceof FieldElementBox) {\n //If inline is last item within field, then set field end as text position.\n var nextInline = this.getNextValidElement(inline.nextNode);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 1) {\n inline = nextInline;\n index = 1;\n }\n }\n else if (index === 0 && inline.previousNode instanceof FieldElementBox) {\n var prevInline = this.getPreviousValidElement(inline.previousNode);\n inline = prevInline;\n index = inline instanceof FieldElementBox ? 0 : inline.length;\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n index++;\n }\n }\n return { 'element': inline, 'index': index };\n };\n /**\n * Get inline physical location\n * @private\n */\n Selection.prototype.getPhysicalPositionInline = function (inline, index, moveNextLine) {\n var element = undefined;\n element = this.getElementBox(inline, index, moveNextLine).element;\n var lineWidget = undefined;\n if (isNullOrUndefined(element) || isNullOrUndefined(element.line)) {\n if (inline instanceof FieldElementBox || inline instanceof BookmarkElementBox) {\n return this.getFieldCharacterPosition(inline);\n }\n return new Point(0, 0);\n }\n var margin = element.margin;\n var top = 0;\n var left = 0;\n if (element instanceof TextElementBox && element.text === '\\v' && isNullOrUndefined(inline.nextNode)) {\n lineWidget = this.getNextLineWidget(element.line.paragraph, element);\n index = 0;\n }\n else {\n lineWidget = element.line;\n }\n top = this.getTop(lineWidget);\n if (element instanceof ImageElementBox) {\n var format = element.line.paragraph.characterFormat;\n var previousInline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n format = previousInline.characterFormat;\n }\n else {\n var nextInline = this.getNextTextElement(inline);\n if (!isNullOrUndefined(nextInline)) {\n format = nextInline.characterFormat;\n }\n }\n var measureObj = this.viewer.textHelper.getHeight(format);\n if (element.margin.top + element.height - measureObj.BaselineOffset > 0) {\n top += element.margin.top + element.height - measureObj.BaselineOffset;\n }\n }\n else if (!(element instanceof FieldElementBox)) {\n top += margin.top > 0 ? margin.top : 0;\n }\n left = (isNullOrUndefined(element) || isNullOrUndefined(lineWidget)) ? 0 : this.getLeftInternal(lineWidget, element, index);\n return new Point(left, top);\n };\n /**\n * Get field character position\n * @private\n */\n Selection.prototype.getFieldCharacterPosition = function (firstInline) {\n var nextValidInline = this.getNextValidElementForField(firstInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = firstInline.line.paragraph;\n return this.getEndPosition(nextParagraph);\n }\n else {\n return this.getPhysicalPositionInline(nextValidInline, 0, true);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getNextValidElementForField = function (firstInline) {\n if (firstInline instanceof FieldElementBox && firstInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(firstInline)) {\n var fieldBegin = firstInline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n firstInline = fieldBegin.fieldEnd;\n }\n else {\n firstInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(firstInline.nextNode)) {\n nextValidInline = this.getNextValidElement(firstInline.nextNode);\n }\n return nextValidInline;\n };\n /**\n * Get paragraph end position\n * @private\n */\n Selection.prototype.getEndPosition = function (widget) {\n var left = widget.x;\n var top = widget.y;\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n left += this.getWidth(lineWidget, false);\n }\n if (!isNullOrUndefined(lineWidget)) {\n top = this.getTop(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget, topMargin, bottomMargin);\n return new Point(left, top + size.topMargin);\n };\n /**\n * Get element box\n * @private\n */\n Selection.prototype.getElementBox = function (currentInline, index, moveToNextLine) {\n var elementBox = undefined;\n if (!(currentInline instanceof FieldElementBox || currentInline instanceof BookmarkElementBox)) {\n elementBox = currentInline;\n }\n return { 'element': elementBox, 'index': index };\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousTextElement = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextElement(inline.previousNode);\n }\n return undefined;\n };\n /**\n * Get next text inline\n * @private\n */\n Selection.prototype.getNextTextElement = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextElement(inline.nextNode);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextRenderedElementBox = function (inline, indexInInline) {\n if (inline instanceof FieldElementBox) {\n var fieldBegin = inline;\n if (fieldBegin.fieldType === 0) {\n inline = this.getRenderedField(fieldBegin);\n if (fieldBegin === inline) {\n return fieldBegin;\n }\n }\n indexInInline = 1;\n }\n while (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement((inline.nextNode));\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n var fieldBegin = nextValidInline;\n inline = this.getRenderedField(fieldBegin);\n if (!isNullOrUndefined(inline) && fieldBegin === inline) {\n return fieldBegin;\n }\n indexInInline = 1;\n }\n else {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * @private\n */\n Selection.prototype.getElementBoxInternal = function (inline, index) {\n var element = undefined;\n element = inline;\n return {\n 'element': element, 'index': index\n };\n };\n /**\n * Get Line widget\n * @private\n */\n Selection.prototype.getLineWidget = function (inline, index) {\n return this.getLineWidgetInternalInline(inline, index, true);\n };\n /**\n * @private\n */\n Selection.prototype.getLineWidgetInternalInline = function (inline, index, moveToNextLine) {\n var elementObj = this.getElementBox(inline, index, moveToNextLine);\n var element = elementObj.element; //return index\n index = elementObj.index;\n if (!isNullOrUndefined(element)) {\n if (moveToNextLine && element instanceof TextElementBox && element.text === '\\v' && index === 1) {\n return this.getNextLineWidget(element.line.paragraph, element);\n }\n else {\n return element.line;\n }\n }\n var startInline = inline;\n //ToDo: Check previous inline here.\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var lineWidget = undefined;\n var widget = startInline.line.paragraph;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n }\n return lineWidget;\n }\n else {\n return this.getLineWidget(nextValidInline, 0);\n }\n };\n /**\n * Get next line widget\n * @private\n */\n Selection.prototype.getNextLineWidget = function (paragraph, element) {\n var lineWidget = undefined;\n var widget = paragraph;\n if (widget.childWidgets.length > 0) {\n var widgetIndex = widget.childWidgets.indexOf(element.line);\n if (widgetIndex === widget.childWidgets.length - 1) {\n widget = paragraph;\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widgetIndex = -1;\n }\n else if (widgetIndex > widget.childWidgets.length - 1) {\n widget = this.getNextParagraphBlock(paragraph);\n widgetIndex = -1;\n }\n else if (widgetIndex < 0) {\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widget = paragraph;\n widgetIndex = widget.childWidgets.indexOf(element.line);\n }\n lineWidget = widget.childWidgets[widgetIndex + 1];\n }\n return lineWidget;\n };\n /**\n * Get Caret height\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getCaretHeight = function (inline, index, format, isEmptySelection, topMargin, isItalic) {\n var elementBoxInfo = this.getElementBox(inline, index, false);\n var element = elementBoxInfo.element;\n var currentInline = inline;\n if (isNullOrUndefined(element)) {\n if (currentInline instanceof FieldElementBox) {\n return this.getFieldCharacterHeight(currentInline, format, isEmptySelection, topMargin, isItalic);\n }\n return { 'height': this.viewer.textHelper.getHeight(format).Height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var margin = element.margin;\n var heightElement = element.height;\n var maxLineHeight = 0;\n if (element instanceof ImageElementBox) {\n var previousInline = this.getPreviousTextElement(inline);\n var nextInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n var top_2 = 0;\n var bottom = 0;\n var paragarph = inline.line.paragraph;\n var sizeInfo = this.getParagraphMarkSize(paragarph, top_2, bottom);\n top_2 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n maxLineHeight = sizeInfo.height;\n isItalic = paragarph.characterFormat.italic;\n if (!isEmptySelection) {\n maxLineHeight += paragarph.paragraphFormat.afterSpacing;\n }\n }\n else if (isNullOrUndefined(previousInline)) {\n isItalic = nextInline.characterFormat.italic;\n return this.getCaretHeight(nextInline, 0, nextInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n else {\n if (!isNullOrUndefined(nextInline) && element instanceof ImageElementBox) {\n //Calculates the caret size using image character format.\n var textSizeInfo = this.viewer.textHelper.getHeight(element.characterFormat);\n var charHeight = textSizeInfo.Height;\n var baselineOffset = textSizeInfo.BaselineOffset;\n // tslint:disable-next-line:max-line-length\n maxLineHeight = (element.margin.top < 0 && baselineOffset > element.margin.top + element.height) ? element.margin.top + element.height + charHeight - baselineOffset : charHeight;\n if (!isEmptySelection) {\n maxLineHeight += element.margin.bottom;\n }\n }\n else {\n isItalic = previousInline.characterFormat.italic;\n // tslint:disable-next-line:max-line-length\n return this.getCaretHeight(previousInline, previousInline.length, previousInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n }\n }\n else {\n var baselineAlignment = format.baselineAlignment;\n var elementHeight = heightElement;\n if (baselineAlignment !== 'Normal' && isEmptySelection) {\n //Set the caret height as sub/super script text height and updates the top margin for sub script text.\n elementHeight = elementHeight / 1.5;\n if (baselineAlignment === 'Subscript') {\n topMargin = heightElement - elementHeight;\n }\n }\n maxLineHeight = (margin.top < 0 ? margin.top : 0) + elementHeight;\n if (!isEmptySelection) {\n maxLineHeight += margin.bottom;\n }\n }\n if (!isEmptySelection) {\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var height = this.viewer.textHelper.getHeight(format).Height;\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n };\n /**\n * Get field characters height\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getFieldCharacterHeight = function (startInline, format, isEmptySelection, topMargin, isItalic) {\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = startInline.line.paragraph;\n var height = this.viewer.textHelper.getParagraphMarkSize(format).Height;\n var top_3 = 0;\n var bottom = 0;\n var sizeInfo = this.getParagraphMarkSize(nextParagraph, top_3, bottom);\n var maxLineHeight = sizeInfo.height;\n top_3 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n if (!isEmptySelection) {\n maxLineHeight += bottom;\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n else {\n return this.getCaretHeight(nextValidInline, 0, format, isEmptySelection, topMargin, isItalic);\n }\n };\n /**\n * Get rendered inline\n * @private\n */\n //FieldCharacter\n Selection.prototype.getRenderedInline = function (inline, inlineIndex) {\n var prevInline = this.getPreviousValidElement(inline);\n while (prevInline instanceof FieldElementBox) {\n prevInline = this.getPreviousTextElement(prevInline);\n if (prevInline instanceof FieldElementBox) {\n prevInline = prevInline.previousNode;\n }\n }\n if (!isNullOrUndefined(prevInline)) {\n inlineIndex = prevInline.length;\n return { 'element': prevInline, 'index': inlineIndex };\n }\n inlineIndex = 0;\n var nextInline = this.getNextRenderedElementBox(inline, 0);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n nextInline = nextInline.fieldSeparator;\n nextInline = nextInline.nextNode;\n while (nextInline instanceof FieldElementBox) {\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(nextInline)) {\n if (isNullOrUndefined(nextInline.fieldSeparator)) {\n nextInline = nextInline.fieldEnd;\n }\n else {\n nextInline = nextInline.fieldSeparator;\n }\n }\n nextInline = nextInline.nextNode;\n }\n }\n return { 'element': nextInline, 'index': inlineIndex };\n };\n //Field Begin\n /**\n * Get rendered field\n * @private\n */\n Selection.prototype.getRenderedField = function (fieldBegin) {\n var inline = fieldBegin;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n return inline;\n }\n }\n return inline;\n };\n /**\n * Return true is inline is tha last inline\n * @private\n */\n Selection.prototype.isLastRenderedInline = function (inline, index) {\n while (index === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n index = 0;\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n index = 1;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n index = 1;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n break;\n }\n }\n }\n }\n return index === inline.length && isNullOrUndefined(inline.nextNode);\n };\n /**\n * Get page\n * @private\n */\n Selection.prototype.getPage = function (widget) {\n var page = undefined;\n if (widget.containerWidget instanceof BlockContainer) {\n var bodyWidget = widget.containerWidget;\n page = widget.containerWidget.page;\n }\n else if (!isNullOrUndefined(widget.containerWidget)) {\n page = this.getPage(widget.containerWidget);\n }\n return page;\n };\n /**\n * Clear Selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlightInSelectedWidgets = function () {\n var isNonEmptySelection = false;\n var widgets = this.selectedWidgets.keys;\n for (var i = 0; i < widgets.length; i++) {\n this.removeSelectionHighlight(widgets[i]);\n isNonEmptySelection = true;\n }\n this.selectedWidgets.clear();\n return isNonEmptySelection;\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearChildSelectionHighlight = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i] instanceof LineWidget) {\n this.clearSelectionHighlightLineWidget(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof TableCellWidget) {\n this.clearSelectionHighlight(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof Widget) {\n this.clearChildSelectionHighlight(widget.childWidgets[i]);\n }\n }\n };\n /**\n * Get line widget from paragraph widget\n * @private\n */\n //Body Widget\n Selection.prototype.getLineWidgetBodyWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof Widget && childWidget.y <= point.y\n && (childWidget.y + childWidget.height) >= point.y) {\n if (childWidget instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(childWidget, point);\n }\n else {\n return this.getLineWidgetTableWidget(childWidget, point);\n }\n }\n }\n var line = undefined;\n if (widget.childWidgets.length > 0) {\n var firstChild = widget.childWidgets[0];\n if (firstChild instanceof Widget && firstChild.y <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n // tslint:disable-next-line:max-line-length\n line = this.getLineWidgetParaWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n // tslint:disable-next-line:max-line-length\n line = this.getLineWidgetTableWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n }\n else {\n var childWidget = undefined;\n if (firstChild instanceof Widget) {\n childWidget = firstChild;\n }\n if (!isNullOrUndefined(childWidget)) {\n if (childWidget instanceof ParagraphWidget) {\n line = this.getLineWidgetParaWidget(firstChild, point);\n }\n else {\n line = this.getLineWidgetTableWidget(firstChild, point);\n }\n }\n }\n }\n return line;\n };\n //ParagraphWidget\n /**\n * Get line widget from paragraph widget\n * @private\n */\n Selection.prototype.getLineWidgetParaWidget = function (widget, point) {\n var childWidgets = widget.childWidgets;\n var top = widget.y;\n for (var i = 0; i < childWidgets.length; i++) {\n if (top <= point.y\n && (top + childWidgets[i].height) >= point.y) {\n return childWidgets[i];\n }\n top += childWidgets[i].height;\n }\n var lineWidget = undefined;\n if (childWidgets.length > 0) {\n if (widget.y <= point.y) {\n lineWidget = childWidgets[childWidgets.length - 1];\n }\n else {\n lineWidget = childWidgets[0];\n }\n }\n return lineWidget;\n };\n /**\n * highlight paragraph widget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.highlightParagraph = function (widget, startIndex, endLine, endElement, endIndex) {\n var top = 0;\n for (var i = startIndex; i < widget.childWidgets.length; i++) {\n var line = widget.childWidgets[i];\n if (i === startIndex) {\n top = this.getTop(line);\n }\n var left = this.getLeft(line);\n if (line === endLine) {\n //Selection ends in current line.\n var right = this.getLeftInternal(endLine, endElement, endIndex);\n this.createHighlightBorder(line, right - left, left, top);\n return;\n }\n this.createHighlightBorder(line, this.getWidth(line, true) - (left - widget.x), left, top);\n top += line.height;\n }\n };\n //Table Widget\n /**\n * Get line widget form table widget\n * @private\n */\n Selection.prototype.getLineWidgetTableWidget = function (widget, point) {\n var lineWidget = undefined;\n for (var i = 0; i < widget.childWidgets.length; i++) {\n //Removed the height condition check to handle the vertically merged cells.\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof TableRowWidget && childWidget.y <= point.y) {\n lineWidget = this.getLineWidgetRowWidget(childWidget, point);\n var cellWidget = undefined;\n if (!isNullOrUndefined(lineWidget) && lineWidget.paragraph.containerWidget instanceof TableCellWidget) {\n cellWidget = lineWidget.paragraph.containerWidget;\n }\n var cellSpacing = 0;\n var rowSpan = 0;\n if (!isNullOrUndefined(cellWidget)) {\n var tableWidget = cellWidget.ownerRow.containerWidget;\n cellSpacing = HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n rowSpan = cellWidget.cellFormat.rowSpan;\n }\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n var topCellSpacing = 0;\n var bottomCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = cellWidget.cellIndex === 0 ? cellSpacing : cellSpacing / 2;\n // tslint:disable-next-line:max-line-length\n rightCellSpacing = cellWidget.cellIndex === cellWidget.ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n var rowWidget = undefined;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n rowWidget = cellWidget.containerWidget;\n }\n var tableWidget = undefined;\n if (cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n tableWidget = cellWidget.containerWidget.containerWidget;\n }\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(tableWidget)) {\n topCellSpacing = cellWidget.ownerRow.rowIndex === 0 ? cellSpacing : cellSpacing / 2;\n if (cellWidget.ownerRow.rowIndex + rowSpan === cellWidget.ownerTable.childWidgets.length) {\n bottomCellSpacing = cellSpacing;\n }\n else {\n bottomCellSpacing = cellSpacing / 2;\n }\n }\n }\n if ((!isNullOrUndefined(lineWidget) && lineWidget.paragraph.x <= point.x\n && lineWidget.paragraph.x + lineWidget.width >= point.x\n && lineWidget.paragraph.y <= point.y && this.getTop(lineWidget) + lineWidget.height >= point.y)\n || (!isNullOrUndefined(cellWidget) && cellWidget.x - cellWidget.margin.left - leftCellSpacing <= point.x\n && cellWidget.x + cellWidget.width + cellWidget.margin.right + rightCellSpacing >= point.x\n && cellWidget.y - cellWidget.margin.top - topCellSpacing <= point.y\n && cellWidget.y + cellWidget.height + cellWidget.margin.bottom + bottomCellSpacing >= point.y)) {\n break;\n }\n }\n }\n return lineWidget;\n };\n //TableRowWidget\n /**\n * Get line widget fom row\n * @private\n */\n Selection.prototype.getLineWidgetRowWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var cellSpacing = 0;\n cellSpacing = HelperMethods.convertPointToPixel(widget.ownerTable.tableFormat.cellSpacing);\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = widget.childWidgets[i].columnIndex === 0 ? cellSpacing : cellSpacing / 2;\n // tslint:disable-next-line:max-line-length\n rightCellSpacing = widget.childWidgets[i].cellIndex === widget.childWidgets[i].ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n }\n if (widget.childWidgets[i].x -\n // tslint:disable-next-line:max-line-length\n widget.childWidgets[i].margin.left - leftCellSpacing <= point.x && (widget.childWidgets[i].x +\n // tslint:disable-next-line:max-line-length\n widget.childWidgets[i].width) + widget.childWidgets[i].margin.right + rightCellSpacing >= point.x) {\n return this.getLineWidgetCellWidget(widget.childWidgets[i], point);\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].x <= point.x) {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[0], point);\n }\n }\n return lineWidget;\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlock = function (cell) {\n if (cell.childWidgets.length > 0) {\n return cell.childWidgets[0];\n }\n return undefined;\n };\n //Table Cell Widget\n /**\n * Highlight selected cell widget\n * @private\n */\n Selection.prototype.highlightCellWidget = function (widget) {\n var widgets = [];\n if (widget.previousSplitWidget || widget.nextSplitWidget) {\n widgets = widget.getSplitWidgets();\n }\n else {\n widgets.push(widget);\n }\n for (var i = 0; i < widgets.length; i++) {\n widget = widgets[i];\n //Clears Selection highlight of the child widgets.\n this.clearChildSelectionHighlight(widget);\n //Highlights the entire cell.\n this.createHighlightBorderInsideTable(widget);\n }\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlight = function (widget) {\n if (this.selectedWidgets.containsKey(widget)) {\n this.removeSelectionHighlight(widget);\n this.selectedWidgets.remove(widget);\n }\n };\n /**\n * Get line widget from cell widget\n * @private\n */\n Selection.prototype.getLineWidgetCellWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i].y <= point.y\n && (widget.childWidgets[i].y + widget.childWidgets[i].height) >= point.y) {\n if (widget.childWidgets[i] instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(widget.childWidgets[i], point);\n }\n else {\n return this.getLineWidgetTableWidget(widget.childWidgets[i], point);\n }\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].y <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n // tslint:disable-next-line:max-line-length\n lineWidget = this.getLineWidgetParaWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetTableWidget(widget.childWidgets[0], point);\n }\n }\n }\n return lineWidget;\n };\n //LineWidget\n /**\n * update text position\n * @private\n */\n Selection.prototype.updateTextPosition = function (widget, point) {\n var caretPosition = point;\n var element = undefined;\n var index = 0;\n var isImageSelected = false;\n var isImageSelectedObj = this.updateTextPositionIn(widget, element, index, point, false);\n if (!isNullOrUndefined(isImageSelectedObj)) {\n element = isImageSelectedObj.element;\n index = isImageSelectedObj.index;\n caretPosition = isImageSelectedObj.caretPosition;\n isImageSelected = isImageSelectedObj.isImageSelected;\n this.isImageSelected = isImageSelected;\n }\n if (isImageSelected) {\n this.selectInternal(widget, element, index, caretPosition);\n if (index === 0) {\n this.extendForward();\n }\n else {\n this.extendBackward();\n }\n }\n else {\n this.selectInternal(widget, element, index, caretPosition);\n }\n };\n /**\n * @private\n */\n /* tslint:disable */\n Selection.prototype.updateTextPositionIn = function (widget, inline, index, caretPosition, includeParagraphMark) {\n var isImageSelected = false;\n var top = this.getTop(widget);\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n var element = elementValues.element;\n left = elementValues.left;\n if (isNullOrUndefined(element)) {\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget.paragraph, topMargin, bottomMargin);\n topMargin = size.topMargin;\n bottomMargin = size.bottomMargin;\n var selectParaMark = this.viewer.mouseDownOffset.y >= top && this.viewer.mouseDownOffset.y < top + widget.height ? (this.viewer.mouseDownOffset.x < left + size.width) : true;\n if (selectParaMark && includeParagraphMark && caretPosition.x > left + size.width / 2) {\n left += size.width;\n if (widget.children.length > 0) {\n inline = widget.children[widget.children.length - 1];\n index = inline.length;\n }\n index++;\n }\n caretPosition = new Point(left, topMargin > 0 ? top + topMargin : top);\n }\n else {\n if (!isNullOrUndefined(element)) {\n if (caretPosition.x > left + element.margin.left) {\n for (var i = widget.children.indexOf(element); i < widget.children.length; i++) {\n element = widget.children[i];\n if (caretPosition.x < left + element.margin.left + element.width || i === widget.children.length - 1) {\n break;\n }\n left += element.margin.left + element.width;\n }\n if (caretPosition.x > left + element.margin.left + element.width) {\n //Line End\n index = element instanceof TextElementBox ? element.length : 1;\n left += element.margin.left + element.width;\n }\n else if (element instanceof TextElementBox) {\n var x = caretPosition.x - left - element.margin.left;\n left += element.margin.left;\n var prevWidth = 0;\n var charIndex = 0;\n for (var i = 1; i <= element.length; i++) {\n var width = 0;\n if (i === element.length) {\n width = element.width;\n }\n else {\n width = this.viewer.textHelper.getWidth(element.text.substr(0, i), element.characterFormat);\n }\n if (x < width || i === element.length) {\n //Updates exact left position of the caret.\n var charWidth = width - prevWidth;\n if (x - prevWidth > charWidth / 2) {\n left += width;\n charIndex = i;\n }\n else {\n left += prevWidth;\n charIndex = i - 1;\n if (i === 1 && element !== widget.children[0]) {\n var curIndex = widget.children.indexOf(element);\n if (!(widget.children[curIndex - 1] instanceof ListTextElementBox)) {\n element = widget.children[curIndex - 1];\n charIndex = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n break;\n }\n prevWidth = width;\n }\n index = charIndex;\n }\n else {\n isImageSelected = element instanceof ImageElementBox;\n if (caretPosition.x - left - element.margin.left > element.width / 2) {\n index = 1;\n left += element.margin.left + element.width;\n }\n else if (element !== widget.children[0] && !isImageSelected) {\n var curIndex = widget.children.indexOf(element);\n if (!(widget.children[curIndex - 1] instanceof ListTextElementBox)) {\n element = widget.children[curIndex - 1];\n index = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n if (element instanceof TextElementBox && element.text === '\\v') {\n index = 0;\n }\n }\n else {\n left += element.margin.left;\n }\n if (element instanceof TextElementBox) {\n top += element.margin.top > 0 ? element.margin.top : 0;\n }\n else {\n var textMetrics = this.viewer.textHelper.getHeight(element.characterFormat); //for ascent and descent\n var height = element.height;\n if (element instanceof BookmarkElementBox) {\n height = textMetrics.Height; //after text helper class\n }\n top += element.margin.top + height - textMetrics.BaselineOffset;\n }\n inline = element;\n var inlineObj = this.validateTextPosition(inline, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n var isParagraphEnd = isNullOrUndefined(inline.nextNode) && index === inline.length;\n var isLineEnd = isNullOrUndefined(inline.nextNode)\n && inline instanceof TextElementBox && inline.text === '\\v';\n if (includeParagraphMark && inline.nextNode instanceof FieldElementBox && index === inline.length) {\n isParagraphEnd = this.isLastRenderedInline(inline, index);\n }\n if (includeParagraphMark && isParagraphEnd || isLineEnd) {\n var width = 0;\n //Include width of Paragraph mark.\n if (isParagraphEnd) {\n width = this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n var selectParaMark = this.viewer.mouseDownOffset.y >= top && this.viewer.mouseDownOffset.y < top + widget.height ? (this.viewer.mouseDownOffset.x < left + width) : true;\n if (selectParaMark && caretPosition.x > left + width / 2) {\n left += width;\n index = inline.length + 1;\n }\n //Include width of line break mark.\n }\n else if (isLineEnd) {\n width = element.width;\n left += width;\n index = inline.length;\n }\n }\n caretPosition = new Point(left, top);\n }\n }\n return {\n 'element': inline,\n 'index': index,\n 'caretPosition': caretPosition,\n 'isImageSelected': isImageSelected\n };\n };\n /* tslint:enable */\n /**\n * Get text length if the line widget\n * @private\n */\n // public getTextLength(viewer: LayoutViewer, widget: LineWidget, element: ElementBox): number {\n // let length: number = 0;\n // let count: number = widget.children.indexOf(element);\n // if (widget.children.length > 0 && widget.children[0] instanceof ListTextElementBox) {\n // if (widget.children[1] instanceof ListTextElementBox) {\n // count -= 2;\n // } else {\n // count -= 1;\n // }\n // }\n // for (let i: number = 1; i < count; i++) {\n // length += widget.children[i].length;\n // }\n // return length;\n // }\n /**\n * Get Line widget left\n * @private\n */\n Selection.prototype.getLeft = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !(paragraphFormat.textAlignment === 'Right')) {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n for (var i = 0; i < widget.children.length; i++) {\n var element = widget.children[i];\n if (element instanceof ListTextElementBox) {\n if (i === 0) {\n left += element.margin.left + element.width;\n }\n else {\n left += element.width;\n }\n }\n else {\n left += element.margin.left;\n break;\n }\n }\n return left;\n };\n /**\n * Get line widget top\n * @private\n */\n Selection.prototype.getTop = function (widget) {\n var top = widget.paragraph.y;\n var count = widget.paragraph.childWidgets.indexOf(widget);\n for (var i = 0; i < count; i++) {\n top += widget.paragraph.childWidgets[i].height;\n }\n return top;\n };\n /**\n * Get first element the widget\n * @private\n */\n Selection.prototype.getFirstElement = function (widget, left) {\n var firstLineIndent = 0;\n if (this.isParagraphFirstLine(widget)) {\n firstLineIndent = HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n left += firstLineIndent;\n var element = undefined;\n for (var i = 0; i < widget.children.length; i++) {\n element = widget.children[i];\n if (element instanceof ListTextElementBox) {\n left += element.margin.left + element.width;\n element = undefined;\n // }\n // else if (element instanceof FieldElementBox || element instanceof BookmarkElementBox\n // || (element.nextNode instanceof FieldElementBox && ((element.nextNode as FieldElementBox).fieldType === 2))) {\n // element = undefined;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'left': left };\n };\n /**\n * Return inline index\n * @private\n */\n //ElementBox\n Selection.prototype.getIndexInInline = function (elementBox) {\n var indexInInline = 0;\n if (elementBox instanceof TextElementBox) {\n var count = elementBox.line.children.indexOf(elementBox);\n for (var i = 0; i < count; i++) {\n var element = elementBox.line.children[i];\n if (element instanceof FieldElementBox || element instanceof ListTextElementBox) {\n continue;\n }\n indexInInline += element.length;\n }\n }\n return indexInInline;\n };\n /**\n * Return true if widget is first inline of paragraph\n * @private\n */\n Selection.prototype.isParagraphFirstLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.previousSplitWidget) &&\n widget === widget.paragraph.firstChild) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isParagraphLastLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.nextSplitWidget)\n && widget === widget.paragraph.lastChild) {\n return true;\n }\n return false;\n };\n /**\n * Return line widget width\n * @private\n */\n Selection.prototype.getWidth = function (widget, includeParagraphMark) {\n var width = 0;\n if (this.isParagraphFirstLine(widget)) {\n width += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n for (var i = 0; i < widget.children.length; i++) {\n width += widget.children[i].margin.left + widget.children[i].width;\n }\n if (includeParagraphMark && widget.paragraph.childWidgets.indexOf(widget) === widget.paragraph.childWidgets.length - 1\n && isNullOrUndefined(widget.paragraph.nextSplitWidget)) {\n width += this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n return width;\n };\n /**\n * Return line widget left\n * @private\n */\n Selection.prototype.getLeftInternal = function (widget, elementBox, index) {\n var left = widget.paragraph.x;\n if (this.isParagraphFirstLine(widget)) {\n // tslint:disable-next-line:max-line-length\n left += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n var count = widget.children.indexOf(elementBox);\n if ((widget.children.length === 1 && widget.children[0] instanceof ListTextElementBox) || (widget.children.length === 2\n && widget.children[0] instanceof ListTextElementBox && widget.children[1] instanceof ListTextElementBox)) {\n count = widget.children.length;\n }\n for (var i = 0; i < count; i++) {\n var widgetInternal = widget.children[i];\n // if (widgetInternal instanceof FieldElementBox) {\n // continue;\n // }\n if (i === 1 && widget.children[i] instanceof ListTextElementBox) {\n left += widget.children[i].width;\n }\n else {\n left += widget.children[i].margin.left + widget.children[i].width;\n }\n }\n if (!isNullOrUndefined(elementBox)) {\n left += elementBox.margin.left;\n }\n if (elementBox instanceof TextElementBox) {\n if (index === elementBox.length) {\n left += elementBox.width;\n }\n else if (index > elementBox.length) {\n // tslint:disable-next-line:max-line-length\n left += elementBox.width + this.viewer.textHelper.getParagraphMarkWidth(elementBox.line.paragraph.characterFormat);\n }\n else {\n // tslint:disable-next-line:max-line-length\n left += this.viewer.textHelper.getWidth(elementBox.text.substr(0, index), elementBox.characterFormat);\n }\n }\n else if (index > 0) {\n if (!isNullOrUndefined(elementBox) && !(elementBox instanceof ListTextElementBox)) {\n left += elementBox.width;\n if (index === 2) {\n var paragraph = elementBox.line.paragraph;\n left += this.viewer.textHelper.getParagraphMarkWidth(paragraph.characterFormat);\n }\n }\n else {\n left += this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n }\n return left;\n };\n /**\n * Return line widget start offset\n * @private\n */\n Selection.prototype.getLineStartLeft = function (widget) {\n var left = widget.paragraph.x;\n if (this.isParagraphFirstLine(widget)) {\n left += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n if (widget.children.length > 0) {\n left += widget.children[0].margin.left;\n }\n return left;\n };\n /**\n * Update text position\n * @private\n */\n Selection.prototype.updateTextPositionWidget = function (widget, point, textPosition, includeParagraphMark) {\n var caretPosition = point;\n var inline = undefined;\n var index = 0;\n var updatePositionObj;\n updatePositionObj = this.updateTextPositionIn(widget, inline, index, caretPosition, includeParagraphMark);\n inline = updatePositionObj.element;\n index = updatePositionObj.index;\n caretPosition = updatePositionObj.caretPosition;\n textPosition.setPositionForSelection(widget, inline, index, caretPosition);\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlightLineWidget = function (widget) {\n if (!isNullOrUndefined(this.owner) && this.selectedWidgets.length > 0) {\n this.clearSelectionHighlight(this);\n }\n };\n /**\n * Return first element from line widget\n * @private\n */\n Selection.prototype.getFirstElementInternal = function (widget) {\n var element = undefined;\n for (var i = 0; i < widget.children.length; i++) {\n element = widget.children[i];\n if (element instanceof ListTextElementBox) {\n element = undefined;\n }\n else {\n break;\n }\n }\n return element;\n };\n //Selection API \n /**\n * Select content between given range\n * @private\n */\n Selection.prototype.selectRange = function (startPosition, endPosition) {\n this.start.setPositionInternal(startPosition);\n this.end.setPositionInternal(endPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Selects current paragraph\n * @private\n */\n Selection.prototype.selectParagraph = function (paragraph, positionAtStart) {\n var line = paragraph.firstChild;\n if (positionAtStart) {\n this.start.setPosition(line, positionAtStart);\n }\n else {\n var endOffset = line.getEndOffset();\n this.start.setPositionParagraph(line, endOffset);\n }\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.setPositionForBlock = function (block, selectFirstBlock) {\n var position;\n if (block instanceof TableWidget) {\n if (selectFirstBlock) {\n block = this.getFirstParagraphInFirstCell(block);\n }\n else {\n block = this.getLastParagraphInLastCell(block);\n }\n }\n if (block instanceof ParagraphWidget) {\n position = new TextPosition(this.owner);\n if (selectFirstBlock) {\n position.setPosition(block.firstChild, true);\n }\n else {\n var line = block.lastChild;\n position.setPositionParagraph(line, line.getEndOffset());\n }\n }\n return position;\n };\n /**\n * Select content in given text position\n * @private\n */\n Selection.prototype.selectContent = function (textPosition, clearMultiSelection) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n this.start.setPositionInternal(textPosition);\n this.end.setPositionInternal(textPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Select paragraph\n * @private\n */\n Selection.prototype.selectInternal = function (lineWidget, element, index, physicalLocation) {\n this.start.setPositionForSelection(lineWidget, element, index, physicalLocation);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = physicalLocation.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.selects = function (lineWidget, offset, skipSelectionChange) {\n this.viewer.clearSelectionHighlight();\n this.start.setPositionForLineWidget(lineWidget, offset);\n this.end.setPositionInternal(this.start);\n if (!skipSelectionChange) {\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select content between start and end position\n * @private\n */\n Selection.prototype.selectPosition = function (startPosition, endPosition) {\n if (isNullOrUndefined(startPosition) || isNullOrUndefined(endPosition)) {\n throw new Error('TextPosition cannot be undefined');\n }\n if (isNullOrUndefined(startPosition.paragraph)\n || startPosition.offset > this.getParagraphLength(startPosition.paragraph) + 1) {\n throw new Error('Start TextPosition is not valid.');\n }\n if (isNullOrUndefined(endPosition.paragraph)\n || endPosition.offset > this.getParagraphLength(endPosition.paragraph) + 1) {\n throw new Error('End TextPosition is not valid.');\n }\n if (startPosition.isAtSamePosition(endPosition)) {\n // Select start position.\n this.selectRange(startPosition, startPosition);\n }\n else {\n // If both text position exists within same comment or outside comment, and not at same position.\n if (startPosition.isExistBefore(endPosition)) {\n // tslint:disable-next-line:max-line-length\n endPosition.validateForwardFieldSelection(startPosition.getHierarchicalIndexInternal(), endPosition.getHierarchicalIndexInternal());\n }\n else {\n // tslint:disable-next-line:max-line-length\n startPosition.validateForwardFieldSelection(endPosition.getHierarchicalIndexInternal(), startPosition.getHierarchicalIndexInternal());\n }\n this.selectRange(startPosition, endPosition);\n }\n };\n /**\n * Notify selection change event\n * @private\n */\n Selection.prototype.fireSelectionChanged = function (isSelectionChanged) {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.updatePhysicalPosition(true);\n this.end.updatePhysicalPosition(false);\n }\n else {\n this.start.updatePhysicalPosition(false);\n this.end.updatePhysicalPosition(true);\n }\n }\n if (!this.skipFormatRetrieval) {\n this.retrieveCurrentFormatProperties();\n }\n this.viewer.clearSelectionHighlight();\n this.hideToolTip();\n if (this.owner.isLayoutEnabled && !this.owner.isShiftingEnabled) {\n this.highlightSelection(true);\n }\n if (isSelectionChanged) {\n if (this.start.paragraph.isInHeaderFooter && !this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = true;\n }\n else if (!this.start.paragraph.isInHeaderFooter && this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n }\n this.owner.fireSelectionChange();\n }\n this.viewer.updateFocus();\n };\n //Formats Retrieval\n /**\n * Retrieve all current selection format\n * @private\n */\n Selection.prototype.retrieveCurrentFormatProperties = function () {\n this.isRetrieveFormatting = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n this.retrieveImageFormat(startPosition, endPosition);\n this.retrieveCharacterFormat(startPosition, endPosition);\n this.retrieveParagraphFormat(startPosition, endPosition);\n this.retrieveSectionFormat(startPosition, endPosition);\n this.retrieveTableFormat(startPosition, endPosition);\n if (!this.isImageSelected) {\n this.imageFormat.clearImageFormat();\n }\n this.isRetrieveFormatting = false;\n this.setCurrentContextType();\n };\n /**\n * @private\n */\n Selection.prototype.retrieveImageFormat = function (start, end) {\n var image;\n if (start.currentWidget === end.currentWidget && start.offset + 1 === end.offset) {\n var elementInfo = end.currentWidget.getInline(end.offset, 0);\n image = elementInfo.element;\n var index = elementInfo.index;\n if (image instanceof ImageElementBox) {\n var startOffset = start.currentWidget.getOffset(image, 0);\n if (startOffset !== start.offset) {\n image = undefined;\n }\n }\n }\n if (image instanceof ImageElementBox) {\n this.imageFormat.copyImageFormat(image);\n }\n else {\n this.imageFormat.clearImageFormat();\n }\n };\n Selection.prototype.setCurrentContextType = function () {\n var contextIsinImage = this.imageFormat.image ? true : false;\n var contextIsinTable = (isNullOrUndefined(this.tableFormat) || isNullOrUndefined(this.tableFormat.table)) ? false : true;\n var style = this.start.paragraph.paragraphFormat.baseStyle;\n if (style instanceof WParagraphStyle && style.name.toLowerCase().indexOf('toc') === 0) {\n var tocField = this.getTocFieldInternal();\n if (!isNullOrUndefined(tocField)) {\n this.contextTypeInternal = 'TableOfContents';\n return;\n }\n }\n if (this.start.paragraph.isInHeaderFooter) {\n var isInHeader = this.start.paragraph.bodyWidget.headerFooterType.indexOf('Header') !== -1;\n if (contextIsinTable) {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderTableImage' : 'FooterTableImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderTableText' : 'FooterTableText';\n }\n }\n else {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderImage' : 'FooterImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderText' : 'FooterText';\n }\n }\n }\n else {\n if (contextIsinTable) {\n this.contextTypeInternal = contextIsinImage ? 'TableImage' : 'TableText';\n }\n else {\n this.contextTypeInternal = contextIsinImage ? 'Image' : 'Text';\n }\n }\n };\n //Table Format retrieval starts\n /**\n * Retrieve selection table format\n * @private\n */\n Selection.prototype.retrieveTableFormat = function (start, end) {\n var tableAdv = this.getTable(start, end);\n if (!isNullOrUndefined(tableAdv)) {\n this.tableFormat.copyFormat(tableAdv.tableFormat);\n this.tableFormat.table = tableAdv;\n this.retrieveCellFormat(start, end);\n this.retrieveRowFormat(start, end);\n }\n else {\n //When the selection is out of table\n this.tableFormat.clearFormat();\n }\n };\n /**\n * Retrieve selection cell format\n * @private\n */\n Selection.prototype.retrieveCellFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.cellFormat.copyFormat(start.paragraph.associatedCell.cellFormat);\n this.getCellFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.cellFormat.clearCellFormat();\n }\n };\n /**\n * Retrieve selection row format\n * @private\n */\n Selection.prototype.retrieveRowFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.rowFormat.copyFormat(start.paragraph.associatedCell.ownerRow.rowFormat);\n this.getRowFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.rowFormat.clearRowFormat();\n }\n };\n /**\n * Get selected cell format\n * @private\n */\n Selection.prototype.getCellFormat = function (table, start, end) {\n if (start.paragraph.associatedCell.equals(end.paragraph.associatedCell)) {\n return;\n }\n var isStarted = false;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === start.paragraph.associatedCell.ownerRow) {\n isStarted = true;\n }\n if (isStarted) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (this.isCellSelected(cell, start, end)) {\n this.cellFormat.combineFormat(cell.cellFormat);\n }\n if (cell === end.paragraph.associatedCell) {\n this.cellFormat.combineFormat(cell.cellFormat);\n return;\n }\n }\n }\n }\n };\n /**\n * Get selected row format\n * @private\n */\n Selection.prototype.getRowFormat = function (table, start, end) {\n var tableRow = start.paragraph.associatedCell.ownerRow;\n if (tableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n for (var i = table.childWidgets.indexOf(tableRow) + 1; i < table.childWidgets.length; i++) {\n var tempTableRow = table.childWidgets[i];\n this.rowFormat.combineFormat(tempTableRow.rowFormat);\n if (tempTableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n }\n };\n /**\n * Return table with given text position\n * @private\n */\n Selection.prototype.getTable = function (startPosition, endPosition) {\n if (!isNullOrUndefined(startPosition.paragraph.associatedCell) && !isNullOrUndefined(endPosition.paragraph.associatedCell)) {\n var startTable = startPosition.paragraph.associatedCell.ownerTable;\n var endTable = startPosition.paragraph.associatedCell.ownerTable;\n if (startTable === endTable) {\n return startTable;\n }\n else {\n if (startTable.contains(startPosition.paragraph.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startPosition.paragraph.associatedCell)) {\n return endTable;\n }\n else if (!startTable.isInsideTable || !endTable.isInsideTable) {\n return undefined;\n }\n else {\n do {\n startTable = startTable.associatedCell.ownerTable;\n if (startTable === endTable || startTable.contains(endTable.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startTable.associatedCell)) {\n return endTable;\n }\n } while (!isNullOrUndefined(startTable.associatedCell));\n }\n }\n }\n return undefined;\n };\n Selection.prototype.getContainerWidget = function (block) {\n var bodyWidget;\n if (block.containerWidget instanceof BlockContainer) {\n bodyWidget = block.containerWidget;\n }\n else {\n bodyWidget = block.containerWidget;\n while (!(bodyWidget instanceof BlockContainer)) {\n bodyWidget = bodyWidget.containerWidget;\n }\n }\n return bodyWidget;\n };\n //Table format retrieval ends\n //Section format retrieval starts\n /**\n * Retrieve selection section format\n * @private\n */\n Selection.prototype.retrieveSectionFormat = function (start, end) {\n var startParaSection = this.getContainerWidget(start.paragraph);\n var endParaSection = this.getContainerWidget(end.paragraph);\n if (!isNullOrUndefined(startParaSection)) {\n this.sectionFormat.copyFormat(startParaSection.sectionFormat);\n var startPageIndex = this.viewer.pages.indexOf(startParaSection.page);\n var endPageIndex = this.viewer.pages.indexOf(endParaSection.page);\n for (var i = startPageIndex + 1; i <= endPageIndex; i++) {\n this.sectionFormat.combineFormat(this.viewer.pages[i].bodyWidgets[0].sectionFormat);\n }\n }\n };\n //section format retrieval ends.\n //Paragraph format retrieval implementation starts.\n /**\n * Retrieve selection paragraph format\n * @private\n */\n Selection.prototype.retrieveParagraphFormat = function (start, end) {\n this.getParagraphFormatForSelection(start.paragraph, this, start, end);\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatForSelection = function (paragraph, selection, start, end) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || this.isCellSelected(start.paragraph.associatedCell, start, end))) {\n this.getParagraphFormatInternalInCell(start.paragraph.associatedCell, start, end);\n }\n else {\n this.getParagraphFormatInternalInParagraph(paragraph, start, end);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getParagraphFormatInternalInParagraph = function (paragraph, start, end) {\n if (start.paragraph === paragraph) {\n this.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n }\n else {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n }\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getParagraphFormatInternalInBlock(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInternalInParagraph(block, start, end);\n }\n else {\n this.getParagraphFormatInternalInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(table);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInCell = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getParagraphFormatInBlock(cell.childWidgets[i]);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInParagraph(block);\n }\n else {\n this.getParagraphFormatInTable(block);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInTable = function (tableAdv) {\n for (var i = 0; i < tableAdv.childWidgets.length; i++) {\n var tableRow = tableAdv.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInParagraph = function (paragraph) {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInCell = function (cellAdv, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cellAdv, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cellAdv, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getParagraphFormatInCell(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.getParagraphFormatInternalInParagraph(start.paragraph, start, end);\n }\n else {\n this.getParagraphFormatInRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getParaFormatForCell(containerCell.ownerTable, containerCell, endCell);\n }\n }\n else {\n this.getParagraphFormatInRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(cellAdv);\n this.getParagraphFormatInRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParaFormatForCell = function (table, startCell, endCell) {\n var startCellIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endCellIn = startCellIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startCellIn > endCellLeft) {\n startCellIn = endCellLeft;\n }\n if (endCellIn < endCellRight) {\n endCellIn = endCellRight;\n }\n if (startCellIn > this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n if (startCellIn < this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n var cell = tableRow.childWidgets[j];\n var left = this.getCellLeft(tableRow, cell);\n if (HelperMethods.round(startCellIn, 2) <= HelperMethods.round(left, 2)\n && HelperMethods.round(left, 2) < HelperMethods.round(endCellIn, 2)) {\n this.getParagraphFormatInCell(cell);\n }\n }\n }\n };\n /**\n * Get paragraph format ins row\n * @private\n */\n Selection.prototype.getParagraphFormatInRow = function (tableRow, start, end) {\n for (var i = tableRow.rowIndex; i < tableRow.ownerTable.childWidgets.length; i++) {\n var row = tableRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getParagraphFormatInCell(row.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRow.ownerTable);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n // paragraph format retrieval implementation ends\n // Character format retrieval implementation starts.\n /**\n * Retrieve Selection character format\n * @private\n */\n Selection.prototype.retrieveCharacterFormat = function (start, end) {\n this.characterFormat.copyFormat(start.paragraph.characterFormat);\n if (start.paragraph === end.paragraph && start.currentWidget.isLastLine()\n && start.offset === this.getLineLength(start.currentWidget) && start.offset + 1 === end.offset) {\n return;\n }\n var para = start.paragraph;\n if (start.offset === this.getParagraphLength(para) && !this.isEmpty) {\n para = this.getNextParagraphBlock(para);\n }\n while (!isNullOrUndefined(para) && para !== end.paragraph && para.isEmpty()) {\n para = this.getNextParagraphBlock(para);\n }\n var offset = para === start.paragraph ? start.offset : 0;\n var indexInInline = 0;\n if (!isNullOrUndefined(para) && !para.isEmpty()) {\n var position = new TextPosition(this.owner);\n var elemInfo = start.currentWidget.getInline(offset, indexInInline);\n var physicalLocation = this.getPhysicalPositionInternal(start.currentWidget, offset, true);\n position.setPositionForSelection(start.currentWidget, elemInfo.element, elemInfo.index, physicalLocation);\n this.getCharacterFormatForSelection(para, this, position, end);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getCharacterFormatForSelection = function (paragraph, selection, startPosition, endPosition) {\n //Selection start in cell.\n if (startPosition.paragraph instanceof ParagraphWidget && startPosition.paragraph.isInsideTable\n && (!endPosition.paragraph.isInsideTable\n || startPosition.paragraph.associatedCell !== endPosition.paragraph.associatedCell\n || this.isCellSelected(startPosition.paragraph.associatedCell, startPosition, endPosition))) {\n this.getCharacterFormatInTableCell(startPosition.paragraph.associatedCell, selection, startPosition, endPosition);\n }\n else {\n this.getCharacterFormat(paragraph, startPosition, endPosition);\n }\n };\n /**\n * Get Character format\n * @private\n */\n //Format Retrieval\n Selection.prototype.getCharacterFormatForTableRow = function (tableRowAdv, start, end) {\n for (var i = tableRowAdv.rowIndex; i < tableRowAdv.ownerTable.childWidgets.length; i++) {\n var tableRow = tableRowAdv.ownerTable.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(tableRow.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRowAdv.ownerTable);\n // //Goto the next block.\n this.getCharacterFormatForBlock(block, start, end);\n };\n /**\n * Get Character format in table\n * @private\n */\n Selection.prototype.getCharacterFormatInTableCell = function (tableCell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(tableCell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(tableCell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getCharacterFormatForSelectionCell(containerCell, start, end);\n }\n else {\n if (startCell === containerCell) {\n this.getCharacterFormat(start.paragraph, start, end);\n }\n else {\n this.getCharacterFormatForTableRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getCharacterFormatInternalInTable(containerCell.ownerTable, containerCell, endCell, start, end);\n }\n }\n else {\n this.getCharacterFormatForTableRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(tableCell);\n this.getCharacterFormatForTableRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getCharacterFormatInternalInTable = function (table, startCell, endCell, startPosition, endPosition) {\n var startIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endIn = startIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startIn > endCellLeft) {\n startIn = endCellLeft;\n }\n if (endIn < endCellRight) {\n endIn = endCellRight;\n }\n if (startIn > this.upDownSelectionLength) {\n startIn = this.upDownSelectionLength;\n }\n if (endIn < this.upDownSelectionLength) {\n endIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var left = this.getCellLeft(row, cell);\n if (HelperMethods.round(startIn, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(endIn, 2)) {\n this.getCharacterFormatForSelectionCell(cell, startPosition, endPosition);\n }\n }\n }\n };\n /**\n * Get character format with in selection\n * @private\n */\n Selection.prototype.getCharacterFormat = function (paragraph, start, end) {\n if (paragraph !== start.paragraph && paragraph !== end.paragraph) {\n this.getCharacterFormatInternal(paragraph, this);\n return;\n }\n if (end.paragraph === paragraph && start.paragraph !== paragraph && end.offset === 0) {\n return;\n }\n var startOffset = 0;\n var length = this.getParagraphLength(paragraph);\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n //Sets selection character format. \n var isUpdated = this.setCharacterFormat(paragraph, start, end, length);\n if (isUpdated) {\n return;\n }\n }\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n var endOffset = end.offset;\n if (paragraph !== end.paragraph) {\n endOffset = length;\n }\n var isFieldStartSelected = false;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = this.getStartLineOffset(lineWidget);\n }\n if (lineWidget === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = this.getLineLength(lineWidget);\n }\n var count = 0;\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (startOffset >= count + inline.length) {\n count += inline.length;\n continue;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(inline)) {\n var nextInline = isNullOrUndefined(inline.fieldSeparator) ?\n inline.fieldEnd : inline.fieldSeparator;\n do {\n count += inline.length;\n inline = inline.nextNode;\n i++;\n } while (!isNullOrUndefined(inline) && inline !== nextInline);\n isFieldStartSelected = true;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1\n && HelperMethods.isLinkedFieldCharacter(inline) && isFieldStartSelected) {\n var fieldInline = inline.fieldBegin;\n do {\n this.characterFormat.combineFormat(fieldInline.characterFormat);\n fieldInline = fieldInline.nextNode;\n } while (!(fieldInline instanceof FieldElementBox));\n }\n if (inline instanceof TextElementBox) {\n this.characterFormat.combineFormat(inline.characterFormat);\n }\n if (isNullOrUndefined(inline) || endOffset <= count + inline.length) {\n break;\n }\n count += inline.length;\n }\n }\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getCharacterFormatForBlock(block, start, end);\n }\n };\n Selection.prototype.setCharacterFormat = function (para, startPos, endPos, length) {\n var index = 0;\n var startOffset = startPos.offset;\n var inlineAndIndex = startPos.currentWidget.getInline(startOffset, index);\n index = inlineAndIndex.index;\n var inline = inlineAndIndex.element;\n if (isNullOrUndefined(inline)) {\n var currentLineIndex = startPos.paragraph.childWidgets.indexOf(startPos.currentWidget);\n if (startPos.currentWidget.previousLine) {\n inline = startPos.currentWidget.previousLine.children[startPos.currentWidget.previousLine.children.length - 1];\n this.characterFormat.copyFormat(inline.characterFormat);\n return true;\n }\n }\n if (startOffset < length) {\n if (this.isEmpty) {\n if (inline instanceof TextElementBox || (inline instanceof FieldElementBox\n && (inline.fieldType === 0 || inline.fieldType === 1))) {\n var previousNode = this.getPreviousTextElement(inline);\n if (startOffset === 0 && previousNode) {\n inline = previousNode;\n }\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else {\n if (!isNullOrUndefined(this.getPreviousTextElement(inline))) {\n this.characterFormat.copyFormat(this.getPreviousTextElement(inline).characterFormat);\n }\n else if (!isNullOrUndefined(this.getNextTextElement(inline))) {\n this.characterFormat.copyFormat(this.getNextTextElement(inline).characterFormat);\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n }\n return true;\n }\n else {\n if (index === inline.length && !isNullOrUndefined(inline.nextNode)) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormat(inline));\n }\n else if (inline instanceof TextElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else if (inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormatOfField(inline));\n }\n }\n }\n else {\n if (length === endPos.offset) {\n if (inline instanceof TextElementBox || inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else if (!isNullOrUndefined(inline)) {\n inline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(inline)) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatForBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getCharacterFormat(block, start, end);\n }\n else {\n this.getCharacterFormatInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(row.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var blockAdv = this.getNextRenderedBlock(table);\n // //Goto the next block.\n this.getCharacterFormatForBlock(blockAdv, start, end);\n };\n /**\n * Get character format in selection\n * @private\n */\n Selection.prototype.getCharacterFormatForSelectionCell = function (cell, start, end) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getCharacterFormatForBlock(cell.childWidgets[i], start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInternal = function (paragraph, selection) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var linewidget = paragraph.childWidgets[i];\n for (var j = 0; j < linewidget.children.length; j++) {\n var element = linewidget.children[j];\n if (!(element instanceof ImageElementBox || element instanceof FieldElementBox)) {\n selection.characterFormat.combineFormat(element.characterFormat);\n }\n }\n }\n };\n /**\n * Get next valid character format from inline\n * @private\n */\n Selection.prototype.getNextValidCharacterFormat = function (inline) {\n var startInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(startInline)) {\n return inline.characterFormat;\n }\n var fieldBegin = undefined;\n if (startInline instanceof FieldElementBox) {\n if (fieldBegin.fieldType === 0) {\n fieldBegin = startInline;\n }\n }\n if (isNullOrUndefined(fieldBegin)) {\n return startInline.characterFormat;\n }\n else {\n return this.getNextValidCharacterFormatOfField(fieldBegin);\n }\n };\n /**\n * Get next valid paragraph format from field\n * @private\n */\n Selection.prototype.getNextValidCharacterFormatOfField = function (fieldBegin) {\n var startInline = fieldBegin;\n if (HelperMethods.isLinkedFieldCharacter(fieldBegin)) {\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n startInline = fieldBegin.fieldEnd;\n }\n else {\n startInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(startInline.nextNode)) {\n //Check the next node is a valid and returns inline.\n nextValidInline = this.getNextValidElement(startInline.nextNode);\n }\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n return startInline.characterFormat;\n }\n return nextValidInline.characterFormat;\n };\n /**\n * Return true if cursor point with in selection range\n * @private\n */\n Selection.prototype.checkCursorIsInSelection = function (widget, point) {\n if (isNullOrUndefined(this.start) || this.isEmpty || isNullOrUndefined(widget)) {\n return false;\n }\n var isSelected = false;\n do {\n if (this.selectedWidgets.containsKey(widget)) {\n var top_4 = void 0;\n var left = void 0;\n if (widget instanceof LineWidget) {\n top_4 = this.owner.selection.getTop(widget);\n left = this.owner.selection.getLeft(widget);\n }\n else {\n top_4 = widget.y;\n left = widget.x;\n }\n var widgetInfo = this.selectedWidgets.get(widget);\n isSelected = widgetInfo.left <= point.x && top_4 <= point.y &&\n top_4 + widget.height >= point.y && widgetInfo.left + widgetInfo.width >= point.x;\n }\n widget = (widget instanceof LineWidget) ? widget.paragraph : widget.containerWidget;\n } while (!isNullOrUndefined(widget) && !isSelected);\n return isSelected;\n };\n /**\n * Copy paragraph for to selection paragraph format\n * @private\n */\n Selection.prototype.copySelectionParagraphFormat = function () {\n var format = new WParagraphFormat();\n this.paragraphFormat.copyToFormat(format);\n return format;\n };\n /**\n * Get hyperlink display text\n * @private\n */\n // tslint:disable-next-line\n Selection.prototype.getHyperlinkDisplayText = function (paragraph, fieldSeparator, fieldEnd, isNestedField, format) {\n var para = paragraph;\n if (para !== fieldEnd.line.paragraph) {\n isNestedField = true;\n return { displayText: '<>', 'isNestedField': isNestedField, 'format': format };\n }\n var displayText = '';\n var lineIndex = para.childWidgets.indexOf(fieldSeparator.line);\n var index = para.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < para.childWidgets.length; j++) {\n var lineWidget = para.childWidgets[j];\n if (j !== lineIndex) {\n index = -1;\n }\n for (var i = index + 1; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (inline === fieldEnd) {\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n }\n if (inline instanceof TextElementBox) {\n displayText += inline.text;\n format = inline.characterFormat;\n }\n else if (inline instanceof FieldElementBox) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNullOrUndefined(inline.fieldSeparator)) {\n index = lineWidget.children.indexOf(inline.fieldEnd);\n }\n else {\n index = lineWidget.children.indexOf(inline.fieldSeparator);\n }\n }\n }\n else {\n isNestedField = true;\n return { 'displayText': '<>', 'isNestedField': isNestedField, 'format': format };\n }\n }\n }\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n };\n /**\n * Navigates hyperlink on mouse Event.\n * @private\n */\n Selection.prototype.navigateHyperLinkOnEvent = function (cursorPoint, isTouchInput) {\n var _this = this;\n var widget = this.viewer.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n var hyperLinkField = this.getHyperLinkFieldInCurrentSelection(widget, cursorPoint);\n //Invokes Hyperlink navigation events.\n if (!isNullOrUndefined(hyperLinkField)) {\n this.viewer.updateTextPositionForSelection(cursorPoint, 1);\n this.fireRequestNavigate(hyperLinkField);\n setTimeout(function () {\n if (_this.viewer) {\n _this.viewer.isTouchInput = isTouchInput;\n _this.viewer.updateFocus();\n _this.viewer.isTouchInput = false;\n }\n });\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getLinkText = function (fieldBegin) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n var link = hyperlink.navigationLink;\n if (hyperlink.localReference.length > 0) {\n if (hyperlink.localReference[0] === '_' && (isNullOrUndefined(link) || link.length === 0)) {\n link = 'Current Document';\n }\n else {\n link += '#' + hyperlink.localReference;\n }\n }\n hyperlink.destroy();\n return link;\n };\n /**\n * Set Hyperlink content to tool tip element\n * @private\n */\n Selection.prototype.setHyperlinkContentToToolTip = function (fieldBegin, widget, xPos) {\n if (fieldBegin) {\n if (this.owner.contextMenuModule &&\n this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n if (!this.toolTipElement) {\n this.toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.viewer.viewerContainer.appendChild(this.toolTipElement);\n }\n this.toolTipElement.style.display = 'block';\n var l10n = new L10n('documenteditor', this.owner.defaultLocale);\n l10n.setLocale(this.owner.locale);\n var toolTipText = l10n.getConstant('Click to follow link');\n if (this.owner.useCtrlClickToFollowHyperlink) {\n toolTipText = 'Ctrl+' + toolTipText;\n }\n var linkText = this.getLinkText(fieldBegin);\n this.toolTipElement.innerHTML = linkText + '
    ' + toolTipText + '';\n var widgetTop = this.getTop(widget) * this.viewer.zoomFactor;\n var page = this.getPage(widget.paragraph);\n var containerWidth = this.viewer.viewerContainer.getBoundingClientRect().width + this.viewer.viewerContainer.scrollLeft;\n var left = page.boundingRectangle.x + xPos * this.viewer.zoomFactor;\n if ((left + this.toolTipElement.clientWidth + 10) > containerWidth) {\n left = left - ((this.toolTipElement.clientWidth - (containerWidth - left)) + 15);\n }\n var top_5 = this.getPageTop(page) + (widgetTop - this.toolTipElement.offsetHeight);\n top_5 = top_5 > this.viewer.viewerContainer.scrollTop ? top_5 : top_5 + widget.height + this.toolTipElement.offsetHeight;\n this.showToolTip(left, top_5);\n if (!isNullOrUndefined(this.toolTipField) && fieldBegin !== this.toolTipField) {\n this.toolTipObject.position = { X: left, Y: top_5 };\n }\n this.toolTipObject.show();\n this.toolTipField = fieldBegin;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * Show hyperlink tooltip\n * @private\n */\n Selection.prototype.showToolTip = function (x, y) {\n if (!this.toolTipObject) {\n this.toolTipObject = new Popup(this.toolTipElement, {\n height: 'auto',\n width: 'auto',\n relateTo: this.viewer.viewerContainer.parentElement,\n position: { X: x, Y: y }\n });\n }\n };\n /**\n * Hide tooltip object\n * @private\n */\n Selection.prototype.hideToolTip = function () {\n this.toolTipField = undefined;\n if (this.toolTipObject) {\n this.toolTipObject.hide();\n this.toolTipObject.destroy();\n this.toolTipObject = undefined;\n this.toolTipElement.style.display = 'none';\n }\n };\n /**\n * Return hyperlink field\n * @private\n */\n Selection.prototype.getHyperLinkFieldInCurrentSelection = function (widget, cursorPosition) {\n var inline = undefined;\n var top = this.getTop(widget);\n var lineStartLeft = this.getLineStartLeft(widget);\n if (cursorPosition.y < top || cursorPosition.y > top + widget.height\n || cursorPosition.x < lineStartLeft || cursorPosition.x > lineStartLeft + widget.paragraph.width) {\n return undefined;\n }\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n left = elementValues.left;\n var element = elementValues.element;\n if (isNullOrUndefined(element)) {\n var width = this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n if (cursorPosition.x <= lineStartLeft + width || cursorPosition.x >= lineStartLeft + width) {\n //Check if paragraph is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFields(widget.paragraph, checkedFields);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n else {\n if (cursorPosition.x > left + element.margin.left) {\n for (var i = widget.children.indexOf(element); i < widget.children.length; i++) {\n element = widget.children[i];\n if (cursorPosition.x < left + element.margin.left + element.width || i === widget.children.length - 1) {\n break;\n }\n left += element.margin.left + element.width;\n }\n }\n inline = element;\n var width = element.margin.left + element.width;\n if (isNullOrUndefined(inline.nextNode)) {\n //Include width of Paragraph mark.\n width += this.viewer.textHelper.getParagraphMarkWidth(inline.line.paragraph.characterFormat);\n }\n if (cursorPosition.x <= left + width) {\n //Check if inline is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFieldInternal(inline.line.paragraph, inline, checkedFields);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n return undefined;\n };\n /**\n * Return field if paragraph contain hyperlink field\n * @private\n */\n Selection.prototype.getHyperlinkField = function () {\n if (isNullOrUndefined(this.end)) {\n return undefined;\n }\n var index = 0;\n var currentInline = this.end.currentWidget.getInline(this.end.offset, index);\n index = currentInline.index;\n var inline = currentInline.element;\n var checkedFields = [];\n var field = undefined;\n if (isNullOrUndefined(inline)) {\n field = this.getHyperLinkFields(this.end.paragraph, checkedFields);\n }\n else {\n var paragraph = inline.line.paragraph;\n field = this.getHyperLinkFieldInternal(paragraph, inline, checkedFields);\n }\n checkedFields = [];\n return field;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFields = function (paragraph, checkedFields) {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n if (checkedFields.indexOf(this.viewer.fields[i]) !== -1 || isNullOrUndefined(this.viewer.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n checkedFields.push(this.viewer.fields[i]);\n }\n var field = this.getFieldCode(this.viewer.fields[i]);\n field = field.trim().toLowerCase();\n if (field.match('hyperlink ') && this.paragraphIsInFieldResult(this.viewer.fields[i], paragraph)) {\n return this.viewer.fields[i];\n }\n }\n // if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof WHeaderFooter)) {\n // return this.getHyperLinkFields((paragraph.con as WCompositeNode), checkedFields);\n // }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFieldInternal = function (paragraph, inline, fields) {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n if (fields.indexOf(this.viewer.fields[i]) !== -1 || isNullOrUndefined(this.viewer.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n fields.push(this.viewer.fields[i]);\n }\n var fieldCode = this.getFieldCode(this.viewer.fields[i]);\n fieldCode = fieldCode.trim().toLowerCase();\n if (fieldCode.match('hyperlink ') && (this.inlineIsInFieldResult(this.viewer.fields[i], inline) || this.isImageField())) {\n return this.viewer.fields[i];\n }\n }\n if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof HeaderFooterWidget)) {\n return this.getHyperLinkFieldInternal(paragraph.containerWidget, inline, fields);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getBlock = function (currentIndex) {\n if (currentIndex === '' || isNullOrUndefined(currentIndex)) {\n return undefined;\n }\n var index = { index: currentIndex };\n var page = this.start.getPage(index);\n var bodyIndex = index.index.indexOf(';');\n var value = index.index.substring(0, bodyIndex);\n index.index = index.index.substring(bodyIndex).replace(';', '');\n var bodyWidget = page.bodyWidgets[parseInt(value, 10)];\n return this.getBlockInternal(bodyWidget, index.index);\n };\n /**\n * Return Block relative to position\n * @private\n */\n Selection.prototype.getBlockInternal = function (widget, position) {\n if (position === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.indexOf(';');\n var value = position.substring(0, index);\n position = position.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof Widget && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headersFooters, position);\n // tslint:disable-next-line:max-line-length\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[(index)];\n if (position.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.indexOf(';') >= 0) {\n position = '0';\n }\n return child;\n }\n if (child instanceof BlockWidget) {\n var blockObj = this.getBlockInternal(child, position);\n return blockObj;\n }\n }\n else {\n return child;\n }\n }\n else {\n return node;\n }\n return node;\n };\n /**\n * Return true if inline is in field result\n * @private\n */\n Selection.prototype.inlineIsInFieldResult = function (fieldBegin, inline) {\n if (!isNullOrUndefined(fieldBegin.fieldEnd) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n if (this.isExistBeforeInline(fieldBegin.fieldSeparator, inline)) {\n return this.isExistAfterInline(fieldBegin.fieldEnd, inline);\n }\n }\n return false;\n };\n /**\n * Retrieve true if paragraph is in field result\n * @private\n */\n Selection.prototype.paragraphIsInFieldResult = function (fieldBegin, paragraph) {\n if (!isNullOrUndefined(fieldBegin.fieldEnd) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var fieldParagraph = fieldBegin.fieldSeparator.line.paragraph;\n if (fieldBegin.fieldSeparator.line.paragraph === paragraph\n || this.isExistBefore(fieldParagraph, paragraph)) {\n var currentParagraph = fieldBegin.fieldEnd.line.paragraph;\n return (currentParagraph !== paragraph && this.isExistAfter(fieldParagraph, paragraph));\n }\n }\n return false;\n };\n /**\n * Return true if image is In field\n * @private\n */\n Selection.prototype.isImageField = function () {\n if (this.start.paragraph.isEmpty() || this.end.paragraph.isEmpty()) {\n return false;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var indexInInline = 0;\n var inlineInfo = startPosition.paragraph.getInline(startPosition.offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (indexInInline === inline.length) {\n inline = this.getNextRenderedElementBox(inline, indexInInline);\n }\n inlineInfo = endPosition.paragraph.getInline(endPosition.offset, indexInInline);\n var endInline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && endInline instanceof FieldElementBox && endInline.fieldType === 1 && inline.fieldSeparator) {\n var fieldValue = inline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n return true;\n }\n }\n return false;\n };\n /**\n * Select List Text\n * @private\n */\n Selection.prototype.selectListText = function () {\n var lineWidget = this.viewer.selectionLineWidget;\n var endOffset = '0';\n var selectionIndex = lineWidget.getHierarchicalIndex(endOffset);\n var startPosition = this.getTextPosition(selectionIndex);\n var endPosition = this.getTextPosition(selectionIndex);\n this.selectRange(startPosition, endPosition);\n this.highlightListText(this.viewer.selectionLineWidget);\n this.contextTypeInternal = 'List';\n };\n /**\n * Manually select the list text\n * @private\n */\n Selection.prototype.highlightListText = function (linewidget) {\n var width = linewidget.children[0].width;\n var left = this.viewer.getLeftValue(linewidget);\n var top = linewidget.paragraph.y;\n this.createHighlightBorder(linewidget, width, left, top);\n this.viewer.isListTextSelected = true;\n };\n /**\n * @private\n */\n Selection.prototype.updateImageSize = function (imageFormat) {\n this.owner.isShiftingEnabled = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var inline = null;\n var index = 0;\n var paragraph = startPosition.paragraph;\n if (paragraph === endPosition.paragraph\n && startPosition.offset + 1 === endPosition.offset) {\n var inlineObj = paragraph.getInline(endPosition.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n }\n if (inline instanceof ImageElementBox) {\n var width = inline.width;\n var height = inline.height;\n inline.width = imageFormat.width;\n inline.height = imageFormat.height;\n imageFormat.width = width;\n imageFormat.height = height;\n if (paragraph != null && paragraph.containerWidget != null && this.owner.editorModule) {\n var lineIndex = paragraph.childWidgets.indexOf(inline.line);\n var elementIndex = inline.line.children.indexOf(inline);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n this.highlightSelection(false);\n }\n }\n };\n /**\n * Gets selected table content\n * @private\n */\n Selection.prototype.getSelectedCellsInTable = function (table, startCell, endCell) {\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowindex = startCell.ownerRow.index;\n var endRowIndex = endCell.ownerRow.index;\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.index >= startRowindex && row.index <= endRowIndex) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n cells.push(cell);\n }\n }\n }\n if (row.index > endRowIndex) {\n break;\n }\n }\n return cells;\n // return html;\n };\n /**\n * Copies the selected content to clipboard.\n */\n Selection.prototype.copy = function () {\n if (this.isEmpty) {\n return;\n }\n this.copySelectedContent(false);\n };\n /**\n * @private\n */\n Selection.prototype.copySelectedContent = function (isCut) {\n if (isNullOrUndefined(this.owner.sfdtExportModule)) {\n return;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n /* tslint:disable:no-any */\n // tslint:disable-next-line:max-line-length\n var document = this.owner.sfdtExportModule.write(startPosition.currentWidget, startPosition.offset, endPosition.currentWidget, endPosition.offset, true);\n /* tslint:enable:no-any */\n if (this.owner.editorModule) {\n this.owner.editorModule.copiedData = JSON.stringify(document);\n }\n var html = this.htmlWriter.writeHtml(document);\n this.copyToClipboard(html);\n if (isCut && this.owner.editorModule) {\n this.owner.editorModule.handleCut(this);\n }\n this.viewer.updateFocus();\n };\n /**\n * Copy content to clipboard\n * @private\n */\n Selection.prototype.copyToClipboard = function (htmlContent) {\n window.getSelection().removeAllRanges();\n var div = document.createElement('div');\n div.style.left = '-10000px';\n div.style.top = '-10000px';\n div.innerHTML = htmlContent;\n document.body.appendChild(div);\n var range = document.createRange();\n range.selectNodeContents(div);\n window.getSelection().addRange(range);\n var copySuccess = false;\n try {\n copySuccess = document.execCommand('copy');\n }\n catch (e) {\n // Copying data to Clipboard can potentially fail - for example, if another application is holding Clipboard open.\n }\n finally {\n window.getSelection().removeAllRanges();\n div.parentNode.removeChild(div);\n this.viewer.viewerContainer.focus();\n }\n return copySuccess;\n };\n // Caret implementation starts\n /**\n * Shows caret in current selection position.\n * @private\n */\n Selection.prototype.showCaret = function () {\n // tslint:disable-next-line:max-line-length\n var page = !isNullOrUndefined(this.viewer.currentPage) ? this.viewer.currentPage : this.viewer.currentRenderingPage;\n if (isNullOrUndefined(page) || this.viewer.isRowOrCellResizing || this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizerVisible) {\n return;\n }\n var left = page.boundingRectangle.x;\n var right = page.boundingRectangle.width * this.viewer.zoomFactor + left;\n if (!this.owner.enableImageResizerMode || !this.owner.imageResizerModule.isImageResizerVisible) {\n // tslint:disable-next-line:max-line-length\n if (this.isEmpty && (!this.owner.isReadOnlyMode || this.owner.enableCursorOnReadOnly)) {\n var caretLeft = parseInt(this.caret.style.left.replace('px', ''), 10);\n if (caretLeft < left || caretLeft > right) {\n this.caret.style.display = 'none';\n }\n else {\n this.caret.style.display = 'block';\n }\n }\n else if (this.isImageSelected && !this.owner.enableImageResizerMode) {\n this.caret.style.display = 'block';\n }\n else {\n if (this.caret.style.display === 'block' || isNullOrUndefined(this)) {\n this.caret.style.display = 'none';\n }\n }\n }\n if (!isNullOrUndefined(this) && this.viewer.isTouchInput && !this.owner.isReadOnlyMode) {\n var caretStartLeft = parseInt(this.viewer.touchStart.style.left.replace('px', ''), 10) + 14;\n var caretEndLeft = parseInt(this.viewer.touchEnd.style.left.replace('px', ''), 10) + 14;\n var page_1 = this.getSelectionPage(this.start);\n if (page_1) {\n if (caretEndLeft < left || caretEndLeft > right) {\n this.viewer.touchEnd.style.display = 'none';\n }\n else {\n this.viewer.touchEnd.style.display = 'block';\n }\n if (!this.isEmpty) {\n left = page_1.boundingRectangle.x;\n right = page_1.boundingRectangle.width * this.viewer.zoomFactor + left;\n }\n if (caretStartLeft < left || caretStartLeft > right) {\n this.viewer.touchStart.style.display = 'none';\n }\n else {\n this.viewer.touchStart.style.display = 'block';\n }\n }\n }\n else {\n this.viewer.touchStart.style.display = 'none';\n this.viewer.touchEnd.style.display = 'none';\n }\n };\n /**\n * To set the editable div caret position\n * @private\n */\n Selection.prototype.setEditableDivCaretPosition = function (index) {\n this.viewer.editableDiv.focus();\n var child = this.viewer.editableDiv.childNodes[this.viewer.editableDiv.childNodes.length - 1];\n if (child) {\n var range = document.createRange();\n range.setStart(child, index);\n range.collapse(true);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(range);\n }\n };\n /**\n * Initializes caret.\n * @private\n */\n Selection.prototype.initCaret = function () {\n this.caret = createElement('div', {\n styles: 'position:absolute',\n className: 'e-de-blink-cursor e-de-cursor-animation'\n });\n this.viewer.viewerContainer.appendChild(this.caret);\n };\n /**\n * Updates caret position.\n * @private\n */\n Selection.prototype.updateCaretPosition = function () {\n var caretPosition = this.end.location;\n var page = this.getSelectionPage(this.end);\n if (page) {\n this.caret.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.viewer.zoomFactor) + 'px';\n var caretInfo = this.updateCaretSize(this.owner.selection.end);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n var viewer = this.viewer;\n // tslint:disable-next-line:max-line-length\n var pageTop = (page.boundingRectangle.y - viewer.pageGap * (this.viewer.pages.indexOf(page) + 1)) * this.viewer.zoomFactor + viewer.pageGap * (this.viewer.pages.indexOf(page) + 1);\n this.caret.style.top = pageTop + (Math.round(caretPosition.y + topMargin) * this.viewer.zoomFactor) + 'px';\n if (this.owner.selection.characterFormat.baselineAlignment === 'Subscript') {\n this.caret.style.top = parseFloat(this.caret.style.top) + (parseFloat(this.caret.style.height) / 2) + 'px';\n }\n if (this.viewer.isTouchInput || this.viewer.touchStart.style.display !== 'none') {\n // tslint:disable-next-line:max-line-length\n this.viewer.touchStart.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.viewer.zoomFactor - 14) + 'px';\n this.viewer.touchStart.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.viewer.zoomFactor) + 'px';\n // tslint:disable-next-line:max-line-length\n this.viewer.touchEnd.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.viewer.zoomFactor - 14) + 'px';\n this.viewer.touchEnd.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.viewer.zoomFactor) + 'px';\n }\n }\n };\n /**\n * Gets current selected page\n */\n Selection.prototype.getSelectionPage = function (position) {\n var lineWidget = this.getLineWidgetInternal(position.currentWidget, position.offset, true);\n if (lineWidget) {\n return this.getPage(lineWidget.paragraph);\n }\n return undefined;\n };\n /**\n * Updates caret size.\n * @private\n */\n Selection.prototype.updateCaretSize = function (textPosition, skipUpdate) {\n var topMargin = 0;\n var isItalic = false;\n var caret;\n var index = 0;\n var caretHeight = 0;\n if (this.characterFormat.italic) {\n isItalic = this.characterFormat.italic;\n }\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var bottomMargin = 0;\n var paragraphInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = paragraphInfo.topMargin;\n bottomMargin = paragraphInfo.bottomMargin;\n var height = paragraphInfo.height;\n caretHeight = topMargin < 0 ? topMargin + height : height;\n if (!skipUpdate) {\n this.caret.style.height = caretHeight * this.viewer.zoomFactor + 'px';\n }\n topMargin = 0;\n }\n else {\n var inlineInfo = textPosition.currentWidget.getInline(textPosition.offset, index);\n index = inlineInfo.index;\n var inline = inlineInfo.element;\n if (!isNullOrUndefined(inline)) {\n caret = this.getCaretHeight(inline, index, inline.characterFormat, true, topMargin, isItalic);\n caretHeight = caret.height;\n if (!skipUpdate) {\n this.caret.style.height = caret.height * this.viewer.zoomFactor + 'px';\n }\n }\n }\n if (!skipUpdate) {\n if (isItalic) {\n this.caret.style.transform = 'rotate(13deg)';\n }\n else {\n this.caret.style.transform = '';\n }\n }\n return {\n 'topMargin': topMargin,\n 'height': caretHeight\n };\n };\n /**\n * Updates caret to page.\n * @private\n */\n Selection.prototype.updateCaretToPage = function (startPosition, endPage) {\n if (!isNullOrUndefined(endPage)) {\n this.viewer.selectionEndPage = endPage;\n if (this.owner.selection.isEmpty) {\n this.viewer.selectionStartPage = endPage;\n }\n else {\n // tslint:disable-next-line:max-line-length\n var startLineWidget = this.getLineWidgetParagraph(startPosition.offset, startPosition.paragraph.childWidgets[0]);\n //Gets start page.\n var startPage = this.getPage(startLineWidget.paragraph);\n if (!isNullOrUndefined(startPage)) {\n this.viewer.selectionStartPage = startPage;\n }\n }\n }\n this.checkForCursorVisibility();\n };\n /**\n * Gets caret bottom position.\n * @private\n */\n Selection.prototype.getCaretBottom = function (textPosition, isEmptySelection) {\n var bottom = textPosition.location.y;\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var topMargin = 0;\n var bottomMargin = 0;\n var sizeInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = sizeInfo.topMargin;\n bottomMargin = sizeInfo.bottomMargin;\n bottom += sizeInfo.height;\n bottom += topMargin;\n if (!isEmptySelection) {\n bottom += bottomMargin;\n }\n }\n else {\n var index = 0;\n var inlineInfo = textPosition.paragraph.getInline(textPosition.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var topMargin = 0;\n var isItalic = false;\n // tslint:disable-next-line:max-line-length\n var caretHeightInfo = this.getCaretHeight(inline, index, inline.characterFormat, false, topMargin, isItalic);\n topMargin = caretHeightInfo.topMargin;\n isItalic = caretHeightInfo.isItalic;\n bottom += caretHeightInfo.height;\n if (isEmptySelection) {\n bottom -= HelperMethods.convertPointToPixel(textPosition.paragraph.paragraphFormat.afterSpacing);\n }\n }\n return bottom;\n };\n /**\n * Checks for cursor visibility.\n * @param isTouch\n * @private\n */\n Selection.prototype.checkForCursorVisibility = function () {\n this.showCaret();\n };\n // caret implementation ends\n /**\n * Keyboard shortcuts\n * @private\n */\n // tslint:disable:max-func-body-length\n Selection.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n if (ctrl && !shift && !alt) {\n this.viewer.isControlPressed = true;\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.selection.handleTabKey(false, false);\n // }\n // break;\n case 35:\n this.handleControlEndKey();\n break;\n case 36:\n this.handleControlHomeKey();\n break;\n case 37:\n this.handleControlLeftKey();\n break;\n case 38:\n this.handleControlUpKey();\n break;\n case 39:\n this.handleControlRightKey();\n break;\n case 40:\n this.handleControlDownKey();\n break;\n case 65:\n this.owner.selection.selectAll();\n break;\n case 67:\n event.preventDefault();\n this.copy();\n break;\n case 70:\n event.preventDefault();\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n switch (key) {\n case 35:\n this.handleShiftEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleShiftHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleShiftLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleShiftUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleShiftRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleShiftDownKey();\n event.preventDefault();\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 35:\n this.handleControlShiftEndKey();\n break;\n case 36:\n this.handleControlShiftHomeKey();\n break;\n case 37:\n this.handleControlShiftLeftKey();\n break;\n case 38:\n this.handleControlShiftUpKey();\n break;\n case 39:\n this.handleControlShiftRightKey();\n break;\n case 40:\n this.handleControlShiftDownKey();\n break;\n }\n }\n else {\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.handleTabKey(true, false);\n // }\n // break; \n case 33:\n event.preventDefault();\n this.viewer.viewerContainer.scrollTop -= this.viewer.visibleBounds.height;\n break;\n case 34:\n event.preventDefault();\n this.viewer.viewerContainer.scrollTop += this.viewer.visibleBounds.height;\n break;\n case 35:\n this.handleEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleDownKey();\n event.preventDefault();\n break;\n }\n }\n if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.onKeyDownInternal(event, ctrl, shift, alt);\n }\n if (this.owner.searchModule) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.owner.searchModule.searchHighlighters) && this.owner.searchModule.searchHighlighters.length > 0) {\n this.owner.searchModule.searchResults.clear();\n }\n }\n if (event.keyCode === 27 || event.which === 27) {\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n }\n if (this.owner.enableHeaderAndFooter) {\n this.disableHeaderFooter();\n }\n }\n };\n //#region Enable or disable Header Footer\n /**\n * @private\n */\n Selection.prototype.checkAndEnableHeaderFooter = function (point, pagePoint) {\n var page = this.viewer.currentPage;\n if (this.isCursorInsidePageRect(point, page)) {\n if (this.isCursorInHeaderRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.headerWidget);\n }\n if (this.isCursorInFooterRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.footerWidget);\n }\n }\n if (this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n this.viewer.updateTextPositionForSelection(pagePoint, 1);\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInsidePageRect = function (point, page) {\n if ((this.viewer.containerLeft + point.x) >= page.boundingRectangle.x &&\n (this.viewer.containerLeft + point.x) <= (page.boundingRectangle.x + (page.boundingRectangle.width * this.viewer.zoomFactor))) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInHeaderRegion = function (point, page) {\n var pageTop = this.getPageTop(page);\n var headerHeight = 0;\n if (page.headerWidget) {\n headerHeight = (page.headerWidget.y + page.headerWidget.height);\n }\n var height = Math.max(headerHeight, HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin))\n * this.viewer.zoomFactor;\n if ((this.viewer.containerTop + point.y) >= pageTop && (this.viewer.containerTop + point.y) <= pageTop + height) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInFooterRegion = function (point, page) {\n var pageRect = page.boundingRectangle;\n var pageTop = this.getPageTop(page);\n var pageBottom = pageTop + (pageRect.height * this.viewer.zoomFactor);\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = 0;\n if (page.footerWidget) {\n footerHeight = page.footerWidget.height;\n }\n // tslint:disable-next-line:max-line-length\n var height = (pageRect.height -\n Math.max(footerHeight + footerDistance, HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.bottomMargin))) * this.viewer.zoomFactor;\n if ((this.viewer.containerTop + point.y) <= pageBottom && (this.viewer.containerTop + point.y) >= pageTop + height) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.enableHeadersFootersRegion = function (widget) {\n this.owner.enableHeaderAndFooter = true;\n this.updateTextPositionForBlockContainer(widget);\n return true;\n };\n /**\n * @private\n */\n Selection.prototype.updateTextPositionForBlockContainer = function (widget) {\n var block = widget.firstChild;\n if (block instanceof TableWidget) {\n block = this.getFirstBlockInFirstCell(block);\n }\n this.selectParagraph(block, true);\n };\n /**\n * Disable Header footer\n * @private\n */\n Selection.prototype.disableHeaderFooter = function () {\n var page = this.getPage(this.start.paragraph);\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n this.owner.enableHeaderAndFooter = false;\n };\n //#endregion\n /**\n * @private\n */\n Selection.prototype.destroy = function () {\n if (!isNullOrUndefined(this.contextTypeInternal)) {\n this.contextTypeInternal = undefined;\n }\n this.caret = undefined;\n this.contextTypeInternal = undefined;\n this.upDownSelectionLength = undefined;\n this.viewer = undefined;\n this.owner = undefined;\n };\n /**\n * Navigates to the specified bookmark.\n * @param name\n * @param moveToStart\n * @private\n */\n Selection.prototype.navigateBookmark = function (name, moveToStart) {\n var bookmarks = this.viewer.bookmarks;\n if (bookmarks.containsKey(name)) {\n //bookmark start element\n var bookmrkElmnt = bookmarks.get(name);\n var offset = bookmrkElmnt.line.getOffset(bookmrkElmnt, 1);\n var startPosition = new TextPosition(this.viewer.owner);\n startPosition.setPositionParagraph(bookmrkElmnt.line, offset);\n if (moveToStart) {\n this.viewer.selection.selectRange(startPosition, startPosition);\n }\n else {\n //bookmark end element\n var bookmrkEnd = bookmrkElmnt.reference;\n var endoffset = bookmrkEnd.line.getOffset(bookmrkEnd, 0);\n var endPosition = new TextPosition(this.viewer.owner);\n endPosition.setPositionParagraph(bookmrkEnd.line, endoffset);\n //selects the bookmark range\n this.viewer.selection.selectRange(startPosition, endPosition);\n }\n }\n };\n /**\n * Selects the specified bookmark.\n * @param name\n */\n Selection.prototype.selectBookmark = function (name) {\n this.navigateBookmark(name);\n };\n /**\n * Returns the toc field from the selection.\n * @private\n */\n Selection.prototype.getTocField = function () {\n var paragraph = this.start.paragraph;\n var tocPara = undefined;\n while ((paragraph !== undefined && this.isTocStyle(paragraph))) {\n tocPara = paragraph;\n paragraph = paragraph.previousRenderedWidget;\n }\n if (tocPara !== undefined) {\n var lineWidget = tocPara.childWidgets[0];\n if (lineWidget !== undefined) {\n return lineWidget.children[0];\n }\n }\n return undefined;\n };\n /**\n * Returns true if the paragraph has toc style.\n */\n Selection.prototype.isTocStyle = function (paragraph) {\n var style = paragraph.paragraphFormat.baseStyle;\n return (style !== undefined && (style.name.toLowerCase().indexOf('toc') !== -1));\n };\n return Selection;\n}());\nexport { Selection };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { TextElementBox, ParagraphWidget, ListTextElementBox, FieldElementBox } from '../viewer/page';\n/**\n * @private\n */\nvar TextSearch = /** @class */ (function () {\n function TextSearch(owner) {\n this.wordBefore = '\\\\b';\n this.wordAfter = '\\\\b';\n this.isHeader = false;\n this.isFooter = false;\n this.owner = owner;\n }\n Object.defineProperty(TextSearch.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n TextSearch.prototype.find = function (pattern, findOption) {\n return this.findNext(pattern, findOption, '0;0;0');\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findNext = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n this.owner.searchModule.textSearchResults.clearResults();\n var results = this.owner.searchModule.textSearchResults;\n this.findDocument(results, pattern, true, findOption, hierarchicalPosition);\n return results.length > 0, results.currentSearchResult;\n };\n TextSearch.prototype.stringToRegex = function (textToFind, option) {\n if (textToFind.indexOf('\\\\') > -1) {\n textToFind = textToFind.split('\\\\').join('\\\\\\\\');\n }\n if (textToFind.indexOf('.') > -1) {\n textToFind = '\\\\' + textToFind;\n }\n if (option === 'WholeWord' || option === 'CaseSensitiveWholeWord') {\n textToFind = this.wordBefore + textToFind + this.wordAfter;\n }\n return new RegExp(textToFind, (option === 'CaseSensitive' || option === 'CaseSensitiveWholeWord') ? 'g' : 'ig');\n };\n TextSearch.prototype.isPatternEmpty = function (pattern) {\n var wordEmpty = this.wordBefore + this.wordAfter;\n var patternRegExp = pattern.toString();\n return (patternRegExp.length === 0 || patternRegExp === wordEmpty);\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findAll = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n this.owner.searchModule.textSearchResults.clearResults();\n var results = this.owner.searchModule.textSearchResults;\n this.findDocument(results, pattern, false, findOption, hierarchicalPosition);\n if (results.length > 0 && results.currentIndex < 0) {\n results.currentIndex = 0;\n }\n if (!isNullOrUndefined(results.currentSearchResult)) {\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger('searchResultsChange', eventArgs);\n return results;\n }\n return undefined;\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findDocument = function (results, pattern, isFirstMatch, findOption, hierachicalPosition) {\n if (this.isPatternEmpty(pattern)) {\n return;\n }\n if (findOption === undefined) {\n findOption = 'None';\n }\n var inline = undefined;\n var selectionEnd = undefined;\n if (hierachicalPosition !== undefined) {\n selectionEnd = this.owner.selection.end;\n }\n if (hierachicalPosition !== undefined && isFirstMatch && selectionEnd !== undefined && selectionEnd.paragraph !== undefined) {\n if (selectionEnd.paragraph instanceof ParagraphWidget) {\n var indexInInline = 0;\n // tslint:disable-next-line:max-line-length \n // IndexInInline Handled specifically for simple find operation to start from starting point\n var inlineElement = selectionEnd.currentWidget.getInline(this.owner.selection.start.offset, indexInInline);\n inline = inlineElement.element;\n indexInInline = inlineElement.index;\n if (!isNullOrUndefined(inline)) {\n var nextParagraphWidget = undefined;\n // tslint:disable-next-line:max-line-length \n nextParagraphWidget = this.findInline(inline, pattern, findOption, indexInInline, isFirstMatch, results, selectionEnd);\n while (results.length === 0 && !isNullOrUndefined(nextParagraphWidget)) {\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.childWidgets.length === 0) {\n // tslint:disable-next-line:max-line-length \n nextParagraphWidget = this.owner.selection.getNextParagraph(nextParagraphWidget.containerWidget);\n }\n if (isNullOrUndefined(nextParagraphWidget)) {\n break;\n }\n var lineWidget = nextParagraphWidget.childWidgets[0];\n if (lineWidget.children[0] instanceof ListTextElementBox) {\n inline = (lineWidget.children[2] instanceof TextElementBox) ? lineWidget.children[2] : undefined;\n }\n else {\n inline = lineWidget.children[0];\n }\n if (isNullOrUndefined(inline)) {\n break;\n }\n // tslint:disable-next-line:max-line-length \n nextParagraphWidget = this.findInline(inline, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n }\n if (results.length > 0) {\n return;\n }\n }\n }\n }\n var section;\n section = this.viewer.pages[0].bodyWidgets[0];\n while (!isNullOrUndefined(section) && section.childWidgets.length === 0) {\n section = section.nextWidget;\n }\n if (isNullOrUndefined(section) || section.childWidgets.length === 0) {\n return;\n }\n this.isHeader = false;\n this.isFooter = false;\n this.findInlineText(section, pattern, findOption, isFirstMatch, results, selectionEnd);\n for (var i = 0; i < this.viewer.pages.length; i++) {\n var headerWidget = this.viewer.pages[i].headerWidget;\n if (!isNullOrUndefined(headerWidget)) {\n this.isHeader = true;\n this.isFooter = false;\n this.findInlineText(headerWidget, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n }\n for (var i = 0; i < this.viewer.pages.length; i++) {\n var footerWidget = this.viewer.pages[i].footerWidget;\n if (!isNullOrUndefined(footerWidget)) {\n this.isHeader = false;\n this.isFooter = true;\n this.findInlineText(footerWidget, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n }\n if (isFirstMatch && !isNullOrUndefined(results) && results.length > 0) {\n return;\n }\n };\n // tslint:disable-next-line:max-line-length\n TextSearch.prototype.findInlineText = function (section, pattern, findOption, isFirstMatch, results, selectionEnd) {\n var paragraphWidget = this.owner.selection.getFirstParagraphBlock(section.childWidgets[0]);\n // tslint:disable-next-line:max-line-length \n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length === 1 && paragraphWidget.childWidgets[0].children.length === 0) {\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n }\n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length > 0) {\n var inlineElement = paragraphWidget.childWidgets[0];\n var inlineEle = inlineElement.children[0];\n if (isNullOrUndefined(inlineEle)) {\n break;\n }\n this.findInline(inlineEle, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n // tslint:disable-next-line:max-line-length \n while (!isNullOrUndefined(paragraphWidget) && (paragraphWidget.childWidgets.length === 1) && paragraphWidget.childWidgets[0].children.length === 0) {\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n }\n }\n if (isFirstMatch && !isNullOrUndefined(results) && results.length > 0) {\n return;\n }\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findInline = function (inlineElement, pattern, option, indexInInline, isFirstMatch, results, selectionEnd) {\n var inlines = inlineElement;\n var stringBuilder = '';\n var spans = new Dictionary();\n //tslint:disable no-constant-condition\n do {\n // tslint:disable-next-line:max-line-length \n if (inlineElement instanceof TextElementBox && (!isNullOrUndefined(inlineElement.text) && inlineElement.text !== '')) {\n spans.add(inlineElement, stringBuilder.length);\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (inlineElement === inlines) {\n stringBuilder = stringBuilder + (inlineElement.text.substring(indexInInline));\n }\n else {\n stringBuilder = stringBuilder + (inlineElement.text);\n }\n }\n else if (inlineElement instanceof FieldElementBox) {\n var fieldBegin = inlineElement;\n if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n // tslint:disable-next-line:max-line-length \n inlineElement = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n if (!isNullOrUndefined(inlineElement) && isNullOrUndefined(inlineElement.nextNode)) {\n break;\n }\n if (!isNullOrUndefined(inlineElement)) {\n inlineElement = inlineElement.nextNode;\n }\n } while (true);\n var text = stringBuilder.toString();\n var matches = [];\n var matchObject;\n //tslint:disable no-conditional-assignment\n while (!isNullOrUndefined(matchObject = pattern.exec(text))) {\n matches.push(matchObject);\n }\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i];\n var result = results.addResult();\n var spanKeys = spans.keys;\n for (var i_1 = 0; i_1 < spanKeys.length; i_1++) {\n var span = spanKeys[i_1];\n var startIndex = spans.get(span);\n var spanLength = span.length;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n spanLength -= indexInInline;\n }\n if (isNullOrUndefined(result.start) && match.index < startIndex + spanLength) {\n var index = match.index - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n var offset = (span.line).getOffset(span, index);\n result.start = this.getTextPosition(span.line, offset.toString());\n result.start.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n result.start.setPositionParagraph(span.line, offset);\n }\n if (match.index + match[0].length <= startIndex + spanLength) {\n var index = (match.index + match[0].length) - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n var offset = (span.line).getOffset(span, index);\n result.end = this.getTextPosition(span.line, offset.toString());\n result.end.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n result.end.setPositionParagraph(span.line, offset);\n break;\n }\n }\n result.isHeader = this.isHeader;\n result.isFooter = this.isFooter;\n if (isFirstMatch) {\n results.currentIndex = 0;\n return undefined;\n }\n else if (results.currentIndex < 0 && selectionEnd.isExistBefore(result.start)) {\n results.currentIndex = results.indexOf(result);\n }\n }\n // tslint:disable-next-line:max-line-length\n var paragraphWidget = this.owner.selection.getNextParagraphBlock(inlineElement.line.paragraph);\n return paragraphWidget;\n };\n TextSearch.prototype.getTextPosition = function (lineWidget, hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var index = textPosition.getHierarchicalIndex(lineWidget, hierarchicalIndex);\n textPosition.setPositionForCurrentIndex(index);\n return textPosition;\n };\n return TextSearch;\n}());\nexport { TextSearch };\n/**\n * @private\n */\nvar SearchWidgetInfo = /** @class */ (function () {\n function SearchWidgetInfo(left, width) {\n this.leftInternal = 0;\n this.widthInternal = 0;\n this.leftInternal = left;\n this.widthInternal = width;\n }\n Object.defineProperty(SearchWidgetInfo.prototype, \"left\", {\n get: function () {\n return this.leftInternal;\n },\n set: function (value) {\n this.leftInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SearchWidgetInfo.prototype, \"width\", {\n get: function () {\n return this.widthInternal;\n },\n set: function (value) {\n this.widthInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n return SearchWidgetInfo;\n}());\nexport { SearchWidgetInfo };\n","/**\n * @private\n */\nvar TextSearchResult = /** @class */ (function () {\n function TextSearchResult(owner) {\n this.startIn = undefined;\n this.endIn = undefined;\n this.owner = owner;\n }\n Object.defineProperty(TextSearchResult.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"start\", {\n get: function () {\n return this.startIn;\n },\n set: function (value) {\n this.startIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"end\", {\n get: function () {\n return this.endIn;\n },\n set: function (value) {\n this.endIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"text\", {\n get: function () {\n return this.viewer.selection.getTextInternal(this.start, this.end, false);\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResult.prototype.destroy = function () {\n this.start = undefined;\n this.end = undefined;\n };\n return TextSearchResult;\n}());\nexport { TextSearchResult };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextSearchResult } from './text-search-result';\n/**\n * @private\n */\nvar TextSearchResults = /** @class */ (function () {\n function TextSearchResults(owner) {\n this.currentIndex = -1;\n this.owner = owner;\n }\n Object.defineProperty(TextSearchResults.prototype, \"length\", {\n get: function () {\n if (this.innerList === undefined) {\n return 0;\n }\n return this.innerList.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResults.prototype, \"currentSearchResult\", {\n get: function () {\n if (this.innerList === undefined || this.currentIndex < 0 || this.currentIndex >= this.length) {\n return undefined;\n }\n return this.innerList[this.currentIndex];\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResults.prototype.addResult = function () {\n var textSearchResult = new TextSearchResult(this.owner);\n if (isNullOrUndefined(this.innerList)) {\n this.innerList = [];\n }\n this.innerList.push(textSearchResult);\n return textSearchResult;\n };\n TextSearchResults.prototype.clearResults = function () {\n this.currentIndex = -1;\n if (!isNullOrUndefined(this.innerList)) {\n for (var i = this.innerList.length - 1; i >= 0; i--) {\n this.innerList[i].destroy();\n this.innerList.splice(i, 1);\n }\n }\n };\n TextSearchResults.prototype.indexOf = function (result) {\n if (isNullOrUndefined(this.innerList)) {\n return -1;\n }\n return this.innerList.indexOf(result);\n };\n TextSearchResults.prototype.destroy = function () {\n if (!isNullOrUndefined(this.innerList)) {\n this.clearResults();\n }\n this.innerList = undefined;\n };\n return TextSearchResults;\n}());\nexport { TextSearchResults };\n","/**\n * Search Result info\n */\nvar SearchResults = /** @class */ (function () {\n /**\n * @private\n */\n function SearchResults(search) {\n this.searchModule = search;\n }\n Object.defineProperty(SearchResults.prototype, \"length\", {\n /**\n * Gets the length of search results.\n */\n get: function () {\n return this.searchModule.textSearchResults.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SearchResults.prototype, \"index\", {\n /**\n * Gets the index of current search result.\n */\n get: function () {\n return this.searchModule.textSearchResults.currentIndex;\n },\n /**\n * Set the index of current search result.\n */\n set: function (value) {\n if (this.length === 0 || value < 0 || value > this.searchModule.textSearchResults.length - 1) {\n return;\n }\n this.searchModule.textSearchResults.currentIndex = value;\n this.navigate(value);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Replace text in current search result.\n * @param textToReplace text to replace\n * @private\n */\n SearchResults.prototype.replace = function (textToReplace) {\n if (this.index === -1) {\n return;\n }\n this.searchModule.replaceInternal(textToReplace);\n };\n /**\n * Replace all the instance of search result.\n * @param textToReplace text to replace\n */\n SearchResults.prototype.replaceAll = function (textToReplace) {\n if (this.index === -1) {\n return;\n }\n this.searchModule.replaceAllInternal(textToReplace);\n };\n /**\n * @private\n */\n SearchResults.prototype.navigate = function (index) {\n this.searchModule.navigate(this.searchModule.textSearchResults.currentSearchResult);\n this.searchModule.highlight(this.searchModule.textSearchResults);\n };\n /**\n * Clears all the instance of search result.\n */\n SearchResults.prototype.clear = function () {\n this.searchModule.textSearchResults.clearResults();\n this.searchModule.clearSearchHighlight();\n this.searchModule.viewer.renderVisiblePages();\n };\n return SearchResults;\n}());\nexport { SearchResults };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { TextElementBox, FieldElementBox } from '../viewer/page';\nimport { SearchWidgetInfo } from './text-search';\nimport { TextSearch } from '../search/text-search';\nimport { TextSearchResults } from '../search/text-search-results';\nimport { SearchResults } from './search-results';\n/**\n * Search module\n */\nvar Search = /** @class */ (function () {\n /**\n * @private\n */\n function Search(owner) {\n /**\n * @private\n */\n this.searchHighlighters = undefined;\n this.isHandledOddPageHeader = undefined;\n this.isHandledEvenPageHeader = undefined;\n this.isHandledOddPageFooter = undefined;\n this.isHandledEvenPageFooter = undefined;\n this.owner = owner;\n this.searchHighlighters = new Dictionary();\n this.textSearch = new TextSearch(this.owner);\n this.textSearchResults = new TextSearchResults(this.owner);\n this.searchResultsInternal = new SearchResults(this);\n }\n Object.defineProperty(Search.prototype, \"viewer\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Search.prototype, \"searchResults\", {\n /**\n * Gets the search results object.\n */\n get: function () {\n return this.searchResultsInternal;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get the module name.\n */\n Search.prototype.getModuleName = function () {\n return 'Search';\n };\n //#region Find & Find All\n /**\n * Finds the immediate occurrence of specified text from cursor position in the document.\n * @param {string} text\n * @param {FindOption} findOption? - Default value of ‘findOptions’ parameter is 'None'.\n * @private\n */\n Search.prototype.find = function (text, findOptions) {\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var result = this.textSearch.find(text, findOptions);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n }\n };\n /**\n * Finds all occurrence of specified text in the document.\n * @param {string} text\n * @param {FindOption} findOption? - Default value of ‘findOptions’ parameter is 'None'.\n */\n Search.prototype.findAll = function (text, findOptions) {\n if (isNullOrUndefined(text || text === '')) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var results = this.textSearch.findAll(text, findOptions);\n if (!isNullOrUndefined(results) && results.length > 0) {\n this.navigate(results.innerList[results.currentIndex]);\n this.highlight(results);\n }\n };\n //#endregion\n //#region Replace and Replace All \n /**\n * Replace the searched string with specified string\n * @param {string} replaceText\n * @param {TextSearchResult} result\n * @param {TextSearchResults} results\n * @private\n */\n Search.prototype.replace = function (replaceText, result, results) {\n if (isNullOrUndefined(this.viewer.owner) || this.viewer.owner.isReadOnlyMode || isNullOrUndefined(results)) {\n return 0;\n }\n if (!isNullOrUndefined(this.viewer)) {\n this.clearSearchHighlight();\n }\n this.navigate(result);\n var endPosition = this.viewer.selection.start;\n var index = results.indexOf(result);\n if (index < 0) {\n return 0;\n }\n this.owner.editorModule.insertText(replaceText, true);\n var endTextPosition = result.end;\n var startPosition = new TextPosition(this.viewer.owner);\n startPosition.setPositionParagraph(endTextPosition.currentWidget, endPosition.offset - replaceText.length);\n this.viewer.selection.selectRange(endPosition, startPosition);\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger('searchResultsChange', eventArgs);\n return 1;\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n * @param {string} textToFind\n * @param {string} textToReplace\n * @param {FindOption} findOptions? - Default value of ‘findOptions’ parameter is FindOption.None.\n * @private\n */\n Search.prototype.replaceInternal = function (textToReplace, findOptions) {\n if ((textToReplace === '' || isNullOrUndefined(textToReplace))) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var textToFind = this.textSearchResults.currentSearchResult.text;\n var pattern = this.viewer.owner.searchModule.textSearch.stringToRegex(textToFind, findOptions);\n var index = this.owner.selection.end.getHierarchicalIndexInternal();\n var result = this.viewer.owner.searchModule.textSearch.findNext(pattern, findOptions, index);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n this.textSearchResults.addResult();\n this.textSearchResults.innerList[0] = result;\n this.replace(textToReplace, result, this.textSearchResults);\n index = this.owner.selection.end.getHierarchicalIndexInternal();\n result = this.textSearch.findNext(textToFind, findOptions, index);\n if (result) {\n this.textSearchResults.addResult();\n this.textSearchResults.innerList[0] = result;\n this.navigate(result);\n }\n }\n };\n /**\n * Replace all the searched string with specified string\n * @param {string} replaceText\n * @param {TextSearchResults} results\n * @private\n */\n Search.prototype.replaceAll = function (replaceText, results) {\n if (isNullOrUndefined(this.viewer.owner) || this.viewer.owner.isReadOnlyMode || isNullOrUndefined(results)) {\n return 0;\n }\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(this.owner.selection, 'ReplaceAll');\n }\n var count = results.length;\n this.viewer.owner.isLayoutEnabled = false;\n for (var i = count - 1; i >= 0; i--) {\n this.navigate(results.innerList[i]);\n this.owner.editorModule.insertText(replaceText, true);\n results.innerList[i].destroy();\n }\n if (this.owner.editorHistory && !isNullOrUndefined(this.owner.editorHistory.currentHistoryInfo)) {\n this.owner.editorHistory.updateComplexHistory();\n }\n else {\n this.owner.editorModule.updateComplexWithoutHistory(2);\n }\n this.searchResults.clear();\n return count;\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n * @param {string} textToFind\n * @param {string} textToReplace\n * @param {FindOption} findOptions? - Default value of ‘findOptions’ parameter is FindOption.None.\n * @private\n */\n Search.prototype.replaceAllInternal = function (textToReplace, findOptions) {\n if ((textToReplace === '' || isNullOrUndefined(textToReplace))) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n if (this.textSearchResults.length > 0) {\n this.navigate(this.textSearchResults.innerList[this.textSearchResults.currentIndex]);\n this.highlight(this.textSearchResults);\n this.replaceAll(textToReplace, this.textSearchResults);\n }\n };\n //#endregion\n //#region Highlight Search Result\n /**\n * @private\n */\n Search.prototype.navigate = function (textSearchResult) {\n if (textSearchResult) {\n var start = textSearchResult.start;\n var end = textSearchResult.end;\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.owner.selection) && !isNullOrUndefined(start) &&\n !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n this.owner.selection.selectRange(start, end);\n }\n }\n };\n /**\n * @private\n */\n Search.prototype.highlight = function (textSearchResults) {\n this.searchHighlighters = new Dictionary();\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[i];\n this.highlightResult(result);\n }\n this.viewer.renderVisiblePages();\n };\n /**\n * @private\n */\n Search.prototype.highlightResult = function (result) {\n this.highlightSearchResult(result.start.paragraph, result.start, result.end);\n };\n /**\n * Highlight search result\n * @private\n */\n Search.prototype.highlightSearchResult = function (paragraph, start, end) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = null;\n var endElement = null;\n // tslint:disable-next-line:max-line-length\n var lineWidget = this.viewer.selection.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n selectionStartIndex = lineWidget.index;\n startElement = lineWidget.element;\n var startLineWidget = startElement ? startElement.line : paragraph.childWidgets[0];\n var endLine = this.viewer.selection.getEndLineWidget(end, endElement, selectionEndIndex);\n selectionEndIndex = endLine.index;\n endElement = endLine.element;\n var endLineWidget = endElement ? endElement.line :\n end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n var top = this.viewer.selection.getTop(startLineWidget);\n var left = this.viewer.selection.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //find result ends in current line.\n var right = this.viewer.selection.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n this.createHighlightBorder(startLineWidget, right - left, left, top);\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n if (paragraph !== startLineWidget.paragraph) {\n paragraph = startLineWidget.paragraph;\n }\n // tslint:disable-next-line:max-line-length\n this.createHighlightBorder(startLineWidget, this.viewer.selection.getWidth(startLineWidget, true) - (left - startLineWidget.paragraph.x), left, top);\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or search result end.\n var startParagraphWidget = void 0;\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n if (paragraph === startLineWidget.paragraph) {\n lineIndex += 1;\n }\n this.highlightSearchResultParaWidget(paragraph, lineIndex, endLineWidget, endElement, selectionEndIndex);\n if (paragraph === endLineWidget.paragraph) {\n return;\n }\n else {\n lineIndex = 0;\n }\n }\n }\n }\n };\n /**\n * @private\n */\n Search.prototype.createHighlightBorder = function (lineWidget, width, left, top) {\n var findHighLight = this.addSearchHighlightBorder(lineWidget);\n var page = this.viewer.owner.selection.getPage(lineWidget.paragraph);\n var pageTop = page.boundingRectangle.y;\n var pageLeft = page.boundingRectangle.x;\n findHighLight.left = Math.ceil(left);\n top = Math.ceil(top);\n findHighLight.width = Math.floor(width);\n var height = Math.floor(lineWidget.height);\n var context = this.viewer.containerContext;\n };\n /**\n * Adds search highlight border.\n * @private\n */\n Search.prototype.addSearchHighlightBorder = function (lineWidget) {\n var highlighters = undefined;\n if (this.searchHighlighters.containsKey(lineWidget)) {\n highlighters = this.searchHighlighters.get(lineWidget);\n }\n else {\n highlighters = [];\n this.searchHighlighters.add(lineWidget, highlighters);\n }\n var searchHighlight = new SearchWidgetInfo(0, 0);\n highlighters.push(searchHighlight);\n return searchHighlight;\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Search.prototype.highlightSearchResultParaWidget = function (widget, startIndex, endLine, endElement, endIndex) {\n var top = 0;\n for (var j = startIndex; j < widget.childWidgets.length; j++) {\n var lineWidget = widget.childWidgets[j];\n if (j === startIndex) {\n top = this.viewer.selection.getTop(lineWidget);\n }\n var left = this.viewer.selection.getLeft(lineWidget);\n if (lineWidget === endLine) {\n //Search result ends in current line.\n var right = this.viewer.selection.getLeftInternal(endLine, endElement, endIndex);\n this.createHighlightBorder(lineWidget, right - left, left, top);\n return;\n }\n this.createHighlightBorder(lineWidget, this.viewer.selection.getWidth(lineWidget, true) - (left - widget.x), left, top);\n top += lineWidget.height;\n }\n };\n //#endregion\n //#region Get find result view\n /**\n * @private\n */\n Search.prototype.addSearchResultItems = function (result) {\n if (isNullOrUndefined(result) || result === '') {\n return;\n }\n if (isNullOrUndefined(this.owner.findResultsList)) {\n this.owner.findResultsList = [];\n }\n this.owner.findResultsList.push(result);\n };\n /**\n * @private\n */\n Search.prototype.addFindResultView = function (textSearchResults) {\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[i];\n this.addFindResultViewForSearch(result);\n }\n this.isHandledOddPageHeader = true;\n this.isHandledOddPageFooter = true;\n this.isHandledEvenPageHeader = true;\n this.isHandledEvenPageFooter = true;\n };\n /**\n * @private\n */\n // tslint:disable:max-func-body-length\n Search.prototype.addFindResultViewForSearch = function (result) {\n if (result.start != null && result.end != null && result.start.paragraph != null && result.end.paragraph != null) {\n var prefixText = void 0;\n var suffixtext = void 0;\n var currentText = void 0;\n var startIndex = 0;\n var inlineObj = result.start.currentWidget.getInline(result.start.offset, startIndex);\n var inline = inlineObj.element;\n startIndex = inlineObj.index;\n var prefix = '';\n var lastIndex = 0;\n if (inline instanceof FieldElementBox) {\n var elementInfo = this.owner.selection.getRenderedInline(inline, startIndex);\n if (elementInfo.element.nextNode instanceof TextElementBox) {\n inline = elementInfo.element.nextNode;\n startIndex = elementInfo.index;\n }\n else {\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n }\n var boxObj = this.owner.selection.getElementBoxInternal(inline, startIndex);\n var box = boxObj.element;\n startIndex = boxObj.index;\n if (box != null) {\n if (box instanceof TextElementBox && startIndex > 0) {\n prefix = box.text.substring(0, startIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n // tslint:disable-next-line:max-line-length\n lastIndex = prefix.lastIndexOf(' ');\n while (lastIndex < 0 && boxIndex > 0 && box.line.children[boxIndex - 1] instanceof TextElementBox) {\n prefix = box.line.children[boxIndex - 1].text + prefix;\n boxIndex--;\n lastIndex = prefix.lastIndexOf(' ');\n }\n }\n var shiftIndex = prefix.lastIndexOf('\\v');\n if (shiftIndex > 0) {\n prefix = prefix.substring(0, shiftIndex);\n }\n else {\n lastIndex = prefix.lastIndexOf(' ');\n prefixText = lastIndex < 0 ? prefix : prefix.substring(lastIndex + 1);\n }\n currentText = result.text;\n var endIndex = 0;\n var endInlineObj = result.end.currentWidget.getInline(result.end.offset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n suffixtext = '';\n //Checks prefix element box is empty\n if (boxObj != null) {\n // Gets the element box using endIndex of the text and set as suffix\n boxObj = this.owner.selection.getElementBoxInternal(endInline, endIndex);\n box = boxObj.element;\n endIndex = boxObj.index;\n }\n //Checks suffix element box is empty.\n if (box != null) {\n if (box instanceof TextElementBox && endIndex < box.length) {\n suffixtext = box.text.substring(endIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n // tslint:disable-next-line:max-line-length\n while (boxIndex + 1 < box.line.children.length && (box.line.children[boxIndex + 1] instanceof TextElementBox) || (box.line.children[boxIndex + 1] instanceof FieldElementBox)) {\n if (box.line.children[boxIndex + 1] instanceof FieldElementBox) {\n boxIndex = boxIndex + 2;\n }\n else {\n suffixtext = suffixtext + box.line.children[boxIndex + 1].text;\n boxIndex = boxIndex + 1;\n }\n }\n }\n lastIndex = suffixtext.lastIndexOf(' ');\n suffixtext = suffixtext === '\\v' ? suffixtext = '' : suffixtext;\n var headerFooterString = '';\n if (result.isHeader) {\n headerFooterString = '' + 'Header' + ': ' + '';\n }\n else if (result.isFooter) {\n headerFooterString = '' + 'Footer' + ': ' + '';\n }\n else {\n headerFooterString = '';\n headerFooterString = '';\n this.isHandledOddPageHeader = true;\n this.isHandledEvenPageHeader = true;\n this.isHandledOddPageFooter = true;\n this.isHandledEvenPageFooter = true;\n }\n var listElement = '';\n var page = result.viewer.selection.getPage(result.start.paragraph);\n if (isNullOrUndefined(this.isHandledEvenPageHeader) && isNullOrUndefined(this.isHandledEvenPageFooter)) {\n this.isHandledEvenPageHeader = true;\n this.isHandledEvenPageFooter = true;\n }\n else if (isNullOrUndefined(this.isHandledOddPageHeader) && isNullOrUndefined(this.isHandledOddPageFooter)) {\n this.isHandledOddPageHeader = true;\n this.isHandledOddPageFooter = true;\n }\n if (result.isHeader) {\n if (page.headerWidget.headerFooterType === 'FirstPageHeader' && page.bodyWidgets[0].sectionFormat.differentFirstPage) {\n // tslint:disable-next-line:max-line-length\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n else if (page.headerWidget.headerFooterType === 'EvenHeader' && this.isHandledEvenPageHeader) {\n // tslint:disable-next-line:max-line-length\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledEvenPageHeader = false;\n // tslint:disable-next-line:max-line-length\n }\n else if (page.headerWidget.headerFooterType === 'OddHeader' && this.isHandledOddPageHeader) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledOddPageHeader = false;\n }\n }\n else if (result.isFooter) {\n if (page.footerWidget.headerFooterType === 'FirstPageFooter' && page.bodyWidgets[0].sectionFormat.differentFirstPage) {\n // tslint:disable-next-line:max-line-length\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n else if (page.footerWidget.headerFooterType === 'EvenFooter' && this.isHandledEvenPageFooter) {\n // tslint:disable-next-line:max-line-length\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledEvenPageFooter = false;\n // tslint:disable-next-line:max-line-length\n }\n else if (page.footerWidget.headerFooterType === 'OddFooter' && this.isHandledOddPageFooter) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledOddPageFooter = false;\n }\n // tslint:disable-next-line:max-line-length\n }\n else if (!result.isHeader && !result.isFooter) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n this.addSearchResultItems(listElement);\n }\n };\n //#endregion\n /**\n * Clears search highlight.\n * @private\n */\n Search.prototype.clearSearchHighlight = function () {\n if (!isNullOrUndefined(this.searchHighlighters)) {\n this.searchHighlighters.clear();\n this.searchHighlighters = undefined;\n }\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger('searchResultsChange', eventArgs);\n };\n /**\n * @private\n */\n Search.prototype.destroy = function () {\n if (this.textSearchResults) {\n this.textSearchResults.destroy();\n }\n };\n return Search;\n}());\nexport { Search };\n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * Options Pane class.\n */\nvar OptionsPane = /** @class */ (function () {\n /**\n * Constructor for Options pane module\n * @param {LayoutViewer} layoutViewer\n * @private\n */\n function OptionsPane(layoutViewer) {\n var _this = this;\n /**\n * @private\n */\n this.isOptionsPaneShow = false;\n this.findOption = 'None';\n this.matchCase = undefined;\n this.wholeWord = undefined;\n // private regular: CheckBox = undefined;\n this.searchText = 'Navigation';\n this.resultsText = 'Results';\n this.messageDivText = 'No matches';\n this.replaceButtonText = 'Replace';\n this.replaceAllButtonText = 'Replace All';\n this.focusedIndex = -1;\n this.focusedElement = [];\n this.isOptionsPane = true;\n this.replacePaneText = 'Replace';\n this.findPaneText = 'Find';\n this.matchDivReplaceText = 'No matches';\n /**\n * @private\n */\n this.tabInstance = undefined;\n /**\n * @private\n */\n this.isReplace = false;\n /**\n * Gets selected tab item which tab is selected.\n * @param {SelectEventArgs} args - Specifies which tab will be opened.\n * @private\n */\n this.selectedTabItem = function (args) {\n if (args.previousIndex !== args.selectedIndex) {\n var previousTab = document.querySelector('#e-content_' + args.previousIndex);\n var nextTab = document.querySelector('#e-content_' + args.selectedIndex);\n nextTab.insertBefore(previousTab.firstElementChild, nextTab.firstChild);\n }\n if (args.selectedIndex === 0 && !isNullOrUndefined(document.querySelector('#e-content_' + args.selectedIndex))) {\n _this.isOptionsPane = true;\n _this.onFindPane();\n }\n if (args.selectedIndex === 1 && !isNullOrUndefined(document.querySelector('#e-content_' + args.selectedIndex))) {\n _this.isOptionsPane = false;\n _this.onReplacePane();\n }\n };\n this.searchOptionChange = function () {\n _this.clearSearchResultItems();\n _this.viewer.owner.searchModule.clearSearchHighlight();\n var inputText = _this.searchInput.value;\n if (inputText === '') {\n return;\n }\n var pattern = _this.viewer.owner.searchModule.textSearch.stringToRegex(inputText, _this.findOption);\n var endSelection = _this.viewer.selection.end;\n var selectionIndex = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.viewer.owner.searchModule.textSearch.findAll(pattern, _this.findOption, selectionIndex);\n if (_this.results != null && _this.results.length > 0) {\n _this.navigateSearchResult();\n }\n else {\n _this.viewer.renderVisiblePages();\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Apply find option based on whole words value.\n * @param {ChangeEventArgs} args - Specifies the search options value.\n * @private\n */\n this.wholeWordsChange = function (args) {\n if (_this.matchInput.checked && _this.wholeInput.checked) {\n _this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (_this.matchInput.checked && !(_this.wholeInput.checked)) {\n _this.findOption = 'CaseSensitive';\n }\n else if (!(_this.matchInput.checked) && _this.wholeInput.checked) {\n _this.findOption = 'WholeWord';\n }\n else {\n _this.findOption = 'None';\n }\n _this.searchOptionChange();\n };\n /**\n * Apply find option based on match value.\n * @param {ChangeEventArgs} args - Specifies the search options value.\n * @private\n */\n this.matchChange = function (args) {\n if (_this.matchInput.checked && _this.wholeInput.checked) {\n _this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (!(_this.matchInput.checked) && _this.wholeInput.checked) {\n _this.findOption = 'WholeWord';\n }\n else if (_this.matchInput.checked && !(_this.wholeInput.checked)) {\n _this.findOption = 'CaseSensitive';\n }\n else {\n _this.findOption = 'None';\n }\n _this.searchOptionChange();\n };\n /**\n * Apply find options based on regular value.\n * @param {ChangeEventArgs} args - Specifies the search options value.\n * @private\n */\n // public regularChange = (args: ChangeEventArgs): void => {\n // if (args.checked) {\n // this.matchCase.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.matchCase.checked = false;\n // this.wholeWord.checked = false;\n // this.findOption = 'None';\n // this.onKeyDownInternal();\n // } else {\n // this.matchCase.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // }\n // }\n // tslint:enable:no-any \n /**\n * Binding events from the element when optins pane creation.\n * @private\n */\n this.onWireEvents = function () {\n _this.searchIcon.addEventListener('click', _this.searchIconClickInternal);\n _this.navigateToNextResult.addEventListener('click', _this.navigateNextResultButtonClick);\n _this.navigateToPreviousResult.addEventListener('click', _this.navigatePreviousResultButtonClick);\n _this.searchInput.addEventListener('keydown', _this.onKeyDown);\n _this.searchInput.addEventListener('keyup', _this.onEnableDisableReplaceButton);\n _this.resultsListBlock.addEventListener('click', _this.resultListBlockClick);\n _this.closeButton.addEventListener('click', _this.close);\n _this.replaceButton.addEventListener('click', _this.onReplaceButtonClick);\n _this.replaceAllButton.addEventListener('click', _this.onReplaceAllButtonClick);\n };\n /**\n * Enable find pane only.\n * @private\n */\n this.onFindPane = function () {\n _this.replaceDiv.style.display = 'none';\n _this.occurrenceDiv.style.display = 'none';\n if (!isNullOrUndefined(_this.results) && _this.results.length === 0) {\n _this.resultsListBlock.innerHTML = '';\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n }\n _this.resultsListBlock.style.height = _this.resultsListBlock.offsetHeight + _this.replaceTabContentDiv.offsetHeight + 'px';\n _this.replaceTabContentDiv.style.display = 'none';\n _this.findDiv.style.display = 'block';\n _this.messageDiv.style.display = 'block';\n _this.focusedElement = [];\n // tslint:disable-next-line:max-line-length\n _this.focusedElement.push(_this.closeButton, _this.findTabButtonHeader, _this.replaceTabButtonHeader, _this.searchInput, _this.searchIcon, _this.navigateToPreviousResult, _this.navigateToNextResult, _this.matchInput, _this.wholeInput);\n _this.focusedIndex = 3;\n _this.searchInput.select();\n _this.getMessageDivHeight();\n };\n this.onEnableDisableReplaceButton = function () {\n if (_this.searchInput.value.length !== 0) {\n _this.replaceButton.disabled = false;\n _this.replaceAllButton.disabled = false;\n }\n else {\n _this.replaceButton.disabled = true;\n _this.replaceAllButton.disabled = true;\n }\n };\n /**\n * Enable replace pane only.\n * @private\n */\n this.onReplacePane = function () {\n _this.findDiv.style.display = 'block';\n _this.replaceDiv.style.display = 'block';\n _this.replaceTabContentDiv.style.display = 'block';\n _this.resultsListBlock.style.height = _this.resultsListBlock.offsetHeight - _this.replaceTabContentDiv.offsetHeight + 'px';\n _this.isOptionsPane = false;\n if (_this.searchInput.value.length !== 0) {\n _this.replaceButton.disabled = false;\n _this.replaceAllButton.disabled = false;\n }\n else {\n _this.replaceButton.disabled = true;\n _this.replaceAllButton.disabled = true;\n }\n _this.focusedElement = [];\n // tslint:disable-next-line:max-line-length\n _this.focusedElement.push(_this.closeButton, _this.findTabButtonHeader, _this.replaceTabButtonHeader, _this.searchInput, _this.searchIcon, _this.navigateToPreviousResult, _this.navigateToNextResult, _this.matchInput, _this.wholeInput, _this.replaceWith, _this.replaceButton, _this.replaceAllButton);\n _this.focusedIndex = 9;\n if (_this.searchInput.value === '') {\n _this.searchInput.select();\n }\n else {\n _this.replaceWith.select();\n }\n _this.getMessageDivHeight();\n };\n /**\n * Fires on key down on options pane.\n * @param {KeyboardEvent} event - Specifies the focus of current element.\n * @private\n */\n this.onKeyDownOnOptionPane = function (event) {\n // if (event.keyCode === 70) {\n // event.preventDefault();\n // return;\n // }\n if (event.keyCode === 9) {\n event.preventDefault();\n var focusIndex = undefined;\n if (event.shiftKey) {\n focusIndex = (_this.focusedIndex === 0 || isNullOrUndefined(_this.focusedIndex)) ?\n _this.focusedElement.length - 1 : _this.focusedIndex - 1;\n }\n else {\n focusIndex = (_this.focusedElement.length - 1 === _this.focusedIndex || isNullOrUndefined(_this.focusedIndex)) ?\n 0 : _this.focusedIndex + 1;\n }\n var element = _this.focusedElement[focusIndex];\n element.focus();\n if (element instanceof HTMLInputElement) {\n element.select();\n }\n _this.focusedIndex = focusIndex;\n if (element instanceof HTMLLIElement) {\n _this.scrollToPosition(element);\n }\n }\n else if (event.keyCode === 13) {\n // tslint:disable-next-line:max-line-length\n if (event.target !== _this.searchInput && event.target !== _this.closeButton) {\n event.preventDefault();\n var index = _this.focusedElement.indexOf(event.target);\n if (index !== -1) {\n var list = _this.focusedElement[index];\n list.click();\n list.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else if (event.keyCode === 40 || event.keyCode === 38) {\n if (_this.resultsListBlock.style.display !== 'none') {\n var index = void 0;\n var element = void 0;\n if (event.keyCode === 40) {\n if (_this.focusedIndex > 7) {\n if (_this.focusedIndex + 1 < _this.focusedElement.length) {\n element = _this.focusedElement[_this.focusedIndex + 1];\n element.focus();\n _this.focusedIndex = _this.focusedIndex + 1;\n }\n }\n else {\n index = (_this.focusedElement.length - _this.resultsListBlock.children.length) + _this.results.currentIndex + 1;\n if (index < _this.focusedElement.length) {\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else {\n if (_this.focusedIndex > 8) {\n index = _this.focusedIndex - 1;\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n }\n };\n /**\n * Fires on replace.\n * @private\n */\n this.onReplaceButtonClick = function () {\n var optionsPane = _this.optionsPane;\n var findText = _this.searchInput.value;\n var replaceText = _this.replaceWith.value;\n var results = _this.viewer.owner.searchModule.textSearchResults;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n if (_this.viewer.owner.selection != null) {\n var selectionText = _this.viewer.owner.selection.text;\n if (!_this.viewer.owner.selection.isEmpty) {\n if (_this.viewer.owner.selection.isForward) {\n _this.viewer.owner.selection.selectContent(_this.viewer.owner.selection.start, true);\n }\n else {\n _this.viewer.owner.selection.selectContent(_this.viewer.owner.selection.end, true);\n }\n }\n if (!isNullOrUndefined(results) && !isNullOrUndefined(results.currentSearchResult)) {\n var result = results.currentSearchResult;\n _this.viewer.owner.searchModule.navigate(result);\n if (result.text === selectionText) {\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n _this.viewer.owner.searchModule.replace(replace, result, results);\n var pattern = _this.viewer.owner.searchModule.textSearch.stringToRegex(findText, _this.findOption);\n var endSelection = _this.viewer.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n // tslint:disable-next-line:max-line-length\n _this.viewer.owner.searchModule.textSearchResults = _this.viewer.owner.searchModule.textSearch.findAll(pattern, _this.findOption, index);\n _this.results = _this.viewer.owner.searchModule.textSearchResults;\n if (!isNullOrUndefined(_this.results) && !isNullOrUndefined(_this.results.currentSearchResult)) {\n _this.viewer.owner.searchModule.navigate(_this.results.currentSearchResult);\n }\n else {\n _this.messageDiv.style.display = 'block';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n _this.viewer.owner.findResultsList = [];\n if (!isNullOrUndefined(_this.results) && _this.results.innerList.length > 0) {\n _this.navigateSearchResult();\n }\n else {\n _this.resultsListBlock.innerHTML = '';\n }\n }\n }\n else {\n _this.messageDiv.style.display = 'block';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n }\n }\n };\n /**\n * Fires on replace all.\n * @private\n */\n this.onReplaceAllButtonClick = function () {\n _this.replaceAll();\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = '';\n };\n /**\n * Fires on search icon.\n * @private\n */\n this.searchIconClickInternal = function () {\n // tslint:disable:no-any \n var inputElement = document.getElementById(_this.viewer.owner.containerId + '_option_search_text_box');\n // tslint:enable:no-any\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n inputElement.value = '';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.matchDiv.style.display = 'none';\n _this.occurrenceDiv.style.display = 'none';\n _this.onEnableDisableReplaceButton();\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n _this.clearSearchResultItems();\n _this.viewer.owner.searchModule.clearSearchHighlight();\n _this.viewer.renderVisiblePages();\n return;\n }\n if (_this.searchIcon.classList.contains('e-de-op-search-icon') && text.length >= 1) {\n _this.searchIcon.classList.add('e-de-op-search-close-icon');\n _this.searchIcon.classList.remove('e-de-op-search-icon');\n _this.onEnableDisableReplaceButton();\n }\n _this.clearSearchResultItems();\n _this.viewer.owner.searchModule.clearSearchHighlight();\n var patterns = _this.viewer.owner.searchModule.textSearch.stringToRegex(text, _this.findOption);\n var endSelection = _this.viewer.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.viewer.owner.searchModule.textSearch.findAll(patterns, _this.findOption, index);\n if (_this.results != null && _this.results.length > 0) {\n _this.navigateSearchResult();\n _this.getMessageDivHeight();\n var resultsContainerHeight = _this.viewer.owner.getDocumentEditorElement().offsetHeight - 215;\n _this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n }\n else {\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Fires on getting next results.\n * @private\n */\n this.navigateNextResultButtonClick = function () {\n if (document.getElementById(_this.viewer.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.viewer.owner.containerId + '_list_box_container').style.display !== 'none') {\n if (_this.results.currentIndex < _this.results.length - 1) {\n _this.results.currentIndex = _this.results.currentIndex + 1;\n var currentelement = _this.results.innerList[_this.results.currentIndex];\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n for (var i = 0; i < _this.resultsListBlock.children.length; i++) {\n var list = _this.resultsListBlock.children[i];\n if (list.classList.contains('e-de-search-result-hglt')) {\n list.classList.remove('e-de-search-result-hglt');\n list.children[0].classList.remove('e-de-op-search-word-text');\n list.classList.add('e-de-search-result-item');\n }\n }\n var listElement = _this.resultsListBlock.children[_this.results.currentIndex];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(listElement);\n }\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n else {\n var currentelement = _this.results.innerList[0];\n _this.results.currentIndex = 0;\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n for (var j = 0; j < _this.resultsListBlock.children.length; j++) {\n var lists = _this.resultsListBlock.children[j];\n if (lists.classList.contains('e-de-search-result-hglt')) {\n lists.classList.remove('e-de-search-result-hglt');\n lists.children[0].classList.remove('e-de-op-search-word-text');\n lists.classList.add('e-de-search-result-item');\n }\n }\n var listElementsDiv = _this.resultsListBlock.children[_this.results.currentIndex];\n if (listElementsDiv.classList.contains('e-de-search-result-item')) {\n listElementsDiv.classList.remove('e-de-search-result-item');\n listElementsDiv.classList.add('e-de-search-result-hglt');\n listElementsDiv.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(listElementsDiv);\n }\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToNextResult);\n }\n };\n /**\n * Fires on getting previous results.\n * @private\n */\n this.navigatePreviousResultButtonClick = function () {\n if (document.getElementById(_this.viewer.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.viewer.owner.containerId + '_list_box_container').style.display !== 'none') {\n if (_this.results.currentIndex === 0) {\n _this.results.currentIndex = _this.results.length - 1;\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.length) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n for (var index = 0; index < _this.resultsListBlock.children.length; index++) {\n var list = _this.resultsListBlock.children[index];\n if (list.classList.contains('e-de-search-result-hglt')) {\n list.classList.remove('e-de-search-result-hglt');\n list.children[0].classList.remove('e-de-op-search-word-text');\n list.classList.add('e-de-search-result-item');\n }\n }\n var liElement = _this.resultsListBlock.children[_this.results.currentIndex];\n if (liElement.classList.contains('e-de-search-result-item')) {\n liElement.classList.remove('e-de-search-result-item');\n liElement.classList.add('e-de-search-result-hglt');\n liElement.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(liElement);\n }\n var currentelement = _this.results.innerList[_this.results.currentIndex];\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n else {\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.results.currentIndex = _this.results.currentIndex - 1;\n for (var j = 0; j < _this.resultsListBlock.children.length; j++) {\n var list = _this.resultsListBlock.children[j];\n if (list.classList.contains('e-de-search-result-hglt')) {\n list.classList.remove('e-de-search-result-hglt');\n list.children[0].classList.remove('e-de-op-search-word-text');\n list.classList.add('e-de-search-result-item');\n }\n }\n var listElements = _this.resultsListBlock.children[_this.results.currentIndex];\n if (listElements.classList.contains('e-de-search-result-item')) {\n listElements.classList.remove('e-de-search-result-item');\n listElements.classList.add('e-de-search-result-hglt');\n listElements.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(listElements);\n }\n var currentelement = _this.results.innerList[_this.results.currentIndex];\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToPreviousResult);\n }\n };\n /**\n * Fires on key down\n * @param {KeyboardEvent} event - Speficies key down actions.\n * @private\n */\n this.onKeyDown = function (event) {\n var code = event.which || event.keyCode;\n if (code === 13 && event.keyCode !== 9 && event.keyCode !== 40) {\n event.preventDefault();\n _this.findDiv.style.height = '';\n _this.onKeyDownInternal();\n }\n else if (code === 8 && (_this.searchInput.value.length === 0)) {\n _this.resultContainer.style.display = 'block';\n }\n else if (event.keyCode !== 9 && event.keyCode !== 40 && event.keyCode !== 27) {\n _this.viewer.owner.searchModule.clearSearchHighlight();\n _this.clearSearchResultItems();\n _this.viewer.renderVisiblePages();\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n }\n else if (code === 27 && event.keyCode === 27) {\n _this.showHideOptionsPane(false);\n }\n };\n /**\n * Close the optios pane.\n * @private\n */\n this.close = function () {\n _this.clearFocusElement();\n _this.showHideOptionsPane(false);\n _this.resultsListBlock.innerHTML = '';\n _this.focusedIndex = 1;\n _this.isOptionsPane = true;\n };\n /**\n * Fires on results list block.\n * @param {MouseEvent} args - Specifies which list was clicked.\n * @private\n */\n this.resultListBlockClick = function (args) {\n var currentlist = args.target;\n var element = _this.resultsListBlock.children;\n var index = 0;\n for (var i = 0; i < element.length; i++) {\n var list_1 = element[i];\n if (list_1.classList.contains('e-de-search-result-hglt')) {\n list_1.classList.remove('e-de-search-result-hglt');\n list_1.children[0].classList.remove('e-de-op-search-word-text');\n list_1.classList.add('e-de-search-result-item');\n }\n }\n var list;\n for (var i = 0; i < element.length; i++) {\n if (currentlist === element[i]) {\n index = i;\n list = element[i];\n if (list.classList.contains('e-de-search-result-item')) {\n list.classList.remove('e-de-search-result-item');\n list.classList.add('e-de-search-result-hglt');\n list.children[0].classList.add('e-de-op-search-word-text');\n _this.focusedIndex = _this.focusedElement.indexOf(list);\n }\n }\n }\n var currentelement = _this.results.innerList[index];\n _this.results.currentIndex = index;\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (index + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n list.focus();\n };\n this.viewer = layoutViewer;\n }\n /**\n * Get the module name.\n */\n OptionsPane.prototype.getModuleName = function () {\n return 'OptionsPane';\n };\n /**\n * Initialize the options pane.\n * @param {L10n} localeValue - Specifies the localization based on culture.\n * @private\n */\n // tslint:disable:max-func-body-length\n OptionsPane.prototype.initOptionsPane = function (localeValue) {\n var viewer = this.viewer;\n this.localeValue = localeValue;\n this.optionsPane = createElement('div', { className: 'e-de-op', styles: 'display:none;' });\n this.optionsPane.addEventListener('keydown', this.onKeyDownOnOptionPane);\n this.searchDiv = createElement('div', {\n className: this.viewer.owner.containerId + '_searchDiv e-de-op-header',\n innerHTML: localeValue.getConstant(this.searchText)\n });\n this.optionsPane.appendChild(this.searchDiv);\n // tslint:disable-next-line:max-line-length\n this.closeButton = createElement('button', { className: 'e-de-op-close-button e-de-op-icon-btn e-btn e-flat e-icon-btn', id: 'close' });\n this.optionsPane.appendChild(this.closeButton);\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.focusedElement.push(this.closeButton);\n this.findTab = createElement('div', { id: this.viewer.owner.containerId + '_findTabDiv', className: 'e-de-op-tab' });\n this.optionsPane.appendChild(this.findTab);\n var tabHeader = createElement('div', { className: 'e-tab-header' });\n this.findTab.appendChild(tabHeader);\n this.findTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.findPaneText) });\n this.focusedElement.push(this.findTabButtonHeader);\n tabHeader.appendChild(this.findTabButton);\n this.replaceTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.replacePaneText) });\n this.focusedElement.push(this.replaceTabButtonHeader);\n tabHeader.appendChild(this.replaceTabButton);\n var tabContent = createElement('div', { className: 'e-content' });\n var findTabContent = createElement('div', { id: 'findTabContent' });\n tabContent.appendChild(findTabContent);\n this.findTabContentDiv = createElement('div', { className: 'e-de-search-tab-content' });\n this.searchTextBoxContainer = createElement('div', { className: 'e-input-group e-de-op-input-group' });\n this.findTabContentDiv.appendChild(this.searchTextBoxContainer);\n // tslint:disable-next-line:max-line-length\n this.searchInput = createElement('input', { className: 'e-input e-de-search-input', id: this.viewer.owner.containerId + '_option_search_text_box', attrs: { placeholder: 'Search for' }, styles: 'font-size:14px;' });\n this.searchTextBoxContainer.appendChild(this.searchInput);\n this.searchIcon = createElement('span', {\n className: 'e-de-op-icon e-de-op-search-icon e-input-group-icon e-icon',\n id: this.viewer.owner.containerId + '_search-icon'\n });\n this.searchIcon.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.searchIcon);\n this.focusedElement.push(this.searchIcon);\n // tslint:disable-next-line:max-line-length\n this.navigateToPreviousResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-up e-spin-up e-btn-icon e-icon e-input-group-icon' });\n this.navigateToPreviousResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToPreviousResult);\n this.focusedElement.push(this.navigateToPreviousResult);\n // tslint:disable-next-line:max-line-length\n this.navigateToNextResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-down e-spin-down e-btn-icon e-icon e-input-group-icon' });\n this.navigateToNextResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToNextResult);\n this.focusedElement.push(this.navigateToNextResult);\n var div = createElement('div', { className: 'e-de-op-more-less' });\n this.matchInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.viewer.owner.containerId + '_matchCase'\n });\n div.appendChild(this.matchInput);\n this.matchCase = new CheckBox({ label: 'Match case', checked: false, change: this.matchChange });\n this.matchCase.appendTo(this.matchInput);\n this.focusedElement.push(this.matchInput);\n this.matchInput.tabIndex = 0;\n this.wholeInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.viewer.owner.containerId + '_wholeWord',\n });\n div.appendChild(this.wholeInput);\n this.wholeWord = new CheckBox({ label: 'Whole words', checked: false, change: this.wholeWordsChange });\n this.wholeWord.appendTo(this.wholeInput);\n this.focusedElement.push(this.wholeInput);\n this.wholeInput.tabIndex = 0;\n this.findTabContentDiv.appendChild(div);\n var replaceTabContent = createElement('div');\n tabContent.appendChild(replaceTabContent);\n this.replaceTabContentDiv = createElement('div', { className: 'e-de-op-replacetabcontentdiv', styles: 'display:none;' });\n tabContent.appendChild(this.replaceTabContentDiv);\n this.findTabContentDiv.appendChild(this.replaceTabContentDiv);\n this.createReplacePane();\n this.findDiv = createElement('div', { className: 'findDiv', styles: 'height:250px;display:block;' });\n findTabContent.appendChild(this.findTabContentDiv);\n this.resultContainer = createElement('div', { styles: 'width:85%;display:block;', className: 'e-de-op-result-container' });\n this.findDiv.appendChild(this.resultContainer);\n // tslint:disable-next-line:max-line-length\n this.messageDiv = createElement('div', { className: this.viewer.owner.containerId + '_messageDiv e-de-op-msg', innerHTML: this.localeValue.getConstant(this.messageDivText), id: this.viewer.owner.containerId + '_search_status' });\n this.resultContainer.appendChild(this.messageDiv);\n // tslint:disable-next-line:max-line-length\n this.resultsListBlock = createElement('div', { id: this.viewer.owner.containerId + '_list_box_container', styles: 'display:none;width:270px;list-style:none;padding-right:5px;overflow:auto;', className: 'e-de-result-list-block' });\n this.findDiv.appendChild(this.resultsListBlock);\n this.findTabContentDiv.appendChild(this.findDiv);\n this.findTab.appendChild(tabContent);\n this.tabInstance = new Tab({ selected: this.selectedTabItem });\n this.tabInstance.appendTo(this.findTab);\n var findHeader = this.tabInstance.element.getElementsByClassName('e-item e-toolbar-item')[0];\n this.findTabButtonHeader = findHeader.getElementsByClassName('e-tab-wrap')[0];\n this.findTabButtonHeader.classList.add('e-de-op-find-tab-header');\n this.findTabButtonHeader.tabIndex = 0;\n var replaceHeader = this.tabInstance.element.getElementsByClassName('e-item e-toolbar-item')[1];\n this.replaceTabButtonHeader = replaceHeader.getElementsByClassName('e-tab-wrap')[0];\n this.replaceTabButtonHeader.classList.add('e-de-op-replace-tab-header');\n this.replaceTabButtonHeader.tabIndex = 0;\n this.onWireEvents();\n };\n /**\n * Create replace pane instances.\n */\n OptionsPane.prototype.createReplacePane = function () {\n this.replaceDiv = createElement('div');\n this.replaceTabContentDiv.appendChild(this.replaceDiv);\n this.replaceWith = createElement('input', {\n className: 'e-de-op-replacewith e-input', styles: 'font-size:14px;',\n attrs: { placeholder: 'Replace with' }\n });\n this.replaceDiv.appendChild(this.replaceWith);\n var replaceButtonDiv = createElement('div', { styles: 'text-align:right;', className: 'e-de-op-dlg-footer' });\n this.replaceDiv.appendChild(replaceButtonDiv);\n this.replaceButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replace',\n styles: 'font-size:12px;margin-right:10px;',\n innerHTML: this.localeValue.getConstant(this.replaceButtonText)\n });\n replaceButtonDiv.appendChild(this.replaceButton);\n this.replaceAllButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replaceall',\n styles: 'font-size:12px;',\n innerHTML: this.localeValue.getConstant(this.replaceAllButtonText)\n });\n replaceButtonDiv.appendChild(this.replaceAllButton);\n this.matchDiv = createElement('div', { styles: 'display:none;padding-top:10px;' });\n this.replaceDiv.appendChild(this.matchDiv);\n var emptyDiv6 = createElement('div', { className: 'e-de-op-search-replacediv' });\n this.replaceDiv.appendChild(emptyDiv6);\n this.occurrenceDiv = createElement('div', { styles: 'display:none;' });\n this.replaceDiv.appendChild(this.occurrenceDiv);\n };\n OptionsPane.prototype.navigateSearchResult = function () {\n this.viewer.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n this.viewer.owner.searchModule.highlight(this.results);\n this.viewer.owner.searchModule.addFindResultView(this.results);\n this.resultsListBlock.style.display = 'block';\n this.resultContainer.style.display = 'block';\n var lists = this.viewer.owner.findResultsList;\n var text = '';\n for (var i = 0; i < lists.length; i++) {\n text += lists[i];\n }\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = text;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var currentIndexValue = this.results.currentIndex;\n // tslint:disable-next-line:max-line-length\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result') + ' ' + (currentIndexValue + 1) + ' ' + this.localeValue.getConstant('of') + ' ' + this.resultsListBlock.children.length;\n var listElement = this.resultsListBlock.children[currentIndexValue];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n this.scrollToPosition(listElement);\n }\n };\n /**\n * Fires on key down actions done.\n * @private\n */\n OptionsPane.prototype.onKeyDownInternal = function () {\n // tslint:disable-next-line:max-line-length\n var inputElement = document.getElementById(this.viewer.owner.containerId + '_option_search_text_box');\n inputElement.blur();\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n if (text.length >= 1 && this.searchIcon.classList.contains('e-de-op-search-icon')) {\n this.searchIcon.classList.add('e-de-op-search-close-icon');\n this.searchIcon.classList.remove('e-de-op-search-icon');\n }\n var resultsContainerHeight = this.viewer.owner.getDocumentEditorElement().offsetHeight - 215;\n this.clearSearchResultItems();\n this.viewer.owner.searchModule.clearSearchHighlight();\n var pattern = this.viewer.owner.searchModule.textSearch.stringToRegex(text, this.findOption);\n var endSelection = this.viewer.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n this.results = this.viewer.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var results = this.results;\n if (isNullOrUndefined(results)) {\n this.viewer.renderVisiblePages();\n }\n if (results != null && results.length > 0) {\n if ((this.focusedElement.indexOf(this.navigateToPreviousResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToPreviousResult);\n }\n if ((this.focusedElement.indexOf(this.navigateToNextResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToNextResult);\n }\n this.viewer.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n this.viewer.owner.searchModule.highlight(results);\n this.viewer.owner.searchModule.addFindResultView(results);\n // if (this.isOptionsPane) {\n this.resultsListBlock.style.display = 'block';\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n this.resultContainer.style.display = 'block';\n var list = this.viewer.owner.findResultsList;\n var text_1 = '';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n for (var i = 0; i < list.length; i++) {\n text_1 += list[i];\n }\n this.resultsListBlock.innerHTML = text_1;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var lists = this.resultsListBlock.children;\n var currentIndex = this.results.currentIndex;\n // tslint:disable-next-line:max-line-length\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result') + ' ' + (currentIndex + 1) + ' ' + this.localeValue.getConstant('of') + ' ' + this.resultsListBlock.children.length;\n var listElement = this.resultsListBlock.children[currentIndex];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n }\n this.navigateToNextResult.focus();\n this.focusedIndex = 6;\n this.getMessageDivHeight();\n // } else {\n //this.focusedIndex = 4;\n // }\n }\n else {\n this.messageDiv.innerHTML = this.localeValue.getConstant('No matches');\n this.resultContainer.style.display = 'block';\n this.resultsListBlock.style.display = 'none';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n }\n };\n OptionsPane.prototype.getMessageDivHeight = function () {\n if (!this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-msg')) {\n this.messageDiv.classList.add('e-de-op-replace-messagediv');\n this.messageDiv.classList.remove('e-de-op-msg');\n }\n else if (this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-replace-messagediv')) {\n this.messageDiv.classList.add('e-de-op-msg');\n this.messageDiv.classList.remove('e-de-op-replace-messagediv');\n }\n };\n /**\n * Replace all.\n * @private\n */\n OptionsPane.prototype.replaceAll = function () {\n var optionsPane = this.optionsPane;\n var findText = this.searchInput.value;\n var replaceText = this.replaceWith.value;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n var pattern = this.viewer.owner.searchModule.textSearch.stringToRegex(findText, this.findOption);\n var endSelection = this.viewer.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n var results = this.viewer.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n var count = isNullOrUndefined(results) ? 0 : results.length;\n this.viewer.owner.searchModule.replaceAll(replace, results);\n this.matchDiv.style.display = 'block';\n this.matchDiv.innerHTML = this.localeValue.getConstant('All Done') + '!';\n this.occurrenceDiv.style.display = 'block';\n // tslint:disable-next-line:max-line-length\n this.occurrenceDiv.innerHTML = this.localeValue.getConstant('We replaced all') + ' ' + count + ' ' + this.localeValue.getConstant('instances') + ' ' + this.localeValue.getConstant('of') + ' \"' + findText + '\" ' + this.localeValue.getConstant('with') + ' \"' + replaceText + '\" ';\n }\n };\n /**\n * Scrolls to position.\n * @param {HTMLElement} list - Specifies the list element.\n * @private\n */\n OptionsPane.prototype.scrollToPosition = function (list) {\n var rect = list.getBoundingClientRect();\n var top;\n if (rect.top > 0) {\n top = rect.top - list.parentElement.getBoundingClientRect().top;\n if ((list.parentElement.offsetHeight - top) <= list.offsetHeight) {\n if (Math.ceil(top + list.offsetHeight) === list.parentElement.scrollHeight) {\n list.parentElement.scrollTop = top;\n }\n list.parentElement.scrollTop = list.parentElement.scrollTop + (list.parentElement.offsetHeight / 100) * 30;\n }\n else if (top < 0) {\n list.parentElement.scrollTop = list.parentElement.scrollTop - (list.parentElement.offsetHeight / 100) * 30;\n }\n }\n else {\n list.parentElement.scrollTop = 0;\n }\n };\n /**\n * Clear the focus elements.\n * @private\n */\n OptionsPane.prototype.clearFocusElement = function () {\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n var index = this.focusedElement.indexOf(this.resultsListBlock.children[i]);\n if (index !== -1) {\n this.focusedElement.splice(index, 1);\n }\n }\n this.focusedIndex = 0;\n };\n /**\n * Show or hide option pane based on boolean value.\n * @param {boolean} show - Specifies showing or hiding the options pane.\n * @private\n */\n OptionsPane.prototype.showHideOptionsPane = function (show) {\n if (!isNullOrUndefined(this.viewer.owner.selectionModule)) {\n if (show) {\n this.localeValue = new L10n('documenteditor', this.viewer.owner.defaultLocale);\n this.localeValue.setLocale(this.viewer.owner.locale);\n setCulture(this.viewer.owner.locale);\n if (isNullOrUndefined(this.optionsPane)) {\n this.initOptionsPane(this.localeValue);\n //Add Option Pane\n var element = document.getElementById(this.viewer.owner.element.id);\n var optionPaneContainer = document.createElement('div');\n optionPaneContainer.className = 'e-documenteditor-optionspane';\n optionPaneContainer.setAttribute('style', 'display:inline-flex');\n optionPaneContainer.appendChild(this.viewer.owner.optionsPaneModule.optionsPane);\n this.viewer.owner.getDocumentEditorElement().appendChild(optionPaneContainer);\n optionPaneContainer.appendChild(this.viewer.viewerContainer);\n element.appendChild(optionPaneContainer);\n }\n this.optionsPane.style.display = 'block';\n if (this.viewer.owner.isReadOnlyMode) {\n this.tabInstance.hideTab(1);\n }\n else {\n this.tabInstance.hideTab(1, false);\n }\n if (this.isReplace && !this.viewer.owner.isReadOnlyMode) {\n this.tabInstance.select(1);\n this.isReplace = false;\n this.isOptionsPane = false;\n }\n else {\n this.tabInstance.select(0);\n }\n this.searchDiv.innerHTML = this.localeValue.getConstant(this.searchText);\n this.isOptionsPaneShow = true;\n // tslint:disable-next-line:max-line-length\n var textBox = document.getElementById(this.viewer.owner.getDocumentEditorElement().id + '_option_search_text_box');\n var selectedText = this.viewer.owner.selection.text;\n if (!isNullOrUndefined(selectedText)) {\n var char = ['\\v', '\\r'];\n var index = HelperMethods.indexOfAny(selectedText, char);\n selectedText = index < 0 ? selectedText : selectedText.substring(0, index);\n }\n textBox.value = selectedText;\n textBox.select();\n this.messageDiv.innerHTML = '';\n if (this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n this.searchIcon.classList.add('e-de-op-search-icon');\n this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n this.viewer.selection.caret.style.display = 'none';\n this.focusedIndex = 3;\n this.focusedElement = [];\n if (this.isOptionsPane) {\n // tslint:disable-next-line:max-line-length\n this.focusedElement.push(this.closeButton, this.findTabButtonHeader, this.replaceTabButtonHeader, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput);\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.focusedElement.push(this.closeButton, this.findTabButtonHeader, this.replaceTabButtonHeader, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput, this.replaceWith, this.replaceButton, this.replaceAllButton);\n }\n this.viewer.updateViewerSize();\n }\n else {\n if (!isNullOrUndefined(this.optionsPane)) {\n this.clearSearchResultItems();\n this.viewer.owner.searchModule.clearSearchHighlight();\n this.isOptionsPaneShow = false;\n var resultListBox = document.getElementById(this.viewer.owner.containerId + '_list_box_container');\n var message = document.getElementById(this.viewer.owner.containerId + '_search_status');\n if (!isNullOrUndefined(resultListBox) && !isNullOrUndefined(message)) {\n resultListBox.style.display = 'none';\n this.clearFocusElement();\n resultListBox.innerHTML = '';\n message.innerHTML = this.localeValue.getConstant('No matches');\n }\n }\n this.viewer.updateViewerSize();\n if (!isNullOrUndefined(this.optionsPane)) {\n if (this.optionsPane.style.display !== 'none') {\n this.viewer.selection.updateCaretPosition();\n this.optionsPane.style.display = 'none';\n }\n }\n this.viewer.updateFocus();\n this.viewer.selection.caret.style.display = 'block';\n }\n }\n };\n /**\n * Clears search results.\n * @private\n */\n OptionsPane.prototype.clearSearchResultItems = function () {\n if (!isNullOrUndefined(this.viewer.owner.findResultsList)) {\n this.viewer.owner.findResultsList = [];\n }\n };\n /**\n * Dispose the internal objects which are maintained.\n * @private\n */\n OptionsPane.prototype.destroy = function () {\n if (this.optionsPane) {\n this.optionsPane.innerHTML = '';\n this.optionsPane = undefined;\n }\n if (this.resultsListBlock) {\n this.resultsListBlock.innerHTML = '';\n this.resultsListBlock = undefined;\n }\n if (this.messageDiv) {\n this.messageDiv.innerHTML = '';\n this.messageDiv = undefined;\n }\n if (this.resultContainer) {\n this.resultContainer.innerHTML = '';\n }\n this.resultContainer = undefined;\n if (this.searchInput) {\n this.searchInput.value = '';\n this.searchInput = undefined;\n }\n if (this.searchDiv) {\n this.searchDiv.innerHTML = '';\n this.searchDiv = undefined;\n }\n if (this.searchTextBoxContainer) {\n this.searchTextBoxContainer.innerHTML = '';\n this.searchTextBoxContainer = undefined;\n }\n if (this.replaceWith) {\n this.replaceWith.innerHTML = '';\n this.replaceWith = undefined;\n }\n if (this.findDiv) {\n this.findDiv.innerHTML = '';\n this.findDiv = undefined;\n }\n if (this.replaceButton) {\n this.replaceButton.innerHTML = '';\n this.replaceButton = undefined;\n }\n if (this.replaceAllButton) {\n this.replaceAllButton.innerHTML = '';\n this.replaceAllButton = undefined;\n }\n if (this.matchInput) {\n this.matchInput.innerHTML = '';\n this.matchCase = undefined;\n }\n if (this.wholeInput) {\n this.wholeInput.innerHTML = '';\n this.wholeWord = undefined;\n }\n // if (this.regularInput) {\n // this.regularInput.innerHTML = '';\n // this.regular = undefined;\n // }\n if (!isNullOrUndefined(this.results)) {\n this.results.destroy();\n }\n if (this.focusedElement) {\n this.focusedElement = [];\n }\n this.focusedElement = undefined;\n this.destroyInternal();\n };\n /**\n * Dispose the internal objects which are maintained.\n */\n OptionsPane.prototype.destroyInternal = function () {\n if (this.searchText) {\n this.searchText = undefined;\n }\n if (this.resultsText) {\n this.resultsText = undefined;\n }\n if (this.messageDivText) {\n this.messageDivText = undefined;\n }\n if (this.replaceButtonText) {\n this.replaceButtonText = undefined;\n }\n if (this.replaceAllButtonText) {\n this.replaceAllButtonText = undefined;\n }\n };\n return OptionsPane;\n}());\nexport { OptionsPane };\n","import { TableWidget } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Point, HelperMethods } from './editor-helper';\n/**\n * @private\n */\nvar TableResizer = /** @class */ (function () {\n /**\n * @private\n */\n function TableResizer(node) {\n this.resizeNode = 0;\n this.resizerPosition = 0;\n this.currentResizingTable = undefined;\n this.owner = node;\n this.startingPoint = new Point(0, 0);\n }\n Object.defineProperty(TableResizer.prototype, \"viewer\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets module name.\n */\n TableResizer.prototype.getModuleName = function () {\n return 'TableResizer';\n };\n /**\n * @private\n */\n TableResizer.prototype.updateResizingHistory = function (touchPoint) {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateResizingHistory(touchPoint, this);\n }\n this.viewer.isRowOrCellResizing = false;\n this.resizerPosition = -1;\n };\n TableResizer.prototype.handleResize = function (point) {\n this.owner.viewer.isRowOrCellResizing = true;\n this.startingPoint.x = point.x;\n this.startingPoint.y = point.y;\n //Initialize resizing history.\n this.owner.editorHistory.initResizingHistory(point, this);\n };\n //Table Resizing implementation starts\n /**\n * @private\n */\n TableResizer.prototype.isInRowResizerArea = function (touchPoint) {\n var position = this.getRowReSizerPosition(undefined, touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 1;\n this.resizerPosition = position;\n return true;\n }\n };\n TableResizer.prototype.isInCellResizerArea = function (touchPoint) {\n var position = this.getCellReSizerPosition(touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 0;\n this.resizerPosition = position;\n return true;\n }\n };\n /**\n * Gets cell resizer position.\n * @param {Point} point\n * @private\n */\n TableResizer.prototype.getCellReSizerPosition = function (touchPoint) {\n var position = -1;\n var resizerBoundaryWidth = 2;\n var tableWidget = this.getTableWidget(touchPoint);\n var cellWidget = this.getTableCellWidget(touchPoint);\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(tableWidget.x - HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) - 0.25, tableWidget.y, HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) + 0.5, tableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = tableWidget.x;\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n var preferredWidth = HelperMethods.convertPointToPixel(tableWidget.tableHolder.columns[i].preferredWidth);\n // tslint:disable-next-line:max-line-length\n if ((this.viewer.isInsideRect(startingPointX - 1, tableWidget.y, tableWidget.leftBorderWidth + resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n // tslint:disable-next-line:max-line-length\n }\n else if (i > 0 && (this.viewer.isInsideRect(startingPointX + preferredWidth - resizerBoundaryWidth / 2, tableWidget.y, resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(cellWidget)) {\n this.currentResizingTable = cellWidget.ownerTable;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(cellWidget.x - cellWidget.margin.left - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height, touchPoint)) {\n return position = cellWidget.columnIndex;\n // tslint:disable-next-line:max-line-length\n }\n else if (isNullOrUndefined(cellWidget.nextRenderedWidget)\n && this.viewer.isInsideRect(cellWidget.x + cellWidget.margin.right + cellWidget.width - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height, touchPoint)) {\n return position = (cellWidget.columnIndex + cellWidget.cellFormat.columnSpan);\n }\n else if (cellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(cellWidget, touchPoint); // Gets the nested table resizer position.\n }\n }\n }\n return position;\n };\n /**\n * Gets cell resizer position.\n * @param {TableCellWidget} cellWidget\n * @param {Point} touchPoint\n */\n TableResizer.prototype.getCellReSizerPositionInternal = function (cellWidget, touchPoint) {\n var position = -1;\n var childTableWidget = this.getTableWidgetFromWidget(touchPoint, cellWidget);\n var childCellWidget = undefined;\n if (!isNullOrUndefined(childTableWidget) && childTableWidget.tableFormat.cellSpacing > 0) {\n this.currentResizingTable = childTableWidget;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(childTableWidget.x - childTableWidget.leftBorderWidth - 0.25, childTableWidget.y, childTableWidget.leftBorderWidth + 0.5, childTableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = childTableWidget.x;\n for (var i = 0; i < childTableWidget.tableHolder.columns.length; i++) {\n // tslint:disable-next-line:max-line-length\n var preferredWidth = HelperMethods.convertPointToPixel(childTableWidget.tableHolder.columns[i].preferredWidth);\n // tslint:disable-next-line:max-line-length\n if ((this.viewer.isInsideRect(startingPointX - 1, childTableWidget.y, childTableWidget.leftBorderWidth + 2, childTableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n // tslint:disable-next-line:max-line-length\n }\n else if (i > 0 && (this.viewer.isInsideRect(startingPointX + preferredWidth - 1, childTableWidget.y, 2, childTableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(childTableWidget)) {\n childCellWidget = childTableWidget.getTableCellWidget(touchPoint);\n }\n if (!isNullOrUndefined(childCellWidget)) {\n this.currentResizingTable = childCellWidget.ownerTable;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(childCellWidget.x - childCellWidget.margin.left - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = childCellWidget.columnIndex;\n }\n else if (isNullOrUndefined(childCellWidget.nextRenderedWidget)\n // tslint:disable-next-line:max-line-length\n && this.viewer.isInsideRect(childCellWidget.x + childCellWidget.margin.right + childCellWidget.width - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = (childCellWidget.columnIndex + childCellWidget.cellFormat.columnSpan);\n }\n else if (childCellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(childCellWidget, touchPoint);\n }\n }\n }\n return position;\n };\n TableResizer.prototype.getRowReSizerPosition = function (widget, touchPoint) {\n var tableWidget = undefined;\n var cellWidget = undefined;\n if (isNullOrUndefined(widget)) {\n tableWidget = this.getTableWidget(touchPoint);\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n else {\n tableWidget = this.getTableWidgetFromWidget(touchPoint, widget);\n }\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n // tslint:disable-next-line:max-line-length\n if (this.owner.viewer.isInsideRect(tableWidget.x, tableWidget.y + tableWidget.height - cellSpacing, this.getActualWidth(tableWidget.lastChild), (isNullOrUndefined(tableWidget.nextSplitWidget) ? tableWidget.bottomBorderWidth + cellSpacing : 0), touchPoint)) {\n return tableWidget.lastChild.rowIndex;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n //Need to consider for splitted widgets\n var rowWidget = tableWidget.childWidgets[i];\n if (tableWidget.childWidgets.indexOf(rowWidget) > -1\n // tslint:disable-next-line:max-line-length\n && (this.owner.viewer.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height + cellSpacing / 2, this.getActualWidth(rowWidget), cellSpacing / 2, touchPoint))) {\n return rowWidget.rowIndex;\n }\n }\n }\n else {\n if (tableWidget && cellWidget) {\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n if (cellWidget) {\n var rowWidget = cellWidget.containerWidget;\n var height = 0;\n if (rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n height = rowWidget.bottomBorderWidth + 2;\n }\n else {\n height = rowWidget.nextRenderedWidget.topBorderWidth + 2;\n }\n // tslint:disable-next-line:max-line-length\n if (this.owner.viewer.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height - height, rowWidget.width, height * 2, touchPoint)) {\n this.currentResizingTable = rowWidget.ownerTable;\n return rowWidget.rowIndex;\n }\n else {\n if (cellWidget.childWidgets.length > 0) {\n return this.getRowReSizerPosition(cellWidget, touchPoint);\n }\n }\n }\n }\n return -1;\n };\n /**\n * To handle Table Row and cell resize\n * @param touchPoint\n * @private\n */\n TableResizer.prototype.handleResizing = function (touchPoint) {\n var dragValue = 0;\n if (this.resizeNode === 0) {\n dragValue = touchPoint.x - this.startingPoint.x;\n this.resizeTableCellColumn(dragValue);\n }\n else {\n dragValue = touchPoint.y - this.startingPoint.y;\n this.resizeTableRow(dragValue);\n }\n };\n TableResizer.prototype.resizeTableRow = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0) {\n return;\n }\n var selection = this.owner.selection;\n if (table.isInsideTable) {\n this.owner.isLayoutEnabled = false; //Layouting is disabled to skip the child table layouting. \n }\n if (this.resizerPosition > -1) {\n var row = table.childWidgets[this.resizerPosition];\n this.updateRowHeight(row, dragValue);\n selection.selectPosition(selection.start, selection.end);\n }\n if (table.isInsideTable) {\n var parentTable = this.owner.viewer.layout.getParentTable(table);\n this.owner.isLayoutEnabled = true; //layouting is enabled to layout the parent table of the nested table.\n table = parentTable;\n }\n this.startingPoint.y += HelperMethods.convertPointToPixel(dragValue);\n this.owner.viewer.layout.reLayoutTable(table);\n this.owner.editorModule.reLayout(this.owner.selection);\n };\n /**\n * Gets the table widget from given cursor point\n * @param cursorPoint\n */\n TableResizer.prototype.getTableWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.viewer.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[i];\n widget = this.getTableWidgetFromWidget(cursorPoint, bodyWidget);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.getTableWidgetFromWidget = function (point, widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n if (widget.childWidgets[j] instanceof TableWidget) {\n var childWidget = widget.childWidgets[j];\n if (childWidget.y <= point.y && (childWidget.y + childWidget.height) >= point.y) {\n return childWidget;\n }\n }\n }\n return undefined;\n };\n /**\n * Return the table cell widget from the given cursor point\n * @param cursorPoint\n * @private\n */\n TableResizer.prototype.getTableCellWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.viewer.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[i];\n widget = bodyWidget.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.updateRowHeight = function (row, dragValue) {\n var rowFormat = row.rowFormat;\n if (rowFormat.heightType === 'Auto') {\n rowFormat.heightType = 'AtLeast';\n var row_1 = rowFormat.ownerBase;\n var currentHeight = this.owner.viewer.layout.getRowHeight(row_1, [row_1]);\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (currentHeight + dragValue >= 2.7 && rowFormat.height !== currentHeight + dragValue) {\n rowFormat.height = currentHeight + dragValue;\n }\n }\n else {\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (rowFormat.height + dragValue >= 2.7 && rowFormat.height !== rowFormat.height + dragValue) {\n rowFormat.height = rowFormat.height + dragValue;\n }\n }\n };\n //Resize Table cell\n TableResizer.prototype.resizeTableCellColumn = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0 || isNullOrUndefined(table.childWidgets)) {\n return;\n }\n var selectionFlag = true;\n var selection = this.owner.selection;\n this.owner.editor.setOffsetValue(selection);\n table = table.combineWidget(this.viewer);\n this.owner.isLayoutEnabled = false;\n // table.PreserveGrid = true;\n this.setPreferredWidth(table);\n var containerWidth = table.getOwnerWidth(true);\n var newIndent = table.leftIndent;\n var tableAlignment = table.tableFormat.tableAlignment;\n if (!selection.isEmpty) {\n selectionFlag = this.resizeColumnWithSelection(selection, table, dragValue);\n }\n if (!selectionFlag) {\n this.owner.isLayoutEnabled = true;\n return;\n }\n if (this.resizerPosition === 0) {\n // Todo: need to handle the resizing of first column and table indent.\n var columnIndex = this.resizerPosition;\n var rightColumn = table.tableHolder.columns[columnIndex];\n var width = rightColumn.preferredWidth;\n if (dragValue > 0) {\n var prevDragValue = 0;\n while (dragValue !== prevDragValue) {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minWidth) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n prevDragValue = dragValue;\n }\n else {\n prevDragValue = dragValue;\n dragValue += newWidth - rightColumn.minWidth;\n }\n }\n }\n else {\n var prevDragValue = 0;\n while (dragValue !== prevDragValue) {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth <= 2112) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n prevDragValue = dragValue;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - 2112;\n }\n }\n }\n var dragOffset = dragValue;\n // tslint:disable-next-line:max-line-length\n if (tableAlignment !== 'Left' && (table.tableHolder.getTotalWidth() > containerWidth) && table.tableFormat.preferredWidthType === 'Auto') {\n if (table.tableHolder.isFitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto')) {\n // tslint:disable-next-line:max-line-length\n table.tableHolder.fitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto');\n }\n else {\n rightColumn.preferredWidth = width;\n }\n dragOffset = 0;\n }\n if (tableAlignment === 'Center'\n && (table.tableHolder.getTotalWidth() < containerWidth || table.tableFormat.preferredWidthType !== 'Auto')) {\n dragOffset = dragOffset / 2;\n }\n table.tableFormat.leftIndent = tableAlignment === 'Left' ? newIndent : 0;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth();\n this.updateCellPreferredWidths(table);\n this.updateGridValue(table, true, dragOffset);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n // Todo: need to handle the resizing of last column and table width.\n this.resizeColumnAtLastColumnIndex(table, dragValue, containerWidth);\n }\n else {\n if (this.resizerPosition === -1) {\n this.owner.isLayoutEnabled = true;\n return;\n }\n this.resizeCellAtMiddle(table, dragValue);\n }\n // table.PreserveGrid = false;\n this.owner.isLayoutEnabled = true;\n selection.selectPosition(selection.start, selection.end);\n };\n /**\n * Resize Selected Cells\n */\n TableResizer.prototype.resizeColumnWithSelection = function (selection, table, dragValue) {\n var newIndent = table.leftIndent;\n var cellwidget = this.getTableCellWidget(this.startingPoint);\n if (cellwidget && (selection.selectedWidgets.containsKey(cellwidget) || (cellwidget.previousWidget\n && selection.selectedWidgets.containsKey((cellwidget.previousWidget))))) {\n var selectedCells = selection.getSelectedCells();\n if (this.resizerPosition === 0) {\n this.resizeColumnAtStart(table, dragValue, selectedCells);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n var leftColumnCollection = this.getColumnCells(table, this.resizerPosition, true);\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n if (selectedCells.indexOf(cell) !== -1) {\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n }\n }\n //Updates the grid after value for all the rows.\n this.updateRowsGridAfterWidth(table);\n table.updateWidth(dragValue);\n this.updateGridValue(table, true, dragValue);\n }\n else {\n if (this.resizerPosition === -1) {\n return false;\n }\n var columnIndex = this.resizerPosition;\n var leftColumnCollection = this.getColumnCells(table, columnIndex, true);\n var rightColumnCollection = this.getColumnCells(table, columnIndex, false);\n var isColumnResizing = this.isColumnSelected(table, columnIndex);\n if (leftColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n if (selectedCells.indexOf(leftColumnCollection[i]) === -1) {\n leftColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n if (rightColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n if (selectedCells.indexOf(rightColumnCollection[i]) === -1) {\n rightColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n //Getting the adjacent cell collections for left side selected cells in the right column collection.\n if (leftColumnCollection.length === 0 && rightColumnCollection.length > 0) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[i];\n if (cell.previousWidget) {\n leftColumnCollection.push(cell.previousWidget);\n }\n }\n }\n else if (rightColumnCollection.length === 0 && leftColumnCollection.length > 0) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n if (cell.nextWidget) {\n rightColumnCollection.push(cell.nextWidget);\n }\n }\n }\n this.changeWidthOfCells(table, leftColumnCollection, rightColumnCollection, dragValue, true);\n this.updateGridValue(table, true, dragValue);\n }\n selection.selectPosition(selection.start, selection.end);\n }\n return false;\n };\n /**\n * Resize selected cells at resizer position 0\n */\n TableResizer.prototype.resizeColumnAtStart = function (table, dragValue, selectedCells) {\n var newIndent = table.leftIndent;\n var rightColumnCollection = this.getColumnCells(table, this.resizerPosition, false);\n var offset = 0;\n var selectedRow = selectedCells[0].ownerRow;\n var rowFormat = selectedRow.rowFormat;\n if (rowFormat.beforeWidth > 0) {\n var newGridBefore = rowFormat.beforeWidth + dragValue;\n if (newGridBefore > 0) {\n this.updateGridBefore(selectedRow, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n if (newGridBefore < leastGridBefore && offset !== newGridBefore) {\n newIndent = table.leftIndent + newGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedRow !== tableRow) {\n this.updateGridBefore(tableRow, -newGridBefore);\n }\n }\n }\n }\n }\n else {\n if (dragValue < 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n var currentTableIndent = table.tableFormat.leftIndent;\n if (currentTableIndent === 0) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.updateGridBefore(tableRow, dragValue);\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n }\n }\n else {\n var difference = leastGridBefore - dragValue;\n if (difference > 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n newIndent = table.leftIndent + leastGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n this.updateGridBefore(tableRow, dragValue - leastGridBefore);\n }\n else {\n this.updateGridBefore(tableRow, -leastGridBefore);\n }\n }\n }\n }\n }\n }\n this.updateGridValue(table, true, dragValue);\n };\n TableResizer.prototype.updateWidthForCells = function (table, selectedCells, dragValue) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n else {\n this.updateGridBefore(tableRow, -dragValue);\n }\n }\n };\n /**\n * Resize selected cells at last column\n */\n TableResizer.prototype.resizeColumnAtLastColumnIndex = function (table, dragValue, containerWidth) {\n var tableAlignment = table.tableFormat.tableAlignment;\n var preferredWidth = table.tableFormat.preferredWidth;\n var hasTableWidth = preferredWidth;\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var prevDragValue = 0;\n while (dragValue !== prevDragValue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minWidth) {\n leftColumn.preferredWidth = newWidth;\n prevDragValue = dragValue;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - leftColumn.minWidth;\n }\n }\n this.updateCellPreferredWidths(table);\n if (hasTableWidth || table.tableHolder.getTotalWidth() > containerWidth) {\n table.updateWidth(dragValue);\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth();\n }\n var dragOffset = dragValue;\n if (tableAlignment === 'Right') {\n dragOffset = 0;\n }\n else if (tableAlignment === 'Center') {\n dragOffset = dragOffset / 2;\n }\n this.updateGridValue(table, true, dragOffset);\n };\n /**\n * Resize selected cells at middle column\n */\n TableResizer.prototype.resizeCellAtMiddle = function (table, dragValue) {\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var rightColumn = table.tableHolder.columns[columnIndex];\n if (dragValue > 0) {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minWidth) {\n rightColumn.preferredWidth = newWidth;\n leftColumn.preferredWidth = leftColumn.preferredWidth + dragValue;\n isContinue = false;\n }\n else {\n dragValue += newWidth - rightColumn.minWidth;\n }\n }\n }\n else {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minWidth) {\n leftColumn.preferredWidth = newWidth;\n rightColumn.preferredWidth = rightColumn.preferredWidth - dragValue;\n isContinue = false;\n }\n else {\n dragValue -= newWidth - leftColumn.minWidth;\n }\n }\n }\n // Update the cell widths based on the columns preferred width\n this.updateCellPreferredWidths(table);\n // table.tableFormat.AllowAutoFit = false;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth();\n this.updateGridValue(table, true, dragValue);\n };\n TableResizer.prototype.updateGridValue = function (table, isUpdate, dragValue) {\n if (isUpdate) {\n table.calculateGrid();\n table.isGridUpdated = false;\n }\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.owner.isLayoutEnabled = true;\n if (table.isInsideTable) {\n var parentTable = this.viewer.layout.getParentTable(table);\n this.viewer.layout.reLayoutTable(parentTable); // Need to optmize this.\n }\n else {\n this.viewer.layout.reLayoutTable(table);\n }\n this.owner.editor.getOffsetValue(this.viewer.selection);\n this.owner.editorModule.reLayout(this.owner.selection);\n if (dragValue) {\n this.startingPoint.x += HelperMethods.convertPointToPixel(dragValue);\n this.resizerPosition = this.getCellReSizerPosition(this.startingPoint);\n }\n };\n TableResizer.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n TableResizer.prototype.updateGridBefore = function (row, offset) {\n if (row.rowFormat.beforeWidth + offset !== row.rowFormat.beforeWidth) {\n row.rowFormat.beforeWidth = row.rowFormat.beforeWidth + offset;\n row.rowFormat.gridBeforeWidth = row.rowFormat.beforeWidth;\n }\n };\n TableResizer.prototype.getLeastGridBefore = function (table, ignoreRow) {\n var gridBefore = 0;\n var flag = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row !== ignoreRow) {\n if (flag === 0) {\n gridBefore = row.rowFormat.beforeWidth;\n flag++;\n }\n if (row.rowFormat.beforeWidth <= gridBefore) {\n gridBefore = row.rowFormat.beforeWidth;\n }\n }\n }\n return gridBefore;\n };\n TableResizer.prototype.increaseOrDecreaseWidth = function (cell, dragValue, isIncrease) {\n var preferredWidth = cell.cellFormat.preferredWidth;\n if (cell.cellFormat.preferredWidthType === 'Auto') {\n preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n var minimumWidth = cell.ownerColumn.minWidth;\n if (cell.cellFormat.preferredWidthType === 'Percent') {\n minimumWidth = cell.convertPointToPercent(minimumWidth);\n }\n // Margins properties usedd for internal purpose.\n if (isIncrease) {\n cell.cellFormat.preferredWidth = preferredWidth + dragValue > minimumWidth ? preferredWidth + dragValue : minimumWidth;\n }\n else {\n cell.cellFormat.preferredWidth = preferredWidth - dragValue > minimumWidth ? preferredWidth - dragValue : minimumWidth;\n }\n };\n // tslint:disable-next-line:max-line-length\n TableResizer.prototype.changeWidthOfCells = function (table, leftColumnCollection, rightColumnCollection, dragValue, isSelection) {\n if (leftColumnCollection.length > 0) {\n var flag = false;\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n if (cell.cellIndex === cell.ownerRow.childWidgets.length - 1) {\n flag = true;\n }\n }\n if (flag) {\n this.updateRowsGridAfterWidth(table);\n }\n }\n if (rightColumnCollection.length > 0) {\n var diff = 0;\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[i];\n if (cell.cellIndex === 0) {\n var newGridBefore = cell.ownerRow.rowFormat.beforeWidth + dragValue;\n if (newGridBefore >= 0) {\n this.updateGridBefore(cell.ownerRow, dragValue);\n }\n else {\n if (diff !== newGridBefore) {\n diff = newGridBefore;\n }\n cell.ownerRow.rowFormat.gridBeforeWidth = 0;\n cell.ownerRow.rowFormat.gridBeforeWidthType = 'Auto';\n }\n }\n this.increaseOrDecreaseWidth(cell, dragValue, false);\n }\n if (diff !== 0) {\n var newIndent = table.leftIndent + diff;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n if (rightColumnCollection.indexOf(row.childWidgets[0]) === -1) {\n this.updateGridBefore(row, diff > 0 ? diff : -diff);\n }\n }\n }\n }\n };\n TableResizer.prototype.updateRowsGridAfterWidth = function (table) {\n var maxRowWidth = this.getMaxRowWidth(table, true);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var currentRowWidth = this.getRowWidth(row, true);\n if (maxRowWidth >= currentRowWidth && row.rowFormat.afterWidth !== maxRowWidth - currentRowWidth) {\n var value = maxRowWidth - currentRowWidth;\n row.rowFormat.gridAfterWidth = value;\n row.rowFormat.afterWidth = value;\n }\n }\n };\n TableResizer.prototype.getRowWidth = function (row, toUpdateGridAfter) {\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n rowWidth += cell.cellFormat.cellWidth;\n }\n return rowWidth;\n };\n TableResizer.prototype.getMaxRowWidth = function (table, toUpdateGridAfter) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i_1 = 0; i_1 < row.childWidgets.length; i_1++) {\n var cell = row.childWidgets[i_1];\n rowWidth += cell.cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.isColumnSelected = function (table, columnIndex) {\n var selection = this.owner.selection;\n var selectedCells = selection.getSelectedCells();\n var leftColumnCells = this.getColumnCells(table, columnIndex, true);\n var rightColumnCells = this.getColumnCells(table, columnIndex, false);\n var isColumnSelected = false;\n for (var i = 0; i < leftColumnCells.length; i++) {\n var columnCell = leftColumnCells[i];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n if (!isColumnSelected) {\n for (var i = 0; i < rightColumnCells.length; i++) {\n var columnCell = rightColumnCells[i];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n }\n return isColumnSelected;\n };\n TableResizer.prototype.applyProperties = function (table, tableHistoryInfo) {\n if (isNullOrUndefined(tableHistoryInfo)) {\n return;\n }\n table = table;\n // PreserveGrid = true;\n if (tableHistoryInfo.tableHolder) {\n table.tableHolder = tableHistoryInfo.tableHolder.clone();\n }\n if (tableHistoryInfo.tableFormat !== null) {\n table.tableFormat.leftIndent = tableHistoryInfo.tableFormat.leftIndent;\n table.tableFormat.preferredWidth = tableHistoryInfo.tableFormat.preferredWidth;\n table.tableFormat.preferredWidthType = tableHistoryInfo.tableFormat.preferredWidthType;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowFormat = tableHistoryInfo.rows[i];\n row.rowFormat.gridBefore = rowFormat.gridBefore;\n row.rowFormat.gridBeforeWidth = rowFormat.gridBeforeWidth;\n row.rowFormat.gridBeforeWidthType = rowFormat.gridBeforeWidthType;\n row.rowFormat.gridAfter = rowFormat.gridAfter;\n row.rowFormat.gridAfterWidth = rowFormat.gridAfterWidth;\n row.rowFormat.gridAfterWidthType = rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellFormat = rowFormat.cells[j];\n cell.columnIndex = cellFormat.columnIndex;\n cell.cellFormat.columnSpan = cellFormat.columnSpan;\n cell.cellFormat.preferredWidth = cellFormat.preferredWidth;\n cell.cellFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n }\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n //Sets the width to cells\n table.setWidthToCells(tableWidth, table.tableFormat.preferredWidthType === 'Auto');\n // PreserveGrid = false;\n };\n /**\n * Return table row width\n */\n TableResizer.prototype.getActualWidth = function (row) {\n var width = 0;\n if (row.childWidgets.length > 0) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n width += row.childWidgets[i].cellFormat.cellWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.setPreferredWidth = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rw = table.childWidgets[i];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n rowFormat.gridBeforeWidthType = 'Point';\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[j];\n cell.cellFormat.preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n rowFormat.gridAfterWidthType = 'Point';\n }\n }\n };\n TableResizer.prototype.updateCellPreferredWidths = function (table) {\n var tableWidth = table.tableHolder.tableWidth;\n var isAutoFit = table.tableFormat.preferredWidthType === 'Auto';\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.gridBefore > 0) {\n var width = table.tableHolder.getCellWidth(0, row.rowFormat.gridBefore, tableWidth, isAutoFit);\n this.updateGridBeforeWidth(width, row);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n cell.updateWidth(table.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth, isAutoFit));\n }\n if (row.rowFormat.gridAfter > 0) {\n // tslint:disable-next-line:max-line-length\n this.updateGridAfterWidth(table.tableHolder.getCellWidth(row.childWidgets.length, row.rowFormat.gridAfter, tableWidth, isAutoFit), row);\n }\n }\n };\n /**\n * Update grid before width value\n */\n TableResizer.prototype.updateGridBeforeWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.beforeWidth) {\n rowFormat.beforeWidth = width;\n if (rowFormat.gridBeforeWidthType === 'Auto') {\n rowFormat.gridBeforeWidthType = 'Point';\n }\n if (rowFormat.gridBeforeWidthType === 'Point') {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method. \n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.beforeWidth, ownerWidth);\n rowFormat.gridBeforeWidth = value;\n }\n }\n };\n /**\n * Update grid after width value\n */\n TableResizer.prototype.updateGridAfterWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.afterWidth) {\n rowFormat.afterWidth = width;\n }\n if (rowFormat.gridAfterWidthType === 'Auto') {\n rowFormat.gridAfterWidthType = 'Point';\n }\n if (rowFormat.gridAfterWidthType === 'Point') {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method. \n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.afterWidth, ownerWidth);\n rowFormat.gridAfterWidth = value;\n }\n };\n return TableResizer;\n}());\nexport { TableResizer };\n","import { TextPosition, ImageFormat } from '../selection/selection-helper';\nimport { ParagraphWidget, LineWidget, ElementBox, TextElementBox, Margin, ImageElementBox, BlockWidget, BlockContainer, BodyWidget, TableWidget, TableCellWidget, TableRowWidget, Widget, ListTextElementBox, BookmarkElementBox, HeaderFooterWidget, FieldTextElementBox, TabElementBox } from '../viewer/page';\nimport { WCharacterFormat } from '../format/character-format';\nimport { HelperMethods } from './editor-helper';\nimport { isNullOrUndefined, Browser, classList } from '@syncfusion/ej2-base';\nimport { WParagraphFormat, WSectionFormat, WListFormat, WTableFormat, WRowFormat, WCellFormat, WBorder, WBorders, WTabStop } from '../index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WLevelOverride } from '../list/level-override';\nimport { FieldElementBox } from '../viewer/page';\nimport { WCharacterStyle } from '../format/style';\nimport { TableResizer } from './table-resizer';\nimport { WParagraphStyle } from '../format/style';\n/**\n * Editor module\n */\nvar Editor = /** @class */ (function () {\n /**\n * Initialize the editor module\n * @param {LayoutViewer} viewer\n * @private\n */\n function Editor(viewer) {\n var _this = this;\n this.nodes = [];\n this.editHyperlinkInternal = false;\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n /**\n * @private\n */\n this.isHandledComplex = false;\n /**\n * @private\n */\n this.tableResize = undefined;\n /**\n * @private\n */\n this.tocStyles = {};\n this.refListNumber = undefined;\n this.incrementListNumber = -1;\n this.removedBookmarkElements = [];\n /**\n * @private\n */\n this.tocBookmarkId = 0;\n /**\n * @private\n */\n this.copiedData = undefined;\n this.pageRefFields = {};\n /**\n * @private\n */\n this.isInsertingTOC = false;\n /**\n * @private\n */\n this.isBordersAndShadingDialog = false;\n /**\n * @private\n */\n this.onTextInputInternal = function (event) {\n if (Browser.isDevice) {\n var viewer = _this.viewer;\n var nbsp = new RegExp(String.fromCharCode(160), 'g');\n var lineFeed = new RegExp(String.fromCharCode(10), 'g');\n viewer.prefix = viewer.prefix.replace(nbsp, ' ').replace(lineFeed, ' ');\n var text = viewer.editableDiv.textContent.replace(nbsp, ' ').replace(lineFeed, ' ');\n var textBoxText = text.substring(2);\n if (viewer.isCompositionStart && viewer.isCompositionUpdated) {\n viewer.isCompositionUpdated = false;\n if (!viewer.owner.isReadOnlyMode && viewer.owner.isDocumentLoaded) {\n if (viewer.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty) {\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionForLineWidget(viewer.selection.start.currentWidget, _this.selection.start.offset - (viewer.prefix.length - 2));\n _this.handleTextInput(textBoxText);\n viewer.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n else {\n _this.handleTextInput(textBoxText);\n viewer.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n }\n }\n return;\n }\n else if (viewer.isCompositionStart && viewer.isCompositionEnd && viewer.suffix === '') {\n if (viewer.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty && viewer.isCompositionStart) {\n viewer.isCompositionStart = false;\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionForLineWidget(viewer.selection.start.currentWidget, _this.selection.start.offset - viewer.prefix.substring(2).length);\n _this.selection.retrieveCurrentFormatProperties();\n if (viewer.suffix === '' || textBoxText === '') {\n _this.handleTextInput(textBoxText);\n }\n }\n else if (!_this.selection.isEmpty) {\n viewer.isCompositionStart = false;\n _this.handleTextInput(textBoxText);\n }\n }\n else if (textBoxText === '') {\n viewer.isCompositionStart = false;\n _this.handleBackKey();\n }\n else if (viewer.prefix.substring(2) === textBoxText && viewer.suffix === '') {\n viewer.isCompositionStart = false;\n _this.handleTextInput(' ');\n }\n viewer.isCompositionEnd = false;\n return;\n }\n else if (viewer.isCompositionEnd || viewer.isCompositionStart && !viewer.compositionUpdated) {\n if (textBoxText.length < viewer.prefix.length &&\n textBoxText === viewer.prefix.substring(2, viewer.prefix.length - 1) || viewer.editableDiv.innerText.length < 2) {\n _this.handleBackKey();\n return;\n }\n else if (viewer.suffix !== '' &&\n viewer.editableDiv.innerText[viewer.editableDiv.innerText.length - 1] !== String.fromCharCode(160)) {\n viewer.isCompositionStart = false;\n //When cursor is placed in between a word and chosen a word from predicted words.\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionForLineWidget(viewer.selection.start.currentWidget, _this.selection.start.offset - (viewer.prefix.length - 2));\n _this.selection.end.setPositionForLineWidget(viewer.selection.end.currentWidget, _this.selection.end.offset + viewer.suffix.length);\n //Retrieve the character format properties. Since the selection was changed manually.\n _this.selection.retrieveCurrentFormatProperties();\n _this.handleTextInput(textBoxText);\n return;\n }\n }\n // tslint:disable-next-line:max-line-length\n if (text !== '\\r' && text !== '\\b' && text !== '\\u001B' && !viewer.owner.isReadOnlyMode && viewer.isControlPressed === false) {\n if (text === '@' || text[0] !== '@' || text === '' || text.length < viewer.prefix.length &&\n textBoxText === viewer.prefix.substring(2, viewer.prefix.length - 1)) {\n _this.handleBackKey();\n if (viewer.editableDiv.innerText.length < 2) {\n _this.predictText();\n }\n }\n else if (text.indexOf(viewer.prefix) === 0 && text.length > viewer.prefix.length) {\n _this.handleTextInput(text.substring(viewer.prefix.length));\n }\n else if (text.indexOf(viewer.prefix) === -1 && text[text.length - 1] !== String.fromCharCode(160)\n && text[text.length - 1] !== ' ') {\n if ((textBoxText.charAt(0).toLowerCase() + textBoxText.slice(1)) === viewer.prefix.substring(2)) {\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionParagraph(viewer.selection.start.currentWidget, _this.selection.start.offset - (viewer.prefix.length - 2));\n }\n _this.handleTextInput(textBoxText);\n }\n else if (text.length !== 2) {\n _this.handleTextInput(' ');\n }\n }\n }\n else {\n var text = _this.viewer.editableDiv.innerText;\n if (text !== String.fromCharCode(160)) {\n // tslint:disable-next-line:max-line-length\n if (text !== '\\r' && text !== '\\b' && text !== '\\u001B' && !_this.owner.isReadOnlyMode && _this.viewer.isControlPressed === false) {\n _this.handleTextInput(text);\n }\n }\n else {\n _this.handleTextInput(' ');\n }\n _this.viewer.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n * @param {ClipboardEvent} event\n * @private\n */\n this.onPaste = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.pasteInternal(event);\n }\n event.preventDefault();\n };\n this.viewer = viewer;\n this.tableResize = new TableResizer(this.viewer.owner);\n }\n Object.defineProperty(Editor.prototype, \"editorHistory\", {\n get: function () {\n return this.viewer.owner.editorHistory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"selection\", {\n get: function () {\n if (this.viewer) {\n return this.viewer.selection;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"owner\", {\n get: function () {\n return this.viewer.owner;\n },\n enumerable: true,\n configurable: true\n });\n Editor.prototype.getModuleName = function () {\n return 'Editor';\n };\n Editor.prototype.insertField = function (code, result) {\n var fieldCode = code;\n if (isNullOrUndefined(result)) {\n fieldCode = HelperMethods.trimStart(fieldCode);\n if (fieldCode.substring(0, 10) === 'MERGEFIELD') {\n fieldCode = fieldCode.substring(10).trim();\n var index = fieldCode.indexOf('\\\\*');\n result = '«' + fieldCode.substring(0, index).trim() + '»';\n }\n }\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n line.children.push(fieldBegin);\n var fieldCodeSpan = new TextElementBox();\n fieldCodeSpan.text = code;\n line.children.push(fieldCodeSpan);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n var fieldResultSpan = new TextElementBox();\n fieldResultSpan.text = result;\n line.children.push(fieldResultSpan);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldEnd.fieldBegin = fieldBegin;\n fieldBegin.fieldEnd = fieldEnd;\n fieldSeparator.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n this.viewer.fields.push(fieldBegin);\n var widgets = [];\n widgets.push(paragraph);\n this.pasteContentsInternal(widgets);\n };\n /**\n * To update style for paragraph\n * @param style - style name\n * @param clearDirectFormatting - Removes manual formatting (formatting not applied using a style)\n * from the selected text, to match the formatting of the applied style. Default value is false.\n */\n Editor.prototype.applyStyle = function (style, clearDirectFormatting) {\n clearDirectFormatting = isNullOrUndefined(clearDirectFormatting) ? false : clearDirectFormatting;\n if (clearDirectFormatting) {\n this.initComplexHistory('ApplyStyle');\n this.clearFormatting();\n }\n var styleObj = this.viewer.styles.findByName(style);\n if (styleObj !== undefined) {\n this.onApplyParagraphFormat('styleName', styleObj, false, true);\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.viewer.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.viewer.preDefinedStyles.get(style)), this.viewer.styles);\n this.applyStyle(style);\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo && this.editorHistory.currentHistoryInfo.action === 'ApplyStyle') {\n this.editorHistory.updateComplexHistory();\n }\n };\n // Public Implementation Starts\n /**\n * Moves the selected content in the document editor control to clipboard.\n */\n Editor.prototype.cut = function () {\n if (this.owner.isReadOnlyMode || this.selection.isEmpty) {\n return;\n }\n this.selection.copySelectedContent(true);\n };\n /**\n * Notify content change event\n * @private\n */\n Editor.prototype.fireContentChange = function () {\n if (this.viewer.owner.isLayoutEnabled && !this.viewer.owner.isShiftingEnabled) {\n this.viewer.owner.fireContentChange();\n }\n };\n /**\n * Update physical location for text position\n * @private\n */\n Editor.prototype.updateSelectionTextPosition = function (isSelectionChanged) {\n this.getOffsetValue(this.selection);\n this.selection.start.updatePhysicalPosition(true);\n if (this.selection.isEmpty) {\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.selection.end.updatePhysicalPosition(true);\n }\n this.selection.upDownSelectionLength = this.selection.end.location.x;\n this.selection.fireSelectionChanged(isSelectionChanged);\n };\n /**\n * Predict text\n * @private\n */\n Editor.prototype.predictText = function () {\n this.viewer.suffix = '';\n if (this.selection.start.paragraph.isEmpty() || this.selection.start.offset === 0 &&\n this.selection.start.currentWidget.isFirstLine() || this.selection.end.offset === 0 &&\n this.selection.end.currentWidget.isFirstLine()) {\n this.viewer.prefix = '';\n }\n else {\n this.getPrefixAndSuffix();\n }\n this.viewer.prefix = '@' + String.fromCharCode(160) + this.viewer.prefix; //  \n this.viewer.editableDiv.innerText = this.viewer.prefix;\n this.viewer.selection.setEditableDivCaretPosition(this.viewer.prefix.length);\n };\n /**\n * Gets prefix and suffix.\n * @private\n */\n /* tslint:disable:max-func-body-length */\n Editor.prototype.getPrefixAndSuffix = function () {\n var viewer = this.viewer;\n if (this.selection.text !== '') {\n viewer.prefix = '';\n return;\n }\n else {\n var startIndex = 0;\n var inlineInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset, startIndex);\n var inline = inlineInfo.element;\n startIndex = inlineInfo.index;\n if (inline !== undefined) {\n var boxInfo = this.selection.getElementBoxInternal(inline, startIndex);\n var box = boxInfo.element;\n startIndex = boxInfo.index;\n var spaceIndex = 0;\n if (!isNullOrUndefined(box)) {\n var prefixAdded = false;\n if (box instanceof TextElementBox && startIndex > 0 && box.line.isFirstLine()) {\n viewer.prefix = '';\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n /* tslint:disable:no-conditional-assignment */\n while ((spaceIndex = viewer.prefix.lastIndexOf(' ')) < 0 && inline instanceof TextElementBox) {\n if (inline.previousNode instanceof TextElementBox && viewer.prefix.indexOf(' ') === -1) {\n if (!prefixAdded) {\n viewer.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n viewer.prefix = inline.text + viewer.prefix;\n }\n inline = inline.previousNode;\n // If the line has no elements then break the loop to avoid the exception.\n if (inline instanceof ListTextElementBox) {\n break;\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n }\n else if (!(inline.previousNode instanceof TextElementBox)) {\n if (!prefixAdded) {\n viewer.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n viewer.prefix = inline.text + viewer.prefix;\n }\n break;\n }\n }\n if (!(viewer.prefix.length > 1 && viewer.prefix[viewer.prefix.length - 1] === ' ' &&\n viewer.prefix[viewer.prefix.length - 2] === '.')) {\n spaceIndex = viewer.prefix.lastIndexOf(' ');\n }\n else {\n spaceIndex = -1;\n viewer.prefix = '';\n }\n viewer.prefix = spaceIndex < 0 ? viewer.prefix : viewer.prefix.substring(spaceIndex);\n if (viewer.prefix.indexOf(' ') === 0 && viewer.prefix.length >= 1) {\n viewer.prefix = viewer.prefix.substring(1);\n }\n // suffix text prediction\n var endIndex = 0;\n var endInlineInfo = this.selection.end.currentWidget.getInline(this.selection.end.offset, endIndex);\n var endInline = endInlineInfo.element;\n endIndex = endInlineInfo.index;\n boxInfo = this.selection.getElementBoxInternal(endInline, endIndex);\n box = boxInfo.element;\n endIndex = boxInfo.index;\n if (box) {\n var suffixAdded = false;\n if (box instanceof TextElementBox && endIndex < box.length) {\n viewer.suffix = '';\n }\n // boxIndex = renderedElements.get(endInline).indexOf(box);\n while ((spaceIndex = viewer.suffix.indexOf(' ')) < 0 && endInline instanceof TextElementBox) {\n if (endInline.nextNode instanceof TextElementBox && viewer.suffix.indexOf(' ') === -1) {\n if (!suffixAdded) {\n viewer.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n viewer.suffix = viewer.suffix + endInline.text;\n }\n endInline = endInline.nextNode;\n }\n else if (!(endInline.nextNode instanceof TextElementBox)) {\n if (!suffixAdded) {\n viewer.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n viewer.suffix = viewer.suffix + endInline.text;\n }\n break;\n }\n }\n spaceIndex = viewer.suffix.indexOf(' ');\n viewer.suffix = spaceIndex < 0 ? viewer.suffix : viewer.suffix.substring(0, spaceIndex);\n }\n }\n }\n }\n };\n /**\n * key action\n * @private\n */\n // tslint:disable:max-func-body-length\n Editor.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n if (ctrl && !shift && !alt) {\n this.viewer.isControlPressed = true;\n switch (key) {\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(false, false);\n }\n break;\n case 13:\n event.preventDefault();\n this.insertPageBreak();\n break;\n case 48:\n event.preventDefault();\n this.onApplyParagraphFormat('beforeSpacing', 0, false, false);\n break;\n case 49:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('lineSpacing', 1, false, false);\n }\n break;\n case 50:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('lineSpacing', 2, false, false);\n }\n break;\n case 53:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('lineSpacing', 1.5, false, false);\n }\n break;\n case 66:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBold();\n }\n break;\n case 68:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.fontDialogModule) {\n this.owner.fontDialogModule.showFontDialog();\n }\n break;\n case 69:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Center');\n }\n event.preventDefault();\n break;\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnly && this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.isReplace = true;\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n case 73:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleItalic();\n }\n break;\n case 74:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Justify');\n }\n event.preventDefault();\n break;\n case 75:\n event.preventDefault();\n if (this.owner.hyperlinkDialogModule && !this.owner.isReadOnlyMode) {\n this.owner.hyperlinkDialogModule.show();\n }\n break;\n case 76:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Left');\n }\n event.preventDefault();\n break;\n case 77:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.increaseIndent();\n }\n event.preventDefault();\n break;\n case 78:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.openBlank();\n }\n break;\n case 82:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Right');\n }\n event.preventDefault();\n break;\n case 85:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.toggleUnderline('Single');\n }\n break;\n case 88:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.editor.cut();\n }\n break;\n case 89:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.redo();\n event.preventDefault();\n }\n break;\n case 90:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.undo();\n event.preventDefault();\n }\n break;\n case 219:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 221:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBaselineAlignment('Subscript');\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n switch (key) {\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(false, true);\n }\n break;\n case 13:\n this.handleShiftEnter();\n event.preventDefault();\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 68:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.toggleUnderline('Double');\n }\n break;\n case 77:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.decreaseIndent();\n }\n event.preventDefault();\n break;\n case 188:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 190:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBaselineAlignment('Superscript');\n }\n }\n }\n else if (!shift && ctrl && alt) {\n switch (key) {\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.toggleHighlightColor();\n }\n break;\n }\n }\n else {\n switch (key) {\n case 8:\n event.preventDefault();\n this.handleBackKey();\n break;\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(true, false);\n }\n break;\n case 13:\n event.preventDefault();\n this.handleEnterKey();\n break;\n case 46:\n this.handleDelete();\n event.preventDefault();\n break;\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.handleShiftEnter = function () {\n if (!this.owner.isReadOnlyMode) {\n this.handleTextInput('\\v');\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles back key.\n * @private\n */\n Editor.prototype.handleBackKey = function () {\n if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.onBackSpace();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles delete\n * @private\n */\n Editor.prototype.handleDelete = function () {\n if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.onDelete();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles enter key.\n * @private\n */\n Editor.prototype.handleEnterKey = function () {\n if (!this.owner.isReadOnlyMode) {\n if (Browser.isDevice) {\n this.viewer.isCompositionStart = false;\n }\n this.owner.editorModule.onEnter();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * @private\n */\n Editor.prototype.handleTextInput = function (text) {\n var _this = this;\n if (!this.owner.isReadOnlyMode) {\n if (this.animationTimer) {\n clearTimeout(this.animationTimer);\n }\n classList(this.selection.caret, [], ['e-de-cursor-animation']);\n this.owner.editorModule.insertText(text, false);\n /* tslint:disable:align */\n this.animationTimer = setTimeout(function () {\n if (_this.animationTimer) {\n clearTimeout(_this.animationTimer);\n }\n if (_this.selection && _this.selection.caret) {\n classList(_this.selection.caret, ['e-de-cursor-animation'], []);\n }\n }, 600);\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Copies to format.\n * @param {WCharacterFormat} format\n * @private\n */\n Editor.prototype.copyInsertFormat = function (format, copy) {\n var insertFormat = new WCharacterFormat();\n var sFormat = this.selection.characterFormat;\n if (copy) {\n insertFormat.copyFormat(format);\n }\n if (!isNullOrUndefined(sFormat.bold) && format.bold !== sFormat.bold) {\n insertFormat.bold = sFormat.bold;\n }\n if (!isNullOrUndefined(sFormat.italic) && format.italic !== sFormat.italic) {\n insertFormat.italic = sFormat.italic;\n }\n if (sFormat.fontSize > 0 && format.fontSize !== sFormat.fontSize) {\n insertFormat.fontSize = sFormat.fontSize;\n }\n if (!isNullOrUndefined(sFormat.fontFamily) && format.fontFamily !== sFormat.fontFamily) {\n insertFormat.fontFamily = sFormat.fontFamily;\n }\n if (!isNullOrUndefined(sFormat.highlightColor) && format.highlightColor !== sFormat.highlightColor) {\n insertFormat.highlightColor = sFormat.highlightColor;\n }\n if (!isNullOrUndefined(sFormat.baselineAlignment) && format.baselineAlignment !== sFormat.baselineAlignment) {\n insertFormat.baselineAlignment = sFormat.baselineAlignment;\n }\n if (!isNullOrUndefined(sFormat.fontColor) && format.fontColor !== sFormat.fontColor) {\n insertFormat.fontColor = sFormat.fontColor;\n }\n if (!isNullOrUndefined(sFormat.underline) && format.underline !== sFormat.underline) {\n insertFormat.underline = sFormat.underline;\n }\n if (!isNullOrUndefined(sFormat.strikethrough) && format.strikethrough !== sFormat.strikethrough) {\n insertFormat.strikethrough = sFormat.strikethrough;\n }\n return insertFormat;\n };\n /**\n * Inserts the specified text at cursor position\n * @param {string} text\n * @param {boolean} isReplace\n * @private\n */\n //tslint:disable: max-func-body-length\n Editor.prototype.insertText = function (text, isReplace) {\n var selection = this.viewer.selection;\n var insertPosition;\n var isRemoved = true;\n this.isListTextSelected();\n this.initHistory('Insert');\n var paragraphInfo = this.getParagraphInfo(selection.start);\n this.viewer.selection.editPosition = this.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n if ((!selection.isEmpty && !this.viewer.selection.isImageSelected) ||\n this.viewer.isListTextSelected && selection.contextType === 'List') {\n selection.isSkipLayouting = true;\n selection.skipFormatRetrieval = true;\n isRemoved = this.removeSelectedContents(selection);\n selection.skipFormatRetrieval = false;\n selection.isSkipLayouting = false;\n }\n paragraphInfo = this.getParagraphInfo(selection.start);\n if (isRemoved) {\n selection.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n insertPosition = selection.start;\n if (insertPosition.paragraph.isEmpty()) {\n var span = new TextElementBox();\n var insertFormat = this.copyInsertFormat(insertPosition.paragraph.characterFormat, true);\n span.characterFormat.copyFormat(insertFormat);\n span.text = text;\n span.line = insertPosition.paragraph.childWidgets[0];\n span.margin = new Margin(0, 0, 0, 0);\n span.line.children.push(span);\n if ((insertPosition.paragraph.paragraphFormat.textAlignment === 'Center'\n || insertPosition.paragraph.paragraphFormat.textAlignment === 'Right') &&\n insertPosition.paragraph.paragraphFormat.listFormat.listId === -1) {\n insertPosition.paragraph.x = this.viewer.clientActiveArea.x;\n }\n this.viewer.layout.reLayoutParagraph(insertPosition.paragraph, 0, 0);\n }\n else {\n var indexInInline = 0;\n var inlineObj = insertPosition.currentWidget.getInline(insertPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // Todo: compare selection format\n var insertFormat = this.copyInsertFormat(inline.characterFormat, true);\n if (insertFormat.isSameFormat(inline.characterFormat)) {\n this.insertTextInline(inline, selection, text, indexInInline);\n }\n else {\n var tempSpan = new TextElementBox();\n tempSpan.text = text;\n tempSpan.line = inline.line;\n tempSpan.characterFormat.copyFormat(insertFormat);\n var insertIndex = inline.indexInOwner;\n if (indexInInline === inline.length) {\n inline.line.children.splice(insertIndex + 1, 0, tempSpan);\n }\n else if (indexInInline === 0) {\n inline.line.children.splice(insertIndex, 0, tempSpan);\n }\n else {\n if (inline instanceof TextElementBox) {\n var splittedSpan = new TextElementBox();\n splittedSpan.line = inline.line;\n splittedSpan.characterFormat.copyFormat(inline.characterFormat);\n splittedSpan.text = inline.text.substring(indexInInline);\n inline.text = inline.text.slice(0, indexInInline);\n inline.line.children.splice(insertIndex + 1, 0, splittedSpan);\n }\n inline.line.children.splice(insertIndex + 1, 0, tempSpan);\n }\n this.viewer.layout.reLayoutParagraph(insertPosition.paragraph, inline.line.indexInOwner, 0);\n }\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + text.length, true);\n this.updateEndPosition();\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentHistoryInfo) && (this.editorHistory.currentHistoryInfo.action === 'ListSelect') &&\n this.viewer.isListTextSelected) {\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n // if (!isNullOrUndefined(selection.currentHistoryInfo) && (selection.currentHistoryInfo.action === 'MultiSelection')) {\n // this.updateComplexHistory();\n // } else { \n this.reLayout(selection);\n // }\n }\n else {\n // selection.selectContent(selection.start, true);\n }\n // insertFormat.destroy();\n if (!isReplace && isRemoved && (text === ' ' || text === '\\t' || text === '\\v')) {\n var hyperlinkField = selection.getHyperlinkField();\n var isSelectionOnHyperlink = !isNullOrUndefined(hyperlinkField);\n var isList = false;\n if (!(text === '\\v')) {\n isList = this.checkAndConvertList(selection, text === '\\t');\n }\n if (isSelectionOnHyperlink) {\n return;\n }\n if (!isList) {\n //Checks if the previous text is URL, then it is auto formatted to hyperlink.\n this.checkAndConvertToHyperlink(selection, false);\n }\n }\n };\n /**\n * Insert Section break at cursor position\n */\n Editor.prototype.insertSectionBreak = function () {\n var selection = this.viewer.selection;\n if (isNullOrUndefined(selection) || this.owner.isReadOnlyMode || selection.start.paragraph.isInHeaderFooter) {\n return;\n }\n this.initHistory('SectionBreak');\n if (!selection.isEmpty) {\n selection.selectContent(selection.isForward ? selection.start : selection.end, true);\n }\n this.viewer.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n this.insertSection(selection, true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n };\n /**\n * @private\n */\n Editor.prototype.insertSection = function (selection, selectFirstBlock) {\n var newSectionFormat = this.selection.start.paragraph.bodyWidget.sectionFormat.cloneFormat();\n var lastBlock;\n var firstBlock;\n if (selection.start.paragraph.isInsideTable) {\n var table = this.viewer.layout.getParentTable(selection.start.paragraph);\n table = table.combineWidget(this.viewer);\n var insertBefore = false;\n if (selection.start.paragraph.associatedCell.rowIndex === 0) {\n insertBefore = true;\n }\n var newParagraph = new ParagraphWidget();\n var previousBlock = table.previousRenderedWidget;\n if (!insertBefore) {\n lastBlock = this.splitTable(table, selection.start.paragraph.associatedCell.ownerRow);\n this.viewer.layout.layoutBodyWidgetCollection(lastBlock.index, lastBlock.containerWidget, lastBlock, false);\n lastBlock = lastBlock.getSplitWidgets().pop();\n }\n else {\n lastBlock = table;\n }\n var insertIndex = 0;\n if ((isNullOrUndefined(previousBlock) || !previousBlock.bodyWidget.equals(lastBlock.bodyWidget)) && insertBefore) {\n insertIndex = 0;\n newParagraph.index = 0;\n }\n else {\n insertIndex = lastBlock.indexInOwner + 1;\n newParagraph.index = lastBlock.index + 1;\n }\n lastBlock.containerWidget.childWidgets.splice(insertIndex, 0, newParagraph);\n newParagraph.containerWidget = lastBlock.containerWidget;\n this.updateNextBlocksIndex(newParagraph, true);\n this.viewer.layout.layoutBodyWidgetCollection(newParagraph.index, newParagraph.containerWidget, newParagraph, false);\n lastBlock = newParagraph;\n }\n else {\n var paragraphInfo = this.getParagraphInfo(selection.start);\n var selectionStart = this.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n //Split Paragraph\n this.splitParagraphInternal(selection, selection.start.paragraph, selection.start.currentWidget, selection.start.offset);\n this.setPositionForCurrentIndex(selection.start, selectionStart);\n lastBlock = selection.start.paragraph.getSplitWidgets().pop();\n }\n //Split body widget\n firstBlock = this.splitBodyWidget(lastBlock.bodyWidget, newSectionFormat, lastBlock).firstChild;\n if (firstBlock instanceof TableWidget) {\n firstBlock.updateRowIndex(0);\n }\n this.viewer.layout.layoutBodyWidgetCollection(firstBlock.index, firstBlock.containerWidget, firstBlock, false);\n if (firstBlock instanceof TableWidget) {\n firstBlock = selection.getFirstParagraphInFirstCell(firstBlock);\n }\n if (selectFirstBlock) {\n selection.selectParagraph(firstBlock, true);\n }\n return firstBlock;\n };\n Editor.prototype.splitBodyWidget = function (bodyWidget, sectionFormat, startBlock) {\n var sectionIndex;\n //Move blocks after the start block to next body widget\n var newBodyWidget = this.viewer.layout.moveBlocksToNextPage(startBlock);\n //Update SectionIndex for splitted body widget\n this.updateSectionIndex(sectionFormat, newBodyWidget, true);\n // insert New header footer widget in to section index \n this.insertRemoveHeaderFooter(newBodyWidget.sectionIndex, true);\n //update header and footer for splitted widget\n this.viewer.layout.layoutHeaderFooter(newBodyWidget, this.viewer, newBodyWidget.page);\n //Update Child item index from 0 for new Section\n this.updateBlockIndex(0, newBodyWidget.firstChild);\n // Start sinfting from first block\n this.viewer.updateClientArea(newBodyWidget.sectionFormat, newBodyWidget.page);\n return newBodyWidget;\n };\n Editor.prototype.insertRemoveHeaderFooter = function (sectionIndex, insert) {\n if (this.viewer.headersFooters[sectionIndex]) {\n // Need to handle further\n }\n else {\n this.viewer.headersFooters[sectionIndex] = {};\n }\n };\n Editor.prototype.updateBlockIndex = function (blockIndex, block) {\n var blocks;\n var sectionIndex = block.bodyWidget.sectionIndex;\n do {\n blocks = block.getSplitWidgets();\n for (var i = 0; i < blocks.length; i++) {\n blocks[i].index = blockIndex;\n }\n blockIndex++;\n block = blocks.pop().nextRenderedWidget;\n } while (!isNullOrUndefined(block) && block.bodyWidget.sectionIndex === sectionIndex);\n };\n Editor.prototype.updateSectionIndex = function (sectionFormat, startBodyWidget, increaseIndex) {\n var currentSectionIndex = startBodyWidget.sectionIndex;\n var blockIndex = 0;\n var bodyWidget = startBodyWidget;\n do {\n if (bodyWidget.index === currentSectionIndex && sectionFormat) {\n bodyWidget.sectionFormat = sectionFormat;\n }\n if (increaseIndex) {\n bodyWidget.index++;\n }\n else {\n bodyWidget.index--;\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n } while (bodyWidget);\n };\n //Auto convert List\n Editor.prototype.checkAndConvertList = function (selection, isTab) {\n var list = selection.paragraphFormat.getList();\n if (!isNullOrUndefined(list)) {\n return false;\n }\n var convertList = false;\n var isLeadingZero = false;\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return false;\n }\n var span = inline;\n var text = span.text.substring(0, indexInInline);\n var tabValue = 0;\n var length = 0;\n while (!isNullOrUndefined(span.previousNode)) {\n // tslint:disable-next-line:max-line-length\n if (span.previousNode instanceof TextElementBox && (span.previousNode.text === '\\t' || span.previousNode.text.trim().length === 0)) {\n (span.previousNode.text === '\\t') ? tabValue += 36 : length = span.previousNode.text.length * 2.5;\n span = span.previousNode;\n continue;\n }\n return false;\n }\n span = inline;\n var index = 0;\n var tabIndex = text.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousNode instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabIndex = previousText.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n text = text.substring(index);\n }\n text = HelperMethods.trimStart(text);\n var numberFormat = text.substring(1, 2);\n var listLevelPattern = this.getListLevelPattern(text.substring(0, 1));\n if (listLevelPattern !== 'None' && this.checkNumberFormat(numberFormat, listLevelPattern === 'Bullet', text)) {\n convertList = true;\n }\n else if (this.checkLeadingZero(text)) {\n isLeadingZero = true;\n convertList = true;\n }\n if (convertList) {\n this.initComplexHistory('AutoList');\n var paragraph = inline.paragraph;\n // tslint:disable-next-line:max-line-length\n selection.start.setPositionParagraph(paragraph.childWidgets[0], paragraph.childWidgets[0].getOffset(inline, indexInInline + 1));\n selection.end.setPositionParagraph(paragraph.childWidgets[0], 0);\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, false);\n var followCharacter = isTab ? 'Tab' : 'Space';\n numberFormat = !isLeadingZero ? '%1' + numberFormat : '%1' + text.substring(text.length - 1, text.length);\n var leadingZeroText = text.substring(text.length - 3, text.length - 1);\n listLevelPattern = !isLeadingZero ? listLevelPattern : this.getListLevelPattern(leadingZeroText);\n var listLevel = new WListLevel(undefined);\n listLevel.listLevelPattern = listLevelPattern;\n if (listLevelPattern === 'Bullet') {\n if (text === '*') {\n listLevel.numberFormat = '\\uf0b7';\n listLevel.characterFormat.fontFamily = 'Symbol';\n }\n else if (text === '-') {\n listLevel.numberFormat = '-';\n }\n }\n else {\n listLevel.numberFormat = numberFormat;\n }\n listLevel.followCharacter = followCharacter;\n var leftIndent = selection.paragraphFormat.leftIndent;\n if (tabValue !== 0 || length !== 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18 + tabValue + length;\n }\n else if (indexInInline > 2) {\n listLevel.paragraphFormat.leftIndent = leftIndent + (indexInInline - 2) * 2.5 + 18;\n }\n else if (leftIndent > 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n if ((!isLeadingZero && text.substring(0, 1) === '0') || leadingZeroText === '00') {\n listLevel.startAt = 0;\n }\n else {\n listLevel.startAt = 1;\n }\n this.autoConvertList(selection, listLevel);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection);\n }\n }\n return convertList;\n };\n Editor.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case '0':\n case '1':\n return 'Arabic';\n case 'I':\n return 'UpRoman';\n case 'i':\n return 'LowRoman';\n case 'A':\n return 'UpLetter';\n case 'a':\n return 'LowLetter';\n case '*':\n case '-':\n return 'Bullet';\n case '00':\n case '01':\n return 'LeadingZero';\n default:\n return 'None';\n }\n };\n Editor.prototype.autoConvertList = function (selection, listLevel) {\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var newList = new WList();\n if (this.viewer.lists.length > 0) {\n newList.listId = this.viewer.lists[this.viewer.lists.length - 1].listId + 1;\n }\n else {\n newList.listId = 0;\n }\n var newAbstractList = new WAbstractList();\n var layout = this.viewer;\n if (layout.abstractLists.length > 0) {\n newAbstractList.abstractListId = layout.abstractLists[layout.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n newAbstractList.abstractListId = 0;\n }\n newList.abstractListId = newAbstractList.abstractListId;\n layout.abstractLists.push(newAbstractList);\n newAbstractList.levels.push(listLevel);\n listLevel.ownerBase = newAbstractList;\n selection.paragraphFormat.setList(newList);\n selection.paragraphFormat.listLevelNumber = 0;\n };\n Editor.prototype.checkNumberFormat = function (numberFormat, isBullet, text) {\n if (isBullet) {\n return numberFormat === '';\n }\n else {\n var index = text.indexOf(numberFormat);\n return (numberFormat === '.' || numberFormat === ')'\n || numberFormat === '>' || numberFormat === '-') && text.substring(index, text.length - 1) === '';\n }\n };\n Editor.prototype.checkLeadingZero = function (text) {\n var j;\n var isZero = false;\n for (var i = 0; i <= text.length - 1; i++) {\n if (text.charAt(i) === '0') {\n isZero = true;\n continue;\n }\n j = i;\n break;\n }\n var numberFormat = undefined;\n if (text.charAt(j) === '1') {\n numberFormat = text.charAt(j + 1);\n }\n else {\n numberFormat = text.charAt(j);\n }\n return isZero && this.checkNumberFormat(numberFormat, false, text);\n };\n Editor.prototype.getPageFromBlockWidget = function (block) {\n var page = undefined;\n if (block.containerWidget instanceof BodyWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof HeaderFooterWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n page = block.containerWidget.bodyWidget.page;\n }\n return page;\n };\n /**\n * @private\n */\n Editor.prototype.insertTextInline = function (element, selection, text, index) {\n if (element instanceof TextElementBox) {\n element.text = HelperMethods.insert(element.text, index, text);\n var paragraph = element.line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(element.line);\n var elementIndex = element.line.children.indexOf(element);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n else if (element instanceof ImageElementBox) {\n this.insertImageText(element, selection, text, index);\n }\n else if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n this.insertFieldBeginText(element, selection, text, index);\n }\n else if (element.fieldType === 2) {\n this.insertFieldSeparatorText(element, selection, text, index);\n }\n else {\n this.insertFieldEndText(element, selection, text, index);\n }\n }\n else if (element instanceof BookmarkElementBox) {\n this.insertBookMarkText(element, selection, text, index);\n }\n };\n Editor.prototype.insertFieldBeginText = function (fieldBegin, selection, text, index) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = fieldBegin.line.paragraph.childWidgets.indexOf(fieldBegin.line);\n var spanIndex = fieldBegin.line.children.indexOf(fieldBegin);\n spanObj.characterFormat.copyFormat(fieldBegin.characterFormat);\n fieldBegin.line.children.splice(spanIndex, 0, spanObj);\n spanObj.line = fieldBegin.line;\n this.viewer.layout.reLayoutParagraph(fieldBegin.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertBookMarkText = function (element, selection, text, index) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = element.line.paragraph.childWidgets.indexOf(element.line);\n var spanIndex = element.line.children.indexOf(element);\n spanObj.characterFormat.copyFormat(element.characterFormat);\n element.line.children.splice(spanIndex, 0, spanObj);\n spanObj.line = element.line;\n this.viewer.layout.reLayoutParagraph(element.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldSeparatorText = function (fieldSeparator, selection, text, index) {\n var previousInline = selection.getPreviousTextInline(fieldSeparator);\n var nextInline = selection.getNextTextInline(fieldSeparator);\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldSeparator.line.children.indexOf(fieldSeparator);\n if (index === fieldSeparator.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n span.characterFormat.copyFormat(fieldSeparator.line.paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInline)) {\n span.characterFormat.copyFormat(nextInline.characterFormat);\n }\n else {\n span.characterFormat.copyFormat(previousInline.characterFormat);\n }\n fieldSeparator.line.children.splice(spanIndex, 0, span);\n span.line = fieldSeparator.line;\n var lineIndex = fieldSeparator.line.paragraph.childWidgets.indexOf(fieldSeparator.line);\n this.viewer.layout.reLayoutParagraph(fieldSeparator.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldEndText = function (fieldEnd, selection, text, index) {\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldEnd.line.children.indexOf(fieldEnd);\n span.characterFormat.copyFormat(fieldEnd.characterFormat);\n fieldEnd.line.children.splice(spanIndex + 1, 0, span);\n span.line = fieldEnd.line;\n var lineIndex = fieldEnd.line.paragraph.childWidgets.indexOf(fieldEnd.line);\n this.viewer.layout.reLayoutParagraph(fieldEnd.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertImageText = function (image, selection, text, index) {\n var previousInlineObj = selection.getPreviousTextInline(image);\n var nextInlineObj = selection.getNextTextInline(image);\n var line = image.line;\n var element = new TextElementBox();\n var paragraph = line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(line);\n element.text = text;\n var spanIndex = line.children.indexOf(image);\n if (index === image.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInlineObj) && isNullOrUndefined(nextInlineObj)) {\n element.characterFormat.copyFormat(paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInlineObj)) {\n element.characterFormat.copyFormat(nextInlineObj.characterFormat);\n }\n else {\n element.characterFormat.copyFormat(previousInlineObj.characterFormat);\n }\n line.children.splice(spanIndex, 0, element);\n element.line = line;\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, spanIndex);\n };\n /**\n * @private\n */\n Editor.prototype.isListTextSelected = function () {\n if (this.viewer.isListTextSelected) {\n this.initComplexHistory('ListSelect');\n // tslint:disable-next-line:max-line-length\n if (this.viewer.selection.start.paragraph.paragraphFormat.listFormat && this.viewer.selection.start.paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n };\n //Auto Format and insert Hyperlink Implementation starts\n Editor.prototype.checkAndConvertToHyperlink = function (selection, isEnter, paragraph) {\n var text;\n var span;\n if (isEnter) {\n span = paragraph.lastChild.children[paragraph.lastChild.children.length - 1];\n text = span.text;\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return;\n }\n span = inline;\n text = span.text.substring(0, indexInInline);\n }\n var index = 0;\n var tabCharIndex = text.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousNode instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabCharIndex = previousText.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n }\n text = text.substring(index);\n var lowerCaseText = text.toLowerCase();\n var containsURL = false;\n if (lowerCaseText.substring(0, 8) === 'file:///'\n || (lowerCaseText.substring(0, 7) === 'http://' && lowerCaseText.length > 7)\n || (lowerCaseText.substring(0, 8) === 'https://' && lowerCaseText.length > 8)\n || (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4)\n || (lowerCaseText.substring(0, 3) === '\\\\' && lowerCaseText.length > 3)\n || (lowerCaseText.substring(0, 7) === 'mailto:' && lowerCaseText.length > 7)) {\n containsURL = true;\n if (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4) {\n text = 'http://' + text;\n }\n }\n else {\n var atIndex = text.indexOf('@');\n var dotIndex = text.indexOf('.');\n if (atIndex > 0 && atIndex < dotIndex && dotIndex < text.length - 1) {\n containsURL = true;\n text = 'mailto:' + text;\n }\n }\n if (containsURL) {\n var startPos = new TextPosition(this.viewer.owner);\n startPos.setPositionParagraph(span.line, span.line.getOffset(span, index));\n var endPos = new TextPosition(this.viewer.owner);\n if (isEnter) {\n endPos.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n else {\n if (selection.end.currentWidget.children.length === 0 && selection.end.offset === 0) {\n var prevLine = selection.end.currentWidget.previousLine;\n endPos.setPositionParagraph(prevLine, prevLine.getEndOffset());\n }\n else {\n endPos.setPositionParagraph(selection.end.currentWidget, selection.end.offset - 1);\n }\n }\n this.autoFormatHyperlink(selection, text, startPos, endPos);\n }\n };\n Editor.prototype.autoFormatHyperlink = function (selection, url, startPosition, endPosition) {\n this.initComplexHistory('AutoFormatHyperlink');\n var blockInfo = this.getParagraphInfo(startPosition);\n var start = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.insertPosition = start;\n }\n // Moves the selection to URL text start and end position.\n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(endPosition);\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldEnd = this.createHyperlinkElement(url, startPosition, endPosition, format);\n // Moves the selection to the end of field end position.\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 1));\n // Moves to next text position. (To achieve common behavior for space and enter).\n selection.start.moveNextPosition();\n selection.end.setPositionInternal(selection.start);\n blockInfo = this.getParagraphInfo(selection.end);\n var end = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = end;\n this.editorHistory.updateComplexHistory();\n this.reLayout(selection);\n }\n else {\n this.updateComplexWithoutHistory(0, start, end);\n }\n };\n Editor.prototype.appylingHyperlinkFormat = function (selection) {\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'Single', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', '#0563c1', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.createHyperlinkElement = function (url, startPosition, endPosition, format) {\n var selection = this.selection;\n this.viewer.layout.allowLayout = false;\n this.appylingHyperlinkFormat(selection);\n this.viewer.layout.allowLayout = true;\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n selection.start.setPositionInternal(selection.end);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(selection.start);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n fieldEnd.linkFieldCharacter(this.viewer);\n this.viewer.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n return fieldEnd;\n };\n Editor.prototype.insertHyperlinkfield = function (selection, format, url, isBookmark) {\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = new FieldElementBox(0);\n begin.characterFormat.copyFormat(format);\n begin.line = selection.start.currentWidget;\n this.initInsertInline(begin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(format);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.initInsertInline(span);\n var separator = new FieldElementBox(2);\n separator.characterFormat.copyFormat(format);\n separator.line = selection.start.currentWidget;\n this.initInsertInline(separator);\n return begin;\n };\n Editor.prototype.unLinkFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n if (inline.fieldEnd) {\n if (this.viewer) {\n this.viewer.fieldToLayout = inline;\n this.viewer.fieldEndParagraph = inline.line.paragraph;\n }\n // inline.line.paragraph.addFieldCharacter(inline.fieldEnd);\n inline.fieldEnd = undefined;\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (!isNullOrUndefined(inline.fieldEnd)) {\n if (this.viewer) {\n this.viewer.fieldToLayout = inline.fieldBegin;\n this.viewer.fieldEndParagraph = inline.line.paragraph;\n }\n inline.fieldBegin.fieldSeparator = undefined;\n inline.fieldEnd.fieldSeparator = undefined;\n }\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.fieldBegin) {\n if (!isNullOrUndefined(this.viewer)) {\n this.viewer.fieldToLayout = inline.fieldBegin;\n this.viewer.fieldEndParagraph = inline.line.paragraph;\n }\n var fieldIndex = this.viewer.fields.indexOf(inline.fieldBegin);\n if (fieldIndex !== -1) {\n this.viewer.fields.splice(fieldIndex, 1);\n }\n inline.fieldBegin = undefined;\n }\n }\n };\n Editor.prototype.getCharacterFormat = function (selection) {\n if (selection.start.paragraph.isEmpty()) {\n return selection.start.paragraph.characterFormat;\n }\n else {\n var info = selection.start.currentWidget.getInline(selection.start.offset, 0);\n return info.element.characterFormat;\n }\n };\n /**\n * Insert Hyperlink\n * @param {string} url\n * @param {string} displayText\n * @param {boolean} remove\n * @private\n */\n Editor.prototype.insertHyperlink = function (url, displayText, remove, isBookmark) {\n var selection = this.viewer.selection;\n if (selection.start.paragraph.associatedCell !== selection.end.paragraph.associatedCell) {\n return;\n }\n if (remove) {\n //Empty selection Hyperlink insert\n this.insertHyperlinkInternal(selection, url, displayText, isBookmark);\n }\n else {\n //Non-Empty Selection- change the selected text to Field \n // this.preservedFontCol = this.getFontColor();\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var fieldStartPosition = new TextPosition(this.viewer.owner);\n fieldStartPosition.setPositionInternal(startPosition);\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat(undefined);\n format.copyFormat(temp);\n this.initComplexHistory('InsertHyperlink');\n var blockInfo = this.getParagraphInfo(startPosition);\n var start = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n // tslint:disable-next-line:max-line-length\n this.editorHistory.currentHistoryInfo.insertPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.appylingHyperlinkFormat(selection);\n this.viewer.layout.allowLayout = true;\n startPosition.setPositionInternal(endPosition);\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n startPosition.setPositionInternal(endPosition);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n startPosition.setPositionInternal(fieldStartPosition);\n endPosition.setPositionInternal(startPosition);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url, isBookmark);\n fieldEnd.linkFieldCharacter(this.viewer);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n this.viewer.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n var lineWidget = fieldEnd.line;\n selection.selects(lineWidget, lineWidget.getOffset(fieldEnd, fieldEnd.length), true);\n blockInfo = this.getParagraphInfo(endPosition);\n var end = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n // tslint:disable-next-line:max-line-length\n this.editorHistory.currentHistoryInfo.endPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.updateComplexWithoutHistory(1, start, end);\n }\n }\n };\n Editor.prototype.insertHyperlinkInternal = function (selection, url, displayText, isBookmark) {\n if (isNullOrUndefined(selection.start)) {\n return;\n }\n if (this.editHyperlink(selection, url, displayText)) {\n return;\n }\n this.initHistory('InsertHyperlink');\n var isRemoved = true;\n if (!selection.isEmpty) {\n isRemoved = this.removeSelectedContents(selection);\n }\n if (isRemoved) {\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n }\n //else\n // this.Select(Start, true);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.insertHyperlinkByFormat = function (selection, url, displayText, format, isBookmark) {\n this.updateInsertPosition();\n selection.owner.isShiftingEnabled = true;\n var indexInInline = 0;\n var initial = indexInInline;\n var element = [];\n var fieldBegin = new FieldElementBox(0);\n element.push(fieldBegin);\n var span = new TextElementBox();\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n element.push(fieldSeparator);\n if (!isNullOrUndefined(displayText) && displayText !== '') {\n span = new TextElementBox();\n span.characterFormat.underline = 'Single';\n span.characterFormat.fontColor = '#0563c1';\n span.text = displayText;\n element.push(span);\n }\n var fieldEnd = new FieldElementBox(1);\n element.push(fieldEnd);\n this.insertElement(element);\n var paragraph = selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.viewer);\n if (this.viewer.fields.indexOf(fieldBegin) === -1) {\n this.viewer.fields.push(fieldBegin);\n }\n var offset = fieldEnd.line.getOffset(fieldEnd, 1);\n selection.selects(fieldEnd.line, fieldEnd.line.getOffset(fieldEnd, fieldEnd.length), true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n };\n Editor.prototype.initInsertInline = function (element, insertHyperlink) {\n this.initHistory('InsertInline');\n this.insertInlineInSelection(this.viewer.selection, element);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @private\n */\n Editor.prototype.insertElementInCurrentLine = function (selection, inline, isReLayout) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n this.updateInsertPosition();\n this.insertElement([inline]);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * Edit Hyperlink\n * @param {Selection} selection\n * @param {string} url\n * @param {string} displayText\n * @private\n */\n Editor.prototype.editHyperlink = function (selection, url, displayText, isBookmark) {\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return false;\n }\n this.initHistory('InsertHyperlink');\n this.editHyperlinkInternal = isNullOrUndefined(this.editorHistory)\n || (this.editorHistory && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo));\n var fieldResult = '';\n var isNestedField = false;\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldSeparator = undefined;\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n fieldSeparator = fieldBegin.fieldSeparator;\n // tslint:disable-next-line:max-line-length\n var fieldObj = selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, isNestedField, format);\n fieldResult = fieldObj.displayText;\n isNestedField = fieldObj.isNestedField;\n format = fieldObj.format;\n }\n var offset = fieldBegin.line.getOffset(fieldBegin, 0);\n selection.start.setPositionParagraph(fieldBegin.line, offset);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n selection.end.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n this.deleteSelectedContents(selection, false);\n if (!isNestedField && fieldResult !== displayText || isNullOrUndefined(fieldSeparator)) {\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n }\n else {\n //Modify the new hyperlink url. Inserts field begin, url and field separator.\n this.updateInsertPosition();\n var newFieldBegin = new FieldElementBox(0);\n newFieldBegin.characterFormat.copyFormat(fieldBegin.characterFormat);\n newFieldBegin.line = selection.start.currentWidget;\n this.insertInlineInternal(newFieldBegin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.insertInlineInternal(span);\n var nodes = this.editorHistory && this.editorHistory.currentBaseHistoryInfo ?\n this.editorHistory.currentBaseHistoryInfo.removedNodes : this.nodes;\n this.insertClonedFieldResult(selection, nodes, fieldSeparator);\n var fieldEnd = selection.end.currentWidget.getInline(selection.end.offset, 0).element;\n fieldEnd.linkFieldCharacter(this.viewer);\n var paragraph = newFieldBegin.line.paragraph;\n var lineIndex = newFieldBegin.line.paragraph.childWidgets.indexOf(newFieldBegin.line);\n var elementIndex = newFieldBegin.line.children.indexOf(newFieldBegin);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n selection.selects(newFieldBegin.fieldEnd.line, offset, true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n }\n this.editHyperlinkInternal = false;\n this.nodes = [];\n return true;\n };\n /* tslint:disable:no-any */\n Editor.prototype.insertClonedFieldResult = function (selection, nodes, fieldSeparator) {\n var fieldEnd;\n var isStarted = false;\n for (var i = nodes.length - 1; i > -1; i--) {\n var node = nodes[i];\n /* tslint:enable:no-any */\n if (!isStarted) {\n if (fieldSeparator === node) {\n isStarted = true;\n }\n else {\n if (node instanceof ParagraphWidget && node === fieldSeparator.line.paragraph) {\n isStarted = true;\n var paragraph = undefined;\n if (i === nodes.length - 1) {\n paragraph = selection.start.paragraph;\n var fieldParagraph = fieldSeparator.line.paragraph;\n this.getClonedFieldResultWithSel(fieldParagraph, selection, fieldSeparator);\n }\n else {\n paragraph = this.getClonedFieldResult(fieldSeparator.line.paragraph, fieldSeparator);\n this.insertParagraph(paragraph, true);\n }\n selection.selectParagraph(selection.getNextParagraphBlock(paragraph), true);\n }\n continue;\n }\n }\n if (node instanceof ElementBox) {\n this.insertInlineInternal(node.clone());\n }\n else if (node instanceof BlockWidget) {\n this.insertBlock(node.clone());\n }\n // else if (node instanceof WSection)\n // editor.insertSection((node as WSection)._Clone());\n }\n };\n Editor.prototype.getClonedFieldResultWithSel = function (paragraph, selection, fieldSeparator) {\n var lineIndex = paragraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = paragraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < paragraph.childWidgets.length; j++) {\n var lineWidget = paragraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n this.insertInlineInternal(lineWidget.children[i].clone());\n }\n }\n };\n Editor.prototype.getClonedFieldResult = function (curParagraph, fieldSeparator) {\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat.copyFormat(curParagraph.characterFormat);\n paragraph.paragraphFormat.copyFormat(curParagraph.paragraphFormat);\n var lineIndex = curParagraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = curParagraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < curParagraph.childWidgets.length; j++) {\n var lineWidget = curParagraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n paragraph.childWidgets[0].children.push(lineWidget.children[i]);\n }\n }\n return paragraph;\n };\n /**\n * Removes the hyperlink if selection is within hyperlink.\n */\n Editor.prototype.removeHyperlink = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var selection = this.selection;\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return;\n }\n var fieldEnd = fieldBegin.fieldEnd;\n var fieldSeparator = fieldBegin.fieldSeparator;\n var fieldStartPosition = new TextPosition(selection.owner);\n // tslint:disable-next-line:max-line-length\n fieldStartPosition.setPositionParagraph(fieldBegin.line, (fieldBegin.line).getOffset(fieldBegin, 0));\n var fieldSeparatorPosition = new TextPosition(selection.owner);\n // tslint:disable-next-line:max-line-length\n fieldSeparatorPosition.setPositionParagraph(fieldSeparator.line, (fieldSeparator.line).getOffset(fieldSeparator, fieldSeparator.length));\n this.initComplexHistory('RemoveHyperlink');\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 0));\n selection.end.setPositionInternal(selection.start);\n this.onDelete();\n selection.start.setPositionInternal(fieldSeparatorPosition);\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'None', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', undefined, false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n selection.end.setPositionInternal(selection.start);\n selection.start.setPositionInternal(fieldStartPosition);\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, true);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n };\n //Paste Implementation starts\n /**\n * Paste copied clipboard content on Paste event\n * @param {ClipboardEvent} event\n * @param {any} pasteWindow?\n * @private\n */\n /* tslint:disable:no-any */\n Editor.prototype.pasteInternal = function (event, pasteWindow) {\n if (this.viewer.owner.enableLocalPaste) {\n this.pasteLocal();\n }\n else {\n if (isNullOrUndefined(pasteWindow)) {\n pasteWindow = window;\n }\n /* tslint:enable:no-any */\n var textContent = '';\n var clipbordData = pasteWindow.clipboardData ? pasteWindow.clipboardData : event.clipboardData;\n textContent = clipbordData.getData('Text');\n if (textContent !== '') {\n this.pasteContents(textContent);\n this.viewer.editableDiv.innerHTML = '';\n }\n }\n this.viewer.updateFocus();\n };\n /**\n * Pastes the data present in local clipboard if any.\n */\n Editor.prototype.pasteLocal = function () {\n /* tslint:disable:no-any */\n if (this.copiedData && this.owner.enableLocalPaste) {\n var document_1 = JSON.parse(this.copiedData);\n this.pasteContents(document_1);\n }\n };\n Editor.prototype.getBlocks = function (pasteContent) {\n var widgets = [];\n if (typeof (pasteContent) === 'string') {\n var startParagraph = this.selection.start.paragraph;\n if (!this.selection.isForward) {\n startParagraph = this.selection.end.paragraph;\n }\n var arr = [];\n var txt = pasteContent;\n txt = txt.replace(/\\r\\n/g, '\\r');\n arr = txt.split('\\r');\n for (var i = 0; i < arr.length; i++) {\n var insertFormat = this.copyInsertFormat(startParagraph.characterFormat, false);\n var insertParaFormat = this.viewer.selection.copySelectionParagraphFormat();\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(insertParaFormat);\n var line = new LineWidget(paragraph);\n if (arr[i].length > 0) {\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(insertFormat);\n textElement.text = arr[i];\n line.children.push(textElement);\n textElement.line = line;\n }\n paragraph.childWidgets.push(line);\n widgets.push(paragraph);\n }\n }\n else {\n for (var i = 0; i < pasteContent.sections.length; i++) {\n this.viewer.owner.parser.parseBody(pasteContent.sections[i].blocks, widgets);\n }\n }\n return widgets;\n };\n Editor.prototype.pasteContents = function (content) {\n this.pasteContentsInternal(this.getBlocks(content));\n };\n Editor.prototype.pasteContentsInternal = function (widgets) {\n /* tslint:enable:no-any */\n var selection = this.viewer.selection;\n var isRemoved = true;\n this.initComplexHistory('Paste');\n if (this.viewer.isListTextSelected) {\n var paragraph = selection.start.paragraph;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n this.initHistory('Paste');\n if (!selection.isEmpty || this.viewer.isListTextSelected) {\n isRemoved = this.removeSelectedContentInternal(selection, selection.start, selection.end);\n }\n if (isRemoved) {\n this.pasteContent(widgets);\n }\n else if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection, selection.isEmpty);\n }\n };\n /* tslint:disable:no-any */\n Editor.prototype.pasteContent = function (widgets) {\n /* tslint:enable:no-any */\n this.viewer.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n this.viewer.owner.isLayoutEnabled = true;\n this.viewer.owner.isPastingContent = true;\n this.pasteCopiedData(widgets);\n this.updateEndPosition();\n this.viewer.owner.isPastingContent = false;\n this.viewer.selection.fireSelectionChanged(true);\n };\n Editor.prototype.pasteCopiedData = function (widgets) {\n for (var j = 0; j < widgets.length; j++) {\n var widget = widgets[j];\n if (widget instanceof ParagraphWidget && widget.childWidgets.length === 0) {\n widget.childWidgets[0] = new LineWidget(widget);\n }\n if (j === widgets.length - 1 && widget instanceof ParagraphWidget) {\n var newParagraph = widget;\n if (newParagraph.childWidgets.length > 0\n && newParagraph.childWidgets[0].children.length > 0) {\n this.insertElement(newParagraph.childWidgets[0].children);\n }\n }\n else if (widget instanceof BlockWidget) {\n var startParagraph = this.selection.start.paragraph;\n if (widget instanceof TableWidget && startParagraph.isInsideTable) {\n var table = widget;\n //Handled to resize table based on parent cell width.\n var clientWidth = startParagraph.getContainerWidth();\n table.fitCellsToClientArea(clientWidth);\n }\n if (widget instanceof TableWidget && startParagraph.isEmpty()\n && startParagraph.previousWidget instanceof TableWidget) {\n this.insertTableRows(widget, startParagraph.previousWidget);\n }\n else {\n this.insertBlockInternal(widget);\n }\n }\n }\n };\n /**\n * Insert Table on undo\n * @param {WTable} table\n * @param {WTable} newTable\n * @param {boolean} moveRows\n * @private\n */\n Editor.prototype.insertTableInternal = function (table, newTable, moveRows) {\n //Gets the index of current table.\n var insertIndex = table.getIndex();\n if (moveRows) {\n //Moves the rows to table.\n for (var i = 0, index = 0; i < table.childWidgets.length; i++, index++) {\n var row = table.childWidgets[i];\n newTable.childWidgets.splice(index, 0, row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n }\n var owner = table.containerWidget;\n this.removeBlock(table);\n //Inserts table in the current table position. \n var blockAdvCollection = owner.childWidgets;\n blockAdvCollection.splice(insertIndex, 0, newTable);\n newTable.index = table.index;\n table.containerWidget = undefined;\n newTable.containerWidget = owner;\n newTable.isGridUpdated = false;\n newTable.buildTableColumns();\n newTable.isGridUpdated = true;\n this.viewer.layout.clearTableWidget(newTable, true, true);\n this.updateNextBlocksIndex(newTable, true);\n this.viewer.layout.linkFieldInTable(newTable);\n this.viewer.layout.layoutBodyWidgetCollection(newTable.index, owner, newTable, false);\n };\n /**\n * Insert Table on undo\n * @param {Selection} selection\n * @param {WBlock} block\n * @param {WTable} table\n * @private\n */\n Editor.prototype.insertBlockTable = function (selection, block, table) {\n var offset = selection.start.offset;\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(selection.start.currentWidget);\n if (block instanceof ParagraphWidget && offset > 0) {\n //Moves the inline items before selection start to the inserted paragraph.\n // tslint:disable-next-line:max-line-length\n this.moveInlines(selection.start.paragraph, block, 0, 0, selection.start.paragraph.firstChild, offset, selection.start.currentWidget);\n selection.selectParagraph(selection.start.paragraph, true);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(this.getHierarchicalIndex(block, offset.toString()), true);\n }\n }\n if (offset > 0 && this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n }\n var index = table.indexInOwner;\n table.containerWidget.childWidgets.splice(index, 0, block);\n block.containerWidget = table.containerWidget;\n block.index = table.index;\n this.updateNextBlocksIndex(block, true);\n this.viewer.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n if (block instanceof TableWidget) {\n paragraph = selection.getFirstParagraphInFirstCell(block);\n }\n this.updateHistoryPosition(this.getHierarchicalIndex(paragraph, '0'), true);\n }\n };\n /**\n * On cut handle selected content remove and relayout\n * @param {Selection} selection\n * @param {TextPosition} startPosition\n * @param {TextPosition} endPosition\n * @private\n */\n Editor.prototype.handleCut = function (selection) {\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.owner.isShiftingEnabled = true;\n var blockInfo = this.getParagraphInfo(startPosition);\n selection.editPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var image = undefined;\n if (startPosition.paragraph === endPosition.paragraph && startPosition.offset + 1 === endPosition.offset) {\n //Gets selected image and copy image to clipboard.\n var index = 0;\n var currentInline = startPosition.paragraph.getInline(endPosition.offset, index);\n var inline = currentInline.element;\n image = inline;\n }\n this.initHistory('Cut');\n selection.owner.isShiftingEnabled = true;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.editPosition, true);\n }\n }\n this.deleteSelectedContent(endPosition.paragraph, selection, startPosition, endPosition, 3);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n }\n this.reLayout(selection);\n };\n Editor.prototype.insertInlineInternal = function (element) {\n var selection = this.selection;\n var length = element.length;\n var paragraphInfo = this.getParagraphInfo(selection.start);\n if (selection.start.paragraph.isEmpty()) {\n var paragraph = selection.start.paragraph;\n if ((paragraph.paragraphFormat.textAlignment === 'Center' || paragraph.paragraphFormat.textAlignment === 'Right')\n && paragraph.paragraphFormat.listFormat.listId === -1) {\n paragraph.x = this.viewer.clientActiveArea.x;\n }\n paragraph.childWidgets[0].children.push(element);\n element.line = paragraph.childWidgets[0];\n element.linkFieldCharacter(this.viewer);\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.insertElementInternal(curInline, element, indexInInline, true);\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n };\n Editor.prototype.insertElement = function (element) {\n var selection = this.selection;\n var length = 0;\n var paragraph = undefined;\n var lineIndex = -1;\n var lineWidget = undefined;\n var insertIndex = 0;\n var paragraphInfo = this.getParagraphInfo(selection.start);\n if (selection.start.paragraph.isEmpty()) {\n paragraph = selection.start.paragraph;\n lineWidget = paragraph.childWidgets[0];\n lineIndex = 0;\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n paragraph = curInline.line.paragraph;\n lineIndex = paragraph.childWidgets.indexOf(curInline.line);\n insertIndex = curInline.indexInOwner;\n lineWidget = curInline.line;\n if (indexInInline === curInline.length) {\n insertIndex++;\n }\n else if (indexInInline === 0) {\n if (isNullOrUndefined(curInline.previousNode)) {\n insertIndex = 0;\n }\n }\n else {\n insertIndex++;\n var prevElement = new TextElementBox();\n prevElement.characterFormat.copyFormat(curInline.characterFormat);\n prevElement.text = curInline.text.substring(indexInInline);\n curInline.text = curInline.text.substr(0, indexInInline);\n lineWidget.children.splice(insertIndex, 0, prevElement);\n prevElement.line = curInline.line;\n }\n }\n for (var i = 0; i < element.length; i++) {\n length += element[i].length;\n lineWidget.children.splice(insertIndex, 0, element[i]);\n element[i].line = lineWidget;\n element[i].linkFieldCharacter(this.viewer);\n insertIndex++;\n }\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, 0);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n };\n Editor.prototype.insertElementInternal = function (element, newElement, index, relayout) {\n var line = element.line;\n var paragraph = line.paragraph;\n var lineIndex = line.indexInOwner;\n var insertIndex = element.indexInOwner;\n if (index === element.length) {\n insertIndex++;\n line.children.splice(insertIndex, 0, newElement);\n }\n else if (index === 0) {\n if (isNullOrUndefined(element.previousNode)) {\n element.line.children.splice(0, 0, newElement);\n insertIndex = 0;\n }\n else {\n element.line.children.splice(insertIndex, 0, newElement);\n }\n }\n else {\n insertIndex++;\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(element.characterFormat);\n textElement.text = element.text.substring(index);\n element.text = element.text.substr(0, index);\n line.children.splice(insertIndex, 0, textElement);\n textElement.line = element.line;\n //Inserts the new inline.\n line.children.splice(insertIndex, 0, newElement);\n insertIndex -= 1;\n }\n newElement.line = element.line;\n newElement.linkFieldCharacter(this.viewer);\n if (relayout) {\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, insertIndex);\n }\n };\n /**\n * Insert Block on undo\n * @param {Selection} selection\n * @param {WBlock} block\n * @private\n */\n Editor.prototype.insertBlock = function (block) {\n var isRemoved = true;\n var selection = this.selection;\n if (!selection.isEmpty) {\n isRemoved = this.removeSelectedContents(selection);\n }\n if (!isRemoved) {\n selection.selectContent(selection.start, false);\n }\n this.insertBlockInternal(block);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n else {\n paragraph = this.selection.getFirstParagraphInFirstCell(block);\n }\n // tslint:disable-next-line:max-line-length\n this.updateHistoryPosition(this.getHierarchicalIndex(paragraph, '0'), true);\n }\n this.fireContentChange();\n };\n /**\n * Insert new Block on specific index\n * @param {Selection} selection\n * @param {BlockWidget} block\n * @private\n */\n Editor.prototype.insertBlockInternal = function (block) {\n var selection = this.selection;\n var isRemoved = true;\n var startPara = this.selection.start.paragraph;\n if (!selection.start.isAtParagraphStart) {\n if (block instanceof ParagraphWidget) {\n this.insertNewParagraphWidget(block, false);\n return;\n }\n this.updateInsertPosition();\n startPara = startPara.combineWidget(this.viewer);\n // tslint:disable-next-line:max-line-length\n this.splitParagraph(startPara, startPara.firstChild, 0, selection.start.currentWidget, selection.start.offset, false);\n selection.selectParagraph(this.selection.start.paragraph, true);\n }\n var bodyWidget = selection.start.paragraph.containerWidget;\n var blockIndex = selection.start.paragraph.index;\n var insertIndex = bodyWidget.childWidgets.indexOf(selection.start.paragraph);\n if (!isNullOrUndefined(bodyWidget)) {\n bodyWidget.childWidgets.splice(insertIndex, 0, block);\n block.containerWidget = bodyWidget;\n block.index = blockIndex;\n block.height = 0;\n if (block instanceof TableWidget) {\n block.isGridUpdated = false;\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n this.updateNextBlocksIndex(block, true);\n this.viewer.layout.layoutBodyWidgetCollection(blockIndex, bodyWidget, block, false);\n }\n };\n /**\n * Inserts the image with specified size at cursor position in the document editor.\n * @param {string} imageString Base64 string, web URL or file URL.\n * @param {number} width? Image width\n * @param {number} height? Image height\n */\n Editor.prototype.insertImage = function (imageString, width, height) {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n if (isNullOrUndefined(width)) {\n width = 100;\n }\n if (isNullOrUndefined(height)) {\n height = 100;\n }\n this.insertPicture(imageString, width, height);\n };\n /**\n * Inserts a table of specified size at cursor position\n * in the document editor.\n * @param {number} rows Default value of ‘rows’ parameter is 1.\n * @param {number} columns Default value of ‘columns’ parameter is 1.\n */\n Editor.prototype.insertTable = function (rows, columns) {\n var startPos = this.selection.start;\n if (this.owner.isReadOnlyMode) {\n return;\n }\n rows = rows || 1;\n columns = columns || 1;\n var table = this.createTable(rows, columns);\n var clientWidth = startPos.paragraph.getContainerWidth();\n table.splitWidthToTableCells(clientWidth);\n var prevBlock = startPos.paragraph.previousWidget;\n if (startPos.currentWidget.isFirstLine() && startPos.offset === 0 && prevBlock instanceof TableWidget) {\n this.insertTableRows(table, prevBlock);\n table.destroy();\n return;\n }\n else {\n this.initHistory('InsertTable');\n this.viewer.owner.isShiftingEnabled = true;\n this.insertBlock(table);\n }\n var startLine = this.selection.getFirstParagraphInFirstCell(table).childWidgets[0];\n startPos.setPosition(startLine, true);\n this.selection.end.setPositionInternal(startPos);\n var lastParagraph = this.selection.getLastParagraphInLastCell(table);\n var endOffset = lastParagraph.getLength() + 1;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n // tslint:disable-next-line:max-line-length\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.getHierarchicalIndex(lastParagraph, endOffset.toString());\n }\n this.reLayout(this.selection);\n };\n /**\n * Inserts the specified number of rows to the table above or below to the row at cursor position.\n * @param {boolean} above The above parameter is optional and if omitted,\n * it takes the value as false and inserts below the row at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n */\n Editor.prototype.insertRow = function (above, count) {\n var rowPlacement = above ? 'Above' : 'Below';\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(rowPlacement === 'Above' ? 'InsertRowAbove' : 'InsertRowBelow');\n }\n this.viewer.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward).getSplitWidgets()[0];\n var endCell = this.getOwnerCell(!this.selection.isForward).getSplitWidgets()[0];\n var table = startCell.ownerTable.combineWidget(this.viewer);\n var row = rowPlacement === 'Below' ? endCell.ownerRow : startCell.ownerRow;\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n var rowCount = count ? count : this.getRowCountToInsert();\n var rows = [];\n var index = row.rowIndex;\n if (rowPlacement === 'Below') {\n index++;\n var isAffectedByRowSpannedCell = isNullOrUndefined(endCell.previousWidget)\n || endCell.columnIndex === endCell.previousWidget.columnIndex + 1;\n var isRowSpanEnd = endCell.cellIndex !== endCell.columnIndex && isAffectedByRowSpannedCell\n && row.rowIndex + startCell.cellFormat.rowSpan - 1 === endCell.ownerRow.rowIndex;\n if (!isRowSpanEnd) {\n if (endCell.cellFormat.rowSpan > 1) {\n if (!isNullOrUndefined(row.nextWidget) && row.nextWidget instanceof TableRowWidget) {\n endCell.cellFormat.rowSpan += rowCount;\n row = row.nextWidget;\n }\n }\n }\n }\n for (var i = 0; i < rowCount; i++) {\n var cellCountInfo = this.updateRowspan(row, rowPlacement === 'Below' ? endCell : startCell, rowPlacement);\n var newRow = this.createRowAndColumn(cellCountInfo.count, i);\n newRow.rowFormat.copyFormat(row.rowFormat);\n this.updateCellFormatForInsertedRow(newRow, cellCountInfo.cellFormats);\n rows.push(newRow);\n }\n table.insertTableRowsInternal(rows, index);\n var cell = undefined;\n var paragraph = undefined;\n if ((table.childWidgets[index] instanceof TableRowWidget)) {\n cell = table.childWidgets[index].firstChild;\n paragraph = this.selection.getFirstParagraph(cell);\n }\n else {\n var widget = undefined;\n while (!(widget instanceof TableWidget)) {\n widget = table.nextRenderedWidget;\n }\n paragraph = this.selection.getFirstParagraphInFirstCell(widget);\n }\n this.viewer.layout.reLayoutTable(table);\n this.selection.selectParagraph(paragraph, true);\n }\n this.reLayout(this.selection, true);\n };\n Editor.prototype.updateCellFormatForInsertedRow = function (newRow, cellFormats) {\n for (var i = 0; i < newRow.childWidgets.length; i++) {\n newRow.childWidgets[i].cellFormat.copyFormat(cellFormats[i]);\n newRow.childWidgets[i].cellFormat.rowSpan = 1;\n }\n };\n Editor.prototype.updateRowspan = function (row, startCell, rowPlacement) {\n var spannedCells = row.getPreviousRowSpannedCells(true);\n var count = 0;\n var cellFormats = [];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var isCellIncluded = false;\n // Need to check with all the row spanned cells. if the start cell contains rowspan greater than 1, \n // and when inserting below, need to increment rowspan for all row spanned cells by 1 except\n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n // and when inserting above, if cloned cell placed in the same row of start cell or\n // if the cloned cell has equal column index, need to skip updating rowspan value of cloned cell.\n // else update row span value for spanned cell except \n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n var isRowSpanned = (isNullOrUndefined(cell.previousWidget)\n || cell.columnIndex !== cell.previousWidget.columnIndex + 1);\n for (var j = 0; j < spannedCells.length; j++) {\n if (isRowSpanned) {\n var spannedCell = spannedCells[j];\n var clonedRowIndex = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n if (cell.columnIndex < spannedCell.columnIndex && cell.cellIndex !== cell.columnIndex) {\n isCellIncluded = true;\n count++;\n cellFormats.push(cell.cellFormat);\n }\n if (startCell.cellFormat.rowSpan === 1) {\n // Need to check whether cell is affected by a row spanned cell. if cell is placed on the row where it is affected \n // by row spanned cell, then if we are inserting row below, need to add new cell with spanned cell width\n // or if we are inserting above, need to update row span value of the spanned cell.\n // if cell is placed inbetween the spanned cell , \n // then if we are inserting below, need to update row span value of spanned cell or\n // if we are inserting above, need to skip updating row span value except\n // if start cell is placed on the same row of spanned cell or if start cell placed in the same column.\n if (clonedRowIndex > cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above'\n && spannedCell.ownerRow === startCell.ownerRow) {\n continue;\n }\n else {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n else if (cell.cellIndex !== cell.columnIndex && isRowSpanned && clonedRowIndex === cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above') {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n else {\n count++;\n cellFormats.push(spannedCell.cellFormat);\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n else {\n if (spannedCell !== startCell) {\n if (rowPlacement === 'Above'\n && (spannedCell.ownerRow === startCell.ownerRow || spannedCell.columnIndex === startCell.columnIndex)) {\n continue;\n }\n else {\n if (spannedCell.columnIndex !== startCell.columnIndex\n && spannedCell.ownerRow.rowIndex !== cell.ownerRow.rowIndex\n && (clonedRowIndex > startCell.ownerRow.rowIndex\n || (rowPlacement === 'Above' && clonedRowIndex === startCell.ownerRow.rowIndex))) {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n }\n }\n }\n if (spannedCells.indexOf(cell) === -1 && cell.cellFormat.rowSpan > 1) {\n isCellIncluded = true;\n }\n if (!isCellIncluded) {\n count++;\n cellFormats.push(cell.cellFormat);\n }\n }\n return { count: count, cellFormats: cellFormats };\n };\n Editor.prototype.insertTableRows = function (table, prevBlock) {\n this.initHistory('InsertRowBelow');\n table.containerWidget = prevBlock.containerWidget;\n prevBlock = prevBlock.combineWidget(this.viewer);\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(prevBlock);\n }\n var row = prevBlock.childWidgets[prevBlock.childWidgets.length - 1];\n prevBlock.insertTableRowsInternal(table.childWidgets, prevBlock.childWidgets.length);\n var paragraph = this.selection.getFirstParagraph(row.nextWidget.childWidgets[0]);\n this.viewer.layout.reLayoutTable(prevBlock);\n this.selection.selectParagraph(paragraph, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.updateHistoryPosition(this.selection.start, true);\n this.updateHistoryPosition(this.selection.end, false);\n }\n this.reLayout(this.selection);\n };\n /**\n * Inserts the specified number of columns to the table left or right to the column at cursor position.\n * @param {number} left The left parameter is optional and if omitted, it takes the value as false and\n * inserts to the right of column at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n */\n Editor.prototype.insertColumn = function (left, count) {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var columnPlacement = left ? 'Left' : 'Right';\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(columnPlacement === 'Left' ? 'InsertColumnLeft' : 'InsertColumnRight');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n this.selection.owner.isLayoutEnabled = false;\n var cellIndex = startCell.columnIndex;\n if (columnPlacement === 'Right') {\n cellIndex = endCell.columnIndex + endCell.cellFormat.columnSpan;\n }\n var startParagraph = undefined;\n var newCell = undefined;\n var columnCount = count ? count : this.getColumnCountToInsert();\n var rowSpannedCells = [];\n var rowSpanCellIndex = cellIndex;\n for (var i = 0; i < columnCount; i++) {\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n newCell = this.createColumn(this.selection.getLastParagraph(startCell));\n newCell.index = j;\n newCell.rowIndex = row.rowIndex;\n newCell.containerWidget = row;\n newCell.cellFormat.copyFormat(startCell.cellFormat);\n newCell.cellFormat.rowSpan = 1;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(newCell);\n }\n if (cellIndex === 0) {\n row.childWidgets.splice(cellIndex, 0, newCell);\n }\n else {\n var isCellInserted = false;\n for (var j_1 = 0; j_1 < row.childWidgets.length; j_1++) {\n var rowCell = row.childWidgets[j_1];\n // Add the row spanned cells to colection for adding column before / after row spnned cells.\n if (rowCell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(rowCell);\n }\n if (rowCell.columnIndex + rowCell.cellFormat.columnSpan === cellIndex) {\n row.childWidgets.splice(rowCell.cellIndex + 1, 0, newCell);\n isCellInserted = true;\n }\n else if (cellIndex > rowCell.columnIndex && rowCell.columnIndex + rowCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowCell.columnIndex + rowCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowCell.cellIndex, 0, newCell);\n isCellInserted = true;\n }\n if (isCellInserted) {\n break;\n }\n }\n // If the cell is not inserted for row, then check for row spanned cells.\n if (!isCellInserted) {\n if (rowSpannedCells.length > 0) {\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.ownerRow !== row\n && row.rowIndex <= rowSpannedCell.ownerRow.rowIndex + rowSpannedCell.cellFormat.rowSpan - 1) {\n if (rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan === cellIndex) {\n if (rowSpannedCell.cellIndex > row.childWidgets.length) {\n row.childWidgets.push(newCell);\n }\n else {\n row.childWidgets.splice(rowSpannedCell.cellIndex, 0, newCell);\n }\n isCellInserted = true;\n }\n else if (cellIndex > rowSpannedCell.columnIndex &&\n rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowSpannedCell.columnIndex, 0, newCell);\n isCellInserted = true;\n }\n }\n if (isCellInserted) {\n break;\n }\n }\n }\n }\n }\n }\n }\n table.updateRowIndex(0);\n var parentTable = this.viewer.layout.getParentTable(table);\n if (parentTable) {\n parentTable.fitChildToClientArea();\n }\n else {\n table.fitChildToClientArea();\n }\n this.selection.owner.isLayoutEnabled = true;\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n this.selection.start.setPosition(startParagraph.firstChild, true);\n this.selection.end.setPosition(this.selection.getLastParagraph(newCell).firstChild, false);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n }\n }\n };\n /**\n * Creates table with specified rows and columns.\n * @private\n */\n Editor.prototype.createTable = function (rows, columns) {\n var startPara = this.selection.start.paragraph;\n var table = new TableWidget();\n table.tableFormat = new WTableFormat(table);\n table.tableFormat.preferredWidthType = 'Auto';\n table.tableFormat.initializeTableBorders();\n var index = 0;\n while (index < rows) {\n var tableRow = this.createRowAndColumn(columns, index);\n tableRow.rowFormat.heightType = 'Auto';\n tableRow.containerWidget = table;\n table.childWidgets.push(tableRow);\n index++;\n }\n return table;\n };\n Editor.prototype.createRowAndColumn = function (columns, rowIndex) {\n var startPara = this.selection.start.paragraph;\n var tableRow = new TableRowWidget();\n tableRow.rowFormat = new WRowFormat(tableRow);\n tableRow.index = rowIndex;\n for (var i = 0; i < columns; i++) {\n var tableCell = this.createColumn(startPara);\n tableCell.index = i;\n tableCell.rowIndex = rowIndex;\n tableCell.containerWidget = tableRow;\n tableRow.childWidgets.push(tableCell);\n }\n return tableRow;\n };\n Editor.prototype.createColumn = function (paragraph) {\n var tableCell = new TableCellWidget();\n var para = new ParagraphWidget();\n para.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n para.characterFormat.copyFormat(paragraph.characterFormat);\n para.containerWidget = tableCell;\n tableCell.childWidgets.push(para);\n tableCell.cellFormat = new WCellFormat(tableCell);\n return tableCell;\n };\n Editor.prototype.getColumnCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (start && end && this.selection.getTable(start, end)) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell) {\n return count = 1;\n }\n if (start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = count + end.paragraph.associatedCell.cellIndex - start.paragraph.associatedCell.cellIndex;\n }\n else {\n count = 0;\n // tslint:disable-next-line:max-line-length\n var selectedCells = start.paragraph.associatedCell.ownerTable.getColumnCellsForSelection(start.paragraph.associatedCell, end.paragraph.associatedCell);\n for (var i = 0; i < selectedCells.length; i++) {\n if (start.paragraph.associatedCell.ownerRow === selectedCells[i].ownerRow) {\n count++;\n }\n }\n }\n }\n return count === 0 ? 1 : count;\n };\n Editor.prototype.getRowCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.selection.getTable(start, end))) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell ||\n start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = 1;\n }\n else {\n return count = count +\n this.getOwnerRow(!this.selection.isForward).rowIndex - this.getOwnerRow(this.selection.isForward).rowIndex;\n }\n }\n return count === 0 ? 1 : count;\n };\n Editor.prototype.getOwnerCell = function (isStart) {\n var cell = undefined;\n var startCell = isStart ? this.selection.start.paragraph.associatedCell\n : this.selection.end.paragraph.associatedCell;\n var endCell = isStart ? this.selection.end.paragraph.associatedCell\n : this.selection.start.paragraph.associatedCell;\n cell = startCell;\n var owner = cell.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endCell.ownerTable) {\n cell = owner.containerWidget;\n owner = cell.ownerTable;\n }\n return cell;\n };\n Editor.prototype.getOwnerRow = function (isStart) {\n var row;\n var startRow = isStart ? this.selection.start.paragraph.associatedCell.ownerRow\n : this.selection.end.paragraph.associatedCell.ownerRow;\n var endRow = isStart ? this.selection.end.paragraph.associatedCell.ownerRow\n : this.selection.start.paragraph.associatedCell.ownerRow;\n row = startRow;\n var owner = row.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endRow.ownerTable) {\n row = owner.containerWidget.ownerRow;\n owner = row.ownerTable;\n }\n return row;\n };\n Editor.prototype.getOwnerTable = function (isStart) {\n var table = undefined;\n var startTable = this.selection.start.paragraph.associatedCell.ownerTable;\n var endTable = this.selection.end.paragraph.associatedCell.ownerTable;\n table = isStart ? startTable : endTable;\n while (table.containerWidget instanceof TableCellWidget && table !== (isStart ? endTable : startTable)) {\n table = table.containerWidget.ownerTable;\n }\n return table;\n };\n /**\n * Merge Selected cells\n * @private\n */\n Editor.prototype.mergeSelectedCellsInTable = function () {\n if (!this.canMergeCells()) {\n return;\n }\n if (this.checkIsNotRedoing()) {\n this.initHistory('MergeCells');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n var startOwnerCell = this.getOwnerCell(this.selection.isForward);\n var endOwnerCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startOwnerCell, endOwnerCell);\n if (containerCell.ownerTable.contains(endOwnerCell)) {\n if (!this.selection.containsCell(containerCell, endOwnerCell)) {\n //Start and End are in different cells. \n var table = startOwnerCell.ownerTable.combineWidget(this.viewer);\n startOwnerCell = this.selection.getSelectedCell(startOwnerCell, containerCell);\n endOwnerCell = this.selection.getSelectedCell(endOwnerCell, containerCell);\n //Merges the selected cells. \n var mergedCell = this.mergeSelectedCells(table, startOwnerCell, endOwnerCell);\n var lastParagraph = this.selection.getLastParagraph(mergedCell);\n endPosition.setPosition(lastParagraph.lastChild, false);\n }\n }\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection, false);\n }\n };\n Editor.prototype.mergeSelectedCells = function (table, startCell, endCell) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n this.selection.owner.isLayoutEnabled = false;\n //Merges the selected cells.\n var start = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(start, end, endCellLeft, endCellRight);\n start = cellInfo.start;\n end = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var mergedCell = undefined;\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(end, 2)) {\n if (isNullOrUndefined(mergedCell)) {\n mergedCell = cell;\n }\n else {\n if (i === rowStartIndex) {\n mergedCell.cellFormat.preferredWidth += cell.cellFormat.preferredWidth;\n mergedCell.cellFormat.columnSpan += cell.cellFormat.columnSpan;\n this.mergeBorders(mergedCell, cell);\n }\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n if (cell.childWidgets.length === 1 && block instanceof ParagraphWidget\n && block.childWidgets.length === 0) {\n break;\n }\n mergedCell.childWidgets.push(block.clone());\n }\n row.childWidgets.splice(j, 1);\n cell.destroy();\n j--;\n }\n }\n }\n if (row.childWidgets.length === 0) {\n var rowIndex = table.childWidgets.indexOf(row);\n row.updateRowBySpannedCells();\n table.childWidgets.splice(rowIndex, 1);\n row.destroy();\n count--;\n i--;\n }\n }\n if (!isNullOrUndefined(mergedCell) && rowStartIndex < count) {\n mergedCell.cellFormat.rowSpan = count - rowStartIndex + 1;\n }\n this.updateBlockIndexAfterMerge(mergedCell);\n table.updateRowIndex(0);\n table.calculateGrid();\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n //Layouts the table after merging cells.\n this.selection.owner.isLayoutEnabled = true;\n return mergedCell;\n };\n Editor.prototype.mergeBorders = function (mergedCell, tableCell) {\n var mergedCellborders = undefined;\n var cellBorders = null;\n if (!isNullOrUndefined(mergedCell.cellFormat.borders)) {\n mergedCellborders = mergedCell.cellFormat.borders;\n }\n if (!isNullOrUndefined(tableCell.cellFormat.borders)) {\n cellBorders = tableCell.cellFormat.borders;\n }\n if (isNullOrUndefined(mergedCellborders) && isNullOrUndefined(cellBorders)) {\n return;\n }\n if (isNullOrUndefined(mergedCellborders)) {\n mergedCellborders = new WBorders(mergedCell.cellFormat);\n mergedCellborders.copyFormat(cellBorders);\n }\n else if (isNullOrUndefined(cellBorders)) {\n return;\n }\n else {\n if (mergedCell.ownerRow.rowIndex === tableCell.ownerRow.rowIndex) {\n mergedCellborders.top = mergedCell.getBorderBasedOnPriority(mergedCellborders.top, cellBorders.bottom);\n mergedCellborders.bottom = mergedCell.getBorderBasedOnPriority(mergedCellborders.bottom, cellBorders.bottom);\n }\n }\n };\n Editor.prototype.updateBlockIndexAfterMerge = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n cell.childWidgets[i].index = i;\n }\n };\n /**\n * Determines whether merge cell operation can be done.\n */\n Editor.prototype.canMergeCells = function () {\n if (this.selection.isEmpty || !this.selection.start.paragraph.isInsideTable || !this.selection.end.paragraph.isInsideTable) {\n return false;\n }\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n if (!this.selection.containsCell(containerCell, endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n var rowSpan = 1;\n if (startCell.ownerRow === endCell.ownerRow) {\n var startCellIndex = startCell.ownerRow.childWidgets.indexOf(startCell);\n for (var i = startCellIndex; i <= startCell.ownerRow.childWidgets.indexOf(endCell); i++) {\n var cell = startCell.ownerRow.childWidgets[i];\n var prevCell = cell.previousWidget;\n if (i !== startCellIndex) {\n if (cell.cellFormat.rowSpan !== rowSpan) {\n return false;\n }\n if (!isNullOrUndefined(prevCell)\n && cell.columnIndex !== (prevCell.cellFormat.columnSpan + prevCell.columnIndex)) {\n return false;\n }\n }\n rowSpan = cell.cellFormat.rowSpan;\n }\n return true;\n }\n return this.canMergeSelectedCellsInTable(startCell.ownerTable, startCell, endCell);\n }\n }\n return false;\n };\n Editor.prototype.canMergeSelectedCellsInTable = function (table, startCell, endCell) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var startLeft = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var endLeft = startLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startLeft, endLeft, endCellLeft, endCellRight);\n startLeft = cellInfo.start;\n endLeft = cellInfo.end;\n var selectionLeft = 0;\n var selectionRight = 0;\n var isRowLeftWithinSel = false;\n var isRowRightWithinSel = false;\n var rowSpannedCells = [];\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n var rowLeft = 0;\n var rowRight = 0;\n var isStarted = false;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (this.checkCellWithInSelection(startLeft, endLeft, cellStart)) {\n isRowLeftWithinSel = false;\n isRowRightWithinSel = false;\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(cell);\n }\n if (!isStarted) {\n rowLeft = cellStart;\n rowRight = cellStart;\n isStarted = true;\n }\n var prevCell = cell.previousWidget;\n if (rowRight !== 0 && HelperMethods.round(rowRight, 0) !== HelperMethods.round(cellStart, 0)) {\n rowRight = cellStart;\n }\n rowRight += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n var isPrevCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, true);\n var isNextCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false);\n // When selected cell not having row spanned cells and column index is not having immediate cell index value,\n // then returned false.\n var isNoRowSpan = rowSpannedCells.length === 0 || rowSpannedCells.length === 1 && rowSpannedCells[0] === cell;\n // checks whether current cell is with in selection.\n var isCellWithInSel = this.checkCurrentCell(rowSpannedCells, cell, isPrevCellWithinSel, isNextCellWithinSel);\n // when last selected row not having equal row span then returned false.\n if (i === count && !isNullOrUndefined(prevCell) && cell.cellFormat.rowSpan > prevCell.cellFormat.rowSpan\n && !isCellWithInSel) {\n return false;\n }\n if (i !== rowStartIndex) {\n for (var m = 0; m < rowSpannedCells.length; m++) {\n {\n var rowSpan = (rowSpannedCells[m].ownerRow.rowIndex + rowSpannedCells[m].cellFormat.rowSpan) - 1;\n if (rowSpan >= row.rowIndex) {\n if (rowSpannedCells[m].columnIndex > cell.columnIndex) {\n isRowRightWithinSel = true;\n }\n else {\n isRowLeftWithinSel = true;\n }\n if (i === count && rowSpannedCells[m] !== cell\n && rowSpan > (cell.ownerRow.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return false;\n }\n if (rowSpan === row.rowIndex && !this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false)) {\n rowSpannedCells.splice(rowSpannedCells.indexOf(rowSpannedCells[m]), 1);\n }\n }\n }\n }\n }\n if (isPrevCellWithinSel && !isNullOrUndefined(prevCell)\n && isNoRowSpan\n && (cell.columnIndex !== prevCell.columnIndex + 1 && this.checkCellWidth(cell))) {\n return false;\n }\n }\n }\n if (i === rowStartIndex) {\n selectionLeft = rowLeft;\n selectionRight = rowRight;\n }\n else {\n if (rowRight > 0 && rowLeft > 0) {\n if (!((isRowLeftWithinSel || Math.round(selectionLeft) === Math.round(rowLeft))\n && (isRowRightWithinSel || Math.round(selectionRight) === Math.round(rowRight)))) {\n return false;\n }\n }\n if (i === count) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkCellWidth = function (cell) {\n var prevCell = cell.previousWidget;\n var cellLeft = this.viewer.selection.getCellLeft(cell.ownerRow, cell);\n var prevCellLeft = this.viewer.selection.getCellLeft(cell.ownerRow, prevCell);\n var left = prevCellLeft + HelperMethods.convertPointToPixel(prevCell.cellFormat.cellWidth);\n if (HelperMethods.round(left, 2) !== HelperMethods.round(cellLeft, 2)) {\n return true;\n }\n return false;\n };\n ;\n Editor.prototype.checkCellWithInSelection = function (startLeft, endLeft, cellStart) {\n if (HelperMethods.round(startLeft, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(endLeft, 2)) {\n return true;\n }\n return false;\n };\n ;\n Editor.prototype.checkPrevOrNextCellIsWithinSel = function (startLeft, endLeft, cell, isPrev) {\n var prevOrNextCell = isPrev ? cell.previousWidget : cell.nextWidget;\n var cellStart = 0;\n if (isNullOrUndefined(prevOrNextCell)) {\n return false;\n }\n cellStart = this.viewer.selection.getCellLeft(prevOrNextCell.ownerRow, prevOrNextCell);\n return this.checkCellWithInSelection(startLeft, endLeft, cellStart);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.checkCurrentCell = function (rowSpannedCells, cell, isPrevCellWithInSel, isNextCellWithinSel) {\n var cellOwner = cell.ownerRow;\n if (rowSpannedCells.length > 0) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCellOwner = rowSpannedCells[i].ownerRow;\n var rowSpan = (spannedCellOwner.rowIndex + rowSpannedCells[i].cellFormat.rowSpan) - 1;\n if (rowSpannedCells[i] === cell && (rowSpannedCells.length === 1 || this.checkRowSpannedCells(rowSpannedCells, cell))\n && !(isNextCellWithinSel || isPrevCellWithInSel)) {\n return true;\n }\n if (rowSpannedCells[i] !== cell && spannedCellOwner.rowIndex < cellOwner.rowIndex\n && rowSpan === (cellOwner.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkRowSpannedCells = function (rowSpannedCells, cell) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n if (rowSpannedCells[i] !== cell && rowSpannedCells[i].columnIndex === cell.columnIndex) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Editor.prototype.insertNewParagraphWidget = function (newParagraph, insertAfter) {\n this.updateInsertPosition();\n this.insertParagraph(newParagraph, insertAfter);\n if (!insertAfter) {\n var nextParagraph = void 0;\n var currentParagraph = newParagraph;\n do {\n nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n currentParagraph = nextParagraph;\n } while (nextParagraph && nextParagraph.equals(newParagraph));\n if (!isNullOrUndefined(nextParagraph)) {\n this.selection.selectParagraph(nextParagraph, true);\n }\n else {\n this.selection.selectParagraph(newParagraph, true);\n }\n }\n this.fireContentChange();\n };\n Editor.prototype.insertParagraph = function (newParagraph, insertAfter) {\n var lineWidget = this.selection.start.currentWidget;\n var offset = this.selection.start.offset;\n var currentParagraph = this.selection.start.paragraph;\n currentParagraph = currentParagraph.combineWidget(this.viewer);\n if (insertAfter) {\n // tslint:disable-next-line:max-line-length\n var length_1 = this.selection.getLineLength(currentParagraph.lastChild);\n var insertIndex_1 = newParagraph.firstChild ? newParagraph.firstChild.children.length : 0;\n // tslint:disable-next-line:max-line-length\n this.moveInlines(currentParagraph, newParagraph, insertIndex_1, offset, lineWidget, length_1, currentParagraph.lastChild);\n }\n else if (offset > 0) {\n this.moveInlines(currentParagraph, newParagraph, 0, 0, currentParagraph.firstChild, offset, lineWidget);\n }\n var splittedWidget = currentParagraph.getSplitWidgets();\n currentParagraph = insertAfter ? splittedWidget[splittedWidget.length - 1] : splittedWidget[0];\n var insertIndex = currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph);\n if (insertAfter) {\n insertIndex++;\n }\n var bodyWidget = currentParagraph.containerWidget;\n newParagraph.index = currentParagraph.index;\n newParagraph.containerWidget = bodyWidget;\n bodyWidget.childWidgets.splice(insertIndex, 0, newParagraph);\n this.updateNextBlocksIndex(insertAfter ? currentParagraph : newParagraph, true);\n newParagraph.height = 0;\n this.viewer.layout.layoutBodyWidgetCollection(newParagraph.index, bodyWidget, newParagraph, false);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.moveInlines = function (currentParagraph, newParagraph, insertIndex, startOffset, startLine, endOffset, endLine) {\n if (newParagraph.childWidgets.length === 0) {\n var line = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(line);\n }\n var isMoved = false;\n this.viewer.layout.clearListElementBox(currentParagraph);\n this.viewer.layout.clearListElementBox(newParagraph);\n for (var j = 0; j < currentParagraph.childWidgets.length; j++) {\n var lineWidget = currentParagraph.childWidgets[j];\n if (startLine === lineWidget && endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, startOffset, endOffset, insertIndex, newParagraph);\n break;\n }\n if (endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, 0, endOffset, insertIndex, newParagraph);\n break;\n }\n else if (startLine === lineWidget) {\n isMoved = true;\n // tslint:disable-next-line:max-line-length\n insertIndex = this.moveContent(lineWidget, startOffset, this.viewer.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n else if (isMoved) {\n insertIndex = this.moveContent(lineWidget, 0, this.viewer.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n }\n this.removeEmptyLine(currentParagraph);\n if (!currentParagraph.isInsideTable) {\n this.viewer.layout.reLayoutParagraph(currentParagraph, 0, 0);\n }\n };\n /**\n * @private\n */\n //tslint:disable-next-line:max-line-length\n Editor.prototype.moveContent = function (lineWidget, startOffset, endOffset, insertIndex, paragraph) {\n var count = 0;\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (startOffset >= count + inline.length || inline instanceof ListTextElementBox) {\n if (!(inline instanceof ListTextElementBox)) {\n count += inline.length;\n }\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n if (endIndex > inline.length) {\n endIndex = inline.length;\n }\n if (startIndex > 0) {\n count += startIndex;\n }\n if (startIndex === 0 && endIndex === inline.length) {\n paragraph.firstChild.children.splice(insertIndex, 0, inline);\n inline.line = paragraph.firstChild;\n insertIndex++;\n // if (editAction < 4) {\n // this.unLinkFieldCharacter(inline);\n lineWidget.children.splice(i, 1);\n i--;\n // }\n }\n else if (inline instanceof TextElementBox) {\n // if (editAction < 4) {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(startIndex, endIndex - startIndex);\n paragraph.firstChild.children.splice(insertIndex, 0, span);\n span.line = paragraph.firstChild;\n insertIndex++;\n inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n }\n if (endOffset <= count + endIndex - startIndex) {\n break;\n }\n count += endIndex - startIndex;\n }\n return insertIndex;\n };\n /**\n * update complex changes when history is not preserved\n * @param {number} action?\n * @param {string} start?\n * @param {string} end?\n * @private\n */\n Editor.prototype.updateComplexWithoutHistory = function (action, start, end) {\n var selection = this.viewer.selection;\n if (action === 0) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n this.viewer.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n this.setPositionForCurrentIndex(selection.start, end);\n this.setPositionForCurrentIndex(selection.end, end);\n }\n if (action === 1) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n var endPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(endPosition, end);\n this.viewer.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.viewer.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (selection.owner.isShiftingEnabled) {\n this.viewer.layout.shiftLayoutedItems();\n if (this.viewer.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n }\n selection.owner.isShiftingEnabled = false;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.viewer.updateFocus();\n this.viewer.updateScrollBars();\n this.fireContentChange();\n this.isHandledComplex = true;\n };\n /**\n * reLayout\n * @param selection\n * @param isSelectionChanged\n * @private\n */\n Editor.prototype.reLayout = function (selection, isSelectionChanged) {\n if (this.editorHistory && this.editorHistory.isHandledComplexHistory()) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n || (this.editorHistory.currentBaseHistoryInfo\n && !(this.editorHistory.currentBaseHistoryInfo.action === 'ClearCharacterFormat'\n || this.editorHistory.currentBaseHistoryInfo.action === 'ClearParagraphFormat'))) {\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n this.isHandledComplex = false;\n return;\n }\n if (isNullOrUndefined(this.viewer.blockToShift)) {\n this.viewer.removeEmptyPages();\n this.viewer.layout.updateFieldElements();\n this.viewer.updateScrollBars();\n if (!selection.owner.isShiftingEnabled) {\n selection.fireSelectionChanged(true);\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n }\n if (isNullOrUndefined(isSelectionChanged)) {\n isSelectionChanged = selection.isEmpty;\n }\n if (selection.owner.isShiftingEnabled) {\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n this.viewer.layout.shiftLayoutedItems();\n if (this.viewer.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n this.getOffsetValue(selection);\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.viewer.updateFocus();\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n this.viewer.layout.allowLayout = true;\n }\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo &&\n ((this.editorHistory.currentBaseHistoryInfo.action !== 'RowResizing'\n && this.editorHistory.currentBaseHistoryInfo.action !== 'CellResizing')\n || (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (this.editorHistory.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n this.editorHistory.currentBaseHistoryInfo.updateSelection();\n }\n this.editorHistory.updateHistory();\n }\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.updateHeaderFooterWidget = function () {\n this.updateHeaderFooterWidgetToPage(this.selection.start.paragraph.bodyWidget);\n this.shiftPageContent(this.selection.start.paragraph.bodyWidget);\n };\n /**\n * @private\n */\n Editor.prototype.updateHeaderFooterWidgetToPage = function (node) {\n var currentPage = node.page;\n node = this.viewer.layout.updateHeaderFooterToParent(node);\n var isEvenPage = (node.headerFooterType === 'EvenHeader' || node.headerFooterType === 'EvenFooter');\n for (var i = 0; i < this.viewer.pages.length; i++) {\n var page = this.viewer.pages[i];\n if ((i + 1 === 1) && page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n node.headerFooterType.indexOf('FirstPage') !== -1) {\n return;\n }\n if (page.index === 0 && page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n node.headerFooterType.indexOf('FirstPage') === -1) {\n continue;\n }\n if (currentPage !== page) {\n if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if (isEvenPage && (i + 1) % 2 === 0) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n else if ((!isEvenPage && (i + 1) % 2 !== 0)) {\n if (page.bodyWidgets[0].sectionFormat.differentFirstPage && (i + 1 !== 1)) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n }\n }\n else {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateHeaderFooterWidgetToPageInternal = function (page, widget, isHeader) {\n if (widget.page !== page) {\n var hfWidget = widget.clone();\n hfWidget.page = page;\n this.viewer.updateHFClientArea(hfWidget.sectionFormat, isHeader);\n hfWidget = this.viewer.layout.layoutHeaderFooterItems(this.viewer, hfWidget);\n var headerOrFooter = void 0;\n if (isHeader) {\n headerOrFooter = page.headerWidget;\n page.headerWidget = hfWidget;\n }\n else {\n headerOrFooter = page.footerWidget;\n page.footerWidget = hfWidget;\n }\n this.removeFieldInWidget(headerOrFooter);\n headerOrFooter.destroy();\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeFieldInWidget = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n this.removeFieldInBlock(widget.childWidgets[i]);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeFieldInBlock = function (block) {\n if (block instanceof TableWidget) {\n this.removeFieldTable(block);\n }\n else {\n this.removeField(block);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeFieldTable = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.removeFieldInWidget(row.childWidgets[j]);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.shiftPageContent = function (headerFooter) {\n var type = headerFooter.headerFooterType;\n var pageIndex;\n if (type === 'FirstPageHeader' || type === 'FirstPageFooter') {\n pageIndex = 0;\n }\n else if (headerFooter.sectionFormat.differentOddAndEvenPages) {\n if (headerFooter.sectionFormat.differentFirstPage) {\n pageIndex = (type === 'EvenHeader' || type === 'EvenFooter') ? 1 : 2;\n }\n else {\n pageIndex = (type.indexOf('Even') === -1) ? 0 : 1;\n }\n }\n else {\n pageIndex = headerFooter.sectionFormat.differentFirstPage ? 1 : 0;\n if (pageIndex === 1 && this.viewer.pages.length === 1) {\n pageIndex = 0;\n }\n }\n var page = this.viewer.pages[pageIndex];\n if (type.indexOf('Header') !== -1) {\n var firstBlock = page.bodyWidgets[0].firstChild;\n var top_1 = HelperMethods.convertPointToPixel(headerFooter.sectionFormat.topMargin);\n var headerDistance = HelperMethods.convertPointToPixel(headerFooter.sectionFormat.headerDistance);\n top_1 = Math.max(headerDistance + page.headerWidget.height, top_1);\n if (firstBlock.y !== top_1) {\n this.viewer.updateClientArea(page.bodyWidgets[0].sectionFormat, page);\n firstBlock = firstBlock.combineWidget(this.viewer);\n var prevWidget = firstBlock.previousRenderedWidget;\n if (prevWidget) {\n this.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n if (firstBlock.containerWidget !== prevWidget.containerWidget) {\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.updateContainerWidget(firstBlock, prevWidget.containerWidget, prevWidget.indexInOwner + 1, false);\n }\n }\n this.viewer.blockToShift = firstBlock;\n }\n }\n else {\n this.checkAndShiftFromBottom(page, headerFooter);\n }\n if (this.viewer.blockToShift) {\n this.viewer.renderedLists.clear();\n this.viewer.layout.shiftLayoutedItems();\n }\n };\n /**\n * @private\n */\n Editor.prototype.checkAndShiftFromBottom = function (page, footerWidget) {\n var bodyWidget = page.bodyWidgets[0];\n var blockToShift;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var block = bodyWidget.childWidgets[i];\n if (block.y + block.height > footerWidget.y) {\n blockToShift = block;\n break;\n }\n if (bodyWidget.childWidgets.length - 1 === i && block.y + block.height < footerWidget.y) {\n blockToShift = block;\n break;\n }\n }\n this.viewer.updateClientArea(bodyWidget.sectionFormat, page);\n this.viewer.cutFromTop(blockToShift.y);\n this.viewer.blockToShift = blockToShift;\n };\n //Paste Implementation ends\n //Character Format apply implementation starts\n /**\n * Change HighlightColor\n * @param {HighlightColor} highlightColor\n * Applies character format for selection.\n * @param {string} property\n * @param {Object} value\n * @param {boolean} update\n * @private\n */\n Editor.prototype.onApplyCharacterFormat = function (property, value, update) {\n var selection = this.viewer.selection;\n if (selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded) {\n return;\n }\n update = isNullOrUndefined(update) ? false : update;\n var action = (property[0].toUpperCase() + property.slice(1));\n var paragraph = selection.start.paragraph;\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n if (selection.isEmpty && selection.contextType !== 'List') {\n selection.skipFormatRetrieval = true;\n if (selection.end.isAtParagraphEnd) {\n this.initHistory(action);\n this.viewer.owner.isShiftingEnabled = true;\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n this.reLayout(this.viewer.selection);\n this.viewer.updateFocus();\n }\n else {\n selection.fireSelectionChanged(true);\n }\n selection.skipFormatRetrieval = false;\n return;\n }\n this.setOffsetValue(selection);\n this.initHistory(action);\n // Todo: Complete Microsoft Word behavior on apply formatting in empty selection\n // if (selection.isEmpty) {\n // this.viewer.owner.isShiftingEnabled = true;\n // this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n // this.reLayout(this.viewer.selection);\n // this.viewer.updateFocus();\n // return;\n // }\n if (selection.contextType === 'List') {\n // this.updateCharacterFormatForListText(selection, action, value, update);\n this.applyCharacterFormatForListText(selection, property, value, update);\n }\n else {\n //Iterate and update format.\n this.updateSelectionCharacterFormatting(property, value, update);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharacterFormatForListText = function (selection, property, values, update) {\n var listLevel = this.getListLevel(selection.start.paragraph);\n if (isNullOrUndefined(listLevel)) {\n return;\n }\n var characterFormat = listLevel.characterFormat;\n switch (property) {\n case 'bold':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'bold', !(characterFormat.bold));\n break;\n case 'italic':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'italic', !(characterFormat.italic));\n break;\n case 'fontColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontColor', values);\n break;\n case 'fontFamily':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontFamily', values);\n break;\n case 'fontSize':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontSize', values);\n break;\n case 'highlightColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'highlightColor', values);\n break;\n case 'baselineAlignment':\n if (characterFormat.baselineAlignment === values) {\n values = 'Normal';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'baselineAlignment', values);\n break;\n case 'strikethrough':\n if (characterFormat.strikethrough === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'strikethrough', values);\n break;\n case 'underline':\n if (characterFormat.underline === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'underline', values);\n break;\n case 'characterFormat':\n this.applyListCharacterFormatByValue(selection, characterFormat, undefined, values);\n break;\n }\n };\n Editor.prototype.applyListCharacterFormatByValue = function (selection, format, property, value) {\n this.initHistory('ListCharacterFormat');\n this.applyCharFormatValue(format, property, value, false);\n this.editorHistory.updateHistory();\n this.reLayout(selection);\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.updateListCharacterFormat = function (selection, property, value) {\n this.updateListTextSelRange(selection, property, value, false);\n };\n Editor.prototype.updateListTextSelRange = function (selection, property, value, update) {\n this.viewer.owner.isShiftingEnabled = true;\n var startPositionInternal = selection.start;\n var endPositionInternal = selection.end;\n if (!selection.isForward) {\n startPositionInternal = selection.end;\n endPositionInternal = selection.start;\n }\n this.initHistoryPosition(selection, startPositionInternal);\n var listLevel = this.getListLevel(selection.start.paragraph);\n this.applyCharFormatValue(listLevel.characterFormat, property, value, update);\n this.startSelectionReLayouting(startPositionInternal.paragraph, selection, startPositionInternal, endPositionInternal);\n };\n /**\n * @private\n */\n Editor.prototype.getListLevel = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(currentList) &&\n !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId))\n // && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels.getItem(listLevelNumber))) {\n && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels)) {\n return this.viewer.layout.getListLevel(currentList, listLevelNumber);\n }\n return undefined;\n };\n Editor.prototype.updateInsertPosition = function () {\n var selection = this.viewer.selection;\n var position = selection.start;\n if (!selection.isForward) {\n position = selection.end;\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && !isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.updateHistoryPosition(position, true);\n }\n }\n };\n /**\n * preserve paragraph and offset value for selection\n * @private\n */\n Editor.prototype.setOffsetValue = function (selection) {\n var info = this.getParagraphInfo(selection.start);\n this.startParagraph = info.paragraph;\n this.startOffset = info.offset;\n info = this.getParagraphInfo(selection.end);\n this.endParagraph = info.paragraph;\n this.endOffset = info.offset;\n };\n /**\n * Toggles the highlight color property of selected contents.\n * @param {HighlightColor} highlightColor Default value of ‘underline’ parameter is Yellow.\n */\n Editor.prototype.toggleHighlightColor = function (highlightColor) {\n var selection = this.viewer.selection;\n if (isNullOrUndefined(highlightColor) || highlightColor === 'NoColor') {\n highlightColor = 'Yellow';\n }\n //In Ms Word the highlight color is took from the ribbon. So we Have given yellow as constant.\n if (selection.characterFormat.highlightColor === highlightColor) {\n highlightColor = 'NoColor';\n }\n this.selection.characterFormat.highlightColor = highlightColor;\n };\n /**\n * Toggles the subscript formatting of selected contents.\n */\n Editor.prototype.toggleSubscript = function () {\n if (!this.owner.isReadOnlyMode) {\n var value = this.selection.characterFormat.baselineAlignment === 'Subscript' ? 'Normal' : 'Subscript';\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n /**\n * Toggles the superscript formatting of selected contents.\n */\n Editor.prototype.toggleSuperscript = function () {\n if (!this.owner.isReadOnlyMode) {\n var value = this.selection.characterFormat.baselineAlignment === 'Superscript' ? 'Normal' : 'Superscript';\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n /**\n * Toggles the text alignment property of selected contents.\n * @param {TextAlignment} textAlignment Default value of ‘textAlignment parameter is TextAlignment.Left.\n */\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n */\n Editor.prototype.increaseIndent = function () {\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('leftIndent', this.viewer.defaultTabWidth, true, false);\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n */\n Editor.prototype.decreaseIndent = function () {\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('leftIndent', -this.viewer.defaultTabWidth, true, false);\n }\n };\n /**\n * Clears the list format for selected paragraphs.\n */\n Editor.prototype.clearList = function () {\n this.selection.owner.editorModule.onApplyList(undefined);\n };\n /**\n * Applies the bullet list to selected paragraphs.\n * @param {string} bullet Bullet character\n * @param {string} fontFamily Bullet font family\n */\n Editor.prototype.applyBullet = function (bullet, fontFamily) {\n if (!this.owner.isReadOnlyMode) {\n this.applyBulletOrNumbering(bullet, 'Bullet', fontFamily);\n }\n };\n /**\n * Applies the numbering list to selected paragraphs.\n * @param numberFormat “%n” representations in ‘numberFormat’ parameter will be replaced by respective list level’s value.\n * `“%1)” will be displayed as “1)” `\n * @param listLevelPattern Default value of ‘listLevelPattern’ parameter is ListLevelPattern.Arabic\n */\n Editor.prototype.applyNumbering = function (numberFormat, listLevelPattern) {\n if (!this.owner.isReadOnlyMode) {\n this.applyBulletOrNumbering(numberFormat, listLevelPattern, 'Verdana');\n }\n };\n /**\n * Toggles the baseline alignment property of selected contents.\n * @param {Selection} selection\n * @param {BaselineAlignment} baseAlignment\n */\n Editor.prototype.toggleBaselineAlignment = function (baseAlignment) {\n this.updateProperty(2, baseAlignment);\n };\n /**\n * Clears the formatting.\n */\n Editor.prototype.clearFormatting = function () {\n var selection = this.viewer.selection;\n this.initComplexHistory('ClearFormat');\n // let startIndex: string = selection.start.getHierarchicalIndexInternal();\n // let endIndex: string = selection.end.getHierarchicalIndexInternal();\n if (selection.isEmpty) {\n selection.start.moveToParagraphStartInternal(selection, false);\n selection.end.moveToParagraphEndInternal(selection, false);\n }\n this.setOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearCharacterFormat');\n }\n this.updateSelectionCharacterFormatting('ClearCharacterFormat', undefined, false);\n this.getOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.setOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearParagraphFormat');\n }\n this.updateParagraphFormatInternal('ClearParagraphFormat', undefined, false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.getOffsetValue(selection);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n // else {\n // this.checkAndUpdatedSelection(startIndex, endIndex);\n // }\n };\n /**\n * Toggles the specified property. If property is assigned already. Then property will be changed\n * @param {Selection} selection\n * @param {number} type\n * @param {Object} value\n * @private\n */\n Editor.prototype.updateProperty = function (type, value) {\n var selection = this.selection;\n if (selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded) {\n return;\n }\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n var paragraph = startPosition.paragraph;\n if (!isNullOrUndefined(inline) && inline.length === indexInInline && !this.selection.isEmpty) {\n inline = inline.nextNode;\n }\n if (type === 1) {\n var currentUnderline = 'None';\n if (!isNullOrUndefined(inline)) {\n currentUnderline = inline.characterFormat.underline;\n }\n else if (!isNullOrUndefined(paragraph)) {\n currentUnderline = paragraph.characterFormat.underline;\n }\n this.selection.characterFormat.underline = value === currentUnderline ? 'None' : value;\n }\n else {\n var script = 'Normal';\n if (!isNullOrUndefined(inline)) {\n script = inline.characterFormat.baselineAlignment;\n }\n else if (!isNullOrUndefined(paragraph)) {\n script = paragraph.characterFormat.baselineAlignment;\n }\n if (script === value) {\n value = 'Normal';\n }\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n Editor.prototype.getCompleteStyles = function () {\n var completeStylesString = '{\"styles\":[';\n for (var _i = 0, _a = this.viewer.preDefinedStyles.getItem(); _i < _a.length; _i++) {\n var name_1 = _a[_i];\n completeStylesString += (this.viewer.preDefinedStyles.get(name_1) + ',');\n }\n return completeStylesString.slice(0, -1) + ']}';\n };\n /**\n * Initialize default styles\n * @private\n */\n Editor.prototype.intializeDefaultStyles = function () {\n var existingStyles = this.owner.getStyleNames('Paragraph');\n var defaultStyleNames = ['Normal', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'];\n var styleNames = defaultStyleNames.filter(function (val) {\n return existingStyles.indexOf(val) === -1;\n });\n for (var _i = 0, styleNames_1 = styleNames; _i < styleNames_1.length; _i++) {\n var name_2 = styleNames_1[_i];\n this.createStyle(this.viewer.preDefinedStyles.get(name_2));\n }\n };\n /**\n * Creates a new instance of Style.\n */\n Editor.prototype.createStyle = function (styleString) {\n this.createStyleIn(styleString);\n };\n /**\n * Create a Style.\n * @private\n */\n Editor.prototype.createStyleIn = function (styleString) {\n /* tslint:disable:no-any */\n var style = JSON.parse(styleString);\n var styleObj = this.viewer.styles.findByName(style.name);\n if (styleObj !== undefined) {\n //Create a new style with new name and add it to collection.\n style.name = this.getUniqueStyleName(style.name);\n }\n this.viewer.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), style, this.viewer.styles);\n return this.viewer.styles.findByName(style.name);\n };\n /**\n * @private\n */\n Editor.prototype.getUniqueStyleName = function (name) {\n var uniqueName = this.getUniqueName(name);\n var style = this.viewer.styles.findByName(uniqueName);\n while (!isNullOrUndefined(style)) {\n uniqueName = this.getUniqueStyleName(style.name);\n style = this.viewer.styles.findByName(uniqueName);\n }\n return uniqueName;\n };\n Editor.prototype.getUniqueName = function (name) {\n var matchArray = name.match(/\\d+$/);\n var returnName;\n if (!isNullOrUndefined(matchArray) && matchArray.length > 0) {\n return name.replace(matchArray[0], (parseInt(matchArray[0], 10) + 1).toString());\n }\n else {\n return name + '_1';\n }\n };\n /**\n * Update Character format for selection\n * @private\n */\n Editor.prototype.updateSelectionCharacterFormatting = function (property, values, update) {\n if (isNullOrUndefined(property)) {\n property = 'CharacterFormat';\n }\n switch (property) {\n case 'bold':\n this.updateCharacterFormat('bold', values);\n break;\n case 'italic':\n this.updateCharacterFormat('italic', values);\n break;\n case 'fontColor':\n this.updateCharacterFormat('fontColor', values);\n break;\n case 'fontFamily':\n this.updateCharacterFormat('fontFamily', values);\n break;\n case 'fontSize':\n this.updateCharacterFormatWithUpdate(this.viewer.selection, 'fontSize', values, update);\n break;\n case 'highlightColor':\n this.updateCharacterFormat('highlightColor', values);\n break;\n case 'baselineAlignment':\n this.updateCharacterFormat('baselineAlignment', values);\n break;\n case 'strikethrough':\n this.updateCharacterFormat('strikethrough', values);\n break;\n case 'underline':\n this.updateCharacterFormat('underline', values);\n break;\n case 'styleName':\n this.updateCharacterFormatWithUpdate(this.viewer.selection, 'styleName', values, true);\n break;\n case 'CharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n case 'ClearCharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n }\n this.reLayout(this.viewer.selection);\n };\n /**\n * Update character format for selection range\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @returns void\n * @private\n */\n Editor.prototype.updateCharacterFormat = function (property, value) {\n this.updateCharacterFormatWithUpdate(this.viewer.selection, property, value, false);\n };\n Editor.prototype.updateCharacterFormatWithUpdate = function (selection, property, value, update) {\n this.viewer.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n this.applyCharFormatSelectedContent(startPosition.paragraph, selection, startPosition, endPosition, property, value, update);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatSelectedContent = function (paragraph, selection, start, end, property, value, update) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyCharFormatCell(cell, selection, start, end, property, value, update);\n var table = cell.ownerTable;\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n this.applyCharFormat(paragraph, selection, start, end, property, value, update);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForSelectedPara = function (paragraph, selection, property, value, update) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n this.applyCharFormatValue(element.characterFormat, property, value, update);\n }\n }\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n };\n Editor.prototype.splittedLastParagraph = function (paragraph) {\n var splittedWidets = paragraph.getSplitWidgets();\n return splittedWidets[splittedWidets.length - 1];\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.getNextParagraphForCharacterFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.viewer.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) {\n if (block instanceof ParagraphWidget) {\n this.applyCharFormat(block, this.viewer.selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatForTable(0, block, this.viewer.selection, start, end, property, value, update);\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormat = function (paragraph, selection, start, end, property, value, update) {\n paragraph = paragraph.combineWidget(this.viewer);\n var startOffset = 0;\n var length = selection.getParagraphLength(paragraph);\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endOffset = end.offset;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n if (!isNullOrUndefined(selection)) {\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n }\n }\n if (!paragraph.equals(end.paragraph)) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n endOffset = length;\n }\n else {\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n if (selection.isParagraphLastLine(lastLine) && end.currentWidget === lastLine\n && ((endOffset === selection.getLineLength(lastLine) + 1) || (selection.isEmpty && selection.end.isAtParagraphEnd))) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n }\n }\n // let count: number = 0;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var line = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = selection.getStartLineOffset(line);\n }\n if (line === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = selection.getLineLength(line);\n }\n var count = 0;\n for (var j = 0; j < line.children.length; j++) {\n var inlineObj = line.children[j];\n if (inlineObj instanceof ListTextElementBox) {\n continue;\n }\n if (startOffset >= count + inlineObj.length) {\n count += inlineObj.length;\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n var inlineLength = inlineObj.length;\n if (endIndex > inlineLength) {\n endIndex = inlineLength;\n }\n j += this.applyCharFormatInline(inlineObj, selection, startIndex, endIndex, property, value, update);\n if (endOffset <= count + inlineLength) {\n break;\n }\n count += inlineLength;\n }\n }\n var endParagraph = end.paragraph;\n this.viewer.layout.reLayoutParagraph(paragraph, startLineWidget, 0);\n if (paragraph.equals(endParagraph)) {\n return;\n }\n this.getNextParagraphForCharacterFormatting(paragraph, start, end, property, value, update);\n };\n /**\n * Toggles the bold property of selected contents.\n */\n Editor.prototype.toggleBold = function () {\n if (this.viewer.owner.isReadOnlyMode) {\n return;\n }\n var value = this.getCurrentSelectionValue('bold');\n this.selection.characterFormat.bold = value;\n };\n /**\n * Toggles the bold property of selected contents.\n */\n Editor.prototype.toggleItalic = function () {\n if (this.viewer.owner.isReadOnlyMode) {\n return;\n }\n var value = this.getCurrentSelectionValue('italic');\n this.selection.characterFormat.italic = value;\n };\n Editor.prototype.getCurrentSelectionValue = function (property) {\n var value = false;\n if ((property === 'bold' || property === 'italic')) {\n var index = 0;\n var start = this.selection.start;\n if (!this.selection.isForward) {\n start = this.selection.end;\n }\n var lineWidget = start.currentWidget;\n var inlineObj = lineWidget.getInline(start.offset, index);\n var inline = inlineObj.element;\n // inline.ownerBase\n index = inlineObj.index;\n var characterFormat = lineWidget.paragraph.characterFormat;\n if (!isNullOrUndefined(inline)) {\n if (!this.selection.isEmpty && index === inline.length) {\n characterFormat = isNullOrUndefined(inline.nextNode) ? lineWidget.paragraph.characterFormat\n : inline.nextNode.characterFormat;\n }\n else {\n characterFormat = inline.characterFormat;\n }\n }\n if (property === 'bold') {\n value = !(characterFormat.bold);\n }\n if (property === 'italic') {\n value = !(characterFormat.italic);\n }\n }\n return value;\n };\n /**\n * Toggles the underline property of selected contents.\n * @param underline Default value of ‘underline’ parameter is Single.\n */\n Editor.prototype.toggleUnderline = function (underline) {\n if (!this.owner.isReadOnlyMode) {\n this.updateProperty(1, underline);\n }\n };\n /**\n * Toggles the strike through property of selected contents.\n * @param {Strikethrough} strikethrough Default value of strikethrough parameter is SingleStrike.\n */\n Editor.prototype.toggleStrikethrough = function (strikethrough) {\n if (!this.owner.isReadOnlyMode) {\n var value = void 0;\n if (isNullOrUndefined(strikethrough)) {\n value = this.selection.characterFormat.strikethrough === 'SingleStrike' ? 'None' : 'SingleStrike';\n }\n else {\n value = strikethrough;\n }\n this.selection.characterFormat.strikethrough = value;\n }\n };\n Editor.prototype.updateFontSize = function (format, value) {\n if (typeof (value) === 'number' && !(value < 0 && format.fontSize === 1)) {\n return format.fontSize + value;\n }\n var fontsizeCollection = [8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 26, 28, 36, 48, 72];\n if (typeof (value) === 'string' && value === 'increment') {\n if (format.fontSize < 8) {\n return format.fontSize + 1;\n }\n else if (format.fontSize >= 72 && format.fontSize < 80) {\n return 80;\n }\n else if (format.fontSize >= 80) {\n return format.fontSize + 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize < fontsizeCollection[i]) {\n return fontsizeCollection[i];\n }\n }\n }\n }\n else if (typeof (value) === 'string' && value === 'decrement' && format.fontSize > 1) {\n if (format.fontSize <= 8) {\n return format.fontSize - 1;\n }\n else if (format.fontSize > 72 && format.fontSize <= 80) {\n return 72;\n }\n else if (format.fontSize > 80) {\n return format.fontSize - 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize <= fontsizeCollection[i]) {\n return fontsizeCollection[i - 1];\n }\n }\n }\n }\n return format.fontSize;\n };\n // Inline\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n if (startIndex === 0 && endIndex === inline.length) {\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n return 0;\n }\n else if (inline instanceof TextElementBox) {\n return this.formatInline(inline, selection, startIndex, endIndex, property, value, update);\n }\n return 0;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.formatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n var x = 0;\n var node = inline;\n var index = inline.line.children.indexOf(node);\n var paragraph = inline.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(inline.line);\n var textElement;\n if (startIndex > 0) {\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n textElement.line = inline.line;\n textElement.text = inline.text.substr(startIndex, endIndex - startIndex);\n this.applyCharFormatValue(textElement.characterFormat, property, value, update);\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n // this.addToLinkedFields(span); \n }\n if (endIndex < node.length) {\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n textElement.text = node.text.substring(endIndex);\n textElement.line = inline.line;\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n // this.addToLinkedFields(span); \n }\n if (startIndex === 0) {\n inline.text = inline.text.substr(0, endIndex);\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n }\n else {\n inline.text = inline.text.substr(0, startIndex);\n }\n return x;\n };\n // Cell\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatCell = function (cell, selection, start, end, property, value, update) {\n if (end.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, containerCell);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n value = this.getCharacterFormatValueOfCell(cell, selection, value, property);\n this.applyCharFormatForSelectedCell(containerCell, selection, property, value, update);\n }\n else {\n if (startCell === containerCell) {\n this.applyCharFormat(start.paragraph, selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatRow(startCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n }\n else {\n this.applyCharFormatForTableCell(containerCell.ownerTable, selection, containerCell, endCell, property, value, update);\n }\n }\n else {\n this.applyCharFormatRow(containerCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n else {\n var tableCell = selection.getContainerCell(cell);\n this.applyCharFormatRow(tableCell.ownerRow, selection, start, end, property, value, update);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForSelectedCell = function (cell, selection, property, value, update) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.applyCharFormatForSelectedPara(block, selection, property, value, update);\n }\n else {\n this.applyCharFormatForSelTable(block, selection, property, value, update);\n }\n }\n };\n // Row\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatRow = function (row, selection, start, end, property, value, update) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[0], selection, value, property);\n this.applyCharFormatForTable(row.rowIndex, row.ownerTable, selection, start, end, property, value, update);\n };\n // Table\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForTable = function (index, table, selection, start, end, property, value, update) {\n table = table.combineWidget(this.viewer);\n for (var i = index; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForCharacterFormatting(table, start, end, property, value, update);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForSelTable = function (tableWidget, selection, property, value, update) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForTableCell = function (table, selection, startCell, endCell, property, value, update) {\n var startCellLeft = selection.getCellLeft(startCell.ownerRow, startCell);\n var startCellRight = startCellLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startCellLeft, startCellRight, endCellLeft, endCellRight);\n startCellLeft = cellInfo.start;\n startCellRight = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (HelperMethods.round(startCellLeft, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(startCellRight, 2)) {\n if (!isStarted) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[j], selection, value, property);\n isStarted = true;\n }\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n }\n };\n Editor.prototype.updateSelectedCellsInTable = function (start, end, endCellLeft, endCellRight) {\n var selection = this.viewer.selection;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > selection.upDownSelectionLength) {\n start = selection.upDownSelectionLength;\n }\n if (end < selection.upDownSelectionLength) {\n end = selection.upDownSelectionLength;\n }\n return { start: start, end: end };\n };\n Editor.prototype.getCharacterFormatValueOfCell = function (cell, selection, value, property) {\n if (typeof (value) === 'boolean' || (value === undefined && (property === 'bold' || property === 'italic'))) {\n var firstParagraph = selection.getFirstParagraph(cell);\n var format = firstParagraph.characterFormat;\n if (firstParagraph.childWidgets.length > 0 && firstParagraph.childWidgets[0].children.length > 0) {\n format = firstParagraph.childWidgets[0].children[0].characterFormat;\n }\n value = !format.getPropertyValue(property);\n }\n return value;\n };\n /**\n * Apply Character format for selection\n * @private\n */\n Editor.prototype.applyCharFormatValueInternal = function (selection, format, property, value) {\n this.applyCharFormatValue(format, property, value, false);\n };\n Editor.prototype.copyInlineCharacterFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueCharacterFormat = sourceFormat.uniqueCharacterFormat;\n destFormat.baseCharStyle = sourceFormat.baseCharStyle;\n };\n Editor.prototype.applyCharFormatValue = function (format, property, value, update) {\n if (update && property === 'fontSize') {\n value = this.updateFontSize(format, value);\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedProperties(format, property, value);\n }\n if (value instanceof WCharacterFormat) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyInlineCharacterFormat(value, format);\n }\n else {\n format.copyFormat(value);\n }\n return;\n }\n if (isNullOrUndefined(value)) {\n format.clearFormat();\n return;\n }\n if (property === 'bold') {\n format.bold = value;\n }\n else if (property === 'italic') {\n format.italic = value;\n }\n else if (property === 'fontColor') {\n format.fontColor = value;\n }\n else if (property === 'fontFamily') {\n format.fontFamily = value;\n }\n else if (property === 'fontSize') {\n format.fontSize = value;\n }\n else if (property === 'highlightColor') {\n format.highlightColor = value;\n }\n else if (property === 'baselineAlignment') {\n format.baselineAlignment = value;\n }\n else if (property === 'strikethrough') {\n format.strikethrough = value;\n }\n else if (property === 'underline') {\n format.underline = value;\n }\n else if (property === 'styleName') {\n format.baseCharStyle = value;\n }\n };\n /**\n * @private\n */\n Editor.prototype.onImageFormat = function (elementBox, width, height) {\n var modifiedFormat = new ImageFormat(elementBox);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ImageResizing');\n this.editorHistory.currentBaseHistoryInfo.modifiedProperties.push(modifiedFormat);\n }\n this.setOffsetValue(this.selection);\n elementBox.width = width;\n elementBox.height = height;\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.reLayoutParagraph(elementBox.line.paragraph, elementBox.line.indexInOwner, 0);\n this.reLayout(this.selection, false);\n if (this.viewer.owner.imageResizerModule) {\n this.viewer.owner.imageResizerModule.positionImageResizer(elementBox);\n }\n };\n /**\n * Toggles the text alignment of selected paragraphs.\n * @param {TextAlignment} textAlignment\n */\n Editor.prototype.toggleTextAlignment = function (textAlignment) {\n if (this.viewer.owner.isReadOnlyMode || !this.viewer.owner.isDocumentLoaded) {\n return;\n }\n // Toggle performed based on current selection format similar to MS word behavior.\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.viewer.selection.paragraphFormat.textAlignment) && this.viewer.selection.paragraphFormat.textAlignment === textAlignment) {\n if (textAlignment === 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Justify', false, true);\n }\n else {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n }\n }\n else {\n this.onApplyParagraphFormat('textAlignment', textAlignment, false, true);\n }\n };\n /**\n * Applies paragraph format for the selection ranges.\n * @param {string} property\n * @param {Object} value\n * @param {boolean} update\n * @param {boolean} isSelectionChanged\n * @private\n */\n Editor.prototype.onApplyParagraphFormat = function (property, value, update, isSelectionChanged) {\n var action = (property[0].toUpperCase() + property.slice(1));\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n this.initHistory(action);\n if (this.viewer.owner.isReadOnlyMode || !this.viewer.owner.isDocumentLoaded) {\n return;\n }\n if (property === 'leftIndent') {\n if (selection.paragraphFormat.listId !== -1 && update) {\n this.updateListLevel(value > 0);\n return;\n }\n }\n if (selection.isEmpty) {\n this.setOffsetValue(selection);\n if (update && property === 'leftIndent') {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n var para = selection.start.paragraph.combineWidget(this.viewer);\n this.applyParaFormatProperty(para, property, value, update);\n this.layoutItemBlock(para, false);\n }\n else {\n //Iterate and update formatting's. \n this.setOffsetValue(selection);\n this.updateSelectionParagraphFormatting(property, value, update);\n }\n this.reLayout(selection);\n };\n /**\n * Update the list level\n * @param {boolean} increaseLevel\n * @private\n */\n Editor.prototype.updateListLevel = function (increaseLevel) {\n // Increment or Decrement list level for Multilevel lists.\n var viewer = this.viewer;\n var listFormat = this.viewer.selection.start.paragraph.paragraphFormat.listFormat;\n var paragraphFormat = this.viewer.selection.start.paragraph.paragraphFormat;\n var list = viewer.getListById(paragraphFormat.listFormat.listId);\n var listLevel = viewer.layout.getListLevel(list, paragraphFormat.listFormat.listLevelNumber);\n var levelNumber;\n if (increaseLevel) {\n levelNumber = paragraphFormat.listFormat.listLevelNumber + 1;\n }\n else {\n levelNumber = paragraphFormat.listFormat.listLevelNumber - 1;\n }\n var nextListLevel = viewer.layout.getListLevel(list, levelNumber);\n if (!isNullOrUndefined(nextListLevel)) {\n this.onApplyListInternal(list, levelNumber);\n viewer.selection.start.updatePhysicalPosition(true);\n viewer.selection.end.updatePhysicalPosition(true);\n viewer.selection.updateCaretPosition();\n }\n };\n /**\n * Applies list\n * @param {WList} list\n * @param {number} listLevelNumber\n * @private\n */\n Editor.prototype.onApplyListInternal = function (list, listLevelNumber) {\n var selection = this.viewer.selection;\n var listFormat = new WListFormat();\n if (!isNullOrUndefined(list) && listLevelNumber >= 0 && listLevelNumber < 9) {\n listFormat.listId = list.listId;\n listFormat.listLevelNumber = listLevelNumber;\n }\n this.onApplyParagraphFormat('listFormat', listFormat, false, false);\n };\n /**\n * Apply paragraph format to selection range\n * @private\n */\n Editor.prototype.updateSelectionParagraphFormatting = function (property, value, update) {\n var selection = this.viewer.selection;\n if (property === 'leftIndent' && update) {\n if (!isNullOrUndefined(selection.start) && selection.start.isExistBefore(selection.end)) {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n else {\n value = this.getIndentIncrementValue(selection.end.paragraph, value);\n }\n }\n this.updateParagraphFormatInternal(property, value, update);\n };\n Editor.prototype.getIndentIncrementValue = function (currentParagraph, incrementFactor) {\n var currentParagraphIndent = currentParagraph.paragraphFormat.leftIndent;\n if (currentParagraphIndent < 0) {\n // In MS Word, if the current paragraph left indent is lesser that or equal to 0\n // then performing decrement indent will set left indent to 0. \n if (incrementFactor < 0 || currentParagraphIndent + incrementFactor >= 0) {\n return -currentParagraphIndent;\n }\n else {\n var incrementValue = -this.getIndentIncrementValueInternal(-currentParagraphIndent, -incrementFactor);\n return incrementValue % incrementFactor === 0 ? incrementValue : incrementValue + incrementFactor;\n }\n }\n else {\n return this.getIndentIncrementValueInternal(currentParagraphIndent, incrementFactor);\n }\n };\n Editor.prototype.getIndentIncrementValueInternal = function (position, incrementFactor) {\n var tabValue = Math.abs(incrementFactor);\n if (position === 0 || tabValue === 0) {\n return incrementFactor > 0 ? tabValue : 0;\n }\n else {\n var diff = ((Math.round(position) * 100) % (Math.round(tabValue) * 100)) / 100;\n var cnt = (Math.round(position) - diff) / Math.round(tabValue);\n var fPosition = cnt * tabValue;\n if (incrementFactor > 0) {\n fPosition += tabValue;\n }\n return (fPosition - position) === 0 ? incrementFactor : fPosition - position;\n }\n };\n Editor.prototype.updateParagraphFormatInternal = function (property, value, update) {\n if (isNullOrUndefined(property)) {\n property = 'ParagraphFormat';\n }\n switch (property) {\n case 'afterSpacing':\n this.updateParagraphFormat('afterSpacing', value, false);\n break;\n case 'beforeSpacing':\n this.updateParagraphFormat('beforeSpacing', value, false);\n break;\n case 'rightIndent':\n this.updateParagraphFormat('rightIndent', value, false);\n break;\n case 'leftIndent':\n this.updateParagraphFormat('leftIndent', value, update);\n break;\n case 'firstLineIndent':\n this.updateParagraphFormat('firstLineIndent', value, false);\n break;\n case 'lineSpacing':\n this.updateParagraphFormat('lineSpacing', value, false);\n break;\n case 'lineSpacingType':\n this.updateParagraphFormat('lineSpacingType', value, false);\n break;\n case 'textAlignment':\n this.updateParagraphFormat('textAlignment', value, false);\n break;\n case 'listFormat':\n this.updateParagraphFormat('listFormat', value, false);\n break;\n case 'ParagraphFormat':\n this.updateParagraphFormat(undefined, value, false);\n break;\n case 'styleName':\n this.updateParagraphFormat('styleName', value, false);\n break;\n case 'ClearParagraphFormat':\n // this.initializeHistory('ClearParagraphFormat', selectionRange);\n this.updateParagraphFormat(undefined, value, false);\n break;\n }\n };\n /**\n * Update paragraph format on undo\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @param {boolean} update\n * @private\n */\n Editor.prototype.updateParagraphFormat = function (property, value, update) {\n var selection = this.viewer.selection;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.updateInsertPosition(selection, startPosition);\n this.applyParaFormatSelectedContent(startPosition, endPosition, property, value, update);\n // this.startSelectionReLayouting(startPosition.paragraph, selection, startPosition, endPosition);\n };\n Editor.prototype.applyParaFormatSelectedContent = function (start, end, property, value, update) {\n var selection = this.viewer.selection;\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyParaFormatInCell(cell, start, end, property, value, update);\n var table = cell.ownerTable;\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(value) && !this.selection.isEmpty && property === 'styleName' && this.applyCharacterStyle(start.paragraph, start, end, property, value, update)) {\n return;\n }\n else {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n }\n };\n /**\n * Apply Paragraph format\n * @private\n */\n Editor.prototype.applyParaFormatProperty = function (paragraph, property, value, update) {\n var format = paragraph.paragraphFormat;\n if (update && property === 'leftIndent') {\n value = format.leftIndent + value;\n }\n if (property === 'listFormat' && value instanceof WListFormat) {\n var listFormat = value;\n if (!listFormat.hasValue('listLevelNumber')) {\n listFormat.listLevelNumber = format.listFormat.listLevelNumber;\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForParagraphFormat(format, property, value);\n }\n if (value instanceof WParagraphFormat) {\n if (isNullOrUndefined(property)) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyParagraphFormat(value, format);\n }\n else {\n format.copyFormat(value);\n }\n }\n else if (property === 'listFormat') {\n format.listFormat = value.listFormat;\n // this.handleListFormat(format, value as WParagraphFormat);\n }\n }\n if (isNullOrUndefined(value)) {\n format.clearFormat();\n this.viewer.layout.reLayoutParagraph(format.ownerBase, 0, 0);\n return;\n }\n if (property === 'afterSpacing') {\n format.afterSpacing = value;\n }\n else if (property === 'beforeSpacing') {\n format.beforeSpacing = value;\n }\n else if (property === 'leftIndent') {\n format.leftIndent = value;\n }\n else if (property === 'lineSpacingType') {\n format.lineSpacingType = value;\n }\n else if (property === 'lineSpacing') {\n format.lineSpacing = value;\n }\n else if (property === 'rightIndent') {\n format.rightIndent = value;\n }\n else if (property === 'firstLineIndent') {\n format.firstLineIndent = value;\n }\n else if (property === 'textAlignment') {\n format.textAlignment = value;\n this.viewer.layout.allowLayout = false;\n }\n else if (property === 'styleName') {\n if (typeof (value) === 'string') {\n value = this.viewer.styles.findByName(value);\n }\n format.ApplyStyle(value);\n }\n else if (property === 'listFormat') {\n if (value instanceof WParagraphFormat) {\n this.copyFromListLevelParagraphFormat(format, value);\n value = value.listFormat;\n }\n format.listFormat.copyFormat(value);\n this.viewer.layout.clearListElementBox(format.ownerBase);\n this.onListFormatChange(format.ownerBase, value, format);\n this.layoutItemBlock(format.ownerBase, false);\n return;\n }\n };\n Editor.prototype.copyParagraphFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueParagraphFormat = sourceFormat.uniqueParagraphFormat;\n destFormat.listFormat = sourceFormat.listFormat;\n destFormat.baseStyle = sourceFormat.baseStyle;\n };\n Editor.prototype.onListFormatChange = function (paragraph, listFormat, paraFormat) {\n if (listFormat instanceof WListFormat) {\n var currentFormat = listFormat;\n // currentFormat.setOwnerBase(paraFormat);\n this.updateListParagraphFormat(paragraph, listFormat);\n }\n };\n Editor.prototype.updateListParagraphFormat = function (paragraph, listFormat) {\n var list = this.viewer.getListById(listFormat.listId);\n var listlevel = undefined;\n if (!isNullOrUndefined(list)) {\n listlevel = this.viewer.layout.getListLevel(list, listFormat.listLevelNumber);\n }\n var isUpdateIndent = !this.editorHistory || (this.editorHistory && !this.editorHistory.isUndoing);\n if (isUpdateIndent) {\n if (paragraph instanceof ParagraphWidget && !isNullOrUndefined(listlevel)\n && !isNullOrUndefined(listlevel.paragraphFormat) && !isNullOrUndefined(paragraph.containerWidget)) {\n this.copyFromListLevelParagraphFormat(paragraph.paragraphFormat, listlevel.paragraphFormat);\n }\n else if (isNullOrUndefined(list)) {\n paragraph.paragraphFormat.leftIndent = undefined;\n paragraph.paragraphFormat.firstLineIndent = undefined;\n }\n }\n };\n /**\n * Copies list level paragraph format\n * @param {WParagraphFormat} oldFormat\n * @param {WParagraphFormat} newFormat\n * @private\n */\n Editor.prototype.copyFromListLevelParagraphFormat = function (oldFormat, newFormat) {\n if (!isNullOrUndefined(newFormat.leftIndent)) {\n oldFormat.leftIndent = newFormat.leftIndent;\n }\n if (!isNullOrUndefined(newFormat.firstLineIndent)) {\n oldFormat.firstLineIndent = newFormat.firstLineIndent;\n }\n };\n /**\n * @private\n */\n Editor.prototype.applyContinueNumbering = function (selection) {\n this.editorHistory.initializeHistory('ContinueNumbering');\n this.applyContinueNumberingInternal(selection);\n };\n /**\n * @private\n */\n Editor.prototype.applyContinueNumberingInternal = function (selection) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n var paraFormat = this.getParagraphFormat(paragraph, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.changeListId(numberingInfo.currentList, paragraph, paraFormat, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n this.viewer.updateFocus();\n };\n /**\n * @private\n */\n Editor.prototype.getContinueNumberingInfo = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n var listPattern = 'None';\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n var viewer = this.viewer;\n if (listLevelNumber !== 0 && !isNullOrUndefined(currentList) &&\n !isNullOrUndefined(viewer.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(viewer.getAbstractListById(currentList.abstractListId).levels[listLevelNumber])) {\n var listLevel = this.viewer.layout.getListLevel(currentList, listLevelNumber);\n if (!isNullOrUndefined(listLevel)) {\n listPattern = listLevel.listLevelPattern;\n }\n }\n return {\n currentList: currentList,\n listLevelNumber: listLevelNumber,\n listPattern: listPattern\n };\n };\n /**\n * @private\n */\n Editor.prototype.revertContinueNumbering = function (selection, format) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n this.changeListId(numberingInfo.currentList, paragraph, format, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n };\n Editor.prototype.changeListId = function (list, block, format, levelNum, listType) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId\n && levelNum === block.paragraphFormat.listFormat.listLevelNumber) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n format = baseHistoryInfo.addModifiedPropertiesForContinueNumbering(block.paragraphFormat, format);\n }\n block.paragraphFormat.copyFormat(format);\n this.viewer.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeListId(list, block.nextRenderedWidget, format, levelNum, listType);\n };\n Editor.prototype.getParagraphFormat = function (paragraph, levelNumber, listType) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget)) {\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget.paragraphFormat.listFormat)\n && paragraph.previousRenderedWidget.paragraphFormat.listFormat.listId !== -1) {\n var listLevel = this.getListLevel(paragraph.previousRenderedWidget);\n if (levelNumber === 0) {\n return paragraph.previousRenderedWidget.paragraphFormat;\n }\n else if (listType === listLevel.listLevelPattern\n || this.checkNumberArabic(listType, listLevel.listLevelPattern)) {\n return paragraph.previousRenderedWidget.paragraphFormat;\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n }\n return undefined;\n };\n Editor.prototype.checkNumberArabic = function (listType, levelPattern) {\n if ((listType === 'Number' && levelPattern === 'Arabic')\n || (levelPattern === 'Number' && listType === 'Arabic')) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Editor.prototype.applyRestartNumbering = function (selection) {\n this.editorHistory.initializeHistory('RestartNumbering');\n this.restartListAt(selection);\n };\n /**\n * @private\n */\n Editor.prototype.restartListAt = function (selection) {\n var currentListLevel = this.getListLevel(selection.start.paragraph);\n var list = new WList();\n list.listId = this.viewer.lists[(this.viewer.lists.length - 1)].listId + 1;\n var abstractList = new WAbstractList();\n abstractList.abstractListId = this.viewer.abstractLists[(this.viewer.abstractLists.length - 1)].abstractListId + 1;\n list.abstractListId = abstractList.abstractListId;\n this.viewer.abstractLists.push(abstractList);\n this.createListLevels(abstractList, currentListLevel, list);\n this.viewer.lists.push(list);\n this.restartListAtInternal(selection, list.listId);\n };\n /**\n * @private\n */\n Editor.prototype.restartListAtInternal = function (selection, listId) {\n var numberingInfo = this.getContinueNumberingInfo(selection.start.paragraph);\n this.changeRestartNumbering(numberingInfo.currentList, selection.start.paragraph, listId);\n this.reLayout(selection, false);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n this.incrementListNumber = -1;\n this.refListNumber = undefined;\n this.viewer.updateFocus();\n };\n Editor.prototype.changeRestartNumbering = function (list, block, listId) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n listId = baseHistoryInfo.addModifiedPropertiesForRestartNumbering(block.paragraphFormat.listFormat, listId);\n }\n block.paragraphFormat.listFormat.listId = listId;\n if (this.refListNumber !== block.paragraphFormat.listFormat.listLevelNumber) {\n this.incrementListNumber += 1;\n this.refListNumber = block.paragraphFormat.listFormat.listLevelNumber;\n }\n block.paragraphFormat.listFormat.listLevelNumber = this.incrementListNumber;\n this.viewer.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeRestartNumbering(list, block.nextRenderedWidget, listId);\n };\n Editor.prototype.createListLevels = function (abstractList, currentListLevel, list) {\n var levelPattern = currentListLevel.listLevelPattern;\n var levelPatterns = [];\n var currentAbstractList = currentListLevel.ownerBase;\n for (var i = 0; i < 3; i++) {\n var listLevel = currentAbstractList.levels[i];\n if (!isNullOrUndefined(listLevel)) {\n levelPatterns.push(listLevel.listLevelPattern);\n }\n }\n var indexOfLevelPattern = levelPatterns.indexOf(levelPattern) === -1 ? 0 : levelPatterns.indexOf(levelPattern);\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var listLevel = new WListLevel(abstractList);\n if (i === 0) {\n listLevel.listLevelPattern = levelPattern;\n }\n else {\n if (indexOfLevelPattern === 0 || indexOfLevelPattern < levelPatterns.length - 1) {\n indexOfLevelPattern++;\n }\n else {\n indexOfLevelPattern = 0;\n }\n listLevel.listLevelPattern = levelPatterns[indexOfLevelPattern];\n }\n listLevel.numberFormat = '%' + (i + 1) + '.';\n listLevel.startAt = 1;\n listLevel.characterFormat.copyFormat(currentListLevel.characterFormat);\n listLevel.paragraphFormat.copyFormat(currentListLevel.paragraphFormat);\n listLevel.restartLevel = i;\n abstractList.levels.push(listLevel);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormat = function (paragraph, start, end, property, value, update) {\n this.setOffsetValue(this.selection);\n paragraph = paragraph.combineWidget(this.viewer);\n //Apply Paragraph Format for spitted paragraph\n this.applyParaFormatProperty(paragraph, property, value, update);\n this.layoutItemBlock(paragraph, false);\n this.getOffsetValue(this.selection);\n if (paragraph.equals(end.paragraph)) {\n return;\n }\n this.getNextParagraphForFormatting(paragraph, start, end, property, value, update);\n };\n /* tslint:disable-next-line:max-line-length */\n Editor.prototype.applyCharacterStyle = function (paragraph, start, end, property, value, update) {\n var paragraphWidget = paragraph.getSplitWidgets();\n if ((end.paragraph === paragraph || paragraphWidget.indexOf(end.paragraph) !== -1)) {\n if (((value.type === 'Paragraph') && ((value.link) instanceof WCharacterStyle)) || (value.type === 'Character')) {\n var obj = (value.type === 'Character') ? value : value.link;\n this.updateSelectionCharacterFormatting(property, obj, update);\n return true;\n }\n }\n return false;\n };\n // Cell\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormatInCell = function (cell, start, end, property, value, update) {\n var selection = this.viewer.selection;\n if (end.paragraph.isInsideTable) {\n var cellContainer = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (cellContainer.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, cellContainer);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, cellContainer);\n if (selection.containsCell(cellContainer, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(cellContainer, start, end)) {\n value = this.getParaFormatValueInCell(cellContainer, property, value);\n this.applyParaFormatCellInternal(cellContainer, property, value, update);\n }\n else {\n if (startCell === cellContainer) {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n else {\n this.applyParagraphFormatRow(startCell.ownerRow, start, end, property, value, update);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.applyParaFormatTableCell(cellContainer.ownerTable, cellContainer, endCell, property, value, update);\n }\n }\n else {\n this.applyParagraphFormatRow(cellContainer.ownerRow, start, end, property, value, update);\n }\n }\n else {\n var wCell = selection.getContainerCell(cell);\n this.applyParagraphFormatRow(wCell.ownerRow, start, end, property, value, update);\n }\n };\n Editor.prototype.applyParaFormatCellInternal = function (cell, property, value, update) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.applyParaFormatProperty(block, property, value, update);\n }\n else {\n this.applyParagraphFormatTableInternal(block, property, value, update);\n }\n }\n };\n Editor.prototype.getParaFormatValueInCell = function (cell, property, value) {\n if (typeof value === 'boolean') {\n var firstPara = this.viewer.selection.getFirstParagraph(cell);\n value = !firstPara.paragraphFormat.getPropertyValue(property);\n }\n return value;\n };\n // Row\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParagraphFormatRow = function (wRow, start, end, property, value, update) {\n value = this.getParaFormatValueInCell(wRow.childWidgets[0], property, value);\n for (var i = wRow.rowIndex; i < wRow.ownerTable.childWidgets.length; i++) {\n var row = wRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n if (end.paragraph.isInsideTable && this.viewer.selection.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n this.getNextParagraphForFormatting(wRow.ownerTable, start, end, property, value, update);\n };\n // Table\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormatTableCell = function (table, startCell, endCell, property, value, update) {\n var selection = this.viewer.selection;\n var startValue = selection.getCellLeft(startCell.ownerRow, startCell);\n var endValue = startValue + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startValue, endValue, endCellLeft, endCellRight);\n startValue = cellInfo.start;\n endValue = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var m = table.childWidgets.indexOf(startCell.ownerRow); m <= count; m++) {\n var row = table.childWidgets[m];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (Math.round(startValue) <= Math.round(left) && Math.round(left) < Math.round(endValue)) {\n if (!isStarted) {\n value = this.getParaFormatValueInCell(row.childWidgets[j], property, value);\n isStarted = true;\n }\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormatTable = function (table, start, end, property, value, update) {\n table = table.combineWidget(this.viewer);\n var selection = this.viewer.selection;\n for (var m = 0; m < table.childWidgets.length; m++) {\n var tableRow = table.childWidgets[m];\n for (var k = 0; k < tableRow.childWidgets.length; k++) {\n this.applyParaFormatCellInternal(tableRow.childWidgets[k], property, value, update);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(tableRow, end.paragraph.associatedCell)) {\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForFormatting(table, start, end, property, value, update);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.getNextParagraphForFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.viewer.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) {\n if (block instanceof ParagraphWidget) {\n this.applyParaFormat(block, start, end, property, value, update);\n }\n else {\n this.applyParaFormatTable(block, start, end, property, value, update);\n }\n }\n };\n Editor.prototype.applyParagraphFormatTableInternal = function (table, property, value, update) {\n for (var x = 0; x < table.childWidgets.length; x++) {\n var row = table.childWidgets[x];\n for (var y = 0; y < row.childWidgets.length; y++) {\n this.applyParaFormatCellInternal(row.childWidgets[y], property, value, update);\n }\n }\n };\n //Paragraph Format apply implementation Ends\n // Apply Selection Section Format Option Implementation Starts\n /**\n * Apply section format selection changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplySectionFormat = function (property, value) {\n if (!isNullOrUndefined(property)) {\n var action = (property[0].toUpperCase() + property.slice(1));\n this.initHistory(action);\n }\n else {\n this.initHistory('SectionFormat');\n }\n this.updateSectionFormat(property, value);\n };\n /**\n * Update section format\n * @param {string} property\n * @param {Object} value\n * @returns TextPosition\n * @private\n */\n Editor.prototype.updateSectionFormat = function (property, value) {\n var selection = this.viewer.selection;\n selection.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var startPageIndex;\n var endPageIndex;\n this.viewer.clearContent();\n var startSectionIndex = startPosition.paragraph.containerWidget.index;\n var endSectionIndex = endPosition.paragraph.containerWidget.index;\n for (var i = 0; i < this.viewer.pages.length; i++) {\n if (this.viewer.pages[i].bodyWidgets[0].index === startSectionIndex) {\n startPageIndex = i;\n break;\n }\n }\n for (var i = startPageIndex; i < this.viewer.pages.length; i++) {\n var bodyWidget = this.viewer.pages[i].bodyWidgets[0];\n endPageIndex = i;\n if ((bodyWidget.index === startSectionIndex)) {\n continue;\n }\n else if ((bodyWidget.index >= startSectionIndex) && bodyWidget.index <= endSectionIndex) {\n continue;\n }\n else {\n endPageIndex = i - 1;\n break;\n }\n }\n // let startPageIndex: number = this.viewer.pages.indexOf((selection.start.paragraph.containerWidget as BodyWidget).page);\n // let endPageIndex: number = this.viewer.pages.indexOf((selection.end.paragraph.containerWidget as BodyWidget).page);\n var update = true;\n var index = 0;\n for (var i = startPageIndex; i <= endPageIndex; i++) {\n if (index !== this.viewer.pages[i].bodyWidgets[0].index && !update) {\n update = true;\n }\n this.applyPropertyValueForSection(this.viewer.pages[i].bodyWidgets[0].sectionFormat, property, value, update);\n index = this.viewer.pages[i].bodyWidgets[0].index;\n update = false;\n }\n this.layoutWholeDocument();\n this.fireContentChange();\n };\n //Apply Selection Table Format option implementation starts\n /**\n * Apply table format property changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplyTableFormat = function (property, value) {\n var action = this.getTableFormatAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n var table = selection.start.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyTablePropertyValue(selection, property, value, table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.viewer.layout.reLayoutTable(table);\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableFormatAction = function (property) {\n switch (property) {\n case 'tableAlignment':\n return 'TableAlignment';\n case 'leftIndent':\n return 'TableLeftIndent';\n case 'leftMargin':\n return 'DefaultCellLeftMargin';\n case 'rightMargin':\n return 'DefaultCellRightMargin';\n case 'bottomMargin':\n return 'DefaultCellBottomMargin';\n case 'topMargin':\n return 'DefaultCellTopMargin';\n case 'preferredWidth':\n return 'TablePreferredWidth';\n case 'preferredWidthType':\n return 'TablePreferredWidthType';\n case 'shading':\n return 'Shading';\n default:\n return 'DefaultCellSpacing';\n }\n };\n // Apply Selection Row Format Option Implementation Starts\n /**\n * Apply table row format property changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplyTableRowFormat = function (property, value) {\n var action = this.getRowAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n this.initHistory(action);\n var table = selection.start.paragraph.associatedCell.ownerRow.ownerTable;\n this.applyRowPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.ownerRow);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getRowAction = function (property) {\n switch (property) {\n case 'height':\n return 'RowHeight';\n case 'heightType':\n return 'RowHeightType';\n case 'isHeader':\n return 'RowHeader';\n default:\n return 'AllowBreakAcrossPages';\n }\n };\n /**\n * Apply table cell property changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplyTableCellFormat = function (property, value) {\n var action = this.getTableCellAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n var table = selection.start.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyCellPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.cellFormat);\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.viewer.layout.reLayoutTable(table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableCellAction = function (property) {\n switch (property) {\n case 'verticalAlignment':\n return 'CellContentVerticalAlignment';\n case 'leftMargin':\n return 'CellLeftMargin';\n case 'rightMargin':\n return 'CellRightMargin';\n case 'bottomMargin':\n return 'CellBottomMargin';\n case 'topMargin':\n return 'CellTopMargin';\n case 'preferredWidth':\n return 'CellPreferredWidth';\n case 'shading':\n return 'Shading';\n default:\n return 'CellPreferredWidthType';\n }\n };\n Editor.prototype.applyPropertyValueForSection = function (sectionFormat, property, value, update) {\n var selection = this.viewer.selection;\n if (update && this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForSection(sectionFormat, property, value);\n }\n if (isNullOrUndefined(value)) {\n return;\n }\n if (value instanceof WSectionFormat) {\n if (isNullOrUndefined(property)) {\n sectionFormat.copyFormat(value, this.editorHistory);\n }\n return;\n }\n if (property === 'pageHeight') {\n sectionFormat.pageHeight = value;\n }\n else if (property === 'pageWidth') {\n sectionFormat.pageWidth = value;\n }\n else if (property === 'leftMargin') {\n sectionFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sectionFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sectionFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sectionFormat.bottomMargin = value;\n }\n else if (property === 'differentFirstPage') {\n sectionFormat.differentFirstPage = value;\n }\n else if (property === 'differentOddAndEvenPages') {\n sectionFormat.differentOddAndEvenPages = value;\n }\n else if (property === 'headerDistance') {\n sectionFormat.headerDistance = value;\n }\n else if (property === 'footerDistance') {\n sectionFormat.footerDistance = value;\n }\n };\n /**\n * @private\n */\n Editor.prototype.layoutWholeDocument = function () {\n var startPosition = this.viewer.selection.start;\n var endPosition = this.viewer.selection.end;\n if (startPosition.isExistAfter(endPosition)) {\n startPosition = this.viewer.selection.end;\n endPosition = this.viewer.selection.start;\n }\n var startInfo = this.getParagraphInfo(startPosition);\n var endInfo = this.getParagraphInfo(startPosition);\n var startIndex = this.getHierarchicalIndex(startInfo.paragraph, startInfo.offset.toString());\n var endIndex = this.getHierarchicalIndex(endInfo.paragraph, endInfo.offset.toString());\n this.viewer.renderedLists.clear();\n // this.viewer.owner.isLayoutEnabled = true;\n var sections = this.combineSection();\n this.viewer.clearContent();\n this.viewer.layout.layoutItems(sections);\n this.viewer.owner.isShiftingEnabled = false;\n this.setPositionForCurrentIndex(startPosition, startIndex);\n this.setPositionForCurrentIndex(endPosition, endIndex);\n this.viewer.selection.selectPosition(startPosition, endPosition);\n this.reLayout(this.viewer.selection);\n };\n Editor.prototype.combineSection = function () {\n var sections = [];\n var nextSection = this.viewer.pages[0].bodyWidgets[0];\n do {\n nextSection = this.combineSectionChild(nextSection, sections);\n } while (nextSection);\n return sections;\n };\n Editor.prototype.combineSectionChild = function (bodyWidget, sections) {\n var previousBodyWidget = bodyWidget;\n var temp = new BodyWidget();\n temp.sectionFormat = bodyWidget.sectionFormat;\n temp.index = previousBodyWidget.index;\n do {\n previousBodyWidget = bodyWidget;\n if (bodyWidget.lastChild) {\n bodyWidget.lastChild.combineWidget(this.viewer);\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n for (var j = 0; j < previousBodyWidget.childWidgets.length; j++) {\n var block = previousBodyWidget.childWidgets[j];\n if (block instanceof TableWidget) {\n this.viewer.layout.clearTableWidget(block, true, true);\n }\n else {\n block.x = 0;\n block.y = 0;\n block.width = 0;\n block.height = 0;\n }\n temp.childWidgets.push(block);\n previousBodyWidget.childWidgets.splice(j, 1);\n j--;\n block.containerWidget = temp;\n }\n previousBodyWidget.page.destroy();\n // this.viewer.pages.splice(previousBodyWidget.page.index, 1);\n } while (bodyWidget && previousBodyWidget.equals(bodyWidget));\n sections.push(temp);\n return bodyWidget;\n };\n Editor.prototype.updateSelectionTableFormat = function (selection, action, value) {\n switch (action) {\n case 'TableAlignment':\n this.editorHistory.initializeHistory('TableAlignment');\n this.updateTableFormat(selection, 'tableAlignment', value);\n break;\n case 'TableLeftIndent':\n this.editorHistory.initializeHistory('TableLeftIndent');\n this.updateTableFormat(selection, 'leftIndent', value);\n break;\n case 'DefaultCellSpacing':\n this.editorHistory.initializeHistory('DefaultCellSpacing');\n this.updateTableFormat(selection, 'cellSpacing', value);\n break;\n case 'DefaultCellLeftMargin':\n this.editorHistory.initializeHistory('DefaultCellLeftMargin');\n this.updateTableFormat(selection, 'leftMargin', value);\n break;\n case 'DefaultCellRightMargin':\n this.editorHistory.initializeHistory('DefaultCellRightMargin');\n this.updateTableFormat(selection, 'rightMargin', value);\n break;\n case 'DefaultCellTopMargin':\n this.editorHistory.initializeHistory('DefaultCellTopMargin');\n this.updateTableFormat(selection, 'topMargin', value);\n break;\n case 'TablePreferredWidth':\n this.editorHistory.initializeHistory('TablePreferredWidth');\n this.updateTableFormat(selection, 'preferredWidth', value);\n break;\n case 'TablePreferredWidthType':\n this.editorHistory.initializeHistory('TablePreferredWidthType');\n this.updateTableFormat(selection, 'preferredWidthType', value);\n break;\n case 'DefaultCellBottomMargin':\n this.editorHistory.initializeHistory('DefaultCellBottomMargin');\n this.updateTableFormat(selection, 'bottomMargin', value);\n break;\n case 'CellContentVerticalAlignment':\n this.editorHistory.initializeHistory('CellContentVerticalAlignment');\n this.updateCellFormat(selection, 'verticalAlignment', value);\n break;\n case 'CellLeftMargin':\n this.editorHistory.initializeHistory('CellLeftMargin');\n this.updateCellFormat(selection, 'leftMargin', value);\n break;\n case 'CellRightMargin':\n this.editorHistory.initializeHistory('CellRightMargin');\n this.updateCellFormat(selection, 'rightMargin', value);\n break;\n case 'CellTopMargin':\n this.editorHistory.initializeHistory('CellTopMargin');\n this.updateCellFormat(selection, 'topMargin', value);\n break;\n case 'CellBottomMargin':\n this.editorHistory.initializeHistory('CellBottomMargin');\n this.updateCellFormat(selection, 'bottomMargin', value);\n break;\n case 'CellPreferredWidth':\n this.editorHistory.initializeHistory('CellPreferredWidth');\n this.updateCellFormat(selection, 'preferredWidth', value);\n break;\n case 'CellPreferredWidthType':\n this.editorHistory.initializeHistory('CellPreferredWidthType');\n this.updateCellFormat(selection, 'preferredWidthType', value);\n break;\n case 'Shading':\n this.editorHistory.initializeHistory('Shading');\n this.updateCellFormat(selection, 'shading', value);\n break;\n case 'RowHeight':\n this.editorHistory.initializeHistory('RowHeight');\n this.updateRowFormat(selection, 'height', value);\n break;\n case 'RowHeightType':\n this.editorHistory.initializeHistory('RowHeightType');\n this.updateRowFormat(selection, 'heightType', value);\n break;\n case 'RowHeader':\n this.editorHistory.initializeHistory('RowHeader');\n this.updateRowFormat(selection, 'isHeader', value);\n break;\n case 'AllowBreakAcrossPages':\n this.editorHistory.initializeHistory('AllowBreakAcrossPages');\n this.updateRowFormat(selection, 'allowBreakAcrossPages', value);\n break;\n }\n };\n // Update Table Properties\n /**\n * Update Table Format on undo\n * @param {Selection} selection\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {object} value\n * @private\n */\n Editor.prototype.updateTableFormat = function (selection, property, value) {\n var tableStartPosition = selection.start;\n var tableEndPosition = selection.end;\n if (!selection.isForward) {\n tableStartPosition = selection.end;\n tableEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, tableStartPosition);\n // tslint:disable-next-line:max-line-length\n this.applyTablePropertyValue(selection, property, value, tableStartPosition.paragraph.associatedCell.ownerTable);\n };\n /**\n * update cell format on undo\n * @param {Selection} selection\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.updateCellFormat = function (selection, property, value) {\n selection.owner.isShiftingEnabled = true;\n var newStartPosition = selection.start;\n var newEndPosition = selection.end;\n if (!selection.isForward) {\n newStartPosition = selection.end;\n newEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, newStartPosition);\n this.updateFormatForCell(selection, property, value);\n };\n /**\n * update row format on undo\n * @param {Selection} selection\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.updateRowFormat = function (selection, property, value) {\n var rowStartPosition = selection.start;\n var rowEndPosition = selection.end;\n if (!selection.isForward) {\n rowStartPosition = selection.end;\n rowEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, rowStartPosition);\n // tslint:disable-next-line:max-line-length\n this.applyRowFormat(rowStartPosition.paragraph.associatedCell.ownerRow, rowStartPosition, rowEndPosition, property, value);\n };\n Editor.prototype.initHistoryPosition = function (selection, position) {\n if (this.viewer.owner.editorHistoryModule && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (!isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = position.getHierarchicalIndexInternal();\n }\n }\n else if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.start.getHierarchicalIndexInternal();\n }\n }\n };\n Editor.prototype.startSelectionReLayouting = function (paragraph, selection, start, end) {\n selection.owner.isLayoutEnabled = true;\n if (start.paragraph.isInsideTable) {\n var table = start.paragraph.associatedCell.ownerTable;\n while (table.isInsideTable) {\n table = table.associatedCell.ownerTable;\n }\n this.reLayoutSelectionOfTable(table, selection, start, end);\n }\n else {\n this.reLayoutSelection(paragraph, selection, start, end);\n }\n };\n Editor.prototype.reLayoutSelectionOfTable = function (table, selection, start, end) {\n var isEnded = false;\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n // If the selection ends in the current table, need to stop relayouting.\n if (!isNullOrUndefined(end.paragraph.associatedCell) && table.contains(end.paragraph.associatedCell)) {\n return true;\n }\n var block = selection.getNextRenderedBlock(table);\n // Relayout the next block.\n if (!isNullOrUndefined(block)) {\n isEnded = this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return isEnded;\n };\n Editor.prototype.reLayoutSelection = function (paragraph, selection, start, end) {\n if (start.paragraph === paragraph) {\n var startOffset = start.offset;\n var length_2 = selection.getParagraphLength(paragraph);\n var indexInInline = 0;\n var index = 0;\n var inlineObj = paragraph.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n }\n index = inline.line.children.indexOf(inline);\n }\n var lineIndex = 0;\n if (start.currentWidget.paragraph === paragraph) {\n lineIndex = paragraph.childWidgets.indexOf(start.currentWidget);\n index = start.currentWidget.children.indexOf(inline);\n }\n // If selection start inline is at new inline, need to relayout from the previous inline.\n if (inline instanceof TextElementBox && !inline.line && index > 0) {\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, index - 1);\n }\n else {\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, index);\n }\n }\n else {\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n // If the selection ends at the current paragraph, need to stop relayouting.\n if (end.paragraph === paragraph) {\n return true;\n }\n // _Relayout the next block.\n var block = selection.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n return this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return false;\n };\n //Relayouting Start \n Editor.prototype.reLayoutSelectionOfBlock = function (block, selection, start, end) {\n if (block instanceof ParagraphWidget) {\n return this.reLayoutSelection(block, selection, start, end);\n }\n else {\n return undefined;\n // return this.reLayoutSelectionOfTable(block as TableWidget, selection, start, end);\n }\n };\n /**\n * @private\n */\n Editor.prototype.layoutItemBlock = function (block, shiftNextWidget) {\n var section = undefined;\n if (block.containerWidget instanceof BlockContainer) {\n section = block.containerWidget;\n var index = section.childWidgets.indexOf(block);\n if (!isNullOrUndefined(this.viewer.owner)\n && this.viewer.owner.isLayoutEnabled) {\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(block.index, section, block, false);\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cell = block.containerWidget;\n cell = this.viewer.selection.getContainerCell(cell);\n if (!isNullOrUndefined(this.viewer.owner)\n && this.viewer.owner.isLayoutEnabled) {\n this.viewer.layout.reLayoutTable(block);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeSelectedContents = function (selection) {\n return this.removeSelectedContentInternal(selection, selection.start, selection.end);\n };\n Editor.prototype.removeSelectedContentInternal = function (selection, startPosition, endPosition) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n // tslint:disable-next-line:max-line-length\n if (startPos.paragraph === endPos.paragraph && startPos.paragraph.childWidgets.indexOf(startPos.currentWidget) === startPos.paragraph.childWidgets.length - 1 &&\n startPos.offset === selection.getParagraphLength(startPos.paragraph) && startPos.offset + 1 === endPos.offset) {\n selection.owner.isShiftingEnabled = true;\n selection.selectContent(startPos, true);\n return true;\n }\n var paragraphInfo = this.getParagraphInfo(startPos);\n selection.editPosition = this.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var isRemoved = this.removeSelectedContent(endPos.paragraph, selection, startPos, endPos);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n return isRemoved;\n };\n Editor.prototype.removeSelectedContent = function (paragraph, selection, start, end) {\n //If end is not table end and start is outside the table, then skip removing the contents and move caret to start position.\n if (end.paragraph.isInsideTable\n && end.paragraph !== selection.getLastParagraphInLastCell(end.paragraph.associatedCell.ownerTable)\n && (!start.paragraph.isInsideTable || start.paragraph.associatedCell.ownerTable !== end.paragraph.associatedCell.ownerTable)) {\n return false;\n }\n selection.owner.isShiftingEnabled = true;\n this.deleteSelectedContent(paragraph, selection, start, end, 2);\n return true;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteSelectedContent = function (paragraph, selection, start, end, editAction) {\n var indexInInline = 0;\n var inlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldBegin && !isNullOrUndefined((inline as WFieldBegin).fieldEnd)) {\n // tslint:disable-next-line:max-line-length\n // let fieldEndOffset: number = ((inline as WFieldBegin).fieldEnd.owner as WParagraph).getOffset((inline as WFieldBegin).fieldEnd, 1);\n // let fieldEndIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldBegin).fieldEnd.owner as WParagraph, fieldEndOffset.toString());\n // let selectionEndIndex: string = end.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n // //If selection end is after field begin, moves selection start to field separator.\n // start.moveToInline((inline as WFieldBegin).fieldSeparator, 1);\n // selection.editPosition = start.getHierarchicalIndexInternal();\n // if (!isNullOrUndefined(selection.currentBaseHistoryInfo)) {\n // selection.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n // }\n // }\n // }\n indexInInline = 0;\n inlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldEnd && !isNullOrUndefined((inline as WFieldEnd).fieldBegin)) {\n // tslint:disable-next-line:max-line-length\n // let fieldBeginOffset: number = ((inline as WFieldEnd).fieldBegin.owner as WParagraph).getOffset((inline as WFieldEnd).fieldBegin, 0);\n // let fieldBeginIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldEnd).fieldBegin.owner as WParagraph, fieldBeginOffset.toString());\n // let selectionStartIndex: string = start.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n // //If field begin is before selection start, move selection end to inline item before field end.\n // let prevInline: WInline = selection.getPreviousTextInline(inline);\n // if (isNullOrUndefined(prevInline)) {\n // end.moveBackward();\n // } else {\n // end.moveToInline(prevInline, prevInline.length);\n // }\n // }\n // }\n if (end.paragraph !== paragraph) {\n this.deleteSelectedContent(end.paragraph, selection, start, end, editAction);\n return;\n }\n // Selection start in cell.\n if (end.paragraph.isInsideTable && (!start.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(end.paragraph.associatedCell, start, end))) {\n end.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n this.deleteTableCell(end.paragraph.associatedCell, selection, start, end, editAction);\n }\n else {\n this.deletePara(paragraph, start, end, editAction);\n }\n };\n /**\n * Merge the selected cells.\n */\n Editor.prototype.mergeCells = function () {\n if (this.owner.isReadOnlyMode || !this.owner.isDocumentLoaded) {\n return;\n }\n if (!isNullOrUndefined(this.viewer) && !this.selection.isEmpty) {\n this.mergeSelectedCellsInTable();\n }\n };\n /**\n * Deletes the entire table at selection.\n */\n Editor.prototype.deleteTable = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n if (startPos.paragraph.isInsideTable) {\n var table = this.getOwnerTable(this.selection.isForward).combineWidget(this.viewer);\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n this.initHistory('DeleteTable');\n //Sets the insert position in history info as current table. \n this.updateHistoryPosition(startPos, true);\n }\n var paragraph = this.getParagraphForSelection(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(table.clone());\n }\n this.removeBlock(table);\n this.selection.selectParagraph(paragraph, true);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n }\n }\n };\n /**\n * Deletes the selected column(s).\n */\n Editor.prototype.deleteColumn = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n this.initHistory('DeleteColumn');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerTable.combineWidget(this.viewer);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (endCell.nextWidget) {\n var nextCell = endCell.nextWidget;\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n else if (startCell.previousWidget) {\n var previousCell = startCell.previousWidget;\n paragraph = this.selection.getFirstParagraph(previousCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n //retrieve the cell collection based on start and end cell to remove. \n var deleteCells = table.getColumnCellsForSelection(startCell, endCell);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.childWidgets.length === 1) {\n if (deleteCells.indexOf(row.childWidgets[0]) >= 0) {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n i--;\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var tableCell = row.childWidgets[j];\n if (deleteCells.indexOf(tableCell) >= 0) {\n row.childWidgets.splice(j, 1);\n tableCell.destroy();\n j--;\n }\n }\n if (row.childWidgets.length === 0) {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n i--;\n }\n }\n }\n if (table.childWidgets.length === 0) {\n // Before disposing table reset the paragrph.\n paragraph = this.getParagraphForSelection(table);\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n }\n this.selection.selectParagraph(paragraph, true);\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n }\n }\n };\n /**\n * Deletes the selected row(s).\n */\n Editor.prototype.deleteRow = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = !this.selection.isForward ? this.selection.end : this.selection.start;\n var endPos = !this.selection.isForward ? this.selection.start : this.selection.end;\n if (startPos.paragraph.isInsideTable) {\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n if (this.checkIsNotRedoing()) {\n this.initHistory('DeleteRow');\n }\n this.selection.owner.isShiftingEnabled = true;\n var table = startCell.ownerTable.combineWidget(this.viewer);\n var row = this.getOwnerRow(true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (row.nextWidget) {\n var nextCell = row.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n if (!this.selection.isEmpty) {\n //tslint:disable-next-line:max-line-length\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n if (this.selection.containsCell(containerCell, endCell)) {\n row = startCell.ownerRow;\n this.removeRow(row);\n }\n else {\n row = startCell.ownerRow;\n var endRow = endCell.ownerRow;\n //Update the selection paragraph.\n paragraph = undefined;\n if (endRow.nextWidget) {\n var nextCell = endRow.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (tableRow.rowIndex >= row.rowIndex && tableRow.rowIndex <= endRow.rowIndex) {\n table.childWidgets.splice(i, 1);\n tableRow.destroy();\n i--;\n }\n }\n if (table.childWidgets.length === 0) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n this.updateTable(table);\n }\n }\n }\n }\n else {\n this.removeRow(row);\n }\n this.selection.selectParagraph(paragraph, true);\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n }\n }\n };\n Editor.prototype.removeRow = function (row) {\n var table = row.ownerTable;\n if (table.childWidgets.length === 1) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'Delete';\n }\n table.destroy();\n }\n else {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n this.updateTable(table);\n }\n };\n Editor.prototype.updateTable = function (table) {\n table.updateRowIndex(0);\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n };\n Editor.prototype.getParagraphForSelection = function (table) {\n var paragraph = undefined;\n var nextWidget = table.nextWidget ? table.nextWidget : table.nextRenderedWidget;\n var previousWidget = table.previousWidget ? table.previousWidget : table.previousRenderedWidget;\n if (nextWidget) {\n paragraph = nextWidget instanceof ParagraphWidget ? nextWidget\n : this.selection.getFirstParagraphInFirstCell(nextWidget);\n }\n else if (previousWidget) {\n paragraph = previousWidget instanceof ParagraphWidget ? previousWidget\n : this.selection.getLastParagraphInLastCell(previousWidget);\n }\n return paragraph;\n };\n Editor.prototype.deletePara = function (paragraph, start, end, editAction) {\n paragraph = paragraph.combineWidget(this.viewer);\n var selection = this.viewer.selection;\n var paragraphStart = selection.getStartOffset(paragraph);\n var endParagraphStartOffset = selection.getStartOffset(end.paragraph);\n var startOffset = paragraphStart;\n var endOffset = 0;\n var isCombineNextParagraph = false;\n var lastLinelength = this.selection.getLineLength(paragraph.lastChild);\n var currentParagraph = paragraph;\n var section = paragraph.bodyWidget instanceof BodyWidget ? paragraph.bodyWidget : undefined;\n var startLine = undefined;\n var endLineWidget = undefined;\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n startLine = start.currentWidget;\n if (end.paragraph.isInsideTable) {\n isCombineNextParagraph = this.isEndInAdjacentTable(paragraph, end.paragraph);\n }\n }\n else {\n startLine = paragraph.firstChild;\n }\n if (paragraph !== start.paragraph && selection.isSkipLayouting) {\n selection.isSkipLayouting = false;\n }\n if (paragraph === end.paragraph) {\n endLineWidget = end.currentWidget;\n endOffset = end.offset;\n }\n else {\n endLineWidget = paragraph.lastChild;\n endOffset = this.viewer.selection.getLineLength(paragraph.lastChild);\n }\n var block = paragraph.previousRenderedWidget;\n if (startOffset > paragraphStart && start.currentWidget === paragraph.lastChild &&\n startOffset === lastLinelength && (paragraph === end.paragraph && end.offset === startOffset + 1 ||\n paragraph.nextRenderedWidget === end.paragraph && end.offset === endParagraphStartOffset) ||\n (this.editorHistory && this.editorHistory.isUndoing && this.editorHistory.currentHistoryInfo &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak' && block && block.isPageBreak())) {\n isCombineNextParagraph = true;\n }\n if (end.paragraph === paragraph && end.currentWidget !== paragraph.lastChild ||\n (end.currentWidget === paragraph.lastChild && end.offset <= selection.getLineLength(paragraph.lastChild))) {\n var isStartParagraph = start.paragraph === paragraph;\n if (end.currentWidget.isFirstLine() && end.offset > paragraphStart || !end.currentWidget.isFirstLine()) {\n //If selection end with this paragraph and selection doesnot include paragraph mark. \n this.removeInlines(paragraph, startLine, startOffset, endLineWidget, endOffset, editAction);\n //Removes the splitted paragraph.\n }\n if (!isNullOrUndefined(block) && !isStartParagraph) {\n var nextSection = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n if (nextSection && !section.equals(nextSection) && section.index !== nextSection.index) {\n this.deleteSection(selection, nextSection, section, editAction);\n }\n this.deleteBlock(block, selection, start, end, editAction);\n }\n }\n else if (start.paragraph === paragraph && (start.currentWidget !== paragraph.firstChild ||\n (start.currentWidget === paragraph.firstChild && startOffset > paragraphStart))) {\n // If selection start is after paragraph start\n //And selection does not end with this paragraph Or selection include paragraph mark.\n if (editAction === 4) {\n return;\n }\n else {\n currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, startLine, startOffset, true);\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction);\n this.addRemovedNodes(paragraph);\n return;\n }\n }\n else {\n var newParagraph = undefined;\n var previousBlock = paragraph.previousWidget;\n var prevParagraph = (previousBlock instanceof ParagraphWidget) ? previousBlock : undefined;\n var nextWidget = paragraph.nextRenderedWidget;\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner text body and previousBlock is not paragraph.\n newParagraph = this.checkAndInsertBlock(paragraph, start, end, editAction, prevParagraph);\n this.removeBlock(paragraph);\n if (this.viewer.blockToShift === paragraph) {\n this.viewer.blockToShift = undefined;\n }\n this.addRemovedNodes(paragraph);\n if (!isNullOrUndefined(newParagraph)) {\n selection.editPosition = this.getHierarchicalIndex(newParagraph, '0');\n var offset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n //tslint:disable-next-line:max-line-length\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.getHierarchicalIndex(newParagraph, offset.toString());\n }\n }\n else if (paragraph === start.paragraph && isNullOrUndefined(nextWidget) && !isNullOrUndefined(prevParagraph)) {\n var offset = this.selection.getParagraphLength(prevParagraph);\n // if (isNullOrUndefined(block)) {\n selection.editPosition = this.getHierarchicalIndex(prevParagraph, offset.toString());\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.editPosition, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n // } else {\n // let offset: number = selection.getParagraphLength(paragraph) + 1;\n // if (block instanceof ParagraphWidget) {\n // prevParagraph = block as ParagraphWidget;\n // }\n // // if (block instanceof WTable) {\n // // prevParagraph = (block as WTable).getFirstParagraphInFirstCell();\n // // }\n // selection.editPosition = prevLineWidget.getHierarchicalIndex('0');\n // }\n }\n }\n if (start.paragraph !== paragraph && !isNullOrUndefined(block)) {\n var nextSection = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n // if (section !== nextSection) {\n // this.deleteSection(selection, section, nextSection, editAction);\n // }\n this.deleteBlock(block, selection, start, end, editAction);\n }\n }\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction);\n };\n Editor.prototype.deleteSection = function (selection, section, nextSection, editAction) {\n if (editAction < 4) {\n this.combineSectionInternal(selection, section, nextSection);\n }\n //Copies the section properties, if this is last paragraph of section.\n if (editAction > 2) {\n section.sectionFormat.copyFormat(nextSection.sectionFormat);\n }\n };\n Editor.prototype.combineSectionInternal = function (selection, section, nextSection) {\n // if (section.sectionFormat.isEqualFormat(nextSection.sectionFormat)) {\n // } else {\n var bodyWidget = section.getSplitWidgets()[0];\n var currentSection = [];\n this.combineSectionChild(bodyWidget, currentSection);\n bodyWidget = currentSection[0];\n var lastBlockIndex = bodyWidget.lastChild.index;\n this.updateBlockIndex(lastBlockIndex + 1, nextSection.firstChild);\n var insertIndex = 0;\n var containerWidget = nextSection;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var block = bodyWidget.childWidgets.splice(i, 1)[0];\n containerWidget.childWidgets.splice(insertIndex, 0, block);\n block.containerWidget = containerWidget;\n this.viewer.layout.layoutBodyWidgetCollection(block.index, block.bodyWidget, block, false);\n block = block.getSplitWidgets().pop();\n containerWidget = block.containerWidget;\n insertIndex = block.indexInOwner + 1;\n i--;\n }\n this.updateSectionIndex(undefined, nextSection, false);\n this.addRemovedNodes(bodyWidget);\n // this.insert\n // }\n };\n //tslint:disable:max-line-length\n /**\n * @private\n */\n Editor.prototype.checkAndInsertBlock = function (block, start, end, editAction, previousParagraph) {\n if (block instanceof ParagraphWidget && block === start.paragraph || block instanceof TableWidget) {\n var newParagraph = void 0; //Adds an empty paragraph, to ensure minimal content.\n if (isNullOrUndefined(block.nextWidget) && (isNullOrUndefined(previousParagraph) || previousParagraph.nextRenderedWidget instanceof TableWidget)) {\n newParagraph = new ParagraphWidget();\n if (editAction === 1 && block instanceof ParagraphWidget) {\n newParagraph.characterFormat.copyFormat(block.characterFormat);\n newParagraph.paragraphFormat.copyFormat(block.paragraphFormat);\n }\n newParagraph.index = block.index + 1;\n newParagraph.containerWidget = block.containerWidget;\n this.viewer.layout.layoutBodyWidgetCollection(newParagraph.index, newParagraph.bodyWidget, newParagraph, false);\n if (block.containerWidget instanceof Widget) {\n block.containerWidget.childWidgets.push(newParagraph);\n }\n }\n return newParagraph;\n }\n return undefined;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.splitParagraph = function (paragraphAdv, startLine, startOffset, endLine, endOffset, removeBlock) {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n var blockIndex = paragraphAdv.index;\n var insertIndex = paragraphAdv.indexInOwner;\n this.moveInlines(paragraphAdv, paragraph, 0, startOffset, startLine, endOffset, endLine);\n //Inserts new paragraph in the current text position.\n paragraphAdv.containerWidget.childWidgets.splice(insertIndex, 0, paragraph);\n paragraph.index = blockIndex;\n paragraph.containerWidget = paragraphAdv.containerWidget;\n this.updateNextBlocksIndex(paragraph, true);\n if (removeBlock) {\n this.removeBlock(paragraphAdv);\n }\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(blockIndex, paragraph.containerWidget, paragraph, false);\n return paragraph;\n };\n /**\n * @private\n */\n Editor.prototype.removeBlock = function (block) {\n var index;\n var blockCollection;\n var containerWidget;\n this.removeFieldInBlock(block);\n if (block.isInsideTable) {\n containerWidget = block.associatedCell;\n index = block.associatedCell.childWidgets.indexOf(block);\n blockCollection = block.associatedCell.childWidgets;\n this.updateNextBlocksIndex(block, false);\n block.associatedCell.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n this.viewer.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false);\n }\n else {\n containerWidget = block.containerWidget;\n index = containerWidget.childWidgets.indexOf(block);\n blockCollection = containerWidget.childWidgets;\n this.updateNextBlocksIndex(block, false);\n containerWidget.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n containerWidget.height -= block.height;\n this.viewer.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false);\n }\n };\n Editor.prototype.removeField = function (block) {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n var field = this.viewer.fields[i];\n if (field.line.paragraph === block) {\n this.viewer.fields.splice(i, 1);\n i--;\n }\n }\n };\n Editor.prototype.addRemovedNodes = function (node) {\n if (node instanceof FieldElementBox && node.fieldType === 0) {\n if (this.viewer.fields.indexOf(node) !== -1) {\n this.viewer.fields.splice(this.viewer.fields.indexOf(node), 1);\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(node);\n }\n else if (this.editHyperlinkInternal) {\n this.nodes.push(node);\n }\n };\n Editor.prototype.deleteBlock = function (block, selection, start, end, editAction) {\n if (block instanceof ParagraphWidget) {\n this.deletePara(block, start, end, editAction);\n }\n else {\n this.deleteTableBlock(block, selection, start, end, editAction);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteTableCell = function (cellAdv, selection, start, end, editAction) {\n var deletePreviousBlock = !(start.paragraph.isInsideTable && cellAdv.ownerTable.contains(start.paragraph.associatedCell));\n var previousBlock = cellAdv.ownerTable.previousRenderedWidget;\n if (start.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cellAdv, start.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(start.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cellAdv, containerCell);\n var endCell = selection.getSelectedCell(start.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, start.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n //Container cell is completely selected.\n this.updateEditPosition(containerCell, selection);\n if (editAction === 1) {\n //Specifically handled for backspace. Delete selected cell in current table.\n this.deleteCellsInTable(cellAdv.ownerRow.ownerTable, selection, start, end, editAction);\n }\n else {\n //Delete contents within table cell or Copy contents within table cell to clipboard.\n var isCellCleared = this.deleteCell(containerCell, selection, editAction, true);\n if (!isCellCleared && editAction !== 2 && this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (startCell === containerCell) {\n this.deletePara(end.paragraph, start, end, editAction);\n }\n else {\n this.deleteContainer(startCell, selection, start, end, editAction);\n }\n }\n }\n else {\n if (editAction === 2) {\n //Delete contents within table cell.\n this.deleteCell(cellAdv, selection, 2, false);\n }\n else {\n //Delete other selected cells in current table.\n this.deleteCellsInTable(containerCell.ownerTable, selection, start, end, editAction);\n }\n }\n }\n else {\n //Selection end is different table.\n this.deleteContainer(containerCell, selection, start, end, editAction);\n }\n }\n else {\n //Selection end is outside table.\n var cell = selection.getContainerCell(cellAdv);\n this.deleteContainer(cell, selection, start, end, editAction);\n }\n if (deletePreviousBlock) {\n var sectionAdv = previousBlock.bodyWidget instanceof BodyWidget ? previousBlock.bodyWidget : undefined;\n // this.deleteContent(cellAdv.ownerTable, selection, editAction);\n if (!isNullOrUndefined(previousBlock)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(previousBlock, selection, start, end, editAction);\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteCellsInTable = function (table, selection, start, end, editAction) {\n var clonedTable = undefined;\n var isDeleteCells = false;\n var action = 'Delete';\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n action = this.editorHistory.currentBaseHistoryInfo.action;\n //tslint:disable-next-line:max-line-length\n isDeleteCells = this.editorHistory.currentBaseHistoryInfo.action === 'BackSpace' || this.editorHistory.currentBaseHistoryInfo.action === 'DeleteCells'\n || this.editorHistory.currentBaseHistoryInfo.action === 'InsertTable' || (isNullOrUndefined(startCell.ownerRow.previousWidget)\n && isNullOrUndefined(endCell.ownerRow.nextWidget) && this.editorHistory.currentBaseHistoryInfo.action === 'Cut');\n this.editorHistory.currentBaseHistoryInfo.action = isDeleteCells ? 'DeleteCells' : 'ClearCells';\n clonedTable = this.cloneTableToHistoryInfo(table);\n selection.owner.isLayoutEnabled = false;\n }\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowIndex = startCell.rowIndex;\n var endRowIndex = endCell.rowIndex;\n var cells = [];\n var isStarted = false;\n var isCellCleared = false;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.index >= startRowIndex && row.index <= endRowIndex) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n if (!isStarted) {\n this.updateEditPosition(cell, selection);\n isStarted = true;\n }\n if (isDeleteCells) {\n //Specific for Backspace and Cut if selection includes all rows.\n var cell_1 = row.childWidgets[j];\n this.updateNextBlocksIndex(cell_1, false);\n row.childWidgets.splice(j, 1);\n j--;\n }\n else if (editAction < 4) {\n isCellCleared = this.deleteCell(cell, selection, editAction, false);\n }\n }\n }\n if (row.childWidgets.length === 0) {\n this.updateNextBlocksIndex(table.childWidgets[i], false);\n table.childWidgets.splice(i, 1);\n i--;\n endRowIndex--;\n }\n }\n }\n //Layouts the table after delete cells.\n selection.owner.isLayoutEnabled = true;\n if (table.childWidgets.length === 0) {\n selection.editPosition = this.getHierarchicalIndex(table, '0');\n this.setActionInternal(selection, action);\n this.removeBlock(table);\n }\n else {\n // Before lay outing need to update table grid.\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n }\n };\n Editor.prototype.deleteCell = function (cell, selection, editAction, copyChildToClipboard) {\n //Checks whether this is last paragraph of owner textbody.\n var block = cell.childWidgets[0];\n if (cell.childWidgets.length === 1 && block instanceof ParagraphWidget && block.isEmpty()) {\n return false;\n }\n for (var i = 0; i < cell.childWidgets.length; i++) {\n block = cell.childWidgets[i];\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner textbody.\n if (block instanceof ParagraphWidget && cell.childWidgets.length === 1) {\n //Preserves empty paragraph, to ensure minimal content.\n var paragraph = block;\n //Removes all the inlines in the paragraph.\n for (var j = 0; j < paragraph.childWidgets.length; j++) {\n var inline = paragraph.childWidgets[j];\n for (var k = 0; k < inline.children.length; k++) {\n var element = inline.children[k];\n this.unLinkFieldCharacter(element);\n inline.children.splice(k, 1);\n // this.layoutInlineCollection(true, paragraph.inlines.indexOf(inline), paragraph.inlines, inline);\n k--;\n if (this.checkClearCells(selection)) {\n this.addRemovedNodes(element);\n }\n }\n if (paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(j, 1);\n j--;\n }\n }\n if (this.checkClearCells(selection)) {\n //Add Index for line Widget\n selection.editPosition = this.getHierarchicalIndex(paragraph, '0');\n this.updateHistoryPosition(selection.editPosition, true);\n }\n break;\n }\n this.removeBlock(block);\n i--;\n if (this.checkClearCells(selection)) {\n this.addRemovedNodes(block);\n }\n }\n }\n return true;\n };\n Editor.prototype.deleteContainer = function (cell, selection, start, end, editAction) {\n var ownerTable = cell.ownerTable;\n if (selection.containsRow(ownerTable.lastChild, end.paragraph.associatedCell)) {\n this.deleteContent(ownerTable, selection, editAction);\n }\n else {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row = ownerTable.childWidgets[i];\n if (editAction < 4) {\n this.updateNextBlocksIndex(row, false);\n ownerTable.childWidgets.splice(i, 1);\n this.addRemovedNodes(row);\n i--;\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.viewer.layout.reLayoutTable(ownerTable);\n return;\n }\n }\n }\n };\n Editor.prototype.deleteTableBlock = function (table, selection, start, end, editAction) {\n table = table.combineWidget(this.viewer);\n if (start.paragraph.isInsideTable && table.contains(start.paragraph.associatedCell)) {\n var block = table.previousRenderedWidget;\n // tslint:disable-next-line:max-line-length\n var previousBlock = this.checkAndInsertBlock(table, start, end, editAction, block instanceof ParagraphWidget ? block : undefined);\n if (selection.containsRow(table.firstChild, start.paragraph.associatedCell)) {\n this.deleteContent(table, selection, editAction);\n }\n else {\n var newTable = this.splitTable(table, start.paragraph.associatedCell.ownerRow);\n this.deleteContent(table, selection, editAction);\n this.viewer.layout.layoutBodyWidgetCollection(newTable.index, newTable.containerWidget, newTable, false);\n }\n if (!isNullOrUndefined(previousBlock)) {\n selection.editPosition = this.getHierarchicalIndex(previousBlock, '0');\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n }\n }\n else {\n var blockAdv = table.previousRenderedWidget;\n var sectionAdv = table.bodyWidget instanceof BodyWidget ? table.bodyWidget : undefined;\n this.deleteContent(table, selection, editAction);\n if (!isNullOrUndefined(blockAdv)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(blockAdv, selection, start, end, editAction);\n }\n }\n };\n Editor.prototype.splitTable = function (table, splitEndRow) {\n var newTable = new TableWidget();\n newTable.tableFormat.copyFormat(table.tableFormat);\n newTable.index = table.index;\n //Moves the rows to new table.\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === splitEndRow) {\n break;\n }\n newTable.childWidgets.push(row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n //Inserts new table in the current text position.\n var insertIndex = table.getIndex();\n table.containerWidget.childWidgets.splice(insertIndex, 0, newTable);\n newTable.containerWidget = table.containerWidget;\n this.updateNextBlocksIndex(newTable, true);\n return newTable;\n };\n Editor.prototype.updateEditPosition = function (cell, selection) {\n var firstParagraph = selection.getFirstParagraphInCell(cell);\n selection.editPosition = this.getHierarchicalIndex(firstParagraph, '0');\n };\n /**\n * @private\n */\n Editor.prototype.deleteContent = function (table, selection, editAction) {\n if (editAction < 4) {\n this.removeBlock(table);\n this.addRemovedNodes(table);\n }\n };\n Editor.prototype.setActionInternal = function (selection, action) {\n if (this.viewer.owner.enableHistoryMode && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.action = action;\n }\n };\n Editor.prototype.checkClearCells = function (selection) {\n // tslint:disable-next-line:max-line-length\n return this.editorHistory && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action !== 'ClearCells';\n };\n Editor.prototype.isEndInAdjacentTable = function (paragraph, endParagraph) {\n var start = this.getHierarchicalIndex(paragraph, '');\n var end = this.getHierarchicalIndex(endParagraph, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n return selectionStart.length < selectionEnd.length;\n };\n Editor.prototype.cloneTableToHistoryInfo = function (table) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n //Clones the entire table to preserve in history.\n var clonedTable = table.clone();\n //Preserves the cloned table in history info, for future undo operation.\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(clonedTable);\n //Sets the insert position in history info as current table.\n if (this.viewer.selection.start.paragraph.isInsideTable &&\n this.viewer.selection.start.paragraph.associatedCell.ownerTable === table) {\n this.updateHistoryPosition(this.getHierarchicalIndex(table, '0'), true);\n }\n return clonedTable;\n }\n return undefined;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.insertParagraphPaste = function (paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing) && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n var nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n if (nextParagraph) {\n if (start.offset > 0 && nextParagraph === end.paragraph && paragraph === start.paragraph\n && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n //Combines the current paragraph with end paragraph specific for undo/redo paste action.\n var insertIndex = 0;\n this.removeBlock(currentParagraph);\n this.viewer.layout.clearListElementBox(nextParagraph);\n this.viewer.layout.clearListElementBox(currentParagraph);\n for (var i = 0; i < currentParagraph.childWidgets.length; i++) {\n var line = currentParagraph.childWidgets[i];\n nextParagraph.childWidgets.splice(insertIndex, 0, line);\n currentParagraph.childWidgets.splice(i, 1);\n i--;\n insertIndex++;\n line.paragraph = nextParagraph;\n }\n this.viewer.layout.reLayoutParagraph(nextParagraph, 0, 0);\n isCombineNextParagraph = false;\n var offset = this.selection.editPosition.substring(this.selection.editPosition.lastIndexOf(';') + 1);\n this.selection.editPosition = this.getHierarchicalIndex(nextParagraph, offset);\n }\n }\n }\n if (isCombineNextParagraph) {\n this.deleteParagraphMark(currentParagraph, this.selection, editAction);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.removeInlines = function (paragraph, startLine, startOffset, endLine, endOffset, editAction) {\n var isRemoved = false;\n this.viewer.layout.clearListElementBox(paragraph);\n var startIndex = paragraph.childWidgets.indexOf(startLine);\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var lineWidget = paragraph.childWidgets[i];\n if (startLine === lineWidget && endLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, endOffset);\n isRemoved = true;\n break;\n }\n if (endLine === lineWidget) {\n isRemoved = true;\n this.removeContent(lineWidget, 0, endOffset);\n }\n else if (startLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, this.viewer.selection.getLineLength(lineWidget));\n break;\n }\n else if (isRemoved) {\n this.removeContent(lineWidget, 0, this.viewer.selection.getLineLength(lineWidget));\n }\n }\n if (isRemoved) {\n this.removeEmptyLine(paragraph);\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeContent = function (lineWidget, startOffset, endOffset) {\n var count = this.selection.getLineLength(lineWidget);\n for (var i = lineWidget.children.length - 1; i >= 0; i--) {\n var inline = lineWidget.children[i];\n if (endOffset <= count - inline.length) {\n count -= inline.length;\n continue;\n }\n var endIndex = inline.length;\n if (count > endOffset && (count - endIndex < endOffset)) {\n endIndex = endOffset - (count - inline.length);\n }\n var startIndex = 0;\n if (count - inline.length < startOffset) {\n startIndex = startOffset - (count - inline.length);\n }\n if (count > endOffset) {\n count -= (inline.length - endIndex);\n }\n if (startIndex === 0 && endIndex === inline.length) {\n if (!(this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (inline instanceof BookmarkElementBox) {\n this.removedBookmarkElements.push(inline);\n }\n }\n // if (editAction < 4) {\n this.unLinkFieldCharacter(inline);\n this.addRemovedNodes(lineWidget.children[i]);\n lineWidget.children.splice(i, 1);\n // }\n }\n else if (inline instanceof TextElementBox) {\n // if (editAction < 4) {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(startIndex, endIndex - startIndex);\n this.addRemovedNodes(span);\n inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n }\n if (startOffset >= count - (endIndex - startIndex)) {\n break;\n }\n count -= (endIndex - startIndex);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeEmptyLine = function (paragraph) {\n if (paragraph.childWidgets.length > 1) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (lineWidget.children.length === 0 && paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(i, 1);\n i--;\n }\n }\n }\n };\n //#endregion\n /**\n * clone the list level\n * @param {WListLevel} source\n * @private\n */\n Editor.prototype.cloneListLevel = function (source) {\n var listLevel = new WListLevel(undefined);\n this.copyListLevel(listLevel, source);\n return listLevel;\n };\n /**\n * Copies the list level\n * @param {WListLevel} destination\n * @param {WListLevel} listLevel\n * @private\n */\n Editor.prototype.copyListLevel = function (destination, listLevel) {\n if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n destination.paragraphFormat = new WParagraphFormat(destination);\n destination.paragraphFormat.copyFormat(listLevel.paragraphFormat);\n }\n if (!isNullOrUndefined(listLevel.characterFormat)) {\n destination.characterFormat = new WCharacterFormat(destination);\n destination.characterFormat.copyFormat(listLevel.characterFormat);\n }\n if (!isNullOrUndefined(listLevel.followCharacter)) {\n destination.followCharacter = listLevel.followCharacter;\n }\n if (!isNullOrUndefined(listLevel.listLevelPattern)) {\n destination.listLevelPattern = listLevel.listLevelPattern;\n }\n if (!isNullOrUndefined(listLevel.numberFormat)) {\n destination.numberFormat = listLevel.numberFormat;\n }\n if (!isNullOrUndefined(listLevel.restartLevel)) {\n destination.restartLevel = listLevel.restartLevel;\n }\n if (!isNullOrUndefined(listLevel.startAt)) {\n destination.startAt = listLevel.startAt;\n }\n };\n /**\n * Clone level override\n * @param {WLevelOverride} source\n * @private\n */\n Editor.prototype.cloneLevelOverride = function (source) {\n var levelOverride = new WLevelOverride();\n if (!isNullOrUndefined(source.startAt)) {\n levelOverride.startAt = source.startAt;\n }\n if (!isNullOrUndefined(source.overrideListLevel)) {\n levelOverride.overrideListLevel = source.overrideListLevel;\n }\n if (!isNullOrUndefined(source.levelNumber)) {\n levelOverride.levelNumber = source.levelNumber;\n }\n return levelOverride;\n };\n /**\n * Update List Paragraph\n * @private\n */\n Editor.prototype.updateListParagraphs = function () {\n this.viewer.listParagraphs = [];\n for (var j = 0; j < this.viewer.pages.length; j++) {\n var bodyWidget = this.viewer.pages[j].bodyWidgets[0];\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n this.updateListParagraphsInBlock(bodyWidget.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateListParagraphsInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n if (!isNullOrUndefined(block.paragraphFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat.listId)) {\n if (isNullOrUndefined(this.viewer.listParagraphs)) {\n this.viewer.listParagraphs = [];\n }\n this.viewer.listParagraphs.push(block);\n }\n }\n else if (block instanceof TableWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n for (var j = 0; j < block.childWidgets[i].childWidgets.length; j++) {\n var cell = block.childWidgets[i].childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n this.updateListParagraphsInBlock(cell.childWidgets[k]);\n }\n }\n }\n }\n };\n /**\n * Applies list format\n * @param {WList} list\n * @private\n */\n Editor.prototype.onApplyList = function (list) {\n var selection = this.viewer.selection;\n this.setOffsetValue(this.viewer.selection);\n this.initHistory('ListFormat');\n var format = new WListFormat();\n if (!isNullOrUndefined(list)) {\n format.listId = list.listId;\n }\n this.viewer.owner.isShiftingEnabled = true;\n if (selection.isEmpty) {\n this.applyParaFormatProperty(selection.start.paragraph, 'listFormat', format, false);\n this.layoutItemBlock(selection.start.paragraph, false);\n }\n else {\n this.updateSelectionParagraphFormatting('listFormat', format, false);\n }\n this.reLayout(selection);\n };\n /**\n * Applies bullets or numbering list\n * @param {string} format\n * @param {ListLevelPattern} listLevelPattern\n * @param {string} fontFamily\n * @private\n */\n Editor.prototype.applyBulletOrNumbering = function (format, listLevelPattern, fontFamily) {\n var selection = this.viewer.selection;\n var list = selection.paragraphFormat.getList();\n var isUpdate = false;\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var currentParagraph = start.paragraph;\n if (isNullOrUndefined(list)) {\n while (!isNullOrUndefined(currentParagraph.previousWidget) && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.isEmpty() && currentParagraph.previousWidget.paragraphFormat.listFormat.listId === -1) {\n currentParagraph = currentParagraph.previousWidget;\n }\n if (currentParagraph.previousWidget && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.paragraphFormat.listFormat.listId !== -1) {\n currentParagraph = currentParagraph.previousWidget;\n list = this.viewer.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n isUpdate = true;\n }\n }\n var startListLevel = undefined;\n if (!isNullOrUndefined(list)) {\n var tempList = this.viewer.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n startListLevel = this.viewer.layout.getListLevel(tempList, currentParagraph.paragraphFormat.listFormat.listLevelNumber);\n }\n if (isNullOrUndefined(list) || (!isNullOrUndefined(list) && ((startListLevel.listLevelPattern !== listLevelPattern) ||\n startListLevel.numberFormat !== format || (startListLevel.characterFormat.fontFamily !== fontFamily\n && startListLevel.listLevelPattern === 'Bullet')))) {\n isUpdate = false;\n list = new WList();\n if (this.viewer.lists.length > 0) {\n list.listId = this.viewer.lists[this.viewer.lists.length - 1].listId + 1;\n }\n else {\n list.listId = 0;\n }\n var abstractList = new WAbstractList();\n if (this.viewer.abstractLists.length > 0) {\n abstractList.abstractListId = this.viewer.abstractLists[this.viewer.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n abstractList.abstractListId = 0;\n }\n list.abstractListId = abstractList.abstractListId;\n list.abstractList = abstractList;\n this.viewer.abstractLists.push(abstractList);\n if (format === 'bullet' || format === 'multiLevel' || format === 'numbering') {\n this.addListLevels(abstractList, format, selection);\n }\n else {\n var listLevel = new WListLevel(abstractList);\n listLevel.listLevelPattern = listLevelPattern;\n listLevel.numberFormat = format;\n if (listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n else {\n listLevel.characterFormat.fontFamily = fontFamily;\n }\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractList.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = 0;\n }\n selection.paragraphFormat.setList(list);\n }\n else if (!isNullOrUndefined(list) && isUpdate) {\n selection.paragraphFormat.setList(list);\n }\n else {\n selection.paragraphFormat.setList(undefined);\n }\n };\n Editor.prototype.addListLevels = function (abstractListAdv, listName, selection) {\n var bulletCharacters = ['\\uf076', '\\uf0d8', '\\uf0a7', '\\uf0b7', '\\uf0a8'];\n for (var i = abstractListAdv.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractListAdv);\n if (listName.match('bullet')) {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = bulletCharacters[i < 5 ? i % 5 : i % 5 + 1];\n listLevel.characterFormat.fontFamily = i < 3 || i === 5 ? 'Wingdings' : 'Symbol';\n }\n else {\n if (listName.match('multiLevel')) {\n for (var j = 0; j < i + 1; j++) {\n listLevel.numberFormat += '%' + (j + 1).toString() + '.';\n }\n listLevel.listLevelPattern = 'Number';\n }\n else {\n listLevel.numberFormat = '%' + (i + 1).toString() + ')';\n listLevel.listLevelPattern = i % 3 === 0 ? 'Number'\n : i % 3 === 1 ? 'LowLetter' : 'LowRoman';\n }\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n if (i === 0) {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36 * i;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractListAdv.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = i;\n }\n };\n /**\n * Insert page break at cursor position\n */\n Editor.prototype.insertPageBreak = function () {\n if (!this.owner.isReadOnlyMode) {\n if (this.viewer.selection.start.paragraph.isInsideTable ||\n this.viewer.selection.start.paragraph.isInHeaderFooter) {\n return;\n }\n this.initComplexHistory('PageBreak');\n this.onEnter(true);\n if (this.editorHistory && this.editorHistory.currentHistoryInfo != null) {\n this.editorHistory.updateComplexHistory();\n }\n this.selection.checkForCursorVisibility();\n }\n };\n /**\n * @private\n */\n Editor.prototype.onEnter = function (isInsertPageBreak) {\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n //ToDo: Need to handle the CTRL + Enter (Page Break) and SHIFT + Enter (Line Break) behavior.\n var hyperlinkField = selection.getHyperlinkField();\n var isSelectionOnHyperlink = !isNullOrUndefined(hyperlinkField);\n if (isSelectionOnHyperlink) {\n selection.fireRequestNavigate(hyperlinkField);\n return;\n }\n var paragraph = selection.start.paragraph;\n if (paragraph.isEmpty() && paragraph.paragraphFormat.listFormat.listId !== -1) {\n // tslint:disable-next-line:max-line-length\n this.onApplyListInternal(this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId), paragraph.paragraphFormat.listFormat.listLevelNumber - 1);\n return;\n }\n }\n this.initHistory('Enter');\n var isRemoved = true;\n if (!selection.isEmpty) {\n // this.initHistoryWithSelection(selection, 'Enter');\n isRemoved = this.removeSelectedContents(selection);\n }\n if (isRemoved) {\n selection.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n var blockInfo = this.getParagraphInfo(selection.start);\n var initialStart = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.splitParagraphInternal(selection, selection.start.paragraph, selection.start.currentWidget, selection.start.offset);\n this.setPositionForCurrentIndex(selection.start, initialStart);\n if (isInsertPageBreak) {\n var currentParagraph = selection.start.paragraph;\n var breakParagraph = new ParagraphWidget();\n breakParagraph.characterFormat.copyFormat(currentParagraph.characterFormat);\n breakParagraph.paragraphFormat.copyFormat(currentParagraph.paragraphFormat);\n var pageBreak = new TextElementBox();\n pageBreak.text = '\\f';\n var line = new LineWidget(breakParagraph);\n line.children.push(pageBreak);\n pageBreak.line = line;\n breakParagraph.childWidgets.push(line);\n this.insertParagraph(breakParagraph, true);\n selection.selectParagraph(breakParagraph, true);\n }\n var nextNode = selection.start.paragraph.nextWidget;\n if (isNullOrUndefined(nextNode)) {\n nextNode = selection.getNextRenderedBlock(selection.start.paragraph);\n }\n selection.selectParagraph(nextNode, true);\n this.updateEndPosition();\n if (isInsertPageBreak && this.editorHistory) {\n this.owner.editorHistory.updateHistory();\n }\n // if (!isNullOrUndefined(selection.currentHistoryInfo)) {\n // this.updateComplexHistory();\n // } else {\n this.reLayout(selection);\n // }\n var paragraph = selection.start.paragraph.previousWidget;\n if (!isNullOrUndefined(paragraph) && !paragraph.isEmpty() &&\n // tslint:disable-next-line:max-line-length\n paragraph.lastChild.children[paragraph.lastChild.children.length - 1] instanceof TextElementBox) {\n this.checkAndConvertToHyperlink(selection, true, paragraph);\n }\n }\n };\n Editor.prototype.splitParagraphInternal = function (selection, paragraphAdv, currentLine, offset) {\n var insertIndex = 0;\n var blockIndex = paragraphAdv.index;\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n //Copies the format to new paragraph.\n paragraph.paragraphFormat.ownerBase = paragraph;\n if (currentLine === paragraphAdv.lastChild && offset === selection.getLineLength(currentLine)) {\n // tslint:disable-next-line:max-line-length\n if (paragraphAdv.paragraphFormat.baseStyle\n && paragraphAdv.paragraphFormat.baseStyle.name !== 'Normal' && paragraphAdv.paragraphFormat.baseStyle.next instanceof WParagraphStyle) {\n if (paragraphAdv.paragraphFormat.baseStyle.name === paragraphAdv.paragraphFormat.baseStyle.next.name) {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n }\n else {\n paragraph.paragraphFormat.baseStyle = paragraphAdv.paragraphFormat.baseStyle.next;\n }\n this.selection.skipFormatRetrieval = false;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n }\n //ToDo in future: Need to skip copying formattings to new paragraph, if the style for following paragraph is same style.\n insertIndex++;\n blockIndex++;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n if (offset > 0 || !currentLine.isFirstLine()) {\n paragraphAdv = paragraphAdv.combineWidget(this.viewer);\n this.moveInlines(paragraphAdv, paragraph, 0, 0, paragraphAdv.firstChild, offset, currentLine);\n }\n paragraphAdv = paragraphAdv.getSplitWidgets()[0];\n }\n insertIndex += paragraphAdv.getIndex();\n var container = paragraphAdv.containerWidget;\n var childNodes = container.childWidgets;\n childNodes.splice(insertIndex, 0, paragraph);\n paragraph.containerWidget = container;\n paragraph.index = blockIndex;\n this.updateNextBlocksIndex(paragraph, true);\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(blockIndex, container, paragraph, false);\n };\n /**\n * @private\n */\n Editor.prototype.updateNextBlocksIndex = function (block, increaseIndex) {\n var nextIndex = block.containerWidget.childWidgets.indexOf(block) + 1;\n if (block.containerWidget instanceof BodyWidget) {\n var currentSectionIndex = block.containerWidget.index;\n for (var j = this.viewer.pages.indexOf(block.containerWidget.page); j < this.viewer.pages.length; j++) {\n var page = this.viewer.pages[j];\n if (page.bodyWidgets[0].index === currentSectionIndex) {\n for (var k = nextIndex; k < page.bodyWidgets[0].childWidgets.length; k++) {\n var childWidget = page.bodyWidgets[0].childWidgets[k];\n this.updateIndex(childWidget, increaseIndex);\n }\n nextIndex = 0;\n }\n else {\n return;\n }\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cells = block.containerWidget.getSplitWidgets();\n var currentCellIndex = cells.indexOf(block.containerWidget);\n for (var x = currentCellIndex; x < cells.length; x++) {\n var blocks = cells[x].childWidgets;\n for (var y = nextIndex; y < blocks.length; y++) {\n this.updateIndex(blocks[y], increaseIndex);\n }\n currentCellIndex = 0;\n nextIndex = 0;\n }\n }\n else if (block.containerWidget instanceof TableRowWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var cell = block.containerWidget.childWidgets[i];\n if (cell.rowIndex === block.containerWidget.index) {\n this.updateIndex(cell, increaseIndex);\n }\n }\n }\n else if (block.containerWidget instanceof TableWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var row = block.containerWidget.childWidgets[i];\n this.updateIndex(row, increaseIndex);\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].rowIndex = row.index;\n }\n }\n //update Row index of all the cell\n }\n else if (block.containerWidget instanceof HeaderFooterWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var nextBlock = block.containerWidget.childWidgets[i];\n this.updateIndex(nextBlock, increaseIndex);\n }\n }\n };\n Editor.prototype.updateIndex = function (widget, increment) {\n if (increment) {\n widget.index++;\n }\n else {\n widget.index--;\n }\n };\n Editor.prototype.updateEndPosition = function () {\n var selection = this.viewer.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, false);\n }\n };\n /**\n * @private\n */\n Editor.prototype.onBackSpace = function () {\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n this.singleBackspace(selection, false);\n }\n else {\n this.initHistory('BackSpace');\n var skipBackSpace = this.deleteSelectedContents(selection, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (skipBackSpace) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n else {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.reLayout(selection);\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.insertRemoveBookMarkElements = function () {\n var isHandledComplexHistory = false;\n for (var i = 0; i < this.removedBookmarkElements.length; i++) {\n var bookMark = this.removedBookmarkElements[i];\n if (bookMark.bookmarkType === 0) {\n var bookMarkStart = bookMark;\n if (bookMarkStart && bookMarkStart.reference && this.removedBookmarkElements.indexOf(bookMarkStart.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkStart.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkStart);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n }\n else {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n this.initInsertInline(bookMarkStart.clone());\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n else {\n var bookMarkEnd = bookMark;\n if (bookMarkEnd && bookMarkEnd.reference && this.removedBookmarkElements.indexOf(bookMarkEnd.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkEnd.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkEnd);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n }\n else {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n this.initInsertInline(bookMarkEnd.clone());\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n }\n this.removedBookmarkElements = [];\n return isHandledComplexHistory;\n };\n /**\n * @private\n */\n Editor.prototype.deleteSelectedContents = function (selection, isBackSpace) {\n var skipBackSpace = this.deleteSelectedContentInternal(selection, isBackSpace, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n var blockInfo = this.getParagraph({ index: selection.editPosition });\n var lineInfo = this.getLineInfo(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n selection.selectContent(textPosition, true);\n return skipBackSpace;\n };\n /**\n * @private\n */\n Editor.prototype.singleBackspace = function (selection, isRedoing) {\n var history = this.editorHistory;\n // If backspace is pressed after auto format to hyperlink is done, need to undo auto format.\n if (history && !isRedoing && !history.canRedo() && history.canUndo()) {\n var historyInfo = history.undoStack[history.undoStack.length - 1];\n var startBlockInfo = this.getParagraphInfo(selection.start);\n var endBlockInfo = this.getParagraphInfo(selection.end);\n // tslint:disable-next-line:max-line-length\n if (historyInfo.action === 'AutoFormatHyperlink' && historyInfo.insertPosition === this.getHierarchicalIndex(startBlockInfo.paragraph, startBlockInfo.offset.toString()) &&\n historyInfo.endPosition === this.getHierarchicalIndex(endBlockInfo.paragraph, endBlockInfo.offset.toString())) {\n history.undo();\n return;\n }\n }\n var paragraph = selection.start.paragraph;\n var currentLineWidget = selection.start.currentWidget;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = currentLineWidget.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n var previousInline = inline;\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n var begin = inline.fieldBegin;\n var end = inline.fieldEnd;\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n selection.fireSelectionChanged(true);\n return;\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n var prevInline = selection.getPreviousValidElement(inline);\n if (prevInline instanceof FieldElementBox) {\n inline = prevInline.fieldBegin;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n selection.end.setPositionParagraph(inline.line, offset); //Selects the entire field.\n selection.fireSelectionChanged(true);\n return;\n }\n else if (prevInline !== inline) {\n inline = prevInline; //Updates the offset to delete next content.\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n }\n if (inline && (inline instanceof BookmarkElementBox && inline.bookmarkType === 1\n || inline.previousNode instanceof BookmarkElementBox)) {\n if (inline instanceof BookmarkElementBox) {\n inline = inline.previousNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox && inline.previousNode instanceof BookmarkElementBox) {\n var begin = inline.previousNode;\n var end = inline.nextNode;\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.initHistory('BackSpace');\n this.deleteSelectedContents(selection, true);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.reLayout(selection);\n return;\n }\n }\n if (!isRedoing) {\n this.initHistory('BackSpace');\n }\n if (offset === selection.getStartOffset(paragraph) && selection.start.currentWidget.isFirstLine()) {\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n return;\n }\n if (paragraph.paragraphFormat.firstLineIndent !== 0) {\n this.onApplyParagraphFormat('firstLineIndent', 0, false, false);\n return;\n }\n if (paragraph.paragraphFormat.leftIndent !== 0) {\n this.onApplyParagraphFormat('leftIndent', 0, false, false);\n return;\n }\n if (paragraph.paragraphFormat.textAlignment !== 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n return;\n }\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n selection.owner.isShiftingEnabled = true;\n var previousParagraph = paragraph.previousRenderedWidget;\n // if (isNullOrUndefined(previousParagraph)) {\n // previousParagraph = this.viewer.selection.getPreviousBlock(paragraph) as ParagraphWidget;\n // }\n if (previousParagraph.isEmpty()) {\n this.removeBlock(previousParagraph);\n this.addRemovedNodes(previousParagraph);\n }\n else {\n this.removeBlock(paragraph);\n var endOffset = this.viewer.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n var lineWidget = void 0;\n if (!paragraph.isEmpty()) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n lineWidget = paragraph.childWidgets[i];\n previousParagraph.childWidgets.push(lineWidget);\n paragraph.childWidgets.splice(i, 1);\n i--;\n lineWidget.paragraph = previousParagraph;\n }\n }\n this.viewer.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n this.setPositionForHistory();\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n }\n var paragraphInfo = this.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = offset - 1;\n if (removeOffset < 0) {\n lineWidget = lineWidget.previousLine;\n removeOffset = this.viewer.selection.getLineLength(lineWidget) + removeOffset;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset - 1, false);\n this.setPositionForHistory();\n if (!isRedoing) {\n this.reLayout(selection);\n }\n else {\n this.fireContentChange();\n }\n }\n };\n Editor.prototype.setPositionForHistory = function (editPosition) {\n var selection = this.viewer.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (isNullOrUndefined(editPosition)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = editPosition;\n this.editorHistory.currentBaseHistoryInfo.endPosition = editPosition;\n }\n }\n };\n Editor.prototype.removeAtOffset = function (lineWidget, selection, offset) {\n var count = 0;\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset < count + inline.length) {\n var indexInInline = offset - count;\n if (offset === count && inline.length === 1) {\n this.unLinkFieldCharacter(inline);\n lineWidget.children.splice(i, 1);\n this.viewer.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i);\n this.addRemovedNodes(inline);\n }\n else {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(indexInInline, 1);\n inline.text = HelperMethods.remove(inline.text, indexInInline, 1);\n this.viewer.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i);\n this.addRemovedNodes(span);\n }\n break;\n }\n count += inline.length;\n }\n };\n /**\n * @private\n */\n Editor.prototype.onDelete = function () {\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n this.singleDelete(selection, false);\n }\n else {\n // this.initComplexHistory('MultiSelection');\n // for (let i: number = 0; i < selection.selectionRanges.length; i++) {\n // let selectionRange: SelectionRange = selection.selectionRanges.getRange(i);\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n // if (this.viewer.owner.enableEditorHistory) {\n this.reLayout(selection);\n // }\n // this.updateSelectionRangeOffSet(selection.start, selection.end);\n // }\n // let textPosition: TextPosition = new TextPosition(selection.owner, this.viewer);\n // this.setPositionForCurrentIndex(textPosition,selection.editPosition);\n // selection.selectContent(textPosition, true);\n // if (!isNullOrUndefined(selection.currentHistoryInfo)) {\n // this.updateComplexHistory();\n // } else {\n // this.updateComplexWithoutHistory();\n // }\n }\n };\n /**\n * Remove single character on right of cursor position\n * @param {Selection} selection\n * @param {boolean} isRedoing\n * @private\n */\n Editor.prototype.singleDelete = function (selection, isRedoing) {\n // tslint:disable-next-line:max-line-length\n var paragraph = selection.start.paragraph;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = paragraph.getInline(selection.start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1 &&\n this.viewer.isListTextSelected && selection.contextType === 'List') {\n this.onApplyList(undefined);\n return;\n }\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n indexInInline = 0;\n }\n if (!isNullOrUndefined(inline)) {\n var nextRenderedInline = undefined;\n var nextInline = selection.getNextValidElement(inline);\n if (nextInline instanceof ElementBox) {\n nextRenderedInline = nextInline;\n }\n if (!isNullOrUndefined(nextRenderedInline) && nextRenderedInline instanceof FieldElementBox\n && nextRenderedInline.fieldType === 0) {\n inline = nextRenderedInline.fieldEnd;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 1);\n selection.end.setPositionParagraph(inline.line, offset);\n selection.fireSelectionChanged(true);\n return;\n }\n else if (inline !== nextRenderedInline) {\n inline = nextRenderedInline;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n offset++;\n }\n }\n }\n if (inline && (inline instanceof BookmarkElementBox && inline.bookmarkType === 0\n || inline.nextNode instanceof BookmarkElementBox)) {\n if (inline instanceof BookmarkElementBox) {\n inline = inline.nextNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox\n && inline.previousNode instanceof BookmarkElementBox) {\n var bookMarkBegin = inline.previousNode;\n var bookMarkEnd = inline.nextNode;\n selection.start.setPositionParagraph(bookMarkBegin.line, bookMarkBegin.line.getOffset(bookMarkBegin, 0));\n selection.end.setPositionParagraph(bookMarkEnd.line, bookMarkEnd.line.getOffset(bookMarkEnd, 0) + 1);\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n return;\n }\n }\n if (selection.start.currentWidget.isLastLine() && offset === this.viewer.selection.getLineLength(selection.start.currentWidget)) {\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget)) {\n return;\n }\n var previousParagraph = undefined;\n var newParagraph = undefined;\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (offset > 0) {\n return;\n }\n else {\n if (paragraph.previousWidget instanceof ParagraphWidget) {\n previousParagraph = paragraph.previousWidget;\n }\n if (paragraph.previousWidget instanceof TableWidget) {\n return;\n }\n if (isNullOrUndefined(previousParagraph)) {\n return;\n //Adds an empty paragraph, to ensure minimal content.\n }\n }\n }\n if (!isRedoing) {\n this.initHistory('Delete');\n }\n var blockInfo = this.getParagraphInfo(selection.start);\n selection.editPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.checkInsertPosition(selection)) {\n this.setPositionForHistory(selection.editPosition);\n }\n selection.owner.isShiftingEnabled = true;\n if (paragraph.isEmpty()) {\n this.removeBlock(paragraph);\n this.addRemovedNodes(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (isNullOrUndefined(previousParagraph)) {\n // selection.selectParagraph(newParagraph, true, true);\n var paraEndOffset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, true);\n //tslint:disable-next-line:max-line-length\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.getHierarchicalIndex(newParagraph, paraEndOffset.toString());\n }\n }\n else {\n selection.selectParagraph(previousParagraph, false);\n this.setPositionForHistory();\n }\n }\n else {\n selection.selectParagraph(nextParagraph, true);\n }\n }\n else {\n paragraph = paragraph.combineWidget(this.viewer);\n // tslint:disable-next-line:max-line-length\n var currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, selection.start.currentWidget, selection.start.offset, true);\n this.deleteParagraphMark(currentParagraph, selection, 0);\n this.addRemovedNodes(paragraph);\n this.setPositionForCurrentIndex(selection.start, selection.editPosition);\n selection.selectContent(selection.start, true);\n }\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n this.singleDeleteInternal(selection, isRedoing, paragraph);\n }\n };\n Editor.prototype.singleDeleteInternal = function (selection, isRedoing, paragraph) {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n this.initHistory('Delete');\n }\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n var paragraphInfo = this.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = selection.start.offset;\n var lineLength = selection.getLineLength(selection.start.currentWidget);\n if (removeOffset >= lineLength) {\n lineWidget = lineWidget.nextLine;\n removeOffset = removeOffset - lineLength;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset, false);\n if (!isRedoing) {\n this.reLayout(selection);\n }\n else {\n this.fireContentChange();\n }\n };\n Editor.prototype.deleteParagraphMark = function (paragraph, selection, editAction) {\n if (isNullOrUndefined(paragraph.containerWidget)) {\n return;\n }\n paragraph = paragraph.combineWidget(this.viewer);\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget) || isNullOrUndefined(nextParagraph)) {\n return;\n }\n //BodyWidget\n var section = paragraph.containerWidget instanceof BodyWidget ? paragraph.containerWidget : undefined;\n var table = undefined;\n if (selection.getNextRenderedBlock(paragraph) instanceof TableWidget) {\n table = selection.getNextRenderedBlock(paragraph);\n }\n else {\n table = undefined;\n }\n if (nextParagraph.isInsideTable && !isNullOrUndefined(table) && table.contains(nextParagraph.associatedCell)) {\n if (editAction < 4) {\n // let nextSection: BodyWidget = table.containerWidget instanceof BodyWidget ? table.containerWidget : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // }\n var offset = 0;\n this.removeBlock(paragraph);\n this.viewer.layout.clearListElementBox(nextParagraph);\n this.viewer.layout.clearListElementBox(paragraph);\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var line = paragraph.childWidgets[i];\n for (var j = line.children.length - 1; j >= 0; j--) {\n var element = line.children[j];\n offset += element.length;\n nextParagraph.firstChild.children.unshift(element);\n element.line = nextParagraph.firstChild;\n // this.layoutInlineCollection(false, 0, nextParagraph.inlines, inline);\n }\n }\n this.viewer.layout.reLayoutParagraph(nextParagraph, 0, 0);\n if (offset > 0) {\n selection.editPosition = this.getHierarchicalIndex(nextParagraph, offset.toString());\n }\n }\n }\n else {\n if (editAction < 4) {\n // let nextSection: WSection = nextParagraph.section instanceof WSection ? nextParagraph.section as WSection : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // }\n var prevLength = paragraph.childWidgets.length - 1;\n var nextPara = nextParagraph.getSplitWidgets();\n nextParagraph = nextParagraph.combineWidget(this.viewer);\n this.viewer.layout.clearListElementBox(nextParagraph);\n this.viewer.layout.clearListElementBox(paragraph);\n this.updateEditPositionOnMerge(paragraph, nextParagraph);\n for (var i = 0; i < nextParagraph.childWidgets.length; i++) {\n var inline = nextParagraph.childWidgets[i];\n nextParagraph.childWidgets.splice(i, 1);\n paragraph.childWidgets.push(inline);\n inline.paragraph = paragraph;\n i--;\n }\n if (nextParagraph.childWidgets.length === 0) {\n nextParagraph.childWidgets.push(new LineWidget(nextParagraph));\n }\n this.removeBlock(nextParagraph);\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n this.addRemovedNodes(nextParagraph);\n }\n }\n };\n Editor.prototype.updateEditPositionOnMerge = function (currentParagraph, nextParagraph) {\n if (this.viewer.selection.editPosition === this.getHierarchicalIndex(nextParagraph, '0') &&\n nextParagraph.nextRenderedWidget === undefined) {\n // tslint:disable-next-line:max-line-length\n this.viewer.selection.editPosition = this.getHierarchicalIndex(currentParagraph, this.viewer.selection.getLineLength(currentParagraph.lastChild).toString());\n }\n };\n Editor.prototype.checkEndPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.endPosition));\n };\n Editor.prototype.checkInsertPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition));\n };\n Editor.prototype.checkIsNotRedoing = function () {\n return this.viewer.owner.enableHistoryMode && !this.editorHistory.isRedoing;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteSelectedContentInternal = function (selection, isBackSpace, startPosition, endPosition) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n var blockInfo = this.getParagraphInfo(startPos);\n selection.editPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var skipBackSpace = false;\n if (isBackSpace && startPos.isInSameParagraph(endPos)) {\n //Handled specifically to skip removal of contents, if selection is only paragraph mark and next rendered block is table.\n if (startPos.offset < endPos.offset && startPos.offset === selection.getParagraphLength(endPos.paragraph)) {\n var nextBlock = selection.getNextRenderedBlock(startPos.paragraph);\n skipBackSpace = nextBlock instanceof TableWidget;\n }\n //Handled specifically to remove paragraph completely (Delete behavior), if the selected paragraph is empty.\n if (endPos.offset === 1 && endPos.offset > selection.getParagraphLength(endPos.paragraph)\n && !(endPos.paragraph.isInsideTable && isNullOrUndefined(endPos.paragraph.nextWidget))) {\n isBackSpace = false;\n }\n }\n if (!skipBackSpace) {\n selection.owner.isShiftingEnabled = true;\n if (this.checkInsertPosition(selection)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n }\n var editAction = (isBackSpace ? 1 : 0);\n this.deleteSelectedContent(endPos.paragraph, selection, startPos, endPos, editAction);\n }\n return skipBackSpace;\n };\n /**\n * Init EditorHistory\n * @private\n */\n Editor.prototype.initHistory = function (action) {\n if (this.viewer.owner.enableHistoryMode) {\n this.editorHistory.initializeHistory(action);\n }\n };\n /**\n * Init Complex EditorHistory\n * @private\n */\n Editor.prototype.initComplexHistory = function (action) {\n if (this.viewer.owner.enableHistoryMode) {\n this.editorHistory.initComplexHistory(this.viewer.selection, action);\n }\n };\n //Insert Picture implementation starts\n /**\n * Insert image\n * @param {string} base64String\n * @param {number} width\n * @param {number} height\n * @private\n */\n Editor.prototype.insertPicture = function (base64String, width, height) {\n var imageElementBox = new ImageElementBox(true);\n imageElementBox.imageString = base64String;\n imageElementBox.width = width;\n imageElementBox.height = height;\n this.insertPictureInternal(imageElementBox);\n };\n Editor.prototype.insertPictureInternal = function (imageElementBox) {\n var selection = this.viewer.selection;\n this.initHistory('InsertInline');\n this.fitImageToPage(selection, imageElementBox);\n this.insertInlineInSelection(selection, imageElementBox);\n this.reLayout(selection);\n };\n Editor.prototype.fitImageToPage = function (selection, imageElementBox) {\n var section = selection.start.paragraph.bodyWidget;\n var pageWidth = section.sectionFormat.pageWidth - section.sectionFormat.leftMargin - section.sectionFormat.rightMargin;\n var pageHeight = section.sectionFormat.pageHeight - section.sectionFormat.topMargin - section.sectionFormat.topMargin;\n //Resizes image to page size.\n if (imageElementBox.width > pageWidth) {\n imageElementBox.height = imageElementBox.height * pageWidth / imageElementBox.width;\n imageElementBox.width = pageWidth;\n }\n if (imageElementBox.height > pageHeight) {\n imageElementBox.width = imageElementBox.width * pageHeight / imageElementBox.height;\n imageElementBox.height = pageHeight;\n }\n };\n //Insert Picture implementation ends\n /**\n * @private\n */\n Editor.prototype.insertInlineInSelection = function (selection, elementBox) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n this.updateInsertPosition();\n this.insertInlineInternal(elementBox);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.onPortrait = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.viewer.selection.sectionFormat.pageWidth;\n var height = this.viewer.selection.sectionFormat.pageHeight;\n if (width > height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @private\n */\n Editor.prototype.onLandscape = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.viewer.selection.sectionFormat.pageWidth;\n var height = this.viewer.selection.sectionFormat.pageHeight;\n if (width < height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n Editor.prototype.copyValues = function () {\n var format = new WSectionFormat();\n format.bottomMargin = this.viewer.selection.sectionFormat.bottomMargin;\n format.topMargin = this.viewer.selection.sectionFormat.topMargin;\n format.leftMargin = this.viewer.selection.sectionFormat.leftMargin;\n format.rightMargin = this.viewer.selection.sectionFormat.rightMargin;\n format.pageHeight = this.viewer.selection.sectionFormat.pageHeight;\n format.pageWidth = this.viewer.selection.sectionFormat.pageWidth;\n format.footerDistance = this.viewer.selection.sectionFormat.footerDistance;\n format.headerDistance = this.viewer.selection.sectionFormat.headerDistance;\n return format;\n };\n /**\n * @private\n */\n Editor.prototype.changeMarginValue = function (property) {\n var sectionFormat = this.copyValues();\n if (property === 'lastCustomSetting' || property === 'normal') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 72;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'narrow') {\n sectionFormat.topMargin = 36;\n sectionFormat.bottomMargin = 36;\n sectionFormat.leftMargin = 36;\n sectionFormat.rightMargin = 36;\n }\n else if (property === 'moderate') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 54;\n sectionFormat.rightMargin = 54;\n }\n else if (property === 'wide') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 144;\n sectionFormat.rightMargin = 144;\n }\n else if (property === 'mirrored') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'office2003Default') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 90;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @private\n */\n Editor.prototype.onPaperSize = function (property) {\n var sectionFormat = this.copyValues();\n var width = this.viewer.selection.sectionFormat.pageWidth;\n var height = this.viewer.selection.sectionFormat.pageHeight;\n if (property === 'letter') {\n if (width < height) {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 791.9;\n }\n else {\n sectionFormat.pageWidth = 791.9;\n sectionFormat.pageHeight = 611.9;\n }\n }\n else if (property === 'tabloid') {\n if (width < height) {\n sectionFormat.pageWidth = 791.9;\n sectionFormat.pageHeight = 1223.9;\n }\n else {\n sectionFormat.pageWidth = 1223.9;\n sectionFormat.pageHeight = 791.9;\n }\n }\n else if (property === 'legal') {\n if (width < height) {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 1007.9;\n }\n else {\n sectionFormat.pageWidth = 1007.9;\n sectionFormat.pageHeight = 611.9;\n }\n }\n else if (property === 'statement') {\n if (width < height) {\n sectionFormat.pageWidth = 396;\n sectionFormat.pageHeight = 611.9;\n }\n else {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 396;\n }\n }\n else if (property === 'executive') {\n if (width < height) {\n sectionFormat.pageWidth = 521.9;\n sectionFormat.pageHeight = 755.9;\n }\n else {\n sectionFormat.pageWidth = 755.9;\n sectionFormat.pageHeight = 521.9;\n }\n }\n else if (property === 'a3') {\n if (width < height) {\n sectionFormat.pageWidth = 841.8;\n sectionFormat.pageHeight = 1190.4;\n }\n else {\n sectionFormat.pageWidth = 1190.4;\n sectionFormat.pageHeight = 841.8;\n }\n }\n else if (property === 'a4') {\n if (width < height) {\n sectionFormat.pageWidth = 595.2;\n sectionFormat.pageHeight = 841.8;\n }\n else {\n sectionFormat.pageWidth = 841.8;\n sectionFormat.pageHeight = 595.2;\n }\n }\n else if (property === 'a5') {\n if (width < height) {\n sectionFormat.pageWidth = 419.5;\n sectionFormat.pageHeight = 595.2;\n }\n else {\n sectionFormat.pageWidth = 595.2;\n sectionFormat.pageHeight = 419.5;\n }\n }\n else if (property === 'b4') {\n if (width < height) {\n sectionFormat.pageWidth = 728.4;\n sectionFormat.pageHeight = 1031.7;\n }\n else {\n sectionFormat.pageWidth = 1031.7;\n sectionFormat.pageHeight = 728.4;\n }\n }\n else if (property === 'b5') {\n if (width < height) {\n sectionFormat.pageWidth = 515.8;\n sectionFormat.pageHeight = 728.4;\n }\n else {\n sectionFormat.pageWidth = 728.4;\n sectionFormat.pageHeight = 515.8;\n }\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n //Update List Items\n /**\n * @private\n */\n Editor.prototype.updateListItemsTillEnd = function (blockAdv, updateNextBlockList) {\n var block = updateNextBlockList ? this.viewer.selection.getNextRenderedBlock(blockAdv) : blockAdv;\n while (!isNullOrUndefined(block)) {\n //Updates the list value of the rendered paragraph. \n this.updateRenderedListItems(block);\n block = block.getSplitWidgets().pop().nextRenderedWidget;\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateWholeListItems = function (block) {\n this.viewer.renderedLists.clear();\n var sectionIndex = block.bodyWidget.index;\n var currentBlock;\n for (var j = 0; j < this.viewer.pages.length; j++) {\n var page = this.viewer.pages[j];\n if (page.bodyWidgets[0].index === sectionIndex) {\n currentBlock = page.bodyWidgets[0].firstChild;\n break;\n }\n }\n var isListUpdated = false;\n do {\n isListUpdated = this.updateListItems(currentBlock, block);\n if (isListUpdated) {\n break;\n }\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n Editor.prototype.updateListItems = function (blockAdv, block) {\n var isListUpdated = false;\n if (blockAdv instanceof ParagraphWidget) {\n isListUpdated = this.updateListItemsForPara(blockAdv, block);\n }\n else {\n isListUpdated = this.updateListItemsForTable(blockAdv, block);\n }\n return isListUpdated;\n };\n Editor.prototype.updateListItemsForTable = function (table, block) {\n if (block instanceof TableWidget && table.equals(block)) {\n return true;\n }\n var row = table.firstChild;\n do {\n var isListUpdated = this.updateListItemsForRow(row, block);\n if (isListUpdated) {\n return true;\n }\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n return false;\n };\n Editor.prototype.updateListItemsForRow = function (row, block) {\n if (block.isInsideTable && row.childWidgets.indexOf(this.viewer.selection.getContainerCell(block.associatedCell)) !== -1) {\n //Returns as list updated, inorder to start list numbering from first list paragraph of this row.\n return true;\n }\n var cell = row.firstChild;\n do {\n this.updateListItemsForCell(cell, block);\n cell = cell.nextRenderedWidget;\n } while (cell);\n return false;\n };\n Editor.prototype.updateListItemsForCell = function (cell, block) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateListItems(currentBlock, block);\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n // public abstract updateListParagraphs(): void;\n /**\n * @private\n */\n Editor.prototype.updateRenderedListItems = function (block) {\n if (block instanceof ParagraphWidget) {\n this.updateRenderedListItemsForPara(block);\n }\n else {\n this.updateRenderedListItemsForTable(block);\n }\n };\n Editor.prototype.updateRenderedListItemsForTable = function (table) {\n var row = table.firstChild;\n do {\n this.updateRenderedListItemsForRow(row);\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n };\n Editor.prototype.updateRenderedListItemsForRow = function (row) {\n var cell = row.firstChild;\n do {\n this.updateRenderedListItemsForCell(cell);\n cell = cell.nextRenderedWidget;\n } while (cell);\n };\n Editor.prototype.updateRenderedListItemsForCell = function (cell) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateRenderedListItems(currentBlock);\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n Editor.prototype.updateListItemsForPara = function (paragraph, block) {\n if (paragraph.equals(block)) {\n return true;\n }\n else {\n var currentList = undefined;\n var listLevelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId))\n // tslint:disable-next-line:max-line-length\n && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels[listLevelNumber])) {\n var currentListLevel = this.viewer.layout.getListLevel(currentList, listLevelNumber);\n //Updates the list numbering from document start for reLayouting.\n if (currentListLevel.listLevelPattern !== 'Bullet') {\n this.viewer.layout.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n }\n }\n return false;\n };\n Editor.prototype.updateRenderedListItemsForPara = function (paragraph) {\n if (!isNullOrUndefined(this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId))) {\n var currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n var listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId))\n // tslint:disable-next-line:max-line-length\n && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels[paragraph.paragraphFormat.listFormat.listLevelNumber])) {\n var currentListLevel = this.viewer.layout.getListLevel(currentList, listLevelNumber);\n //Updates the list numbering from document start for reLayouting.\n if (currentListLevel.listLevelPattern !== 'Bullet') {\n var element = undefined;\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n if (lineWidget.children.length > 0) {\n element = lineWidget.children[0];\n }\n }\n if (!isNullOrUndefined(element)) {\n element.text = this.viewer.layout.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n }\n }\n }\n };\n /**\n * Get logical offset of paragraph.\n * @private\n */\n Editor.prototype.getParagraphInfo = function (position) {\n return this.getParagraphInfoInternal(position.currentWidget, position.offset);\n };\n /**\n * @private\n */\n Editor.prototype.getParagraphInfoInternal = function (line, lineOffset) {\n var paragraph = line.paragraph;\n var offset = this.selection.getParagraphLength(paragraph, line) + lineOffset;\n var previous = paragraph.previousSplitWidget;\n while (previous instanceof ParagraphWidget) {\n paragraph = previous;\n offset += this.viewer.selection.getParagraphLength(paragraph);\n previous = paragraph.previousSplitWidget;\n }\n return { 'paragraph': paragraph, 'offset': offset };\n };\n /**\n * Get offset value to update in selection\n * @private\n */\n Editor.prototype.getOffsetValue = function (selection) {\n if (this.startParagraph) {\n var lineInfo = this.getLineInfo(this.startParagraph, this.startOffset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n if (this.endParagraph) {\n var lineInfo = this.getLineInfo(this.endParagraph, this.endOffset);\n selection.end.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.end.updatePhysicalPosition(true);\n }\n };\n /**\n * Get offset value to update in selection\n * @private\n */\n Editor.prototype.getLineInfo = function (paragraph, offset) {\n var position = undefined;\n var element = undefined;\n var length = this.selection.getParagraphLength(paragraph);\n var next = paragraph.nextSplitWidget;\n if (offset > length + 1 && isNullOrUndefined(next)) {\n offset = length;\n }\n while (offset > length && next instanceof ParagraphWidget) {\n offset -= length;\n paragraph = next;\n length = this.selection.getParagraphLength(paragraph);\n next = paragraph.nextSplitWidget;\n }\n return this.selection.getLineInfo(paragraph, offset);\n };\n /**\n * @private\n */\n Editor.prototype.setPositionParagraph = function (paragraph, offset, skipSelectionChange) {\n var selection = this.viewer.selection;\n var lineInfo = this.getLineInfo(paragraph, offset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n selection.end.setPositionInternal(selection.start);\n if (!skipSelectionChange) {\n selection.fireSelectionChanged(true);\n }\n };\n /**\n * @private\n */\n Editor.prototype.setPositionForCurrentIndex = function (textPosition, editPosition) {\n var blockInfo = this.getParagraph({ index: editPosition });\n var lineInfo = this.getLineInfo(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n };\n /**\n * @private\n */\n Editor.prototype.insertPageNumber = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\\\*' + numberFormat;\n }\n var fieldCode = 'PAGE ' + numberFormat + ' \\\\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n /**\n * @private\n */\n Editor.prototype.insertPageCount = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\*' + numberFormat;\n }\n var fieldCode = 'NUMPAGES ' + numberFormat + ' \\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n Editor.prototype.createFields = function (fieldCode) {\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n line.children.push(fieldBegin);\n var fieldtext = new FieldTextElementBox();\n fieldtext.fieldBegin = fieldBegin;\n fieldtext.text = '1';\n var text = new TextElementBox();\n text.text = fieldCode;\n line.children.push(text);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n line.children.push(fieldtext);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldSeparator.fieldEnd = fieldEnd;\n fieldBegin.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n var widgets = [];\n widgets.push(paragraph);\n this.viewer.fields.push(fieldBegin);\n this.pasteContentsInternal(widgets);\n };\n /**\n * @private\n */\n Editor.prototype.insertBookmark = function (name) {\n var bookmark = new BookmarkElementBox(0);\n bookmark.name = name;\n var bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.name = name;\n bookmark.reference = bookmarkEnd;\n bookmarkEnd.reference = bookmark;\n this.viewer.bookmarks.add(name, bookmark);\n this.initComplexHistory('InsertBookmark');\n this.insertElements([bookmarkEnd], [bookmark]);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n this.selection.start.setPositionForSelection(bookmark.line, bookmark, 1, this.selection.start.location);\n this.selection.end.setPositionForSelection(bookmarkEnd.line, bookmarkEnd, 0, this.selection.end.location);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.deleteBookmark = function (bookmarkName) {\n var bookmarks = this.viewer.bookmarks;\n var bookmark = bookmarks.get(bookmarkName);\n if (bookmark instanceof BookmarkElementBox) {\n var bookmarkEnd = bookmark.reference;\n this.initHistory('DeleteBookmark');\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.setBookmarkInfo(bookmark);\n this.editorHistory.updateHistory();\n }\n this.deleteBookmarkInternal(bookmark);\n }\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.deleteBookmarkInternal = function (bookmark) {\n this.viewer.bookmarks.remove(bookmark.name);\n bookmark.line.children.splice(bookmark.indexInOwner, 1);\n bookmark.reference.line.children.splice(bookmark.reference.indexInOwner, 1);\n };\n /**\n * @private\n */\n Editor.prototype.getSelectionInfo = function () {\n var start = this.selection.start;\n var end = this.selection.end;\n var isEmpty = this.selection.isEmpty;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n var startElementInfo = start.currentWidget.getInline(start.offset, 0);\n var endElementInfo = end.currentWidget.getInline(end.offset, 0);\n // tslint:disable-next-line:max-line-length\n return { 'start': start.clone(), 'end': end.clone(), 'startElementInfo': startElementInfo, 'endElementInfo': endElementInfo, 'isEmpty': isEmpty };\n };\n /**\n * @private\n */\n Editor.prototype.insertElements = function (endElements, startElements) {\n var info = this.getSelectionInfo();\n if (!isNullOrUndefined(startElements)) {\n this.insertElementsInternal(info.start, startElements);\n }\n if (!isNullOrUndefined(endElements)) {\n this.insertElementsInternal(info.end, endElements);\n }\n };\n /**\n * @private\n */\n Editor.prototype.insertElementsInternal = function (position, elements) {\n this.selection.selectPosition(position, position);\n this.initHistory('InsertElements');\n this.updateInsertPosition();\n var indexInInline = 0;\n var paragraphInfo = this.getParagraphInfo(this.selection.start);\n if (this.selection.start.paragraph.isEmpty()) {\n var paragraph = this.selection.start.paragraph;\n paragraph.childWidgets[0].children.push(elements[0]);\n elements[0].line = paragraph.childWidgets[0];\n elements[0].linkFieldCharacter(this.viewer);\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n position.setPositionForSelection(elements[0].line, elements[0], elements[0].length, this.selection.start.location);\n this.selection.selectPosition(position, position);\n }\n else {\n var inlineObj = this.selection.start.currentWidget.getInline(this.viewer.selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n var firstElement = elements[0];\n this.insertElementInternal(curInline, firstElement, indexInInline, true);\n var index = firstElement.indexInOwner;\n var lastElement = firstElement;\n for (var i = 1; i < elements.length; i++) {\n lastElement = elements[i];\n firstElement.line.children.splice(index + i, 0, lastElement);\n }\n position.setPositionForSelection(lastElement.line, lastElement, lastElement.length, this.selection.start.location);\n this.selection.selectPosition(position, position);\n }\n if (this.editorHistory) {\n if (this.checkEndPosition()) {\n this.updateHistoryPosition(this.selection.start, false);\n }\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @private\n */\n Editor.prototype.getHierarchicalIndex = function (block, offset) {\n var index;\n if (block) {\n if (block instanceof HeaderFooterWidget) {\n var hfString = block.headerFooterType.indexOf('Header') !== -1 ? 'H' : 'F';\n var pageIndex = block.page.index.toString();\n var headerFooterIndex = this.viewer.getHeaderFooter(block.headerFooterType).toString();\n var sectionIndex = block.page.sectionIndex;\n index = sectionIndex + ';' + hfString + ';' + pageIndex + ';' + offset;\n }\n else {\n index = block.index + ';' + offset;\n }\n if (block.containerWidget) {\n if (block instanceof TableCellWidget && block.rowIndex !== block.containerWidget.index) {\n index = block.rowIndex + ';' + index;\n block = block.containerWidget;\n }\n return this.getHierarchicalIndex(block.containerWidget, index);\n }\n }\n return index;\n };\n /**\n * @private\n */\n Editor.prototype.getBlock = function (position) {\n var bodyWidget = this.getBodyWidget(position);\n return this.getBlockInternal(bodyWidget, position);\n };\n /**\n * Return Block relative to position\n * @private\n */\n Editor.prototype.getBlockInternal = function (widget, position) {\n if (position.index === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof WSection && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headerFooters, position);\n // tslint:disable-next-line:max-line-length\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n var childWidget = this.getBlockByIndex(widget, index);\n if (childWidget) {\n var child = childWidget;\n if (position.index.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') >= 0) {\n position.index = '0';\n }\n return { 'node': child, 'position': position };\n }\n if (child instanceof Widget) {\n var blockObj = this.getBlockInternal(child, position);\n // tslint:disable-next-line:max-line-length\n return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n }\n }\n else {\n return { 'node': child, 'position': position };\n }\n }\n else {\n return { 'node': node, 'position': position };\n }\n return { 'node': node, 'position': position };\n };\n /**\n * @private\n */\n Editor.prototype.getParagraph = function (position) {\n var paragraph = this.getParagraphInternal(this.getBodyWidget(position), position);\n return { paragraph: paragraph, offset: parseInt(position.index, 10) };\n };\n /**\n * Get paragraph relative to position\n * @private\n */\n Editor.prototype.getParagraphInternal = function (container, position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n // let ins: Widget = container;\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n // if (container instanceof BodyWidget && value === 'HF') {\n // return this.getParagraph(container.headerFooters, position);\n // }\n index = parseInt(value, 10);\n if (container instanceof TableRowWidget && index >= container.childWidgets.length) {\n position.index = '0;0';\n index = container.childWidgets.length - 1;\n }\n var childWidget = this.getBlockByIndex(container, index);\n if (childWidget) {\n var child = childWidget;\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getParagraphInternal(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.viewer.selection.getFirstParagraphInFirstCell(child);\n }\n return undefined;\n }\n }\n }\n else if (container) {\n var nextWidget = container.getSplitWidgets().pop().nextRenderedWidget;\n if (nextWidget instanceof Widget) {\n position.index = '0';\n if (nextWidget instanceof TableWidget) {\n return this.viewer.selection.getFirstParagraphInFirstCell(nextWidget);\n }\n return nextWidget;\n }\n }\n return undefined;\n };\n Editor.prototype.getBodyWidget = function (position) {\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var sectionIndex = parseInt(value, 10);\n index = parseInt(value, 10);\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n // position = position.substring(index).replace(';', '');\n if (value === 'H' || value === 'F') {\n return this.getHeaderFooterWidget(position);\n }\n index = parseInt(value, 10);\n return this.getBodyWidgetInternal(sectionIndex, index);\n };\n Editor.prototype.getHeaderFooterWidget = function (position) {\n //HEADER OR FOOTER WIDGET\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var isHeader = value === 'H';\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n var page = this.viewer.pages[index];\n if (isHeader) {\n return page.headerWidget;\n }\n else {\n return page.footerWidget;\n }\n };\n Editor.prototype.getBodyWidgetInternal = function (sectionIndex, blockIndex) {\n for (var i = 0; i < this.viewer.pages.length; i++) {\n var bodyWidget = this.viewer.pages[i].bodyWidgets[0];\n if (bodyWidget.index === sectionIndex) {\n if (bodyWidget.firstChild.index <= blockIndex && bodyWidget.lastChild.index >= blockIndex) {\n return bodyWidget;\n }\n }\n if (bodyWidget.index > sectionIndex) {\n break;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Editor.prototype.getBlockByIndex = function (container, blockIndex) {\n var childWidget;\n if (container) {\n for (var j = 0; j < container.childWidgets.length; j++) {\n if (container.childWidgets[j].index === blockIndex) {\n childWidget = container.childWidgets[j];\n break;\n }\n }\n if (!childWidget && !(container instanceof HeaderFooterWidget)) {\n return this.getBlockByIndex(container.nextSplitWidget, blockIndex);\n }\n }\n return childWidget;\n };\n /**\n * @private\n */\n Editor.prototype.updateHistoryPosition = function (position, isInsertPosition) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n var hierarchicalIndex = void 0;\n if (position instanceof TextPosition) {\n var blockInfo = this.getParagraphInfo(position);\n hierarchicalIndex = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n else {\n hierarchicalIndex = position;\n }\n if (isInsertPosition) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = hierarchicalIndex;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.endPosition = hierarchicalIndex;\n }\n }\n };\n /**\n * Applies the borders based on given settings.\n * @param {BorderSettings} settings\n */\n Editor.prototype.applyBorders = function (settings) {\n this.initHistory('Borders');\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var cells;\n var border = this.getBorder(settings.borderColor, settings.lineWidth, settings.borderStyle);\n if (this.selection.isEmpty) {\n //Apply borders for current selected cell initially. \n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'LeftBorder') {\n endCell.cellFormat.borders.left.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'TopBorder') {\n endCell.cellFormat.borders.top.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'RightBorder') {\n endCell.cellFormat.borders.right.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'BottomBorder') {\n endCell.cellFormat.borders.bottom.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideVerticalBorder') {\n endCell.cellFormat.borders.vertical.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideHorizontalBorder') {\n endCell.cellFormat.borders.horizontal.copyFormat(border);\n }\n if (settings.type === 'NoBorder') {\n this.clearAllBorderValues(endCell.cellFormat.borders);\n }\n }\n else {\n if (settings.type === 'OutsideBorders' || settings.type === 'TopBorder') {\n var selectedCell = this.getTopBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.top.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'LeftBorder') {\n var selectedCell = this.getLeftBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.left.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'RightBorder') {\n var selectedCell = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.right.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'BottomBorder') {\n var selectedCell = this.getBottomBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n }\n //Apply Only borders property to selected cells \n if (settings.type === 'BottomBorder' || settings.type === 'AllBorders' || settings.type === 'OutsideBorders'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyBottomBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'OutsideBorders' || settings.type === 'RightBorder'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyRightBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'NoBorder') {\n this.applyAllBorders(border, settings.type);\n }\n if (settings.type === 'InsideBorders' || settings.type === 'InsideVerticalBorder'\n || settings.type === 'InsideHorizontalBorder' || settings.type === 'NoBorder') {\n this.applyInsideBorders(border, settings.type, table);\n }\n this.updateGridForTableDialog(table, false);\n this.reLayout(this.selection, false);\n this.editorHistory.updateHistory();\n };\n Editor.prototype.applyAllBorders = function (border, borderType) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (borderType === 'NoBorder') {\n cells[i].cellFormat.borders.left.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.right.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.top.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n cells[i].cellFormat.borders.left.copyFormat(border);\n cells[i].cellFormat.borders.right.copyFormat(border);\n cells[i].cellFormat.borders.top.copyFormat(border);\n cells[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n };\n Editor.prototype.applyInsideBorders = function (border, borderType, table) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var isLastSelectedRow = cell.ownerRow === cells[cells.length - 1].ownerRow;\n var isLastRightCell = (cell.columnIndex + cell.cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex;\n if (borderType === 'NoBorder') {\n cell.cellFormat.borders.right.copyFormat(this.clearBorder());\n cell.cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n cell.cellFormat.borders.right.copyFormat(border);\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n cell.cellFormat.borders.bottom.copyFormat(border);\n }\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n // Apply adjacent bottom borders.\n var nextRowIndex = cell.ownerRow.rowIndex + cell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n var selectedCells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, cell, true);\n for (var j = 0; j < selectedCells.length; j++) {\n if (borderType === 'NoBorder') {\n selectedCells[j].cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n selectedCells[j].cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n }\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n // Apply adjacent right borders.\n var rightBorderCells = this.getSelectedCellsNextWidgets(cell, table);\n for (var k = 0; k < rightBorderCells.length; k++) {\n if (borderType === 'NoBorder') {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.getTopBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var topBorderCells = [];\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === startCell.ownerRow) {\n topBorderCells.push(cells[i]);\n }\n }\n return topBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.getLeftBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var leftBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].columnIndex === startCell.columnIndex) {\n leftBorderCells.push(cells[i]);\n }\n }\n return leftBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.getRightBorderCellsOnSelection = function () {\n var cells = this.selection.getSelectedCells();\n var rightBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if ((cells[i].columnIndex + cells[i].cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex) {\n rightBorderCells.push(cells[i]);\n }\n }\n return rightBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.getBottomBorderCellsOnSelection = function () {\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var endCell = endPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var bottomBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === endCell.ownerRow) {\n bottomBorderCells.push(cells[i]);\n }\n }\n return bottomBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.clearAllBorderValues = function (borders) {\n var border = this.clearBorder();\n borders.bottom.copyFormat(border);\n borders.left.copyFormat(border);\n borders.right.copyFormat(border);\n borders.top.copyFormat(border);\n borders.vertical.copyFormat(border);\n borders.horizontal.copyFormat(border);\n };\n Editor.prototype.clearBorder = function () {\n var border = new WBorder();\n border.lineStyle = 'Cleared';\n return border;\n };\n /**\n * @private\n */\n Editor.prototype.getAdjacentCellToApplyBottomBorder = function () {\n var cells = [];\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var nextRowIndex = endCell.ownerRow.rowIndex + endCell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n if (endCell.cellFormat.columnSpan > 1) {\n for (var i = endCell.columnIndex; i < endCell.columnIndex + endCell.cellFormat.columnSpan; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n cells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, endCell);\n if (!this.selection.isEmpty) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n var nextCellColIndex = nextRow.childWidgets[i].columnIndex;\n if (nextCellColIndex >= startCell.columnIndex && nextCellColIndex <= endCell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getAdjacentBottomBorderOnEmptyCells = function (nextRow, cell, isSingleCell) {\n var cells = [];\n if (cell.cellFormat.columnSpan > 1) {\n for (var i = cell.columnIndex; i < cell.columnIndex + cell.cellFormat.columnSpan; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n if (this.selection.isEmpty || isSingleCell) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n if (nextRow.childWidgets[i].columnIndex === cell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n return cells;\n };\n /**\n * @private\n */\n Editor.prototype.getAdjacentCellToApplyRightBorder = function () {\n var cells = [];\n var startPosIn = this.selection.start;\n var endPosIn = this.selection.end;\n if (!this.selection.isForward) {\n startPosIn = this.selection.end;\n endPosIn = this.selection.start;\n }\n var table = startPosIn.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n var startCell = startPosIn.paragraph.associatedCell;\n var endCell = endPosIn.paragraph.associatedCell;\n if (this.selection.isEmpty) {\n var selectedCell = startPosIn.paragraph.associatedCell;\n cells = this.getSelectedCellsNextWidgets(selectedCell, table);\n }\n else {\n // tslint:disable-next-line:max-line-length\n var selectedCells = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCells.length; i++) {\n var cell = selectedCells[i];\n cells = cells.concat(this.getSelectedCellsNextWidgets(cell, table));\n }\n }\n return cells;\n };\n Editor.prototype.getSelectedCellsNextWidgets = function (selectedCell, table) {\n var cells = [];\n if (selectedCell.nextWidget) {\n cells.push(selectedCell.nextWidget);\n }\n if (selectedCell.cellFormat.rowSpan > 1) {\n var nextRowIndex = selectedCell.ownerRow.rowIndex + selectedCell.cellFormat.rowSpan;\n for (var i = selectedCell.ownerRow.rowIndex + 1; i < nextRowIndex; i++) {\n var nextRow = table.childWidgets[i];\n if (nextRow) {\n for (var j = 0; j < nextRow.childWidgets.length; j++) {\n if (nextRow.childWidgets[j].columnIndex ===\n selectedCell.nextWidget.columnIndex) {\n cells.push(nextRow.childWidgets[j]);\n }\n }\n }\n }\n }\n return cells;\n };\n /**\n * @private\n */\n Editor.prototype.getBorder = function (borderColor, lineWidth, borderStyle) {\n var border = new WBorder();\n border.color = borderColor || '#000000';\n border.lineWidth = lineWidth || 1;\n border.lineStyle = borderStyle || 'Single';\n return border;\n };\n /**\n * Applies borders\n * @param {WBorders} sourceBorders\n * @param {WBorders} applyBorders\n * @private\n */\n Editor.prototype.applyBordersInternal = function (sourceBorders, applyBorders) {\n if (!isNullOrUndefined(sourceBorders) && !isNullOrUndefined(sourceBorders)) {\n if (!isNullOrUndefined(sourceBorders.top)) {\n this.applyBorder(sourceBorders.top, applyBorders.top);\n }\n if (!isNullOrUndefined(sourceBorders.bottom)) {\n this.applyBorder(sourceBorders.bottom, applyBorders.bottom);\n }\n if (!isNullOrUndefined(sourceBorders.left)) {\n this.applyBorder(sourceBorders.left, applyBorders.left);\n }\n if (!isNullOrUndefined(sourceBorders.right)) {\n this.applyBorder(sourceBorders.right, applyBorders.right);\n }\n if (!isNullOrUndefined(sourceBorders.horizontal)) {\n this.applyBorder(sourceBorders.horizontal, applyBorders.horizontal);\n }\n if (!isNullOrUndefined(sourceBorders.vertical)) {\n this.applyBorder(sourceBorders.vertical, applyBorders.vertical);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalUp)) {\n this.applyBorder(sourceBorders.diagonalUp, applyBorders.diagonalUp);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalDown)) {\n this.applyBorder(sourceBorders.diagonalDown, applyBorders.diagonalDown);\n }\n }\n };\n /**\n * Apply shading to table\n * @param {WShading} sourceShading\n * @param {WShading} applyShading\n * @private\n */\n Editor.prototype.applyShading = function (sourceShading, applyShading) {\n if (!isNullOrUndefined(applyShading) && !isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(applyShading.backgroundColor)\n && sourceShading.backgroundColor !== applyShading.backgroundColor) {\n sourceShading.backgroundColor = applyShading.backgroundColor;\n }\n if (!isNullOrUndefined(applyShading.foregroundColor)\n && sourceShading.foregroundColor !== applyShading.foregroundColor) {\n sourceShading.foregroundColor = applyShading.foregroundColor;\n }\n if (!isNullOrUndefined(applyShading.textureStyle)\n && sourceShading.textureStyle !== applyShading.textureStyle) {\n sourceShading.textureStyle = applyShading.textureStyle;\n }\n }\n };\n Editor.prototype.applyBorder = function (sourceBorder, applyBorder) {\n if (!isNullOrUndefined(sourceBorder) && !isNullOrUndefined(applyBorder)) {\n if (!isNullOrUndefined(applyBorder.color)\n && sourceBorder.color !== applyBorder.color) {\n sourceBorder.color = applyBorder.color;\n }\n if (!isNullOrUndefined(applyBorder.lineStyle)\n && sourceBorder.lineStyle !== applyBorder.lineStyle) {\n sourceBorder.lineStyle = applyBorder.lineStyle;\n }\n if (!isNullOrUndefined(applyBorder.lineWidth)\n && sourceBorder.lineWidth !== applyBorder.lineWidth) {\n sourceBorder.lineWidth = applyBorder.lineWidth;\n }\n if (!isNullOrUndefined(applyBorder.shadow)\n && sourceBorder.shadow !== applyBorder.shadow) {\n sourceBorder.shadow = applyBorder.shadow;\n }\n if (!isNullOrUndefined(applyBorder.space)\n && sourceBorder.space !== applyBorder.space) {\n sourceBorder.space = applyBorder.space;\n }\n }\n };\n /**\n * Apply Table Format changes\n * @param {Selection} selection\n * @param {WTableFormat} format\n * @private\n */\n Editor.prototype.onTableFormat = function (format) {\n if (!isNullOrUndefined(this.selection.tableFormat)) {\n this.viewer.owner.isShiftingEnabled = true;\n this.editorHistory.initializeHistory('TableFormat');\n var table = this.selection.start.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n this.applyTableFormat(table, undefined, format);\n this.reLayout(this.selection, false);\n }\n };\n /**\n * @private\n */\n Editor.prototype.applyTableFormat = function (table, property, value) {\n this.applyTablePropertyValue(this.viewer.selection, undefined, value, table);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyTablePropertyValue = function (selection, property, value, table) {\n var sourceFormat = table.tableFormat;\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedTableProperties(sourceFormat, property, value);\n }\n if (value instanceof WTableFormat) {\n if (isNullOrUndefined(property)) {\n this.handleTableFormat(sourceFormat, value);\n }\n return;\n }\n if (property === 'preferredWidth') {\n sourceFormat.preferredWidth = value;\n }\n else if (property === 'leftIndent') {\n sourceFormat.leftIndent = value;\n }\n else if (property === 'tableAlignment') {\n sourceFormat.tableAlignment = value;\n }\n else if (property === 'cellSpacing') {\n sourceFormat.cellSpacing = value;\n }\n else if (property === 'leftMargin') {\n sourceFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sourceFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sourceFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sourceFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidthType') {\n sourceFormat.preferredWidthType = value;\n }\n if (property === 'shading') {\n sourceFormat.shading = value;\n }\n else if (property === 'borders') {\n sourceFormat.borders = value;\n }\n // if (!isNullOrUndefined(table)) {\n // this.layoutItemBlock(table, true);\n // }\n };\n Editor.prototype.handleTableFormat = function (tableFormat, applyFormat) {\n if (this.isBordersAndShadingDialog || this.editorHistory.isUndoing\n || this.editorHistory.isRedoing) {\n if (!isNullOrUndefined(tableFormat.borders)) {\n this.applyBordersInternal(tableFormat.borders, applyFormat.borders);\n }\n if (!isNullOrUndefined(tableFormat.shading)) {\n this.applyShading(tableFormat.shading, applyFormat.shading);\n }\n }\n if (!this.isBordersAndShadingDialog) {\n if (applyFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== tableFormat.preferredWidth) {\n tableFormat.preferredWidth = applyFormat.preferredWidth;\n }\n if (applyFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== tableFormat.preferredWidthType) {\n tableFormat.preferredWidthType = applyFormat.preferredWidthType;\n }\n if (applyFormat.hasValue('tableAlignment') && applyFormat.tableAlignment !== tableFormat.tableAlignment) {\n tableFormat.tableAlignment = applyFormat.tableAlignment;\n }\n if (applyFormat.hasValue('leftIndent') && applyFormat.leftIndent !== tableFormat.leftIndent) {\n tableFormat.leftIndent = applyFormat.leftIndent;\n }\n }\n this.updateGridForTableDialog(tableFormat.ownerBase, false);\n };\n Editor.prototype.updateGridForTableDialog = function (table, shiftNextItem) {\n if (table.tableHolder) {\n table.updateRowIndex(0);\n table.calculateGrid();\n table.isGridUpdated = false;\n }\n this.viewer.layout.reLayoutTable(table);\n };\n /**\n * Applies Row Format Changes\n * @param {Selection} selection\n * @param {WRowFormat} format\n * @param {WRow} row\n * @private\n */\n Editor.prototype.onRowFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('RowFormat');\n this.viewer.owner.isShiftingEnabled = true;\n var rowStartPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var rowEndPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = rowStartPos.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n this.applyRowFormat(rowStartPos.paragraph.associatedCell.ownerRow, rowStartPos, rowEndPos, undefined, format);\n this.reLayout(this.selection, false);\n };\n Editor.prototype.applyRowFormat = function (row, start, end, property, value) {\n this.applyRowPropertyValue(this.viewer.selection, property, value, row);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyRowFormat(newRow, start, end, property, value);\n }\n };\n Editor.prototype.applyRowPropertyValue = function (selection, property, value, row) {\n var applyFormat = row.rowFormat;\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedRowProperties(applyFormat, property, value);\n }\n if (value instanceof WRowFormat) {\n if (isNullOrUndefined(property)) {\n this.handleRowFormat(value, applyFormat);\n }\n return;\n }\n if (property === 'heightType') {\n applyFormat.heightType = value;\n }\n else if (property === 'height') {\n applyFormat.height = value;\n }\n else if (property === 'isHeader') {\n applyFormat.isHeader = value;\n }\n else if (property === 'allowBreakAcrossPages') {\n applyFormat.allowBreakAcrossPages = value;\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n this.layoutItemBlock(row.ownerTable, true);\n }\n };\n Editor.prototype.handleRowFormat = function (format, applyFormat) {\n if (format.hasValue('allowBreakAcrossPages') && format.allowBreakAcrossPages !== applyFormat.allowBreakAcrossPages) {\n applyFormat.allowBreakAcrossPages = format.allowBreakAcrossPages;\n }\n if (format.hasValue('isHeader') && format.isHeader !== applyFormat.isHeader) {\n applyFormat.isHeader = format.isHeader;\n }\n if (format.hasValue('heightType') && format.heightType !== applyFormat.heightType) {\n applyFormat.heightType = format.heightType;\n }\n if (format.hasValue('height') && format.height !== applyFormat.height) {\n applyFormat.height = format.height;\n }\n this.updateGridForTableDialog(applyFormat.ownerBase.ownerTable, true);\n };\n /**\n * Applies Cell Format changes\n * @param {Selection} selection\n * @param {WCellFormat} format\n * @param {WCell} cell\n * @private\n */\n Editor.prototype.onCellFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('CellFormat');\n this.updateFormatForCell(this.selection, undefined, format);\n this.reLayout(this.selection, false);\n };\n /**\n * @private\n */\n Editor.prototype.updateCellMargins = function (selection, value) {\n var cellStartPosition = selection.start;\n var cellEndPosition = selection.end;\n if (!selection.isForward) {\n cellStartPosition = selection.end;\n cellEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, cellStartPosition);\n // tslint:disable-next-line:max-line-length\n this.viewer.owner.cellOptionsDialogModule.applyCellmarginsValue(cellStartPosition.paragraph.associatedCell.ownerRow, cellStartPosition, cellEndPosition, value);\n };\n /**\n * @private\n */\n Editor.prototype.updateFormatForCell = function (selection, property, value) {\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n }\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var cells;\n var table = startCell.ownerTable.combineWidget(this.viewer);\n var appliedFormat;\n for (var k = startCell.columnIndex; k <= endCell.columnIndex; k++) {\n cells = this.getSelectedCellInColumn(startCell.ownerTable, startCell.ownerRow.rowIndex, k, endCell.ownerRow.rowIndex);\n for (var i = 0; i < cells.length; i++) {\n appliedFormat = this.applyCellPropertyValue(this.viewer.selection, property, value, cells[i].cellFormat);\n }\n }\n this.updateGridForTableDialog(table, false);\n };\n /**\n * @private\n */\n Editor.prototype.getSelectedCellInColumn = function (table, rowStartIndex, columnIndex, rowEndIndex) {\n var cells = [];\n for (var i = rowStartIndex; i <= rowEndIndex; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n if (row.childWidgets[j].columnIndex === columnIndex) {\n cells.push(row.childWidgets[j]);\n }\n }\n }\n return cells;\n };\n Editor.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var k = 0; k < table.childWidgets.length; k++) {\n var row = table.childWidgets[k];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n /**\n * @private\n */\n Editor.prototype.getTableWidth = function (table) {\n if (table.tableFormat.preferredWidth !== 0 || table.tableFormat.preferredWidthType === 'Percent') {\n if (table.tableFormat.preferredWidthType === 'Auto' || table.tableFormat.preferredWidthType === 'Point') {\n return table.tableFormat.preferredWidth;\n }\n else {\n if (table.tableFormat.preferredWidth === 0) {\n return 0;\n }\n else {\n return HelperMethods.convertPixelToPoint(this.viewer.clientArea.width) / 100 * table.tableFormat.preferredWidth;\n }\n }\n }\n return HelperMethods.convertPixelToPoint(this.viewer.layout.getTableWidth(table));\n };\n Editor.prototype.applyCellPropertyValue = function (selection, property, value, applyFormat) {\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedCellProperties(applyFormat, property, value);\n }\n if (value instanceof WCellFormat) {\n if (isNullOrUndefined(property)) {\n this.handleCellFormat(value, applyFormat);\n }\n return value;\n }\n if (property === 'leftMargin') {\n applyFormat.leftMargin = value;\n }\n else if (property === 'topMargin') {\n applyFormat.topMargin = value;\n }\n else if (property === 'rightMargin') {\n applyFormat.rightMargin = value;\n }\n else if (property === 'bottomMargin') {\n applyFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidth') {\n applyFormat.preferredWidth = value;\n applyFormat.cellWidth = value;\n }\n else if (property === 'cellWidth') {\n applyFormat.cellWidth = value;\n }\n else if (property === 'columnSpan') {\n applyFormat.columnSpan = value;\n }\n else if (property === 'rowSpan') {\n applyFormat.rowSpan = value;\n }\n else if (property === 'preferredWidthType') {\n applyFormat.preferredWidthType = value;\n }\n else if (property === 'verticalAlignment') {\n applyFormat.verticalAlignment = value;\n }\n if (property === 'shading') {\n applyFormat.shading = value;\n }\n else if (property === 'borders') {\n applyFormat.borders = value;\n }\n return undefined;\n };\n Editor.prototype.handleCellFormat = function (cellFormat, applyFormat) {\n if (!isNullOrUndefined(cellFormat) && !isNullOrUndefined(applyFormat)) {\n if (this.isBordersAndShadingDialog) {\n if (!isNullOrUndefined(cellFormat.borders)) {\n this.applyBordersInternal(applyFormat.borders, cellFormat.borders);\n }\n if (!isNullOrUndefined(cellFormat.shading)) {\n this.applyShading(applyFormat.shading, cellFormat.shading);\n }\n // this.layoutRow((applyFormat.ownerBase as TableCellWidget).ownerRow, this.viewer, false);\n }\n else {\n if (cellFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== cellFormat.preferredWidth) {\n applyFormat.preferredWidth = cellFormat.preferredWidth;\n }\n if (cellFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== cellFormat.preferredWidthType) {\n applyFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n if (cellFormat.hasValue('verticalAlignment') && applyFormat.verticalAlignment !== cellFormat.verticalAlignment) {\n applyFormat.verticalAlignment = cellFormat.verticalAlignment;\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.destroy = function () {\n this.viewer = undefined;\n this.nodes = [];\n };\n Editor.prototype.isTocField = function (element) {\n if (element instanceof FieldElementBox) {\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') === 0) {\n return true;\n }\n }\n return false;\n };\n /**\n * Updates the table of contents.\n * @private\n */\n Editor.prototype.updateToc = function (tocField) {\n if (isNullOrUndefined(tocField)) {\n tocField = this.selection.getTocFieldInternal();\n }\n if (!this.isTocField(tocField)) {\n return;\n }\n // Decode field code to get parameters\n var code = this.selection.getFieldCode(tocField);\n if (code.toLocaleLowerCase().indexOf('toc') !== -1) {\n this.insertTableOfContents(this.validateTocSettings(this.getTocSettings(code, tocField)));\n }\n };\n Editor.prototype.getTocSettings = function (code, tocField) {\n var tocSettings = {};\n tocSettings.includePageNumber = true;\n tocSettings.rightAlign = true;\n // Decode field code to get parameters\n if (code.toLowerCase() === 'toc \\\\mergeformat') {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 3;\n }\n else {\n var swtiches = code.split('\\\\');\n for (var i = 0; i < swtiches.length; i++) {\n var swtch = swtiches[i];\n if (swtch.length === 0) {\n continue;\n }\n switch (swtch[0]) {\n case 'o':\n if (!isNullOrUndefined(swtch.match(/\\d+/g))) {\n var levels = swtch.match(/\\d+/g).map(Number);\n tocSettings.startLevel = levels[0];\n tocSettings.endLevel = levels[1];\n }\n else {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 9;\n }\n break;\n case 'h':\n tocSettings.includeHyperlink = true;\n break;\n case 'n':\n tocSettings.includePageNumber = false;\n break;\n case 'p':\n tocSettings.rightAlign = false;\n break;\n case 'u':\n tocSettings.includeOutlineLevels = true;\n break;\n case 't':\n this.decodeTSwitch(tocSettings, swtch);\n break;\n }\n }\n }\n //assigns tab leader.\n var tabs = tocField.paragraph.paragraphFormat.getUpdatedTabs();\n if (tabs.length > 0) {\n tocSettings.tabLeader = tabs[tabs.length - 1].tabLeader;\n }\n if (tocSettings.rightAlign && isNullOrUndefined(tocSettings.tabLeader)) {\n tocSettings.tabLeader = 'Dot';\n }\n return tocSettings;\n };\n Editor.prototype.decodeTSwitch = function (tocSettings, tSwitch) {\n tocSettings.levelSettings = {};\n tSwitch = tSwitch.replace('t', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.trim();\n var levels = tSwitch.split(',');\n for (var index = 0; index < levels.length; index++) {\n tocSettings.levelSettings[levels[index]] = parseInt(levels[index + 1], 10);\n index++;\n }\n };\n /**\n * Inserts, modifies or updates the table of contents based on given settings.\n * @param {TableOfContentsSettings} tableOfContentsSettings\n */\n Editor.prototype.insertTableOfContents = function (tableOfContentsSettings) {\n this.isInsertingTOC = true;\n this.initComplexHistory('TOC');\n if (isNullOrUndefined(tableOfContentsSettings)) {\n //Initializes with default value.\n tableOfContentsSettings = {};\n tableOfContentsSettings.startLevel = 1;\n tableOfContentsSettings.endLevel = 3;\n tableOfContentsSettings.includeHyperlink = true;\n tableOfContentsSettings.includeOutlineLevels = true;\n tableOfContentsSettings.includePageNumber = true;\n tableOfContentsSettings.rightAlign = true;\n tableOfContentsSettings.tabLeader = 'Dot';\n }\n var tocField = undefined;\n var code = undefined;\n if (this.selection.contextType === 'TableOfContents') {\n tocField = this.selection.getTocFieldInternal();\n }\n if (tocField instanceof FieldElementBox) {\n this.selection.start.setPositionForSelection(tocField.line, tocField, 0, this.selection.start.location);\n this.selection.end.setPositionForSelection(tocField.fieldEnd.line, tocField.fieldEnd, 2, this.selection.end.location);\n this.onDelete();\n }\n // Build TOC field code based on parameter\n code = this.constructTocFieldCode(tableOfContentsSettings);\n var isStartParagraph = this.selection.start.isAtParagraphStart;\n var blockInfo = this.getParagraphInfo(this.selection.start);\n var initialStart = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n // Build TOC fields\n // tslint:disable-next-line:max-line-length\n var widgets = this.buildToc(this.validateTocSettings(tableOfContentsSettings), code, true, isStartParagraph);\n if (widgets.length > 0) {\n var tocLastPara = new ParagraphWidget();\n var tocLastLine = new LineWidget(tocLastPara);\n tocLastPara.childWidgets.push(tocLastLine);\n var index = 0;\n if (!isStartParagraph) {\n index = 1;\n }\n var line = widgets[index].childWidgets[0];\n var fieldBegin = line.children[0];\n this.appendEndField(fieldBegin, tocLastLine);\n widgets.push(tocLastPara);\n this.appendEmptyPara(widgets);\n }\n this.setPositionForCurrentIndex(this.selection.start, initialStart);\n this.selection.end.setPositionInternal(this.selection.start);\n this.pasteContentsInternal(widgets);\n this.isInsertingTOC = false;\n this.updatePageRef();\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n };\n Editor.prototype.appendEmptyPara = function (widgets) {\n var emptyPara = new ParagraphWidget();\n var emptyLine = new LineWidget(emptyPara);\n emptyPara.childWidgets.push(emptyLine);\n widgets.push(emptyPara);\n };\n Editor.prototype.constructTocFieldCode = function (tocSettings) {\n var tocFieldCode = 'TOC';\n //appends styles level\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(tocSettings.startLevel) && tocSettings.startLevel !== 0 && !isNullOrUndefined(tocSettings.endLevel) && tocSettings.endLevel !== 0) {\n tocFieldCode = tocFieldCode + ' \\\\o \"' + tocSettings.startLevel + '-' + tocSettings.endLevel + '\"';\n }\n if (tocSettings.includePageNumber && !tocSettings.rightAlign) {\n tocFieldCode = tocFieldCode + ' \\\\p \" \"';\n }\n if (!tocSettings.includePageNumber) {\n tocFieldCode = tocFieldCode + ' \\\\n';\n }\n if (tocSettings.includeHyperlink) {\n tocFieldCode = tocFieldCode + ' \\\\h \\\\z';\n }\n if (tocSettings.includeOutlineLevels) {\n tocFieldCode = tocFieldCode + ' \\\\u';\n }\n var tSwitch = this.constructTSwitch(tocSettings);\n if (tSwitch.length > 6) {\n tocFieldCode = tocFieldCode + tSwitch;\n }\n return tocFieldCode;\n };\n Editor.prototype.constructTSwitch = function (tocSettings) {\n var tSwitch = '';\n var prefix = ' \\\\t ';\n if (!isNullOrUndefined(tocSettings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(tocSettings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n tSwitch = tSwitch + key + ',' + tocSettings.levelSettings[key].toString() + ',';\n }\n }\n tSwitch = tSwitch.slice(0, -1);\n tSwitch = prefix + '\"' + tSwitch + '\"';\n return tSwitch;\n };\n /**\n * Appends the end filed to the given line.\n */\n Editor.prototype.appendEndField = function (fieldBegin, lineWidget) {\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldSeparator = fieldBegin.fieldSeparator;\n fieldBegin.fieldSeparator.fieldEnd = fieldEnd;\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldBegin.fieldEnd = fieldEnd;\n fieldEnd.line = lineWidget;\n lineWidget.children.push(fieldEnd);\n };\n Editor.prototype.validateTocSettings = function (tocSettings) {\n if (isNullOrUndefined(tocSettings.startLevel) || tocSettings.startLevel < 1) {\n tocSettings.startLevel = 1;\n }\n if (isNullOrUndefined(tocSettings.endLevel) || tocSettings.endLevel < tocSettings.endLevel) {\n tocSettings.endLevel = tocSettings.startLevel > 3 ? tocSettings.startLevel : 3;\n }\n if (isNullOrUndefined(tocSettings.includeHyperlink)) {\n tocSettings.includeHyperlink = false;\n }\n if (isNullOrUndefined(tocSettings.includePageNumber)) {\n tocSettings.includePageNumber = false;\n }\n if (isNullOrUndefined(tocSettings.rightAlign)) {\n tocSettings.rightAlign = false;\n }\n if (isNullOrUndefined(tocSettings.levelSettings)) {\n tocSettings.levelSettings = {};\n }\n return tocSettings;\n };\n /**\n * Builds the TOC\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.buildToc = function (tocSettings, fieldCode, isFirstPara, isStartParagraph) {\n var tocDomBody = this.viewer.pages[0].bodyWidgets[0];\n var widgets = [];\n this.createHeadingLevels(tocSettings);\n if (tocSettings.includeOutlineLevels) {\n this.createOutlineLevels(tocSettings);\n }\n var widget = tocDomBody.childWidgets[0];\n while (widget !== undefined) {\n // tslint:disable-next-line:max-line-length\n if (widget instanceof ParagraphWidget && (this.isHeadingStyle(widget) || (tocSettings.includeOutlineLevels && this.isOutlineLevelStyle(widget)))) {\n var bookmarkName = this.insertTocBookmark(widget);\n // tslint:disable-next-line:max-line-length\n this.createTOCWidgets(widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph);\n isFirstPara = false;\n }\n widget = this.selection.getNextParagraphBlock(widget);\n }\n this.tocStyles = {};\n return widgets;\n };\n Editor.prototype.createOutlineLevels = function (settings) {\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var levelStyle = 'Level' + i.toString();\n if (isNullOrUndefined(this.tocStyles[levelStyle])) {\n this.tocStyles[levelStyle] = i;\n }\n }\n };\n /**\n * Creates TOC heading styles\n * @param start - lower heading level\n * @param end - higher heading level\n */\n Editor.prototype.createHeadingLevels = function (settings) {\n var normalStyle = 'Normal';\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var headingStyle = 'Heading ' + i.toString();\n if (isNullOrUndefined(this.tocStyles[headingStyle])) {\n this.tocStyles[headingStyle] = i;\n }\n }\n if (!isNullOrUndefined(settings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(settings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n this.tocStyles[key] = settings.levelSettings[key];\n }\n }\n };\n /**\n * Checks the current style is heading style.\n */\n Editor.prototype.isHeadingStyle = function (para) {\n var style = para.paragraphFormat.baseStyle;\n if (style !== undefined) {\n return isNullOrUndefined(this.tocStyles[style.name]) ? false : true;\n }\n return false;\n };\n Editor.prototype.isOutlineLevelStyle = function (para) {\n var styleName = para.paragraphFormat.outlineLevel;\n return isNullOrUndefined(this.tocStyles[styleName]) ? false : true;\n };\n /**\n * Creates TOC field element.\n */\n Editor.prototype.createTocFieldElement = function (lineWidget, fieldCode) {\n //begin\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.hasFieldEnd = true;\n fieldBegin.line = lineWidget;\n lineWidget.children.push(fieldBegin);\n //format toc\n var textElement = new TextElementBox();\n textElement.text = fieldCode;\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n //field separator\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n fieldSeparator.line = lineWidget;\n lineWidget.children.push(fieldSeparator);\n return fieldBegin;\n };\n /**\n * Updates TOC para\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.createTOCWidgets = function (widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph) {\n var fieldBegin = undefined;\n var tocPara = undefined;\n var tocLine = undefined;\n // tslint:disable-next-line:max-line-length\n if (widgets.length === 1 && widgets[0].childWidgets[0].children.length === 3 && !isNullOrUndefined(isFirstPara) && !isFirstPara) {\n tocLine = widgets[0].childWidgets[0];\n }\n else {\n tocPara = new ParagraphWidget();\n var styleName = undefined;\n //Adds toc syles into paragraph\n var headingStyleName = widget.paragraphFormat.baseStyle.name;\n if (tocSettings.includeOutlineLevels && isNullOrUndefined(this.tocStyles[headingStyleName])) {\n styleName = widget.paragraphFormat.outlineLevel;\n }\n else {\n styleName = headingStyleName;\n }\n var tocStyleName = 'Toc' + this.tocStyles[styleName];\n var paraStyle = this.viewer.styles.findByName(tocStyleName, 'Paragraph');\n if (isNullOrUndefined(paraStyle)) {\n // tslint:disable-next-line:max-line-length\n this.viewer.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.viewer.preDefinedStyles.get(tocStyleName)), this.viewer.styles);\n paraStyle = this.viewer.styles.findByName(tocStyleName, 'Paragraph');\n }\n tocPara.paragraphFormat.ApplyStyle(paraStyle);\n //Creates right tab for page number.\n if (tocSettings.rightAlign && tocSettings.includePageNumber) {\n var tabStop = new WTabStop();\n tabStop.position = HelperMethods.convertPixelToPoint(this.viewer.clientArea.width);\n tabStop.tabLeader = tocSettings.tabLeader;\n tabStop.deletePosition = 0;\n tabStop.tabJustification = 'Right';\n tocPara.paragraphFormat.tabs.push(tabStop);\n }\n tocLine = new LineWidget(tocPara);\n tocPara.childWidgets.push(tocLine);\n }\n //creates toc field element if it is insert\n if ((isFirstPara !== undefined) && isFirstPara) {\n if (!isNullOrUndefined(isStartParagraph) && !isStartParagraph) {\n this.appendEmptyPara(widgets);\n }\n this.createTocFieldElement(tocLine, fieldCode);\n }\n var text = '';\n for (var lineIndex = 0; lineIndex < widget.childWidgets.length; lineIndex++) {\n var lineWidget = widget.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var element = lineWidget.children[elementIndex];\n if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n var temp = element.text;\n var tabChar = '\\t';\n if (temp.indexOf(tabChar) !== -1) {\n temp = temp.replace(new RegExp(tabChar, 'g'), ' ');\n }\n text = text + temp;\n }\n }\n }\n if (text !== '') {\n // inserts hyperlink\n if (tocSettings.includeHyperlink && (bookmarkName !== undefined)) {\n fieldBegin = this.insertTocHyperlink(tocLine, bookmarkName, text);\n }\n else {\n var span = new TextElementBox();\n span.text = text;\n span.line = tocLine;\n tocLine.children.push(span);\n }\n //inserts page number\n if (tocSettings.includePageNumber && (bookmarkName !== undefined)) {\n if (tocSettings.rightAlign) {\n var tabText = new TabElementBox();\n tabText.text = '\\t';\n tabText.line = tocLine;\n tocLine.children.push(tabText);\n }\n var pageField = this.insertTocPageNumber(bookmarkName, tocLine, tocSettings.rightAlign, widget);\n this.appendEndField(pageField, tocLine);\n }\n if (tocSettings.includeHyperlink && fieldBegin !== undefined) {\n this.appendEndField(fieldBegin, tocLine);\n }\n }\n if (!isNullOrUndefined(tocPara) && (text !== '' || isFirstPara)) {\n widgets.push(tocPara);\n }\n };\n /**\n * Inserts toc hyperlink.\n */\n Editor.prototype.insertTocHyperlink = function (lineWidget, bookmarkName, text) {\n var fieldCode = ' HYPERLINK \\\\l \\\"' + bookmarkName + '\\\" ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode);\n //text element.\n var span = new TextElementBox();\n span.text = text;\n span.line = lineWidget;\n lineWidget.children.push(span);\n return fieldBegin;\n };\n /**\n * Inserts toc page number.\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.insertTocPageNumber = function (bookMarkname, lineWidget, isRightAlign, widget) {\n var fieldCode = ' PAGEREF' + bookMarkname + ' \\\\h ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode);\n var text = (this.viewer.pages.indexOf(widget.bodyWidget.page) + 1).toString();\n //text element.\n var span = new FieldTextElementBox();\n span.fieldBegin = fieldBegin;\n if (!isRightAlign) {\n text = ' ' + text;\n }\n span.text = text;\n span.line = lineWidget;\n lineWidget.children.push(span);\n this.pageRefFields[bookMarkname] = span;\n return fieldBegin;\n };\n Editor.prototype.updatePageRef = function () {\n for (var _i = 0, _a = Object.keys(this.pageRefFields); _i < _a.length; _i++) {\n var key = _a[_i];\n var bookmark = this.viewer.bookmarks.get(key);\n var pageRef = (bookmark.paragraph.bodyWidget.page.index + 1).toString();\n var span = this.pageRefFields[key];\n if (pageRef !== span.text) {\n span.text = pageRef;\n var paragraph = span.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(span.line);\n var elementIndex = span.line.children.indexOf(span);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n }\n };\n /**\n * Inserts toc bookmark.\n */\n Editor.prototype.insertTocBookmark = function (widget) {\n var bookmarkName = undefined;\n var lineLength = widget.childWidgets.length;\n if (lineLength > 0) {\n var startLine = widget.childWidgets[0];\n var endLine = widget.childWidgets[lineLength - 1];\n if ((startLine !== undefined) && (endLine !== undefined)) {\n var startElement = startLine.children[0];\n //Returns the bookmark if already present for paragraph.\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(startElement) && startElement instanceof BookmarkElementBox && startElement.bookmarkType === 0 && (startElement.name.toLowerCase().match('^_toc'))) {\n return startElement.name;\n }\n var endElement = endLine.children[endLine.children.length - 1];\n if ((startElement !== undefined) && (endElement !== undefined)) {\n this.selection.start.setPositionForSelection(startLine, startElement, 0, this.selection.start.location);\n this.selection.end.setPositionForSelection(endLine, endElement, endElement.length, this.selection.end.location);\n bookmarkName = this.generateBookmarkName();\n this.insertBookmark(bookmarkName);\n }\n }\n }\n return bookmarkName;\n };\n /**\n * Generates bookmark id.\n */\n Editor.prototype.generateBookmarkName = function () {\n this.tocBookmarkId++;\n var count = 10 - this.tocBookmarkId.toString().length;\n var formatString = '';\n while (count - 1 > 0) {\n formatString = '0' + formatString;\n count--;\n }\n var bookmarkName = '_Toc' + formatString + this.tocBookmarkId;\n return bookmarkName;\n };\n /**\n * Change cell content alignment\n * @private\n */\n Editor.prototype.onCellContentAlignment = function (verticalAlignment, textAlignment) {\n this.owner.isShiftingEnabled = true;\n var selection = this.owner.selection;\n if (selection.isEmpty && selection.start.paragraph.isInsideTable) {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(selection, 'MultiSelection');\n }\n //Selecting the table cell to update the all the paragraph format.\n selection.selectTableCell();\n this.initHistory('CellContentVerticalAlignment');\n var cellFormat = selection.start.paragraph.associatedCell.cellFormat;\n this.applyCellPropertyValue(selection, 'verticalAlignment', verticalAlignment, cellFormat);\n this.reLayout(selection, false);\n this.initHistory('TextAlignment');\n this.updateParagraphFormat('textAlignment', textAlignment, false);\n this.reLayout(this.owner.selection, false);\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n }\n else {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(selection, 'MultiSelection');\n }\n if (!isNullOrUndefined(selection.getTable(selection.start, selection.end))) {\n //Table cell vertical alignment.\n this.updateSelectionTableFormat(selection, 'CellContentVerticalAlignment', verticalAlignment);\n this.reLayout(this.owner.selection, false);\n this.initHistory('TextAlignment');\n //Paragraph text alignment.\n this.updateSelectionParagraphFormatting('textAlignment', textAlignment, false);\n this.reLayout(selection, false);\n }\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n }\n };\n return Editor;\n}());\nexport { Editor };\n","import { WTableHolder } from '../viewer/page';\n/**\n * @private\n */\nvar ModifiedLevel = /** @class */ (function () {\n function ModifiedLevel(owner, modified) {\n this.ownerListLevelIn = undefined;\n this.modifiedListLevelIn = undefined;\n this.ownerListLevel = owner;\n this.modifiedListLevel = modified;\n }\n Object.defineProperty(ModifiedLevel.prototype, \"ownerListLevel\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerListLevelIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.ownerListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedLevel.prototype, \"modifiedListLevel\", {\n /**\n * @private\n */\n get: function () {\n return this.modifiedListLevelIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.modifiedListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ModifiedLevel.prototype.destroy = function () {\n this.ownerListLevel = undefined;\n this.modifiedListLevel = undefined;\n };\n return ModifiedLevel;\n}());\nexport { ModifiedLevel };\n/**\n * @private\n */\nvar ModifiedParagraphFormat = /** @class */ (function () {\n function ModifiedParagraphFormat(ownerFormat, modifiedFormat) {\n this.ownerFormatIn = undefined;\n this.modifiedFormatIn = undefined;\n this.ownerFormat = ownerFormat;\n this.modifiedFormat = modifiedFormat;\n }\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"ownerFormat\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.ownerFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"modifiedFormat\", {\n /**\n * hidden\n */\n get: function () {\n return this.modifiedFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.modifiedFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ModifiedParagraphFormat.prototype.destroy = function () {\n this.ownerFormat = undefined;\n this.modifiedFormat.destroy();\n this.modifiedFormat = undefined;\n };\n return ModifiedParagraphFormat;\n}());\nexport { ModifiedParagraphFormat };\n/**\n * @private\n */\nvar RowHistoryFormat = /** @class */ (function () {\n function RowHistoryFormat(startingPoint, rowFormat) {\n this.startingPoint = startingPoint;\n this.rowFormat = rowFormat;\n this.rowHeightType = rowFormat.heightType;\n }\n RowHistoryFormat.prototype.revertChanges = function (isRedo, owner) {\n //backup current format values.\n var currentRowHeightType = this.rowFormat.heightType;\n //Restore old values.\n owner.editorModule.tableResize.updateRowHeight(this.rowFormat.ownerBase, isRedo ? this.displacement : (-this.displacement));\n owner.viewer.layout.reLayoutTable(this.rowFormat.ownerBase.ownerTable);\n if (this.rowFormat.heightType !== this.rowHeightType) {\n this.rowFormat.heightType = this.rowHeightType;\n }\n //backup the current format values for redo.\n this.rowHeightType = currentRowHeightType;\n };\n return RowHistoryFormat;\n}());\nexport { RowHistoryFormat };\n/**\n * @private\n */\nvar TableHistoryInfo = /** @class */ (function () {\n function TableHistoryInfo(table, owner) {\n this.tableHolder = new WTableHolder();\n this.tableFormat = new TableFormatHistoryInfo();\n this.rows = [];\n this.owner = owner;\n this.copyProperties(table);\n }\n TableHistoryInfo.prototype.copyProperties = function (table) {\n if (table.tableHolder) {\n this.tableHolder = table.tableHolder.clone();\n }\n if (table.tableFormat) {\n this.tableFormat.leftIndent = table.tableFormat.leftIndent;\n this.tableFormat.preferredWidth = table.tableFormat.preferredWidth;\n this.tableFormat.preferredWidthType = table.tableFormat.preferredWidthType;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowFormat = new RowFormatHistoryInfo();\n rowFormat.gridBefore = row.rowFormat.gridBefore;\n rowFormat.gridBeforeWidth = row.rowFormat.gridBeforeWidth;\n rowFormat.gridBeforeWidthType = row.rowFormat.gridBeforeWidthType;\n rowFormat.gridAfter = row.rowFormat.gridAfter;\n rowFormat.gridAfterWidth = row.rowFormat.gridAfterWidth;\n rowFormat.gridAfterWidthType = row.rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellFormat = new CellFormatHistoryInfo();\n cellFormat.columnIndex = cell.columnIndex;\n cellFormat.columnSpan = cell.cellFormat.columnSpan;\n cellFormat.preferredWidth = cell.cellFormat.preferredWidth;\n cellFormat.preferredWidthType = cell.cellFormat.preferredWidthType;\n rowFormat.cells.push(cellFormat);\n }\n this.rows.push(rowFormat);\n }\n this.tableHierarchicalIndex = this.owner.editorModule.getHierarchicalIndex(table, '0');\n };\n TableHistoryInfo.prototype.destroy = function () {\n this.tableHierarchicalIndex = undefined;\n if (this.tableHolder) {\n this.tableHolder.destroy();\n this.tableHolder = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat = null;\n }\n if (this.rows) {\n this.rows = [];\n this.rows = undefined;\n }\n };\n return TableHistoryInfo;\n}());\nexport { TableHistoryInfo };\n/**\n * @private\n */\nvar TableFormatHistoryInfo = /** @class */ (function () {\n function TableFormatHistoryInfo() {\n /* tslint:disable:no-empty */\n }\n return TableFormatHistoryInfo;\n}());\nexport { TableFormatHistoryInfo };\n/**\n * @private\n */\nvar RowFormatHistoryInfo = /** @class */ (function () {\n function RowFormatHistoryInfo() {\n this.cells = [];\n }\n return RowFormatHistoryInfo;\n}());\nexport { RowFormatHistoryInfo };\n/**\n * @private\n */\nvar CellFormatHistoryInfo = /** @class */ (function () {\n function CellFormatHistoryInfo() {\n /* tslint:disable:no-empty */\n }\n return CellFormatHistoryInfo;\n}());\nexport { CellFormatHistoryInfo };\n/**\n * @private\n */\nvar CellHistoryFormat = /** @class */ (function () {\n function CellHistoryFormat(point) {\n this.startingPoint = point; // starting point preserved to calculate the displacement on after cell resizing finished.\n }\n return CellHistoryFormat;\n}());\nexport { CellHistoryFormat };\n","import { WParagraphFormat } from '../format/paragraph-format';\nimport { WSectionFormat } from '../format/section-format';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WListFormat } from '../format/list-format';\nimport { ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { BlockWidget, ParagraphWidget, BodyWidget, TableCellWidget, TableWidget, TableRowWidget, HeaderFooterWidget } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { TextPosition, ImageFormat } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ElementBox } from '../viewer/page';\nimport { WTableFormat, WRowFormat, WCellFormat, WParagraphStyle } from '../format/index';\n/**\n * @private\n */\nvar BaseHistoryInfo = /** @class */ (function () {\n function BaseHistoryInfo(node) {\n this.ownerIn = node;\n this.viewer = node.viewer;\n this.modifiedPropertiesIn = [];\n this.modifiedNodeLength = [];\n this.removedNodesIn = [];\n }\n Object.defineProperty(BaseHistoryInfo.prototype, \"owner\", {\n //Properties\n //gets owner control\n /**\n * gets the owner control\n * @private\n */\n get: function () { return this.ownerIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"editorHistory\", {\n /**\n * gets or sets action\n * @private\n */\n get: function () {\n return this.owner.editorHistory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"action\", {\n /**\n * gets or sets action\n * @private\n */\n get: function () { return this.actionIn; },\n set: function (value) { this.actionIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"modifiedProperties\", {\n /**\n * gets modified properties\n * @returns Object\n * @private\n */\n get: function () { return this.modifiedPropertiesIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"removedNodes\", {\n /**\n * @private\n */\n get: function () {\n return this.removedNodesIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionStart\", {\n /**\n * Gets or Sets the selection start\n * @private\n */\n //gets or sets selection start\n get: function () { return this.selectionStartIn; },\n set: function (value) { this.selectionStartIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionEnd\", {\n /**\n * Gets or Sets the selection end\n * @private\n */\n get: function () { return this.selectionEndIn; },\n set: function (value) { this.selectionEndIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"insertPosition\", {\n /**\n * Gets or sets the insert position\n * @private\n */\n get: function () { return this.insertPositionIn; },\n set: function (value) { this.insertPositionIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"endPosition\", {\n /**\n * Gets or sets end position\n * @private\n */\n get: function () { return this.endPositionIn; },\n set: function (value) { this.endPositionIn = value; },\n enumerable: true,\n configurable: true\n });\n /**\n * Update the selection\n * @param selection\n * @private\n */\n BaseHistoryInfo.prototype.updateSelection = function () {\n var blockInfo = this.owner.editorModule.getParagraphInfo(this.owner.selection.start);\n this.selectionStart = this.owner.editorModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.owner.editorModule.getParagraphInfo(this.owner.selection.end);\n this.selectionEnd = this.owner.editorModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n };\n BaseHistoryInfo.prototype.setBookmarkInfo = function (bookmark) {\n this.removedNodes.push({ 'bookmark': bookmark, 'startIndex': bookmark.indexInOwner, 'endIndex': bookmark.reference.indexInOwner });\n };\n BaseHistoryInfo.prototype.revertBookmark = function () {\n var bookmarkInfo = this.removedNodes[0];\n var bookmark = bookmarkInfo.bookmark;\n if (this.editorHistory.isUndoing) {\n this.viewer.bookmarks.add(bookmark.name, bookmark);\n bookmark.line.children.splice(bookmarkInfo.startIndex, 0, bookmark);\n bookmark.reference.line.children.splice(bookmarkInfo.endIndex, 0, bookmark.reference);\n this.editorHistory.recordChanges(this);\n }\n else {\n this.owner.editorModule.deleteBookmarkInternal(bookmark);\n this.editorHistory.undoStack.push(this);\n }\n };\n /**\n * Reverts this instance\n * @private\n */\n // tslint:disable: max-func-body-length\n BaseHistoryInfo.prototype.revert = function () {\n if (this.action === 'DeleteBookmark') {\n this.revertBookmark();\n return;\n }\n this.owner.isShiftingEnabled = true;\n var selectionStartTextPosition = undefined;\n var selectionEndTextPosition = undefined;\n var start = this.selectionStart;\n var end = this.selectionEnd;\n var isForwardSelection = TextPosition.isForwardSelection(start, end);\n if (this.modifiedProperties.length > 0 || this.action === 'Selection' || this.action === 'ClearCharacterFormat'\n || this.action === 'ClearParagraphFormat') {\n selectionStartTextPosition = this.getTextPosition(start);\n selectionEndTextPosition = this.getTextPosition(end);\n this.revertModifiedProperties(selectionStartTextPosition, selectionEndTextPosition);\n }\n else {\n var deletedNodes = this.removedNodes;\n this.removedNodesIn = [];\n var isForward = TextPosition.isForwardSelection(this.insertPosition, this.endPosition);\n var insertTextPosition = this.getTextPosition(isForward ? this.insertPosition : this.endPosition);\n var endTextPosition = this.getTextPosition(isForward ? this.endPosition : this.insertPosition);\n if (insertTextPosition.isAtSamePosition(endTextPosition)) {\n this.owner.selection.selectContent(insertTextPosition, true);\n }\n else {\n this.owner.selection.selectPosition(insertTextPosition, endTextPosition);\n }\n if (this.action === 'InsertHyperlink' && this.editorHistory.isRedoing) {\n var fieldBegin = this.owner.selection.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n var offset = (fieldBegin.line).getOffset(fieldBegin, 0);\n insertTextPosition.setPositionParagraph(fieldBegin.line, offset);\n this.owner.selection.start.setPositionInternal(insertTextPosition);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n endTextPosition.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n }\n }\n this.editorHistory.currentBaseHistoryInfo = this;\n this.selectionStart = this.insertPosition;\n this.insertPosition = undefined;\n this.selectionEnd = this.endPosition;\n this.endPosition = undefined;\n var isRemoveContent = false;\n if (!insertTextPosition.isAtSamePosition(endTextPosition)) {\n isRemoveContent = this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'ClearCells'\n || this.action === 'DeleteCells';\n if (!(isRemoveContent) && this.action !== 'MergeCells' && this.action !== 'InsertRowAbove'\n && this.action !== 'InsertRowBelow' && this.action !== 'InsertColumnLeft'\n && this.action !== 'InsertColumnRight' && this.action !== 'Borders'\n && this.action !== 'DeleteTable' && this.action !== 'DeleteColumn' && this.action !== 'DeleteRow') {\n this.owner.selection.end.setPositionInternal(endTextPosition);\n if (!this.owner.selection.isEmpty) {\n if (this.editorHistory.isRedoing) {\n this.owner.editorModule.removeSelectedContents(this.owner.selection);\n }\n else {\n this.owner.editorModule.deleteSelectedContents(this.owner.selection, true);\n }\n }\n }\n }\n var isRedoAction = this.editorHistory.isRedoing && !isRemoveContent;\n this.revertModifiedNodes(deletedNodes, isRedoAction, isForwardSelection ? start : end, start === end);\n if (isRemoveContent) {\n this.removeContent(insertTextPosition, endTextPosition);\n }\n //this.owner.editorModule.reLayout(this.viewer.selection);\n }\n var isSelectionChanged = false;\n if ((this.editorHistory.isUndoing && isNullOrUndefined(this.editorHistory.currentHistoryInfo)) ||\n ((this.action === 'InsertRowAbove' || this.action === 'Borders' || this.action === 'InsertRowBelow'\n || this.action === 'InsertColumnLeft'\n || this.action === 'InsertColumnRight') && (this.editorHistory.isRedoing\n || this.editorHistory.currentHistoryInfo.action === 'Paste'))) {\n selectionStartTextPosition = this.getTextPosition(start);\n selectionEndTextPosition = this.getTextPosition(end);\n this.owner.selection.selectRange(selectionStartTextPosition, selectionEndTextPosition);\n isSelectionChanged = true;\n }\n // Updates insert position of history info instance.\n this.insertPosition = start;\n this.endPosition = end;\n this.owner.editorModule.reLayout(this.owner.selection, this.owner.selection.isEmpty);\n if (isSelectionChanged) {\n this.viewer.scrollToPosition(this.owner.selection.start, this.owner.selection.end);\n }\n this.highlightListText();\n };\n BaseHistoryInfo.prototype.highlightListText = function () {\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n if (this.action === 'ListCharacterFormat' || (this.editorHistory.currentHistoryInfo.action === 'ListSelect' && this.action === 'ListFormat')) {\n var selectionStartTextPosition = this.getTextPosition(this.selectionStart);\n var widget = selectionStartTextPosition.currentWidget;\n this.viewer.selection.highlightListText(widget);\n }\n }\n };\n BaseHistoryInfo.prototype.removeContent = function (insertTextPosition, endTextPosition) {\n //If the base parent of the insert text position and end text position is null \n //then the paragraphs already removed.\n //Example scenario: In table editing that is delete cells operation \n // we will backed up the entire table ad it will be replaced on undo operation.\n //At that time if the positions are in table \n //which is already replaced in undo (revert modified nodes method) then the base parent of the paragraph will be null.\n //So again, selecting the content and deleting is unnecessary\n // and it will cause improper position updates and null reference exceptions. \n if ((!isNullOrUndefined(insertTextPosition.paragraph.containerWidget) &&\n insertTextPosition.paragraph.containerWidget instanceof BodyWidget &&\n (!isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && endTextPosition.paragraph.containerWidget instanceof BodyWidget))\n || (!isNullOrUndefined(insertTextPosition.paragraph.containerWidget)\n && !isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && insertTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && endTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && !isNullOrUndefined(insertTextPosition.paragraph.bodyWidget))) {\n //Removes if any empty paragraph is added while delete.\n this.owner.selection.selectRange(insertTextPosition, endTextPosition);\n var isDelete = (this.action === 'BackSpace') ? true : false;\n this.owner.editorModule.deleteSelectedContents(this.owner.selection, isDelete);\n }\n };\n BaseHistoryInfo.prototype.revertModifiedProperties = function (start, end) {\n if (this.action === 'CellFormat' || this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.owner.isShiftingEnabled = false;\n }\n this.owner.selection.selectRange(start, end);\n if (this.action === 'RowResizing' || this.action === 'CellResizing') {\n this.revertResizing();\n }\n else if (this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.revertTableDialogProperties(this.action);\n }\n else if (this.action !== 'Selection') {\n this.revertProperties();\n }\n };\n // Redoes the Action\n BaseHistoryInfo.prototype.redoAction = function () {\n var editor = this.owner.editorModule;\n switch (this.action) {\n case 'BackSpace':\n editor.singleBackspace(this.owner.selection, true);\n break;\n case 'Delete':\n editor.singleDelete(this.owner.selection, true);\n break;\n case 'DeleteTable':\n editor.deleteTable();\n break;\n case 'DeleteColumn':\n editor.deleteColumn();\n break;\n case 'DeleteRow':\n editor.deleteRow();\n break;\n case 'MergeCells':\n editor.mergeSelectedCellsInTable();\n break;\n case 'InsertRowAbove':\n editor.insertRow(true);\n break;\n case 'InsertRowBelow':\n editor.insertRow(false);\n break;\n case 'InsertColumnLeft':\n editor.insertColumn(true);\n break;\n case 'InsertColumnRight':\n editor.insertColumn(true);\n break;\n case 'SectionBreak':\n editor.insertSection(this.owner.selection, true);\n break;\n }\n };\n /**\n * Revert the modified nodes\n * @param {WNode[]} deletedNodes\n * @param {boolean} isRedoAction\n * @param {string} start\n * @param {boolean} isEmptySelection\n */\n BaseHistoryInfo.prototype.revertModifiedNodes = function (deletedNodes, isRedoAction, start, isEmptySelection) {\n if (isRedoAction && (this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'DeleteTable'\n || this.action === 'DeleteColumn' || this.action === 'DeleteRow' || this.action === 'InsertRowAbove' ||\n this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft' || this.action === 'InsertColumnRight'\n || this.action === 'MergeCells' || this.action === 'SectionBreak')) {\n this.redoAction();\n if (this.action === 'SectionBreak') {\n return;\n }\n }\n if (deletedNodes.length > 0) {\n if ((this.editorHistory.isUndoing && (this.action === 'DeleteCells' || this.action === 'DeleteColumn'\n || this.action === 'DeleteRow' || this.action === 'MergeCells'))\n || (this.action === 'InsertRowAbove' || this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft'\n || this.action === 'ClearCells' || this.action === 'InsertColumnRight' || this.action === 'Borders')) {\n var insertIndex = this.selectionStart;\n var block = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n var lastNode = deletedNodes[deletedNodes.length - 1];\n if ((block instanceof TableWidget || block.previousRenderedWidget instanceof TableWidget || block.isInsideTable)\n && lastNode instanceof TableWidget) {\n if (block instanceof ParagraphWidget && !block.isInsideTable) {\n block = block.previousRenderedWidget;\n }\n block = block.combineWidget(this.viewer);\n this.owner.editorModule.insertTableInternal(block, lastNode, false);\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n }\n else if (lastNode instanceof TableWidget) {\n this.owner.editorModule.insertBlock(lastNode);\n }\n }\n else {\n var initialStart = start;\n var block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n // initialStart = blockObj.position;\n if (deletedNodes.length > 0 && (this.action === 'BackSpace' && isEmptySelection\n || (!(block instanceof TableWidget) && !(block instanceof HeaderFooterWidget)))) {\n var lastNode = deletedNodes[0];\n if (this.action === 'SectionBreak' && lastNode instanceof BodyWidget ||\n !isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak') {\n lastNode = deletedNodes[1];\n }\n if (lastNode instanceof ParagraphWidget && this.owner.selection.start.offset > 0) {\n this.owner.editorModule.insertNewParagraphWidget(lastNode, true);\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n if (isNullOrUndefined(block)) {\n // tslint:disable-next-line:max-line-length\n var nextBlock = this.viewer.selection.getNextParagraphBlock(lastNode.getSplitWidgets().pop());\n this.owner.selection.getNextRenderedBlock(lastNode);\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selection.selectParagraph(lastNode, true);\n }\n }\n }\n if (lastNode instanceof TableWidget && this.owner.selection.start.offset > 0) {\n var firstBlock = deletedNodes[deletedNodes.length - 1];\n if (firstBlock instanceof ParagraphWidget) {\n this.owner.editorModule.insertNewParagraphWidget(firstBlock, true);\n deletedNodes.splice(deletedNodes.indexOf(firstBlock), 1);\n if (isNullOrUndefined(block)) {\n // tslint:disable-next-line:max-line-length\n var nextBlock = this.viewer.selection.getNextParagraphBlock(firstBlock.getSplitWidgets().pop());\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selection.selectParagraph(firstBlock, true);\n }\n }\n }\n }\n }\n if (deletedNodes.length > 0) {\n var firstNode = deletedNodes[deletedNodes.length - 1];\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n if (firstNode instanceof TableWidget) {\n this.owner.editorModule.insertTableInternal(block, firstNode, true);\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n this.insertPosition = start;\n var nextWidget = firstNode.getSplitWidgets().pop();\n if (nextWidget.nextRenderedWidget instanceof TableWidget) {\n block = nextWidget.nextRenderedWidget;\n }\n else {\n initialStart = start;\n block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n }\n }\n }\n //Checks if first node is paragraph and current insert position is paragraph end.\n // tslint:disable-next-line:max-line-length\n if (firstNode instanceof ParagraphWidget && this.owner.selection.start.offset > 0\n && this.owner.selection.start.offset === this.owner.selection.getLineLength(this.owner.selection.start.paragraph.lastChild)) {\n var editor = this.owner.editorModule;\n editor.insertNewParagraphWidget(firstNode, false);\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n //Removes the intermediate empty paragraph instance.\n if (this.action !== 'Paste') {\n editor.removeBlock(this.owner.selection.start.paragraph);\n }\n // tslint:disable-next-line:max-line-length\n var paragraph = this.viewer.selection.getNextParagraphBlock(firstNode.getSplitWidgets().pop());\n if (!isNullOrUndefined(paragraph)) {\n this.owner.selection.selectParagraph(paragraph, true);\n }\n }\n else if (deletedNodes[0] instanceof TableWidget && deletedNodes.length !== 1) {\n var nextNode = deletedNodes[1];\n if (nextNode instanceof ParagraphWidget && nextNode.isEmpty()) {\n deletedNodes.splice(deletedNodes.indexOf(nextNode), 1);\n }\n }\n }\n if (deletedNodes.length > 0) {\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n }\n this.insertRemovedNodes(deletedNodes, block);\n }\n }\n }\n };\n BaseHistoryInfo.prototype.insertRemovedNodes = function (deletedNodes, block) {\n for (var i = deletedNodes.length - 1, index = 0; i > -1; i--) {\n var node = deletedNodes[i];\n if (node instanceof ElementBox) {\n this.owner.editorModule.insertInlineInSelection(this.owner.selection, node);\n }\n else if (node instanceof BlockWidget) {\n if (node instanceof TableRowWidget) {\n if (block instanceof TableWidget) {\n block.childWidgets.splice(index, 0, node);\n this.owner.editorModule.updateNextBlocksIndex(node, true);\n if (i === 0 || !(deletedNodes[i - 1] instanceof TableRowWidget)) {\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n }\n }\n }\n else if (block instanceof TableWidget) {\n this.owner.editorModule.insertBlockTable(this.owner.selection, node, block);\n }\n else {\n this.owner.editorModule.insertBlock(node);\n }\n }\n else if (node instanceof BodyWidget) {\n this.owner.editorModule.insertSection(this.owner.selection, false);\n }\n }\n deletedNodes = [];\n };\n BaseHistoryInfo.prototype.revertResizing = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n if (this.action === 'RowResizing') {\n if (this.modifiedProperties[0] instanceof RowHistoryFormat) {\n // tslint:disable-next-line:max-line-length\n this.modifiedProperties[0].revertChanges(this.editorHistory.isRedoing, this.owner);\n }\n }\n else {\n if (this.modifiedProperties[0] instanceof TableHistoryInfo) {\n //selected cell resizing the condition checks done based on the selected widgets only. so need to highlight the selection.\n if (this.owner.selection.selectedWidgets.length === 0) {\n this.owner.selection.highlightSelection(true);\n }\n var prevTableHistoryInfo = this.modifiedProperties[0];\n var position = prevTableHistoryInfo.tableHierarchicalIndex;\n var block = this.owner.editorModule.getBlock({ index: position }).node;\n if (block instanceof TableWidget) {\n var tableResize = this.owner.editorModule.tableResize;\n this.owner.editor.setOffsetValue(this.owner.selection);\n block = block.combineWidget(this.owner.viewer);\n tableResize.currentResizingTable = block;\n this.modifiedProperties.splice(0, 1);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var tableHistoryInfoCurrent = new TableHistoryInfo(block, this.owner);\n this.modifiedProperties.splice(0, 0, tableHistoryInfoCurrent);\n this.owner.isLayoutEnabled = false;\n tableResize.applyProperties(tableResize.currentResizingTable, prevTableHistoryInfo);\n tableResize.currentResizingTable.isGridUpdated = true;\n this.owner.isLayoutEnabled = true;\n tableResize.updateGridValue(tableResize.currentResizingTable, false);\n prevTableHistoryInfo.destroy();\n prevTableHistoryInfo = undefined;\n }\n }\n }\n }\n };\n BaseHistoryInfo.prototype.revertTableDialogProperties = function (action) {\n this.owner.isShiftingEnabled = false;\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n if (action === 'CellOptions') {\n var selection = this.owner.selection;\n var cellFormat = this.modifiedProperties[0];\n this.owner.editorModule.updateCellMargins(selection, cellFormat);\n }\n else if (action === 'TableOptions') {\n this.owner.tableOptionsDialogModule.applyTableOptionsHelper(this.modifiedProperties[0]);\n }\n this.currentPropertyIndex = 0;\n this.owner.isShiftingEnabled = true;\n };\n BaseHistoryInfo.prototype.getTextPosition = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var blockInfo = this.owner.editorModule.getParagraph({ index: hierarchicalIndex });\n var lineInfo = this.owner.editorModule.getLineInfo(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n return textPosition;\n };\n /**\n * Add modified properties for section format\n * @param {WSectionFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForSection = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var modifiedProperties = this.modifiedProperties;\n var previousFormat = (this.currentPropertyIndex < modifiedProperties.length ?\n modifiedProperties[this.currentPropertyIndex] : modifiedProperties[modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n else {\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(format);\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WSectionFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n /**\n * Add the modified properties for character format\n * @param {WCharacterFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length \n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n var skipRemove = false;\n if (format.ownerBase instanceof ElementBox) {\n var prevLength = this.modifiedNodeLength[this.currentPropertyIndex];\n if (format.ownerBase.length < prevLength) {\n skipRemove = true;\n this.modifiedNodeLength[this.currentPropertyIndex] = format.ownerBase.length;\n this.modifiedNodeLength.splice(this.currentPropertyIndex + 1, 0, prevLength - format.ownerBase.length);\n //Adds a copy of character format at next position for splitted inline.\n var nextFormat = new WCharacterFormat(undefined);\n nextFormat.copyFormat(previousFormat);\n this.modifiedProperties.splice(this.currentPropertyIndex + 1, 0, nextFormat);\n }\n }\n if (this.action === 'ClearCharacterFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n if (!skipRemove) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n }\n else {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WCharacterFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n if (format.ownerBase instanceof ElementBox) {\n this.modifiedNodeLength.push(format.ownerBase.length);\n }\n else {\n this.modifiedNodeLength.push(0);\n }\n }\n return value;\n };\n /**\n * Add the modified properties for paragraph format\n * @param {WParagraphFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForParagraphFormat = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.action === 'ClearParagraphFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'listFormat') {\n value = new WParagraphFormat(undefined);\n value.copyFormat(previousFormat);\n previousFormat.listFormat = new WListFormat();\n previousFormat.listFormat.copyFormat(format.listFormat);\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'styleName') {\n if (!isNullOrUndefined(previousFormat.baseStyle)) {\n value = new WParagraphStyle();\n value.copyStyle(previousFormat.baseStyle);\n this.currentPropertyIndex++;\n return value;\n }\n else {\n return undefined;\n }\n }\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WParagraphFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForContinueNumbering = function (paragraphFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = paragraphFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = paragraphFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n var currentFormat = new WParagraphFormat();\n currentFormat.copyFormat(paragraphFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * @param listFormat\n * @param value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForRestartNumbering = function (listFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var listId = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = listId;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = listFormat.listId;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = listFormat.listId;\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n this.modifiedProperties.push(listFormat.listId);\n }\n return value;\n };\n /**\n * Add modified properties for list format\n * @param {WListLevel} listLevel\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForList = function (listLevel) {\n var value;\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousLevel = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousLevel;\n previousLevel = new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel));\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = previousLevel;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = previousLevel;\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel)));\n value = listLevel;\n }\n return value;\n };\n /**\n * Revert the properties\n * @param {SelectionRange} selectionRange\n */\n BaseHistoryInfo.prototype.revertProperties = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n var property = this.getProperty();\n this.viewer.owner.editorModule.setOffsetValue(this.viewer.selection);\n if (this.action === 'ClearCharacterFormat' || this.modifiedProperties[0] instanceof WCharacterFormat) {\n if (this.action === 'ListCharacterFormat') {\n this.owner.editorModule.updateListCharacterFormat(this.viewer.selection, property, undefined);\n return;\n }\n this.owner.editorModule.updateSelectionCharacterFormatting(property, undefined, false);\n }\n else if (this.action === 'ClearParagraphFormat' || this.modifiedProperties[0] instanceof WParagraphFormat) {\n if (this.action === 'ContinueNumbering') {\n // tslint:disable-next-line:max-line-length\n this.owner.editorModule.revertContinueNumbering(this.owner.selection, this.modifiedProperties[0]);\n return;\n }\n if (this.action === 'StyleName' && this.modifiedProperties[0] instanceof WParagraphFormat) {\n // tslint:disable-next-line:max-line-length\n this.owner.editorModule.updateSelectionParagraphFormatting(property, this.modifiedProperties[0].baseStyle, false);\n return;\n }\n this.owner.editorModule.updateSelectionParagraphFormatting(property, undefined, false);\n }\n else if (this.modifiedProperties[0] instanceof WSectionFormat) {\n this.owner.editorModule.updateSectionFormat(property, undefined);\n }\n else if (this.action === 'RestartNumbering') {\n this.owner.editorModule.restartListAtInternal(this.owner.selection, this.modifiedProperties[0]);\n return;\n }\n else if (this.modifiedProperties[0] instanceof ImageFormat) {\n this.owner.selection.updateImageSize(this.modifiedProperties[0]);\n }\n else if (this.modifiedProperties[0] instanceof ModifiedLevel) {\n var modified = new Dictionary();\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var modifiedLevel = this.modifiedProperties[i];\n // modified.modifiedLevels.add(modifiedLevel.ownerListLevel.levelNumber, modifiedLevel);\n modified.add(i, modifiedLevel);\n }\n this.editorHistory.updateListChanges(modified);\n modified.destroy();\n modified = undefined;\n }\n else if (this.modifiedProperties[0] instanceof WTableFormat) {\n this.owner.editorModule.updateTableFormat(this.owner.selection, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WCellFormat) {\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.updateCellFormat(this.owner.selection, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WRowFormat) {\n this.owner.editorModule.updateRowFormat(this.owner.selection, property, undefined);\n }\n this.currentPropertyIndex = 0;\n if (this.action === 'ClearCharacterFormat' || this.action === 'ClearParagraphFormat') {\n this.owner.editorModule.getOffsetValue(this.viewer.selection);\n }\n };\n /**\n * Add modified properties for cell options dialog\n * @param {WCellFormat} format\n * @param {WTable} table\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedCellOptions = function (applyFormat, format, table) {\n var currentFormat;\n if (isNullOrUndefined(applyFormat.bottomMargin) && isNullOrUndefined(applyFormat.topMargin)\n && isNullOrUndefined(applyFormat.rightMargin) && isNullOrUndefined(applyFormat.leftMargin)) {\n currentFormat = this.copyCellOptions(table.tableFormat);\n }\n else {\n currentFormat = this.copyCellOptions(applyFormat);\n }\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n format = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = this.copyCellOptions(applyFormat);\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = this.copyCellOptions(applyFormat);\n }\n this.currentPropertyIndex++;\n return format;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n return format;\n };\n BaseHistoryInfo.prototype.copyCellOptions = function (format) {\n var cellFormat = new WCellFormat();\n cellFormat.topMargin = format.topMargin;\n cellFormat.rightMargin = format.rightMargin;\n cellFormat.bottomMargin = format.bottomMargin;\n cellFormat.leftMargin = format.leftMargin;\n return cellFormat;\n };\n /**\n * Add modified properties for cell options dialog\n * @param {WTableFormat} format\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedTableOptions = function (format) {\n var currentFormat = this.copyTableOptions(format);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length \n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1, currentFormat);\n }\n else {\n this.modifiedProperties.splice(this.modifiedProperties.length - 1, 1, currentFormat);\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n };\n BaseHistoryInfo.prototype.copyTableOptions = function (format) {\n var tableFormat = new WTableFormat();\n tableFormat.topMargin = format.topMargin;\n tableFormat.rightMargin = format.rightMargin;\n tableFormat.bottomMargin = format.bottomMargin;\n tableFormat.leftMargin = format.leftMargin;\n tableFormat.cellSpacing = format.cellSpacing;\n return tableFormat;\n };\n BaseHistoryInfo.prototype.getProperty = function () {\n switch (this.action) {\n case 'Bold':\n return 'bold';\n case 'Italic':\n return 'italic';\n case 'FontColor':\n return 'fontColor';\n case 'FontFamily':\n return 'fontFamily';\n case 'FontSize':\n return 'fontSize';\n case 'HighlightColor':\n return 'highlightColor';\n case 'BaselineAlignment':\n return 'baselineAlignment';\n case 'Strikethrough':\n return 'strikethrough';\n case 'Underline':\n return 'underline';\n case 'AfterSpacing':\n return 'afterSpacing';\n case 'BeforeSpacing':\n return 'beforeSpacing';\n case 'LeftIndent':\n return 'leftIndent';\n case 'RightIndent':\n return 'rightIndent';\n case 'FirstLineIndent':\n return 'firstLineIndent';\n case 'LineSpacingType':\n return 'lineSpacingType';\n case 'LineSpacing':\n return 'lineSpacing';\n case 'TextAlignment':\n return 'textAlignment';\n case 'ListFormat':\n return 'listFormat';\n case 'PageHeight':\n return 'pageHeight';\n case 'PageWidth':\n return 'pageWidth';\n case 'TableAlignment':\n return 'tableAlignment';\n case 'TableLeftIndent':\n return 'leftIndent';\n case 'DefaultCellSpacing':\n return 'cellSpacing';\n case 'LeftMargin':\n case 'CellLeftMargin':\n case 'DefaultCellLeftMargin':\n return 'leftMargin';\n case 'RightMargin':\n case 'CellRightMargin':\n case 'DefaultCellRightMargin':\n return 'rightMargin';\n case 'TopMargin':\n case 'CellTopMargin':\n case 'DefaultCellTopMargin':\n return 'topMargin';\n case 'BottomMargin':\n case 'CellBottomMargin':\n case 'DefaultCellBottomMargin':\n return 'bottomMargin';\n case 'CellContentVerticalAlignment':\n return 'verticalAlignment';\n case 'RowHeight':\n return 'height';\n case 'RowHeightType':\n return 'heightType';\n case 'RowHeader':\n return 'isHeader';\n case 'AllowBreakAcrossPages':\n return 'allowBreakAcrossPages';\n case 'TablePreferredWidth':\n case 'CellPreferredWidth':\n return 'preferredWidth';\n case 'TablePreferredWidthType':\n case 'CellPreferredWidthType':\n return 'preferredWidthType';\n case 'Shading':\n return 'shading';\n case 'StyleName':\n return 'styleName';\n }\n return undefined;\n };\n BaseHistoryInfo.prototype.getCharacterPropertyValue = function (property, modifiedProperty) {\n var value;\n if (property === 'bold') {\n value = modifiedProperty.bold;\n }\n else if (property === 'italic') {\n value = modifiedProperty.italic;\n }\n else if (property === 'fontColor') {\n value = modifiedProperty.fontColor;\n }\n else if (property === 'fontFamily') {\n value = modifiedProperty.fontFamily;\n }\n else if (property === 'fontSize') {\n value = modifiedProperty.fontSize;\n }\n else if (property === 'highlightColor') {\n value = modifiedProperty.highlightColor;\n }\n else if (property === 'baselineAlignment') {\n value = modifiedProperty.baselineAlignment;\n }\n else if (property === 'strikethrough') {\n value = modifiedProperty.strikethrough;\n }\n else if (property === 'underline') {\n value = modifiedProperty.underline;\n }\n return value;\n };\n /**\n * Add modified properties for table format\n * @param {WTableFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedTableProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousTableFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousTableFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousTableFormat.shading;\n }\n else {\n value = previousTableFormat.getPropertyValue(property);\n }\n previousTableFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WTableFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * Add modified properties for row format\n * @param {WRowFormat} rowFormat\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedRowProperties = function (rowFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = rowFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = rowFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(rowFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WRowFormat();\n currentFormat.copyFormat(rowFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * Add modified properties for cell format\n * @param {WCellFormat} cellFormat\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedCellProperties = function (cellFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = cellFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = cellFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousFormat.shading;\n }\n else {\n value = previousFormat.getPropertyValue(property);\n }\n previousFormat.copyFormat(cellFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WCellFormat();\n currentFormat.copyFormat(cellFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.destroy = function () {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.insertPosition = undefined;\n this.endPosition = undefined;\n if (!isNullOrUndefined(this.modifiedNodeLength)) {\n this.modifiedNodeLength = [];\n this.modifiedNodeLength = undefined;\n }\n if (!isNullOrUndefined(this.modifiedProperties)) {\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var property = this.modifiedProperties[i];\n if (property instanceof WCharacterFormat) {\n property.destroy();\n }\n else if (property instanceof WParagraphFormat) {\n property.destroy();\n }\n else if (property instanceof WSectionFormat) {\n property.destroy();\n }\n else if (property instanceof ModifiedLevel) {\n property.destroy();\n }\n this.modifiedProperties.splice(this.modifiedProperties.indexOf(property), 1);\n i--;\n }\n this.modifiedPropertiesIn = undefined;\n }\n if (!isNullOrUndefined(this.removedNodes)) {\n for (var i = 0; i < this.removedNodes.length; i++) {\n var node = this.removedNodes[i];\n if (node instanceof ParagraphWidget) {\n node.destroyInternal(this.viewer);\n }\n else if (node instanceof ElementBox) {\n node.destroy();\n }\n this.removedNodes.splice(this.removedNodes.indexOf(node), 1);\n i--;\n }\n this.removedNodesIn = undefined;\n }\n this.ownerIn = undefined;\n };\n return BaseHistoryInfo;\n}());\nexport { BaseHistoryInfo };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { PageLayoutViewer } from '../index';\nimport { Dictionary } from '../../base/dictionary';\nimport { ImageFormat } from '../selection/selection-helper';\nimport { Point, HelperMethods } from './editor-helper';\nimport { BaseHistoryInfo } from '../editor-history/base-history-info';\n/**\n * Image resizer implementation.\n */\nvar ImageResizer = /** @class */ (function () {\n /**\n * Constructor for image resizer module.\n * @param {DocumentEditor} node\n * @param {LayoutViewer} viewer\n * @private\n */\n function ImageResizer(node, viewer) {\n /**\n * @private\n */\n this.resizeContainerDiv = undefined;\n /**\n * @private\n */\n this.topLeftRect = undefined;\n /**\n * @private\n */\n this.topMiddleRect = undefined;\n /**\n * @private\n */\n this.topRightRect = undefined;\n /**\n * @private\n */\n this.bottomLeftRect = undefined;\n /**\n * @private\n */\n this.bottomMiddleRect = undefined;\n /**\n * @private\n */\n this.bottomRightRect = undefined;\n /**\n * @private\n */\n this.leftMiddleRect = undefined;\n /**\n * @private\n */\n this.rightMiddleRect = undefined;\n /**\n * @private\n */\n this.topLeftRectParent = undefined;\n /**\n * @private\n */\n this.topMiddleRectParent = undefined;\n /**\n * @private\n */\n this.topRightRectParent = undefined;\n /**\n * @private\n */\n this.bottomLeftRectParent = undefined;\n /**\n * @private\n */\n this.bottomMiddleRectParent = undefined;\n /**\n * @private\n */\n this.bottomRightRectParent = undefined;\n /**\n * @private\n */\n this.leftMiddleRectParent = undefined;\n /**\n * @private\n */\n this.rightMiddleRectParent = undefined;\n /**\n * @private\n */\n this.resizeMarkSizeIn = 7;\n /**\n * @private\n */\n this.selectedImageWidget = undefined;\n /**\n * @private\n */\n this.baseHistoryInfo = undefined;\n /**\n * @private\n */\n this.isImageResizing = false;\n /**\n * @private\n */\n this.isImageResizerVisible = false;\n /**\n * @private\n */\n this.isImageMoveToNextPage = false;\n /**\n * @private\n */\n this.selectedResizeElement = undefined;\n /**\n * @private\n */\n this.topValue = undefined;\n /**\n * @private\n */\n this.leftValue = undefined;\n this.owner = node;\n this.selectedImageWidget = new Dictionary();\n this.viewer = viewer;\n this.imageResizerPoints = new ImageResizingPoints();\n if (isNullOrUndefined(this.imageResizerDiv) && this.viewer && this.viewer.pageContainer) {\n this.initializeImageResizer();\n }\n }\n Object.defineProperty(ImageResizer.prototype, \"currentImageElementBox\", {\n /**\n * Gets or Sets the current image element box.\n * @private\n */\n get: function () {\n return this.currentImageElementBoxIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.currentImageElementBoxIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"resizeMarkSize\", {\n /**\n * Gets or Sets the resize mark size.\n * @private\n */\n get: function () {\n return this.resizeMarkSizeIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.resizeMarkSizeIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets module name.\n */\n ImageResizer.prototype.getModuleName = function () {\n return 'ImageResizer';\n };\n //Image Resizing Methods\n /**\n * Sets image resizer position.\n * @param {number} x - Specifies for image resizer left value.\n * @param {number} y - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @private\n */\n ImageResizer.prototype.setImageResizerPositions = function (x, y, width, height) {\n this.imageResizerDivElement.style.top = y.toString() + 'px';\n this.imageResizerDivElement.style.left = x.toString() + 'px';\n this.imageResizerDivElement.style.borderWidth = '0px';\n this.imageResizerDivElement.style.height = height + 'px';\n this.imageResizerDivElement.style.width = width + 'px';\n this.imageResizerDivElement.style.backgroundColor = 'transparent';\n this.imageResizerDivElement.style.overflow = 'hidden';\n this.imageResizerDivElement.style.position = 'absolute';\n };\n /**\n * Creates image resizer DOM element.\n * @private\n */\n ImageResizer.prototype.initializeImageResizer = function () {\n this.imageResizerDivElement = document.createElement('div');\n this.imageResizerDivElement.style.zIndex = '1';\n this.imageResizerDivElement.style.display = 'none';\n this.viewer.pageContainer.appendChild(this.imageResizerDivElement);\n };\n /**\n * Position an image resizer\n * @param {ImageElementBox} elementBox - Specifies the image position.\n * @private\n */\n ImageResizer.prototype.positionImageResizer = function (elementBox) {\n this.selectedImageWidget.clear();\n // Initializes the image resizer on demand, i.e at the time of selecting an image for the first time.\n var resizeDiv;\n if (!isNullOrUndefined(this.viewer.currentPage)) {\n resizeDiv = this.imageResizerDivElement;\n }\n if (!isNullOrUndefined(resizeDiv) && !resizeDiv.contains(this.imageResizerDiv)) {\n this.imageResizerDiv = this.initResizeMarks(resizeDiv, this);\n }\n this.imageResizerDiv.style.width = (elementBox.width) + 'px';\n this.imageResizerDiv.style.height = (elementBox.height) + 'px';\n this.currentImageElementBox = elementBox;\n var lineWidget = elementBox.line;\n var top = this.viewer.selection.getTop(lineWidget) + elementBox.margin.top;\n var left = this.viewer.selection.getLeftInternal(lineWidget, elementBox, 0);\n var page = this.viewer.selection.getPage(lineWidget.paragraph);\n this.currentPage = page;\n var x = 0;\n var y = 0;\n if (!isNullOrUndefined(resizeDiv)) {\n this.imageResizerDivElement.style.display = 'block';\n resizeDiv.style.width = page.boundingRectangle.width + 'px';\n resizeDiv.style.height = page.boundingRectangle.height + 'px';\n resizeDiv.style.left = page.boundingRectangle.x + 'px';\n resizeDiv.style.top = page.boundingRectangle.y + 'px';\n resizeDiv.style.borderWidth = '0px';\n resizeDiv.style.backgroundColor = 'transparent';\n resizeDiv.style.overflow = 'hidden';\n resizeDiv.style.position = 'absolute';\n }\n var horizontalWidth = 0;\n var pageWidth = this.viewer.getPageWidth(page);\n var pagelayout = this.viewer;\n // tslint:disable-next-line:max-line-length\n horizontalWidth = parseFloat(this.imageResizerDivElement.style.width);\n x = (this.viewer.visibleBounds.width - horizontalWidth * this.viewer.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n if (pageWidth < horizontalWidth) {\n x += (horizontalWidth - pageWidth) * this.viewer.zoomFactor / 2;\n }\n // tslint:disable-next-line:max-line-length \n y = page.boundingRectangle.y * this.viewer.zoomFactor + (this.viewer.pages.indexOf(page) + 1) * 20 * (1 - this.viewer.zoomFactor);\n var currentPageDiv = this.imageResizerDivElement;\n var currentPageDivWidth = parseFloat(currentPageDiv.style.width);\n var currentPageDivHeight = parseFloat(currentPageDiv.style.height);\n var imageResizerDivWidth = parseFloat(this.imageResizerDiv.style.width);\n var imageResizerDivHeight = parseFloat(this.imageResizerDiv.style.height);\n var margin = (this.resizeMarkSize - 1) / 2;\n var width = imageResizerDivWidth + 2 * margin;\n var height = imageResizerDivHeight + 2 * margin;\n if (width > (currentPageDivWidth - left) * this.viewer.zoomFactor + margin) {\n width = (currentPageDivWidth - left) * this.viewer.zoomFactor;\n }\n if (height > (currentPageDivHeight - top) * this.viewer.zoomFactor + margin) {\n height = (currentPageDivHeight - top) * this.viewer.zoomFactor;\n }\n // if (width < imageResizerDivHeight + margin || height < imageResizerDivHeight + margin) {\n // }\n // tslint:disable-next-line:max-line-length\n this.imageResizerDivElement.style.width = parseInt(this.imageResizerDivElement.style.width.replace('px', ''), 10) * this.viewer.zoomFactor + 'px';\n this.imageResizerDivElement.style.height = parseInt(this.imageResizerDivElement.style.height.replace('px', ''), 10) * this.viewer.zoomFactor + 'px';\n height = this.viewer.render.getScaledValue(elementBox.height);\n width = this.viewer.render.getScaledValue(elementBox.width);\n left = this.viewer.render.getScaledValue(left);\n top = this.viewer.render.getScaledValue(top);\n this.setImageResizerPosition(left, top, width, height, this);\n if (!this.selectedImageWidget.containsKey(lineWidget)) {\n var selectedImageInfo = new SelectedImageInfo(elementBox.height, elementBox.width);\n this.selectedImageWidget.add(lineWidget, selectedImageInfo);\n }\n };\n /**\n * Shows the image resizer.\n * @private\n */\n ImageResizer.prototype.showImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = '';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = '';\n this.bottomLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = '';\n this.bottomRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = '';\n this.bottomMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = '';\n this.rightMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = '';\n this.topRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = '';\n this.topLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = '';\n this.leftMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = '';\n this.topMiddleRectParent.style.display = '';\n }\n this.isImageResizerVisible = true;\n };\n /**\n * Hides the image resizer.\n * @private\n */\n ImageResizer.prototype.hideImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = 'none';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = 'none';\n this.bottomLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = 'none';\n this.bottomRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = 'none';\n this.bottomMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = 'none';\n this.rightMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = 'none';\n this.topRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = 'none';\n this.topLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = 'none';\n this.leftMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = 'none';\n this.topMiddleRectParent.style.display = 'none';\n }\n this.isImageResizerVisible = false;\n this.currentPage = undefined;\n };\n /**\n * Initialize the resize marks.\n * @param {HTMLElement} resizeDiv - Specifies to appending resizer container div element.\n * @param {ImageResizer} imageResizer - Specifies to creating div element of each position.\n * @private\n */\n // tslint:disable:max-func-body-length\n ImageResizer.prototype.initResizeMarks = function (resizeDiv, imageResizer) {\n this.initResizeContainerDiv(imageResizer);\n resizeDiv.appendChild(imageResizer.resizeContainerDiv);\n imageResizer.topRightRectParent = document.createElement('div');\n imageResizer.topRightRectParent.style.cursor = 'ne-resize';\n imageResizer.topRightRectParent.id = this.viewer.owner.containerId + '_TopRightRectParent';\n this.applyProperties(imageResizer.topRightRectParent);\n imageResizer.topRightRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topRightRectParent);\n imageResizer.topRightRect = document.createElement('div');\n imageResizer.topRightRect.id = this.viewer.owner.containerId + '_TopRightRect';\n imageResizer.topRightRect.style.cursor = 'ne-resize';\n this.applyProperties(imageResizer.topRightRect);\n resizeDiv.appendChild(imageResizer.topRightRect);\n imageResizer.topLeftRectParent = document.createElement('div');\n imageResizer.topLeftRectParent.style.cursor = 'nw-resize';\n imageResizer.topLeftRectParent.id = this.viewer.owner.containerId + '_TopLeftRectParent';\n this.applyProperties(imageResizer.topLeftRectParent);\n imageResizer.topLeftRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topLeftRectParent);\n imageResizer.topLeftRect = document.createElement('div');\n imageResizer.topLeftRect.id = this.viewer.owner.containerId + '_TopLeftRect';\n imageResizer.topLeftRect.style.cursor = 'nw-resize';\n this.applyProperties(imageResizer.topLeftRect);\n resizeDiv.appendChild(imageResizer.topLeftRect);\n imageResizer.topMiddleRectParent = document.createElement('div');\n imageResizer.topMiddleRectParent.style.cursor = 'n-resize';\n imageResizer.topMiddleRectParent.id = this.viewer.owner.containerId + '_TopMiddleRectParent';\n this.applyProperties(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRect = document.createElement('div');\n imageResizer.topMiddleRect.id = this.viewer.owner.containerId + '_TopMiddleRect';\n imageResizer.topMiddleRect.style.cursor = 'n-resize';\n this.applyProperties(imageResizer.topMiddleRect);\n resizeDiv.appendChild(imageResizer.topMiddleRect);\n imageResizer.bottomRightRectParent = document.createElement('div');\n imageResizer.bottomRightRectParent.style.cursor = 'se-resize';\n imageResizer.bottomRightRectParent.id = this.viewer.owner.containerId + '_BottomRightRectParent';\n this.applyProperties(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRect = document.createElement('div');\n imageResizer.bottomRightRect.id = this.viewer.owner.containerId + '_BottomRightRect';\n imageResizer.bottomRightRect.style.cursor = 'se-resize';\n this.applyProperties(imageResizer.bottomRightRect);\n resizeDiv.appendChild(imageResizer.bottomRightRect);\n imageResizer.bottomLeftRectParent = document.createElement('div');\n imageResizer.bottomLeftRectParent.style.cursor = 'sw-resize';\n imageResizer.bottomLeftRectParent.id = this.viewer.owner.containerId + '_BottomLeftRectParent';\n this.applyProperties(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRect = document.createElement('div');\n imageResizer.bottomLeftRect.id = this.viewer.owner.containerId + '_BottomLeftRect';\n imageResizer.bottomLeftRect.style.cursor = 'sw-resize';\n this.applyProperties(imageResizer.bottomLeftRect);\n resizeDiv.appendChild(imageResizer.bottomLeftRect);\n imageResizer.bottomMiddleRectParent = document.createElement('div');\n imageResizer.bottomMiddleRectParent.style.cursor = 's-resize';\n imageResizer.bottomMiddleRectParent.id = this.viewer.owner.containerId + '_BottomMiddleRectParent';\n this.applyProperties(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRect = document.createElement('div');\n imageResizer.bottomMiddleRect.id = this.viewer.owner.containerId + '_BottomMiddleRect';\n imageResizer.bottomMiddleRect.style.cursor = 's-resize';\n this.applyProperties(imageResizer.bottomMiddleRect);\n resizeDiv.appendChild(imageResizer.bottomMiddleRect);\n imageResizer.rightMiddleRectParent = document.createElement('div');\n imageResizer.rightMiddleRectParent.style.cursor = 'e-resize';\n imageResizer.rightMiddleRectParent.id = this.viewer.owner.containerId + '_RightMiddleRectParent';\n this.applyProperties(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRect = document.createElement('div');\n imageResizer.rightMiddleRect.id = this.viewer.owner.containerId + '_RightMiddleRect';\n imageResizer.rightMiddleRect.style.cursor = 'e-resize';\n this.applyProperties(imageResizer.rightMiddleRect);\n resizeDiv.appendChild(imageResizer.rightMiddleRect);\n imageResizer.leftMiddleRectParent = document.createElement('div');\n imageResizer.leftMiddleRectParent.style.cursor = 'w-resize';\n imageResizer.leftMiddleRectParent.id = this.viewer.owner.containerId + '_LeftMiddleRectParent';\n this.applyProperties(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRect = document.createElement('div');\n imageResizer.leftMiddleRect.id = this.viewer.owner.containerId + '_LeftMiddleRect';\n imageResizer.leftMiddleRect.style.cursor = 'w-resize';\n this.applyProperties(imageResizer.leftMiddleRect);\n resizeDiv.appendChild(imageResizer.leftMiddleRect);\n return imageResizer.resizeContainerDiv;\n };\n /**\n * Sets the image resizer position.\n * @param {number} left - Specifies for image resizer left value.\n * @param {number} top - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @private\n */\n ImageResizer.prototype.setImageResizerPosition = function (left, top, width, height, imageResizer) {\n //Positions Updating For Image Resize Div\n imageResizer.resizeContainerDiv.style.width = width + 'px';\n imageResizer.resizeContainerDiv.style.height = height + 'px';\n imageResizer.resizeContainerDiv.style.left = left - 1 + 'px';\n imageResizer.resizeContainerDiv.style.top = top + 'px';\n //Positions Updating For Image Resizing Points\n imageResizer.topRightRect.style.left = ((left + width) - 5) + 'px';\n imageResizer.topRightRect.style.top = (top - 4) + 'px';\n imageResizer.topLeftRect.style.left = (left - 5) + 'px';\n imageResizer.topLeftRect.style.top = (top - 4) + 'px';\n imageResizer.topMiddleRect.style.left = ((parseFloat(imageResizer.topLeftRect.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRect.style.top = (top - 4) + 'px';\n imageResizer.bottomRightRect.style.left = imageResizer.topRightRect.style.left;\n imageResizer.bottomRightRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + height) + 'px';\n imageResizer.bottomLeftRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.bottomLeftRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + height) + 'px';\n imageResizer.bottomMiddleRect.style.left = imageResizer.topMiddleRect.style.left;\n imageResizer.bottomMiddleRect.style.top = (parseFloat(imageResizer.topMiddleRect.style.top) + height) + 'px';\n imageResizer.rightMiddleRect.style.left = ((left + width) - 4) + 'px';\n imageResizer.rightMiddleRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.leftMiddleRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + (height / 2)) + 'px';\n imageResizer.topRightRectParent.style.left = !this.viewer.isTouchInput ? ((left + width) - 8) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.topRightRectParent.style.top = !this.viewer.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topLeftRectParent.style.left = !this.viewer.isTouchInput ? (left - 8) + 'px' : (left - 15) + 'px';\n imageResizer.topLeftRectParent.style.top = !this.viewer.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topMiddleRectParent.style.left = ((parseFloat(imageResizer.topLeftRectParent.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRectParent.style.top = !this.viewer.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.bottomRightRectParent.style.left = imageResizer.topRightRectParent.style.left;\n imageResizer.bottomRightRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + height) + 'px';\n imageResizer.bottomLeftRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.bottomLeftRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + height) + 'px';\n imageResizer.bottomMiddleRectParent.style.left = imageResizer.topMiddleRectParent.style.left;\n imageResizer.bottomMiddleRectParent.style.top = (parseFloat(imageResizer.topMiddleRectParent.style.top) + height) + 'px';\n // tslint:disable-next-line:max-line-length \n imageResizer.rightMiddleRectParent.style.left = !this.viewer.isTouchInput ? ((left + width) - 7) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.rightMiddleRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.leftMiddleRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + (height / 2)) + 'px';\n this.setImageResizingPoints(imageResizer);\n if (this.viewer.isTouchInput) {\n this.applyPropertiesForTouch();\n }\n else {\n this.applyPropertiesForMouse();\n }\n };\n /**\n * Sets the image resizing points.\n * @param {ImageResizer} imageResizer - Specifies for position of each resizing elements.\n * @private\n */\n ImageResizer.prototype.setImageResizingPoints = function (imageResizer) {\n this.imageResizerPoints.resizeContainerDiv.x = parseFloat(imageResizer.resizeContainerDiv.style.left);\n this.imageResizerPoints.resizeContainerDiv.y = parseFloat(imageResizer.resizeContainerDiv.style.top);\n this.imageResizerPoints.bottomLeftRectParent.x = parseFloat(imageResizer.bottomLeftRectParent.style.left);\n this.imageResizerPoints.bottomLeftRectParent.y = parseFloat(imageResizer.bottomLeftRectParent.style.top);\n this.imageResizerPoints.bottomRightRectParent.x = parseFloat(imageResizer.bottomRightRectParent.style.left);\n this.imageResizerPoints.bottomRightRectParent.y = parseFloat(imageResizer.bottomRightRectParent.style.top);\n this.imageResizerPoints.bottomMiddleRectParent.x = parseFloat(imageResizer.bottomMiddleRectParent.style.left);\n this.imageResizerPoints.bottomMiddleRectParent.y = parseFloat(imageResizer.bottomMiddleRectParent.style.top);\n this.imageResizerPoints.topLeftRectParent.x = parseFloat(imageResizer.topLeftRectParent.style.left);\n this.imageResizerPoints.topLeftRectParent.y = parseFloat(imageResizer.topLeftRectParent.style.top);\n this.imageResizerPoints.topRightRectParent.x = parseFloat(imageResizer.topRightRectParent.style.left);\n this.imageResizerPoints.topRightRectParent.y = parseFloat(imageResizer.topRightRectParent.style.top);\n this.imageResizerPoints.topMiddleRectParent.x = parseFloat(imageResizer.topMiddleRectParent.style.left);\n this.imageResizerPoints.topMiddleRectParent.y = parseFloat(imageResizer.topMiddleRectParent.style.top);\n this.imageResizerPoints.leftMiddleRectParent.x = parseFloat(imageResizer.leftMiddleRectParent.style.left);\n this.imageResizerPoints.leftMiddleRectParent.y = parseFloat(imageResizer.leftMiddleRectParent.style.top);\n this.imageResizerPoints.rightMiddleRectParent.x = parseFloat(imageResizer.rightMiddleRectParent.style.left);\n this.imageResizerPoints.rightMiddleRectParent.y = parseFloat(imageResizer.rightMiddleRectParent.style.top);\n };\n /**\n * Initialize the resize container div element.\n * @param {ImageResizer} imageResizer - Specifies for creating resize container div element.\n * @private\n */\n ImageResizer.prototype.initResizeContainerDiv = function (imageResizer) {\n imageResizer.resizeContainerDiv = document.createElement('div');\n imageResizer.resizeContainerDiv.id = this.viewer.owner.containerId + '_ResizeDivElement';\n imageResizer.resizeContainerDiv.style.position = 'absolute';\n imageResizer.resizeContainerDiv.style.border = '1px solid #bfbfbf';\n imageResizer.resizeContainerDiv.style.zIndex = '30';\n imageResizer.resizeContainerDiv.style.backgroundColor = 'transparent';\n imageResizer.resizeContainerDiv.style.display = 'block';\n };\n /**\n * Apply the properties of each resize rectangle element.\n * @param {HTMLDivElement} resizeRectElement - Specifies for applying properties to resize rectangle element.\n * @private\n */\n ImageResizer.prototype.applyProperties = function (resizeRectElement) {\n resizeRectElement.style.position = 'absolute';\n resizeRectElement.style.width = '8px';\n resizeRectElement.style.height = '8px';\n resizeRectElement.style.fontSize = '0px';\n resizeRectElement.style.zIndex = ' 551';\n resizeRectElement.style.backgroundColor = '#ffffff';\n resizeRectElement.style.border = '1px solid #bfbfbf';\n resizeRectElement.style.boxShadow = '0 1px 2px 0 #bfbfbf 0.35';\n resizeRectElement.style.color = '#000000';\n };\n /**\n * Handles an image resizing.\n * @param {number} x - Specifies for left value while resizing.\n * @param {number} y - Specifies for top value while resizing.\n */\n ImageResizer.prototype.handleImageResizing = function (touchPoint, prevX, prevY) {\n prevX = prevX / this.viewer.zoomFactor;\n prevY = prevY / this.viewer.zoomFactor;\n this.leftValue = isNullOrUndefined(this.leftValue) ? prevX : this.leftValue;\n this.topValue = isNullOrUndefined(this.topValue) ? prevY : this.topValue;\n var points;\n switch (this.selectedResizeElement.id.split('_')[1]) {\n case 'TopRightRectParent':\n points = this.topRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'TopLeftRectParent':\n points = this.topLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'TopMiddleRectParent':\n prevX = 0;\n prevY = this.topMiddleResizing(touchPoint);\n break;\n case 'BottomRightRectParent':\n points = this.bottomRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'BottomLeftRectParent':\n points = this.bottomLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'BottomMiddleRectParent':\n prevY = touchPoint.y - prevY;\n prevX = 0;\n break;\n case 'RightMiddleRectParent':\n prevX = touchPoint.x - prevX;\n prevY = 0;\n break;\n case 'LeftMiddleRectParent':\n prevX = this.leftMiddleResizing(touchPoint);\n prevY = 0;\n break;\n default:\n break;\n }\n if (prevX !== 0 || prevY !== 0) {\n var widget = this.currentImageElementBox.line.paragraph;\n var image = this.currentImageElementBox;\n if (!isNullOrUndefined(widget) && widget.isInsideTable) {\n var cellWidget = widget.containerWidget;\n if (!isNullOrUndefined(cellWidget)) {\n var rowWidget = cellWidget.containerWidget;\n var imageHeight = HelperMethods.convertPointToPixel(image.height);\n var widgetHeight = rowWidget.height - imageHeight;\n if (prevY > 0 && rowWidget.y + widgetHeight + imageHeight + prevY > this.viewer.clientArea.bottom) {\n this.isImageMoveToNextPage = true;\n }\n }\n }\n // tslint:disable-next-line:max-line-length \n if (this.owner.enableHistoryMode) {\n this.initHistoryForImageResizer(this.currentImageElementBox);\n }\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n // tslint:disable-next-line:max-line-length \n var width = this.currentImageElementBox.width + prevX > 10 ? this.currentImageElementBox.width + prevX : 10;\n // tslint:disable-next-line:max-line-length \n var height = this.currentImageElementBox.height + prevY > 10 ? this.currentImageElementBox.height + prevY : 10;\n if (this.selectedResizeElement.id.split('_')[1] === 'BottomRightRectParent'\n || this.selectedResizeElement.id.split('_')[1] === 'TopRightRectParent'\n || this.selectedResizeElement.id.split('_')[1] === 'BottomLeftRectParent'\n || this.selectedResizeElement.id.split('_')[1] === 'TopLeftRectParent') {\n height = this.currentImageElementBox.height / this.currentImageElementBox.width * width;\n width = this.currentImageElementBox.width / this.currentImageElementBox.height * height;\n }\n this.currentImageElementBox.width = width;\n this.currentImageElementBox.height = height;\n var owner = this.currentImageElementBox.line.paragraph;\n this.positionImageResizer(this.currentImageElementBox);\n }\n this.isImageResizing = true;\n }\n };\n /**\n * Handles image resizing on mouse.\n * @param {MouseEvent} event - Specifies for image resizing using mouse event.\n * @private\n */\n ImageResizer.prototype.handleImageResizingOnMouse = function (event) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left);\n var prevY = parseFloat(this.selectedResizeElement.style.top);\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n ImageResizer.prototype.topMiddleResizing = function (touchPoint) {\n var prevY;\n if (this.topValue >= touchPoint.y) {\n prevY = this.topValue / touchPoint.y;\n this.topValue = touchPoint.y;\n if (this.viewer instanceof PageLayoutViewer) {\n if (this.topValue <= this.viewer.pageGap) {\n prevY = 1;\n }\n }\n }\n else {\n prevY = -(touchPoint.y / this.topValue);\n this.topValue = touchPoint.y;\n if (this.topValue === 0) {\n prevY = -1;\n }\n }\n return prevY;\n };\n ImageResizer.prototype.leftMiddleResizing = function (touchPoint) {\n var prevX;\n if (this.leftValue >= touchPoint.x) {\n prevX = this.leftValue / touchPoint.x;\n this.leftValue = touchPoint.x;\n if (this.leftValue === 0) {\n prevX = 1;\n this.leftValue = parseFloat(this.selectedResizeElement.style.left);\n }\n }\n else {\n prevX = -(touchPoint.x / this.leftValue);\n this.leftValue = touchPoint.x;\n }\n return prevX;\n };\n ImageResizer.prototype.topRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.topLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.getOuterResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = touchPoint.x - this.leftValue;\n this.leftValue = touchPoint.x;\n prevY = touchPoint.y - this.topValue;\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n ImageResizer.prototype.getInnerResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = -(this.leftValue - touchPoint.x);\n this.leftValue = touchPoint.x;\n prevY = -(this.topValue - touchPoint.y);\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n /**\n * Handles image resizing on touch.\n * @param {TouchEvent} touchEvent - Specifies for image resizing using touch event.\n * @private\n */\n ImageResizer.prototype.handleImageResizingOnTouch = function (touchEvent) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left) + 24;\n var prevY = parseFloat(this.selectedResizeElement.style.top) + 24;\n var touch = touchEvent.touches;\n var cursorPoint = new Point(touch[0].clientX, touch[0].clientY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n if (isNullOrUndefined(this.currentImageElementBox) || isNullOrUndefined(this.currentImageElementBox)) {\n return;\n }\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n /**\n * Gets the image point of mouse.\n * @param {Point} touchPoint - Specifies for resizer cursor position.\n * @private\n */\n ImageResizer.prototype.getImagePoint = function (touchPoint) {\n var x = this.viewer.render.getScaledValue(touchPoint.x, 1);\n var y = this.viewer.render.getScaledValue(touchPoint.y, 2);\n touchPoint = new Point(x, y);\n var imageResizingPoints = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElement = undefined;\n var bottomMiddle = imageResizingPoints.bottomMiddleRectParent;\n var bottomRight = imageResizingPoints.bottomRightRectParent;\n var bottomLeft = imageResizingPoints.bottomLeftRectParent;\n var topMiddle = imageResizingPoints.topMiddleRectParent;\n var topRight = imageResizingPoints.topRightRectParent;\n var topLeft = imageResizingPoints.topLeftRectParent;\n var rightMiddle = imageResizingPoints.rightMiddleRectParent;\n var leftMiddle = imageResizingPoints.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n // tslint:disable-next-line:max-line-length \n if ((touchPoint.x > bottomMiddle.x && touchPoint.x <= bottomMiddle.x + 15) && (touchPoint.y > bottomMiddle.y && touchPoint.y <= bottomMiddle.y + 15)) {\n selectedElement = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > bottomRight.x && touchPoint.x <= bottomRight.x + 15) && (touchPoint.y > bottomRight.y && touchPoint.y <= bottomRight.y + 15)) {\n selectedElement = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > bottomLeft.x && touchPoint.x <= bottomLeft.x + 15) && (touchPoint.y > bottomLeft.y && touchPoint.y <= bottomLeft.y + 15)) {\n selectedElement = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > topMiddle.x && touchPoint.x <= topMiddle.x + 15) && (touchPoint.y > topMiddle.y && touchPoint.y <= topMiddle.y + 15)) {\n selectedElement = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > topRight.x && touchPoint.x <= topRight.x + 15) && (touchPoint.y > topRight.y && touchPoint.y <= topRight.y + 15)) {\n selectedElement = this.topRightRectParent;\n resizePosition = 'ne-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > topLeft.x && touchPoint.x <= topLeft.x + 15) && (touchPoint.y > topLeft.y && touchPoint.y <= topLeft.y + 15)) {\n selectedElement = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > leftMiddle.x && touchPoint.x <= leftMiddle.x + 15) && (touchPoint.y > leftMiddle.y && touchPoint.y <= leftMiddle.y + 15)) {\n selectedElement = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > rightMiddle.x && touchPoint.x <= rightMiddle.x + 15) && (touchPoint.y > rightMiddle.y && touchPoint.y <= rightMiddle.y + 15)) {\n selectedElement = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoint.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoint.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoint.y > parseFloat(this.resizeContainerDiv.style.top)\n // tslint:disable-next-line:max-line-length \n && touchPoint.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElement, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForMouse = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '14px';\n this.bottomMiddleRectParent.style.height = '14px';\n this.bottomRightRectParent.style.width = '14px';\n this.bottomRightRectParent.style.height = '14px';\n this.bottomLeftRectParent.style.width = '14px';\n this.bottomLeftRectParent.style.height = '14px';\n this.topMiddleRectParent.style.width = '14px';\n this.topMiddleRectParent.style.height = '14px';\n this.topRightRectParent.style.width = '14px';\n this.topRightRectParent.style.height = '14px';\n this.topLeftRectParent.style.width = '14px';\n this.topLeftRectParent.style.height = '14px';\n this.leftMiddleRectParent.style.width = '14px';\n this.leftMiddleRectParent.style.height = '14px';\n this.rightMiddleRectParent.style.width = '14px';\n this.rightMiddleRectParent.style.height = '14px';\n }\n };\n /**\n * Gets the image point of touch.\n * @param {Point} touchPoints - Specifies for resizer cursor position.\n * @private\n */\n ImageResizer.prototype.getImagePointOnTouch = function (touchPoints) {\n var x = this.viewer.render.getScaledValue(touchPoints.x, 1);\n var y = this.viewer.render.getScaledValue(touchPoints.y, 2);\n touchPoints = new Point(x, y);\n var imageResizingPointsOnTouch = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElements = undefined;\n var bottomMiddle = imageResizingPointsOnTouch.bottomMiddleRectParent;\n var bottomRight = imageResizingPointsOnTouch.bottomRightRectParent;\n var bottomLeft = imageResizingPointsOnTouch.bottomLeftRectParent;\n var topMiddle = imageResizingPointsOnTouch.topMiddleRectParent;\n var topRight = imageResizingPointsOnTouch.topRightRectParent;\n var topLeft = imageResizingPointsOnTouch.topLeftRectParent;\n var rightMiddle = imageResizingPointsOnTouch.rightMiddleRectParent;\n var leftMiddle = imageResizingPointsOnTouch.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n // tslint:disable-next-line:max-line-length \n if ((touchPoints.x > bottomMiddle.x && touchPoints.x <= bottomMiddle.x + 25) && (touchPoints.y > bottomMiddle.y && touchPoints.y <= bottomMiddle.y + 25)) {\n selectedElements = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > bottomRight.x && touchPoints.x <= bottomRight.x + 25) && (touchPoints.y > bottomRight.y && touchPoints.y <= bottomRight.y + 25)) {\n selectedElements = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > bottomLeft.x && touchPoints.x <= bottomLeft.x + 25) && (touchPoints.y > bottomLeft.y && touchPoints.y <= bottomLeft.y + 25)) {\n selectedElements = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > topMiddle.x && touchPoints.x <= topMiddle.x + 25) && (touchPoints.y > topMiddle.y && touchPoints.y <= topMiddle.y + 25)) {\n selectedElements = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > topRight.x && touchPoints.x <= topRight.x + 25) && (touchPoints.y > topRight.y && touchPoints.y <= topRight.y + 25)) {\n selectedElements = this.topRightRectParent;\n resizePosition = 'ne-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > topLeft.x && touchPoints.x <= topLeft.x + 25) && (touchPoints.y > topLeft.y && touchPoints.y <= topLeft.y + 25)) {\n selectedElements = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > leftMiddle.x && touchPoints.x <= leftMiddle.x + 25) && (touchPoints.y > leftMiddle.y && touchPoints.y <= leftMiddle.y + 25)) {\n selectedElements = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > rightMiddle.x && touchPoints.x <= rightMiddle.x + 25) && (touchPoints.y > rightMiddle.y && touchPoints.y <= rightMiddle.y + 25)) {\n selectedElements = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoints.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoints.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoints.y > parseFloat(this.resizeContainerDiv.style.top)\n // tslint:disable-next-line:max-line-length \n && touchPoints.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElements, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForTouch = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '30px';\n this.bottomMiddleRectParent.style.height = '30px';\n this.bottomRightRectParent.style.width = '30px';\n this.bottomRightRectParent.style.height = '30px';\n this.bottomLeftRectParent.style.width = '30px';\n this.bottomLeftRectParent.style.height = '30px';\n this.topMiddleRectParent.style.width = '30px';\n this.topMiddleRectParent.style.height = '30px';\n this.topRightRectParent.style.width = '30px';\n this.topRightRectParent.style.height = '30px';\n this.topLeftRectParent.style.width = '30px';\n this.topLeftRectParent.style.height = '30px';\n this.leftMiddleRectParent.style.width = '30px';\n this.leftMiddleRectParent.style.height = '30px';\n this.rightMiddleRectParent.style.width = '30px';\n this.rightMiddleRectParent.style.height = '30px';\n }\n };\n /**\n * @private\n */\n ImageResizer.prototype.mouseUpInternal = function () {\n this.currentImageElementBox.width = parseFloat(this.imageResizerDiv.style.width) / this.viewer.zoomFactor;\n this.currentImageElementBox.height = parseFloat(this.imageResizerDiv.style.height) / this.viewer.zoomFactor;\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.setOffsetValue(this.owner.selection);\n this.viewer.layout.reLayoutParagraph(this.currentImageElementBox.line.paragraph, 0, 0);\n this.owner.editorModule.reLayout(this.owner.selection, true);\n this.viewer.updateScrollBars();\n };\n /**\n * Initialize history for image resizer.\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @param {WImage} imageContainer - Specifies for an image.\n * @private\n */\n ImageResizer.prototype.initHistoryForImageResizer = function (imageContainer) {\n if (!isNullOrUndefined(this.owner) && isNullOrUndefined(this.baseHistoryInfo)) {\n this.baseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.baseHistoryInfo.action = 'ImageResizing';\n this.baseHistoryInfo.updateSelection();\n this.baseHistoryInfo.modifiedProperties.push(new ImageFormat(imageContainer));\n }\n };\n /**\n * Updates histroy for image resizer.\n * @private\n */\n ImageResizer.prototype.updateHistoryForImageResizer = function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.baseHistoryInfo)) {\n var imageFormat = this.baseHistoryInfo.modifiedProperties[0];\n if (this.currentImageElementBox.width === imageFormat.width\n && this.currentImageElementBox.height === imageFormat.height) {\n this.baseHistoryInfo.modifiedProperties.pop();\n }\n else {\n //Records the image size modifications\n this.owner.editorHistory.recordChanges(this.baseHistoryInfo);\n }\n //Fires the content changed event for the image size modifications\n this.baseHistoryInfo = undefined;\n }\n };\n /**\n * Updates image resize container when applying zooming\n * @private\n */\n ImageResizer.prototype.updateImageResizerPosition = function () {\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n var elementBox = this.currentImageElementBox;\n var lineWidget = elementBox.line;\n var top_1 = this.viewer.selection.getTop(lineWidget) + elementBox.margin.top;\n var left = this.viewer.selection.getLeftInternal(lineWidget, elementBox, 0);\n var topValue = top_1 * this.viewer.zoomFactor;\n var leftValue = left * this.viewer.zoomFactor;\n var height = this.viewer.render.getScaledValue(elementBox.height, 2);\n var width = this.viewer.render.getScaledValue(elementBox.width, 1);\n this.setImageResizerPosition(leftValue, topValue, width, height, this);\n }\n };\n /**\n * Dispose the internal objects which are maintained.\n * @private\n */\n ImageResizer.prototype.destroy = function () {\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.imageResizerDiv)) {\n this.imageResizerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.selectedImageWidget)) {\n this.selectedImageWidget.destroy();\n }\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.innerHTML = '';\n }\n this.imageResizerDivElement = undefined;\n this.resizeContainerDiv = undefined;\n this.topLeftRect = undefined;\n this.topMiddleRect = undefined;\n this.topRightRect = undefined;\n this.bottomLeftRect = undefined;\n this.bottomMiddleRect = undefined;\n this.bottomRightRect = undefined;\n this.leftMiddleRect = undefined;\n this.rightMiddleRect = undefined;\n this.imageResizerDiv = undefined;\n this.selectedImageWidget = undefined;\n this.isImageResizing = false;\n this.isImageResizerVisible = false;\n this.currentImageElementBoxIn = undefined;\n //this.baseHistoryInfo = undefined;\n this.resizeMarkSizeIn = undefined;\n this.viewer = undefined;\n this.owner = undefined;\n };\n return ImageResizer;\n}());\nexport { ImageResizer };\n/**\n * @private\n */\nvar ImageResizingPoints = /** @class */ (function () {\n /**\n * Constructor for image resizing points class.\n */\n function ImageResizingPoints() {\n /**\n * @private\n */ this.resizeContainerDiv = new Point(0, 0);\n /**\n * @private\n */\n this.topLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.leftMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.rightMiddleRectParent = new Point(0, 0);\n var text = 'DocumentEditor';\n }\n return ImageResizingPoints;\n}());\nexport { ImageResizingPoints };\n/**\n * @private\n */\nvar SelectedImageInfo = /** @class */ (function () {\n /**\n * Constructor for selected image info class.\n * @param {number} height - Specifies for height value.\n * @param {number} width - Specifies for width value.\n */\n function SelectedImageInfo(height, width) {\n this.heightIn = 0;\n this.widthIn = 0;\n this.heightIn = height;\n this.widthIn = width;\n }\n Object.defineProperty(SelectedImageInfo.prototype, \"height\", {\n /**\n * Gets or Sets the height value.\n * @private\n */\n get: function () {\n return this.heightIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.heightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectedImageInfo.prototype, \"width\", {\n /**\n * Gets or Sets the width value.\n * @private\n */\n get: function () {\n return this.widthIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n return SelectedImageInfo;\n}());\nexport { SelectedImageInfo };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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 { BaseHistoryInfo } from './base-history-info';\n/**\n * EditorHistory preservation class\n */\n/**\n * @private\n */\nvar HistoryInfo = /** @class */ (function (_super) {\n __extends(HistoryInfo, _super);\n function HistoryInfo(node, isChild) {\n var _this = _super.call(this, node) || this;\n _this.isChildHistoryInfo = false;\n _this.isChildHistoryInfo = isChild;\n return _this;\n }\n Object.defineProperty(HistoryInfo.prototype, \"hasAction\", {\n /**\n * @private\n */\n get: function () {\n return !isNullOrUndefined(this.modifiedActions);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Adds the modified actions\n * @param {BaseHistoryInfo} baseHistoryInfo\n * @private\n */\n HistoryInfo.prototype.addModifiedAction = function (baseHistoryInfo) {\n // For complex actions such as Replace text, Insert/Remove Hyperlink etc.\n if (!(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n if (isNullOrUndefined(this.modifiedActions)) {\n this.modifiedActions = [];\n }\n this.modifiedActions.push(baseHistoryInfo);\n }\n };\n /**\n * Reverts this instance\n * @private\n */\n HistoryInfo.prototype.revert = function () {\n this.editorHistory.currentHistoryInfo = this;\n if (this.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n if (!isNullOrUndefined(this.modifiedActions)) {\n if (this.editorHistory.isUndoing) {\n var i = this.modifiedActions.length;\n while (i > 0) {\n var baseHistoryInfo = this.modifiedActions[i - 1];\n baseHistoryInfo.revert();\n i = i - 1;\n }\n }\n else {\n var i = 0;\n while (i < this.modifiedActions.length) {\n var baseHistoryInfo = this.modifiedActions[i];\n baseHistoryInfo.revert();\n i = i + 1;\n }\n }\n }\n if (!this.isChildHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.editorHistory.updateComplexHistoryInternal();\n }\n };\n /**\n * @private\n */\n HistoryInfo.prototype.destroy = function () {\n if (!isNullOrUndefined(this.modifiedActions)) {\n while (this.modifiedActions.length > 0) {\n var baseHistoryInfo = this.modifiedActions[this.modifiedActions.length - 1];\n baseHistoryInfo.destroy();\n this.modifiedActions.splice(this.modifiedActions.indexOf(baseHistoryInfo), 1);\n }\n this.modifiedActions = undefined;\n }\n _super.prototype.destroy.call(this);\n };\n return HistoryInfo;\n}(BaseHistoryInfo));\nexport { HistoryInfo };\n","import { Dictionary } from '../../base/dictionary';\nimport { TextPosition } from '../selection/selection-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BaseHistoryInfo, } from './base-history-info';\nimport { ModifiedParagraphFormat, ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { HistoryInfo } from './history-info';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * `EditorHistory` Module class is used to handle history preservation\n */\nvar EditorHistory = /** @class */ (function () {\n /**\n * @private\n */\n function EditorHistory(node) {\n //Fields\n this.undoStackIn = [];\n this.redoStackIn = [];\n this.historyInfoStack = [];\n /**\n * @private\n */\n this.isUndoing = false;\n /**\n * @private\n */\n this.isRedoing = false;\n this.owner = node;\n this.viewer = node.viewer;\n this.modifiedParaFormats = new Dictionary();\n this.undoLimitIn = 500;\n this.redoLimitIn = 500;\n }\n Object.defineProperty(EditorHistory.prototype, \"currentHistoryInfo\", {\n /**\n * @private\n */\n get: function () {\n return this.historyInfoStack && this.historyInfoStack.length > 0 ?\n this.historyInfoStack[this.historyInfoStack.length - 1] : undefined;\n },\n set: function (value) {\n if (value instanceof HistoryInfo) {\n this.historyInfoStack.push(value);\n }\n else {\n this.historyInfoStack.pop();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoStack\", {\n //Properties\n /**\n * gets undo stack\n * @private\n */\n get: function () { return this.undoStackIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoStack\", {\n /**\n * gets redo stack\n * @private\n */\n get: function () { return this.redoStackIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoLimit\", {\n /**\n * Gets or Sets the limit of undo operations can be done.\n */\n get: function () {\n return isNullOrUndefined(this.undoLimitIn) ? 0 : this.undoLimitIn;\n },\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.undoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoLimit\", {\n /**\n * Gets or Sets the limit of redo operations can be done.\n */\n get: function () {\n return isNullOrUndefined(this.redoLimitIn) ? 0 : this.redoLimitIn;\n },\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.redoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n EditorHistory.prototype.getModuleName = function () {\n return 'EditorHistory';\n };\n /**\n * Determines whether undo operation can be done.\n * @returns boolean\n */\n EditorHistory.prototype.canUndo = function () {\n return !isNullOrUndefined(this.undoStack) && this.undoStack.length > 0;\n };\n /**\n * Determines whether redo operation can be done.\n * @returns boolean\n */\n EditorHistory.prototype.canRedo = function () {\n return !isNullOrUndefined(this.redoStack) && this.redoStack.length > 0;\n };\n //EditorHistory Initialization \n /**\n * initialize EditorHistory\n * @param {Selection} selection\n * @param {Action} action\n * @param {SelectionRange} selectionRange\n * @private\n */\n EditorHistory.prototype.initializeHistory = function (action) {\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.currentBaseHistoryInfo.action = action;\n this.currentBaseHistoryInfo.updateSelection();\n };\n /**\n * Initialize complex history\n * @param {Selection} selection\n * @param {Action} action\n * @private\n */\n EditorHistory.prototype.initComplexHistory = function (selection, action) {\n this.currentHistoryInfo = new HistoryInfo(selection.owner, !isNullOrUndefined(this.currentHistoryInfo));\n this.currentHistoryInfo.action = action;\n this.currentHistoryInfo.updateSelection();\n };\n /**\n * @private\n */\n EditorHistory.prototype.initResizingHistory = function (startingPoint, tableResize) {\n if (tableResize.resizeNode === 1) {\n this.initializeHistory('RowResizing');\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n this.currentBaseHistoryInfo.modifiedProperties.push(new RowHistoryFormat(startingPoint, tableResize.currentResizingTable.childWidgets[tableResize.resizerPosition].rowFormat));\n }\n }\n else {\n this.initializeHistory('CellResizing');\n if (this.currentBaseHistoryInfo) {\n tableResize.currentResizingTable = tableResize.currentResizingTable.combineWidget(this.viewer);\n var tableHistoryInfo = new TableHistoryInfo(tableResize.currentResizingTable, this.owner);\n tableHistoryInfo.startingPoint = startingPoint;\n this.currentBaseHistoryInfo.modifiedProperties.push(tableHistoryInfo);\n }\n }\n };\n /**\n * Update resizing history\n * @param {Point} point\n * @param {Selection} selection\n * @private\n */\n EditorHistory.prototype.updateResizingHistory = function (point, tableResize) {\n if (tableResize.resizeNode === 1) {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var rowHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (rowHistoryFormat.startingPoint.y === point.y) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n rowHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.y - rowHistoryFormat.startingPoint.y);\n this.recordChanges(this.currentBaseHistoryInfo);\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var cellHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (cellHistoryFormat.startingPoint.x === point.x) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n cellHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.x - cellHistoryFormat.startingPoint.x);\n cellHistoryFormat.endIndex = tableResize.getCellReSizerPosition(point);\n this.owner.editorHistory.recordChanges(this.currentBaseHistoryInfo);\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n };\n /**\n * Record the changes\n * @param {BaseHistoryInfo} baseHistoryInfo\n * @private\n */\n EditorHistory.prototype.recordChanges = function (baseHistoryInfo) {\n if (!this.owner.enableHistoryMode) {\n return;\n }\n if (this.isUndoing) {\n if (isNullOrUndefined(this.redoStack)) {\n this.redoStackIn = [];\n }\n if (this.redoStack.length === this.redoLimit && this.redoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.redoStackIn.splice(0, count);\n }\n if (this.redoStack.length < this.redoLimit) {\n this.redoStack.push(baseHistoryInfo);\n }\n }\n else {\n if (!this.isRedoing) {\n this.clearRedoStack();\n }\n if (isNullOrUndefined(this.undoStack)) {\n this.undoStackIn = [];\n }\n if (this.undoStack.length === this.undoLimit && this.undoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.undoStackIn.splice(0, count);\n }\n if (this.undoStack.length < this.undoLimit) {\n this.undoStackIn.push(baseHistoryInfo);\n }\n }\n };\n /**\n * update EditorHistory\n * @private\n */\n EditorHistory.prototype.updateHistory = function () {\n if (this.viewer.owner.enableHistoryMode && !isNullOrUndefined(this.currentBaseHistoryInfo)) {\n //Updates the current end position\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)\n && isNullOrUndefined(this.currentBaseHistoryInfo.endPosition)) {\n this.currentBaseHistoryInfo.endPosition = this.currentBaseHistoryInfo.insertPosition;\n }\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n this.currentHistoryInfo.addModifiedAction(this.currentBaseHistoryInfo);\n }\n else {\n this.recordChanges(this.currentBaseHistoryInfo);\n }\n this.currentBaseHistoryInfo = undefined;\n }\n };\n /**\n * @private\n */\n EditorHistory.prototype.isHandledComplexHistory = function () {\n var isHandledComplexHistory = false;\n if (!(this.isUndoing || this.isRedoing)) {\n isHandledComplexHistory = this.owner.editorModule.insertRemoveBookMarkElements();\n }\n if (this.viewer.owner.enableHistoryMode && !isNullOrUndefined(this.currentHistoryInfo)) {\n this.updateHistory();\n isHandledComplexHistory = true;\n }\n else if (this.owner.editorModule.isHandledComplex) {\n isHandledComplexHistory = true;\n }\n return isHandledComplexHistory;\n };\n /**\n * Update complex history\n * @private\n */\n EditorHistory.prototype.updateComplexHistory = function () {\n var selection = this.viewer.selection;\n if (this.currentHistoryInfo.hasAction) {\n if (this.currentHistoryInfo.action === 'AutoFormatHyperlink') {\n var startPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(startPosition, this.currentHistoryInfo.insertPosition);\n // this.reLayoutParagraph(startPosition.paragraph, 0);\n if (selection.owner.editorHistory.isUndoing) {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.selectionStart);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.selectionEnd);\n }\n else {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.endPosition);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.endPosition);\n }\n }\n if (this.currentHistoryInfo.action === 'InsertHyperlink') {\n var startPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(startPosition, this.currentHistoryInfo.insertPosition);\n var endPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(endPosition, this.currentHistoryInfo.endPosition);\n this.viewer.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.viewer.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (this.currentHistoryInfo.action === 'ReplaceAll') {\n this.owner.editorModule.layoutWholeDocument();\n }\n else if (selection.owner.isShiftingEnabled) {\n this.viewer.layout.shiftLayoutedItems();\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editorModule.updateHeaderFooterWidget();\n }\n this.viewer.removeEmptyPages();\n }\n }\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n // // selection.addMultipleSelectionRanges();\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n this.viewer.updateScrollBars();\n selection.fireSelectionChanged(true);\n this.viewer.updateFocus();\n this.updateComplexHistoryInternal();\n this.owner.editorModule.fireContentChange();\n };\n /**\n * @private\n */\n EditorHistory.prototype.updateComplexHistoryInternal = function () {\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n //Updates the current end position\n if (isNullOrUndefined(this.currentHistoryInfo.endPosition)) {\n this.currentHistoryInfo.endPosition = this.currentHistoryInfo.insertPosition;\n }\n if (this.historyInfoStack.length > 1) {\n var historyInfo = this.historyInfoStack[this.historyInfoStack.length - 2];\n historyInfo.addModifiedAction(this.currentHistoryInfo);\n }\n else {\n this.recordChanges(this.currentHistoryInfo);\n }\n this.currentHistoryInfo = undefined;\n }\n };\n //List history preservation undo API\n /**\n * update list changes for history preservation\n * @param {Selection} selection\n * @param {WAbstractList} currentAbstractList\n * @param {WList} list\n * @private\n */\n EditorHistory.prototype.updateListChangesInHistory = function (currentAbstractList, list) {\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.viewer.owner);\n this.currentBaseHistoryInfo.action = 'List';\n this.currentBaseHistoryInfo.updateSelection();\n var collection = new Dictionary();\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var levels = this.viewer.getAbstractListById(list.abstractListId).levels[i];\n var value = this.currentBaseHistoryInfo.addModifiedPropertiesForList(levels);\n var modifiedLevel = new ModifiedLevel(levels, currentAbstractList.levels[i]);\n if (!isNullOrUndefined(levels)) {\n this.viewer.owner.editorModule.copyListLevel(levels, currentAbstractList.levels[i]);\n }\n collection.add(i, modifiedLevel);\n }\n return collection;\n };\n /**\n * Apply list changes\n * @param {Selection} selection\n * @param {Dictionary} modifiedLevelsInternal\n * @private\n */\n EditorHistory.prototype.applyListChanges = function (selection, modifiedLevelsInternal) {\n if (isNullOrUndefined(this.modifiedParaFormats)) {\n this.modifiedParaFormats = new Dictionary();\n }\n var collection = [];\n for (var i = 0; i < this.viewer.listParagraphs.length; i++) {\n var paragraph = this.viewer.listParagraphs[i];\n var paraFormat = paragraph.paragraphFormat;\n var currentList = this.viewer.getListById(paraFormat.listFormat.listId);\n var listLevel = this.viewer.layout.getListLevel(currentList, paraFormat.listFormat.listLevelNumber);\n // tslint:disable-next-line:max-line-length\n if (modifiedLevelsInternal.containsKey(paraFormat.listFormat.listLevelNumber)\n && modifiedLevelsInternal.get(paraFormat.listFormat.listLevelNumber).ownerListLevel === listLevel) {\n var modifiedFormat = new WParagraphFormat(null);\n modifiedFormat.leftIndent = paraFormat.leftIndent;\n modifiedFormat.firstLineIndent = paraFormat.firstLineIndent;\n var modified = new ModifiedParagraphFormat(paraFormat, modifiedFormat);\n collection.push(modified);\n this.owner.editorModule.copyFromListLevelParagraphFormat(paraFormat, listLevel.paragraphFormat);\n }\n }\n this.modifiedParaFormats.add(this.currentBaseHistoryInfo, collection);\n };\n /**\n * Update list changes\n * @param {Dictionary} modifiedCollection\n * @param {Selection} selection\n * @private\n */\n EditorHistory.prototype.updateListChanges = function (modifiedCollection) {\n this.viewer.owner.isLayoutEnabled = false;\n this.owner.editorModule.updateListParagraphs();\n for (var i = 0; i < modifiedCollection.keys.length; i++) {\n var levelNumber = modifiedCollection.keys[0];\n var modifiedLevel = modifiedCollection.get(levelNumber);\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n modifiedLevel = this.currentBaseHistoryInfo.addModifiedPropertiesForList(modifiedLevel.ownerListLevel);\n }\n this.owner.editorModule.copyListLevel(modifiedLevel.ownerListLevel, modifiedLevel.modifiedListLevel);\n }\n this.revertListChanges();\n this.viewer.owner.isLayoutEnabled = true;\n this.viewer.renderedLists.clear();\n this.viewer.pages = [];\n this.viewer.layout.layout();\n var selection = this.viewer.selection;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(false);\n this.updateHistory();\n };\n /**\n * Revert list changes\n * @param {Selection} selection\n */\n EditorHistory.prototype.revertListChanges = function () {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)\n && this.viewer.owner.editorHistory.modifiedParaFormats.containsKey(this.currentBaseHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n var collection = this.modifiedParaFormats.get(this.currentBaseHistoryInfo);\n for (var i = 0; i < collection.length; i++) {\n var modified = new WParagraphFormat(null);\n modified.leftIndent = collection[i].ownerFormat.leftIndent;\n modified.firstLineIndent = collection[i].ownerFormat.firstLineIndent;\n collection[i].ownerFormat.copyFormat(collection[i].modifiedFormat);\n collection[i].modifiedFormat.leftIndent = modified.leftIndent;\n collection[i].modifiedFormat.firstLineIndent = modified.firstLineIndent;\n }\n }\n };\n /**\n * Reverts the last editing action.\n */\n EditorHistory.prototype.undo = function () {\n if (this.owner.isReadOnlyMode || !this.canUndo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.undoStack.pop();\n this.isUndoing = true;\n historyInfo.revert();\n this.isUndoing = false;\n this.owner.selection.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * Performs the last reverted action.\n */\n EditorHistory.prototype.redo = function () {\n if (this.owner.isReadOnlyMode || !this.canRedo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.redoStack.pop();\n if (historyInfo.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n this.isRedoing = true;\n historyInfo.revert();\n this.isRedoing = false;\n this.owner.selection.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * @private\n */\n EditorHistory.prototype.destroy = function () {\n this.clearHistory();\n this.undoStackIn = undefined;\n this.redoStackIn = undefined;\n };\n EditorHistory.prototype.clearHistory = function () {\n this.clearUndoStack();\n this.clearRedoStack();\n };\n EditorHistory.prototype.clearUndoStack = function () {\n if (this.canUndo()) {\n while (this.undoStack.length > 0) {\n var historyInfo = this.undoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n EditorHistory.prototype.clearRedoStack = function () {\n if (this.canRedo()) {\n while (this.redoStack.length > 0) {\n var historyInfo = this.redoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n return EditorHistory;\n}());\nexport { EditorHistory };\n","import { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { XmlWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../index';\n/**\n * Exports the document to Word format.\n */\nvar WordExport = /** @class */ (function () {\n function WordExport() {\n //Part path\n this.documentPath = 'word/document.xml';\n this.stylePath = 'word/styles.xml';\n this.numberingPath = 'word/numbering.xml';\n this.settingsPath = 'word/settings.xml';\n this.headerPath = 'word/header';\n this.footerPath = 'word/footer';\n //private commentsPath: string = 'word/comments.xml';\n this.imagePath = 'word/media/image';\n // private footnotesPath: string = 'word/footnotes.xml';\n // private endnotesPath: string = 'word/endnotes.xml';\n this.appPath = 'docProps/app.xml';\n this.corePath = 'docProps/core.xml';\n // private CustomPath: string = 'docProps/custom.xml';\n // private FontTablePath: string = 'word/fontTable.xml';\n this.contentTypesPath = '[Content_Types].xml';\n // private ChartsPath: string = 'word/charts/';\n // private DefaultEmbeddingPath: string = 'word/embeddings/';\n // private EmbeddingPath:string = 'word\\embeddings\\';\n // private DrawingPath:string = 'word\\drawings\\';\n // private ThemePath: string = 'word/theme/theme1.xml';\n // private FontsPath:string = 'word\\fonts\\';\n // private DiagramPath:string = \"word/diagrams/';\n // private ControlPath:string = \"word/activeX/';\n // private VbaProject: string = 'vbaProject.bin';\n // private VbaData: string = 'vbaData.xml';\n // private VbaProjectPath: string = 'word/vbaProject.bin';\n // private VbaDataPath: string = 'word/vbaData.xml';\n // private CustomXMLPath:string = 'customXml\\';\n //Relationship path\n this.generalRelationPath = '_rels/.rels';\n this.wordRelationPath = 'word/_rels/document.xml.rels';\n // private FontRelationPath: string = 'word/_rels/fontTable.xml.rels';\n // private CommentsRelationPath: string = 'word/_rels/comments.xml.rels';\n // private FootnotesRelationPath: string = 'word/_rels/footnotes.xml.rels';\n // private EndnotesRelationPath: string = 'word/_rels/endnotes.xml.rels';\n // private NumberingRelationPath: string = 'word/_rels/numbering.xml.rels';\n this.headerRelationPath = 'word/_rels/header';\n this.footerRelationPath = 'word/_rels/footer';\n // private SettingsRelationpath: string = 'word/_rels/settings.xml.rels';\n // private VbaProjectRelsPath: string = 'word/_rels/vbaProject.bin.rels';\n //Content type of the parts\n this.xmlContentType = 'application/xml';\n this.fontContentType = 'application/vnd.openxmlformats-officedocument.obfuscatedFont';\n this.documentContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml';\n // private TemplateContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml';\n // private CommentsContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml';\n this.settingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml';\n // private EndnoteContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml';\n // private FontTableContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml';\n this.footerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml';\n // private FootnoteContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml';\n // private GlossaryDocumentContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml';\n this.headerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml';\n this.numberingContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml';\n this.stylesContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml';\n this.webSettingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml';\n this.appContentType = 'application/vnd.openxmlformats-officedocument.extended-properties+xml';\n this.coreContentType = 'application/vnd.openxmlformats-package.core-properties+xml';\n this.customContentType = 'application/vnd.openxmlformats-officedocument.custom-properties+xml';\n this.customXmlContentType = 'application/vnd.openxmlformats-officedocument.customXmlProperties+xml';\n this.relationContentType = 'application/vnd.openxmlformats-package.relationships+xml';\n // private DiagramColor: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml';\n // private DiagramData: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml';\n // private DiagramLayout: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml';\n // private DiagramStyle: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml';\n // private ChartsContentType: string = 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml';\n // private ThemeContentType: string = 'application/vnd.openxmlformats-officedocument.theme+xml';\n // private ChartDrawingContentType: string = 'application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml';\n // private ActiveXContentType: string = 'application/vnd.ms-office.activeX+xml';\n // private ActiveXBinContentType: string = 'application/vnd.ms-office.activeX';\n this.tableStyleContentType = 'application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml';\n // private ChartStyleContentType: string = 'application/vnd.ms-office.chartstyle+xml';\n // private ChartColorStyleContentType: string = 'application/vnd.ms-office.chartcolorstyle+xml';\n // private VbaProjectContentType: string = 'application/vnd.ms-office.vbaProject';\n // private VbaDataContentType: string = 'application/vnd.ms-word.vbaData+xml';\n // private MacroDocumentContentType: string = 'application/vnd.ms-word.document.macroEnabled.main+xml';\n // private MacroTemplateContentType: string = 'application/vnd.ms-word.template.macroEnabledTemplate.main+xml';\n // private OleObjectContentType: string = 'application/vnd.openxmlformats-officedocument.oleObject';\n // Relationship types of document parts\n // private AltChunkRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk';\n // private CommentsRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments';\n this.settingsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings';\n // private EndnoteRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes';\n // private FontTableRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable';\n this.footerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer';\n // private FootnoteRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes';\n this.headerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/header';\n this.documentRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument';\n this.numberingRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering';\n this.stylesRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles';\n // private OleObjectRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject';\n // private ChartRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart';\n // private ThemeRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme';\n this.fontRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/font';\n this.tableStyleRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles';\n this.coreRelType = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\n this.appRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\n this.customRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\n this.imageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image';\n this.hyperlinkRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink';\n this.controlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/control';\n this.packageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // private VbaProjectRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/vbaProject';\n // private VbaDataRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/wordVbaData';\n this.customXmlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml';\n this.customUIRelType = 'http://schemas.microsoft.com/office/2006/relationships/ui/extensibility';\n this.attachedTemplateRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate';\n // private ChartColorStyleRelType: string = 'http://schemas.microsoft.com/office/2011/relationships/chartColorStyle';\n // private ChartStyleRelType: string = 'http://schemas.microsoft.com/office/2011/relationships/chartStyle';\n // private ChartUserShapesRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes';\n // private ChartContentType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // Namespaces\n // private PKG_namespace: string = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.wNamespace = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';\n this.wpNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing';\n this.pictureNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/picture';\n this.aNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/main';\n this.a14Namespace = 'http://schemas.microsoft.com/office/drawing/2010/main';\n // private SVG_namespace: string = 'http://schemas.microsoft.com/office/drawing/2016/SVG/main';\n this.rNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\n this.rpNamespace = 'http://schemas.openxmlformats.org/package/2006/relationships';\n this.vNamespace = 'urn:schemas-microsoft-com:vml';\n this.oNamespace = 'urn:schemas-microsoft-com:office:office';\n this.xmlNamespace = 'http://www.w3.org/XML/1998/namespace';\n this.w10Namespace = 'urn:schemas-microsoft-com:office:word';\n this.cpNamespace = 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties';\n this.dcNamespace = 'http://purl.org/dc/elements/1.1/';\n // private DCTERMS_namespace: string = 'http://purl.org/dc/terms/';\n // private XSI_namespace: string = 'http://www.w3.org/2001/XMLSchema-instance';\n this.docPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties';\n this.veNamespace = 'http://schemas.openxmlformats.org/markup-compatibility/2006';\n this.mNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/math';\n this.wneNamespace = 'http://schemas.microsoft.com/office/word/2006/wordml';\n // private DCMI_namespace: string = 'http://purl.org/dc/dcmitype/';\n this.customPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/custom-properties';\n this.vtNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes';\n this.chartNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/chart';\n this.slNamespace = 'http://schemas.openxmlformats.org/schemaLibrary/2006/main';\n //2003WML namespace\n // private amlNamespace: string = 'http://schemas.microsoft.com/aml/2001/core';\n this.dtNamespace = 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882';\n this.wmlNamespace = 'http://schemas.microsoft.com/office/word/2003/wordml';\n //2010 namespaces\n this.w14Namespace = 'http://schemas.microsoft.com/office/word/2010/wordml';\n this.wpCanvasNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas';\n this.wpDrawingNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing';\n this.wpGroupNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingGroup';\n this.wpInkNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingInk';\n this.wpShapeNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape';\n //2013 namespaces\n this.w15Namespace = 'http://schemas.microsoft.com/office/word/2012/wordml';\n this.diagramNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/diagram';\n //Encryption namespaces\n this.eNamespace = 'http://schemas.microsoft.com/office/2006/encryption';\n this.pNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/password';\n this.certNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/certificate';\n // Dls xml tags\n this.cRelationshipsTag = 'Relationships';\n this.cRelationshipTag = 'Relationship';\n this.cIdTag = 'Id';\n this.cTypeTag = 'Type';\n this.cTargetTag = 'Target';\n this.cUserShapesTag = 'userShapes';\n this.cExternalData = 'externalData';\n this.twipsInOnePoint = 20;\n this.twentiethOfPoint = 20;\n this.borderMultiplier = 8;\n this.percentageFactor = 50;\n this.emusPerPoint = 12700;\n // private const TOC_SYMBOL:string = (char)0x01;\n // private const FOOTNOTE_SYMBOL:string = (char)0x02;\n // private const PAGENUMBER_SYMBOL:string = (char)0xB;\n // private DEF_FIT_TEXT_TO_SHAPE: string = 'mso-fit-shape-to-text:t';\n // Document tags\n this.cConditionalTableStyleTag = 'tblStylePr';\n this.cTableFormatTag = 'tblPr';\n this.cTowFormatTag = 'trPr';\n this.cCellFormatTag = 'tcPr';\n this.cParagraphFormatTag = 'pPr';\n this.cCharacterFormatTag = 'rPr';\n this.packageType = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.relsPartPath = '/_rels/.rels';\n this.documentRelsPartPath = '/word/_rels/document.xml.rels';\n this.webSettingsPath = '/word/webSettings.xml';\n this.wordMLDocumentPath = '/word/document.xml';\n this.wordMLStylePath = '/word/styles.xml';\n this.wordMLNumberingPath = '/word/numbering.xml';\n this.wordMLSettingsPath = '/word/settings.xml';\n this.wordMLHeaderPath = '/word/header';\n this.wordMLFooterPath = '/word/footer';\n this.wordMLCommentsPath = '/word/comments.xml';\n this.wordMLImagePath = '/word/media/image';\n this.wordMLFootnotesPath = '/word/footnotes.xml';\n this.wordMLEndnotesPath = '/word/endnotes.xml';\n this.wordMLAppPath = '/docProps/app.xml';\n this.wordMLCorePath = '/docProps/core.xml';\n this.wordMLCustomPath = '/docProps/custom.xml';\n this.wordMLFontTablePath = '/word/fontTable.xml';\n this.wordMLChartsPath = '/word/charts/';\n this.wordMLDefaultEmbeddingPath = '/word/embeddings/';\n this.wordMLEmbeddingPath = '/word/embeddings/';\n this.wordMLDrawingPath = '/word/drawings/';\n this.wordMLThemePath = '/word/theme/theme1.xml';\n this.wordMLFontsPath = '/word/fonts/';\n this.wordMLDiagramPath = '/word/diagrams/';\n this.wordMLControlPath = '/word/activeX/';\n this.wordMLVbaProject = '/vbaProject.bin';\n this.wordMLVbaData = '/vbaData.xml';\n this.wordMLVbaProjectPath = '/word/vbaProject.bin';\n this.wordMLVbaDataPath = '/word/vbaData.xml';\n // private WordMLCustomXMLPath: string = '/customXml/';\n this.wordMLWebSettingsPath = '/word/webSettings.xml';\n this.wordMLCustomItemProp1Path = '/customXml/itemProps1.xml';\n // private WordMLCustomXMLRelPath: string = '/customXml/_rels/item1.xml.rels';\n this.wordMLFootnoteRelPath = '/word/_rels/footnotes.xml.rels';\n this.wordMLEndnoteRelPath = '/word/_rels/endnotes.xml.rels';\n this.wordMLSettingsRelPath = '/word/_rels/settings.xml.rels';\n this.wordMLNumberingRelPath = '/word/_rels/numbering.xml.rels';\n this.wordMLFontTableRelPath = '/word/_rels/fontTable.xml.rels';\n this.wordMLCustomXmlPropsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps';\n this.wordMLControlRelType = 'http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary';\n this.wordMLDiagramContentType = 'application/vnd.ms-office.drawingml.diagramDrawing+xml';\n this.lastSection = false;\n this.mRelationShipID = 0;\n this.mDocPrID = 0;\n this.mDifferentFirstPage = false;\n this.mBookmarks = undefined;\n /* tslint:enable:no-any */\n }\n WordExport.prototype.getModuleName = function () {\n return 'WordExport';\n };\n Object.defineProperty(WordExport.prototype, \"bookmarks\", {\n // Gets the bookmark name\n get: function () {\n if (isNullOrUndefined(this.mBookmarks)) {\n this.mBookmarks = [];\n }\n return this.mBookmarks;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"documentImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mDocumentImages === undefined) {\n this.mDocumentImages = new Dictionary();\n }\n return this.mDocumentImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"externalImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mExternalLinkImages === undefined) {\n this.mExternalLinkImages = new Dictionary();\n }\n return this.mExternalLinkImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headerFooterImages\", {\n // Gets the collections of images present in the HeaderFooters\n get: function () {\n if (this.mHeaderFooterImages === undefined) {\n this.mHeaderFooterImages = new Dictionary();\n }\n return this.mHeaderFooterImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headersFooters\", {\n /// Gets the HeaderFooter Collection\n get: function () {\n if (this.mHeaderFooterColl === undefined) {\n this.mHeaderFooterColl = new Dictionary();\n }\n return this.mHeaderFooterColl;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n WordExport.prototype.save = function (viewer, fileName) {\n this.serialize(viewer);\n this.mArchive.save(fileName + '.docx').then(function (mArchive) {\n mArchive.destroy();\n });\n this.close();\n };\n /**\n * @private\n */\n WordExport.prototype.saveAsBlob = function (viewer) {\n var _this = this;\n this.serialize(viewer);\n return new Promise(function (resolve, reject) {\n _this.mArchive.saveAsBlob().then(function (blob) {\n _this.mArchive.destroy();\n blob = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });\n resolve(blob);\n });\n });\n };\n /**\n * @private\n */\n WordExport.prototype.destroy = function () {\n this.clearDocument();\n this.mRelationShipID = undefined;\n this.mDocPrID = undefined;\n this.mDifferentFirstPage = undefined;\n if (this.mArchive) {\n this.mArchive.destroy();\n this.mArchive = undefined;\n }\n };\n // Saves the word document in the stream\n WordExport.prototype.serialize = function (viewer) {\n /* tslint:disable:no-any */\n var document = viewer.owner.sfdtExportModule.write();\n this.setDocument(document);\n this.mArchive = new ZipArchive();\n this.mArchive.compressionLevel = 'Normal';\n this.mVerticalMerge = new Dictionary();\n this.mGridSpans = new Dictionary();\n var contenttype;\n //document.xml\n this.serializeDocument();\n //Styles.xml\n this.serializeStyles();\n //numbering.xml\n this.serializeNumberings();\n //theme.xml\n // if (m_document.DocHasThemes && !isNullOrUndefined(m_document.Themes))\n // SerializeThemes();\n // else\n // this.serializeDefaultThemes();\n //settings.xml\n this.serializeSettings();\n //core.xml\n this.serializeCoreProperties();\n //app.xml\n this.serializeAppProperties();\n //fontTable.xml\n this.serializeFontTable(contenttype);\n //custom.xml\n // if (!isNullOrUndefined(this.wordDocument.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0) {\n // SerializeCustomProperties();\n // }\n //Settings Relations\n this.serializeSettingsRelation();\n //Numbering relation if the document has picture bullet\n // if (PictureBullets.length > 0) {\n // SerializeNumberingsRelation();\n // }\n this.serializeHeaderFooters();\n //document relations\n this.serializeDocumentRelations();\n // // Add controls to archieve.\n // if (ControlsPathNames.length > 0) {\n // AddControlsToZip(m_document.DocxPackage);\n // }\n // if (!isNullOrUndefined(m_document.CustomUIPartContainer))\n // AddPartContainerToArchive(m_document.CustomUIPartContainer);\n // if (!isNullOrUndefined(m_document.CustomXMLContainer))\n // AddPartContainerToArchive(m_document.CustomXMLContainer);\n //general relations\n this.serializeGeneralRelations();\n //[ContentTypes].xml\n this.serializeContentTypes(contenttype);\n // Clears the internal fields maintained for serializing.\n this.clearDocument();\n };\n // Sets the document\n WordExport.prototype.setDocument = function (document) {\n this.document = document;\n this.mSections = document.sections;\n this.mLists = document.lists;\n this.mAbstractLists = document.abstractLists;\n this.defCharacterFormat = document.characterFormat;\n this.defParagraphFormat = document.paragraphFormat;\n this.defaultTabWidthValue = document.defaultTabWidth;\n this.mStyles = document.styles;\n };\n // Clears the document\n WordExport.prototype.clearDocument = function () {\n // Owner Nodes\n this.section = undefined;\n this.lastSection = undefined;\n this.blockOwner = undefined;\n this.paragraph = undefined;\n this.table = undefined;\n this.row = undefined;\n this.headerFooter = undefined;\n this.document = undefined;\n this.mSections = undefined;\n this.mLists = undefined;\n this.mAbstractLists = undefined;\n this.defCharacterFormat = undefined;\n this.defParagraphFormat = undefined;\n this.defaultTabWidthValue = undefined;\n this.mRelationShipID = 0;\n this.mDocPrID = 0;\n this.mDifferentFirstPage = false;\n if (this.mHeaderFooterColl) {\n this.mHeaderFooterColl.destroy();\n this.mHeaderFooterColl = undefined;\n }\n if (this.mVerticalMerge) {\n this.mVerticalMerge.destroy();\n this.mVerticalMerge = undefined;\n }\n if (this.mGridSpans) {\n this.mGridSpans.destroy();\n this.mGridSpans = undefined;\n }\n if (this.mDocumentImages) {\n this.mDocumentImages.destroy();\n this.mDocumentImages = undefined;\n }\n if (this.mExternalLinkImages) {\n this.mExternalLinkImages.destroy();\n this.mExternalLinkImages = undefined;\n }\n if (this.mHeaderFooterImages) {\n this.mHeaderFooterImages.destroy();\n this.mHeaderFooterImages = undefined;\n }\n };\n // Serializes the document elements (document.xml)\n WordExport.prototype.serializeDocument = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'document', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n this.serializeDocumentBody(writer);\n writer.writeEndElement(); //end of document tag\n var archiveItem = new ZipArchiveItem(writer.buffer, this.documentPath);\n this.mArchive.addItem(archiveItem);\n };\n WordExport.prototype.writeCommonAttributeStrings = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n this.writeCustom(writer);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n WordExport.prototype.writeDup = function (writer) {\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'wpg', undefined, this.wpGroupNamespace);\n writer.writeAttributeString('xmlns', 'wpi', undefined, this.wpInkNamespace);\n };\n WordExport.prototype.writeCustom = function (writer) {\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n };\n // Serializes the document body\n WordExport.prototype.serializeDocumentBody = function (writer) {\n writer.writeStartElement(undefined, 'body', this.wNamespace);\n var count = this.document.sections.length;\n for (var i = 0; i < count; i++) {\n this.section = this.document.sections[i];\n this.lastSection = i === count - 1;\n this.serializeSection(writer, this.section, i === count - 1);\n this.section = undefined;\n }\n writer.writeEndElement();\n };\n // Serializes the Section.\n WordExport.prototype.serializeSection = function (writer, section, last) {\n this.blockOwner = section;\n this.serializeBodyItems(writer, section.blocks, last);\n if (last) {\n this.serializeSectionProperties(writer, section);\n }\n this.blockOwner = undefined;\n };\n // Serialize the section properties.\n WordExport.prototype.serializeSectionProperties = function (writer, section) {\n writer.writeStartElement('w', 'sectPr', this.wNamespace);\n if (section.headersFooters) {\n this.serializeHFReference(writer, section.headersFooters);\n }\n // if (IsNeedToSerializeSectionFootNoteProperties(section))\n // SerializeFootnoteProperties(section);\n // if (IsNeedToSerializeSectionEndNoteProperties(section))\n // SerializeEndnoteProperties(section);\n this.serializeSectionType(writer, 'nextPage');\n this.serializePageSetup(writer, section.sectionFormat);\n this.serializeColumns(writer, section);\n // this.serializeSectionProtection(section);\n // if (section.PageSetup.VerticalAlignment !== PageAlignment.Top) {\n // writer.writeStartElement('vAlign', this.wNamespace);\n // switch (section.PageSetup.VerticalAlignment) {\n // case PageAlignment.Top:\n // writer.WriteAttributeString('val', this.wNamespace, 'top');\n // break;\n // case PageAlignment.Middle:\n // writer.WriteAttributeString('val', this.wNamespace, 'center');\n // break;\n // case PageAlignment.Justified:\n // writer.WriteAttributeString('val', this.wNamespace, 'both');\n // break;\n // case PageAlignment.Bottom:\n // writer.WriteAttributeString('val', this.wNamespace, 'bottom');\n // break;\n // }\n // writer.WriteEndElement();\n // }\n if (section.sectionFormat !== undefined && section.sectionFormat.differentFirstPage) {\n writer.writeStartElement(undefined, 'titlePg', this.wNamespace);\n writer.writeEndElement();\n }\n // SerializeTextDirection(section);\n // if (section.PageSetup.Bidi) {\n // writer.WriteStartElement('bidi', this.wNamespace);\n // writer.WriteEndElement();\n // }\n //rtlGutter\n // SerializeDocGrid(section);\n //printerSettings\n writer.writeEndElement(); //end of sectPr tag\n };\n // Serialize the column properties of section.\n WordExport.prototype.serializeColumns = function (writer, section) {\n writer.writeStartElement(undefined, 'cols', this.wNamespace);\n writer.writeAttributeString(undefined, 'equalWidth', this.wNamespace, '1');\n writer.writeAttributeString(undefined, 'space', this.wNamespace, '0');\n writer.writeEndElement();\n // ColumnCollection columns = section.Columns;\n // writer.WriteStartElement('cols', this.wNamespace);\n // if (columns.length > 0)\n // {\n // writer.WriteAttributeString('num', this.wNamespace, columns.length.ToString());\n // }\n // if (section.PageSetup.DrawLinesBetweenCols)\n // writer.WriteAttributeString('sep', this.wNamespace, '1');\n // if (columns.OwnerSection.PageSetup.EqualColumnWidth)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '1');\n // //When the column count is negative, MS word just reset the column's count to zero\n // //To avoid index out of exception, checked the columns count\n // tslint:disable-next-line:max-line-length\n // writer.WriteAttributeString('space', this.wNamespace, ToString(columns.length > 0 ? columns[0].Space * this.TwentiethOfPoint : 0));\n // }\n // else if (columns.length > 0)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '0');\n // foreach (Column column in columns)\n // {\n // writer.WriteStartElement('col', this.wNamespace);\n // writer.WriteAttributeString('w', this.wNamespace, ToString(column.Width * this.TwentiethOfPoint));\n // tslint:disable-next-line:max-line-length\n // writer.WriteAttributeString('space', this.wNamespace, ToString(column.Space * this.TwentiethOfPoint));\n // writer.WriteEndElement();\n // }\n // }\n // writer.WriteEndElement();\n };\n // Serialize the page setup properties.\n WordExport.prototype.serializePageSetup = function (writer, pageSetup) {\n if (pageSetup !== undefined) {\n this.serializePageSize(writer, pageSetup);\n this.serializePageMargins(writer, pageSetup);\n }\n // // StartElement paperSrc (if any)\n // if (pageSetup.FirstPageTray > 0 || pageSetup.OtherPagesTray > 0) {\n // writer.WriteStartElement('paperSrc', this.wNamespace);\n // if (pageSetup.FirstPageTray > 0) {\n // writer.WriteAttributeString('first', this.wNamespace, pageSetup.FirstPageTray.ToString());\n // }\n // if (pageSetup.OtherPagesTray > 0) {\n // writer.WriteAttributeString('other', this.wNamespace, pageSetup.OtherPagesTray.ToString());\n // }\n // writer.WriteEndElement();\n // }\n writer.writeStartElement(undefined, 'pgBorders', this.wNamespace);\n // //zOrder\n // if (pageSetup.PageBordersApplyType === PageBordersApplyType.FirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'firstPage');\n // else if (pageSetup.PageBordersApplyType === PageBordersApplyType.AllExceptFirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'notFirstPage');\n // if (pageSetup.PageBorderOffsetFrom === PageBorderOffsetFrom.PageEdge) {\n // writer.WriteAttributeString('offsetFrom', this.wNamespace, 'page');\n // }\n // //Serializing zOrder of the front page border\n // if (!pageSetup.IsFrontPageBorder) {\n // writer.WriteAttributeString('zOrder', this.wNamespace, 'back');\n // }\n // SerializePageBorders(pageSetup.Borders);\n writer.writeEndElement();\n // this.serializeLineNumberType(writer, pageSetup);\n //this.serializePageNumberType(writer, pageSetup);\n };\n // serialize the page size\n WordExport.prototype.serializePageSize = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgSz', this.wNamespace);\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(pageSetup.pageWidth * this.twentiethOfPoint).toString());\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'h', this.wNamespace, this.roundToTwoDecimal(pageSetup.pageHeight * this.twentiethOfPoint).toString());\n // if (pageSetup.Orientation === PageOrientation.Landscape)\n // {\n // writer.WriteAttributeString('orient', this.wNamespace, 'landscape');\n // }\n writer.writeEndElement();\n };\n // Serialize the border.\n WordExport.prototype.serializePageMargins = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgMar', this.wNamespace);\n var marginValue = Math.round(pageSetup.topMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'top', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.rightMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'right', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.bottomMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'bottom', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.leftMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'left', this.wNamespace, marginValue.toString());\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'header', this.wNamespace, this.roundToTwoDecimal(pageSetup.headerDistance * this.twentiethOfPoint).toString());\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'footer', this.wNamespace, this.roundToTwoDecimal(pageSetup.footerDistance * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'gutter', this.wNamespace, '0');\n writer.writeEndElement();\n };\n // Serialize the section type.\n WordExport.prototype.serializeSectionType = function (writer, sectionBreakCode) {\n writer.writeStartElement('w', 'type', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, sectionBreakCode); //GetSectionBreakCode(sectionBreakCode));\n writer.writeEndElement();\n };\n // Serialize the heeader/footer reference.\n WordExport.prototype.serializeHFReference = function (writer, headersFooters) {\n var hfId = '';\n if (headersFooters !== undefined) {\n this.mDifferentFirstPage = this.section.sectionFormat.differentOddAndEvenPages;\n var hf = headersFooters.firstPageHeader;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.firstPageFooter;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.evenHeader;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.evenFooter;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.header;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.footer;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddFooter', hfId);\n writer.writeEndElement();\n }\n }\n };\n // Adds the header footer details to the collection.\n WordExport.prototype.addHeaderFooter = function (hf, hfType, id) {\n var hfColl = new Dictionary();\n this.headersFooters.add(hfType, hfColl);\n this.headersFooters.get(hfType).add(id, hf);\n };\n // Serializes the bodyItems\n WordExport.prototype.serializeBodyItems = function (writer, blockCollection, isLastSection) {\n for (var i = 0; i < blockCollection.length; i++) {\n this.serializeBodyItem(writer, blockCollection[i], isLastSection);\n }\n };\n // Serialize the TextBody item\n WordExport.prototype.serializeBodyItem = function (writer, item, isLastSection) {\n if (isNullOrUndefined(item)) {\n throw new Error('BodyItem should not be undefined');\n }\n if (item.hasOwnProperty('inlines')) {\n this.paragraph = item;\n this.serializeParagraph(writer, item, isLastSection);\n this.paragraph = undefined;\n }\n else {\n var table = item;\n for (var i = 0; i < table.rows.length; i++) {\n if (table.rows[i].cells.length > 0) {\n this.serializeTable(writer, table);\n break;\n }\n }\n }\n };\n // Serialize the paragraph\n WordExport.prototype.serializeParagraph = function (writer, paragraph, isLastSection) {\n if (isNullOrUndefined(paragraph)) {\n throw new Error('Paragraph should not be undefined');\n }\n var sec = this.blockOwner;\n //Need to write the Section Properties if the Paragraph is last item in the section\n if (!isLastSection && sec.hasOwnProperty('sectionFormat')\n && sec.blocks.indexOf(paragraph) === sec.blocks.length - 1) {\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeSectionProperties(writer, sec);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n // if (paragraph.ParagraphFormat.PageBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.PageBreak);\n // if (paragraph.ParagraphFormat.ColumnBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.ColumnBreak);\n //Splits the paragraph based on the newline character\n // paragraph.SplitTextRange();\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, paragraph.paragraphFormat, paragraph);\n writer.writeEndElement(); //end of pPr\n // Serialize watermark if paragraph is the first item of Header document.\n // EnsureWatermark(paragraph);\n this.serializeParagraphItems(writer, paragraph.inlines);\n writer.writeEndElement(); //end of paragraph tag.\n };\n // Serialize the paragraph items\n WordExport.prototype.serializeParagraphItems = function (writer, paraItems) {\n var previousNode = undefined;\n for (var i = 0; i < paraItems.length; i++) {\n var item = paraItems[i];\n if (item.hasOwnProperty('fieldType')) {\n this.serializeFieldCharacter(writer, item);\n }\n else if (item.hasOwnProperty('imageString')) {\n this.serializePicture(writer, item);\n }\n else if (item.hasOwnProperty('bookmarkType')) {\n this.serializeBookMark(writer, item);\n }\n else {\n this.serializeTextRange(writer, item, previousNode);\n }\n previousNode = item;\n }\n };\n // Serialize the book mark\n WordExport.prototype.serializeBookMark = function (writer, bookmark) {\n var bookmarkId = this.getBookmarkId(bookmark.name);\n var bookmarkName = bookmark.name;\n if (bookmark.bookmarkType === 0) {\n writer.writeStartElement('w', 'bookmarkStart', this.wNamespace);\n writer.writeAttributeString('w', 'name', this.wNamespace, bookmarkName);\n }\n else if (bookmark.bookmarkType === 1) {\n writer.writeStartElement('w', 'bookmarkEnd', this.wNamespace);\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, bookmarkId.toString());\n writer.writeEndElement();\n };\n WordExport.prototype.getBookmarkId = function (name) {\n var index = this.bookmarks.indexOf(name);\n if (index < 0) {\n index = this.bookmarks.length;\n this.bookmarks.push(name);\n }\n return index;\n };\n // Serialize the picture.\n WordExport.prototype.serializePicture = function (writer, image) {\n if (image.width >= 0 && image.height >= 0) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, image.characterFormat);\n this.serializeDrawing(writer, image);\n writer.writeEndElement(); //end of run element\n }\n };\n // Serialize the drawing element.\n WordExport.prototype.serializeDrawing = function (writer, image) {\n writer.writeStartElement(undefined, 'drawing', this.wNamespace);\n this.serializeInlinePicture(writer, image);\n writer.writeEndElement();\n };\n // Serialize the inline picture.\n WordExport.prototype.serializeInlinePicture = function (writer, image) {\n writer.writeStartElement(undefined, 'inline', this.wpNamespace);\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(image.width * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(image.height * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n // double borderWidth = (double)picture.PictureShape.PictureDescriptor.BorderLeft.LineWidth / DLSConstants.BorderLineFactor;\n // if (borderWidth > 0 && picture.DocxProps.length === 0) {\n // long leftTop = 0, rightBottom = 0;\n // picture.PictureShape.GetEffectExtent(borderWidth, ref leftTop, ref rightBottom);\n // m_writer.WriteStartElement('effectExtent', WP_namespace);\n // m_writer.WriteAttributeString('l', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('t', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('r', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('b', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteEndElement();\n // }\n //this.serializePicProperties(writer, image);\n this.serializeDrawingGraphics(writer, image);\n writer.writeEndElement();\n };\n WordExport.prototype.startsWith = function (sourceString, startString) {\n return startString.length > 0 && sourceString.substring(0, startString.length) === startString;\n };\n // Serialize the graphics element for pictures.\n WordExport.prototype.serializeDrawingGraphics = function (writer, picture) {\n var id = '';\n id = this.updateShapeId(picture);\n // picture.ShapeId = this.getNextDocPrID();\n // Processing picture\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n // if (!isNullOrUndefined(picture.AlternativeText))\n // m_writer.WriteAttributeString('descr', picture.AlternativeText);\n writer.writeAttributeString(undefined, 'name', undefined, '1'.toString());\n // if (!string.IsNullOrEmpty(picture.Title))\n // m_writer.WriteAttributeString('title', picture.Title);\n // else\n writer.writeAttributeString(undefined, 'title', undefined, '');\n // if (!picture.Visible)\n // m_writer.WriteAttributeString('hidden', '1');\n // SerializePictureHyperlink(picture);\n writer.writeEndElement();\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.pictureNamespace);\n writer.writeStartElement('pic', 'pic', this.pictureNamespace);\n writer.writeStartElement('pic', 'nvPicPr', this.pictureNamespace);\n writer.writeStartElement('pic', 'cNvPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, '0');\n writer.writeAttributeString(undefined, 'name', undefined, '');\n writer.writeAttributeString(undefined, 'descr', undefined, '');\n writer.writeEndElement();\n writer.writeStartElement('pic', 'cNvPicPr', this.pictureNamespace);\n writer.writeStartElement('a', 'picLocks', this.aNamespace);\n writer.writeAttributeString(undefined, 'noChangeAspect', undefined, '1');\n writer.writeAttributeString(undefined, 'noChangeArrowheads', undefined, '1');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'blipFill', this.pictureNamespace);\n writer.writeStartElement('a', 'blip', this.aNamespace);\n if (this.startsWith(picture.imageString, 'data:image')) {\n writer.writeAttributeString('r', 'embed', this.rNamespace, id);\n }\n else {\n if (this.documentImages.containsKey(id)) {\n //Remove the image document images collection for this particular key\n //If the picture image data has href means MS Word contains the image in media folder as well as \n //it is having external relationship id\n // if (!this.startsWith(picture.imageString, 'data:image')) {\n this.documentImages.remove(id);\n this.externalImages.add(id, picture.imageString);\n writer.writeAttributeString(undefined, 'link', this.rNamespace, id);\n }\n }\n //End Element Blip\n writer.writeEndElement();\n writer.writeStartElement('a', 'srcRect', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'stretch', this.aNamespace);\n writer.writeStartElement('a', 'fillRect', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'spPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'bwMode', undefined, 'auto');\n writer.writeStartElement('a', 'xfrm', this.aNamespace);\n // if (picture.Rotation !== 0)\n // m_writer.WriteAttributeString('rot', picture.Rotation.ToString());\n writer.writeStartElement('a', 'off', this.aNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('a', 'ext', this.aNamespace);\n var cx = Math.round((picture.width * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round((picture.height * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'prstGeom', this.aNamespace);\n writer.writeAttributeString(undefined, 'prst', undefined, 'rect');\n writer.writeStartElement('a', 'avLst', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n //When the picture border has been added next to effect list\n //if not, Picture border has not been preserved\n // if (picture.HasBorder)\n // {\n // if (picture.TextWrappingStyle === TextWrappingStyle.Inline && picture.IsShape)\n // SerializeInlineShapeLine(picture.PictureShape);\n // else\n // SerializeShapeLine(picture.PictureShape);\n // }\n // if (picture.DocxProps.length > 0)\n // SerializeDocxProps(picture.DocxProps, 'effectLst');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n /// Update the shape id.\n WordExport.prototype.updateShapeId = function (picture) {\n var id = '';\n var tOwner = this.paragraph;\n // Adding picture byte data to the corresponding picture collection \n // depending on its owner subdocument\n if (this.headerFooter) {\n id = this.updateHFImageRels(this.headerFooter, picture);\n }\n else {\n if (id === '') {\n if (tOwner.hasOwnProperty('sectionFormat') || tOwner.hasOwnProperty('inlines')) {\n id = this.addImageRelation(this.documentImages, picture);\n // if (owner is WFootnote)\n // {\n // if ((owner as WFootnote).FootnoteType === FootnoteType.Footnote)\n // id = AddImageRelation(FootnoteImages, picture.ImageRecord);\n // else\n // id = AddImageRelation(EndnoteImages, picture.ImageRecord);\n // }\n // if (owner is WComment)\n // id = AddImageRelation(CommentImages, picture.ImageRecord);\n }\n }\n }\n return id;\n };\n // Adds the image relation.\n WordExport.prototype.addImageRelation = function (imageCollection, image) {\n var relationId = '';\n // if (imageCollection.ContainsValue(imageRecord)) {\n // foreach(string key in imageCollection.keys)\n // {\n // if (imageRecord === imageCollection[key]) {\n // relationId = key;\n // break;\n // }\n // }\n // }\n // else {\n relationId = this.getNextRelationShipID();\n imageCollection.add(relationId, image);\n // }\n return relationId;\n };\n // Update the HeaderFooter image relations.\n WordExport.prototype.updateHFImageRels = function (hf, image) {\n var id = '';\n // UpdateImages(image);\n var headerId = '';\n var types = this.headersFooters.keys;\n for (var i = 0; i < types.length; i++) {\n var hfColl = this.headersFooters.get(types[i]);\n var hfKeys = hfColl.keys;\n for (var j = 0; j < hfKeys.length; j++) {\n if (hfColl.get(hfKeys[j]) === hf) {\n headerId = hfKeys[j];\n var headerImages = void 0;\n if (this.headerFooterImages.containsKey(headerId)) {\n headerImages = this.headerFooterImages.get(headerId);\n id = this.addImageRelation(headerImages, image);\n }\n else {\n headerImages = new Dictionary();\n id = this.addImageRelation(headerImages, image);\n this.headerFooterImages.add(headerId, headerImages);\n }\n }\n }\n }\n return id;\n };\n // Serialize the table\n WordExport.prototype.serializeTable = function (writer, table) {\n if (table.rows.length <= 0) {\n return;\n }\n var owner = this.table;\n this.table = table;\n writer.writeStartElement(undefined, 'tbl', this.wNamespace);\n var tableFormat = table.rows[0].rowFormat;\n this.serializeTableFormat(writer, tableFormat, table);\n this.serializeTableGrid(writer, table);\n this.serializeTableRows(writer, table.rows);\n writer.writeEndElement();\n this.table = owner;\n };\n // Serialize the table grid\n WordExport.prototype.serializeTableGrid = function (writer, table) {\n writer.writeStartElement(undefined, 'tblGrid', this.wNamespace);\n if (table.grid.length !== 0) {\n this.serializeGridColumns(writer, table.grid);\n }\n writer.writeEndElement();\n };\n // Serialize the table rows\n WordExport.prototype.serializeTableRows = function (writer, rows) {\n if (rows.length > 0) {\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (row.cells.length > 0) {\n this.serializeRow(writer, row);\n }\n }\n }\n };\n // Serialize the table row\n WordExport.prototype.serializeRow = function (writer, row) {\n var owner = this.row;\n this.row = row;\n writer.writeStartElement(undefined, 'tr', this.wNamespace);\n this.serializeRowFormat(writer, row);\n this.serializeCells(writer, row.cells);\n writer.writeEndElement(); //end od table row 'tr'\n this.row = owner;\n };\n // Serialize the row format\n WordExport.prototype.serializeRowFormat = function (writer, row) {\n writer.writeStartElement(undefined, 'trPr', this.wNamespace);\n //Serialize Row Height\n if (row.rowFormat.height > 0) {\n writer.writeStartElement(undefined, 'trHeight', this.wNamespace);\n if (row.rowFormat.heightType === 'Exactly') {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'exact');\n }\n else if (row.rowFormat.heightType === 'AtLeast') {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'atLeast');\n }\n var height = this.roundToTwoDecimal(row.rowFormat.height * this.twentiethOfPoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, height);\n writer.writeEndElement();\n }\n var rowFormat = row.rowFormat;\n // //Serialize 'gridBefore' element\n var gridBefore = rowFormat.gridBefore;\n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'gridBefore', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridBefore.toString());\n writer.writeEndElement();\n }\n // //Serialize 'gridAfter' element\n var gridAfter = rowFormat.gridAfter;\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'gridAfter', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridAfter.toString());\n writer.writeEndElement();\n }\n // //Serialize 'wBefore' element \n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'wBefore', this.wNamespace);\n switch (rowFormat.gridBeforeWidthType) {\n case 'Percent':\n var width = this.roundToTwoDecimal(rowFormat.gridBeforeWidth * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n var pointWidth = this.roundToTwoDecimal(rowFormat.gridBeforeWidth * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'wAfter' element\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'wAfter', this.wNamespace);\n switch (rowFormat.gridAfterWidthType) {\n case 'Percent':\n var width = this.roundToTwoDecimal(rowFormat.gridAfterWidth * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n var pointWidth = this.roundToTwoDecimal(rowFormat.gridAfterWidth * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'cantSplit' element \n if (!rowFormat.allowBreakAcrossPages) {\n writer.writeStartElement(undefined, 'cantSplit', this.wNamespace);\n writer.writeEndElement();\n }\n // //Serialize 'tblHeader' element \n if (rowFormat.isHeader) {\n writer.writeStartElement(undefined, 'tblHeader', this.wNamespace);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n // serialize the table cells\n WordExport.prototype.serializeCells = function (writer, cells) {\n for (var i = 0; i < cells.length; i++) {\n this.serializeCell(writer, cells[i]);\n }\n };\n // Serialize the table cell\n WordExport.prototype.serializeCell = function (writer, cell) {\n var owner = this.blockOwner;\n this.blockOwner = cell;\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n this.serializeCellFormat(writer, cell.cellFormat);\n if (cell.blocks.length > 0) {\n var itemIndex = 0;\n var item = undefined;\n while (itemIndex < cell.blocks.length) {\n item = cell.blocks[itemIndex];\n this.serializeBodyItem(writer, item, false);\n itemIndex += 1;\n }\n }\n else {\n writer.writeStartElement(undefined, 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'Normal');\n writer.writeEndElement(); //end of pStyle\n writer.writeEndElement(); //end of pPr\n writer.writeEndElement(); //end of P\n }\n writer.writeEndElement(); //end of table cell 'tc' \n this.blockOwner = owner;\n };\n // Serialize the cell formatting\n WordExport.prototype.serializeCellFormat = function (writer, cellFormat) {\n var cell = this.blockOwner;\n //Get the table fomat\n var tf = this.table.tableFormat;\n //Get the row format\n var rf = this.row.rowFormat;\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n //w:cnfStyle - Table Cell Conditional Formatting\n // SerializeCnfStyleElement(cell);\n //w:tcW - Preferred Table Cell Width\n this.serializeCellWidth(writer, cell);\n //w:hMerge - Horizontally Merged Cell and w:vMerge - Vertically Merged Cell\n this.serializeCellMerge(writer, cellFormat);\n //w:gridSpan - Grid Columns Spanned by Current Table Cell\n this.serializeGridSpan(writer, cell);\n //w:tcBorders - Table Cell Borders\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cellFormat.borders, 8);\n writer.writeEndElement();\n //w:shd - Table Cell Shading\n this.serializeShading(writer, cell.cellFormat.shading);\n // //w:noWrap - Don't Wrap Cell Content\n // if (cellFormat.HasValue(CellFormat.TextWrapKey)) {\n // m_writer.WriteStartElement('noWrap', W_namespace);\n // if (cellFormat.TextWrap)\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'false');\n // m_writer.WriteEndElement();\n // }\n // //w:tcMar - Single Table Cell Margins\n // if (!cellFormat.SamePaddingsAsTable) {\n // m_writer.WriteStartElement('tcMar', W_namespace);\n // SerializePaddings(cellFormat.Paddings);\n // m_writer.WriteEndElement();\n // }\n //w:textDirection - Table Cell Text Flow Direction\n this.serializeTableCellDirection(writer, cellFormat);\n // //w:tcFitText - Fit Text Within Cell\n // if (cellFormat.FitText) {\n // m_writer.WriteStartElement('tcFitText', W_namespace);\n // m_writer.WriteEndElement();\n // }\n // //w:hideMark \n // if (cellFormat.HideMark) {\n // m_writer.WriteStartElement('hideMark', W_namespace);\n // m_writer.WriteEndElement();\n // }\n //w:vAlign - Table Cell Vertical Alignment\n // if (cellFormat.HasValue(CellFormat.VrAlignmentKey))\n this.serializeCellVerticalAlign(writer, cellFormat.verticalAlignment);\n // //w:hideMark - Ignore End Of Cell Marker In Row Height Calculation\n // SerializeDocxProps(tempDocxProps, 'hideMark');\n // //w:cellIns - Table Cell Insertion\n // SerializeDocxProps(tempDocxProps, 'cellIns');\n // //w:cellDel - Table Cell Deletion\n // SerializeDocxProps(tempDocxProps, 'cellDel');\n // //w:cellMerge - Vertically Merged/Split Table Cells\n // SerializeDocxProps(tempDocxProps, 'cellMerge');\n // if (cellFormat.OldPropertiesHash.length > 0 && !m_isAlternativeCellFormat) {\n // m_isAlternativeCellFormat = true;\n // SerializeTrackChangeProps('tcPrChange', cellFormat.FormatChangeAuthorName, cellFormat.FormatChangeDateTime);\n // Dictionary < int, object > oldPropertyHash = new Dictionary(cellFormat.OldPropertiesHash);\n // Dictionary < int, object > propertyHash = new Dictionary(cellFormat.PropertiesHash);\n // cellFormat.PropertiesHash.Clear();\n // cellFormat.OldPropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // SerializeCellFormat(cellFormat);\n // cellFormat.PropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in propertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.OldPropertiesHash[keyValue.Key] = keyValue.Value;\n // m_writer.WriteEndElement();\n // m_isAlternativeCellFormat = false;\n // }\n writer.writeEndElement();\n };\n // Serialize the cell width\n WordExport.prototype.serializeCellWidth = function (writer, cell) {\n var cf = cell.cellFormat;\n writer.writeStartElement(undefined, 'tcW', this.wNamespace);\n if (cf.preferredWidthType === 'Percent') {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf.preferredWidth * this.percentageFactor).toString());\n }\n else if (cf.preferredWidthType === 'Point') {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf.preferredWidth * this.twipsInOnePoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n else {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n }\n writer.writeEndElement();\n };\n // Serialize cell merge\n WordExport.prototype.serializeCellMerge = function (writer, cellFormat) {\n var cell = this.blockOwner;\n var isserialized = false;\n var collKey;\n var currentIndex = cell.columnIndex;\n var cellIndex = this.row.cells.indexOf(cell);\n var prevIndex = cellIndex > 0 ? this.row.cells[cellIndex - 1].columnIndex : cell.columnIndex;\n if (cell.columnIndex === cellIndex) {\n collKey = cell.columnIndex;\n isserialized = true;\n }\n else {\n isserialized = false;\n }\n if (!isserialized) {\n if (cellIndex === 0) {\n currentIndex = cell.columnIndex;\n prevIndex = -1;\n }\n for (var i = prevIndex; i < currentIndex; i++) {\n collKey = prevIndex + 1;\n prevIndex += 1;\n if (this.mVerticalMerge.containsKey(collKey)) {\n this.createMerge(writer, collKey, cell);\n }\n }\n }\n if (cellFormat.rowSpan > 1) {\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n this.mVerticalMerge.add(collKey, cellFormat.rowSpan - 1);\n if (cellFormat.columnSpan > 1) {\n this.mGridSpans.add(collKey, cellFormat.columnSpan);\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, 'restart');\n writer.writeEndElement();\n }\n else if (this.mVerticalMerge.containsKey(collKey) && isserialized) {\n this.createMerge(writer, collKey, cell);\n }\n else if (this.mVerticalMerge.containsKey(cellIndex + 1) && isserialized && cell.nextNode === undefined) {\n collKey = cell.columnIndex + 1;\n writer.writeEndElement();\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n this.checkMergeCell(collKey);\n }\n };\n WordExport.prototype.createMerge = function (writer, collKey, cell) {\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n writer.writeEndElement(); //end tcPr\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement();\n writer.writeEndElement(); //end tc\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeCellWidth(writer, cell);\n this.checkMergeCell(collKey);\n };\n WordExport.prototype.serializeColumnSpan = function (collKey, writer) {\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.mGridSpans.get(collKey).toString());\n writer.writeEndElement();\n }\n };\n WordExport.prototype.checkMergeCell = function (collKey) {\n if ((this.mVerticalMerge.get(collKey) - 1) === 0) {\n this.mVerticalMerge.remove(collKey);\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n this.mGridSpans.remove(collKey);\n }\n }\n else {\n this.mVerticalMerge.set(collKey, this.mVerticalMerge.get(collKey) - 1);\n }\n };\n // Serialize the grid span element of cell.\n WordExport.prototype.serializeGridSpan = function (writer, cell) {\n // int gridSpan = cell.cellFormat.GridSpan;\n if (cell.cellFormat.columnSpan > 1) {\n var num = cell.cellFormat.columnSpan;\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, num.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the table cell direction\n WordExport.prototype.serializeTableCellDirection = function (writer, cellFormat) {\n // if (cellFormat..textDirection !== TextDirection.Horizontal)\n // {\n // m_writer.WriteStartElement('textDirection', W_namespace);\n // switch (cellFormat.TextDirection)\n // {\n // case TextDirection.Horizontal:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTb');\n // break;\n // case TextDirection.VerticalBottomToTop:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'btLr');\n // break;\n // case TextDirection.VerticalTopToBottom:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRl');\n // break;\n // case TextDirection.HorizontalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTbV');\n // break;\n // case TextDirection.Vertical:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbLrV');\n // break;\n // case TextDirection.VerticalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRlV');\n // break;\n // }\n // m_writer.WriteEndElement();\n // }\n };\n // Serialize the cell vertical alignment\n WordExport.prototype.serializeCellVerticalAlign = function (writer, alignment) {\n writer.writeStartElement(undefined, 'vAlign', this.wNamespace);\n switch (alignment) {\n case 'Top':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'top');\n break;\n case 'Center':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'bottom');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the table grid columns.\n WordExport.prototype.serializeGridColumns = function (writer, grid) {\n for (var i = 1, count = grid.length; i < count; i++) {\n var gridValue = Math.round(grid[i] * 20);\n writer.writeStartElement(undefined, 'gridCol', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, gridValue.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the row formattings.\n // Table parameter is passed for serializing table format and undefined for serializing row format.\n WordExport.prototype.serializeTableFormat = function (writer, format, table) {\n // if (!isNullOrUndefined(table))\n // {\n // List tempDocxProps = new List();\n // for (int i = 0, cnt = table.DocxTableFormat.NodeArray.length; i < cnt; i++)\n // tempDocxProps.Add(table.DocxTableFormat.NodeArray[i]);\n writer.writeStartElement(undefined, 'tblPr', this.wNamespace);\n // SerializeTableStlye(format);\n // if (format.WrapTextAround &&!((table.OwnerTextBody.Owner is WTextBox) || \n //(table.OwnerTextBody.Owner is WComment) || (table.OwnerTextBody.Owner is WFootnote)))\n // {\n // SerializeTablePositioning(format.Positioning);\n // if (!format.Positioning.AllowOverlap)\n // {\n // m_writer.WriteStartElement('tblOverlap', W_namespace);\n // m_writer.WriteAttributeString('val', W_namespace, 'never');\n // m_writer.WriteEndElement();\n // }\n // }\n // if (format.Bidi)\n // {\n // m_writer.WriteStartElement('bidiVisual', W_namespace);\n // m_writer.WriteEndElement();\n // }\n // SerializeDocxProps(tempDocxProps, 'tblStyleRowBandSize');\n // SerializeDocxProps(tempDocxProps, 'tblStyleColBandSize');\n this.serializeTableWidth(writer, table);\n this.serializeTableAlignment(writer, table.tableFormat);\n this.serializeCellSpacing(writer, table.tableFormat);\n this.serializeTableIndentation(writer, table.tableFormat);\n this.serializeTableBorders(writer, table.tableFormat);\n this.serializeShading(writer, table.tableFormat.shading);\n this.serializeTblLayout(writer, table.tableFormat);\n // this.serializeTableCellMargin(writer, table.tableFormat);\n // SerializeTableLook(table);\n // if (!isNullOrUndefined(table.Title))\n // SerializeTableTitle(table);\n // if (!isNullOrUndefined(table.Description))\n // SerializeTableDescription(table);\n // }\n // else\n // {\n // SerializeCellSpacing(format);\n // SerializeTableIndentation(format);\n // SerializeTableBorders(format);\n // SerializeTableShading(format);\n // SerializeTblLayout(format);\n // SerializeTableCellMargin(format);\n // }\n // if (!isNullOrUndefined(format.OwnerBase) && format.OwnerBase is WTable\n // && format.OldPropertiesHash.length > 0 && !m_isAlternativeTableFormat)\n // {\n // m_isAlternativeTableFormat = true;\n // SerializeTrackChangeProps('tblPrChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, format.OwnerBase as WTable);\n // m_writer.WriteEndElement();\n // m_isAlternativeTableFormat = false;\n // }\n // if (!isNullOrUndefined(format.OwnerRow) && format.OldPropertiesHash.length > 0)\n // {\n // SerializeTrackChangeProps('tblPrExChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, undefined);\n // m_writer.WriteEndElement();\n // }\n // SerializeTblTrackChanges(format);\n if (!isNullOrUndefined(table)) {\n writer.writeEndElement(); //end of tblPr\n }\n };\n // Serialize the table borders\n WordExport.prototype.serializeShading = function (writer, format) {\n // if (format.textureStyle !== 'TextureNone') {\n writer.writeStartElement(undefined, 'shd', this.wNamespace);\n writer.writeAttributeString(undefined, 'fill', this.wNamespace, this.getColor(format.backgroundColor));\n if (format.foregroundColor === 'empty') {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n }\n else {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(format.foregroundColor));\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTextureStyle(format.textureStyle));\n writer.writeEndElement();\n // }\n };\n WordExport.prototype.getTextureStyle = function (textureStyle) {\n switch (textureStyle) {\n case 'Texture5Percent':\n case 'Texture2Pt5Percent':\n case 'Texture7Pt5Percent':\n return 'pct5';\n case 'Texture10Percent':\n return 'pct10';\n case 'Texture12Pt5Percent':\n return 'pct12';\n case 'Texture15Percent':\n case 'Texture17Pt5Percent':\n return 'pct15';\n case 'Texture20Percent':\n case 'Texture22Pt5Percent':\n return 'pct20';\n case 'Texture25Percent':\n case 'Texture27Pt5Percent':\n return 'pct25';\n case 'Texture30Percent':\n case 'Texture32Pt5Percent':\n return 'pct30';\n case 'Texture35Percent':\n return 'pct35';\n case 'Texture37Pt5Percent':\n return 'pct37';\n case 'Texture40Percent':\n case 'Texture42Pt5Percent':\n return 'pct40';\n case 'Texture45Percent':\n case 'Texture47Pt5Percent':\n return 'pct45';\n case 'Texture50Percent':\n case 'Texture52Pt5Percent':\n return 'pct50';\n case 'Texture55Percent':\n case 'Texture57Pt5Percent':\n return 'pct55';\n case 'Texture60Percent':\n return 'pct60';\n case 'Texture62Pt5Percent':\n return 'pct62';\n case 'Texture65Percent':\n case 'Texture67Pt5Percent':\n return 'pct65';\n case 'Texture70Percent':\n case 'Texture72Pt5Percent':\n return 'pct70';\n case 'Texture75Percent':\n case 'Texture77Pt5Percent':\n return 'pct75';\n case 'Texture80Percent':\n case 'Texture82Pt5Percent':\n return 'pct80';\n case 'Texture85Percent':\n return 'pct85';\n case 'Texture87Pt5Percent':\n return 'pct87';\n case 'Texture90Percent':\n case 'Texture92Pt5Percent':\n return 'pct90';\n case 'Texture95Percent':\n case 'Texture97Pt5Percent':\n return 'pct95';\n case 'TextureCross':\n return 'thinHorzCross';\n case 'TextureDarkCross':\n return 'horzCross';\n case 'TextureDarkDiagonalCross':\n return 'diagCross';\n case 'TextureDarkDiagonalDown':\n return 'reverseDiagStripe';\n case 'TextureDarkDiagonalUp':\n return 'diagStripe';\n case 'TextureDarkHorizontal':\n return 'horzStripe';\n case 'TextureDarkVertical':\n return 'vertStripe';\n case 'TextureDiagonalCross':\n return 'thinDiagCross';\n case 'TextureDiagonalDown':\n return 'thinReverseDiagStripe';\n case 'TextureDiagonalUp':\n return 'thinDiagStripe';\n case 'TextureHorizontal':\n return 'thinHorzStripe';\n case 'TextureSolid':\n return 'solid';\n case 'TextureVertical':\n return 'thinVertStripe';\n default:\n return 'clear';\n }\n };\n // Serialize the table borders\n WordExport.prototype.serializeTableBorders = function (writer, format) {\n var borders = format.borders;\n // if (IsNoneBorder(borders))\n // return;\n writer.writeStartElement(undefined, 'tblBorders', this.wNamespace);\n this.serializeBorders(writer, format.borders, 8);\n writer.writeEndElement();\n };\n // Serialize the borders.\n WordExport.prototype.serializeBorders = function (writer, borders, multipler) {\n this.serializeBorder(writer, borders.top, 'top', multipler);\n this.serializeBorder(writer, borders.left, 'left', multipler);\n this.serializeBorder(writer, borders.bottom, 'bottom', multipler);\n this.serializeBorder(writer, borders.right, 'right', multipler);\n this.serializeBorder(writer, borders.horizontal, 'insideH', multipler);\n this.serializeBorder(writer, borders.vertical, 'insideV', multipler);\n this.serializeBorder(writer, borders.diagonalDown, 'tl2br', multipler);\n this.serializeBorder(writer, borders.diagonalUp, 'tr2bl', multipler);\n };\n // Serialize the table layout element\n WordExport.prototype.serializeTblLayout = function (writer, format) {\n //TODO: AUTO size property is not mapped yet\n // if (!format.IsAutoResized)\n // {\n // writer.writeStartElement(undefined, 'tblLayout', this.wNamespace);\n // writer.writeAttributeString(undefined, 'type', this.wNamespace, 'fixed');\n // writer.writeEndElement();\n // }\n };\n // Serializes the Border\n WordExport.prototype.serializeBorder = function (writer, border, tagName, multiplier) {\n var borderStyle = border.lineStyle;\n var sz = (border.lineWidth * multiplier);\n var space = border.space;\n if (borderStyle === 'Cleared') {\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'nil');\n writer.writeEndElement();\n return;\n }\n else if ((borderStyle === 'None' && !border.hasNoneStyle) || sz <= 0) {\n return;\n }\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getBorderStyle(borderStyle));\n // if (border.color === '#000000')\n // {\n // writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n // }\n // else\n // {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(border.color));\n // }\n writer.writeAttributeString(undefined, 'sz', this.wNamespace, this.roundToTwoDecimal(sz).toString());\n writer.writeAttributeString(undefined, 'space', this.wNamespace, space.toString());\n if (border.shadow) {\n writer.writeAttributeString(undefined, 'shadow', this.wNamespace, 'on');\n }\n writer.writeEndElement();\n };\n // Get the border style as string\n WordExport.prototype.getBorderStyle = function (borderStyle) {\n switch (borderStyle) {\n case 'Cleared':\n return 'cleared';\n case 'DashSmallGap':\n return 'dashSmallGap';\n case 'Triple':\n return 'triple';\n case 'Dot':\n return 'dotted';\n case 'DashDot':\n return 'dotDash';\n case 'DashLargeGap':\n return 'dashed';\n case 'DashDotDot':\n return 'dotDotDash';\n case 'Double':\n return 'double';\n case 'ThinThickSmallGap':\n return 'thinThickSmallGap';\n case 'ThickThinSmallGap':\n return 'thickThinSmallGap';\n case 'ThinThickThinSmallGap':\n return 'thinThickThinSmallGap';\n case 'ThickThinMediumGap':\n return 'thickThinMediumGap';\n case 'ThinThickMediumGap':\n return 'thinThickMediumGap';\n case 'ThinThickThinMediumGap':\n return 'thinThickThinMediumGap';\n case 'ThickThinLargeGap':\n return 'thickThinLargeGap';\n case 'ThinThickLargeGap':\n return 'thinThickLargeGap';\n case 'ThinThickThinLargeGap':\n return 'thinThickThinLargeGap';\n case 'Thick':\n return 'thick';\n case 'SingleWavy':\n return 'wave';\n case 'DoubleWavy':\n return 'doubleWave';\n case 'DashDotStroked':\n return 'dashDotStroked';\n case 'Engrave3D':\n return 'threeDEngrave';\n case 'Emboss3D':\n return 'threeDEmboss';\n case 'Outset':\n return 'outset';\n case 'Inset':\n return 'inset';\n // case 'None':\n // return 'none';\n default:\n return 'single';\n }\n };\n // Serialize the table indentation.\n WordExport.prototype.serializeTableIndentation = function (writer, format) {\n writer.writeStartElement(undefined, 'tblInd', this.wNamespace);\n var tableIndent = Math.round(format.leftIndent * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableIndent.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n };\n // Serialize the cell spacing.\n WordExport.prototype.serializeCellSpacing = function (writer, format) {\n if (!isNullOrUndefined(format.cellSpacing) && format.cellSpacing >= 0) {\n writer.writeStartElement(undefined, 'tblCellSpacing', this.wNamespace);\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(format.cellSpacing * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n };\n // Serialize the table width\n WordExport.prototype.serializeTableWidth = function (writer, table) {\n writer.writeStartElement(undefined, 'tblW', this.wNamespace);\n if (table.tableFormat.preferredWidthType === 'Percent') {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, (table.tableFormat.preferredWidth * this.percentageFactor).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n }\n else if (table.tableFormat.preferredWidthType === 'Point') {\n var tableWidth = Math.round(table.tableFormat.preferredWidth * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableWidth.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n else {\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n }\n writer.writeEndElement();\n };\n // Serialize the table alignment\n WordExport.prototype.serializeTableAlignment = function (writer, format) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n switch (format.tableAlignment) {\n case 'Right':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'right');\n break;\n case 'Center':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'left');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the field\n WordExport.prototype.serializeFieldCharacter = function (writer, field) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, field.characterFormat);\n writer.writeStartElement(undefined, 'fldChar', this.wNamespace);\n var type = field.fieldType === 0 ? 'begin'\n : field.fieldType === 1 ? 'end' : 'separate';\n writer.writeAttributeString(undefined, 'fldCharType', this.wNamespace, type);\n writer.writeEndElement();\n writer.writeEndElement();\n };\n // Serialize the text range.\n WordExport.prototype.serializeTextRange = function (writer, span, previousNode) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, span.characterFormat);\n if (span.text === '\\t') {\n writer.writeElementString(undefined, 'tab', this.wNamespace, undefined);\n }\n else if (span.text === '\\v') {\n writer.writeElementString(undefined, 'br', this.wNamespace, undefined);\n }\n else if (span.text === '\\f') {\n writer.writeStartElement(undefined, 'br', this.wNamespace);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'page');\n writer.writeEndElement();\n }\n else {\n var isField = !isNullOrUndefined(previousNode)\n && previousNode.hasOwnProperty('fieldType') && previousNode.fieldType !== 2;\n writer.writeStartElement(undefined, isField ? 'instrText' : 't', this.wNamespace);\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString(span.text);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n // Serializes the paragraph format\n WordExport.prototype.serializeParagraphFormat = function (writer, paragraphFormat, paragraph) {\n if (!isNullOrUndefined(paragraphFormat.styleName)) {\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, paragraphFormat.styleName);\n writer.writeEndElement(); //end of pStyle\n }\n if (!isNullOrUndefined(paragraph)) {\n this.serializeListFormat(writer, paragraph.paragraphFormat.listFormat);\n }\n else {\n this.serializeListFormat(writer, paragraphFormat.listFormat);\n }\n this.serializeParagraphSpacing(writer, paragraphFormat);\n this.serializeIndentation(writer, paragraphFormat);\n this.serializeParagraphAlignment(writer, paragraphFormat.textAlignment);\n if (!isNullOrUndefined(paragraphFormat.tabs) && paragraphFormat.tabs.length > 0) {\n this.serializeTabs(writer, paragraphFormat.tabs);\n }\n };\n // Serialize Tabs\n WordExport.prototype.serializeTabs = function (writer, tabStops) {\n writer.writeStartElement('w', 'tabs', this.wNamespace);\n for (var i = 0; i < tabStops.length; i++) {\n this.serializeTab(writer, tabStops[i]);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializeTab = function (writer, tabStop) {\n var position = 0;\n writer.writeStartElement('w', 'tab', this.wNamespace);\n if (tabStop.position === 0 && tabStop.deletePosition !== 0) {\n position = tabStop.deletePosition * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, 'clear');\n }\n else {\n position = tabStop.position * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTabJustification(tabStop.tabJustification));\n }\n if (!isNullOrUndefined(tabStop.tabLeader) && (tabStop.tabLeader !== 'None')) {\n writer.writeAttributeString('w', 'leader', this.wNamespace, this.getTabLeader(tabStop.tabLeader));\n }\n writer.writeAttributeString('w', 'pos', this.wNamespace, position.toString() + '');\n writer.writeEndElement();\n };\n WordExport.prototype.getTabLeader = function (tabLeader) {\n switch (tabLeader) {\n case 'Dot':\n return 'dot';\n case 'Hyphen':\n return 'hyphen';\n case 'Underscore':\n return 'underscore';\n default:\n return 'none';\n }\n };\n WordExport.prototype.getTabJustification = function (tabJustification) {\n switch (tabJustification) {\n case 'Bar':\n return 'bar';\n case 'Center':\n return 'center';\n case 'Decimal':\n return 'decimal';\n case 'Left':\n return 'left';\n case 'List':\n return 'num';\n case 'Right':\n return 'right';\n default:\n return 'clear';\n }\n };\n // // Seraializes the pargraph list format\n // private serializeListParagraph(writer: XmlWriter, paragraph: any): void {\n // if (!isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n // this.serializeListFormat(writer, paragraph.paragraphFormat.listFormat);\n // }\n // }\n // Serialize the list format\n WordExport.prototype.serializeListFormat = function (writer, lf) {\n // let pStyleName = undefined;\n // if (lf.CurrentListStyle.IsBuiltInStyle && !isNullOrUndefined(lf.OwnerParagraph))\n // {\n // pStyleName = lf.OwnerParagraph.StyleName;\n // }\n // int listId = GetListId(lf);\n // if (!isNullOrUndefined(pStyleName) && string.IsNullOrEmpty(lf.LFOStyleName)) \n // {\n // WordDocument doc = lf.OwnerParagraph.Document;\n // WParagraphStyle style = doc.Styles.FindByName(pStyleName, StyleType.ParagraphStyle) as WParagraphStyle;\n // if (style.ListIndex === -1)\n // {\n // ListStyle lstStyle = lf.OwnerParagraph.Document.ListStyles.FindByName(lf.CustomStyleName);\n // style.ListIndex = listId;\n // if (lstStyle.Levels.length > 1)\n // {\n // style.ListLevel = lf.ListLevelNumber;\n // }\n // pStyleName = pStyleName.Replace(' ', '');\n // lstStyle.Levels[lf.ListLevelNumber].ParaStyleName = pStyleName;\n // }\n // }\n // else\n // {\n // if (!isNullOrUndefined(lf.listId) && !isNullOrUndefined(lf.listLevelNumber)) {\n // this.serializeNumPr(writer, lf.listId, lf.listLevelNumber);\n // }\n // }\n if (!isNullOrUndefined(lf.listId) || !isNullOrUndefined(lf.listLevelNumber)) {\n writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n if (!isNullOrUndefined(lf.listLevelNumber) && lf.listLevelNumber !== -1) {\n writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, lf.listLevelNumber.toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(lf.listId) && lf.listId !== -1) {\n writer.writeStartElement(undefined, 'numId', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, (lf.listId + 1).toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // // Serializes the numbering properties to the paragraph\n // private serializeNumPr(writer: XmlWriter, listId: number, listLevel: number): void {\n // writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n // if (listLevel !== -1) {\n // writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listLevel.toString());\n // writer.writeEndElement();\n // }\n // if (listId !== -1) {\n // writer.writeStartElement(undefined, 'numId', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listId.toString());\n // writer.writeEndElement();\n // }\n // writer.writeEndElement();\n // }\n WordExport.prototype.serializeParagraphAlignment = function (writer, txtAlignment) {\n if (!isNullOrUndefined(txtAlignment)) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n var alignment = void 0;\n switch (txtAlignment) {\n case 'Center':\n alignment = 'center';\n break;\n case 'Right':\n alignment = 'right';\n break;\n case 'Justify':\n alignment = 'both';\n break;\n default:\n alignment = 'left';\n break;\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, alignment);\n writer.writeEndElement();\n }\n };\n // Serializes the paragraph spacings\n WordExport.prototype.serializeParagraphSpacing = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'spacing', this.wNamespace);\n // if (paragraphFormat.HasValue(WParagraphFormat.BeforeLinesKey))\n // {\n // short beforeLines = (short)Math.Round(paragraphFormat.BeforeLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('beforeLines', this.wNamespace, ToString((float)beforeLines)); \n // }\n // if (paragraphFormat.HasValue(WParagraphFormat.AfterLinesKey))\n // {\n // short afterLines = (short)Math.Round(paragraphFormat.AfterLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('afterLines', this.wNamespace, ToString((float)afterLines)); \n // }\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(paragraphFormat.beforeSpacing)) {\n writer.writeAttributeString(undefined, 'before', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.beforeSpacing * this.twentiethOfPoint).toString());\n }\n //TODO:ISSUEFIX(paragraphFormat.beforeSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingBeforeAutoKey))\n // {\n // if (paragraphFormat.SpaceBeforeAuto)\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '0');\n // }\n // }\n if (!isNullOrUndefined(paragraphFormat.afterSpacing)) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'after', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.afterSpacing * this.twentiethOfPoint).toString());\n }\n //TODO:ISSUEFIX(paragraphFormat.afterSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingAfterAutoKey))\n // {\n // if (paragraphFormat.SpaceAfterAuto)\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '0');\n // }\n // }\n writer.writeAttributeString(undefined, 'line', this.wNamespace, '240');\n //TODO:ISSUEFIX((paragraphFormat.lineSpacing) * this.twentiethOfPoint).toString());\n switch (paragraphFormat.lineSpacingType) {\n case 'AtLeast':\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, 'atLeast');\n break;\n case 'Exactly':\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, 'exact');\n break;\n default:\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, 'auto');\n break;\n }\n writer.writeEndElement();\n };\n // Serializes the paragraph indentation\n WordExport.prototype.serializeIndentation = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'ind', this.wNamespace);\n if (!isNullOrUndefined(paragraphFormat.leftIndent)) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'left', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.leftIndent * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.rightIndent)) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'right', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.rightIndent * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n if (paragraphFormat.firstLineIndent < 0) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'hanging', this.wNamespace, this.roundToTwoDecimal(-1 * paragraphFormat.firstLineIndent * this.twipsInOnePoint).toString());\n }\n else {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'firstLine', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.firstLineIndent * this.twipsInOnePoint).toString());\n }\n }\n writer.writeEndElement();\n };\n // Serialize the styles (styles.xml)\n WordExport.prototype.serializeStyles = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'styles', this.wNamespace);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n //writes the document defaults, latent styles and default styles.\n this.serializeDefaultStyles(writer);\n //writes the document styles\n this.serializeDocumentStyles(writer);\n writer.writeEndElement(); //end of styles tag\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.stylePath);\n this.mArchive.addItem(zipArchiveItem); //this.stylePath, styleStream, false, FileAttributes.Archive);\n };\n // Serializes the default styles (document default paragraph and character format)\n WordExport.prototype.serializeDefaultStyles = function (writer) {\n writer.writeStartElement(undefined, 'docDefaults', this.wNamespace);\n //if (HasDefaultCharFormat())\n //{\n writer.writeStartElement(undefined, 'rPrDefault', this.wNamespace);\n // if (!isNullOrUndefined(this.mDocument.characterFormat)) {\n this.serializeCharacterFormat(writer, this.defCharacterFormat);\n writer.writeEndElement(); // end of rPrDefault\n // }\n // else {\n // writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n // writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n // if (!string.IsNullOrEmpty(m_document.StandardAsciiFont))\n // writer.WriteAttributeString('ascii', this.wNamespace, m_document.StandardAsciiFont);\n // if (!string.IsNullOrEmpty(m_document.StandardFarEastFont))\n // writer.WriteAttributeString('eastAsia', this.wNamespace, m_document.StandardFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardNonFarEastFont))\n // writer.WriteAttributeString('hAnsi', this.wNamespace, m_document.StandardNonFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardBidiFont))\n // writer.WriteAttributeString('cs', this.wNamespace, m_document.StandardBidiFont);\n // writer.WriteEndElement();\n // float fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('sz', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeBidiKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('szCs', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // //}\n writer.writeStartElement(undefined, 'pPrDefault', this.wNamespace);\n if (!isNullOrUndefined(this.defParagraphFormat)) {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, this.defParagraphFormat, undefined);\n writer.writeEndElement(); //end of pPr\n }\n writer.writeEndElement(); //end of pPrDefault\n // writer.WriteEndElement();\n // SerializeLatentStyles();\n // //Default styles\n // if (m_document.Styles.length === 0 || isNullOrUndefined(m_document.Styles.FindByName('Normal')))\n // {\n // SerializeDefaultParagraphStyle();\n // }\n // if (!IsDocumentContainsDefaultTableStyle())\n // {\n // SerializeTableNormalStyle();\n // }\n // if (isNullOrUndefined(m_document.Styles.FindByName('No List')) && isNullOrUndefined(m_document.Styles.FindByName('NoList')))\n // SerializeNoListStyle();\n // tslint:disable-next-line:max-line-length\n // if (isNullOrUndefined(m_document.Styles.FindByName('Table Grid')) && isNullOrUndefined(m_document.Styles.FindByName('TableGrid')))\n // {\n // SerializeTableGridStyle();\n // }\n // } \n writer.writeEndElement();\n };\n WordExport.prototype.serializeDocumentStyles = function (writer) {\n for (var i = 0; i < this.mStyles.length; i++) {\n var style = this.mStyles[i];\n writer.writeStartElement(undefined, 'style', this.wNamespace);\n var type = style.type === 'Paragraph' ? 'paragraph' : 'character';\n writer.writeAttributeString('w', 'type', this.wNamespace, type);\n writer.writeAttributeString('w', 'styleId', this.wNamespace, style.name);\n //name\n writer.writeStartElement(undefined, 'name', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.name);\n writer.writeEndElement();\n //basedOn\n if (!isNullOrUndefined(style.basedOn)) {\n writer.writeStartElement(undefined, 'basedOn', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.basedOn);\n writer.writeEndElement();\n }\n //next\n if (!isNullOrUndefined(style.next)) {\n writer.writeStartElement(undefined, 'next', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.next);\n writer.writeEndElement();\n }\n //link\n if (!isNullOrUndefined(style.link)) {\n writer.writeStartElement(undefined, 'link', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.link);\n writer.writeEndElement();\n }\n if (style.type === 'Paragraph') {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, style.paragraphFormat, undefined);\n writer.writeEndElement();\n }\n // let value = (style.characterFormat as WCharacterFormat).newgetCharacterFormat();\n this.serializeCharacterFormat(writer, style.characterFormat);\n writer.writeEndElement(); //end of Style\n }\n };\n // Serializes the Character format\n WordExport.prototype.serializeCharacterFormat = function (writer, characterFormat) {\n writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n if (!isNullOrUndefined(characterFormat.styleName)) {\n writer.writeStartElement(undefined, 'rStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, characterFormat.styleName);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontFamily)) {\n writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n writer.writeAttributeString(undefined, 'ascii', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'hAnsi', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'eastAsia', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'cs', this.wNamespace, characterFormat.fontFamily);\n writer.writeEndElement(); //end \n }\n if (!isNullOrUndefined(characterFormat.bold)) {\n this.serializeBoolProperty(writer, 'b', characterFormat.bold);\n }\n if (!isNullOrUndefined(characterFormat.italic)) {\n this.serializeBoolProperty(writer, 'i', characterFormat.italic);\n }\n if (!isNullOrUndefined(characterFormat.strikethrough)) {\n switch (characterFormat.strikethrough) {\n case 'SingleStrike':\n this.serializeBoolProperty(writer, 'strike', true);\n break;\n case 'DoubleStrike':\n this.serializeBoolProperty(writer, 'dstrike', true);\n break;\n default:\n this.serializeBoolProperty(writer, 'strike', false);\n this.serializeBoolProperty(writer, 'dstrike', false);\n break;\n }\n }\n if (!isNullOrUndefined(characterFormat.fontColor)) {\n writer.writeStartElement(undefined, 'color', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getColor(characterFormat.fontColor));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontSize)) {\n writer.writeStartElement(undefined, 'sz', this.wNamespace);\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString('w', 'val', this.wNamespace, this.roundToTwoDecimal(characterFormat.fontSize * 2).toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.highlightColor) && characterFormat.highlightColor !== 'NoColor') {\n writer.writeStartElement(undefined, 'highlight', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getHighlightColor(characterFormat.highlightColor));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.underline) && characterFormat.underline !== 'None') {\n writer.writeStartElement(undefined, 'u', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getUnderlineStyle(characterFormat.underline));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.baselineAlignment)) {\n writer.writeStartElement(undefined, 'vertAlign', this.wNamespace);\n switch (characterFormat.baselineAlignment) {\n case 'Subscript':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'subscript');\n break;\n case 'Superscript':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'superscript');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'baseline');\n break;\n }\n writer.writeEndElement();\n }\n writer.writeEndElement(); //end of rPrChange\n };\n WordExport.prototype.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n color = color.substr(1);\n }\n if (color.length > 6) {\n color = color.substr(0, 6);\n }\n }\n return color;\n };\n // Get the underline style as string\n WordExport.prototype.getUnderlineStyle = function (underlineStyle) {\n switch (underlineStyle) {\n case 'DotDotDashHeavy':\n return 'dashDotDotHeavy';\n case 'DotDashHeavy':\n return 'dashDotHeavy';\n case 'DashHeavy':\n return 'dashedHeavy';\n case 'DashLong':\n return 'dashLong';\n case 'DashLongHeavy':\n return 'dashLongHeavy';\n case 'DotDash':\n return 'dotDash';\n case 'DotDotDash':\n return 'dotDotDash';\n case 'Dotted':\n return 'dotted';\n case 'DottedHeavy':\n return 'dottedHeavy';\n case 'Double':\n return 'double';\n case 'Single':\n return 'single';\n case 'Thick':\n return 'thick';\n case 'Wavy':\n return 'wave';\n case 'WavyDouble':\n return 'wavyDouble';\n case 'WavyHeavy':\n return 'wavyHeavy';\n case 'Words':\n return 'words';\n default:\n return 'dash';\n }\n };\n WordExport.prototype.getHighlightColor = function (highlight) {\n switch (highlight) {\n // Highlights the content with bright green (#ff00ff00) color.\n case 'BrightGreen':\n return 'green';\n // Highlights the content with turquoise (#ff00ffff) color.\n case 'Turquoise':\n return 'cyan';\n // Highlights the content with pink (#ffff00ff) color.\n case 'Pink':\n return 'magenta';\n // Highlights the content with blue (#ff0000ff) color.\n case 'Blue':\n return 'blue';\n // Highlights the content with red (#ffff0000) color.\n case 'Red':\n return 'red';\n // Highlights the content with dark blue (#ff000080) color.\n case 'DarkBlue':\n return 'darkBlue';\n // Highlights the content with teal (#ff008080) color.\n case 'Teal':\n return 'darkCyan';\n // Highlights the content with green (#ff008000) color.\n case 'Green':\n return 'darkGreen';\n // Highlights the content with violet (#ff800080) color.\n case 'Violet':\n return 'darkMagenta';\n // Highlights the content with dark red (#ff800000) color.\n case 'DarkRed':\n return 'darkRed';\n // Highlights the content with dark yellow (#ff808000) color.\n case 'DarkYellow':\n return 'darkYellow';\n // Highlights the content with gray 50 (#ff808080) color.\n case 'Gray50':\n return 'darkGray';\n // Highlights the content with gray 25 (#ffc0c0c0) color.\n case 'Gray25':\n return 'lightGray';\n // Highlights the content with black (#ff000000) color.\n case 'Black':\n return 'black';\n // Highlights the content with yellow (#ffffff00) color.\n default:\n return 'yellow';\n }\n };\n /*private toggleFirstCahar(text: string) {\n return text.charAt(0).toLowerCase() + text.slice(1);\n }*/\n // Serializes the bool character format property\n WordExport.prototype.serializeBoolProperty = function (writer, tag, value) {\n writer.writeStartElement(undefined, tag, this.wNamespace);\n if (!value) {\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n };\n // Serialize the list styles and numberings (numberings.xml)\n WordExport.prototype.serializeNumberings = function () {\n if (this.document.lists.length === 0) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'numbering', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n // this.serializePictureBullets(writer, this.mDocument.lists);\n this.serializeAbstractListStyles(writer, this.document.abstractLists);\n this.serializeListInstances(writer, this.document.lists);\n // SerializeListOverrides(writer, this.mDocument.ridesm_document.ListOverrides);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.numberingPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the abstract list styles\n WordExport.prototype.serializeAbstractListStyles = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var abstractList = listStyles[i];\n writer.writeStartElement(undefined, 'abstractNum', this.wNamespace);\n writer.writeAttributeString(undefined, 'abstractNumId', this.wNamespace, abstractList.abstractListId.toString());\n writer.writeStartElement(undefined, 'nsid', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.generateHex());\n writer.writeEndElement();\n for (var ilvl = 0, cnt = abstractList.levels.length; ilvl < cnt; ilvl++) {\n this.serializeListLevel(writer, abstractList.levels[ilvl], ilvl);\n }\n writer.writeEndElement(); //end of abstractNum\n }\n };\n // Serializes the list styles\n WordExport.prototype.serializeListInstances = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var list = listStyles[i];\n writer.writeStartElement(undefined, 'num', this.wNamespace);\n writer.writeAttributeString(undefined, 'numId', this.wNamespace, (list.listId + 1).toString());\n writer.writeStartElement(undefined, 'abstractNumId', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, list.abstractListId.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n }\n };\n WordExport.prototype.generateHex = function () {\n return (Math.floor(Math.random() * (4000000000 - 270000000)) + 270000000).toString(16).toUpperCase();\n };\n WordExport.prototype.roundToTwoDecimal = function (num) {\n return Math.round(num); // * 100) / 100;\n };\n // Serialize the list level\n WordExport.prototype.serializeListLevel = function (writer, listLevel, levelIndex) {\n writer.writeStartElement(undefined, 'lvl', this.wNamespace);\n writer.writeAttributeString(undefined, 'ilvl', this.wNamespace, levelIndex.toString());\n writer.writeStartElement(undefined, 'start', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, listLevel.startAt.toString());\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getLevelPattern(listLevel.listLevelPattern));\n writer.writeEndElement();\n if (listLevel.restartLevel > 0) {\n writer.writeStartElement(undefined, 'lvlRestart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n writer.writeEndElement();\n }\n // if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n // string name = listLevel.ParaStyleName.Substring(0, 1).ToUpper() + listLevel.ParaStyleName.Remove(0, 1);\n // writer.WriteStartElement('pStyle', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, name);\n // writer.WriteEndElement();\n // }\n // if (listLevel.IsLegalStyleNumbering) {\n // writer.WriteStartElement('isLgl', this.wNamespace);\n // writer.WriteEndElement();\n // }\n this.serializeLevelFollow(writer, listLevel);\n this.serializeLevelText(writer, listLevel, levelIndex + 1);\n // SerializeLegacyProperties(listLevel);\n // if (listLevel.PicBulletId > 0) {\n // writer.WriteStartElement('lvlPicBulletId', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, listLevel.PicBulletId.ToString());\n // writer.WriteEndElement();\n // }\n // //lvlJc\n // if (listLevel.NumberAlignment !== ListNumberAlignment.Left) {\n // writer.WriteStartElement('lvlJc', this.wNamespace);\n // string alignment = string.Empty;\n // if (listLevel.NumberAlignment === ListNumberAlignment.Right) {\n // alignment = 'right';\n // }\n // else {\n // alignment = 'center';\n // }\n // writer.WriteAttributeString('val', this.wNamespace, alignment);\n // writer.WriteEndElement();\n // }\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, listLevel.paragraphFormat, undefined);\n writer.writeEndElement(); //end of pPr\n this.serializeCharacterFormat(writer, listLevel.characterFormat);\n writer.writeEndElement();\n };\n WordExport.prototype.getLevelPattern = function (levelPattern) {\n var patternType;\n switch (levelPattern) {\n case 'Arabic':\n patternType = 'decimal';\n break;\n case 'UpRoman':\n patternType = 'upperRoman';\n break;\n case 'LowRoman':\n patternType = 'lowerRoman';\n break;\n case 'UpLetter':\n patternType = 'upperLetter';\n break;\n case 'LowLetter':\n patternType = 'lowerLetter';\n break;\n // case 'Ordinal':\n // patternType = 'ordinal';\n // break;\n // case 'Number':\n // patternType = 'cardinalText';\n // break;\n // case 'OrdinalText':\n // patternType = 'ordinalText';\n // break;\n // case 'LeadingZero':\n // patternType = 'decimalZero';\n // break;\n // case 'Bullet':\n default:\n patternType = 'bullet';\n break;\n }\n return patternType;\n };\n // Serializes the level text\n WordExport.prototype.serializeLevelText = function (writer, listLevel, lvlIndex) {\n writer.writeStartElement(undefined, 'lvlText', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (listLevel.numberFormat));\n writer.writeEndElement();\n };\n // Serialize the level follow character\n WordExport.prototype.serializeLevelFollow = function (writer, listLevel) {\n var fc;\n //TODO:Type issue returns number instead of string\n if (listLevel.followCharacter === 'Tab') {\n fc = 'tab';\n }\n else if (listLevel.followCharacter === 'Space') {\n fc = 'space';\n }\n else {\n fc = 'nothing';\n }\n writer.writeStartElement(undefined, 'suff', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, fc);\n writer.writeEndElement();\n };\n WordExport.prototype.serializeSettings = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'settings', this.wNamespace);\n this.writeCustom(writer);\n // writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n // writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n // writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n // writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n // writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'sl', undefined, this.slNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n // //w:writeProtection - Write Protection\n // if (m_document.WriteProtected)\n // {\n // writer.writeStartElement('w', 'writeProtection', this.wNamespace);\n // writer.writeAttributeString('recommended', this.wNamespace, '1');\n // writer.writeEndElement();\n // }\n //w:view - Document View Setting\n // if (this.mDocument.ViewSetup.DocumentViewType !== DocumentViewType.PrintLayout &&\n // m_document.ViewSetup.DocumentViewType !== DocumentViewType.NormalLayout)\n // {\n // writer.writeStartElement('view', this.wNamespace);\n // string viewTypeStr = string.Empty;\n // if (m_document.ViewSetup.DocumentViewType === DocumentViewType.OutlineLayout)\n // {\n // viewTypeStr = 'outline';\n // }\n // else if (m_document.ViewSetup.DocumentViewType === DocumentViewType.WebLayout)\n // {\n // viewTypeStr = 'web';\n // }\n // writer.writeAttributeString('val', this.wNamespace, viewTypeStr);\n // writer.writeEndElement();\n // }\n //w:zoom - Magnification Setting\n writer.writeStartElement('w', 'zoom', this.wNamespace);\n // switch (m_document.ViewSetup.ZoomType)\n // {\n // case ZoomType.FullPage:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'fullPage');\n // break;\n // case ZoomType.PageWidth:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'bestFit');\n // break;\n // case ZoomType.TextFit:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'textFit');\n // break;\n // default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'none');\n // break;\n // }\n writer.writeAttributeString('w', 'percent', this.wNamespace, '100');\n writer.writeEndElement();\n //w:displayBackgroundShape - Display Background Objects When Displaying Document\n // if (m_document.Background.Type !== BackgroundType.NoBackground)\n // {\n writer.writeStartElement(undefined, 'displayBackgroundShape', this.wNamespace);\n writer.writeEndElement();\n // }\n //w:defaultTabStop - Distance Between Automatic Tab Stops\n writer.writeStartElement(undefined, 'defaultTabStop', this.wNamespace);\n var tabWidth = Math.round(this.defaultTabWidthValue * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, tabWidth.toString());\n writer.writeEndElement();\n //w:evenAndOddHeaders - Different Even/Odd Page Headers and Footers \n if (this.mDifferentFirstPage) {\n writer.writeStartElement(undefined, 'evenAndOddHeaders', this.wNamespace);\n writer.writeEndElement();\n }\n //w:footnotePr - Document-Wide Footnote Properties and w:endnotePr - Document-Wide Endnote Properties\n // SerializeFootnoteSettings();\n //w:compat - Compatibility Settings\n writer.writeStartElement(undefined, 'compat', this.wNamespace);\n writer.writeStartElement(undefined, 'compatSetting', this.wNamespace);\n writer.writeAttributeString(undefined, 'name', this.wNamespace, 'compatibilityMode');\n writer.writeAttributeString(undefined, 'uri', this.wNamespace, 'http://schemas.microsoft.com/office/word');\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '15');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.settingsPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeCoreProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeAppProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeFontTable = function (contentType) {\n //implementation\n };\n WordExport.prototype.serializeSettingsRelation = function () {\n //implementation\n };\n WordExport.prototype.serializeHeaderFooters = function () {\n this.serializeHeaderFooter('EvenFooter');\n this.serializeHeaderFooter('EvenHeader');\n this.serializeHeaderFooter('FirstPageFooter');\n this.serializeHeaderFooter('FirstPageHeader');\n this.serializeHeaderFooter('OddFooter');\n this.serializeHeaderFooter('OddHeader');\n };\n // Serializes the Header/Footer\n WordExport.prototype.serializeHeaderFooter = function (hfType) {\n if (this.headersFooters.length === 0) {\n return;\n }\n var headerFooterPath;\n var headerFooterRelsPath;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n var hf = undefined;\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n hf = hfColl.get(id);\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = this.headerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.headerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeHeader(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n else {\n headerFooterPath = this.footerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.footerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeFooter(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n }\n };\n // Serialize the header part\n WordExport.prototype.serializeHeader = function (header, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = header;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'hdr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n var owner = this.blockOwner;\n this.blockOwner = header;\n this.serializeBodyItems(writer, header.blocks, true);\n this.blockOwner = owner;\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n this.headerFooter = undefined;\n };\n // Serializes the HeaderFooter relations\n WordExport.prototype.serializeHFRelations = function (hfId, headerFooterRelsPath) {\n var hasHFImage = this.headerFooterImages.containsKey(hfId);\n // let hasHFHyperlinks = HeaderFooterHyperlinks.ContainsKey(hfId);\n // let hasHFInclPics = HeaderFooterInclPicUrls.ContainsKey(hfId);\n // let hasHFAlternateChunks = HeaderFooterAlternateChunks.ContainsKey(hfId);\n if (hasHFImage) {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeImagesRelations(this.headerFooterImages.get(hfId), writer);\n // if (hasHFHyperlinks)\n // SerializeHyperlinkRelations(stream, HeaderFooterHyperlinks[hfId]);\n // if (hasHFAlternateChunks)\n // SerializeAltChunkRelations(stream, HeaderFooterAlternateChunks[hfId]);\n // if (hasHFInclPics)\n // SerializeIncludePictureUrlRelations(stream, HeaderFooterInclPicUrls[hfId]);\n // if (HFOleContainers.ContainsKey(hfId))\n // {\n // AddOLEToZip(HFOleContainers[hfId]);\n // }\n // if (HFRelations.ContainsKey(hfId))\n // SerializeHFCommonRelations(stream, HFRelations[hfId]);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterRelsPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n else {\n return;\n }\n };\n WordExport.prototype.writeHFCommonAttributes = function (writer) {\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 've', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString('xmlns', 'pic', undefined, this.pictureNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('ve', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n // Serailize the footer and its relations\n WordExport.prototype.serializeFooter = function (footer, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = footer;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'ftr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n this.serializeBodyItems(writer, footer.blocks, true);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n };\n WordExport.prototype.serializeDocumentRelations = function () {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.stylesRelType, 'styles.xml');\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.settingsRelType, 'settings.xml');\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.ThemeRelType, 'theme/theme1.xml');\n if (this.document.lists.length > 0) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.numberingRelType, 'numbering.xml');\n }\n this.serializeHeaderFooterRelations(writer);\n // if (HasFontTable) {\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.FontTableRelType, 'fontTable.xml');\n // }\n // SerializeIncludePictureUrlRelations(docRelstream, InclPicFieldUrl);\n // //// Creating relationships for every hyperlink and image containing in the document\n this.serializeImagesRelations(this.documentImages, writer);\n // SerializeSvgImageRelation();\n //this.serializeExternalLinkImages(writer);\n // if (HasHyperlink && HyperlinkTargets.length > 0) {\n // SerializeHyperlinkRelations(docRelstream, HyperlinkTargets);\n // }\n // if (m_document.HasMacros\n // && IsMacroEnabled)\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.VbaProjectRelType, this.VbaProject);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.wordRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n this.headerFooter = undefined;\n };\n // Serializes the image relations\n WordExport.prototype.serializeImagesRelations = function (images, writer) {\n if (images.length > 0) {\n var imagePath = '';\n var base64ImageString = void 0;\n var keys = images.keys;\n for (var i = 0; i < keys.length; i++) {\n var mImage = images.get(keys[i]);\n base64ImageString = mImage.imageString;\n if (isNullOrUndefined(base64ImageString)) {\n imagePath = this.imagePath + '/0.jpeg';\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n }\n else {\n var extension = '';\n var formatClippedString = '';\n if (this.startsWith(base64ImageString, 'data:image/bmp;base64,')) {\n extension = '.bmp';\n formatClippedString = base64ImageString.replace('data:image/bmp;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-emf;base64,')) {\n extension = '.emf';\n formatClippedString = base64ImageString.replace('data:image/x-emf;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/exif;base64,')) {\n extension = '.exif';\n formatClippedString = base64ImageString.replace('data:image/exif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/gif;base64,')) {\n extension = '.gif';\n formatClippedString = base64ImageString.replace('data:image/gif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/icon;base64,')) {\n extension = '.ico';\n formatClippedString = base64ImageString.replace('data:image/icon;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpeg;base64,')) {\n extension = '.jpeg';\n formatClippedString = base64ImageString.replace('data:image/jpeg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpg;base64,')) {\n extension = '.jpg';\n formatClippedString = base64ImageString.replace('data:image/jpg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/png;base64,')) {\n extension = '.png';\n formatClippedString = base64ImageString.replace('data:image/png;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/tiff;base64,')) {\n extension = '.tif';\n formatClippedString = base64ImageString.replace('data:image/tiff;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-wmf;base64,')) {\n extension = '.wmf';\n formatClippedString = base64ImageString.replace('data:image/x-wmf;base64,', '');\n }\n else {\n extension = '.jpeg';\n }\n imagePath = this.imagePath + keys[i] + extension;\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n //if (m_archive.Find(imagePath.Replace('\\\\', '/')) === -1)\n // {\n var imageBlob = new Blob([this.encodedString(formatClippedString)]);\n var zipArchiveItem = new ZipArchiveItem(imageBlob, imagePath);\n // let TestArchive = new ZipArchive();\n this.mArchive.addItem(zipArchiveItem);\n // TestArchive.save('image.zip').then(function (): void {\n // TestArchive.destroy();\n // });\n // }\n }\n }\n }\n };\n /**\n * @private\n */\n WordExport.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 /*let dataUrlPrefix: string = '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 if (input.charAt(input.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\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 if (enc3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (enc4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n WordExport.prototype.serializeExternalLinkImages = function (writer) {\n var imagePath = '';\n var keys = this.externalImages.keys;\n for (var i = 0; i < this.externalImages.keys.length; i++) {\n this.serializeRelationShip(writer, keys[i], this.imageRelType, this.externalImages.get(keys[i]));\n }\n };\n // Serializes the HeaderFooters relations to the document relations stream\n WordExport.prototype.serializeHeaderFooterRelations = function (writer) {\n this.serializeHFRelation(writer, 'EvenFooter');\n this.serializeHFRelation(writer, 'EvenHeader');\n this.serializeHFRelation(writer, 'FirstPageFooter');\n this.serializeHFRelation(writer, 'FirstPageHeader');\n this.serializeHFRelation(writer, 'OddFooter');\n this.serializeHFRelation(writer, 'OddHeader');\n };\n // Serializes the headers footers relations.\n WordExport.prototype.serializeHFRelation = function (writer, hfType) {\n var headerFooterPath = '';\n var relType;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = 'header' + id.replace('rId', '') + '.xml';\n relType = this.headerRelType;\n }\n else {\n headerFooterPath = 'footer' + id.replace('rId', '') + '.xml';\n relType = this.footerRelType;\n }\n this.serializeRelationShip(writer, id, relType, headerFooterPath);\n }\n };\n // Serializes the relationship\n WordExport.prototype.serializeRelationShip = function (writer, relationshipID, relationshipType, targetPath) {\n writer.writeStartElement(undefined, 'Relationship', undefined);\n writer.writeAttributeString(undefined, 'Id', undefined, relationshipID);\n writer.writeAttributeString(undefined, 'Type', undefined, relationshipType);\n writer.writeAttributeString(undefined, 'Target', undefined, targetPath.replace('\\\\', '/').replace('\\v', ''));\n // tslint:disable-next-line:max-line-length\n if (relationshipType === this.hyperlinkRelType || this.startsWith(targetPath, 'http://') || this.startsWith(targetPath, 'https://') || this.startsWith(targetPath, 'file:///')) {\n // Uri targetUri;\n // if ((!targetPath.StartsWith('file:///')) && Uri.TryCreate(targetPath, UriKind.Absolute, out targetUri))\n // {\n // //Handled using Try catch to avoid exception if the Host name type is None because in \n //Silverlight 'HostNameType' property is not available.\n // try\n // {\n // m_writer.WriteAttributeString('Target', targetUri.AbsoluteUri);\n // }\n // catch\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n // }\n // else\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n writer.writeAttributeString(undefined, 'TargetMode', undefined, 'External');\n }\n writer.writeEndElement();\n };\n // Get the next relationship ID\n WordExport.prototype.getNextRelationShipID = function () {\n return 'rId' + (++this.mRelationShipID);\n };\n WordExport.prototype.serializeGeneralRelations = function () {\n var writer = new XmlWriter();\n this.resetRelationShipID();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.documentRelType, this.documentPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.AppRelType, this.appPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.CoreRelType, this.corePath);\n //End of Relationships tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.generalRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeContentTypes = function (contentType) {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Types', 'http://schemas.openxmlformats.org/package/2006/content-types');\n //if (m_hasOleObject)\n //{\n // //\n // SerializeDefaultContentType(contentStream, 'bin', 'application/vnd.openxmlformats-officedocument.oleObject');\n //}\n this.serializeDefaultContentType(writer, 'rels', this.relationContentType);\n this.serializeDefaultContentType(writer, 'xml', this.xmlContentType);\n // if (m_hasEmbedFonts && !string.IsNullOrEmpty(type))\n // {\n // SerializeDefaultContentType(contentStream,type, this.fontContentType);\n // }\n if (this.documentImages.length > 0 || this.externalImages.length > 0 || this.headerFooterImages.length > 0) {\n this.serializeDefaultContentType(writer, 'png', 'image/png');\n this.serializeDefaultContentType(writer, 'bmp', 'image/bmp');\n this.serializeDefaultContentType(writer, 'emf', 'image/x-emf');\n this.serializeDefaultContentType(writer, 'wmf', 'image/x-wmf');\n this.serializeDefaultContentType(writer, 'gif', 'image/gif');\n this.serializeDefaultContentType(writer, 'ico', 'image/x-icon');\n this.serializeDefaultContentType(writer, 'tif', 'image/tiff');\n this.serializeDefaultContentType(writer, 'tiff', 'image/tiff');\n this.serializeDefaultContentType(writer, 'jpeg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'jpg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'svg', 'image/svg+xml');\n }\n // if (m_document.HasMacros\n // && IsMacroEnabled && !m_isSkipBinExtension)\n // {\n // SerializeDefaultContentType(contentStream, 'bin', this.VbaProjectContentType);\n // m_isSkipBinExtension = true;\n // }\n // if (m_hasOleObject)\n // {\n // SerializeOleContentType(contentStream);\n // }\n //document.xml\n this.serializeOverrideContentType(writer, this.documentPath, this.documentContentType);\n // tslint:disable-next-line:max-line-length\n //\n // if (HasNumbering) {\n this.serializeOverrideContentType(writer, this.numberingPath, this.numberingContentType);\n // }\n //Add the header/footer Alternate chunks\n // if (HeaderFooterAlternateChunks.length > 0) {\n // foreach(Dictionary < string, string > item in m_headerFooterAlternateChunks.Values)\n // AddAlternateChunkItem(item);\n // }\n //styles.xml\n this.serializeOverrideContentType(writer, this.stylePath, this.stylesContentType);\n //settings.xml\n this.serializeOverrideContentType(writer, this.settingsPath, this.settingsContentType);\n // //core.xml\n // SerializeOverrideContentType(contentStream, this.corePath, this.CoreContentType);\n // //app.xml\n // SerializeOverrideContentType(contentStream, this.appPath, this.AppContentType);\n // //custom.xml\n // if (!isNullOrUndefined(m_document.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0)\n // SerializeOverrideContentType(contentStream, this.CustomPath, this.CustomContentType);\n // #if Chart\n // if (m_hasChart)\n // SerializeChartContentType(contentStream);\n // #endif\n this.serializeHFContentTypes(writer);\n // WriteXmlItemsContentTypes(contentStream);\n //End of Types tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.contentTypesPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the HeaderFooter content types\n WordExport.prototype.serializeHFContentTypes = function (writer) {\n this.serializeHeaderFootersContentType(writer, 'EvenFooter');\n this.serializeHeaderFootersContentType(writer, 'EvenHeader');\n this.serializeHeaderFootersContentType(writer, 'FirstPageFooter');\n this.serializeHeaderFootersContentType(writer, 'FirstPageHeader');\n this.serializeHeaderFootersContentType(writer, 'OddFooter');\n this.serializeHeaderFootersContentType(writer, 'OddHeader');\n };\n // Serializes the HeaderFooter content types.\n WordExport.prototype.serializeHeaderFootersContentType = function (writer, headerFooterType) {\n var contentType;\n var partName;\n if (!this.headersFooters.containsKey(headerFooterType)) {\n return;\n }\n var hfColl = this.headersFooters.get(headerFooterType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (headerFooterType === 'EvenHeader' || headerFooterType === 'FirstPageHeader' ||\n headerFooterType === 'OddHeader') {\n partName = this.headerPath + id.replace('rId', '') + '.xml';\n contentType = this.headerContentType;\n }\n else {\n partName = this.footerPath + id.replace('rId', '') + '.xml';\n contentType = this.footerContentType;\n }\n this.serializeOverrideContentType(writer, partName, contentType);\n }\n };\n // Serializes the Override content type.\n WordExport.prototype.serializeOverrideContentType = function (writer, partName, contentType) {\n writer.writeStartElement(undefined, 'Override', undefined);\n writer.writeAttributeString(undefined, 'PartName', undefined, '/' + partName.replace('\\\\', '/'));\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Serializes the default content type\n WordExport.prototype.serializeDefaultContentType = function (writer, extension, contentType) {\n writer.writeStartElement(undefined, 'Default', undefined);\n writer.writeAttributeString(undefined, 'Extension', undefined, extension);\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Reset the relationship id counter\n WordExport.prototype.resetRelationShipID = function () {\n this.mRelationShipID = 0;\n };\n WordExport.prototype.close = function () {\n //Implement\n };\n return WordExport;\n}());\nexport { WordExport };\n","import { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Exports the document to Text format.\n */\nvar TextExport = /** @class */ (function () {\n function TextExport() {\n this.text = '';\n this.curSectionIndex = 0;\n this.inField = false;\n }\n TextExport.prototype.getModuleName = function () {\n return 'TextExport';\n };\n /**\n * @private\n */\n TextExport.prototype.save = function (viewer, fileName) {\n this.serialize(viewer);\n var writer = new StreamWriter();\n this.writeInternal(writer);\n writer.save(fileName + '.txt');\n };\n /**\n * @private\n */\n TextExport.prototype.saveAsBlob = function (viewer) {\n this.serialize(viewer);\n var streamWriter = new StreamWriter();\n this.writeInternal(streamWriter);\n var blob = streamWriter.buffer;\n streamWriter.destroy();\n var promise;\n return new Promise(function (resolve, reject) {\n resolve(blob);\n });\n };\n TextExport.prototype.serialize = function (viewer) {\n var document = viewer.owner.sfdtExportModule.write();\n this.setDocument(document);\n };\n TextExport.prototype.setDocument = function (document) {\n this.document = document;\n this.mSections = document.sections;\n };\n TextExport.prototype.writeInternal = function (streamWriter) {\n var section = undefined;\n var sectionCount = this.document.sections.length - 1;\n var isLastSection = false;\n this.updateLastParagraph();\n for (var i = 0; i <= sectionCount; i++) {\n section = this.document.sections[i];\n isLastSection = (i === sectionCount) ? true : false;\n this.writeBody(streamWriter, section.blocks);\n this.writeNewLine(streamWriter);\n this.writeSectionEnd(section, isLastSection);\n }\n for (var j = 0; j <= sectionCount; j++) {\n section = this.document.sections[j];\n this.writeHeadersFooters(streamWriter, section);\n }\n };\n /// \n /// Writes the specified document content to the text file.\n /// \n TextExport.prototype.writeBody = function (streamWriter, body) {\n var bodyItemsCount = body.length - 1;\n var bodyItem = undefined;\n for (var i = 0; i <= bodyItemsCount; i++) {\n bodyItem = body[i];\n if (bodyItem.hasOwnProperty('inlines')) {\n var isLastPara = (bodyItem === this.lastPara) ? true : false;\n this.writeParagraph(streamWriter, bodyItem, isLastPara);\n }\n else {\n this.writeTable(streamWriter, bodyItem);\n }\n }\n };\n TextExport.prototype.writeParagraph = function (streamWriter, paragraph, isLastPara) {\n for (var i = 0; i < paragraph.inlines.length; i++) {\n var item = paragraph.inlines[i];\n if (item.hasOwnProperty('fieldType')) {\n this.inField = item.fieldType === 0;\n }\n else if (item.hasOwnProperty('text') && !this.inField) {\n this.writeText(streamWriter, item.text);\n }\n }\n if (!isLastPara) {\n this.writeNewLine(streamWriter);\n }\n };\n /// }\n /// \n /// Writes the specified table text content to the text file.\n /// \n TextExport.prototype.writeTable = function (streamWriter, table) {\n for (var i = 0; i < table.rows.length; i++) {\n var row = table.rows[i];\n for (var j = 0; j < row.cells.length; j++) {\n var cell = row.cells[j];\n this.writeBody(streamWriter, cell.blocks);\n }\n }\n };\n /// \n /// Writes the specified Header Footer text content to the text file.\n /// \n TextExport.prototype.writeHeadersFooters = function (streamWriter, section) {\n var headersFooters = section.headersFooters;\n if (isNullOrUndefined(headersFooters)) {\n return;\n }\n this.writeHeaderFooter(streamWriter, section.headersFooters.header);\n this.writeHeaderFooter(streamWriter, section.headersFooters.footer);\n this.writeHeaderFooter(streamWriter, section.headersFooters.evenFooter);\n this.writeHeaderFooter(streamWriter, section.headersFooters.evenHeader);\n this.writeHeaderFooter(streamWriter, section.headersFooters.firstPageHeader);\n this.writeHeaderFooter(streamWriter, section.headersFooters.firstPageFooter);\n };\n TextExport.prototype.writeHeaderFooter = function (streamWriter, headerFooter) {\n if (headerFooter && headerFooter.blocks) {\n this.writeBody(streamWriter, headerFooter.blocks);\n }\n };\n /// \n /// Writes the end of the section.\n /// \n TextExport.prototype.writeSectionEnd = function (section, lastSection) {\n this.curSectionIndex++;\n };\n TextExport.prototype.writeNewLine = function (writer) {\n writer.writeLine('');\n };\n TextExport.prototype.writeText = function (writer, text) {\n writer.write(text);\n };\n TextExport.prototype.updateLastParagraph = function () {\n var cnt = this.document.sections.length;\n var sec;\n if (cnt > 0) {\n sec = this.document.sections[cnt - 1];\n }\n if (!isNullOrUndefined(sec)) {\n var paragraphs = [];\n for (var i = 0; i < sec.blocks.length; i++) {\n if (sec.blocks[i].hasOwnProperty('inlines')) {\n paragraphs.push(sec.blocks[i]);\n }\n }\n var pCount = paragraphs.length;\n if (pCount > 0) {\n this.lastPara = paragraphs[pCount - 1];\n }\n }\n };\n /**\n * @private\n */\n TextExport.prototype.destroy = function () {\n this.document = undefined;\n this.lastPara = undefined;\n this.mSections = undefined;\n this.sections = undefined;\n };\n return TextExport;\n}());\nexport { TextExport };\n","import { LineWidget, ParagraphWidget, BodyWidget, TextElementBox, FieldElementBox, TableRowWidget, TableCellWidget, ImageElementBox, ListTextElementBox, BookmarkElementBox } from '../viewer/page';\nimport { BlockWidget } from '../viewer/page';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { StreamWriter } from '@syncfusion/ej2-file-utils';\n/**\n * Exports the document to Sfdt format.\n */\nvar SfdtExport = /** @class */ (function () {\n /**\n * @private\n */\n function SfdtExport(owner) {\n /* tslint:disable:no-any */\n this.endLine = undefined;\n this.endOffset = undefined;\n this.endCell = undefined;\n this.startColumnIndex = undefined;\n this.endColumnIndex = undefined;\n this.lists = undefined;\n this.viewer = undefined;\n this.document = undefined;\n this.writeInlineStyles = undefined;\n this.viewer = owner;\n }\n SfdtExport.prototype.getModuleName = function () {\n return 'SfdtExport';\n };\n SfdtExport.prototype.clear = function () {\n this.writeInlineStyles = undefined;\n this.endLine = undefined;\n this.lists = undefined;\n this.document = undefined;\n };\n /**\n * Serialize the data as Syncfusion document text.\n * @private\n */\n SfdtExport.prototype.serialize = function () {\n return JSON.stringify(this.write());\n };\n /**\n * @private\n */\n SfdtExport.prototype.saveAsBlob = function (viewer) {\n var streamWriter = new StreamWriter();\n streamWriter.write(this.serialize());\n var blob = streamWriter.buffer;\n streamWriter.destroy();\n var promise;\n return new Promise(function (resolve, reject) {\n resolve(blob);\n });\n };\n // tslint:disable-next-line:max-line-length\n /**\n * @private\n */\n SfdtExport.prototype.write = function (line, startOffset, endLine, endOffset, writeInlineStyles) {\n if (writeInlineStyles) {\n this.writeInlineStyles = true;\n }\n this.lists = [];\n this.document = {};\n this.document.sections = [];\n this.document.characterFormat = this.writeCharacterFormat(this.viewer.characterFormat);\n this.document.paragraphFormat = this.writeParagraphFormat(this.viewer.paragraphFormat);\n if (line instanceof LineWidget && endLine instanceof LineWidget) {\n // For selection\n var startPara = line.paragraph;\n var endPara = endLine.paragraph;\n var startCell = startPara.associatedCell;\n var endCell = endPara.associatedCell;\n // Creates section\n var bodyWidget = startPara.bodyWidget;\n var section = this.createSection(line.paragraph.bodyWidget);\n this.document.sections.push(section);\n if (startCell === endCell || isNullOrUndefined(endCell)) {\n this.endLine = endLine;\n this.endOffset = endOffset;\n }\n else {\n // Todo: Handle nested table cases\n if (startCell instanceof TableCellWidget) {\n var startTable = startCell.getContainerTable();\n var endTable = endCell.getContainerTable();\n if (startTable.tableFormat === endTable.tableFormat) {\n this.endCell = endCell;\n this.endColumnIndex = this.endCell.columnIndex + this.endCell.cellFormat.columnSpan;\n this.startColumnIndex = startCell.columnIndex;\n }\n }\n else {\n this.endCell = endCell;\n }\n }\n if (startCell === endCell || isNullOrUndefined(startCell)) {\n var paragraph = this.createParagraph(line.paragraph);\n section.blocks.push(paragraph);\n if (!this.writeParagraph(line.paragraph, paragraph, section.blocks, line.indexInOwner, startOffset)) {\n // Todo:continue in next section\n }\n }\n else {\n var table = this.createTable(startCell.ownerTable);\n section.blocks.push(table);\n this.writeTable(startCell.ownerTable, table, startCell.ownerRow.indexInOwner, section.blocks);\n }\n }\n else {\n if (this.viewer.pages.length > 0) {\n var page = this.viewer.pages[0];\n if (page.bodyWidgets.length > 0) {\n this.writeBodyWidget(page.bodyWidgets[0], 0);\n }\n }\n }\n this.writeStyles(this.viewer);\n this.writeLists(this.viewer);\n var doc = this.document;\n this.clear();\n return doc;\n };\n SfdtExport.prototype.writeBodyWidget = function (bodyWidget, index) {\n if (!(bodyWidget instanceof BodyWidget)) {\n return true;\n }\n var section = this.createSection(bodyWidget);\n this.document.sections.push(section);\n this.writeHeaderFooters(this.viewer.headersFooters[bodyWidget.index], section);\n if (this.writeBlock(bodyWidget.childWidgets[index], 0, section.blocks)) {\n return true;\n }\n var next = bodyWidget;\n do {\n bodyWidget = next;\n next = next.nextRenderedWidget;\n } while (next instanceof BodyWidget && next.index === bodyWidget.index);\n return this.writeBodyWidget(next, index);\n };\n SfdtExport.prototype.writeHeaderFooters = function (hfs, section) {\n if (isNullOrUndefined(hfs)) {\n return;\n }\n section.headersFooters.header = this.writeHeaderFooter(hfs[0]);\n section.headersFooters.footer = this.writeHeaderFooter(hfs[1]);\n section.headersFooters.evenHeader = this.writeHeaderFooter(hfs[2]);\n section.headersFooters.evenFooter = this.writeHeaderFooter(hfs[3]);\n section.headersFooters.firstPageHeader = this.writeHeaderFooter(hfs[4]);\n section.headersFooters.firstPageFooter = this.writeHeaderFooter(hfs[5]);\n };\n SfdtExport.prototype.writeHeaderFooter = function (widget) {\n if (isNullOrUndefined(widget)) {\n return undefined;\n }\n var headerFooter = {};\n if (widget && widget.childWidgets && widget.childWidgets.length > 0) {\n headerFooter.blocks = [];\n this.writeBlock(widget.firstChild, 0, headerFooter.blocks);\n }\n return headerFooter;\n };\n SfdtExport.prototype.createSection = function (bodyWidget) {\n var section = {};\n section.sectionFormat = {};\n section.sectionFormat.pageWidth = bodyWidget.sectionFormat.pageWidth;\n section.sectionFormat.pageHeight = bodyWidget.sectionFormat.pageHeight;\n section.sectionFormat.leftMargin = bodyWidget.sectionFormat.leftMargin;\n section.sectionFormat.rightMargin = bodyWidget.sectionFormat.rightMargin;\n section.sectionFormat.topMargin = bodyWidget.sectionFormat.topMargin;\n section.sectionFormat.bottomMargin = bodyWidget.sectionFormat.bottomMargin;\n section.sectionFormat.differentFirstPage = bodyWidget.sectionFormat.differentFirstPage;\n section.sectionFormat.differentOddAndEvenPages = bodyWidget.sectionFormat.differentOddAndEvenPages;\n section.sectionFormat.headerDistance = bodyWidget.sectionFormat.headerDistance;\n section.sectionFormat.footerDistance = bodyWidget.sectionFormat.footerDistance;\n section.blocks = [];\n section.headersFooters = {};\n return section;\n };\n SfdtExport.prototype.writeBlock = function (widget, index, blocks) {\n if (!(widget instanceof BlockWidget)) {\n return true;\n }\n if (widget instanceof ParagraphWidget) {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n if (this.writeParagraph(widget, paragraph, blocks)) {\n return true;\n }\n }\n else {\n var tableWidget = widget;\n var table = this.createTable(tableWidget);\n blocks.push(table);\n if (this.writeTable(tableWidget, table, 0, blocks)) {\n return true;\n }\n }\n return false;\n };\n SfdtExport.prototype.writeNextBlock = function (widget, blocks) {\n var next = widget.nextRenderedWidget;\n if (next instanceof BlockWidget && next.containerWidget.index === widget.containerWidget.index) {\n return this.writeBlock(widget.nextRenderedWidget, 0, blocks);\n }\n return false;\n };\n SfdtExport.prototype.writeParagraph = function (paragraphWidget, paragraph, blocks, lineIndex, start) {\n if (isNullOrUndefined(lineIndex)) {\n lineIndex = 0;\n }\n if (isNullOrUndefined(start)) {\n start = 0;\n }\n var next = paragraphWidget;\n while (next instanceof ParagraphWidget) {\n if (this.writeLines(next, lineIndex, start, paragraph.inlines)) {\n return true;\n }\n lineIndex = 0;\n start = 0;\n paragraphWidget = next;\n next = paragraphWidget.nextSplitWidget;\n }\n return this.writeNextBlock(paragraphWidget, blocks);\n };\n SfdtExport.prototype.writeInlines = function (line, inlines) {\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(inline)) {\n inlines.push(inline);\n }\n }\n };\n SfdtExport.prototype.writeInline = function (element) {\n var inline = {};\n inline.characterFormat = this.writeCharacterFormat(element.characterFormat);\n if (element instanceof FieldElementBox) {\n inline.fieldType = element.fieldType;\n }\n else if (element instanceof ImageElementBox) {\n inline.imageString = element.imageString;\n inline.width = HelperMethods.convertPixelToPoint(element.width);\n inline.height = HelperMethods.convertPixelToPoint(element.height);\n }\n else if (element instanceof BookmarkElementBox) {\n inline.bookmarkType = element.bookmarkType;\n inline.name = element.name;\n }\n else if (element instanceof TextElementBox) {\n inline.text = element.text;\n }\n else {\n inline = undefined;\n }\n return inline;\n };\n SfdtExport.prototype.writeLines = function (paragraph, lineIndex, offset, inlines) {\n var startIndex = lineIndex;\n var endParagraph = this.endLine instanceof LineWidget && this.endLine.paragraph === paragraph;\n var endIndex = endParagraph ? this.endLine.indexInOwner : paragraph.childWidgets.length - 1;\n for (var i = startIndex; i <= endIndex; i++) {\n var child = paragraph.childWidgets[i];\n if (this.endLine === child || (lineIndex === i && offset !== 0)) {\n this.writeLine(child, offset, inlines);\n }\n else {\n this.writeInlines(child, inlines);\n }\n }\n return endParagraph;\n };\n SfdtExport.prototype.writeLine = function (line, offset, inlines) {\n var isEnd = line === this.endLine;\n var started = false;\n var ended = false;\n var length = 0;\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n var inline = undefined;\n length += element.length;\n started = length > offset;\n ended = isEnd && length >= this.endOffset;\n if (!started) {\n continue;\n }\n inline = this.writeInline(element);\n inlines[inlines.length] = inline;\n if (length > offset || ended) {\n if (inline.hasOwnProperty('text')) {\n var startIndex = length - element.length;\n var indexInInline = offset - startIndex;\n var endIndex = ended ? this.endOffset - startIndex : element.length;\n inline.text = inline.text.substring(indexInInline, endIndex);\n }\n offset = -1;\n }\n if (ended) {\n break;\n }\n }\n };\n SfdtExport.prototype.createParagraph = function (paragraphWidget) {\n var paragraph = {};\n paragraph.paragraphFormat = this.writeParagraphFormat(paragraphWidget.paragraphFormat);\n paragraph.characterFormat = this.writeCharacterFormat(paragraphWidget.characterFormat);\n paragraph.inlines = [];\n return paragraph;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeCharacterFormat = function (format, isInline) {\n var characterFormat = {};\n HelperMethods.writeCharacterFormat(characterFormat, isInline, format);\n if (this.writeInlineStyles && !isInline) {\n characterFormat.inlineFormat = this.writeCharacterFormat(format, true);\n }\n return characterFormat;\n };\n SfdtExport.prototype.writeParagraphFormat = function (format, isInline) {\n var paragraphFormat = {};\n paragraphFormat.leftIndent = isInline ? format.leftIndent : format.getValue('leftIndent');\n paragraphFormat.rightIndent = isInline ? format.rightIndent : format.getValue('rightIndent');\n paragraphFormat.firstLineIndent = isInline ? format.firstLineIndent : format.getValue('firstLineIndent');\n paragraphFormat.textAlignment = isInline ? format.textAlignment : format.getValue('textAlignment');\n paragraphFormat.beforeSpacing = isInline ? format.beforeSpacing : format.getValue('beforeSpacing');\n paragraphFormat.afterSpacing = isInline ? format.afterSpacing : format.getValue('afterSpacing');\n paragraphFormat.lineSpacing = isInline ? format.lineSpacing : format.getValue('lineSpacing');\n paragraphFormat.lineSpacingType = isInline ? format.lineSpacingType : format.getValue('lineSpacingType');\n paragraphFormat.styleName = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : undefined;\n paragraphFormat.outlineLevel = isInline ? format.outlineLevel : format.getValue('outlineLevel');\n paragraphFormat.listFormat = this.writeListFormat(format.listFormat, isInline);\n paragraphFormat.tabs = this.writeTabs(format.tabs);\n if (this.writeInlineStyles && !isInline) {\n paragraphFormat.inlineFormat = this.writeParagraphFormat(format, true);\n }\n return paragraphFormat;\n };\n SfdtExport.prototype.writeTabs = function (tabStops) {\n if (isNullOrUndefined(tabStops) || tabStops.length < 1) {\n return undefined;\n }\n var tabs = [];\n for (var i = 0; i < tabStops.length; i++) {\n var tabStop = tabStops[i];\n var tab = {};\n tab.position = tabStop.position;\n tab.deletePosition = tabStop.deletePosition;\n tab.tabJustification = tabStop.tabJustification;\n tab.tabLeader = tabStop.tabLeader;\n tabs.push(tab);\n }\n return tabs;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeListFormat = function (format, isInline) {\n var listFormat = {};\n var listIdValue = format.getValue('listId');\n if (!isNullOrUndefined(listIdValue) && listIdValue > -1) {\n listFormat.listId = listIdValue;\n listFormat.listLevelNumber = format.getValue('listLevelNumber');\n if (this.lists.indexOf(format.listId) < 0) {\n this.lists.push(format.listId);\n }\n }\n return listFormat;\n };\n SfdtExport.prototype.writeTable = function (tableWidget, table, index, blocks) {\n var widget = tableWidget.childWidgets[index];\n if (widget instanceof TableRowWidget) {\n if (this.writeRow(widget, table.rows)) {\n return true;\n }\n }\n var next = tableWidget;\n do {\n tableWidget = next;\n next = tableWidget.nextSplitWidget;\n } while (next instanceof BlockWidget);\n return this.writeNextBlock(tableWidget, blocks);\n };\n SfdtExport.prototype.writeRow = function (rowWidget, rows) {\n if (!(rowWidget instanceof TableRowWidget)) {\n return false;\n }\n var row = this.createRow(rowWidget);\n rows.push(row);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n if (widget instanceof TableCellWidget) {\n if (rowWidget.index === widget.rowIndex\n && (isNullOrUndefined(this.startColumnIndex) || widget.columnIndex >= this.startColumnIndex)\n && (isNullOrUndefined(this.endColumnIndex) || widget.columnIndex < this.endColumnIndex)) {\n if (this.writeCell(widget, row.cells)) {\n return true;\n }\n }\n }\n }\n var next = rowWidget;\n do {\n rowWidget = next;\n next = rowWidget.nextRenderedWidget;\n } while (next instanceof TableRowWidget && next.index === rowWidget.index);\n return this.writeRow(next, rows);\n };\n SfdtExport.prototype.writeCell = function (cellWidget, cells) {\n var cell = this.createCell(cellWidget);\n cells.push(cell);\n if (this.writeBlock(cellWidget.firstChild, 0, cell.blocks)) {\n return true;\n }\n return this.endCell instanceof TableCellWidget ? this.endCell.cellFormat === cellWidget.cellFormat : false;\n };\n SfdtExport.prototype.createTable = function (tableWidget) {\n var table = {};\n table.rows = [];\n table.grid = [];\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n table.grid[i] = tableWidget.tableHolder.columns[i].preferredWidth;\n }\n table.tableFormat = this.writeTableFormat(tableWidget.tableFormat);\n table.description = tableWidget.description;\n table.title = tableWidget.title;\n return table;\n };\n SfdtExport.prototype.createRow = function (rowWidget) {\n var row = {};\n row.cells = [];\n row.rowFormat = this.writeRowFormat(rowWidget.rowFormat);\n return row;\n };\n SfdtExport.prototype.createCell = function (cellWidget) {\n var cell = {};\n cell.blocks = [];\n cell.cellFormat = this.writeCellFormat(cellWidget.cellFormat);\n cell.columnIndex = cellWidget.columnIndex;\n return cell;\n };\n SfdtExport.prototype.writeShading = function (wShading) {\n var shading = {};\n shading.backgroundColor = wShading.backgroundColor;\n shading.foregroundColor = wShading.foregroundColor;\n shading.textureStyle = wShading.textureStyle;\n return shading;\n };\n SfdtExport.prototype.writeBorder = function (wBorder) {\n var border = {};\n border.color = wBorder.color;\n border.hasNoneStyle = wBorder.hasNoneStyle;\n border.lineStyle = wBorder.lineStyle;\n border.lineWidth = wBorder.lineWidth;\n border.shadow = wBorder.shadow;\n border.space = wBorder.space;\n return border;\n };\n SfdtExport.prototype.writeBorders = function (wBorders) {\n var borders = {};\n borders.top = this.writeBorder(wBorders.top);\n borders.left = this.writeBorder(wBorders.left);\n borders.right = this.writeBorder(wBorders.right);\n borders.bottom = this.writeBorder(wBorders.bottom);\n borders.diagonalDown = this.writeBorder(wBorders.diagonalDown);\n borders.diagonalUp = this.writeBorder(wBorders.diagonalUp);\n borders.horizontal = this.writeBorder(wBorders.horizontal);\n borders.vertical = this.writeBorder(wBorders.vertical);\n return borders;\n };\n SfdtExport.prototype.writeCellFormat = function (wCellFormat) {\n var cellFormat = {};\n cellFormat.borders = this.writeBorders(wCellFormat.borders);\n cellFormat.shading = this.writeShading(wCellFormat.shading);\n cellFormat.topMargin = wCellFormat.topMargin;\n cellFormat.rightMargin = wCellFormat.rightMargin;\n cellFormat.leftMargin = wCellFormat.leftMargin;\n cellFormat.bottomMargin = wCellFormat.bottomMargin;\n cellFormat.preferredWidth = wCellFormat.preferredWidth;\n cellFormat.preferredWidthType = wCellFormat.preferredWidthType;\n cellFormat.cellWidth = wCellFormat.cellWidth;\n cellFormat.columnSpan = wCellFormat.columnSpan;\n cellFormat.rowSpan = wCellFormat.rowSpan;\n cellFormat.verticalAlignment = wCellFormat.verticalAlignment;\n return cellFormat;\n };\n SfdtExport.prototype.writeRowFormat = function (wRowFormat) {\n var rowFormat = {};\n rowFormat.height = wRowFormat.height;\n rowFormat.allowBreakAcrossPages = wRowFormat.allowBreakAcrossPages;\n rowFormat.heightType = wRowFormat.heightType;\n rowFormat.isHeader = wRowFormat.isHeader;\n rowFormat.borders = this.writeBorders(wRowFormat.borders);\n rowFormat.gridBefore = wRowFormat.gridBefore;\n rowFormat.gridBeforeWidth = wRowFormat.gridBeforeWidth;\n rowFormat.gridBeforeWidthType = wRowFormat.gridBeforeWidthType;\n rowFormat.gridAfter = wRowFormat.gridAfter;\n rowFormat.gridAfterWidth = wRowFormat.gridAfterWidth;\n rowFormat.gridAfterWidthType = wRowFormat.gridAfterWidthType;\n return rowFormat;\n };\n SfdtExport.prototype.writeTableFormat = function (wTableFormat) {\n var tableFormat = {};\n tableFormat.borders = this.writeBorders(wTableFormat.borders);\n tableFormat.shading = this.writeShading(wTableFormat.shading);\n tableFormat.cellSpacing = wTableFormat.cellSpacing;\n tableFormat.leftIndent = wTableFormat.leftIndent;\n tableFormat.tableAlignment = wTableFormat.tableAlignment;\n tableFormat.topMargin = wTableFormat.topMargin;\n tableFormat.rightMargin = wTableFormat.rightMargin;\n tableFormat.leftMargin = wTableFormat.leftMargin;\n tableFormat.bottomMargin = wTableFormat.bottomMargin;\n tableFormat.preferredWidth = wTableFormat.preferredWidth;\n tableFormat.preferredWidthType = wTableFormat.preferredWidthType;\n return tableFormat;\n };\n SfdtExport.prototype.writeStyles = function (viewer) {\n var styles = [];\n this.document.styles = [];\n for (var i = 0; i < viewer.styles.length; i++) {\n this.document.styles.push(this.writeStyle(viewer.styles.getItem(i)));\n }\n };\n SfdtExport.prototype.writeStyle = function (style) {\n var wStyle = {};\n wStyle.name = style.name;\n if (style.type === 'Paragraph') {\n wStyle.type = 'Paragraph';\n wStyle.paragraphFormat = this.writeParagraphFormat(style.paragraphFormat);\n wStyle.characterFormat = this.writeCharacterFormat(style.characterFormat);\n }\n if (style.type === 'Character') {\n wStyle.type = 'Character';\n wStyle.characterFormat = this.writeCharacterFormat(style.characterFormat);\n }\n if (!isNullOrUndefined(style.basedOn)) {\n wStyle.basedOn = style.basedOn.name;\n }\n if (!isNullOrUndefined(style.link)) {\n wStyle.link = style.link.name;\n }\n if (!isNullOrUndefined(style.next)) {\n wStyle.next = style.next.name;\n }\n return wStyle;\n };\n SfdtExport.prototype.writeLists = function (viewer) {\n var abstractLists = [];\n this.document.lists = [];\n for (var i = 0; i < viewer.lists.length; i++) {\n var list = viewer.lists[i];\n if (this.lists.indexOf(list.listId) > -1) {\n this.document.lists.push(this.writeList(list));\n if (abstractLists.indexOf(list.abstractListId) < 0) {\n abstractLists.push(list.abstractListId);\n }\n }\n }\n this.document.abstractLists = [];\n for (var i = 0; i < viewer.abstractLists.length; i++) {\n var abstractList = viewer.abstractLists[i];\n if (this.lists.indexOf(abstractList.abstractListId) > -1) {\n this.document.abstractLists.push(this.writeAbstractList(abstractList));\n }\n }\n };\n SfdtExport.prototype.writeAbstractList = function (wAbstractList) {\n var abstractList = {};\n abstractList.abstractListId = wAbstractList.abstractListId;\n abstractList.levels = [];\n for (var i = 0; i < wAbstractList.levels.length; i++) {\n abstractList.levels[i] = this.writeListLevel(wAbstractList.levels[i]);\n }\n return abstractList;\n };\n SfdtExport.prototype.writeList = function (wList) {\n var list = {};\n list.abstractListId = wList.abstractListId;\n //list.levelOverrides = wList.levelOverrides;\n list.listId = wList.listId;\n return list;\n };\n SfdtExport.prototype.writeListLevel = function (wListLevel) {\n var listLevel = {};\n listLevel.characterFormat = this.writeCharacterFormat(wListLevel.characterFormat);\n listLevel.paragraphFormat = this.writeParagraphFormat(wListLevel.paragraphFormat);\n listLevel.followCharacter = wListLevel.followCharacter;\n listLevel.listLevelPattern = wListLevel.listLevelPattern;\n listLevel.numberFormat = wListLevel.numberFormat;\n listLevel.restartLevel = wListLevel.restartLevel;\n listLevel.startAt = wListLevel.startAt;\n return listLevel;\n };\n /**\n * @private\n */\n SfdtExport.prototype.destroy = function () {\n this.lists = undefined;\n this.endLine = undefined;\n this.endOffset = undefined;\n this.viewer = undefined;\n };\n return SfdtExport;\n}());\nexport { SfdtExport };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, addClass, append, Property, Event, L10n, compile } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, extend, removeClass, prepend, isNullOrUndefined, detach, getValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, rippleEffect, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\nexport var dropDownBaseClasses = {\n root: 'e-dropdownbase',\n rtl: 'e-rtl',\n content: 'e-content',\n selected: 'e-active',\n hover: 'e-hover',\n noData: 'e-nodata',\n fixedHead: 'e-fixed-head',\n focus: 'e-item-focus',\n li: ListBaseClasses.li,\n group: ListBaseClasses.group,\n disabled: ListBaseClasses.disabled,\n grouping: 'e-dd-group'\n};\n/**\n * DropDownBase component will generate the list items based on given data and act as base class to drop-down related components\n */\nvar DropDownBase = /** @class */ (function (_super) {\n __extends(DropDownBase, _super);\n /**\n * * Constructor for DropDownBase class\n */\n function DropDownBase(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n DropDownBase.prototype.getPropObject = function (prop, newProp, oldProp) {\n var newProperty = new Object();\n var oldProperty = new Object();\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var propName = new Function('prop', 'return prop');\n newProperty[propName(prop)] = newProp[propName(prop)];\n oldProperty[propName(prop)] = oldProp[propName(prop)];\n var data = new Object();\n data.newProperty = newProperty;\n data.oldProperty = oldProperty;\n return data;\n };\n DropDownBase.prototype.getValueByText = function (text, ignoreCase, ignoreAccent) {\n var value = null;\n if (!isNullOrUndefined(this.listData)) {\n if (ignoreCase) {\n value = this.checkValueCase(text, true, ignoreAccent);\n }\n else {\n value = this.checkValueCase(text, false, ignoreAccent);\n }\n }\n return value;\n };\n ;\n DropDownBase.prototype.checkValueCase = function (text, ignoreCase, ignoreAccent, isTextByValue) {\n var _this = this;\n var value = null;\n if (isTextByValue) {\n value = text;\n }\n var dataSource = this.listData;\n var fields = this.fields;\n var type = this.typeOfData(dataSource).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n if (!isNullOrUndefined(item)) {\n if (ignoreAccent) {\n value = this.checkingAccent(String(item), text, ignoreCase);\n }\n else {\n if (ignoreCase) {\n if (this.checkIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase, isTextByValue);\n }\n }\n }\n }\n }\n }\n else {\n if (ignoreCase) {\n dataSource.filter(function (item) {\n if (_this.checkIgnoreCase(getValue(fields.text, item).toString(), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n else {\n if (isTextByValue) {\n dataSource.filter(function (item) {\n var itemValue = getValue(fields.value, item);\n if (!isNullOrUndefined(itemValue) && itemValue.toString() === value.toString()) {\n value = getValue(fields.text, item);\n }\n });\n }\n else {\n dataSource.filter(function (item) {\n if (_this.checkNonIgnoreCase(getValue(fields.text, item), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n }\n }\n return value;\n };\n DropDownBase.prototype.checkingAccent = function (item, text, ignoreCase) {\n var dataItem = DataUtil.ignoreDiacritics(String(item));\n var textItem = DataUtil.ignoreDiacritics(text.toString());\n var value = null;\n if (ignoreCase) {\n if (this.checkIgnoreCase(dataItem, textItem)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n return value;\n };\n DropDownBase.prototype.checkIgnoreCase = function (item, text) {\n return String(item).toLowerCase() === text.toString().toLowerCase() ? true : false;\n };\n DropDownBase.prototype.checkNonIgnoreCase = function (item, text) {\n return String(item) === text.toString() ? true : false;\n };\n DropDownBase.prototype.getItemValue = function (dataItem, typedText, ignoreCase, isTextByValue) {\n var value = null;\n var dataSource = this.listData;\n var type = this.typeOfData(dataSource).typeof;\n if (isTextByValue) {\n value = dataItem.toString();\n }\n else {\n if (ignoreCase) {\n value = type === 'string' ? String(dataItem) : this.getFormattedValue(String(dataItem));\n }\n else {\n value = type === 'string' ? typedText : this.getFormattedValue(typedText);\n }\n }\n return value;\n };\n DropDownBase.prototype.l10nUpdate = function (actionFailure) {\n if (this.noRecordsTemplate !== 'No Records Found' || this.actionFailureTemplate !== 'The Request Failed') {\n var template = actionFailure ? this.actionFailureTemplate : this.noRecordsTemplate;\n var compiledString = void 0;\n this.list.innerHTML = '';\n compiledString = compile(template);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.list.appendChild(item);\n }\n }\n else {\n var l10nLocale = { noRecordsTemplate: 'No Records Found', actionFailureTemplate: 'The Request Failed' };\n this.l10n = new L10n('dropdowns', l10nLocale, this.locale);\n this.list.innerHTML = actionFailure ?\n this.l10n.getConstant('actionFailureTemplate') : this.l10n.getConstant('noRecordsTemplate');\n }\n };\n DropDownBase.prototype.getTextByValue = function (value) {\n var text;\n text = this.checkValueCase(value, false, false, true);\n return text;\n };\n DropDownBase.prototype.getFormattedValue = function (value) {\n if (this.listData && this.listData.length) {\n var item = this.typeOfData(this.listData);\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'number'\n || item.typeof === 'number') {\n return parseInt(value, 10);\n }\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'boolean'\n || item.typeof === 'boolean') {\n return (value === 'true');\n }\n }\n return value;\n };\n /**\n * Sets RTL to dropdownbase wrapper\n */\n DropDownBase.prototype.setEnableRtl = function () {\n if (this.list) {\n this.enableRtlElements.push(this.list);\n }\n this.enableRtl ? addClass(this.enableRtlElements, dropDownBaseClasses.rtl) :\n removeClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n };\n ;\n /**\n * Initialize the Component.\n */\n DropDownBase.prototype.initialize = function () {\n this.bindEvent = true;\n if (this.element.tagName === 'UL') {\n var jsonElement = ListBase.createJsonFromElement(this.element);\n this.setProperties({ fields: { text: 'text', value: 'text' } }, true);\n this.resetList(jsonElement, this.fields);\n }\n else if (this.element.tagName === 'SELECT') {\n var dataSource = this.dataSource instanceof Array ? (this.dataSource.length > 0 ? true : false)\n : !isNullOrUndefined(this.dataSource) ? true : false;\n if (!dataSource) {\n this.renderItemsBySelect();\n }\n }\n else {\n this.setListData(this.dataSource, this.fields, this.query);\n }\n };\n ;\n /**\n * Get the properties to be maintained in persisted state.\n */\n DropDownBase.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n ;\n /**\n * Sets the enabled state to DropDownBase.\n */\n DropDownBase.prototype.setEnabled = function () {\n 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 this.isDataFetched = false;\n };\n /**\n * Creates the list items of DropDownBase component.\n */\n DropDownBase.prototype.setListData = function (dataSource, fields, query) {\n var _this = this;\n fields = fields ? fields : this.fields;\n var ulElement;\n this.isActive = true;\n var eventArgs = { cancel: false, data: dataSource, query: query };\n this.trigger('actionBegin', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.showSpinner();\n if (dataSource instanceof DataManager) {\n this.isRequested = true;\n if (this.isDataFetched) {\n this.emptyDataRequest(fields);\n return;\n }\n eventArgs.data.executeQuery(this.getQuery(eventArgs.query)).then(function (e) {\n _this.trigger('actionComplete', e);\n if (e.cancel) {\n return;\n }\n var listItems = e.result;\n if (listItems.length === 0) {\n _this.isDataFetched = true;\n }\n ulElement = _this.renderItems(listItems, fields);\n _this.onActionComplete(ulElement, listItems, e);\n _this.isRequested = false;\n _this.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 var dataManager = new DataManager(eventArgs.data);\n var listItems = void 0;\n listItems = (this.getQuery(eventArgs.query)).executeLocal(dataManager);\n var localDataArgs = { cancel: false, result: listItems };\n this.trigger('actionComplete', localDataArgs);\n if (localDataArgs.cancel) {\n return;\n }\n ulElement = this.renderItems(localDataArgs.result, fields);\n this.onActionComplete(ulElement, localDataArgs.result);\n this.hideSpinner();\n this.trigger('dataBound', { items: localDataArgs.result });\n }\n };\n DropDownBase.prototype.emptyDataRequest = function (fields) {\n var listItems = [];\n this.onActionComplete(this.renderItems(listItems, fields), listItems);\n this.isRequested = false;\n this.hideSpinner();\n };\n DropDownBase.prototype.showSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.hideSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.onActionFailure = function (e) {\n this.liCollections = [];\n this.trigger('actionFailure', e);\n this.l10nUpdate(true);\n addClass([this.list], dropDownBaseClasses.noData);\n };\n DropDownBase.prototype.onActionComplete = function (ulElement, list, e) {\n this.listData = list;\n this.list.innerHTML = '';\n this.list.appendChild(ulElement);\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n this.postRender(this.list, list, this.bindEvent);\n };\n DropDownBase.prototype.postRender = function (listElement, list, bindEvent) {\n var focusItem = listElement.querySelector('.' + dropDownBaseClasses.li);\n var selectedItem = listElement.querySelector('.' + dropDownBaseClasses.selected);\n if (focusItem && !selectedItem) {\n 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(this.createElement, dataSource, options, true);\n };\n ;\n DropDownBase.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var fieldValues = !isNullOrUndefined(fields.properties) ?\n fields.properties : fields;\n var options = (fields.text !== null || fields.value !== null) ? {\n fields: fieldValues,\n showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n return extend({}, options, fields, true);\n };\n ;\n DropDownBase.prototype.setFloatingHeader = function (e) {\n if (isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement = this.createElement('div', { className: dropDownBaseClasses.fixedHead });\n if (!this.list.querySelector('li').classList.contains(dropDownBaseClasses.group)) {\n this.fixedHeaderElement.style.display = 'none';\n }\n prepend([this.fixedHeaderElement], this.list);\n this.setFixedHeader();\n }\n if (!isNullOrUndefined(this.fixedHeaderElement) && this.fixedHeaderElement.style.zIndex === '0') {\n this.setFixedHeader();\n }\n this.scrollStop(e);\n };\n DropDownBase.prototype.scrollStop = function (e) {\n var target = e.target;\n var liHeight = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n var topIndex = Math.round(target.scrollTop / liHeight);\n var liCollections = this.ulElement.querySelectorAll('li');\n for (var i = topIndex; i > -1; i--) {\n if (!isNullOrUndefined(liCollections[i]) && liCollections[i].classList.contains(dropDownBaseClasses.group)) {\n var currentLi = liCollections[i];\n this.fixedHeaderElement.innerHTML = currentLi.innerHTML;\n this.fixedHeaderElement.style.top = e.target.scrollTop + 'px';\n this.fixedHeaderElement.style.display = 'block';\n break;\n }\n else {\n this.fixedHeaderElement.style.display = 'none';\n this.fixedHeaderElement.style.top = 'none';\n }\n }\n };\n /**\n * To render the list items\n */\n DropDownBase.prototype.renderItems = function (listData, fields) {\n var ulElement;\n if (this.itemTemplate && listData) {\n var dataSource = listData;\n if (dataSource && fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n 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.createElement, this.itemTemplate, dataSource, fields.properties, option);\n };\n DropDownBase.prototype.typeOfData = function (items) {\n var item = { typeof: null, item: null };\n for (var i = 0; (!isNullOrUndefined(items) && i < items.length); i++) {\n if (!isNullOrUndefined(items[i])) {\n return item = { typeof: typeof items[i], item: items[i] };\n }\n }\n return item;\n };\n DropDownBase.prototype.setFixedHeader = function () {\n this.list.parentElement.style.display = 'block';\n var liWidth = this.liCollections[0].offsetWidth;\n this.fixedHeaderElement.style.width = liWidth.toString() + 'px';\n setStyleAttribute(this.fixedHeaderElement, { zIndex: 10 });\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n };\n DropDownBase.prototype.getSortedDataSource = function (dataSource) {\n if (dataSource && this.sortOrder !== 'None') {\n var textField = this.fields.text ? this.fields.text : 'text';\n dataSource = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, textField));\n }\n return dataSource;\n };\n /**\n * Return the index of item which matched with given value in data source\n */\n DropDownBase.prototype.getIndexByValue = function (value) {\n var index;\n var listItems = this.getItems();\n for (var i = 0; i < listItems.length; i++) {\n if (!isNullOrUndefined(value) && listItems[i].getAttribute('data-value') === value.toString()) {\n index = i;\n break;\n }\n }\n return index;\n };\n ;\n /**\n * To dispatch the event manually\n */\n DropDownBase.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n };\n /**\n * To set the current fields\n */\n DropDownBase.prototype.setFields = function () {\n 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 this.isDataFetched = false;\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 if (this.ulElement && this.fixedHeaderElement) {\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n }\n break;\n case 'locale':\n if (this.list && (!isNullOrUndefined(this.liCollections) && this.liCollections.length === 0)) {\n this.l10nUpdate();\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n }\n }\n };\n ;\n /**\n * Build and render the component\n * @private\n */\n DropDownBase.prototype.render = function (isEmptyData) {\n this.list = this.createElement('div', { className: dropDownBaseClasses.content, attrs: { 'tabindex': '0' } });\n this.list.classList.add(dropDownBaseClasses.root);\n this.setFields();\n var rippleModel = { duration: 300, selector: '.' + dropDownBaseClasses.li };\n this.rippleFun = rippleEffect(this.list, rippleModel);\n var group = this.element.querySelector('select>optgroup');\n if (this.fields.groupBy || !isNullOrUndefined(group)) {\n EventHandler.add(this.list, 'scroll', this.setFloatingHeader, this);\n }\n if (this.getModuleName() === 'dropdownbase') {\n if (this.element.getAttribute('tabindex')) {\n this.list.setAttribute('tabindex', this.element.getAttribute('tabindex'));\n }\n removeClass([this.element], dropDownBaseClasses.root);\n this.element.style.display = 'none';\n var wrapperElement = this.createElement('div');\n this.element.parentElement.insertBefore(wrapperElement, this.element);\n wrapperElement.appendChild(this.element);\n wrapperElement.appendChild(this.list);\n }\n this.setEnableRtl();\n this.setEnabled();\n if (!isEmptyData) {\n this.initialize();\n }\n };\n ;\n /**\n * Return the module name of this component.\n * @private\n */\n DropDownBase.prototype.getModuleName = function () {\n return 'dropdownbase';\n };\n ;\n /**\n * Gets all the list items bound on this component.\n * @returns Element[].\n */\n DropDownBase.prototype.getItems = function () {\n return this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li);\n };\n ;\n /**\n * Adds a new item to the popup list. By default, new item appends to the list as the last item,\n * but you can insert based on the index parameter.\n * @param { Object[] } items - Specifies an array of JSON data or a JSON data.\n * @param { number } itemIndex - Specifies the index to place the newly added item in the popup list.\n * @return {void}.\n */\n DropDownBase.prototype.addItem = function (items, itemIndex) {\n if (!this.list || this.list.textContent === this.noRecordsTemplate) {\n this.renderList();\n }\n var itemsCount = this.getItems().length;\n var selectedItemValue = this.list.querySelector('.' + dropDownBaseClasses.selected);\n items = (items instanceof Array ? items : [items]);\n var index;\n index = (isNullOrUndefined(itemIndex) || itemIndex < 0 || itemIndex > itemsCount - 1) ? itemsCount : itemIndex;\n var fields = this.fields;\n var liCollections = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var li = this.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 this.notify('addItem', { module: 'CheckBoxSelection', item: li });\n liCollections.push(li);\n this.listData.push(item);\n this.updateActionCompleteData(li, item);\n }\n if (itemsCount === 0 && isNullOrUndefined(this.list.querySelector('ul'))) {\n this.list.innerHTML = '';\n this.list.appendChild(this.ulElement);\n append(liCollections, this.ulElement);\n }\n else {\n for (var i = 0; i < items.length; i++) {\n if (this.liCollections[index]) {\n this.liCollections[index].parentNode.insertBefore(liCollections[i], this.liCollections[index]);\n }\n else {\n this.ulElement.appendChild(liCollections[i]);\n }\n var tempLi = [].slice.call(this.liCollections);\n tempLi.splice(index, 0, liCollections[i]);\n this.liCollections = tempLi;\n index += 1;\n }\n }\n if (selectedItemValue || itemIndex === 0) {\n this.updateSelection();\n }\n };\n DropDownBase.prototype.validationAttribute = function (target, hidden) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n hidden.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (!target.getAttribute(attributes[i])) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n hidden.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n DropDownBase.prototype.setZIndex = function () {\n // this is for component wise\n };\n DropDownBase.prototype.updateActionCompleteData = function (li, item) {\n // this is for ComboBox custom value\n };\n /**\n * Gets the data Object that matches the given value.\n * @param { string | number } value - Specifies the value of the list item.\n * @returns Object.\n */\n DropDownBase.prototype.getDataByValue = function (value) {\n if (!isNullOrUndefined(this.listData)) {\n var type = this.typeOfData(this.listData).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, _a = this.listData; _i < _a.length; _i++) {\n var item = _a[_i];\n if (!isNullOrUndefined(item) && item === value) {\n return item;\n }\n }\n }\n else {\n for (var _b = 0, _c = this.listData; _b < _c.length; _b++) {\n var item = _c[_b];\n if (!isNullOrUndefined(item) && getValue((this.fields.value ? this.fields.value : 'value'), item) === value) {\n return item;\n }\n }\n }\n }\n return null;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n DropDownBase.prototype.destroy = function () {\n if (document.body.contains(this.list)) {\n EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n if (!isNullOrUndefined(this.rippleFun)) {\n this.rippleFun();\n }\n detach(this.list);\n }\n _super.prototype.destroy.call(this);\n };\n ;\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], DropDownBase.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property('No Records Found')\n ], DropDownBase.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property('The Request Failed')\n ], DropDownBase.prototype, \"actionFailureTemplate\", void 0);\n __decorate([\n Property('None')\n ], DropDownBase.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(true)\n ], DropDownBase.prototype, \"enabled\", void 0);\n __decorate([\n Property([])\n ], DropDownBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"query\", void 0);\n __decorate([\n Property(1000)\n ], DropDownBase.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"destroyed\", void 0);\n DropDownBase = __decorate([\n NotifyPropertyChanges\n ], DropDownBase);\n return DropDownBase;\n}(Component));\nexport { DropDownBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Event, compile, KeyboardEvents, append } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, getUniqueID, formatUnit, isUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Animation, Browser, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, setStyleAttribute, closest, prepend, detach, classList } from '@syncfusion/ej2-base';\nimport { Popup, isCollide, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { incrementalSearch } from '../common/incremental-search';\nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\n/* tslint:disable */\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n// don't use space in classnames \nexport var dropDownListClasses = {\n root: 'e-dropdownlist',\n hover: dropDownBaseClasses.hover,\n selected: dropDownBaseClasses.selected,\n rtl: dropDownBaseClasses.rtl,\n li: dropDownBaseClasses.li,\n disable: dropDownBaseClasses.disabled,\n base: dropDownBaseClasses.root,\n focus: dropDownBaseClasses.focus,\n input: 'e-input-group',\n inputFocus: 'e-input-focus',\n icon: 'e-input-group-icon e-ddl-icon',\n iconAnimation: 'e-icon-anim',\n value: 'e-input-value',\n device: 'e-ddl-device',\n backIcon: 'e-input-group-icon e-back-icon e-icons',\n filterBarClearIcon: 'e-input-group-icon e-clear-icon e-icons',\n filterInput: 'e-input-filter',\n filterParent: 'e-filter-parent',\n mobileFilter: 'e-ddl-device-filter',\n footer: 'e-ddl-footer',\n header: 'e-ddl-header',\n clearIcon: 'e-clear-icon',\n clearIconHide: 'e-clear-icon-hide',\n popupFullScreen: 'e-popup-full-page',\n disableIcon: 'e-ddl-disable-icon',\n hiddenElement: 'e-ddl-hidden'\n};\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The DropDownList component contains a list of predefined values from which you can\n * choose a single value.\n * ```html\n * \n * ```\n * ```typescript\n * let dropDownListObj:DropDownList = new DropDownList();\n * dropDownListObj.appendTo(\"#list\");\n * ```\n */\nvar DropDownList = /** @class */ (function (_super) {\n __extends(DropDownList, _super);\n /**\n * * Constructor for creating the DropDownList component.\n */\n function DropDownList(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n return _this;\n }\n ;\n /**\n * Initialize the event handler.\n * @private\n */\n DropDownList.prototype.preRender = function () {\n this.element.style.opacity = '0';\n this.initializeData();\n _super.prototype.preRender.call(this);\n this.activeIndex = this.index;\n this.queryString = '';\n };\n DropDownList.prototype.initializeData = function () {\n this.isPopupOpen = false;\n this.isDocumentClick = false;\n this.isInteracted = false;\n this.isFilterFocus = false;\n this.beforePopupOpen = false;\n this.initial = true;\n this.initRemoteRender = false;\n this.isNotSearchList = false;\n this.isTyped = false;\n this.isSelected = false;\n this.preventFocus = false;\n this.preventAutoFill = false;\n this.isValidKey = false;\n this.typedString = '';\n this.isEscapeKey = false;\n this.isPreventBlur = false;\n this.isTabKey = false;\n this.actionCompleteData = { isUpdated: false };\n this.prevSelectPoints = {};\n this.isSelectCustom = false;\n this.isDropDownClick = false;\n this.preventAltUp = false;\n this.isCustomFilter = false;\n this.isSecondClick = false;\n this.keyConfigure = {\n tab: 'tab',\n enter: '13',\n escape: '27',\n end: '35',\n home: '36',\n down: '40',\n up: '38',\n pageUp: '33',\n pageDown: '34',\n open: 'alt+40',\n close: 'shift+tab',\n hide: 'alt+38',\n space: '32'\n };\n };\n DropDownList.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n DropDownList.prototype.renderList = function (isEmptyData) {\n _super.prototype.render.call(this, isEmptyData);\n this.wireListEvents();\n };\n DropDownList.prototype.floatLabelChange = function () {\n if (this.getModuleName() === 'dropdownlist' && this.floatLabelType === 'Auto') {\n var floatElement = this.inputWrapper.container.querySelector('.e-float-text');\n if (this.inputElement.value !== '' || this.isInteracted) {\n classList(floatElement, ['e-label-top'], ['e-label-bottom']);\n }\n else {\n classList(floatElement, ['e-label-bottom'], ['e-label-top']);\n }\n }\n };\n DropDownList.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n this.onChangeEvent(e);\n };\n DropDownList.prototype.resetFocusElement = function () {\n this.removeHover();\n this.removeSelection();\n this.removeFocus();\n this.list.scrollTop = 0;\n if (this.getModuleName() !== 'autocomplete') {\n var li = this.ulElement.querySelector('.' + dropDownListClasses.li);\n if (li) {\n li.classList.add(dropDownListClasses.focus);\n }\n }\n };\n DropDownList.prototype.clear = function (e, property) {\n if (property !== 'dataSource') {\n this.resetSelection();\n }\n var dataItem = this.getItemData();\n if (this.previousValue === dataItem.value) {\n return;\n }\n this.onChangeEvent(e);\n };\n DropDownList.prototype.resetSelection = function () {\n if (this.list) {\n if (this.allowFiltering && this.getModuleName() !== 'autocomplete'\n && !isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n this.onActionComplete(this.actionCompleteData.ulElement.cloneNode(true), this.actionCompleteData.list);\n }\n this.resetFocusElement();\n }\n this.hiddenElement.innerHTML = '';\n this.inputElement.value = '';\n this.value = null;\n this.itemData = null;\n this.text = null;\n this.index = null;\n this.activeIndex = null;\n this.item = null;\n this.queryString = '';\n if (this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n this.valueTempElement = null;\n }\n this.setSelection(null, null);\n this.isSelectCustom = false;\n this.updateIconState();\n };\n DropDownList.prototype.setHTMLAttributes = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n this.inputWrapper.container.classList.add(this.htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && this.htmlAttributes[htmlAttr] === 'disabled') {\n this.enabled = false;\n this.setEnable();\n }\n else if (htmlAttr === 'readonly' && this.htmlAttributes[htmlAttr] === 'readonly') {\n this.readonly = true;\n this.dataBind();\n }\n else if (htmlAttr === 'style') {\n this.inputWrapper.container.setAttribute('style', this.htmlAttributes[htmlAttr]);\n }\n else {\n var defaultAttr = ['title', 'id', 'placeholder'];\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (defaultAttr.indexOf(htmlAttr) > -1) {\n htmlAttr === 'placeholder' ? Input.setPlaceholder(this.htmlAttributes[htmlAttr], this.inputElement) :\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.inputWrapper.container.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n };\n DropDownList.prototype.getAriaAttributes = function () {\n return {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false',\n 'aria-activedescendant': 'null',\n 'aria-labelledby': this.hiddenElement.id\n };\n };\n DropDownList.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputElement.parentElement]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n DropDownList.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hidePopup();\n addClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.targetElement().tabIndex = -1;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n DropDownList.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ;\n DropDownList.prototype.preventTabIndex = function (element) {\n if (this.getModuleName() === 'dropdownlist') {\n element.tabIndex = -1;\n }\n };\n DropDownList.prototype.targetElement = function () {\n return this.inputWrapper.container;\n };\n DropDownList.prototype.getNgDirective = function () {\n return 'EJS-DROPDOWNLIST';\n };\n DropDownList.prototype.getElementByText = function (text) {\n return this.getElementByValue(this.getValueByText(text));\n };\n DropDownList.prototype.getElementByValue = function (value) {\n var item;\n var listItems = this.getItems();\n for (var _i = 0, listItems_1 = listItems; _i < listItems_1.length; _i++) {\n var liItem = listItems_1[_i];\n if (this.getFormattedValue(liItem.getAttribute('data-value')) === value) {\n item = liItem;\n break;\n }\n }\n return item;\n };\n ;\n DropDownList.prototype.initValue = function () {\n this.renderList();\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n else {\n this.updateValues();\n }\n };\n DropDownList.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n this.setSelection(this.getElementByValue(this.value), null);\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var element = this.getElementByText(this.text);\n if (isNullOrUndefined(element)) {\n this.setProperties({ text: null });\n return;\n }\n else {\n this.setSelection(element, null);\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DropDownList.prototype.onBlur = function (e) {\n if (!this.enabled) {\n return;\n }\n var target = e.relatedTarget;\n var currentTarget = e.target;\n var isPreventBlur = this.isPreventBlur;\n this.isPreventBlur = false;\n //IE 11 - issue\n if (isPreventBlur && !this.isDocumentClick && this.isPopupOpen && (!isNullOrUndefined(currentTarget) ||\n !this.isFilterLayout() && isNullOrUndefined(target))) {\n if (this.getModuleName() === 'dropdownlist' && this.allowFiltering && this.isPopupOpen) {\n this.filterInput.focus();\n }\n else {\n this.targetElement().focus();\n }\n return;\n }\n if (this.isDocumentClick || (!isNullOrUndefined(this.popupObj)\n && document.body.contains(this.popupObj.element) &&\n this.popupObj.element.classList.contains(dropDownListClasses.mobileFilter))) {\n if (!this.beforePopupOpen) {\n this.isDocumentClick = false;\n }\n return;\n }\n if (((this.getModuleName() === 'dropdownlist' && !this.isFilterFocus && target !== this.inputElement)\n && (document.activeElement !== target || (document.activeElement === target &&\n currentTarget.classList.contains(dropDownListClasses.inputFocus)))) ||\n (isNullOrUndefined(target) && this.getModuleName() === 'dropdownlist' && this.allowFiltering &&\n currentTarget !== this.inputWrapper.container) || this.getModuleName() !== 'dropdownlist' &&\n !this.inputWrapper.container.contains(target) || this.isTabKey) {\n this.isDocumentClick = this.isPopupOpen ? true : false;\n this.focusOutAction();\n this.isTabKey = false;\n }\n if (this.isRequested && !this.isPopupOpen && !this.isPreventBlur) {\n this.isActive = false;\n this.beforePopupOpen = false;\n }\n };\n DropDownList.prototype.focusOutAction = function () {\n this.isInteracted = false;\n this.focusOut();\n this.onFocusOut();\n };\n DropDownList.prototype.onFocusOut = function () {\n if (!this.enabled) {\n return;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(null);\n }\n this.floatLabelChange();\n this.dispatchEvent(this.hiddenElement, 'change');\n if (this.getModuleName() === 'dropdownlist' && this.element.tagName !== 'INPUT') {\n this.dispatchEvent(this.inputElement, 'blur');\n }\n if (this.inputWrapper.clearButton) {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n this.trigger('blur');\n };\n DropDownList.prototype.onFocus = function () {\n if (!this.isInteracted) {\n this.isInteracted = true;\n this.trigger('focus');\n }\n this.updateIconState();\n };\n DropDownList.prototype.resetValueHandler = function () {\n this.value = null;\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 var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n }\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 /**\n * Hides the spinner loader.\n * @returns void.\n */\n DropDownList.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n this.spinnerElement.innerHTML = '';\n this.spinnerElement = null;\n }\n };\n /**\n * Shows the spinner loader.\n * @returns void.\n */\n DropDownList.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = Browser.isDevice && !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[1] ||\n !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[0] || this.inputWrapper.buttons[0];\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n }, this.createElement);\n showSpinner(this.spinnerElement);\n }\n };\n DropDownList.prototype.keyActionHandler = function (e) {\n var preventAction = e.action === 'pageUp' || e.action === 'pageDown';\n var preventHomeEnd = this.getModuleName() !== 'dropdownlist' && (e.action === 'home' || e.action === 'end');\n this.isEscapeKey = e.action === 'escape';\n this.isTabKey = !this.isPopupOpen && e.action === 'tab';\n var isNavigation = (e.action === 'down' || e.action === 'up' || e.action === 'pageUp' || e.action === 'pageDown'\n || e.action === 'home' || e.action === 'end');\n if ((this.isEditTextBox() || preventAction || preventHomeEnd) && !this.isPopupOpen) {\n return;\n }\n if (!this.readonly) {\n var isTabAction = e.action === 'tab' || e.action === 'close';\n if (this.list === undefined && !this.isRequested && !isTabAction && e.action !== 'escape') {\n this.searchKeyEvent = e;\n this.renderList();\n }\n if (isNullOrUndefined(this.list) || (!isNullOrUndefined(this.liCollections) &&\n isNavigation && this.liCollections.length === 0) || this.isRequested) {\n return;\n }\n if (isTabAction && this.isPopupOpen || e.action === 'escape') {\n e.preventDefault();\n }\n this.isSelected = e.action === 'escape' ? false : this.isSelected;\n this.isTyped = (isNavigation || e.action === 'escape') ? false : this.isTyped;\n switch (e.action) {\n case 'down':\n case 'up':\n var focusEle = this.list.querySelector('.' + dropDownListClasses.focus);\n if (this.isSelectFocusItem(focusEle)) {\n this.setSelection(focusEle, e);\n }\n else {\n var nextItem = void 0;\n var index = e.action === 'down' ? this.activeIndex + 1 : this.activeIndex - 1;\n var startIndex = 0;\n if (this.getModuleName() === 'autocomplete') {\n startIndex = e.action === 'down' && isNullOrUndefined(this.activeIndex) ? 0 : this.liCollections.length - 1;\n index = index < 0 ? this.liCollections.length - 1 : index === this.liCollections.length ? 0 : index;\n }\n nextItem = isNullOrUndefined(this.activeIndex) ? this.liCollections[startIndex] : this.liCollections[index];\n this.setSelection(nextItem, e);\n }\n e.preventDefault();\n break;\n case 'pageUp':\n this.pageUpSelection(this.activeIndex - this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'pageDown':\n this.pageDownSelection(this.activeIndex + this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'home':\n if (this.getModuleName() === 'dropdownlist') {\n e.preventDefault();\n if (this.activeIndex === 0) {\n return;\n }\n this.setSelection(this.liCollections[0], e);\n }\n break;\n case 'end':\n if (this.getModuleName() === 'dropdownlist') {\n e.preventDefault();\n var lastLi = this.getItems().length - 1;\n if (this.activeIndex === lastLi) {\n return;\n }\n this.setSelection(this.liCollections[lastLi], e);\n }\n break;\n case 'space':\n if (this.getModuleName() === 'dropdownlist') {\n if (!this.beforePopupOpen) {\n this.showPopup();\n }\n }\n break;\n case 'open':\n this.showPopup();\n break;\n case 'hide':\n this.preventAltUp = this.isPopupOpen;\n this.hidePopup();\n this.focusDropDown(e);\n break;\n case 'enter':\n this.selectCurrentItem(e);\n break;\n case 'escape':\n case 'tab':\n case 'close':\n if (this.isPopupOpen) {\n this.hidePopup();\n this.focusDropDown(e);\n }\n break;\n }\n }\n };\n DropDownList.prototype.selectCurrentItem = function (e) {\n if (this.isPopupOpen) {\n var li = this.list.querySelector('.' + dropDownListClasses.focus);\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n this.hidePopup();\n this.focusDropDown(e);\n }\n else {\n this.showPopup();\n }\n };\n DropDownList.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n DropDownList.prototype.getPageCount = function () {\n var liHeight = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.getBoundingClientRect().height / parseInt(liHeight, 10));\n };\n DropDownList.prototype.pageUpSelection = function (steps, event) {\n var previousItem = steps >= 0 ? this.liCollections[steps + 1] : this.liCollections[0];\n this.setSelection(previousItem, event);\n };\n ;\n DropDownList.prototype.pageDownSelection = function (steps, event) {\n var list = this.getItems();\n var previousItem = steps <= list.length ? this.liCollections[steps - 1] : this.liCollections[list.length - 1];\n this.setSelection(previousItem, event);\n };\n ;\n DropDownList.prototype.unWireEvent = function () {\n EventHandler.remove(this.inputWrapper.container, 'mousedown', this.dropDownClick);\n EventHandler.remove(this.inputWrapper.container, 'keypress', this.onSearch);\n EventHandler.remove(this.inputWrapper.container, 'focus', this.focusIn);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n }\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 else {\n this.focusIn();\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 var items = this.detachChanges();\n this.isSelected = true;\n var eventArgs = {\n e: e,\n item: this.item,\n itemData: items,\n isInteracted: e ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n return true;\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 return false;\n };\n DropDownList.prototype.activeItem = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.selected)) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n li.setAttribute('aria-selected', 'true');\n }\n };\n DropDownList.prototype.setValue = function (e) {\n var dataItem = this.getItemData();\n if (dataItem.value === null) {\n Input.setValue(null, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dataItem.text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n if (this.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.previousItemData = (!isNullOrUndefined(this.itemData)) ? this.itemData : null;\n var argsCancel = this.updateSelectedItem(li, e, false);\n if (argsCancel) {\n return;\n }\n }\n if (this.list) {\n this.removeHover();\n }\n this.previousSelectedLI = (!isNullOrUndefined(this.selectedLI)) ? this.selectedLI : null;\n this.selectedLI = li;\n if (this.setValue(e)) {\n return;\n }\n if (this.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 = this.createElement('span', { className: dropDownListClasses.value });\n this.inputElement.parentElement.insertBefore(this.valueTempElement, this.inputElement);\n this.inputElement.style.display = 'none';\n }\n this.valueTempElement.innerHTML = '';\n compiledString = compile(this.valueTemplate);\n for (var _i = 0, _a = compiledString(this.itemData); _i < _a.length; _i++) {\n var item = _a[_i];\n this.valueTempElement.appendChild(item);\n }\n };\n DropDownList.prototype.removeSelection = function () {\n var selectedItems = this.list.querySelectorAll('.' + dropDownBaseClasses.selected);\n if (selectedItems.length) {\n removeClass(selectedItems, dropDownBaseClasses.selected);\n selectedItems[0].removeAttribute('aria-selected');\n }\n };\n ;\n DropDownList.prototype.getItemData = function () {\n var fields = this.fields;\n var dataItem = null;\n dataItem = this.itemData;\n var dataValue;\n var dataText;\n if (!isNullOrUndefined(dataItem)) {\n dataValue = getValue(fields.value, dataItem);\n dataText = getValue(fields.text, dataItem);\n }\n var value = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataValue : dataItem);\n var text = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataText : dataItem);\n return { value: value, text: text };\n };\n /**\n * To trigger the change event for list.\n */\n DropDownList.prototype.onChangeEvent = function (eve) {\n var dataItem = this.getItemData();\n var index = this.isSelectCustom ? null : this.activeIndex;\n this.setProperties({ 'value': dataItem.value, 'index': index, 'text': dataItem.text }, true);\n this.detachChangeEvent(eve);\n };\n ;\n DropDownList.prototype.detachChanges = function () {\n var items;\n if (typeof this.itemData === 'string' ||\n typeof this.itemData === 'boolean' ||\n typeof this.itemData === 'number') {\n items = Object.defineProperties({}, {\n value: {\n value: this.itemData,\n enumerable: true\n },\n text: {\n value: this.itemData,\n enumerable: true\n }\n });\n }\n else {\n items = this.itemData;\n }\n return items;\n };\n DropDownList.prototype.detachChangeEvent = function (eve) {\n this.isSelected = false;\n this.previousValue = this.value;\n this.activeIndex = this.index;\n this.typedString = !isNullOrUndefined(this.text) ? this.text : '';\n if (!this.initial) {\n var items = this.detachChanges();\n var preItems = void 0;\n if (typeof this.previousItemData === 'string' ||\n typeof this.previousItemData === 'boolean' ||\n typeof this.previousItemData === 'number') {\n preItems = Object.defineProperties({}, {\n value: {\n value: this.previousItemData,\n enumerable: true\n },\n text: {\n value: this.previousItemData,\n enumerable: true\n }\n });\n }\n else {\n preItems = this.previousItemData;\n }\n this.setHiddenValue();\n var eventArgs = {\n e: eve,\n item: this.item,\n itemData: items,\n previousItem: this.previousSelectedLI,\n previousItemData: preItems,\n isInteracted: eve ? true : false,\n value: this.value,\n element: this.element\n };\n this.trigger('change', eventArgs);\n }\n };\n DropDownList.prototype.setHiddenValue = function () {\n if (!isNullOrUndefined(this.value)) {\n this.hiddenElement.innerHTML = '';\n var selectedElement = this.hiddenElement.querySelector('option');\n selectedElement.setAttribute('value', this.value.toString());\n }\n else {\n this.hiddenElement.innerHTML = '';\n }\n };\n /**\n * Filter bar implementation\n */\n DropDownList.prototype.onFilterUp = function (e) {\n 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 this.isDataFetched = false;\n if (this.isFiltering()) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isCustomFilter = true;\n _this.filteringAction(dataSource, query, fields);\n },\n baseEventArgs: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1);\n if (eventArgs_1.cancel) {\n return;\n }\n if (!this.isCustomFilter && !eventArgs_1.preventDefaultAction) {\n var filterQuery = this.query ? this.query.clone() : new Query();\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n this.filteringAction(this.dataSource, filterQuery, this.fields);\n }\n }\n };\n DropDownList.prototype.filteringAction = function (dataSource, query, fields) {\n if (!isNullOrUndefined(this.filterInput)) {\n this.beforePopupOpen = true;\n if (this.filterInput.value.trim() === '') {\n this.actionCompleteData.isUpdated = false;\n this.isTyped = false;\n if (!isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list);\n }\n this.isTyped = true;\n if (!isNullOrUndefined(this.itemData) && this.getModuleName() === 'dropdownlist') {\n this.focusIndexItem();\n this.setScrollPosition();\n }\n this.isNotSearchList = true;\n }\n else {\n this.isNotSearchList = false;\n this.resetList(dataSource, fields, query);\n }\n }\n };\n DropDownList.prototype.setSearchBox = function (popupElement) {\n if (this.isFiltering()) {\n var parentElement = this.createElement('span', {\n className: dropDownListClasses.filterParent\n });\n this.filterInput = this.createElement('input', {\n attrs: { type: 'text' },\n className: dropDownListClasses.filterInput\n });\n this.element.parentNode.insertBefore(this.filterInput, this.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ?\n [dropDownListClasses.backIcon, dropDownListClasses.filterBarClearIcon] : [dropDownListClasses.filterBarClearIcon],\n properties: { placeholder: this.filterBarPlaceholder }\n }, this.createElement);\n append([this.filterInputObj.container], parentElement);\n prepend([parentElement], popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null,\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n if (!Browser.isDevice) {\n this.searchKeyModule = new KeyboardEvents(this.filterInput, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n }\n EventHandler.add(this.filterInput, 'input', this.onInput, this);\n EventHandler.add(this.filterInput, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.filterInput, 'keydown', this.onFilterDown, this);\n EventHandler.add(this.filterInput, 'blur', this.onBlur, this);\n return this.filterInputObj;\n }\n else {\n return inputObject;\n }\n };\n ;\n DropDownList.prototype.onInput = function () {\n this.isValidKey = true;\n };\n DropDownList.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n };\n DropDownList.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n if (this.isNotSearchList) {\n this.isNotSearchList = false;\n return;\n }\n if (this.isActive) {\n var selectedItem = this.selectedLI ? this.selectedLI.cloneNode(true) : null;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent) && this.searchKeyEvent.type === 'keydown') {\n this.isRequested = false;\n this.keyActionHandler(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent)) {\n this.incrementalSearch(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n this.list.scrollTop = 0;\n if (!isNullOrUndefined(ulElement)) {\n attributes(ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n }\n if (this.initRemoteRender) {\n this.initial = true;\n this.activeIndex = this.index;\n this.updateValues();\n this.initRemoteRender = false;\n this.initial = false;\n }\n if (this.getModuleName() !== 'autocomplete' && this.isFiltering() && !this.isTyped) {\n if (!this.actionCompleteData.isUpdated || ((!this.isCustomFilter\n && !this.isFilterFocus)\n && ((this.dataSource instanceof DataManager)\n || (!isNullOrUndefined(this.dataSource.length) && this.dataSource.length !== 0)))) {\n this.actionCompleteData = { ulElement: ulElement.cloneNode(true), list: list, isUpdated: true };\n }\n this.addNewItem(list, selectedItem);\n if (!isNullOrUndefined(this.itemData)) {\n this.focusIndexItem();\n }\n }\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n }\n };\n DropDownList.prototype.addNewItem = function (listData, newElement) {\n var _this = this;\n if (!isNullOrUndefined(this.itemData) && !isNullOrUndefined(newElement)) {\n var value_1 = this.getItemData().value;\n var isExist = listData.some(function (data) {\n return (((typeof data === 'string' || typeof data === 'number') && data === value_1) ||\n (getValue(_this.fields.value, data) === value_1));\n });\n if (!isExist) {\n this.addItem(this.itemData);\n }\n }\n };\n DropDownList.prototype.updateActionCompleteData = function (li, item) {\n if (this.getModuleName() !== 'autocomplete' && this.actionCompleteData.ulElement) {\n this.actionCompleteData.ulElement.appendChild(li.cloneNode(true));\n if (this.isFiltering()) {\n this.actionCompleteData.list.push(item);\n }\n }\n };\n DropDownList.prototype.focusIndexItem = function () {\n var value = this.getItemData().value;\n this.activeIndex = this.getIndexByValue(value);\n var element = this.list.querySelector('[data-value=\"' + value + '\"]');\n this.selectedLI = element;\n this.activeItem(element);\n this.removeFocus();\n };\n DropDownList.prototype.updateSelection = function () {\n var selectedItem = this.list.querySelector('.' + dropDownBaseClasses.selected);\n if (selectedItem) {\n this.setProperties({ 'index': this.getIndexByValue(selectedItem.getAttribute('data-value')) });\n this.activeIndex = this.index;\n }\n else {\n this.removeFocus();\n this.list.querySelector('.' + dropDownBaseClasses.li).classList.add(dropDownListClasses.focus);\n }\n };\n DropDownList.prototype.removeFocus = function () {\n var highlightedItem = this.list.querySelectorAll('.' + dropDownListClasses.focus);\n if (highlightedItem && highlightedItem.length) {\n removeClass(highlightedItem, dropDownListClasses.focus);\n }\n };\n ;\n DropDownList.prototype.renderPopup = function () {\n if (this.popupObj && document.body.contains(this.popupObj.element)) {\n this.refreshPopup();\n return;\n }\n var args = { cancel: false };\n this.trigger('beforeOpen', args);\n if (args.cancel) {\n return;\n }\n var popupEle = this.createElement('div', {\n id: this.element.id + '_popup', className: 'e-ddl e-popup ' + (this.cssClass != null ? this.cssClass : '')\n });\n var searchBox = this.setSearchBox(popupEle);\n this.listHeight = formatUnit(this.popupHeight);\n if (this.headerTemplate) {\n this.setHeaderTemplate(popupEle);\n }\n append([this.list], popupEle);\n if (this.footerTemplate) {\n this.setFooterTemplate(popupEle);\n }\n document.body.appendChild(popupEle);\n popupEle.style.visibility = 'hidden';\n if (this.popupHeight !== 'auto') {\n this.searchBoxHeight = 0;\n if (!isNullOrUndefined(searchBox.container)) {\n this.searchBoxHeight = (searchBox.container.parentElement).getBoundingClientRect().height;\n this.listHeight = (parseInt(this.listHeight, 10) - (this.searchBoxHeight)).toString() + 'px';\n }\n if (this.headerTemplate) {\n var height = Math.round(this.header.getBoundingClientRect().height);\n this.listHeight = (parseInt(this.listHeight, 10) - (height + this.searchBoxHeight)).toString() + 'px';\n }\n if (this.footerTemplate) {\n var height = Math.round(this.footer.getBoundingClientRect().height);\n this.listHeight = (parseInt(this.listHeight, 10) - (height + this.searchBoxHeight)).toString() + 'px';\n }\n this.list.style.maxHeight = (parseInt(this.listHeight, 10) - 2).toString() + 'px'; // due to box-sizing property\n popupEle.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n popupEle.style.height = 'auto';\n }\n var offsetValue = 0;\n var left;\n if (!isNullOrUndefined(this.selectedLI) && (!isNullOrUndefined(this.activeIndex) && this.activeIndex >= 0)) {\n this.setScrollPosition();\n }\n else {\n this.list.scrollTop = 0;\n }\n if (Browser.isDevice && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n offsetValue = this.getOffsetValue(popupEle);\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10));\n }\n this.getFocusElement();\n this.createPopup(popupEle, offsetValue, left);\n this.checkCollision(popupEle);\n if (Browser.isDevice) {\n this.popupObj.element.classList.add(dropDownListClasses.device);\n if (this.getModuleName() === 'dropdownlist' || (this.getModuleName() === 'combobox'\n && !this.allowFiltering && this.isDropDownClick)) {\n this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n if (this.isFilterLayout()) {\n this.popupObj.element.classList.add(dropDownListClasses.mobileFilter);\n this.popupObj.position = { X: 0, Y: 0 };\n this.popupObj.dataBind();\n attributes(this.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n this.setSearchBoxPosition();\n this.backIconElement = searchBox.container.querySelector('.e-back-icon');\n this.clearIconElement = searchBox.container.querySelector('.' + dropDownListClasses.clearIcon);\n EventHandler.add(this.backIconElement, 'click', this.clickOnBackIcon, this);\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n }\n }\n popupEle.style.visibility = 'visible';\n addClass([popupEle], 'e-popup-close');\n var scrollParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _i = 0, scrollParentElements_1 = scrollParentElements; _i < scrollParentElements_1.length; _i++) {\n var element = scrollParentElements_1[_i];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n EventHandler.add(this.list, 'scroll', this.listScroll, this);\n }\n attributes(this.targetElement(), { 'aria-expanded': 'true' });\n var inputParent = this.isFiltering() ? this.filterInput.parentElement : this.inputWrapper.container;\n addClass([inputParent], [dropDownListClasses.inputFocus]);\n var animModel = { name: 'FadeIn', duration: 100 };\n this.beforePopupOpen = true;\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.iconAnimation]);\n this.popupObj.show(new Animation(eventArgs.animation), (this.zIndex === 1000) ? this.element : null);\n };\n DropDownList.prototype.checkCollision = function (popupEle) {\n if (!Browser.isDevice || (Browser.isDevice && !(this.getModuleName() === 'dropdownlist' || this.isDropDownClick))) {\n var collision = isCollide(popupEle);\n if (collision.length > 0) {\n popupEle.style.marginTop = -parseInt(getComputedStyle(popupEle).marginTop, 10) + 'px';\n }\n }\n };\n DropDownList.prototype.getOffsetValue = function (popupEle) {\n var popupStyles = getComputedStyle(popupEle);\n var borderTop = parseInt(popupStyles.borderTop, 10);\n var borderBottom = parseInt(popupStyles.borderBottom, 10);\n return this.setPopupPosition(borderTop + borderBottom);\n };\n DropDownList.prototype.createPopup = function (element, offsetValue, left) {\n var _this = this;\n this.popupObj = new Popup(element, {\n width: this.setWidth(), targetType: 'relative',\n relateTo: this.inputWrapper.container, collision: { X: 'flip', Y: 'flip' }, offsetY: offsetValue,\n enableRtl: this.enableRtl, offsetX: left, position: { X: 'left', Y: 'bottom' },\n zIndex: this.zIndex,\n close: function () {\n if (!_this.isDocumentClick) {\n _this.focusDropDown();\n }\n _this.isDocumentClick = false;\n _this.destroyPopup();\n },\n open: function () {\n EventHandler.add(document, 'mousedown', _this.onDocumentClick, _this);\n _this.isPopupOpen = true;\n if (_this.isFilterLayout()) {\n removeClass([_this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n _this.isFilterFocus = true;\n _this.filterInput.focus();\n if (_this.inputWrapper.clearButton) {\n addClass([_this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n _this.activeStateChange();\n }\n });\n };\n DropDownList.prototype.isEmptyList = function () {\n return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0;\n };\n DropDownList.prototype.getFocusElement = function () {\n // combo-box used this method\n };\n DropDownList.prototype.isFilterLayout = function () {\n return this.getModuleName() === 'dropdownlist' && this.allowFiltering;\n };\n DropDownList.prototype.scrollHandler = function () {\n if (Browser.isDevice && ((this.getModuleName() === 'dropdownlist' &&\n !this.isFilterLayout()) || (this.getModuleName() === 'combobox' && !this.allowFiltering && this.isDropDownClick))) {\n this.hidePopup();\n }\n if (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement.style.zIndex = '0';\n this.fixedHeaderElement.style.display = 'none';\n }\n };\n DropDownList.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n this.popupObj.element.style.maxHeight = '100%';\n this.popupObj.element.style.width = '100%';\n this.list.style.maxHeight = (window.innerHeight - searchBoxHeight) + 'px';\n this.list.style.height = (window.innerHeight - searchBoxHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n DropDownList.prototype.setPopupPosition = function (border) {\n var offsetValue;\n var popupOffset = border;\n var selectedLI = this.list.querySelector('.' + dropDownListClasses.focus) || this.selectedLI;\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n var lastItem = this.isEmptyList() ? this.list : this.liCollections[this.getItems().length - 1];\n var liHeight = firstItem.getBoundingClientRect().height;\n var listHeight = this.list.offsetHeight / 2;\n var height = isNullOrUndefined(selectedLI) ? firstItem.offsetTop : selectedLI.offsetTop;\n var lastItemOffsetValue = lastItem.offsetTop;\n if (lastItemOffsetValue - listHeight < height && !isNullOrUndefined(this.liCollections) &&\n this.liCollections.length > 0 && !isNullOrUndefined(selectedLI)) {\n var count = this.list.offsetHeight / liHeight;\n var paddingBottom = parseInt(getComputedStyle(this.list).paddingBottom, 10);\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - popupOffset + paddingBottom;\n this.list.scrollTop = selectedLI.offsetTop;\n }\n else if (height > listHeight) {\n offsetValue = listHeight - liHeight / 2;\n this.list.scrollTop = height - listHeight + liHeight / 2;\n }\n else {\n offsetValue = height;\n }\n var inputHeight = this.inputWrapper.container.offsetHeight;\n offsetValue = offsetValue + liHeight + popupOffset - ((liHeight - inputHeight) / 2);\n return -offsetValue;\n };\n DropDownList.prototype.setWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.inputWrapper.container.offsetWidth * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n DropDownList.prototype.scrollBottom = function (isInitial) {\n var currentOffset = this.list.offsetHeight;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n nextOffset = isInitial ? nextOffset + parseInt(getComputedStyle(this.list).paddingTop, 10) * 2 : nextOffset;\n var boxRange = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n boxRange = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset || !(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n };\n DropDownList.prototype.scrollTop = function () {\n var nextOffset = this.selectedLI.offsetTop - this.list.scrollTop;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n var boxRange = (this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop);\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = this.selectedLI.offsetTop - (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.offsetHeight : 0);\n }\n };\n DropDownList.prototype.isEditTextBox = function () {\n return false;\n };\n DropDownList.prototype.isFiltering = function () {\n return this.allowFiltering;\n };\n DropDownList.prototype.isPopupButton = function () {\n return true;\n };\n DropDownList.prototype.setScrollPosition = function (e) {\n if (!isNullOrUndefined(e)) {\n switch (e.action) {\n case 'pageDown':\n case 'down':\n case 'end':\n this.scrollBottom();\n break;\n default:\n this.scrollTop();\n break;\n }\n }\n else {\n this.scrollBottom(true);\n }\n };\n DropDownList.prototype.clearText = function () {\n this.filterInput.value = '';\n this.searchLists(null);\n };\n DropDownList.prototype.listScroll = function () {\n this.filterInput.blur();\n };\n DropDownList.prototype.closePopup = function (delay) {\n this.isTyped = false;\n if (!(this.popupObj && document.body.contains(this.popupObj.element) && this.beforePopupOpen)) {\n return;\n }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n this.isActive = false;\n this.filterInputObj = null;\n this.isDropDownClick = false;\n this.preventAutoFill = false;\n var scrollableParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _i = 0, scrollableParentElements_1 = scrollableParentElements; _i < scrollableParentElements_1.length; _i++) {\n var element = scrollableParentElements_1[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n removeClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n EventHandler.remove(this.list, 'scroll', this.listScroll);\n }\n if (this.isFilterLayout()) {\n if (!Browser.isDevice) {\n this.searchKeyModule.destroy();\n if (this.clearIconElement) {\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n }\n if (this.backIconElement) {\n EventHandler.remove(this.backIconElement, 'click', this.clickOnBackIcon);\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n EventHandler.remove(this.filterInput, 'input', this.onInput);\n EventHandler.remove(this.filterInput, 'keyup', this.onFilterUp);\n EventHandler.remove(this.filterInput, 'keydown', this.onFilterDown);\n EventHandler.remove(this.filterInput, 'blur', this.onBlur);\n this.filterInput = null;\n }\n attributes(this.targetElement(), { 'aria-expanded': 'false', 'aria-activedescendant': null });\n this.inputWrapper.container.classList.remove(dropDownListClasses.iconAnimation);\n if (this.isFiltering()) {\n this.actionCompleteData.isUpdated = false;\n }\n this.beforePopupOpen = false;\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (this.getModuleName() === 'autocomplete') {\n this.rippleFun();\n }\n if (this.isPopupOpen) {\n this.popupObj.hide(new Animation(eventArgs.animation));\n }\n else {\n this.destroyPopup();\n }\n };\n DropDownList.prototype.destroyPopup = function () {\n this.isPopupOpen = false;\n this.isFilterFocus = false;\n this.popupObj.destroy();\n detach(this.popupObj.element);\n };\n DropDownList.prototype.clickOnBackIcon = function () {\n this.hidePopup();\n this.focusIn();\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n DropDownList.prototype.render = function () {\n if (this.element.tagName === 'INPUT') {\n this.inputElement = this.element;\n }\n else {\n this.inputElement = this.createElement('input');\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n this.element.parentElement.insertBefore(this.inputElement, this.element);\n this.preventTabIndex(this.inputElement);\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n buttons: this.isPopupButton() ? [dropDownListClasses.icon] : null,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.getModuleName() === 'dropdownlist' ? true : this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n }, this.createElement);\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.inputWrapper.container);\n }\n else {\n this.inputElement.parentElement.insertBefore(this.element, this.inputElement);\n }\n this.hiddenElement = this.createElement('select', {\n attrs: { 'aria-hidden': 'true', 'tabindex': '-1', 'class': dropDownListClasses.hiddenElement }\n });\n prepend([this.hiddenElement], this.inputWrapper.container);\n this.validationAttribute(this.element, this.hiddenElement);\n this.setFields();\n this.inputWrapper.container.style.width = formatUnit(this.width);\n this.inputWrapper.container.classList.add('e-ddl');\n this.wireEvent();\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement.id = id + '_hidden';\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n attributes(this.targetElement(), this.getAriaAttributes());\n this.setHTMLAttributes();\n if (this.value !== null || this.activeIndex !== null || this.text !== null) {\n this.initValue();\n }\n else if (this.element.tagName === 'SELECT' && this.element.options[0]) {\n var selectElement = this.element;\n this.value = selectElement.options[selectElement.selectedIndex].value;\n this.text = isNullOrUndefined(this.value) ? null : selectElement.options[selectElement.selectedIndex].textContent;\n this.initValue();\n }\n this.preventTabIndex(this.element);\n if (!this.enabled) {\n this.targetElement().tabIndex = -1;\n }\n this.initial = false;\n this.element.style.opacity = '';\n this.inputElement.onselect = function (e) { e.stopImmediatePropagation(); };\n this.inputElement.onchange = function (e) { e.stopImmediatePropagation(); };\n if (this.element.hasAttribute('autofocus')) {\n this.focusIn();\n }\n };\n ;\n DropDownList.prototype.setFooterTemplate = function (popupEle) {\n var compiledString;\n if (this.footer) {\n this.footer.innerHTML = '';\n }\n else {\n this.footer = this.createElement('div');\n addClass([this.footer], dropDownListClasses.footer);\n }\n compiledString = compile(this.footerTemplate);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.footer.appendChild(item);\n }\n append([this.footer], popupEle);\n };\n DropDownList.prototype.setHeaderTemplate = function (popupEle) {\n var compiledString;\n if (this.header) {\n this.header.innerHTML = '';\n }\n else {\n this.header = this.createElement('div');\n addClass([this.header], dropDownListClasses.header);\n }\n compiledString = compile(this.headerTemplate);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.header.appendChild(item);\n }\n var contentEle = popupEle.querySelector('div.e-content');\n popupEle.insertBefore(this.header, contentEle);\n };\n DropDownList.prototype.setOldText = function (text) {\n this.text = text;\n };\n DropDownList.prototype.setOldValue = function (value) {\n this.value = value;\n };\n DropDownList.prototype.refreshPopup = function () {\n if (!isNullOrUndefined(this.popupObj) && document.body.contains(this.popupObj.element) &&\n ((this.allowFiltering && !(Browser.isDevice && this.isFilterLayout())) || this.getModuleName() === 'autocomplete')) {\n this.popupObj.refreshPosition(this.inputWrapper.container);\n }\n };\n DropDownList.prototype.updateDataSource = function (prop) {\n this.clear(null, prop);\n this.resetList(this.dataSource);\n if (!this.isCustomFilter && !this.isFilterFocus && document.activeElement !== this.filterInput) {\n this.itemData = this.getDataByValue(this.value);\n var dataItem = this.getItemData();\n this.setProperties({ 'value': dataItem.value, 'text': dataItem.text });\n }\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n DropDownList.prototype.onPropertyChanged = function (newProp, oldProp) {\n 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 if (this.filterInput) {\n Input.setPlaceholder(newProp.filterBarPlaceholder, this.filterInput);\n }\n break;\n case 'readonly':\n if (this.getModuleName() !== 'dropdownlist') {\n Input.setReadonly(newProp.readonly, this.inputElement);\n }\n break;\n case 'cssClass':\n this.setCssClass(newProp, oldProp);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'text':\n if (newProp.text === null) {\n this.clear();\n break;\n }\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var li = this.getElementByText(newProp.text);\n if (this.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 break;\n }\n this.notify('beforeValueChange', { newProp: newProp }); // gird component value type change\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var item = this.getElementByValue(newProp.value);\n if (this.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 break;\n }\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var element = this.liCollections[newProp.index];\n if (this.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 'headerTemplate':\n if (this.popupObj) {\n this.setHeaderTemplate(this.popupObj.element);\n }\n break;\n case 'valueTemplate':\n if (!isNullOrUndefined(this.itemData) && this.valueTemplate != null) {\n this.setValueTemplate();\n }\n break;\n case 'floatLabelType':\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, newProp.floatLabelType, this.placeholder, this.createElement);\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.inputElement, this.inputWrapper, null, this.createElement);\n this.bindClearEvent();\n break;\n default:\n var ddlProps = void 0;\n ddlProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, ddlProps.newProperty, ddlProps.oldProperty);\n break;\n }\n }\n };\n DropDownList.prototype.setCssClass = function (newProp, oldProp) {\n this.inputWrapper.container.classList.remove(oldProp.cssClass);\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.element.classList.remove(oldProp.cssClass);\n this.popupObj.element.classList.add(newProp.cssClass);\n }\n };\n /**\n * Return the module name.\n * @private\n */\n DropDownList.prototype.getModuleName = function () {\n return 'dropdownlist';\n };\n /**\n * Opens the popup that displays the list of items.\n * @returns void.\n */\n DropDownList.prototype.showPopup = function () {\n if (!this.enabled) {\n return;\n }\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n if (this.isFiltering() && !this.isActive && this.actionCompleteData.list && this.actionCompleteData.list[0]) {\n this.isActive = true;\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list, null, true);\n }\n else if (isNullOrUndefined(this.list) || !isUndefined(this.list) && this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.renderList();\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n var proxy_2 = this;\n window.onpopstate = function () {\n proxy_2.hidePopup();\n };\n history.pushState({}, '');\n }\n if (!isNullOrUndefined(this.list.children[0]) || this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.renderPopup();\n }\n attributes(this.targetElement(), { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n };\n /**\n * Hides the popup if it is in an open state.\n * @returns void.\n */\n DropDownList.prototype.hidePopup = function () {\n if (this.isEscapeKey && this.getModuleName() === 'dropdownlist') {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n if (!isNullOrUndefined(this.index)) {\n this.selectedLI = this.liCollections[this.index];\n this.updateSelectedItem(this.selectedLI, null, true);\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n }\n else {\n this.resetSelection();\n }\n }\n this.closePopup();\n var dataItem = this.getItemData();\n if (this.inputElement.value.trim() === '' && !this.isInteracted && (this.isSelectCustom ||\n !isNullOrUndefined(this.selectedLI) && this.inputElement.value !== dataItem.text)) {\n this.isSelectCustom = false;\n this.clear();\n }\n };\n /**\n * Sets the focus on the component for interaction.\n * @returns void.\n */\n DropDownList.prototype.focusIn = function () {\n if (!this.enabled) {\n return;\n }\n if (this.targetElement().classList.contains(dropDownListClasses.disable)) {\n return;\n }\n var isFocused = false;\n if (this.preventFocus && Browser.isDevice) {\n this.inputWrapper.container.tabIndex = 1;\n this.inputWrapper.container.focus();\n this.preventFocus = false;\n isFocused = true;\n }\n if (!isFocused) {\n this.targetElement().focus();\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n this.onFocus();\n };\n /**\n * Moves the focus from the component if the component is already focused.\n * @returns void.\n */\n DropDownList.prototype.focusOut = function () {\n if (!this.enabled) {\n return;\n }\n this.isTyped = true;\n this.hidePopup();\n this.targetElement().blur();\n removeClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n DropDownList.prototype.destroy = function () {\n var _this = this;\n this.isActive = false;\n this.hidePopup();\n this.unWireEvent();\n if (this.list) {\n this.unWireListEvents();\n }\n if (this.element && !this.element.classList.contains('e-' + this.getModuleName())) {\n return;\n }\n var attrArray = ['readonly', 'aria-disabled', 'aria-placeholder',\n 'placeholder', 'aria-owns', 'aria-labelledby', 'aria-haspopup', 'aria-expanded',\n 'aria-activedescendant', 'autocomplete', 'aria-readonly', 'autocorrect',\n 'autocapitalize', 'spellcheck', 'aria-autocomplete'];\n attrArray.forEach(function (value) {\n _this.inputElement.removeAttribute(value);\n });\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n this.inputElement.classList.remove('e-input');\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.element.style.display = 'block';\n if (this.inputWrapper.container.parentElement.tagName === this.getNgDirective()) {\n detach(this.inputWrapper.container);\n }\n else {\n this.inputWrapper.container.parentElement.insertBefore(this.element, this.inputWrapper.container);\n detach(this.inputWrapper.container);\n }\n _super.prototype.destroy.call(this);\n };\n ;\n /**\n * Gets all the list items bound on this component.\n * @returns Element[].\n */\n DropDownList.prototype.getItems = function () {\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n return this.ulElement ? _super.prototype.getItems.call(this) : null;\n };\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], DropDownList.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], DropDownList.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], DropDownList.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"showClearButton\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"focus\", void 0);\n DropDownList = __decorate([\n NotifyPropertyChanges\n ], DropDownList);\n return DropDownList;\n}(DropDownBase));\nexport { DropDownList };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Event, addClass, Browser, removeClass, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, NotifyPropertyChanges, getValue, setValue } from '@syncfusion/ej2-base';\nimport { DropDownList, dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { Search } from '../common/incremental-search';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/* tslint:disable */\nimport { Input } from '@syncfusion/ej2-inputs';\n/* tslint:enable */\nvar SPINNER_CLASS = 'e-atc-spinner-icon';\ndropDownListClasses.root = 'e-combobox';\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The ComboBox component allows the user to type a value or choose an option from the list of predefined options.\n * ```html\n * \n * ```\n * ```typescript\n * let games:ComboBox = new ComboBox();\n * games.appendTo(\"#list\");\n * ```\n */\nvar ComboBox = /** @class */ (function (_super) {\n __extends(ComboBox, _super);\n /**\n * *Constructor for creating the component\n */\n function ComboBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n /**\n * Initialize the event handler\n * @private\n */\n ComboBox.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ComboBox.prototype.wireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur, this);\n EventHandler.add(this.inputWrapper.container, 'blur', this.onBlur, this);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick, this);\n }\n EventHandler.add(this.inputElement, 'focus', this.targetFocus, this);\n if (!this.readonly) {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n }\n this.bindCommonEvent();\n };\n ComboBox.prototype.preventBlur = function (e) {\n if ((!this.allowFiltering && document.activeElement !== this.inputElement &&\n !document.activeElement.classList.contains(dropDownListClasses.input) && Browser.isDevice || !Browser.isDevice)) {\n e.preventDefault();\n }\n };\n ComboBox.prototype.targetElement = function () {\n return this.inputElement;\n };\n ComboBox.prototype.setOldText = function (text) {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n this.removeSelection();\n };\n ComboBox.prototype.setOldValue = function (value) {\n if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n this.removeSelection();\n this.setHiddenValue();\n };\n ComboBox.prototype.valueMuteChange = function (value) {\n var inputValue = isNullOrUndefined(value) ? null : value.toString();\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value, text: value, index: null }, true);\n this.activeIndex = this.index;\n var fields = this.fields;\n var dataItem = {};\n dataItem[fields.text] = isNullOrUndefined(value) ? null : value.toString();\n dataItem[fields.value] = isNullOrUndefined(value) ? null : value.toString();\n this.itemData = dataItem;\n this.item = null;\n if (this.previousValue !== this.value) {\n this.detachChangeEvent(null);\n }\n };\n ComboBox.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n var li = this.getElementByValue(this.value);\n if (li) {\n this.setSelection(li, null);\n }\n else if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var li = this.getElementByText(this.text);\n if (li) {\n this.setSelection(li, null);\n }\n else {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n ComboBox.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'aria-owns': this.element.id + '_options',\n 'role': 'combobox',\n 'aria-autocomplete': 'both',\n 'aria-labelledby': this.hiddenElement.id,\n 'aria-hasPopup': 'true',\n 'aria-expanded': 'false',\n 'aria-readonly': this.readonly.toString(),\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n };\n return ariaAttributes;\n };\n ComboBox.prototype.searchLists = function (e) {\n this.isTyped = true;\n if (this.isFiltering()) {\n _super.prototype.searchLists.call(this, e);\n if (this.filterInput.value.trim() === '') {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n }\n else {\n if (this.ulElement && this.inputElement.value === '' && this.preventAutoFill) {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n this.incrementalSearch(e);\n }\n };\n ComboBox.prototype.getNgDirective = function () {\n return 'EJS-COMBOBOX';\n };\n ComboBox.prototype.setSearchBox = function () {\n this.filterInput = this.inputElement;\n return (this.isFiltering() ? this.inputWrapper : inputObject);\n };\n ComboBox.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isSelectCustom) {\n this.removeSelection();\n }\n if (!this.preventAutoFill && this.getModuleName() === 'combobox' && this.isTyped) {\n this.inlineSearch();\n }\n };\n ComboBox.prototype.getFocusElement = function () {\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = this.list.querySelector('.' + dropDownListClasses.selected);\n var isSelected = dataItem.text === this.inputElement.value && !isNullOrUndefined(selected);\n if (isSelected) {\n return selected;\n }\n if ((Browser.isDevice && !this.isDropDownClick || !Browser.isDevice) &&\n !isNullOrUndefined(this.liCollections) && this.liCollections.length > 0) {\n var inputValue = this.inputElement.value;\n var activeItem = Search(inputValue, this.liCollections, 'StartsWith', true);\n var activeElement = activeItem.item;\n if (!isNullOrUndefined(activeElement)) {\n var count = this.getIndexByValue(activeElement.getAttribute('data-value')) - 1;\n var height = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n if (!isNaN(height) && this.getModuleName() !== 'autocomplete') {\n this.removeFocus();\n var fixedHead = this.fields.groupBy ? this.liCollections[0].offsetHeight : 0;\n this.list.scrollTop = count * height + fixedHead;\n addClass([activeElement], dropDownListClasses.focus);\n }\n }\n else {\n if (this.isSelectCustom && this.inputElement.value.trim() !== '') {\n this.removeFocus();\n this.list.scrollTop = 0;\n }\n }\n return activeElement;\n }\n else {\n return null;\n }\n };\n ComboBox.prototype.setValue = function (e) {\n if (e && e.type === 'keydown' && e.action === 'enter') {\n this.removeFillSelection();\n }\n if (this.autofill && this.getModuleName() === 'combobox' && e && e.type === 'keydown' && e.action !== 'enter') {\n this.preventAutoFill = false;\n this.inlineSearch(e);\n return false;\n }\n else {\n return _super.prototype.setValue.call(this, e);\n }\n };\n /**\n * Shows the spinner loader.\n * @returns void.\n */\n ComboBox.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = (this.getModuleName() === 'autocomplete') ? (this.inputWrapper.buttons[0] ||\n this.inputWrapper.clearButton ||\n Input.appendSpan('e-input-group-icon ' + SPINNER_CLASS, this.inputWrapper.container, this.createElement)) :\n (this.inputWrapper.buttons[0] || this.inputWrapper.clearButton);\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n }, this.createElement);\n showSpinner(this.spinnerElement);\n }\n };\n /**\n * Hides the spinner loader.\n * @returns void.\n */\n ComboBox.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n ComboBox.prototype.setAutoFill = function (activeElement, isHover) {\n if (!isHover) {\n this.setHoverList(activeElement);\n }\n if (this.autofill && !this.preventAutoFill) {\n var currentValue = this.getTextByValue(activeElement.getAttribute('data-value')).toString();\n var currentFillValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n if (this.getModuleName() === 'combobox') {\n if (!this.isSelected && this.previousValue !== currentFillValue) {\n this.updateSelectedItem(activeElement, null);\n this.isSelected = true;\n this.previousValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n }\n else {\n this.updateSelectedItem(activeElement, null, true);\n }\n }\n if (!this.isAndroidAutoFill(currentValue)) {\n this.setAutoFillSelection(currentValue);\n }\n }\n };\n ComboBox.prototype.isAndroidAutoFill = function (value) {\n if (Browser.isAndroid) {\n var currentPoints = this.getSelectionPoints();\n var prevEnd = this.prevSelectPoints.end;\n var curEnd = currentPoints.end;\n var prevStart = this.prevSelectPoints.start;\n var curStart = currentPoints.start;\n if (prevEnd !== 0 && ((prevEnd === value.length && prevStart === value.length) ||\n (prevStart > curStart && prevEnd > curEnd) || (prevEnd === curEnd && prevStart === curStart))) {\n return true;\n }\n else {\n return false;\n }\n }\n else {\n return false;\n }\n };\n ComboBox.prototype.clear = function (e, property) {\n if (isNullOrUndefined(property) || property !== 'dataSource') {\n _super.prototype.clear.call(this, e);\n }\n };\n ComboBox.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n ComboBox.prototype.inlineSearch = function (e) {\n var isKeyNavigate = (e && (e.action === 'down' || e.action === 'up' ||\n e.action === 'home' || e.action === 'end' || e.action === 'pageUp' || e.action === 'pageDown'));\n var activeElement = isKeyNavigate ? this.liCollections[this.activeIndex] : this.getFocusElement();\n if (!isNullOrUndefined(activeElement)) {\n if (!isKeyNavigate) {\n var value = this.getFormattedValue(activeElement.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.activeIndex = !isNullOrUndefined(this.activeIndex) ? this.activeIndex : null;\n }\n this.preventAutoFill = this.inputElement.value === '' ? false : this.preventAutoFill;\n this.setAutoFill(activeElement, isKeyNavigate);\n }\n else if (this.inputElement.value === '') {\n this.activeIndex = null;\n this.list.scrollTop = 0;\n var focusItem = this.list.querySelector('.' + dropDownListClasses.li);\n this.setHoverList(focusItem);\n }\n else {\n this.activeIndex = null;\n this.removeSelection();\n this.removeFocus();\n }\n };\n ComboBox.prototype.incrementalSearch = function (e) {\n this.showPopup();\n if (!isNullOrUndefined(this.listData)) {\n this.inlineSearch(e);\n e.preventDefault();\n }\n };\n ;\n ComboBox.prototype.setAutoFillSelection = function (currentValue) {\n var selection = this.getSelectionPoints();\n var value = this.inputElement.value.substr(0, selection.start);\n if (value && (value.toLowerCase() === currentValue.substr(0, selection.start).toLowerCase())) {\n var inputValue = value + currentValue.substr(value.length, currentValue.length);\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(selection.start, this.inputElement.value.length);\n }\n else {\n Input.setValue(currentValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(0, this.inputElement.value.length);\n }\n };\n ;\n ComboBox.prototype.getValueByText = function (text) {\n return _super.prototype.getValueByText.call(this, text, true, this.ignoreAccent);\n };\n ComboBox.prototype.unWireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur);\n EventHandler.remove(this.inputWrapper.container, 'blur', this.onBlur);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick);\n }\n EventHandler.remove(this.inputElement, 'focus', this.targetFocus);\n if (!this.readonly) {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n this.unBindCommonEvent();\n };\n ComboBox.prototype.setSelection = function (li, e) {\n _super.prototype.setSelection.call(this, li, e);\n if (!isNullOrUndefined(li) && !this.autofill && !this.isDropDownClick) {\n this.removeFocus();\n }\n };\n ComboBox.prototype.selectCurrentItem = function (e) {\n var li;\n if (this.isPopupOpen) {\n li = this.list.querySelector('.' + dropDownListClasses.focus);\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n }\n if (e.action === 'enter' && this.inputElement.value.trim() === '') {\n this.clear(e);\n }\n else if (this.isTyped && !this.isSelected && isNullOrUndefined(li)) {\n this.customValue();\n }\n this.hidePopup();\n };\n ComboBox.prototype.setHoverList = function (li) {\n this.removeSelection();\n if (this.isValidLI(li) && !li.classList.contains(dropDownListClasses.selected)) {\n this.removeFocus();\n li.classList.add(dropDownListClasses.focus);\n }\n };\n ;\n ComboBox.prototype.targetFocus = function (e) {\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = false;\n }\n this.onFocus();\n };\n ComboBox.prototype.dropDownClick = function (e) {\n e.preventDefault();\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = true;\n }\n _super.prototype.dropDownClick.call(this, e);\n };\n ComboBox.prototype.customValue = function () {\n var value = this.getValueByText(this.inputElement.value);\n if (!this.allowCustom && this.inputElement.value !== '') {\n this.setProperties({ value: value });\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n else if (this.inputElement.value.trim() !== '') {\n var previousValue = this.value;\n if (isNullOrUndefined(value)) {\n var value_1 = this.inputElement.value === '' ? null : this.inputElement.value;\n var fields = this.fields;\n var eventArgs = void 0;\n eventArgs = { text: value_1, item: {} };\n if (!this.initial) {\n this.trigger('customValueSpecifier', eventArgs);\n }\n var item = eventArgs.item;\n var dataItem = {};\n if (item && getValue(fields.text, item) && getValue(fields.value, item)) {\n dataItem = item;\n }\n else {\n setValue(fields.text, value_1, dataItem);\n setValue(fields.value, value_1, dataItem);\n }\n this.itemData = dataItem;\n var changeData = {\n text: getValue(fields.text, this.itemData),\n value: getValue(fields.value, this.itemData),\n index: null\n };\n this.setProperties(changeData, true);\n this.setSelection(null, null);\n this.isSelectCustom = true;\n }\n else {\n this.isSelectCustom = false;\n this.setProperties({ value: value });\n }\n if (previousValue !== this.value) {\n this.onChangeEvent(null);\n }\n }\n else if (this.allowCustom) {\n this.isSelectCustom = true;\n }\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n ComboBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n 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 if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n break;\n case 'allowCustom':\n break;\n default:\n var comboProps = void 0;\n comboProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, comboProps.newProperty, comboProps.oldProperty);\n break;\n }\n }\n };\n /**\n * To initialize the control rendering.\n * @private\n */\n ComboBox.prototype.render = function () {\n _super.prototype.render.call(this);\n this.setSearchBox();\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n };\n ;\n /**\n * Return the module name of this component.\n * @private\n */\n ComboBox.prototype.getModuleName = function () {\n return 'combobox';\n };\n /**\n * Hides the popup if it is in open state.\n * @returns void.\n */\n ComboBox.prototype.hidePopup = function () {\n var inputValue = this.inputElement.value === '' ? null : this.inputElement.value;\n if (!isNullOrUndefined(this.listData)) {\n var isEscape = this.isEscapeKey;\n if (this.isEscapeKey) {\n Input.setValue(this.typedString, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n }\n if (this.autofill) {\n this.removeFillSelection();\n }\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = this.list.querySelector('.' + dropDownListClasses.selected);\n if (dataItem.text === this.inputElement.value && !isNullOrUndefined(selected)) {\n if (this.isSelected) {\n this.onChangeEvent(null);\n this.isSelectCustom = false;\n }\n _super.prototype.hidePopup.call(this);\n return;\n }\n if (this.getModuleName() === 'combobox' && this.inputElement.value.trim() !== '') {\n var searchItem = Search(this.inputElement.value, this.liCollections, 'Equal', true);\n this.selectedLI = searchItem.item;\n if (isNullOrUndefined(searchItem.index)) {\n searchItem.index = Search(this.inputElement.value, this.liCollections, 'StartsWith', true).index;\n }\n this.activeIndex = searchItem.index;\n if (!isNullOrUndefined(this.selectedLI)) {\n this.updateSelectedItem(this.selectedLI, null, true);\n }\n else if (isEscape) {\n this.isSelectCustom = true;\n this.removeSelection();\n }\n }\n if (!this.isEscapeKey && this.isTyped && !this.isInteracted) {\n this.customValue();\n }\n }\n if (isNullOrUndefined(this.listData) && this.allowCustom && !isNullOrUndefined(inputValue) && inputValue !== this.value) {\n this.customValue();\n }\n _super.prototype.hidePopup.call(this);\n };\n /**\n * Sets the focus to the component for interaction.\n * @returns void.\n */\n ComboBox.prototype.focusIn = function () {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = true;\n }\n _super.prototype.focusIn.call(this);\n };\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"autofill\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"allowCustom\", void 0);\n __decorate([\n Property({})\n ], ComboBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"index\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"customValueSpecifier\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property('Never')\n ], ComboBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"filterBarPlaceholder\", void 0);\n ComboBox = __decorate([\n NotifyPropertyChanges\n ], ComboBox);\n return ComboBox;\n}(DropDownList));\nexport { ComboBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, EventHandler, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { Event, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, attributes, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { ComboBox } from '../combo-box/combo-box';\nimport { highlightSearch } from '../common/highlight-search';\nimport { Search } from '../common/incremental-search';\nimport { FieldSettings } from '../drop-down-base/drop-down-base';\n/* tslint:disable */\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n/* tslint:enable */\ndropDownListClasses.root = 'e-autocomplete';\ndropDownListClasses.icon = 'e-input-group-icon e-ddl-icon e-search-icon';\n/**\n * The AutoComplete component provides the matched suggestion list when type into the input,\n * from which the user can select one.\n * ```html\n * \n * ```\n * ```typescript\n * let atcObj:AutoComplete = new AutoComplete();\n * atcObj.appendTo(\"#list\");\n * ```\n */\nvar AutoComplete = /** @class */ (function (_super) {\n __extends(AutoComplete, _super);\n /**\n * * Constructor for creating the widget\n */\n function AutoComplete(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFiltered = false;\n return _this;\n }\n ;\n /**\n * Initialize the event handler\n * @private\n */\n AutoComplete.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n AutoComplete.prototype.getNgDirective = function () {\n return 'EJS-AUTOCOMPLETE';\n };\n AutoComplete.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n var filterType = (this.queryString === '' && !isNullOrUndefined(this.value)) ? 'equal' : this.filterType;\n var queryString = (this.queryString === '' && !isNullOrUndefined(this.value)) ? this.value : this.queryString;\n if (this.isFiltered) {\n return filterQuery;\n }\n if (this.queryString !== null) {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n else {\n var mapping = !isNullOrUndefined(this.fields.value) ? this.fields.value : '';\n filterQuery.where(mapping, filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n }\n if (!isNullOrUndefined(this.suggestionCount)) {\n filterQuery.take(this.suggestionCount);\n }\n return filterQuery;\n };\n AutoComplete.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.isSelectCustom = false;\n this.isDataFetched = 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.autofill && !isNullOrUndefined(this.liCollections[0])) {\n var items = [this.liCollections[0]];\n var searchItem = Search(this.inputElement.value, items, 'StartsWith', this.ignoreCase);\n if (!isNullOrUndefined(searchItem.item)) {\n _super.prototype.setAutoFill.call(this, this.liCollections[0], true);\n }\n }\n };\n AutoComplete.prototype.setSelection = function (li, e) {\n if (!this.isValidLI(li)) {\n return;\n }\n if (!isNullOrUndefined(e) && e.type === 'keydown' && e.action !== 'enter' && this.isValidLI(li)) {\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.setHoverList(li);\n this.selectedLI = li;\n this.setScrollPosition(e);\n if (this.autofill) {\n this.preventAutoFill = false;\n _super.prototype.setAutoFill.call(this, li);\n }\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n }\n else {\n _super.prototype.setSelection.call(this, li, e);\n }\n };\n AutoComplete.prototype.listOption = function (dataSource, fieldsSettings) {\n var _this = this;\n var fields = _super.prototype.listOption.call(this, dataSource, fieldsSettings);\n if (isNullOrUndefined(fields.itemCreated)) {\n fields.itemCreated = function (e) {\n if (_this.highlight) {\n highlightSearch(e.item, _this.queryString, _this.ignoreCase, _this.filterType);\n }\n };\n }\n else {\n var itemCreated_1 = fields.itemCreated;\n fields.itemCreated = function (e) {\n if (_this.highlight) {\n highlightSearch(e.item, _this.queryString, _this.ignoreCase, _this.filterType);\n }\n itemCreated_1.apply(_this, [e]);\n };\n }\n return fields;\n };\n ;\n AutoComplete.prototype.isFiltering = function () {\n return true;\n };\n AutoComplete.prototype.renderPopup = function () {\n this.list.scrollTop = 0;\n _super.prototype.renderPopup.call(this);\n };\n AutoComplete.prototype.isEditTextBox = function () {\n return true && this.inputElement.value.trim() !== '';\n };\n AutoComplete.prototype.isPopupButton = function () {\n return this.showPopupButton;\n };\n AutoComplete.prototype.isSelectFocusItem = function (element) {\n return false;\n };\n /**\n * Search the entered text and show it in the suggestion list if available.\n * @returns void.\n */\n AutoComplete.prototype.showPopup = function () {\n if (!this.enabled) {\n return;\n }\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n this.preventAutoFill = true;\n if (isNullOrUndefined(this.list)) {\n this.renderList();\n }\n else {\n this.resetList(this.dataSource, this.fields);\n }\n };\n /**\n * Hides the popup if it is in open state.\n * @returns void.\n */\n AutoComplete.prototype.hidePopup = function () {\n _super.prototype.hidePopup.call(this);\n this.activeIndex = -1;\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n AutoComplete.prototype.onPropertyChanged = function (newProp, oldProp) {\n 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, this.createElement);\n this.inputWrapper.buttons[0] = button;\n EventHandler.add(this.inputWrapper.buttons[0], 'click', this.dropDownClick, this);\n }\n else {\n detach(this.inputWrapper.buttons[0]);\n this.inputWrapper.buttons[0] = null;\n }\n break;\n default:\n var atcProps = void 0;\n atcProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, atcProps.newProperty, atcProps.oldProperty);\n break;\n }\n }\n };\n /**\n * Return the module name of this component.\n * @private\n */\n AutoComplete.prototype.getModuleName = function () {\n return 'autocomplete';\n };\n /**\n * To initialize the control rendering\n * @private\n */\n AutoComplete.prototype.render = function () {\n _super.prototype.render.call(this);\n };\n ;\n __decorate([\n Complex({ value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], AutoComplete.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], AutoComplete.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"showPopupButton\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"highlight\", void 0);\n __decorate([\n Property(20)\n ], AutoComplete.prototype, \"suggestionCount\", void 0);\n __decorate([\n Property({})\n ], AutoComplete.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"query\", void 0);\n __decorate([\n Property(1)\n ], AutoComplete.prototype, \"minLength\", void 0);\n __decorate([\n Property('Contains')\n ], AutoComplete.prototype, \"filterType\", void 0);\n __decorate([\n Event()\n ], AutoComplete.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], AutoComplete.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"text\", void 0);\n AutoComplete = __decorate([\n NotifyPropertyChanges\n ], AutoComplete);\n return AutoComplete;\n}(ComboBox));\nexport { AutoComplete };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nimport { Popup, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { attributes, setValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, extend } from '@syncfusion/ej2-base';\nimport { EventHandler, Property, Event, compile, L10n } from '@syncfusion/ej2-base';\nimport { Animation, Browser, prepend } from '@syncfusion/ej2-base';\nimport { Search } from '../common/incremental-search';\nimport { append, addClass, removeClass, setStyleAttribute, closest, detach, remove } from '@syncfusion/ej2-base';\nimport { getUniqueID, formatUnit, isNullOrUndefined, isUndefined } from '@syncfusion/ej2-base';\n/* tslint:disable */\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { createFloatLabel, removeFloating, floatLabelFocus, floatLabelBlur } from './float-label';\n/* tslint:enable */\nvar FOCUS = 'e-input-focus';\nvar DISABLED = 'e-disabled';\nvar OVER_ALL_WRAPPER = 'e-multiselect e-input-group';\nvar ELEMENT_WRAPPER = 'e-multi-select-wrapper';\nvar ELEMENT_MOBILE_WRAPPER = 'e-mob-wrapper';\nvar HIDE_LIST = 'e-hide-listitem';\nvar DELIMITER_VIEW = 'e-delim-view';\nvar CHIP_WRAPPER = 'e-chips-collection';\nvar CHIP = 'e-chips';\nvar CHIP_CONTENT = 'e-chipcontent';\nvar CHIP_CLOSE = 'e-chips-close';\nvar CHIP_SELECTED = 'e-chip-selected';\nvar SEARCHBOX_WRAPPER = 'e-searcher';\nvar DELIMITER_VIEW_WRAPPER = 'e-delimiter';\nvar ZERO_SIZE = 'e-zero-size';\nvar REMAIN_WRAPPER = 'e-remain';\nvar CLOSEICON_CLASS = 'e-chips-close e-close-hooker';\nvar DELIMITER_WRAPPER = 'e-delim-values';\nvar POPUP_WRAPPER = 'e-ddl e-popup e-multi-select-list-wrapper';\nvar INPUT_ELEMENT = 'e-dropdownbase';\nvar RTL_CLASS = 'e-rtl';\nvar CLOSE_ICON_HIDE = 'e-close-icon-hide';\nvar MOBILE_CHIP = 'e-mob-chip';\nvar FOOTER = 'e-ddl-footer';\nvar HEADER = 'e-ddl-header';\nvar DISABLE_ICON = 'e-ddl-disable-icon';\nvar SPINNER_CLASS = 'e-ms-spinner-icon';\nvar HIDDEN_ELEMENT = 'e-multi-hidden';\nvar destroy = 'destroy';\nvar dropdownIcon = 'e-input-group-icon e-ddl-icon';\nvar iconAnimation = 'e-icon-anim';\n/**\n * The Multiselect allows the user to pick a more than one value from list of predefined values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MultiSelect = /** @class */ (function (_super) {\n __extends(MultiSelect, _super);\n /**\n * Constructor for creating the DropDownList widget.\n */\n function MultiSelect(option, element) {\n var _this = _super.call(this, option, element) || this;\n _this.isValidKey = false;\n _this.selectAllEventData = [];\n _this.selectAllEventEle = [];\n _this.scrollFocusStatus = false;\n _this.keyDownStatus = false;\n return _this;\n }\n ;\n MultiSelect.prototype.enableRTL = function (state) {\n if (state) {\n this.overAllWrapper.classList.add(RTL_CLASS);\n }\n else {\n this.overAllWrapper.classList.remove(RTL_CLASS);\n }\n if (this.popupObj) {\n this.popupObj.enableRtl = state;\n this.popupObj.dataBind();\n }\n };\n MultiSelect.prototype.requiredModules = function () {\n var modules = [];\n if (this.mode === 'CheckBox') {\n this.allowCustomValue = false;\n this.hideSelectedItem = false;\n this.closePopupOnSelect = false;\n this.allowFiltering = true;\n modules.push({\n member: 'CheckBoxSelection',\n args: [this]\n });\n }\n return modules;\n };\n MultiSelect.prototype.updateHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n switch (htmlAttr) {\n case 'class':\n this.overAllWrapper.classList.add(this.htmlAttributes[htmlAttr]);\n this.popupWrapper.classList.add(this.htmlAttributes[htmlAttr]);\n break;\n case 'disabled':\n this.enable(false);\n break;\n case 'placeholder':\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n break;\n default:\n var defaultAttr = ['id'];\n var validateAttr = ['name', 'required', 'aria-required', 'form'];\n var containerAttr = ['title', 'role', 'style', 'class'];\n if (defaultAttr.indexOf(htmlAttr) > -1) {\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (containerAttr.indexOf(htmlAttr) > -1) {\n this.overAllWrapper.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n break;\n }\n }\n }\n };\n MultiSelect.prototype.updateReadonly = function (state) {\n if (state || this.mode === 'CheckBox') {\n this.inputElement.setAttribute('readonly', 'true');\n }\n else {\n this.inputElement.removeAttribute('readonly');\n }\n };\n MultiSelect.prototype.updateClearButton = function (state) {\n if (state) {\n if (this.overAllClear.parentNode) {\n this.overAllClear.style.display = '';\n }\n else {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n this.componentWrapper.classList.remove(CLOSE_ICON_HIDE);\n }\n else {\n this.overAllClear.style.display = 'none';\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n };\n MultiSelect.prototype.updateCssClass = function () {\n if (this.cssClass) {\n this.popupWrapper.classList.add(this.cssClass);\n this.overAllWrapper.classList.add(this.cssClass);\n }\n };\n MultiSelect.prototype.onPopupShown = function () {\n if (Browser.isDevice && (this.mode === 'CheckBox' && this.allowFiltering)) {\n var proxy_1 = this;\n window.onpopstate = function () {\n proxy_1.hidePopup();\n };\n history.pushState({}, '');\n }\n var animModel = { name: 'FadeIn', duration: 100 };\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.focusAtFirstListItem();\n document.body.appendChild(this.popupObj.element);\n if (this.mode === 'CheckBox') {\n addClass([this.overAllWrapper], [iconAnimation]);\n }\n this.popupObj.show(eventArgs.animation, (this.zIndex === 1000) ? this.element : null);\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n if (!this.isFirstClick) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n }\n this.isFirstClick = true;\n }\n this.refreshListItems(null);\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n }\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n };\n MultiSelect.prototype.focusAtFirstListItem = function () {\n if (this.ulElement && this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li)) {\n var element = void 0;\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n return;\n }\n else {\n element = this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li + ':not(.'\n + HIDE_LIST + ')');\n }\n if (element !== null) {\n this.removeFocus();\n this.addListFocus(element);\n }\n }\n };\n MultiSelect.prototype.focusAtLastListItem = function (data) {\n var activeElement;\n if (data) {\n activeElement = Search(data, this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n if (this.value && this.value.length) {\n Search(this.value[this.value.length - 1], this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n activeElement = null;\n }\n }\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.scrollBottom(activeElement.item, activeElement.index);\n }\n };\n MultiSelect.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-multiselectable': 'true',\n 'aria-activedescendant': 'null',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false'\n };\n return ariaAttributes;\n };\n MultiSelect.prototype.updateListARIA = function () {\n attributes(this.ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n var disableStatus = (this.inputElement.disabled) ? true : false;\n attributes(this.inputElement, this.getAriaAttributes());\n if (disableStatus) {\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n };\n MultiSelect.prototype.removelastSelection = function (e) {\n var elements;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n var value = elements[elements.length - 1].getAttribute('data-value');\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n this.removeValue(value, e);\n this.removeChipSelection();\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n if (this.mainList && this.listData) {\n 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.getForQuery = function (valuecheck) {\n var predicate;\n var field = isNullOrUndefined(this.fields.value) ? this.fields.text : this.fields.value;\n for (var i = 0; i < valuecheck.length; i++) {\n if (i === 0) {\n predicate = new Predicate(field, 'equal', valuecheck[i]);\n }\n else {\n predicate = predicate.or(field, 'equal', valuecheck[i]);\n }\n }\n return new Query().where(predicate);\n };\n MultiSelect.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n var proxy = this;\n var valuecheck = [];\n if (!isNullOrUndefined(this.value)) {\n for (var i = 0; i < this.value.length; i++) {\n var checkEle = ulElement.querySelector('li[data-value=\"' + proxy.value[i] + '\"]');\n if (!checkEle) {\n valuecheck.push(proxy.value[i]);\n }\n }\n }\n if (valuecheck.length > 0 && this.dataSource instanceof DataManager && !isNullOrUndefined(this.value)) {\n this.dataSource.executeQuery(this.getForQuery(valuecheck)).then(function (e) {\n proxy.addItem(e.result, list.length);\n proxy.updateActionList(ulElement, list, e);\n });\n }\n else {\n this.updateActionList(ulElement, list, e);\n }\n };\n MultiSelect.prototype.updateActionList = function (ulElement, list, e, isUpdated) {\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n if (!this.mainList && !this.mainData) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.mainData = list;\n this.mainListCollection = this.liCollections;\n }\n else if (!isNullOrUndefined(this.mainData) && this.mainData.length === 0) {\n this.mainData = list;\n }\n if ((this.remoteCustomValue || list.length <= 0) && this.allowCustomValue && this.inputFocus && this.allowFiltering) {\n this.checkForCustomValue(this.tempQuery, this.fields);\n return;\n }\n if (this.value && this.value.length && ((this.mode !== 'CheckBox' && this.inputElement.value !== '') ||\n this.mode === 'CheckBox')) {\n this.refreshSelection();\n }\n this.updateListARIA();\n this.unwireListEvents();\n this.wireListEvents();\n if (!isNullOrUndefined(this.setInitialValue)) {\n this.setInitialValue();\n }\n if (!isNullOrUndefined(this.selectAllAction)) {\n this.selectAllAction();\n }\n if (this.setDynValue) {\n this.initialValueUpdate();\n this.initialUpdate();\n this.refreshPlaceHolder();\n this.updateValueState(null, this.value, null);\n }\n this.renderPopup();\n if (this.beforePopupOpen) {\n this.beforePopupOpen = false;\n this.onPopupShown();\n }\n };\n MultiSelect.prototype.refreshSelection = function () {\n var value;\n var element;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n value = this.value[index];\n element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n if (element) {\n addClass([element], className);\n if (this.hideSelectedItem && element.previousSibling\n && element.previousElementSibling.classList.contains(dropDownBaseClasses.group)\n && (!element.nextElementSibling ||\n element.nextElementSibling.classList.contains(dropDownBaseClasses.group))) {\n addClass([element.previousElementSibling], className);\n }\n if (this.hideSelectedItem && this.fields.groupBy && !element.previousElementSibling.classList.contains(HIDE_LIST)) {\n this.hideGroupItem(value);\n }\n if (this.hideSelectedItem && element.classList.contains(dropDownBaseClasses.focus)) {\n removeClass([element], dropDownBaseClasses.focus);\n var listEle = element.parentElement.querySelectorAll('.' +\n dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')');\n if (listEle.length > 0) {\n addClass([listEle[0]], dropDownBaseClasses.focus);\n }\n else {\n this.ulElement = this.ulElement.cloneNode ? this.ulElement.cloneNode(true) : this.ulElement;\n this.l10nUpdate();\n addClass([this.list], dropDownBaseClasses.noData);\n }\n }\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox' && element.classList.contains('e-active')) {\n var ariaValue = element.firstElementChild.getAttribute('aria-checked');\n if (isNullOrUndefined(ariaValue) || ariaValue === 'false') {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n li: element,\n e: null\n };\n this.notify('updatelist', args);\n }\n }\n }\n }\n }\n this.checkSelectAll();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.hideGroupItem = function (value) {\n var element;\n var element1;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n element1 = element = this.ulElement.querySelector('li[data-value=\"' + value + '\"]');\n var i = 0;\n var j = 0;\n var temp = true;\n var temp1 = true;\n do {\n if (element && element.previousElementSibling\n && (!element.previousElementSibling.classList.contains(HIDE_LIST) &&\n element.previousElementSibling.classList.contains(dropDownBaseClasses.li))) {\n temp = false;\n }\n if (!temp || !element || (element.previousElementSibling\n && element.previousElementSibling.classList.contains(dropDownBaseClasses.group))) {\n i = 10;\n }\n else {\n element = element.previousElementSibling;\n }\n if (element1 && element1.nextElementSibling\n && (!element1.nextElementSibling.classList.contains(HIDE_LIST) &&\n element1.nextElementSibling.classList.contains(dropDownBaseClasses.li))) {\n temp1 = false;\n }\n if (!temp1 || !element1 || (element1.nextElementSibling\n && element1.nextElementSibling.classList.contains(dropDownBaseClasses.group))) {\n j = 10;\n }\n else {\n element1 = element1.nextElementSibling;\n }\n } while (i < 10 || j < 10);\n if (temp && temp1 && !element.previousElementSibling.classList.contains(HIDE_LIST)) {\n addClass([element.previousElementSibling], className);\n }\n else if (temp && temp1 && element.previousElementSibling.classList.contains(HIDE_LIST)) {\n removeClass([element.previousElementSibling], className);\n }\n };\n MultiSelect.prototype.checkSelectAll = function () {\n var searchCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.li).length;\n var searchActiveCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.selected).length;\n if ((searchCount === searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'check' });\n }\n if ((searchCount !== searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n };\n MultiSelect.prototype.openClick = function (e) {\n if (!this.openOnClick && this.mode !== 'CheckBox') {\n if (this.targetElement() !== '') {\n this.showPopup();\n }\n else {\n this.hidePopup();\n }\n }\n else if (!this.openOnClick && this.mode === 'CheckBox' && !this.isPopupOpen()) {\n this.showPopup();\n }\n };\n MultiSelect.prototype.KeyUp = function (e) {\n var _this = this;\n if (this.mode === 'CheckBox' && !this.openOnClick) {\n var char = String.fromCharCode(e.keyCode);\n var isWordCharacter = char.match(/\\w/);\n if (!isNullOrUndefined(isWordCharacter)) {\n this.isValidKey = true;\n }\n }\n this.isValidKey = (this.isPopupOpen() && e.keyCode === 8) || this.isValidKey;\n if (this.isValidKey) {\n this.isValidKey = false;\n this.expandTextbox();\n this.showOverAllClear();\n switch (e.keyCode) {\n default:\n if (!this.isPopupOpen() && this.openOnClick) {\n this.showPopup();\n }\n this.openClick(e);\n if (this.checkTextLength() && !this.allowFiltering && (e.keyCode !== 8)) {\n this.focusAtFirstListItem();\n }\n else {\n var text = this.targetElement();\n this.keyCode = e.keyCode;\n if (this.allowFiltering) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.targetElement(),\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isFiltered = true;\n _this.remoteFilterAction = true;\n _this.dataUpdater(dataSource, query, fields);\n },\n event: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1);\n if (eventArgs_1.cancel) {\n return;\n }\n if (!this.isFiltered && !eventArgs_1.preventDefaultAction) {\n this.filterAction = true;\n this.dataUpdater(this.dataSource, null, this.fields);\n }\n }\n else if (this.allowCustomValue) {\n var query = new Query();\n query = (text !== '') ? query.where(this.fields.text, 'startswith', text, this.ignoreCase, this.ignoreAccent) : query;\n this.dataUpdater(this.mainData, query, this.fields);\n break;\n }\n else {\n var liCollections = void 0;\n liCollections = this.list.querySelectorAll('li.' + dropDownBaseClasses.li + ':not(.e-hide-listitem)');\n var activeElement = Search(this.targetElement(), liCollections, 'StartsWith', this.ignoreCase);\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.list.scrollTop =\n activeElement.item.offsetHeight * activeElement.index;\n }\n else if (this.targetElement() !== '') {\n this.removeFocus();\n }\n else {\n this.focusAtFirstListItem();\n }\n }\n }\n }\n }\n };\n MultiSelect.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n if (this.filterAction) {\n if (this.targetElement() !== null) {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', 'startswith', this.targetElement(), this.ignoreCase, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.targetElement(), this.ignoreCase, this.ignoreAccent);\n }\n }\n return filterQuery;\n }\n else {\n return query ? query : this.query ? this.query : new Query();\n }\n };\n MultiSelect.prototype.dataUpdater = function (dataSource, query, fields) {\n this.isDataFetched = false;\n if (this.targetElement().trim() === '') {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n if (this.backCommand) {\n this.remoteCustomValue = false;\n this.onActionComplete(list, this.mainData);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n if (this.keyCode !== 8) {\n this.focusAtFirstListItem();\n }\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n }\n }\n else {\n this.resetList(dataSource, fields, query);\n if (this.allowCustomValue) {\n if (!(dataSource instanceof DataManager)) {\n this.checkForCustomValue(query, fields);\n }\n else {\n this.remoteCustomValue = true;\n this.tempQuery = query;\n }\n }\n }\n this.refreshPopup();\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n }\n };\n MultiSelect.prototype.checkForCustomValue = function (query, fields) {\n var dataChecks = !this.getValueByText(this.inputElement.value, this.ignoreCase);\n if (this.allowCustomValue && dataChecks) {\n var value = this.inputElement.value;\n var customData = (!isNullOrUndefined(this.mainData) && this.mainData.length > 0) ?\n this.mainData[0] : this.mainData;\n if (typeof (customData) !== 'string') {\n var dataItem = {};\n setValue(fields.text, value, dataItem);\n setValue(fields.value, value, dataItem);\n var tempData = JSON.parse(JSON.stringify(this.listData));\n tempData.splice(0, 0, dataItem);\n this.resetList(tempData, fields ? fields : this.fields, query);\n }\n else {\n var tempData = [this.inputElement.value];\n this.resetList(tempData, fields ? fields : this.fields);\n }\n }\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.getNgDirective = function () {\n return 'EJS-MULTISELECT';\n };\n MultiSelect.prototype.wrapperClick = function (e) {\n this.setDynValue = false;\n if (this.readonly || !this.enabled) {\n return;\n }\n if (e.target === this.overAllClear) {\n e.preventDefault();\n return;\n }\n if (!this.inputFocus && this.mode !== 'CheckBox') {\n this.dispatchEvent(this.inputElement, 'focus');\n }\n if (!this.inputFocus && this.mode === 'CheckBox') {\n this.focusIn();\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.showOverAllClear();\n this.inputFocus = true;\n if (!this.overAllWrapper.classList.contains(FOCUS)) {\n this.overAllWrapper.classList.add(FOCUS);\n }\n }\n }\n e.preventDefault();\n };\n MultiSelect.prototype.enable = function (state) {\n if (state) {\n this.overAllWrapper.classList.remove(DISABLED);\n this.inputElement.removeAttribute('disabled');\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n }\n else {\n this.overAllWrapper.classList.add(DISABLED);\n this.inputElement.setAttribute('disabled', 'true');\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n if (this.enabled !== state) {\n this.enabled = state;\n }\n this.hidePopup();\n };\n MultiSelect.prototype.onBlur = function (eve) {\n var target;\n if (!isNullOrUndefined(eve)) {\n target = eve.relatedTarget;\n }\n if (this.popupObj && document.body.contains(this.popupObj.element) && this.popupObj.element.contains(target)) {\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n }\n if (this.mode === 'CheckBox' && Browser.isIE && !isNullOrUndefined(eve)) {\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n return;\n }\n if (this.scrollFocusStatus) {\n 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.initStatus && this.validateValues(newValue, oldValue)) {\n var eventArgs = {\n e: event,\n oldValue: oldVal,\n value: newVal,\n isInteracted: event ? true : false,\n element: this.element\n };\n this.trigger('change', eventArgs);\n }\n };\n MultiSelect.prototype.getPagingCount = function () {\n var height = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.offsetHeight / parseInt(height, 10));\n };\n MultiSelect.prototype.pageUpSelection = function (steps) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var previousItem;\n previousItem = steps >= 0 ? collection[steps + 1] : collection[0];\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n ;\n MultiSelect.prototype.pageDownSelection = function (steps) {\n var list = this.getItems();\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var previousItem;\n previousItem = steps <= collection.length ? collection[steps - 1] : collection[collection.length - 1];\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n MultiSelect.prototype.getItems = function () {\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n return this.ulElement ? this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')') : null;\n };\n MultiSelect.prototype.focusIn = function () {\n if (this.enabled && !this.readonly) {\n this.showOverAllClear();\n this.inputFocus = true;\n if (!this.value) {\n this.tempValues = this.value;\n }\n else {\n this.tempValues = this.value.slice();\n }\n if (this.value && this.value.length) {\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n if (this.mode !== 'CheckBox') {\n this.viewWrapper.style.display = 'none';\n }\n }\n if (this.mode !== 'CheckBox') {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n if (this.focused) {\n this.inputElement.focus();\n 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 }\n };\n MultiSelect.prototype.checkTextLength = function () {\n return this.targetElement().length < 1;\n };\n MultiSelect.prototype.popupKeyActions = function (keyCode) {\n switch (keyCode) {\n case 38:\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n break;\n case 40:\n if (!this.isPopupOpen()) {\n this.showPopup();\n }\n break;\n }\n };\n MultiSelect.prototype.updateAriaAttribute = function () {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (!isNullOrUndefined(focusedItem)) {\n this.inputElement.setAttribute('aria-activedescendant', focusedItem.id);\n }\n };\n MultiSelect.prototype.onKeyDown = function (e) {\n if (this.readonly || !this.enabled && this.mode !== 'CheckBox') {\n return;\n }\n this.keyDownStatus = true;\n if (e.keyCode > 111 && e.keyCode < 124) {\n return;\n }\n if (e.altKey) {\n this.popupKeyActions(e.keyCode);\n e.preventDefault();\n return;\n }\n else if (this.isPopupOpen()) {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n var activeIndex = void 0;\n switch (e.keyCode) {\n case 36:\n case 35: break;\n case 33:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageUpSelection(activeIndex - this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 34:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageDownSelection(activeIndex + this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 38:\n this.arrowUp(e);\n break;\n case 40:\n this.arrowDown(e);\n break;\n case 27:\n e.preventDefault();\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n case 13:\n e.preventDefault();\n if (this.mode !== 'CheckBox') {\n this.selectByKey(e);\n }\n return;\n case 32:\n this.spaceKeySelection(e);\n return;\n case 9:\n e.preventDefault();\n this.hidePopup();\n this.inputElement.focus();\n this.overAllWrapper.classList.add(FOCUS);\n }\n }\n else {\n switch (e.keyCode) {\n case 13:\n case 9:\n case 16:\n case 17:\n case 20:\n return;\n case 40:\n if (this.openOnClick) {\n this.showPopup();\n }\n break;\n case 27:\n e.preventDefault();\n this.escapeAction();\n return;\n }\n }\n if (this.checkTextLength()) {\n this.keyNavigation(e);\n }\n if (this.mode === 'CheckBox' && this.enableSelectionOrder) {\n this.checkBackCommand(e);\n }\n this.expandTextbox();\n this.refreshPopup();\n };\n MultiSelect.prototype.arrowDown = function (e) {\n e.preventDefault();\n this.moveByList(1);\n this.keyAction = true;\n if (document.activeElement.classList.contains('e-input-filter')) {\n this.list.focus();\n EventHandler.add(this.list, 'keydown', this.onKeyDown, this);\n }\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.arrowUp = function (e) {\n e.preventDefault();\n this.keyAction = true;\n var list = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var focuseElem = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var index = Array.prototype.slice.call(list).indexOf(focuseElem);\n if (index <= 0) {\n this.keyAction = false;\n this.notify('inputFocus', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'focus' });\n }\n else {\n this.list.focus();\n }\n this.moveByList(-1);\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.spaceKeySelection = function (e) {\n if (this.mode === 'CheckBox') {\n if (!document.activeElement.classList.contains('e-input-filter')) {\n e.preventDefault();\n this.keyAction = true;\n this.list.focus();\n }\n this.selectByKey(e);\n }\n };\n MultiSelect.prototype.checkBackCommand = function (e) {\n if (e.keyCode === 8 && this.targetElement() === '') {\n this.backCommand = false;\n }\n else {\n this.backCommand = true;\n }\n };\n MultiSelect.prototype.keyNavigation = function (e) {\n if ((this.mode !== 'Delimiter' && this.mode !== 'CheckBox') && this.value && this.value.length) {\n switch (e.keyCode) {\n case 37://left arrow \n e.preventDefault();\n this.moveBy(-1, e);\n break;\n case 39://right arrow \n e.preventDefault();\n this.moveBy(1, e);\n break;\n case 8:\n this.removelastSelection(e);\n break;\n case 46://del\n this.removeSelectedChip(e);\n break;\n }\n }\n else if (e.keyCode === 8 && this.mode === 'Delimiter') {\n if (this.value && this.value.length) {\n e.preventDefault();\n var temp = this.value[this.value.length - 1];\n this.removeValue(temp, e);\n this.updateDelimeter(this.delimiterChar);\n this.focusAtLastListItem(temp);\n }\n }\n };\n MultiSelect.prototype.selectByKey = function (e) {\n this.removeChipSelection();\n this.selectListByKey(e);\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n };\n MultiSelect.prototype.escapeAction = function () {\n var temp = this.tempValues ? this.tempValues.slice() : [];\n if (this.value && this.validateValues(this.value, temp)) {\n this.value = temp;\n this.initialValueUpdate();\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n this.refreshPlaceHolder();\n if (this.value.length) {\n this.showOverAllClear();\n }\n else {\n this.hideOverAllClear();\n }\n }\n this.makeTextBoxEmpty();\n };\n MultiSelect.prototype.scrollBottom = function (selectedLI, activeIndex) {\n var currentOffset = this.list.offsetHeight;\n var nextBottom = selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop);\n boxRange = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset) {\n this.list.scrollTop = nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n };\n MultiSelect.prototype.scrollTop = function (selectedLI, activeIndex) {\n var nextOffset = selectedLI.offsetTop - this.list.scrollTop;\n var nextBottom = selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop);\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = selectedLI.offsetTop - (this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.offsetHeight : 0);\n }\n };\n MultiSelect.prototype.selectListByKey = function (e) {\n var li = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (li !== null) {\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (this.isValidLI(li) && limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.addListFocus(li);\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.makeTextBoxEmpty();\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(li.textContent);\n }\n this.refreshPopup();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshListItems = function (data) {\n if ((this.allowFiltering || this.allowCustomValue) && this.mainList && this.listData) {\n var list = void 0;\n if (this.sortOrder === 'Descending' || this.sortOrder === 'Ascending') {\n list = this.ulElement.cloneNode ? this.ulElement.cloneNode(true) : this.ulElement;\n }\n else {\n list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n }\n this.onActionComplete(list, this.mainData);\n this.focusAtLastListItem(data);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n }\n };\n MultiSelect.prototype.removeSelectedChip = function (e) {\n var selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n var temp;\n if (selectedElem !== null) {\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n temp = selectedElem.nextElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp, e);\n }\n this.removeValue(selectedElem.getAttribute('data-value'), e);\n this.makeTextBoxEmpty();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n };\n MultiSelect.prototype.moveByTop = function (state) {\n var elements = this.list.querySelectorAll('li.' + dropDownBaseClasses.li);\n var index;\n if (elements.length > 1) {\n this.removeFocus();\n index = state ? 0 : (elements.length - 1);\n this.addListFocus(elements[index]);\n this.scrollBottom(elements[index], index);\n }\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.moveByList = function (position) {\n if (this.list) {\n var elements = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var selectedElem = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var temp = -1;\n if (elements.length) {\n for (var index = 0; index < elements.length; index++) {\n if (elements[index] === selectedElem) {\n temp = index;\n break;\n }\n }\n if (position > 0) {\n if (temp < (elements.length - 1)) {\n this.removeFocus();\n this.addListFocus(elements[++temp]);\n this.scrollBottom(elements[temp], temp);\n }\n }\n else {\n if (temp > 0) {\n this.removeFocus();\n this.addListFocus(elements[--temp]);\n this.scrollTop(elements[temp], temp);\n }\n }\n }\n }\n };\n MultiSelect.prototype.moveBy = function (position, e) {\n var elements;\n var selectedElem;\n var temp;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n if (selectedElem === null) {\n if (position < 0) {\n this.addChipSelection(elements[elements.length - 1], e);\n }\n }\n else {\n if (position < 0) {\n temp = selectedElem.previousElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp, e);\n }\n }\n else {\n temp = selectedElem.nextElementSibling;\n this.removeChipSelection();\n if (temp !== null) {\n this.addChipSelection(temp, e);\n }\n }\n }\n };\n MultiSelect.prototype.chipClick = function (e) {\n if (this.enabled) {\n var elem = closest(e.target, '.' + CHIP);\n this.removeChipSelection();\n this.addChipSelection(elem, e);\n }\n };\n MultiSelect.prototype.removeChipSelection = function () {\n if (this.chipCollectionWrapper) {\n this.removeChipFocus();\n }\n };\n MultiSelect.prototype.addChipSelection = function (element, e) {\n addClass([element], CHIP_SELECTED);\n this.trigger('chipSelection', e);\n };\n MultiSelect.prototype.onChipRemove = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n if (this.enabled && !this.readonly) {\n var element = e.target.parentElement;\n var 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 if (isNullOrUndefined(this.list.querySelector('li[data-value=\"' + value + '\"]')) && this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n }\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.makeTextBoxEmpty = function () {\n this.inputElement.value = '';\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshPlaceHolder = function () {\n if (this.placeholder && this.floatLabelType === 'Never') {\n if (this.value && this.value.length) {\n this.inputElement.placeholder = '';\n }\n else {\n this.inputElement.placeholder = this.placeholder;\n }\n }\n else {\n this.setFloatLabelType();\n }\n this.expandTextbox();\n };\n MultiSelect.prototype.removeValue = function (value, eve, length) {\n var index = this.value.indexOf(this.getFormattedValue(value));\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (index !== -1) {\n var element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n var val = this.getDataByValue(value);\n var eventArgs = {\n e: eve,\n item: element,\n itemData: val,\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('removing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.value.splice(index, 1);\n this.setProperties({ value: [].concat([], this.value) }, true);\n if (element !== null) {\n 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 if (this.hideSelectedItem && this.fields.groupBy) {\n this.hideGroupItem(value);\n }\n this.updateMainList(true, value);\n this.removeChip(value);\n this.updateChipStatus();\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit < this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n removeClass(collection, 'e-disable');\n }\n this.trigger('removed', eventArgs);\n if (length) {\n this.selectAllEventData.push(val);\n this.selectAllEventEle.push(element);\n }\n if (length === 1) {\n var args = {\n event: eve,\n items: this.selectAllEventEle,\n itemData: this.selectAllEventData,\n isInteracted: eve ? true : false,\n isChecked: false\n };\n this.trigger('selectedAll', args);\n this.selectAllEventData = [];\n this.selectAllEventEle = [];\n }\n }\n };\n MultiSelect.prototype.updateMainList = function (state, value) {\n if (this.allowFiltering) {\n var element2 = this.mainList.querySelector('li[data-value=\"' + value + '\"]');\n if (element2) {\n if (state) {\n element2.setAttribute('aria-selected', 'false');\n removeClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n else {\n element2.setAttribute('aria-selected', 'true');\n addClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'true');\n addClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n }\n }\n };\n MultiSelect.prototype.removeChip = function (value) {\n if (this.chipCollectionWrapper) {\n var element = this.chipCollectionWrapper.querySelector('span[data-value=\"' + value + '\"]');\n if (element) {\n remove(element);\n }\n }\n };\n MultiSelect.prototype.updateChipStatus = function () {\n if (this.value.length) {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n (this.chipCollectionWrapper.style.display = '');\n }\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n this.showOverAllClear();\n }\n else {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(this.delimiterWrapper)) {\n (this.delimiterWrapper.style.display = 'none');\n }\n this.hideOverAllClear();\n }\n };\n MultiSelect.prototype.addValue = function (value, text, eve) {\n if (!this.value) {\n this.value = [];\n }\n this.setProperties({ value: [].concat([], this.value, [value]) }, true);\n var element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n this.removeFocus();\n if (element) {\n this.addListFocus(element);\n this.addListSelection(element);\n }\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.addChip(text, value, eve);\n }\n if (this.hideSelectedItem && this.fields.groupBy) {\n this.hideGroupItem(value);\n }\n this.updateChipStatus();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.checkMaxSelection = function () {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit === this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n addClass(collection, 'e-disable');\n }\n };\n MultiSelect.prototype.dispatchSelect = function (value, eve, element, isNotTrigger, length) {\n if (this.initStatus && !isNotTrigger) {\n var val = this.getDataByValue(value);\n var eventArgs = {\n e: eve,\n item: element,\n itemData: val,\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n return true;\n }\n if (length) {\n this.selectAllEventData.push(val);\n this.selectAllEventEle.push(element);\n }\n if (length === 1) {\n var args = {\n event: eve,\n items: this.selectAllEventEle,\n itemData: this.selectAllEventData,\n isInteracted: eve ? true : false,\n isChecked: true\n };\n this.trigger('selectedAll', args);\n this.selectAllEventData = [];\n }\n }\n return false;\n };\n MultiSelect.prototype.addChip = function (text, value, e) {\n if (this.chipCollectionWrapper) {\n var item = this.getChip(text, value, e);\n if (item.cancel) {\n return;\n }\n this.chipCollectionWrapper.appendChild(item.element);\n }\n };\n MultiSelect.prototype.removeChipFocus = function () {\n var elements;\n var closeElements;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n closeElements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP_CLOSE.split(' ')[0]);\n removeClass(elements, CHIP_SELECTED);\n if (Browser.isDevice) {\n for (var index = 0; index < closeElements.length; index++) {\n closeElements[index].style.display = 'none';\n }\n }\n };\n MultiSelect.prototype.onMobileChipInteraction = function (e) {\n var chipElem = closest(e.target, '.' + CHIP);\n var chipClose = chipElem.querySelector('span.' + CHIP_CLOSE.split(' ')[0]);\n if (this.enabled && !this.readonly) {\n if (!chipElem.classList.contains(CHIP_SELECTED)) {\n this.removeChipFocus();\n chipClose.style.display = '';\n chipElem.classList.add(CHIP_SELECTED);\n }\n this.refreshPopup();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.getChip = function (data, value, e) {\n var itemData = { text: value, value: value };\n var chip = this.createElement('span', {\n className: CHIP,\n attrs: { 'data-value': value, 'title': data }\n });\n var chipContent = this.createElement('span', { className: CHIP_CONTENT });\n var chipClose = this.createElement('span', { className: CHIP_CLOSE });\n if (this.mainData) {\n itemData = this.getDataByValue(value);\n }\n if (this.valueTemplate && !isNullOrUndefined(itemData)) {\n var compiledString = compile(this.valueTemplate);\n for (var _i = 0, _a = compiledString(itemData); _i < _a.length; _i++) {\n var item = _a[_i];\n chipContent.appendChild(item);\n }\n }\n else {\n chipContent.innerHTML = data;\n }\n chip.appendChild(chipContent);\n var eventArgs = {\n isInteracted: e ? true : false,\n itemData: itemData,\n e: e,\n setClass: function (classes) {\n addClass([chip], classes);\n },\n cancel: false\n };\n this.trigger('tagging', eventArgs);\n if (eventArgs.cancel) {\n return { cancel: true, element: chip };\n }\n if (Browser.isDevice) {\n chip.classList.add(MOBILE_CHIP);\n append([chipClose], chip);\n chipClose.style.display = 'none';\n EventHandler.add(chip, 'click', this.onMobileChipInteraction, this);\n }\n else {\n EventHandler.add(chip, 'mousedown', this.chipClick, this);\n if (this.showClearButton) {\n chip.appendChild(chipClose);\n }\n }\n EventHandler.add(chipClose, 'mousedown', this.onChipRemove, this);\n return { cancel: false, element: chip };\n };\n MultiSelect.prototype.calcPopupWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = (this.componentWrapper.offsetWidth) * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n MultiSelect.prototype.mouseIn = function () {\n if (this.enabled && !this.readonly) {\n this.showOverAllClear();\n }\n };\n MultiSelect.prototype.mouseOut = function () {\n if (!this.inputFocus) {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var fieldProperty = fields.properties;\n this.listCurrentOptions = (fields.text !== null || fields.value !== null) ? {\n fields: fieldProperty, showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n extend(this.listCurrentOptions, this.listCurrentOptions, fields, true);\n if (this.mode === 'CheckBox') {\n this.notify('listoption', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', dataSource: dataSource, fieldProperty: fieldProperty });\n }\n return this.listCurrentOptions;\n };\n MultiSelect.prototype.renderPopup = function () {\n var _this = this;\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n if (!this.popupObj) {\n var args = { cancel: false };\n this.trigger('beforeOpen', args);\n if (args.cancel) {\n return;\n }\n document.body.appendChild(this.popupWrapper);\n var overAllHeight = parseInt(this.popupHeight, 10);\n this.popupWrapper.style.visibility = 'hidden';\n if (this.headerTemplate) {\n this.setHeaderTemplate();\n overAllHeight -= this.header.offsetHeight;\n }\n append([this.list], this.popupWrapper);\n if (this.footerTemplate) {\n this.setFooterTemplate();\n overAllHeight -= this.footer.offsetHeight;\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight -= this.selectAllHeight;\n }\n else if (this.mode === 'CheckBox' && !this.showSelectAll && (!this.headerTemplate || !this.footerTemplate)) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n }\n else if (this.mode === 'CheckBox' && !this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n if (this.headerTemplate && this.header) {\n overAllHeight -= this.header.offsetHeight;\n }\n if (this.footerTemplate && this.footer) {\n overAllHeight -= this.footer.offsetHeight;\n }\n }\n if (this.mode === 'CheckBox') {\n var args_1 = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n popupElement: this.popupWrapper\n };\n this.notify('searchBox', args_1);\n overAllHeight -= this.searchBoxHeight;\n addClass([this.popupWrapper], 'e-checkbox');\n }\n if (this.popupHeight !== 'auto') {\n this.list.style.maxHeight = formatUnit(overAllHeight);\n this.popupWrapper.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n this.list.style.maxHeight = formatUnit(this.popupHeight);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.calcPopupWidth(), targetType: 'relative', position: { X: 'left', Y: 'bottom' },\n relateTo: this.overAllWrapper, collision: { X: 'flip', Y: 'flip' }, offsetY: 1,\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n close: function () {\n if (_this.popupObj.element.parentElement) {\n detach(_this.popupObj.element);\n }\n },\n open: function () {\n _this.notify('inputFocus', { module: 'CheckBoxSelection', enable: _this.mode === 'CheckBox', value: 'focus' });\n }\n });\n this.popupObj.close();\n this.popupWrapper.style.visibility = '';\n if (this.mode === 'CheckBox' && Browser.isDevice) {\n this.notify('deviceSearchBox', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n }\n };\n MultiSelect.prototype.setHeaderTemplate = function () {\n var compiledString;\n if (this.header) {\n this.header.remove();\n }\n this.header = this.createElement('div');\n addClass([this.header], HEADER);\n compiledString = compile(this.headerTemplate);\n var elements = compiledString({});\n for (var temp = 0; temp < elements.length; temp++) {\n this.header.appendChild(elements[temp]);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n prepend([this.header], this.popupWrapper);\n }\n else {\n append([this.header], this.popupWrapper);\n }\n EventHandler.add(this.header, 'mousedown', this.onListMouseDown, this);\n };\n MultiSelect.prototype.setFooterTemplate = function () {\n var compiledString;\n if (this.footer) {\n this.footer.remove();\n }\n this.footer = this.createElement('div');\n addClass([this.footer], FOOTER);\n compiledString = compile(this.footerTemplate);\n var elements = compiledString({});\n for (var temp = 0; temp < elements.length; temp++) {\n this.footer.appendChild(elements[temp]);\n }\n append([this.footer], this.popupWrapper);\n EventHandler.add(this.footer, 'mousedown', this.onListMouseDown, this);\n };\n MultiSelect.prototype.ClearAll = function (e) {\n if (this.enabled && !this.readonly) {\n var temp = void 0;\n var tempValues = this.value ? this.value.slice() : [];\n if (this.value) {\n for (temp = this.value[0]; this.value.length !== 0; temp = this.value[0]) {\n this.removeValue(temp, e);\n }\n }\n if (this.mainList && this.listData && this.allowFiltering) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n }\n this.focusAtFirstListItem();\n this.updateDelimeter(this.delimiterChar);\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.makeTextBoxEmpty();\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n if (!this.inputFocus) {\n this.updateValueState(e, this.value, tempValues);\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n }\n if (this.mode === 'CheckBox') {\n this.refreshPlaceHolder();\n this.refreshInputHight();\n }\n e.preventDefault();\n }\n };\n MultiSelect.prototype.windowResize = function () {\n this.refreshPopup();\n if (!this.inputFocus && this.viewWrapper && this.viewWrapper.parentElement) {\n this.updateDelimView();\n }\n };\n MultiSelect.prototype.resetValueHandler = function () {\n this.value = null;\n };\n MultiSelect.prototype.wireEvent = function () {\n EventHandler.add(this.componentWrapper, 'mousedown', this.wrapperClick, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n EventHandler.add(this.inputElement, 'focus', this.focusIn, this);\n EventHandler.add(this.inputElement, 'keydown', this.onKeyDown, this);\n EventHandler.add(this.inputElement, 'keyup', this.KeyUp, this);\n if (this.mode !== 'CheckBox') {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n }\n EventHandler.add(this.inputElement, 'blur', this.onBlur, this);\n EventHandler.add(this.componentWrapper, 'mousemove', this.mouseIn, this);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n }\n EventHandler.add(this.componentWrapper, 'mouseout', this.mouseOut, this);\n EventHandler.add(this.overAllClear, 'mouseup', this.ClearAll, this);\n };\n MultiSelect.prototype.onInput = function () {\n if (this.keyDownStatus) {\n this.isValidKey = true;\n }\n else {\n this.isValidKey = false;\n }\n this.keyDownStatus = false;\n };\n MultiSelect.prototype.preRender = function () {\n this.initializeData();\n _super.prototype.preRender.call(this);\n };\n MultiSelect.prototype.initializeData = function () {\n this.mainListCollection = [];\n this.beforePopupOpen = false;\n this.filterAction = false;\n this.remoteFilterAction = false;\n this.isFirstClick = false;\n this.mobFilter = true;\n this.isFiltered = false;\n this.focused = true;\n this.initial = true;\n this.backCommand = true;\n };\n MultiSelect.prototype.updateData = function (delimiterChar) {\n var data = '';\n var delim = this.mode === 'Delimiter' || this.mode === 'CheckBox';\n var text = [];\n var temp;\n var tempData = this.listData;\n this.listData = this.mainData;\n this.hiddenElement.innerHTML = '';\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n if (this.listData) {\n temp = this.getTextByValue(this.value[index]);\n }\n else {\n temp = this.value[index];\n }\n data += temp + delimiterChar + ' ';\n text.push(temp);\n this.hiddenElement.innerHTML += '';\n }\n }\n this.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; !isNullOrUndefined(this.value[index]); index++) {\n value = this.value[index];\n element = this.hideSelectedItem ? this.ulElement.querySelector('li[data-value=\"' + value + '\"]')\n : this.list.querySelector('li[data-value=\"' + value + '\"]');\n text = this.getTextByValue(value);\n if ((element && (element.getAttribute('aria-selected') !== 'true')) ||\n (element && (element.getAttribute('aria-selected') === 'true' && this.hideSelectedItem) &&\n (this.mode === 'Box' || this.mode === 'Default'))) {\n this.addChip(text, value);\n this.addListSelection(element);\n }\n else if (value && this.allowCustomValue) {\n var indexItem = this.listData.length;\n var newValue = {};\n setValue(this.fields.text, value, newValue);\n setValue(this.fields.value, value, newValue);\n this.addItem(newValue, indexItem);\n this.addChip(text, value);\n this.addListSelection(element);\n }\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.updateValueState(null, this.value, this.tempValues);\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll && isNullOrUndefined(this.value)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n if (!this.inputFocus) {\n if (this.mode === 'Box') {\n this.chipCollectionWrapper.style.display = '';\n }\n else if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n }\n }\n };\n MultiSelect.prototype.isValidLI = function (li) {\n return (li && !li.classList.contains(dropDownBaseClasses.disabled) && !li.classList.contains(dropDownBaseClasses.group) &&\n li.classList.contains(dropDownBaseClasses.li));\n };\n ;\n MultiSelect.prototype.updateListSelection = function (li, e, length) {\n var 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'), length);\n if (argsCancel) {\n return;\n }\n if ((this.allowCustomValue || this.allowFiltering) && !this.mainList.querySelector('li[data-value=\"' + value + '\"]')) {\n var temp = li.cloneNode(true);\n var data = this.getDataByValue(value);\n append([temp], this.mainList);\n this.mainData.push(data);\n var eventArgs = {\n newData: data,\n cancel: false\n };\n this.trigger('customValueSelection', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n this.remoteCustomValue = false;\n this.addValue(value, text, e);\n }\n else {\n this.removeValue(value, e, length);\n }\n };\n MultiSelect.prototype.removeListSelection = function () {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n var selectedItems = this.list.querySelectorAll('.' + className);\n var temp = selectedItems.length;\n if (selectedItems && selectedItems.length) {\n removeClass(selectedItems, className);\n while (temp > 0) {\n selectedItems[temp - 1].setAttribute('aria-selected', 'false');\n temp--;\n }\n }\n if (!isNullOrUndefined(this.mainList)) {\n var selectItems = this.mainList.querySelectorAll('.' + className);\n var temp1 = selectItems.length;\n if (selectItems && selectItems.length) {\n removeClass(selectItems, className);\n while (temp1 > 0) {\n selectItems[temp1 - 1].setAttribute('aria-selected', 'false');\n if (this.mode === 'CheckBox') {\n selectItems[temp1 - 1].firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([selectItems[temp1 - 1].firstElementChild.lastElementChild], 'e-check');\n }\n temp1--;\n }\n }\n }\n };\n ;\n MultiSelect.prototype.removeHover = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n };\n ;\n MultiSelect.prototype.removeFocus = function () {\n if (this.list) {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.focus);\n var mainlist = this.mainList.querySelectorAll('.' + dropDownBaseClasses.focus);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.focus);\n removeClass(mainlist, dropDownBaseClasses.focus);\n }\n }\n };\n ;\n MultiSelect.prototype.addListHover = function (li) {\n if (this.enabled && this.isValidLI(li)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n ;\n MultiSelect.prototype.addListFocus = function (element) {\n if (this.enabled && this.isValidLI(element)) {\n this.removeFocus();\n addClass([element], dropDownBaseClasses.focus);\n }\n };\n MultiSelect.prototype.addListSelection = function (element) {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (this.isValidLI(element) && !element.classList.contains(dropDownBaseClasses.hover)) {\n addClass([element], className);\n this.updateMainList(false, element.getAttribute('data-value'));\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox') {\n var ariaCheck = element.firstElementChild.getAttribute('aria-checked');\n if (ariaCheck === 'false' || isNullOrUndefined(ariaCheck)) {\n this.notify('updatelist', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n }\n }\n this.notify('activeList', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n if (this.chipCollectionWrapper !== null) {\n this.removeChipSelection();\n }\n attributes(this.inputElement, { 'aria-activedescendant': element.id });\n }\n };\n MultiSelect.prototype.updateDelimeter = function (delimChar) {\n this.updateData(delimChar);\n };\n MultiSelect.prototype.onMouseClick = function (e) {\n this.scrollFocusStatus = false;\n var target = e.target;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (this.isValidLI(li)) {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.addListFocus(li);\n if ((this.allowCustomValue || this.allowFiltering) && this.mainList && this.listData) {\n if (this.mode !== 'CheckBox') {\n this.focusAtLastListItem(li.getAttribute('data-value'));\n }\n this.refreshSelection();\n }\n else {\n this.makeTextBoxEmpty();\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.checkSelectAll();\n this.refreshPopup();\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n else {\n e.preventDefault();\n }\n this.makeTextBoxEmpty();\n }\n else {\n e.preventDefault();\n }\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(isNullOrUndefined(li) ? null : li.textContent);\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.addListHover(currentLi);\n };\n MultiSelect.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n MultiSelect.prototype.onListMouseDown = function (e) {\n e.preventDefault();\n this.scrollFocusStatus = true;\n };\n MultiSelect.prototype.onDocumentClick = function (e) {\n if (this.mode !== 'CheckBox') {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, '#' + this.popupObj.element.id)) &&\n !this.overAllWrapper.contains(e.target)) {\n this.scrollFocusStatus = false;\n }\n else {\n this.scrollFocusStatus = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n }\n }\n };\n MultiSelect.prototype.wireListEvents = function () {\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n EventHandler.add(this.list, 'mousedown', this.onListMouseDown, this);\n EventHandler.add(this.list, 'mouseup', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n };\n ;\n MultiSelect.prototype.unwireListEvents = function () {\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n if (this.list) {\n EventHandler.remove(this.list, 'mousedown', this.onListMouseDown);\n EventHandler.remove(this.list, 'mouseup', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n }\n };\n ;\n MultiSelect.prototype.hideOverAllClear = function () {\n if (!this.value || !this.value.length || this.inputElement.value === '') {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.showOverAllClear = function () {\n if (((this.value && this.value.length) || this.inputElement.value !== '') && this.showClearButton) {\n this.overAllClear.style.display = '';\n }\n else {\n this.overAllClear.style.display = 'none';\n }\n };\n /**\n * Shows the spinner loader.\n * @returns void.\n */\n MultiSelect.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n if (this.overAllClear.style.display !== 'none') {\n this.spinnerElement = this.overAllClear;\n }\n else {\n this.spinnerElement = this.createElement('span', { className: CLOSEICON_CLASS + ' ' + SPINNER_CLASS });\n this.componentWrapper.appendChild(this.spinnerElement);\n }\n createSpinner({ target: this.spinnerElement, width: Browser.isDevice ? '16px' : '14px' }, this.createElement);\n addClass([this.spinnerElement], DISABLE_ICON);\n showSpinner(this.spinnerElement);\n }\n };\n /**\n * Hides the spinner loader.\n * @returns void.\n */\n MultiSelect.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], DISABLE_ICON);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n MultiSelect.prototype.updateDelimView = function () {\n if (this.delimiterWrapper) {\n this.hideDelimWrapper();\n }\n if (this.chipCollectionWrapper) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n this.viewWrapper.style.display = '';\n 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 = this.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.offsetWidth;\n remove(raminElement);\n this.viewWrapper.innerHTML = '';\n var inputleng = this.searchWrapper.offsetWidth;\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; !isNullOrUndefined(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.offsetWidth;\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 if (this.mode !== 'CheckBox') {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n }\n EventHandler.remove(this.inputElement, 'keyup', this.KeyUp);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n }\n EventHandler.remove(this.inputElement, 'blur', this.onBlur);\n EventHandler.remove(this.componentWrapper, 'mousemove', this.mouseIn);\n EventHandler.remove(this.componentWrapper, 'mouseout', this.mouseOut);\n EventHandler.remove(this.overAllClear, 'mousedown', this.ClearAll);\n };\n MultiSelect.prototype.selectAllItem = function (state) {\n var li;\n li = this.list.querySelectorAll(state ?\n 'li.e-list-item:not([aria-selected=\"true\"]):not(.e-reorder-hide)' :\n 'li[aria-selected=\"true\"]:not(.e-reorder-hide)');\n var length = li.length;\n if (li && li.length) {\n while (length > 0) {\n this.updateListSelection(li[length - 1], null, length);\n length--;\n }\n }\n if (this.mode !== 'Box' && !this.isPopupOpen()) {\n this.updateDelimView();\n }\n else {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n MultiSelect.prototype.updateDataSource = function (prop) {\n if (isNullOrUndefined(this.list)) {\n this.renderPopup();\n }\n else {\n this.resetList(this.dataSource);\n }\n if (this.value && this.value.length) {\n this.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 if (this.mode === 'CheckBox' && this.showSelectAll) {\n if (!isNullOrUndefined(this.popupObj)) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttribute();\n break;\n case 'showClearButton':\n this.updateClearButton(newProp.showClearButton);\n break;\n case 'value':\n if (!this.list) {\n this.onLoadSelect();\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 'filterBarPlaceholder':\n this.notify('filterBarPlaceholder', { filterBarPlaceholder: newProp.filterBarPlaceholder });\n break;\n case 'delimiterChar':\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateData(newProp.delimiterChar);\n break;\n case 'cssClass':\n this.popupWrapper.classList.remove(oldProp.cssClass);\n this.overAllWrapper.classList.remove(oldProp.cssClass);\n this.updateCssClass();\n break;\n case 'enableRtl':\n this.enableRTL(newProp.enableRtl);\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n case 'readonly':\n this.updateReadonly(newProp.readonly);\n this.hidePopup();\n break;\n case 'enabled':\n this.hidePopup();\n this.enable(newProp.enabled);\n break;\n case 'showSelectAll':\n if (this.popupObj) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n break;\n case 'showDropDownIcon':\n this.dropDownIcon();\n break;\n case 'floatLabelType':\n this.setFloatLabelType();\n break;\n case 'enableSelectionOrder':\n break;\n case 'selectAllText':\n this.notify('selectAllText', false);\n break;\n case 'popupHeight':\n case 'headerTemplate':\n case 'footerTemplate':\n if (this.popupObj) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n break;\n default:\n var msProps = void 0;\n msProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, msProps.newProperty, msProps.oldProperty);\n break;\n }\n }\n };\n /**\n * Hides the popup, if the popup in a open state.\n * @returns void\n */\n MultiSelect.prototype.hidePopup = function () {\n var delay = 100;\n if (this.isPopupOpen()) {\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.beforePopupOpen = false;\n this.overAllWrapper.classList.remove(iconAnimation);\n this.popupObj.hide(new Animation(eventArgs.animation));\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n this.notify('inputFocus', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'clear' });\n this.popupObj.hide();\n removeClass([document.body, this.popupObj.element], 'e-popup-full-page');\n EventHandler.remove(this.list, 'keydown', this.onKeyDown);\n }\n };\n /**\n * Shows the popup, if the popup in a closed state.\n * @returns void\n */\n MultiSelect.prototype.showPopup = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.ulElement) {\n this.beforePopupOpen = true;\n _super.prototype.render.call(this);\n return;\n }\n var mainLiLength = this.ulElement.querySelectorAll('li.' + 'e-list-item').length;\n var liLength = this.ulElement.querySelectorAll('li.'\n + dropDownBaseClasses.li + '.' + HIDE_LIST).length;\n if (mainLiLength > 0 && (mainLiLength === liLength) && (liLength === this.mainData.length)) {\n this.beforePopupOpen = false;\n return;\n }\n this.onPopupShown();\n };\n /**\n * Based on the state parameter, entire list item will be selected/deselected.\n * parameter\n * `true` - Selects entire list items.\n * `false` - Un Selects entire list items.\n * @returns void\n */\n MultiSelect.prototype.selectAll = function (state) {\n 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 = this.createElement('span', { className: SEARCHBOX_WRAPPER });\n this.viewWrapper = this.createElement('span', { className: DELIMITER_VIEW + ' ' + DELIMITER_WRAPPER, styles: 'display:none;' });\n var iconClass;\n this.overAllClear = this.createElement('span', {\n className: CLOSEICON_CLASS, styles: 'display:none;'\n });\n this.componentWrapper = this.createElement('div', { className: ELEMENT_WRAPPER });\n this.overAllWrapper = this.createElement('div', { className: OVER_ALL_WRAPPER });\n if (this.mode === 'CheckBox') {\n addClass([this.overAllWrapper], 'e-checkbox');\n }\n if (Browser.isDevice) {\n this.componentWrapper.classList.add(ELEMENT_MOBILE_WRAPPER);\n }\n this.overAllWrapper.style.width = formatUnit(this.width);\n this.overAllWrapper.appendChild(this.componentWrapper);\n this.popupWrapper = this.createElement('div', { id: this.element.id + '_popup', className: POPUP_WRAPPER });\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.delimiterWrapper = this.createElement('span', { className: DELIMITER_WRAPPER, styles: 'display:none' });\n this.componentWrapper.appendChild(this.delimiterWrapper);\n }\n else {\n this.chipCollectionWrapper = this.createElement('span', {\n className: CHIP_WRAPPER,\n styles: 'display:none'\n });\n this.componentWrapper.appendChild(this.chipCollectionWrapper);\n }\n if (this.mode !== 'Box') {\n this.componentWrapper.appendChild(this.viewWrapper);\n }\n this.componentWrapper.appendChild(this.searchWrapper);\n if (this.showClearButton && !Browser.isDevice) {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n else {\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n this.dropDownIcon();\n this.inputElement = this.createElement('input', {\n className: INPUT_ELEMENT,\n attrs: {\n spellcheck: 'false',\n type: 'text',\n autocomplete: 'off',\n tabindex: '0'\n }\n });\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.overAllWrapper);\n this.searchWrapper.appendChild(this.inputElement);\n }\n else {\n this.element.parentElement.insertBefore(this.overAllWrapper, this.element);\n this.searchWrapper.appendChild(this.inputElement);\n this.searchWrapper.appendChild(this.element);\n this.element.removeAttribute('tabindex');\n }\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n else if (this.floatLabelType === 'Never') {\n this.refreshPlaceHolder();\n }\n this.element.style.opacity = '';\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement = this.createElement('select', {\n attrs: { 'aria-hidden': 'true', 'class': HIDDEN_ELEMENT, 'tabindex': '-1', 'multiple': 'true' }\n });\n this.componentWrapper.appendChild(this.hiddenElement);\n this.validationAttribute(this.element, this.hiddenElement);\n if (this.mode !== 'CheckBox') {\n this.hideOverAllClear();\n }\n this.wireEvent();\n this.enable(this.enabled);\n this.enableRTL(this.enableRtl);\n if (this.value && this.value.length) {\n this.renderPopup();\n if (!(this.dataSource instanceof DataManager)) {\n this.initialValueUpdate();\n this.initialUpdate();\n }\n else {\n this.setInitialValue = function () {\n _this.initStatus = false;\n _this.initialValueUpdate();\n _this.initialUpdate();\n _this.setInitialValue = null;\n _this.initStatus = true;\n };\n }\n }\n else {\n this.initialUpdate();\n }\n this.initStatus = true;\n this.checkAutoFocus();\n };\n MultiSelect.prototype.checkAutoFocus = function () {\n if (this.element.hasAttribute('autofocus')) {\n this.focusIn();\n }\n };\n MultiSelect.prototype.setFloatLabelType = function () {\n removeFloating(this.overAllWrapper, this.componentWrapper, this.searchWrapper, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n };\n MultiSelect.prototype.dropDownIcon = function () {\n if (this.mode === 'CheckBox' && this.showDropDownIcon) {\n this.dropIcon = this.createElement('span', { className: dropdownIcon });\n this.componentWrapper.appendChild(this.dropIcon);\n addClass([this.componentWrapper], ['e-down-icon']);\n }\n else {\n if (!isNullOrUndefined(this.dropIcon)) {\n this.dropIcon.parentElement.removeChild(this.dropIcon);\n removeClass([this.componentWrapper], ['e-down-icon']);\n }\n }\n };\n MultiSelect.prototype.initialUpdate = function () {\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateCssClass();\n this.updateHTMLAttribute();\n this.updateReadonly(this.readonly);\n this.refreshInputHight();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n MultiSelect.prototype.destroy = function () {\n if (this.popupObj) {\n this.popupObj.hide();\n }\n this.notify(destroy, {});\n this.unwireListEvents();\n this.unWireEvent();\n this.list = null;\n this.popupObj = null;\n this.mainList = null;\n this.mainData = null;\n _super.prototype.destroy.call(this);\n var temp = ['readonly', 'aria-disabled', 'aria-placeholder', 'placeholder'];\n var length = temp.length;\n while (length > 0) {\n this.inputElement.removeAttribute(temp[length - 1]);\n length--;\n }\n this.element.style.display = 'block';\n if (this.overAllWrapper.parentElement) {\n if (this.overAllWrapper.parentElement.tagName === this.getNgDirective()) {\n remove(this.overAllWrapper);\n }\n else {\n this.overAllWrapper.parentElement.insertBefore(this.element, this.overAllWrapper);\n remove(this.overAllWrapper);\n }\n }\n };\n ;\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], MultiSelect.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], MultiSelect.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowCustomValue\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(1000)\n ], MultiSelect.prototype, \"maximumSelectionLength\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"value\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"hideSelectedItem\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"closePopupOnSelect\", void 0);\n __decorate([\n Property('Default')\n ], MultiSelect.prototype, \"mode\", void 0);\n __decorate([\n Property(',')\n ], MultiSelect.prototype, \"delimiterChar\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showDropDownIcon\", void 0);\n __decorate([\n Property('Never')\n ], MultiSelect.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showSelectAll\", void 0);\n __decorate([\n Property('Select All')\n ], MultiSelect.prototype, \"selectAllText\", void 0);\n __decorate([\n Property('Unselect All')\n ], MultiSelect.prototype, \"unSelectAllText\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"enableSelectionOrder\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"openOnClick\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"selectedAll\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"chipSelection\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"tagging\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"customValueSelection\", void 0);\n MultiSelect = __decorate([\n NotifyPropertyChanges\n ], MultiSelect);\n return MultiSelect;\n}(DropDownBase));\nexport { MultiSelect };\n","import { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { EventHandler, select, removeClass, addClass, detach, compile, L10n } from '@syncfusion/ej2-base';\nimport { Browser, attributes, isNullOrUndefined, append, closest, prepend } from '@syncfusion/ej2-base';\nimport { dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nvar ICON = 'e-icons';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECK = 'e-check';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar 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 this.parent.on('selectAllText', this.setLocale, this);\n this.parent.on('filterBarPlaceholder', this.setPlaceholder, this);\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n this.parent.on('addItem', this.checboxCreate, this);\n };\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 this.parent.off('selectAllText', this.setLocale);\n this.parent.off('filterBarPlaceholder', this.setPlaceholder);\n this.parent.off('addItem', this.checboxCreate);\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.setPlaceholder = function (props) {\n Input.setPlaceholder(props.filterBarPlaceholder, this.filterInput);\n };\n CheckBoxSelection.prototype.checboxCreate = function (e) {\n var item;\n if (!isNullOrUndefined(e.item)) {\n item = e.item;\n }\n else {\n item = e;\n }\n if (item.className !== 'e-list-group-item ' && item.className !== 'e-list-group-item') {\n var checkboxEle = createCheckBox(this.parent.createElement, 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 = this.parent.createElement('div', {\n className: checkAllParent\n });\n this.selectAllSpan = this.parent.createElement('span', {\n className: 'e-all-text'\n });\n this.selectAllSpan.textContent = '';\n this.checkAllParent.appendChild(this.selectAllSpan);\n this.setLocale();\n this.checboxCreate(this.checkAllParent);\n if (this.parent.headerTemplate) {\n if (!isNullOrUndefined(this.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 this.filterParent.parentNode.insertBefore(this.checkAllParent, this.filterParent.nextSibling);\n }\n else {\n prepend([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n EventHandler.add(this.checkAllParent, 'mousedown', this.clickHandler, this);\n }\n if (this.parent.list.classList.contains('e-nodata')) {\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 = this.parent.createElement('span', {\n className: filterParent\n });\n this.filterInput = this.parent.createElement('input', {\n attrs: { type: 'text' },\n className: filterInput\n });\n this.parent.element.parentNode.insertBefore(this.filterInput, this.parent.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n this.parent.mobFilter = false;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ? [searchBackIcon, filterBarClearIcon] : [filterBarClearIcon],\n properties: { placeholder: this.parent.filterBarPlaceholder }\n }, this.parent.createElement);\n 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 (this.parent.keyAction) {\n return;\n }\n if (Browser.isIE) {\n target = !isNullOrUndefined(e) && e.target;\n }\n if (!Browser.isIE) {\n target = !isNullOrUndefined(e) && e.relatedTarget;\n }\n 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 e.preventDefault();\n }\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 else {\n this.parent.scrollFocusStatus = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.filterInput);\n }\n if (!this.parent.overAllWrapper.contains(e.target) && this.parent.overAllWrapper.classList.contains('e-input-focus') &&\n !this.parent.isPopupOpen()) {\n this.parent.onBlur(e);\n }\n if (this.filterInput === target) {\n this.filterInput.focus();\n }\n };\n CheckBoxSelection.prototype.getFocus = function (e) {\n this.parent.overAllWrapper.classList.remove(FOCUS);\n if (this.parent.keyAction && e.value !== 'clear') {\n this.parent.keyAction = false;\n return;\n }\n if (e.value === 'focus') {\n this.filterInput.focus();\n this.parent.removeFocus();\n EventHandler.remove(this.parent.list, 'keydown', this.parent.onKeyDown);\n }\n if (e.value === 'clear') {\n this.filterInput.value = '';\n this.clearIconElement.style.visibility = 'hidden';\n }\n };\n CheckBoxSelection.prototype.checkSelectAll = function (e) {\n if (e.value === 'check' && 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 = this.parent.createElement('ul', {\n className: 'e-list-parent e-ul e-reorder'\n });\n var removeEle = this.parent.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 { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n * The Hyperlink dialog is used to insert or edit hyperlink at selection.\n */\n/* tslint:disable:max-line-length */\nvar HyperlinkDialog = /** @class */ (function () {\n /**\n * @private\n */\n function HyperlinkDialog(viewer) {\n var _this = this;\n this.displayText = '';\n this.navigationUrl = undefined;\n this.bookmarkDropdown = undefined;\n this.bookmarkCheckbox = undefined;\n this.bookmarks = [];\n /**\n * @private\n */\n this.onKeyUpOnUrlBox = function (event) {\n if (event.keyCode === 13) {\n if (_this.displayTextBox.value !== '' && _this.urlTextBox.value !== '') {\n _this.onInsertHyperlink();\n }\n return;\n }\n var selectedText = _this.owner.selection.text;\n var urlValue = _this.urlTextBox.value;\n if (urlValue.substring(0, 4).toLowerCase() === 'www.') {\n _this.urlTextBox.value = 'http://' + urlValue;\n }\n if (_this.displayText === '') {\n _this.displayTextBox.value = urlValue;\n }\n _this.enableOrDisableInsertButton();\n };\n /**\n * @private\n */\n this.onKeyUpOnDisplayBox = function () {\n _this.displayText = _this.displayTextBox.value;\n _this.enableOrDisableInsertButton();\n };\n /**\n * @private\n */\n this.onInsertButtonClick = function () {\n _this.onInsertHyperlink();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.clearValue();\n };\n /**\n * @private\n */\n this.loadHyperlinkDialog = function () {\n _this.owner.updateFocus();\n _this.bookmarks = [];\n for (var i = 0; i < _this.owner.bookmarks.keys.length; i++) {\n var bookmark = _this.owner.bookmarks.keys[i];\n if (bookmark.indexOf('_') !== 0) {\n _this.bookmarks.push(bookmark);\n }\n }\n var fieldBegin = _this.owner.selection.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var format = undefined;\n // tslint:disable-next-line:max-line-length\n var fieldObj = _this.owner.selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, false, format);\n _this.displayText = fieldObj.displayText;\n _this.displayTextBox.disabled = fieldObj.isNestedField;\n }\n _this.displayTextBox.value = _this.displayText;\n var link = _this.owner.selection.getLinkText(fieldBegin);\n _this.urlTextBox.value = _this.navigationUrl = link;\n _this.owner.dialog.header = _this.localObj.getConstant('Edit Hyperlink');\n }\n else {\n _this.displayText = _this.owner.selection.getText(true);\n if (_this.displayText !== '') {\n if (_this.displayText.indexOf(String.fromCharCode(65532)) !== -1 ||\n _this.displayText.indexOf('\\r') !== -1 && (_this.displayText.lastIndexOf('\\r') !== -1 &&\n _this.displayText.slice(0, -1).indexOf('\\r') !== -1)) {\n _this.displayTextBox.value = '<>';\n _this.displayTextBox.disabled = true;\n }\n else {\n _this.displayTextBox.value = _this.displayText;\n }\n }\n }\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n _this.bookmarkCheckbox.checked = false;\n _this.bookmarkDropdown.dataSource = _this.owner.bookmarks.keys;\n _this.insertButton = document.getElementsByClassName('e-hyper-insert')[0];\n _this.enableOrDisableInsertButton();\n _this.urlTextBox.focus();\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n */\n this.closeHyperlinkDialog = function () {\n _this.clearValue();\n _this.owner.updateFocus();\n };\n /* tslint:disable:no-any */\n this.onUseBookmarkChange = function (args) {\n if (args.checked) {\n _this.bookmarkDiv.style.display = 'block';\n _this.bookmarkDropdown.dataSource = _this.bookmarks;\n _this.addressText.style.display = 'none';\n _this.urlTextBox.style.display = 'none';\n }\n else {\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n }\n };\n this.onBookmarkchange = function (args) {\n if (_this.bookmarkDropdown.value !== '') {\n _this.insertButton.disabled = false;\n }\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n HyperlinkDialog.prototype.getModuleName = function () {\n return 'HyperlinkDialog';\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.initHyperlinkDialog = function (localValue) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_hyperlink';\n this.target = createElement('div', { id: id, className: 'e-de-hyperlink' });\n var container = createElement('div');\n var displayText = createElement('div', { className: 'e-de-hyperlink-dlg-title', innerHTML: localValue.getConstant('Text to display') });\n this.displayTextBox = createElement('input', { id: this.owner.owner.containerId + '_display_text', className: 'e-input e-de-hyperlink-dlg-input' });\n this.displayTextBox.addEventListener('keyup', instance.onKeyUpOnDisplayBox);\n container.appendChild(displayText);\n container.appendChild(this.displayTextBox);\n this.addressText = createElement('div', { className: 'e-de-hyperlink-dlg-title', innerHTML: localValue.getConstant('Address') });\n this.urlTextBox = createElement('input', { id: this.owner.owner.containerId + '_url_text', className: 'e-input e-de-hyperlink-dlg-input', attrs: { autofocus: 'true' } });\n this.urlTextBox.addEventListener('input', instance.onKeyUpOnUrlBox);\n this.urlTextBox.addEventListener('keyup', instance.onKeyUpOnUrlBox);\n container.appendChild(this.addressText);\n container.appendChild(this.urlTextBox);\n this.bookmarkDiv = createElement('div', { styles: 'display:none;' });\n var bookmarkText = createElement('div', { className: 'e-de-hyperlink-dlg-title', innerHTML: localValue.getConstant('Bookmark') });\n var bookmarkTextElement = createElement('div', { className: 'e-de-hyperlink-dlg-bookmark' });\n // tslint:disable-next-line:max-line-length\n var bookmarkValue = createElement('input', { id: 'e-de-hyperlink-dlg-bookmark-value' });\n bookmarkTextElement.appendChild(bookmarkValue);\n // tslint:disable-next-line:max-line-length\n this.bookmarkDropdown = new DropDownList({ dataSource: [], change: this.onBookmarkchange, popupHeight: '230px', width: '230px', noRecordsTemplate: localValue.getConstant('No bookmarks found') });\n this.bookmarkDropdown.appendTo(bookmarkValue);\n this.bookmarkDiv.appendChild(bookmarkText);\n this.bookmarkDiv.appendChild(bookmarkTextElement);\n container.appendChild(this.bookmarkDiv);\n // tslint:disable-next-line:max-line-length\n var bookmarkCheckDiv = createElement('div', { className: 'e-de-hyperlink-bookmark-check e-de-hyperlink-dlg-title' });\n var bookmarkCheck = createElement('input', { attrs: { type: 'checkbox' }, id: this.target.id + '_bookmark', className: this.target.id + '_bookmarkcheck' });\n bookmarkCheckDiv.appendChild(bookmarkCheck);\n this.bookmarkCheckbox = new CheckBox({ label: localValue.getConstant('Use bookmarks'), change: this.onUseBookmarkChange });\n this.bookmarkCheckbox.appendTo(bookmarkCheck);\n container.appendChild(bookmarkCheckDiv);\n this.target.appendChild(container);\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.show = function () {\n this.localObj = new L10n('documenteditor', this.owner.owner.defaultLocale);\n this.localObj.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initHyperlinkDialog(this.localObj);\n }\n this.owner.dialog.header = this.localObj.getConstant('Insert Hyperlink');\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.buttons = [{\n click: this.onInsertButtonClick,\n buttonModel: { content: this.localObj.getConstant('Ok'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.beforeOpen = this.loadHyperlinkDialog;\n this.owner.dialog.close = this.closeHyperlinkDialog;\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.hide = function () {\n this.closeHyperlinkDialog();\n };\n HyperlinkDialog.prototype.enableOrDisableInsertButton = function () {\n if (!isNullOrUndefined(this.insertButton)) {\n // tslint:disable-next-line:max-line-length\n this.insertButton.disabled = (this.urlTextBox.value === '' || this.displayTextBox.value === '');\n }\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.onInsertHyperlink = function () {\n var displayText = this.displayTextBox.value.trim();\n var address = this.urlTextBox.value.trim();\n var isBookmark = false;\n if (!isNullOrUndefined(this.bookmarkDropdown.value) && this.bookmarkDropdown.value !== '') {\n address = this.bookmarkDropdown.value;\n isBookmark = true;\n }\n if (address === '') {\n this.owner.dialog.hide();\n return;\n }\n if (displayText === '' && address !== '') {\n displayText = address;\n }\n else {\n displayText = this.displayTextBox.value;\n }\n if (!isNullOrUndefined(this.navigationUrl)) {\n this.owner.owner.editorModule.editHyperlink(this.owner.selection, address, displayText, isBookmark);\n }\n else {\n var remove = this.owner.selection.text !== displayText && !this.displayTextBox.disabled;\n this.owner.owner.editorModule.insertHyperlink(address, displayText, remove, isBookmark);\n }\n this.owner.dialog.hide();\n this.navigationUrl = undefined;\n };\n /* tslint:enable:no-any */\n /**\n * @private\n */\n HyperlinkDialog.prototype.clearValue = function () {\n this.displayTextBox.value = '';\n this.urlTextBox.value = '';\n this.displayText = '';\n this.displayTextBox.disabled = false;\n this.bookmarks = [];\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.destroy = function () {\n if (this.displayTextBox) {\n this.displayTextBox.innerHTML = '';\n this.displayTextBox = undefined;\n }\n if (this.urlTextBox) {\n this.urlTextBox.parentElement.removeChild(this.urlTextBox);\n this.urlTextBox = undefined;\n }\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n this.target.innerHTML = '';\n this.target = undefined;\n }\n };\n return HyperlinkDialog;\n}());\nexport { HyperlinkDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { L10n, createElement, setCulture, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * The Table dialog is used to insert table at selection.\n */\nvar TableDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TableDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.keyUpInsertTable = function (event) {\n if (event.keyCode === 13) {\n if (_this.rowsCountBox.value !== '' && _this.columnsCountBox.value !== '') {\n _this.onInsertTableClick();\n }\n }\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.onInsertTableClick = function () {\n var rowCount = _this.rowValueTextBox.value;\n var columnCount = _this.columnValueTexBox.value;\n if (!(isNullOrUndefined(rowCount) && isNullOrUndefined(columnCount))) {\n _this.owner.owner.editor.insertTable(rowCount, columnCount);\n }\n _this.owner.dialog.hide();\n };\n this.owner = viewer;\n }\n TableDialog.prototype.getModuleName = function () {\n return 'TableDialog';\n };\n /**\n * @private\n */\n TableDialog.prototype.initTableDialog = function (localValue) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_Table';\n this.target = createElement('div', { id: id, className: 'e-de-insert-table' });\n var parentDiv = createElement('div');\n var columnContainer = createElement('div', {\n className: 'e-de-insert-table-dlg-sub-header', innerHTML: localValue.getConstant('Number of columns')\n });\n var columnValue = createElement('div', { className: 'e-de-insert-table-dlg-input' });\n this.columnsCountBox = createElement('input', {\n attrs: { type: 'text' }, id: this.owner.owner.containerId + '_column'\n });\n columnValue.appendChild(this.columnsCountBox);\n var rowContainer = createElement('div', {\n className: 'e-de-insert-table-dlg-sub-header', innerHTML: localValue.getConstant('Number of rows')\n });\n var rowValue = createElement('div', { className: 'e-de-insert-table-dlg-input' });\n this.rowsCountBox = createElement('input', {\n attrs: { type: 'text' }, id: this.owner.owner.containerId + 'row'\n });\n rowValue.appendChild(this.rowsCountBox);\n parentDiv.appendChild(columnContainer);\n parentDiv.appendChild(columnValue);\n parentDiv.appendChild(rowContainer);\n parentDiv.appendChild(rowValue);\n this.target.appendChild(parentDiv);\n this.columnsCountBox.addEventListener('keyup', instance.keyUpInsertTable);\n this.rowsCountBox.addEventListener('keyup', instance.keyUpInsertTable);\n this.rowValueTextBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n max: 32767,\n enablePersistence: false\n });\n this.rowValueTextBox.appendTo(this.rowsCountBox);\n this.columnValueTexBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n max: 63,\n enablePersistence: false\n });\n this.columnValueTexBox.appendTo(this.columnsCountBox);\n };\n /**\n * @private\n */\n TableDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTableDialog(localValue);\n }\n if (this.owner.selection.caret.style.display !== 'none') {\n this.owner.selection.caret.style.display = 'none';\n }\n this.owner.dialog.header = localValue.getConstant('Insert Table');\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.buttons = [{\n click: this.onInsertTableClick,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ok', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cancel' }\n }];\n this.rowValueTextBox.value = 2;\n this.columnValueTexBox.value = 2;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n TableDialog.prototype.destroy = function () {\n if (this.columnsCountBox) {\n if (this.columnsCountBox.parentElement) {\n this.columnsCountBox.parentElement.removeChild(this.columnsCountBox);\n }\n this.columnsCountBox = undefined;\n }\n if (this.rowsCountBox) {\n if (this.rowsCountBox.parentElement) {\n this.rowsCountBox.parentElement.removeChild(this.rowsCountBox);\n }\n this.rowsCountBox = undefined;\n }\n if (this.columnValueTexBox) {\n this.columnValueTexBox.destroy();\n this.columnValueTexBox = undefined;\n }\n if (this.rowValueTextBox) {\n this.rowValueTextBox.destroy();\n this.rowValueTextBox = undefined;\n }\n this.columnsCountBox = undefined;\n this.rowsCountBox = undefined;\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var i = 0; i < this.target.childNodes.length; i++) {\n this.target.removeChild(this.target.childNodes[i]);\n i--;\n }\n this.target = undefined;\n }\n };\n return TableDialog;\n}());\nexport { TableDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\n/**\n * The Bookmark dialog is used to add, navigate or delete bookmarks.\n */\nvar BookmarkDialog = /** @class */ (function () {\n /**\n * @private\n */\n function BookmarkDialog(viewer) {\n var _this = this;\n this.addBookmark = function () {\n _this.owner.owner.editorModule.insertBookmark(_this.textBoxInput.value);\n _this.owner.dialog.hide();\n };\n /* tslint:disable:no-any */\n this.selectHandler = function (args) {\n _this.textBoxInput.value = args.text;\n /* tslint:disable:no-any */\n var value = document.getElementById('bookmark_text_box');\n value.setSelectionRange(0, args.text.length);\n value.focus();\n };\n this.gotoBookmark = function () {\n _this.owner.selection.selectBookmark(_this.textBoxInput.value);\n };\n this.deleteBookmark = function () {\n _this.owner.owner.editorModule.deleteBookmark(_this.textBoxInput.value);\n _this.show();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n BookmarkDialog.prototype.getModuleName = function () {\n return 'BookmarkDialog';\n };\n /**\n * @private\n */\n BookmarkDialog.prototype.initBookmarkDialog = function (localValue, bookmarks) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_bookmark';\n this.target = createElement('div', { id: id, className: 'e-de-bookmark' });\n var headerValue = localValue.getConstant('Bookmark name') + ':';\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-bookmark-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-bookmark-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-bookmark-list' });\n commonDiv.appendChild(searchDiv);\n var textBoxDiv = createElement('div', { className: 'e-bookmark-textboxdiv' });\n searchDiv.appendChild(textBoxDiv);\n // tslint:disable-next-line:max-line-length\n this.textBoxInput = createElement('input', { className: 'e-input e-bookmark-textbox-input', id: 'bookmark_text_box' });\n this.textBoxInput.setAttribute('type', 'text');\n textBoxDiv.appendChild(this.textBoxInput);\n var listviewDiv = createElement('div', { className: 'e-bookmark-listViewDiv', id: 'bookmark_listview' });\n searchDiv.appendChild(listviewDiv);\n var arts = this.owner.bookmarks.keys;\n this.listviewInstance = new ListView({\n dataSource: bookmarks,\n cssClass: 'e-bookmark-listview',\n });\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-bookmark-button' });\n commonDiv.appendChild(buttonDiv);\n var addbuttonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n buttonDiv.appendChild(addbuttonDiv);\n var addButtonElement = createElement('button', { innerHTML: 'Add', id: 'add' });\n addbuttonDiv.appendChild(addButtonElement);\n var addbutton = new Button({ cssClass: 'e-button-custom' });\n addbutton.appendTo(addButtonElement);\n addButtonElement.addEventListener('click', this.addBookmark);\n var deleteButtonDiv = createElement('div', { className: 'e-bookmark-deletebutton' });\n buttonDiv.appendChild(deleteButtonDiv);\n var deleteButtonElement = createElement('button', { innerHTML: 'Delete', id: 'delete' });\n deleteButtonDiv.appendChild(deleteButtonElement);\n var deletebutton = new Button({ cssClass: 'e-button-custom' });\n deletebutton.appendTo(deleteButtonElement);\n deleteButtonElement.addEventListener('click', this.deleteBookmark);\n var gotoButtonDiv = createElement('div', { className: 'e-bookmark-gotobutton' });\n buttonDiv.appendChild(gotoButtonDiv);\n var gotoButtonElement = createElement('button', { innerHTML: 'Go To', id: 'goto' });\n gotoButtonDiv.appendChild(gotoButtonElement);\n var gotobutton = new Button({ cssClass: 'e-button-custom' });\n gotobutton.appendTo(gotoButtonElement);\n gotoButtonElement.addEventListener('click', this.gotoBookmark);\n };\n /**\n * @private\n */\n BookmarkDialog.prototype.show = function () {\n var bookmarks = this.owner.getBookmarks();\n var localObj = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localObj.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n // if (!this.target) {\n this.initBookmarkDialog(localObj, bookmarks);\n //}\n this.owner.dialog.header = 'Bookmark';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.buttons = [{\n click: this.removeObjects.bind(this),\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n BookmarkDialog.prototype.removeObjects = function () {\n this.owner.dialog.hide();\n };\n /**\n * @private\n */\n BookmarkDialog.prototype.destroy = function () {\n if (this.textBoxInput) {\n this.textBoxInput.remove();\n this.textBoxInput = undefined;\n }\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n };\n return BookmarkDialog;\n}());\nexport { BookmarkDialog };\n","import { L10n, setCulture, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { ListView } from '@syncfusion/ej2-lists';\n/**\n * The Table of contents dialog is used to insert or edit table of contents at selection.\n */\nvar TableOfContentsDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TableOfContentsDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.loadTableofContentDialog = function () {\n _this.owner.updateFocus();\n _this.pageNumber.checked = true;\n _this.rightAlign.disabled = false;\n _this.rightAlign.checked = true;\n _this.tabLeader.enabled = true;\n _this.hyperlink.checked = true;\n _this.style.checked = true;\n _this.outline.checked = true;\n _this.outline.disabled = false;\n _this.showLevel.enabled = true;\n };\n /**\n * @private\n */\n this.closeTableOfContentDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /* tslint:disable:no-any */\n this.selectHandler = function (args) {\n _this.textBoxInput.value = args.text;\n /* tslint:disable:no-any */\n var value = document.getElementById('toclist');\n value.setSelectionRange(0, args.text.length);\n value.focus();\n };\n this.showStyleDialog = function () {\n if (!isNullOrUndefined(_this.owner.owner.styleDialogModule)) {\n _this.owner.owner.styleDialogModule.show(_this.textBoxInput.value);\n }\n };\n this.changeShowLevelValue = function (event) {\n var levels = event.value;\n var values = [];\n switch (levels) {\n case 1:\n values = ['1', null, null, null, null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 2:\n values = ['1', '2', null, null, null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 3:\n values = ['1', '2', '3', null, null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 4:\n values = ['1', '2', '3', '4', null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 5:\n values = ['1', '2', '3', '4', '5', null, null, null, null];\n _this.changeByValue(values);\n break;\n case 6:\n values = ['1', '2', '3', '4', '5', '6', null, null, null];\n _this.changeByValue(values);\n break;\n case 7:\n values = ['1', '2', '3', '4', '5', '6', '7', null, null];\n _this.changeByValue(values);\n break;\n case 8:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', null];\n _this.changeByValue(values);\n break;\n case 9:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];\n _this.changeByValue(values);\n break;\n }\n };\n this.changeByValue = function (headings) {\n _this.heading1.value = headings[0];\n _this.heading2.value = headings[1];\n _this.heading3.value = headings[2];\n _this.heading4.value = headings[3];\n _this.heading5.value = headings[4];\n _this.heading6.value = headings[5];\n _this.heading7.value = headings[6];\n _this.heading8.value = headings[7];\n _this.heading9.value = headings[8];\n };\n this.reset = function () {\n _this.showLevel.enabled = true;\n _this.showLevel.value = 3;\n _this.outline.disabled = false;\n _this.outline.checked = true;\n var values = ['1', '2', '3', null, null, null, null, null, null];\n _this.changeByValue(values);\n _this.normal.value = null;\n };\n this.changeStyle = function (args) {\n var headingValue = args.srcElement.value;\n var value = _this.getElementValue(args.srcElement);\n if (headingValue !== value && headingValue !== '') {\n _this.showLevel.enabled = false;\n }\n else {\n _this.showLevel.enabled = true;\n _this.checkLevel();\n }\n };\n this.changeHeadingStyle = function (args) {\n var headingValue = args.srcElement.value;\n if (headingValue === '') {\n _this.showLevel.enabled = true;\n }\n else {\n _this.showLevel.enabled = false;\n }\n if (_this.normal === args.srcElement) {\n _this.outline.checked = false;\n _this.outline.disabled = true;\n }\n };\n /**\n * @private\n */\n this.changePageNumberValue = function (args) {\n if (args.checked) {\n _this.rightAlign.checked = true;\n _this.rightAlign.disabled = false;\n _this.tabLeader.enabled = true;\n }\n else {\n _this.rightAlign.disabled = true;\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @private\n */\n this.changeRightAlignValue = function (args) {\n if (args.checked) {\n _this.tabLeader.enabled = true;\n }\n else {\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @private\n */\n this.changeStyleValue = function (args) {\n if (args.checked) {\n _this.heading1.disabled = false;\n _this.heading2.disabled = false;\n _this.heading3.disabled = false;\n _this.heading4.disabled = false;\n _this.heading5.disabled = false;\n _this.heading6.disabled = false;\n _this.heading7.disabled = false;\n _this.heading8.disabled = false;\n _this.heading9.disabled = false;\n _this.normal.disabled = false;\n }\n else {\n _this.heading1.disabled = true;\n _this.heading2.disabled = true;\n _this.heading3.disabled = true;\n _this.heading4.disabled = true;\n _this.heading5.disabled = true;\n _this.heading6.disabled = true;\n _this.heading7.disabled = true;\n _this.heading8.disabled = true;\n _this.heading9.disabled = true;\n _this.normal.disabled = true;\n }\n };\n /**\n * @private\n */\n this.applyTableOfContentProperties = function () {\n var tocSettings = {\n startLevel: 1,\n endLevel: _this.showLevel.value,\n includeHyperlink: _this.hyperlink.checked,\n includePageNumber: _this.pageNumber.checked,\n rightAlign: _this.rightAlign.checked,\n tabLeader: _this.tabLeader.value,\n includeOutlineLevels: _this.outline.checked\n };\n _this.applyLevelSetting(tocSettings);\n _this.owner.owner.editorModule.insertTableOfContents(tocSettings);\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.unWireEventsAndBindings = function () {\n _this.pageNumber.checked = false;\n _this.rightAlign.checked = false;\n _this.tabLeader.value = '';\n _this.hyperlink.checked = false;\n _this.style.checked = false;\n _this.outline.checked = false;\n _this.normal.value = '';\n };\n this.owner = viewer;\n }\n TableOfContentsDialog.prototype.getModuleName = function () {\n return 'TableOfContentsDialog';\n };\n /*tslint:disable max-func-body-length*/\n /**\n * @private\n */\n TableOfContentsDialog.prototype.initTableOfContentDialog = function (locale) {\n var instance = this;\n var ownerId = this.owner.owner.containerId;\n var id = ownerId + '_toc_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-toc-dlg-container' });\n this.owner.owner.element.appendChild(this.target);\n // tslint:disable-next-line:max-line-length\n var generalDiv = createElement('div', { id: 'general_div', className: 'e-de-toc-dlg-sub-container' });\n this.target.appendChild(generalDiv);\n // tslint:disable-next-line:max-line-length\n var genLabel = createElement('div', { id: ownerId + '_genLabel', className: 'e-de-toc-dlg-main-heading', styles: 'margin-bottom: 13px;', innerHTML: locale.getConstant('General') });\n generalDiv.appendChild(genLabel);\n // tslint:disable-next-line:max-line-length\n var leftGeneralDiv = createElement('div', { id: 'left_general', styles: 'float:left;position:relative;' });\n generalDiv.appendChild(leftGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var rightGeneralDiv = createElement('div', { styles: 'position:relative;', className: 'e-de-toc-dlg-right-general-div' });\n generalDiv.appendChild(rightGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var leftBottomGeneralDiv = createElement('div', { id: 'leftBottom_general', styles: 'float:left;position:absolute;top:210px;' });\n generalDiv.appendChild(leftBottomGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var rightBottomGeneralDiv = createElement('div', { className: 'e-de-toc-dlg-right-sub-container', styles: 'float:right;' });\n generalDiv.appendChild(rightBottomGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var pageNumberDiv = createElement('div', { id: 'pageNumber_div', className: 'e-de-toc-dlg-sub-container' });\n var pageNumber = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_pageNumber'\n });\n pageNumberDiv.appendChild(pageNumber);\n // tslint:disable-next-line:max-line-length\n var rightAlignDiv = createElement('div', { id: 'rightAlign_div', className: 'e-de-toc-dlg-sub-container' });\n var rightAlign = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_rightAlign'\n });\n rightAlignDiv.appendChild(rightAlign);\n // tslint:disable-next-line:max-line-length\n this.pageNumber = new CheckBox({ label: locale.getConstant('Show page numbers'), checked: true, change: this.changePageNumberValue });\n // tslint:disable-next-line:max-line-length\n this.rightAlign = new CheckBox({ label: locale.getConstant('Right align page numbers'), checked: true, change: this.changeRightAlignValue });\n this.pageNumber.appendTo(pageNumber);\n this.rightAlign.appendTo(rightAlign);\n var tabDiv = createElement('div', { id: 'tab_div', className: 'e-de-toc-dlg-tab-div' });\n // tslint:disable-next-line:max-line-length\n var tabLeaderLabelDiv = createElement('div', { id: 'tabLeaderLabel_div' });\n // tslint:disable-next-line:max-line-length\n var tabLeaderLabel = createElement('label', { id: ownerId + '_tabLeaderLabel', className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Tab leader') + ':' });\n tabLeaderLabelDiv.appendChild(tabLeaderLabel);\n var tabLeaderDiv = createElement('div', { id: 'tabLeader_div' });\n var tabLeader = createElement('select', {\n id: ownerId + '_tabLeader',\n innerHTML: ''\n });\n tabLeaderDiv.appendChild(tabLeader);\n tabDiv.appendChild(tabLeaderLabelDiv);\n tabDiv.appendChild(tabLeaderDiv);\n leftGeneralDiv.appendChild(pageNumberDiv);\n leftGeneralDiv.appendChild(rightAlignDiv);\n leftGeneralDiv.appendChild(tabDiv);\n this.tabLeader = new DropDownList({ width: 210 });\n this.tabLeader.appendTo(tabLeader);\n var hyperlink = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_hyperlink'\n });\n rightGeneralDiv.appendChild(hyperlink);\n this.hyperlink = new CheckBox({ label: locale.getConstant('Use hyperlinks instead of page numbers'), checked: true });\n this.hyperlink.appendTo(hyperlink);\n // tslint:disable-next-line:max-line-length\n var showDiv = createElement('div', { id: 'show_div', className: 'e-de-toc-dlg-style-label' });\n // tslint:disable-next-line:max-line-length\n var showLevelLabelDiv = createElement('div', { id: 'showLevelLabel_div', className: 'e-de-toc-dlg-show-level-div' });\n // tslint:disable-next-line:max-line-length\n var showLevelLabel = createElement('label', { id: ownerId + '_showLevelLabel', className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Show levels') + ':' });\n showLevelLabelDiv.appendChild(showLevelLabel);\n // tslint:disable-next-line:max-line-length\n var showLevelDiv = createElement('div', { id: 'showLevel_div', className: 'e-de-toc-dlg-showlevel-div' });\n // tslint:disable-next-line:max-line-length\n var showLevel = createElement('input', { id: ownerId + '_showLevel', attrs: { 'type': 'text' } });\n showLevelDiv.appendChild(showLevel);\n showDiv.appendChild(showLevelLabelDiv);\n showDiv.appendChild(showLevelDiv);\n rightGeneralDiv.appendChild(showDiv);\n this.showLevel = new NumericTextBox({ format: '#', value: 3, min: 1, max: 9, width: 210, change: this.changeShowLevelValue });\n this.showLevel.appendTo(showLevel);\n // tslint:disable-next-line:max-line-length\n var buildTableDiv = createElement('div', { id: 'buildTable_div', className: 'e-de-toc-dlg-sub-container' });\n // tslint:disable-next-line:max-line-length\n var buildTableLabel = createElement('div', { id: ownerId + '_buildTableLabel', className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-build-table', styles: 'margin-bottom: 13px;', innerHTML: locale.getConstant('Build table of contents from') + ':' });\n leftBottomGeneralDiv.appendChild(buildTableDiv);\n leftBottomGeneralDiv.appendChild(buildTableLabel);\n var style = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_style',\n });\n leftBottomGeneralDiv.appendChild(style);\n this.style = new CheckBox({ label: locale.getConstant('Styles'), checked: true, change: this.changeStyleValue });\n this.style.appendTo(style);\n var table = createElement('TABLE', { styles: 'margin-top:3px;' });\n var tr1 = createElement('tr');\n var td1 = createElement('td', { styles: 'width:120px;padding-left:10px;' });\n var availableLabel = createElement('label', {\n // tslint:disable-next-line:max-line-length\n innerHTML: locale.getConstant('Available styles'), className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading', id: this.target.id + '_availableLabel'\n });\n td1.appendChild(availableLabel);\n var td2 = createElement('td');\n var tocLabel = createElement('label', {\n innerHTML: locale.getConstant('TOC level') + ':', className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading',\n id: this.target.id + '_tocLabel'\n });\n td2.appendChild(tocLabel);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n table.appendChild(tr1);\n // tslint:disable-next-line:max-line-length\n var tableDiv = createElement('div', { id: 'table_div', className: 'e-de-toc-table-div' });\n var table1 = createElement('TABLE');\n var tr2 = createElement('tr');\n var td3 = createElement('td');\n var heading1Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 1',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading1Label'\n });\n td3.appendChild(heading1Label);\n var td4 = createElement('td');\n this.heading1 = createElement('input', { id: '_heading1', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading1.value = '1';\n this.heading1.addEventListener('keyup', this.changeStyle);\n td4.appendChild(this.heading1);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var heading2Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 2',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading2Label'\n });\n td5.appendChild(heading2Label);\n var td6 = createElement('td');\n this.heading2 = createElement('input', { id: '_heading2', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading2.value = '2';\n this.heading2.addEventListener('keyup', this.changeStyle);\n td6.appendChild(this.heading2);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n var tr4 = createElement('tr');\n var td7 = createElement('td');\n var heading3Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 3',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading3Label'\n });\n td7.appendChild(heading3Label);\n var td8 = createElement('td');\n this.heading3 = createElement('input', { id: '_heading3', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading3.value = '3';\n this.heading3.addEventListener('keyup', this.changeStyle);\n td8.appendChild(this.heading3);\n tr4.appendChild(td7);\n tr4.appendChild(td8);\n var tr5 = createElement('tr');\n var td9 = createElement('td');\n var heading4Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 4',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading4Label'\n });\n td9.appendChild(heading4Label);\n var td10 = createElement('td');\n this.heading4 = createElement('input', { id: '_heading4', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading4.addEventListener('keyup', this.changeStyle);\n td10.appendChild(this.heading4);\n tr5.appendChild(td9);\n tr5.appendChild(td10);\n var tr6 = createElement('tr');\n var td11 = createElement('td');\n var heading5Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 5',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading5Label'\n });\n td11.appendChild(heading5Label);\n var td12 = createElement('td');\n this.heading5 = createElement('input', { id: '_heading5', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading5.addEventListener('keyup', this.changeStyle);\n td12.appendChild(this.heading5);\n tr6.appendChild(td11);\n tr6.appendChild(td12);\n var tr7 = createElement('tr');\n var td13 = createElement('td');\n var heading6Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 6',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading6Label'\n });\n td13.appendChild(heading6Label);\n var td14 = createElement('td');\n this.heading6 = createElement('input', { id: '_heading6', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading6.addEventListener('keyup', this.changeStyle);\n td14.appendChild(this.heading6);\n tr7.appendChild(td13);\n tr7.appendChild(td14);\n var tr8 = createElement('tr');\n var td15 = createElement('td');\n var heading7Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 7',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading7Label'\n });\n td15.appendChild(heading7Label);\n var td16 = createElement('td');\n this.heading7 = createElement('input', { id: '_heading7', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading7.addEventListener('keyup', this.changeStyle);\n td16.appendChild(this.heading7);\n tr8.appendChild(td15);\n tr8.appendChild(td16);\n var tr9 = createElement('tr');\n var td17 = createElement('td');\n var heading8Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 8',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading8Label'\n });\n td17.appendChild(heading8Label);\n var td18 = createElement('td');\n this.heading8 = createElement('input', { id: '_heading8', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading8.addEventListener('keyup', this.changeStyle);\n td18.appendChild(this.heading8);\n tr9.appendChild(td17);\n tr9.appendChild(td18);\n var tr10 = createElement('tr');\n var td19 = createElement('td');\n var heading9Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 9',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading9Label'\n });\n td19.appendChild(heading9Label);\n var td20 = createElement('td');\n this.heading9 = createElement('input', { id: '_heading9', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading9.addEventListener('keyup', this.changeStyle);\n td20.appendChild(this.heading9);\n tr10.appendChild(td19);\n tr10.appendChild(td20);\n var tr12 = createElement('tr');\n var td23 = createElement('td');\n var normalLabel = createElement('label', {\n innerHTML: locale.getConstant('Normal'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_normalLabel'\n });\n td23.appendChild(normalLabel);\n var td24 = createElement('td');\n this.normal = createElement('input', { id: '_normal', className: 'e-input e-de-toc-dlg-toc-level' });\n this.normal.addEventListener('keyup', this.changeHeadingStyle);\n td24.appendChild(this.normal);\n tr12.appendChild(td23);\n tr12.appendChild(td24);\n table1.appendChild(tr2);\n table1.appendChild(tr3);\n table1.appendChild(tr4);\n table1.appendChild(tr5);\n table1.appendChild(tr6);\n table1.appendChild(tr7);\n table1.appendChild(tr8);\n table1.appendChild(tr9);\n table1.appendChild(tr10);\n table1.appendChild(tr12);\n tableDiv.appendChild(table1);\n var stylesLevelDiv = createElement('div', { className: 'e-de-toc-styles-table-div' });\n stylesLevelDiv.appendChild(table);\n stylesLevelDiv.appendChild(tableDiv);\n leftBottomGeneralDiv.appendChild(stylesLevelDiv);\n //leftBottomGeneralDiv.appendChild(table); leftBottomGeneralDiv.appendChild(tableDiv);\n var fieldsDiv = createElement('div', { id: 'fields_div', styles: 'display: flex;' });\n leftBottomGeneralDiv.appendChild(fieldsDiv);\n var outDiv = createElement('div', { id: 'out_div' });\n // tslint:disable-next-line:max-line-length\n var outlineDiv = createElement('div', { id: 'outline_div', className: 'e-de-toc-dlg-sub-container e-de-toc-dlg-outline-levels' });\n var outline = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: '_outline'\n });\n outlineDiv.appendChild(outline);\n outDiv.appendChild(outlineDiv);\n fieldsDiv.appendChild(outDiv);\n this.outline = new CheckBox({ label: locale.getConstant('Outline levels'), checked: true });\n this.outline.appendTo(outline);\n var resetButtonDiv = createElement('div', { className: 'e-de-toc-reset-button' });\n fieldsDiv.appendChild(resetButtonDiv);\n var resetElement = createElement('button', { innerHTML: 'Reset', id: 'reset' });\n resetButtonDiv.appendChild(resetElement);\n var resetButton = new Button({ cssClass: 'e-btn e-flat' });\n resetButton.appendTo(resetElement);\n resetElement.addEventListener('click', this.reset);\n // tslint:disable-next-line:max-line-length\n var tocStylesDiv = createElement('div', { id: 'tocStyles_div', className: 'e-de-toc-dlg-sub-container' });\n // tslint:disable-next-line:max-line-length\n var tocStylesLabel = createElement('div', {\n id: ownerId + '_tocStylesLabel', className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-styles',\n innerHTML: locale.getConstant('Styles') + ':'\n });\n rightBottomGeneralDiv.appendChild(tocStylesDiv);\n rightBottomGeneralDiv.appendChild(tocStylesLabel);\n var textBoxDiv = createElement('div', { className: 'e-de-toc-dlg-style-input' });\n rightBottomGeneralDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input', id: 'toclist' });\n this.textBoxInput.setAttribute('type', 'text');\n textBoxDiv.appendChild(this.textBoxInput);\n var listViewDiv = createElement('div', { className: 'e-de-toc-list-view' });\n var styleValues = ['TOC 1', 'TOC 2', 'TOC 3', 'TOC 4', 'TOC 5', 'TOC 6', 'TOC 7', 'TOC 8', 'TOC 9'];\n this.listViewInstance = new ListView({ dataSource: styleValues, cssClass: 'e-toc-list-view' });\n this.listViewInstance.appendTo(listViewDiv);\n this.listViewInstance.addEventListener('select', this.selectHandler);\n rightBottomGeneralDiv.appendChild(listViewDiv);\n var modifyButtonDiv = createElement('div', { className: 'e-de-toc-modify-button' });\n rightBottomGeneralDiv.appendChild(modifyButtonDiv);\n var modifyElement = createElement('button', { innerHTML: 'Modify', id: 'modify' });\n modifyButtonDiv.appendChild(modifyElement);\n var modifyButton = new Button({ cssClass: 'e-btn e-flat' });\n modifyButton.appendTo(modifyElement);\n modifyElement.addEventListener('click', this.showStyleDialog);\n };\n /**\n * @private\n */\n TableOfContentsDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTableOfContentDialog(localValue);\n }\n this.owner.dialog.header = localValue.getConstant('Table of Contents');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadTableofContentDialog;\n this.owner.dialog.close = this.closeTableOfContentDialog;\n this.owner.dialog.buttons = [{\n click: this.applyTableOfContentProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-toc-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-toc-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n TableOfContentsDialog.prototype.checkLevel = function () {\n if (this.heading1.value !== '') {\n this.showLevel.value = 1;\n }\n if (this.heading2.value !== '') {\n this.showLevel.value = 2;\n }\n if (this.heading3.value !== '') {\n this.showLevel.value = 3;\n }\n if (this.heading4.value !== '') {\n this.showLevel.value = 4;\n }\n if (this.heading5.value !== '') {\n this.showLevel.value = 5;\n }\n if (this.heading6.value !== '') {\n this.showLevel.value = 6;\n }\n if (this.heading7.value !== '') {\n this.showLevel.value = 7;\n }\n if (this.heading8.value !== '') {\n this.showLevel.value = 8;\n }\n if (this.heading9.value !== '') {\n this.showLevel.value = 9;\n }\n };\n TableOfContentsDialog.prototype.getElementValue = function (element) {\n switch (element) {\n case this.heading1:\n return '1';\n case this.heading2:\n return '2';\n case this.heading3:\n return '3';\n case this.heading4:\n return '4';\n case this.heading5:\n return '5';\n case this.heading6:\n return '6';\n case this.heading7:\n return '7';\n case this.heading8:\n return '8';\n case this.heading9:\n return '9';\n default:\n return '1';\n }\n };\n TableOfContentsDialog.prototype.getHeadingLevel = function (index) {\n switch (index) {\n case 1:\n return parseInt(this.heading1.value);\n case 2:\n return parseInt(this.heading2.value);\n case 3:\n return parseInt(this.heading3.value);\n case 4:\n return parseInt(this.heading4.value);\n case 5:\n return parseInt(this.heading5.value);\n case 6:\n return parseInt(this.heading6.value);\n case 7:\n return parseInt(this.heading7.value);\n case 8:\n return parseInt(this.heading8.value);\n case 9:\n return parseInt(this.heading9.value);\n default:\n return 0;\n }\n };\n TableOfContentsDialog.prototype.applyLevelSetting = function (tocSettings) {\n tocSettings.levelSettings = {};\n var headingPrefix = 'Heading ';\n var newStartLevel = 0;\n var newEndLevel = 0;\n var isEndLevel = false;\n for (var i = 1; i <= tocSettings.endLevel; i++) {\n var outlineLevel = this.getHeadingLevel(i);\n if (i === outlineLevel) {\n if (newStartLevel === 0) {\n newStartLevel = i;\n isEndLevel = false;\n }\n if (!isEndLevel) {\n newEndLevel = i;\n }\n }\n else {\n isEndLevel = true;\n if (outlineLevel !== 0) {\n var headingStyle = headingPrefix + i.toString();\n tocSettings.levelSettings[headingStyle] = outlineLevel;\n }\n }\n }\n tocSettings.startLevel = newStartLevel;\n tocSettings.endLevel = newEndLevel;\n if (this.normal.value !== '') {\n tocSettings.levelSettings['Normal'] = +this.normal.value;\n }\n };\n /**\n * @private\n */\n TableOfContentsDialog.prototype.destroy = function () {\n if (this.pageNumber) {\n this.pageNumber.destroy();\n this.pageNumber = undefined;\n }\n if (this.rightAlign) {\n this.rightAlign.destroy();\n this.rightAlign = undefined;\n }\n if (this.tabLeader) {\n this.tabLeader.destroy();\n this.tabLeader = undefined;\n }\n if (this.showLevel) {\n this.showLevel.destroy();\n this.showLevel = undefined;\n }\n if (this.hyperlink) {\n this.hyperlink.destroy();\n this.hyperlink = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.outline) {\n this.outline.destroy();\n this.outline = undefined;\n }\n if (this.listViewInstance) {\n this.listViewInstance.destroy();\n this.listViewInstance = undefined;\n }\n this.heading1 = undefined;\n this.heading2 = undefined;\n this.heading3 = undefined;\n this.heading4 = undefined;\n this.heading5 = undefined;\n this.heading6 = undefined;\n this.heading7 = undefined;\n this.heading8 = undefined;\n this.heading9 = undefined;\n this.normal = undefined;\n this.textBoxInput = undefined;\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var count = 0; count < this.target.childNodes.length; count++) {\n this.target.removeChild(this.target.childNodes[count]);\n count--;\n }\n this.target = undefined;\n }\n };\n return TableOfContentsDialog;\n}());\nexport { TableOfContentsDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WSectionFormat } from './../../implementation/format/index';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * The Page setup dialog is used to modify formatting of selected sections.\n */\nvar PageSetupDialog = /** @class */ (function () {\n /**\n * @private\n */\n function PageSetupDialog(viewer) {\n var _this = this;\n this.isPortrait = true;\n /**\n * @private\n */\n this.loadPageSetupDialog = function () {\n _this.owner.updateFocus();\n var sectionFormat = _this.owner.selection.sectionFormat;\n _this.topMarginBox.value = sectionFormat.topMargin;\n _this.leftMarginBox.value = sectionFormat.leftMargin;\n _this.bottomMarginBox.value = sectionFormat.bottomMargin;\n _this.rightMarginBox.value = sectionFormat.rightMargin;\n _this.widthBox.value = sectionFormat.pageWidth;\n _this.heightBox.value = sectionFormat.pageHeight;\n _this.checkBox1.checked = sectionFormat.differentOddAndEvenPages;\n _this.checkBox2.checked = sectionFormat.differentFirstPage;\n _this.headerBox.value = sectionFormat.headerDistance;\n _this.footerBox.value = sectionFormat.footerDistance;\n if (_this.widthBox.value > _this.heightBox.value) {\n _this.landscape.checked = true;\n }\n else {\n _this.portrait.checked = true;\n }\n };\n /**\n * @private\n */\n this.closePageSetupDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n */\n this.keyUpInsertPageSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyPageSetupProperties();\n }\n };\n /**\n * @private\n */\n this.applyPageSetupProperties = function () {\n var sectionFormat = new WSectionFormat();\n sectionFormat.bottomMargin = _this.bottomMarginBox.value;\n sectionFormat.topMargin = _this.topMarginBox.value;\n sectionFormat.leftMargin = _this.leftMarginBox.value;\n sectionFormat.rightMargin = _this.rightMarginBox.value;\n sectionFormat.pageWidth = _this.widthBox.value;\n sectionFormat.pageHeight = _this.heightBox.value;\n sectionFormat.differentOddAndEvenPages = _this.checkBox1.checked;\n sectionFormat.differentFirstPage = _this.checkBox2.checked;\n sectionFormat.headerDistance = _this.headerBox.value;\n sectionFormat.footerDistance = _this.footerBox.value;\n _this.owner.owner.editorModule.onApplySectionFormat(undefined, sectionFormat);\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.changeByPaperSize = function (event) {\n var value = event.value;\n var sectionFormat = _this.owner.selection.sectionFormat;\n var width = sectionFormat.pageWidth;\n var height = sectionFormat.pageHeight;\n if (_this.owner.selection.sectionFormat.pageWidth > _this.owner.selection.sectionFormat.pageHeight || _this.landscape.checked) {\n _this.isPortrait = false;\n }\n else {\n _this.isPortrait = true;\n }\n if (value === 'letter') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 792;\n }\n else {\n _this.widthBox.value = 792;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'tabloid') {\n if (_this.isPortrait) {\n _this.widthBox.value = 792;\n _this.heightBox.value = 1224;\n }\n else {\n _this.widthBox.value = 1224;\n _this.heightBox.value = 792;\n }\n }\n else if (value === 'legal') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 1008;\n }\n else {\n _this.widthBox.value = 1008;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'statement') {\n if (_this.isPortrait) {\n _this.widthBox.value = 392;\n _this.heightBox.value = 612;\n }\n else {\n _this.widthBox.value = 612;\n _this.heightBox.value = 392;\n }\n }\n else if (value === 'executive') {\n if (_this.isPortrait) {\n _this.widthBox.value = 522;\n _this.heightBox.value = 756;\n }\n else {\n _this.widthBox.value = 756;\n _this.heightBox.value = 522;\n }\n }\n else if (value === 'a3') {\n if (_this.isPortrait) {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 1190.55;\n }\n else {\n _this.widthBox.value = 1190.55;\n _this.heightBox.value = 841.9;\n }\n }\n else if (value === 'a4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 841.9;\n }\n else {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 595.3;\n }\n }\n else if (value === 'a5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 419.55;\n _this.heightBox.value = 595.3;\n }\n else {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 419.55;\n }\n }\n else if (value === 'b4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 1031.8;\n }\n else {\n _this.widthBox.value = 1031.8;\n _this.heightBox.value = 728.5;\n }\n }\n else if (value === 'b5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 515.9;\n _this.heightBox.value = 728.5;\n }\n else {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 515.9;\n }\n }\n else if (value === 'customsize') {\n if (_this.isPortrait) {\n _this.widthBox.value = 515.9;\n _this.heightBox.value = 728.5;\n }\n else {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 515.9;\n }\n }\n };\n /**\n * @private\n */\n this.onPortrait = function (event) {\n _this.landscape.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width > height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n */\n this.onLandscape = function (event) {\n _this.portrait.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width < height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n */\n this.unWireEventsAndBindings = function () {\n _this.paperSize.value = undefined;\n _this.topMarginBox.value = undefined;\n _this.bottomMarginBox.value = undefined;\n _this.leftMarginBox.value = undefined;\n _this.rightMarginBox.value = undefined;\n _this.headerBox.value = undefined;\n _this.footerBox.value = undefined;\n _this.widthBox.value = undefined;\n _this.heightBox.value = undefined;\n _this.checkBox1.checked = false;\n _this.checkBox2.checked = false;\n _this.portrait.checked = false;\n _this.landscape.checked = false;\n };\n this.owner = viewer;\n }\n PageSetupDialog.prototype.getModuleName = function () {\n return 'PageSetupDialog';\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initPageSetupDialog = function (locale) {\n var id = this.owner.owner.containerId + '_pagesetup_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-pagesetup-dlg-container' });\n this.owner.owner.element.appendChild(this.target);\n var ejtabContainer = createElement('div', { id: this.target.id + '_MarginTabContainer' });\n this.target.appendChild(ejtabContainer);\n this.marginTab = createElement('div', {\n id: this.target.id + '_marginPropertyTab', styles: 'position: relative;width:400px;'\n });\n this.paperTab = createElement('div', {\n id: this.target.id + '_paperSizePropertyTab', styles: 'position: relative;width:400px;'\n });\n this.layoutTab = createElement('div', {\n id: this.target.id + '_CellPropertiesDialogTab', styles: 'position: relative;width:400px;'\n });\n // tslint:disable-next-line:max-line-length\n var ejtab = createElement('div', { id: this.target.id + '_PageSetupDialogTab', className: 'e-de-page-setup-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var marginHeader = createElement('div', {\n id: this.target.id + '_marginHeader', innerHTML: locale.getConstant('Margin')\n });\n var paperHeader = createElement('div', {\n id: this.target.id + '_paperHeader', innerHTML: locale.getConstant('Paper')\n });\n var layoutHeader = createElement('div', {\n id: this.target.id + '_layoutHeader', innerHTML: locale.getConstant('Layout')\n });\n headerContainer.appendChild(marginHeader);\n headerContainer.appendChild(paperHeader);\n headerContainer.appendChild(layoutHeader);\n var contentContainer = createElement('div', { className: 'e-content' });\n var marginContent = createElement('div', { id: this.target.id + '_marginContent' });\n var paperContent = createElement('div', { id: this.target.id + '_paperContent' });\n var layoutContent = createElement('div', { id: this.target.id + '_layoutContent' });\n marginContent.appendChild(this.marginTab);\n paperContent.appendChild(this.paperTab);\n layoutContent.appendChild(this.layoutTab);\n contentContainer.appendChild(marginContent);\n contentContainer.appendChild(paperContent);\n contentContainer.appendChild(layoutContent);\n ejtab.appendChild(headerContainer);\n ejtab.appendChild(contentContainer);\n ejtabContainer.appendChild(ejtab);\n this.initMarginProperties(this.marginTab, locale);\n this.initPaperSizeProperties(this.paperTab, locale);\n this.initLayoutProperties(this.layoutTab, locale);\n var tabObj = new Tab({}, ejtab);\n this.target.addEventListener('keyup', this.keyUpInsertPageSettings);\n var marginTabHeader = tabObj.element.getElementsByClassName('e-item e-toolbar-item')[0];\n var marginTabHeaderItem = marginTabHeader.getElementsByClassName('e-tab-wrap')[0];\n marginTabHeaderItem.classList.add('e-de-page-setup-dlg-margin-tab-header');\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initMarginProperties = function (element, locale) {\n var marginDiv = createElement('div', {\n id: 'margin_div',\n className: 'e-de-page-setup-dlg-sub-container', styles: 'height:135px;'\n });\n // tslint:disable-next-line:max-line-length\n var leftMarginDiv = createElement('div', { id: 'left_margin', className: 'e-de-page-setup-dlg-left-sub-container' });\n marginDiv.appendChild(leftMarginDiv);\n // tslint:disable-next-line:max-line-length\n var rightMarginDiv = createElement('div', { className: 'e-de-page-setup-dlg-right-sub-container' });\n marginDiv.appendChild(rightMarginDiv);\n var topLabel = createElement('label', {\n innerHTML: locale.getConstant('Top'), className: 'e-de-page-setup-dlg-sub-header',\n id: this.target.id + '_TopLabel', styles: 'padding-top:0px;width:190px;'\n });\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_Top'\n });\n var bottomBoxLabel = createElement('label', {\n innerHTML: locale.getConstant('Bottom'),\n className: 'e-de-page-setup-dlg-sub-title-header', id: this.target.id + '_bottomLabel'\n });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n id: this.target.id + '_bottom'\n });\n leftMarginDiv.appendChild(topLabel);\n leftMarginDiv.appendChild(topTextBox);\n leftMarginDiv.appendChild(bottomBoxLabel);\n leftMarginDiv.appendChild(bottomTextBox);\n var leftBoxLabel = createElement('label', {\n innerHTML: locale.getConstant('Left'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;width:190px;',\n id: this.target.id + '_leftLabel'\n });\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_left'\n });\n var rightLabel = createElement('label', {\n innerHTML: locale.getConstant('Right'),\n id: this.target.id + '_rightLabel', className: 'e-de-page-setup-dlg-sub-title-header'\n });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n id: this.target.id + '_right'\n });\n rightMarginDiv.appendChild(leftBoxLabel);\n rightMarginDiv.appendChild(leftTextBox);\n rightMarginDiv.appendChild(rightLabel);\n rightMarginDiv.appendChild(rightTextBox);\n element.appendChild(marginDiv);\n this.topMarginBox = new NumericTextBox({ value: 71, width: 170, decimals: 2 });\n this.topMarginBox.appendTo(topTextBox);\n this.leftMarginBox = new NumericTextBox({ value: 73, width: 170, decimals: 2 });\n this.leftMarginBox.appendTo(leftTextBox);\n this.bottomMarginBox = new NumericTextBox({ value: 72, width: 170, decimals: 2 });\n this.bottomMarginBox.appendTo(bottomTextBox);\n this.rightMarginBox = new NumericTextBox({ value: 74, width: 170, decimals: 2 });\n this.rightMarginBox.appendTo(rightTextBox);\n // tslint:disable-next-line:max-line-length\n var orientationDiv = createElement('div', { id: 'orientation_div', className: 'e-de-page-setup-dlg-sub-container-port' });\n // tslint:disable-next-line:max-line-length\n var orientationLabeldiv = createElement('div', { id: '_orientationLabelDiv', className: 'e-de-page-setup-dlg-sub-label', innerHTML: locale.getConstant('Orientation') });\n var orientationPropDiv = createElement('div', { id: '_orientationPropDiv', styles: 'display: flex;', className: 'e-de-page-setup-dlg-orientation-prop' });\n var portraitDiv = createElement('div', { id: '_portraitDiv', styles: 'padding-right: 30px;' });\n var portrait = createElement('input', {\n attrs: { 'type': 'radiobutton' }, id: this.target.id + '_portrait'\n });\n var landscapeDiv = createElement('div', { id: '_landscapeDiv' });\n var landscape = createElement('input', {\n attrs: { 'type': 'radiobutton' }, id: this.target.id + '_landscape'\n });\n portraitDiv.appendChild(portrait);\n landscapeDiv.appendChild(landscape);\n orientationPropDiv.appendChild(portraitDiv);\n orientationPropDiv.appendChild(landscapeDiv);\n orientationDiv.appendChild(orientationLabeldiv);\n orientationDiv.appendChild(orientationPropDiv);\n this.portrait = new RadioButton({ label: locale.getConstant('Portrait'), checked: true, change: this.onPortrait });\n this.landscape = new RadioButton({ label: locale.getConstant('Landscape'), change: this.onLandscape });\n this.portrait.appendTo(portrait);\n this.landscape.appendTo(landscape);\n element.appendChild(orientationDiv);\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initPaperSizeProperties = function (element, locale) {\n var sizeDiv = createElement('div', {\n id: 'size_div',\n className: 'e-de-page-setup-dlg-sub-size-container'\n });\n // tslint:disable-next-line:max-line-length\n var leftSizeDiv = createElement('div', { id: 'left_size', className: 'e-de-page-setup-dlg-left-sub-container' });\n sizeDiv.appendChild(leftSizeDiv);\n // tslint:disable-next-line:max-line-length\n var rightSizeDiv = createElement('div', { className: 'e-de-page-setup-dlg-right-sub-container' });\n sizeDiv.appendChild(rightSizeDiv);\n var widthLabel = createElement('label', {\n innerHTML: locale.getConstant('Width'), className: 'e-de-page-setup-dlg-sub-header',\n id: this.target.id + '_widthLabel', styles: 'padding-top:0px;width:190px;'\n });\n var widthTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_Width'\n });\n leftSizeDiv.appendChild(widthLabel);\n leftSizeDiv.appendChild(widthTextBox);\n var heightLabel = createElement('label', {\n innerHTML: locale.getConstant('Height'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;width:190px;',\n id: this.target.id + '_heightLabel'\n });\n var heightTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_height'\n });\n rightSizeDiv.appendChild(heightLabel);\n rightSizeDiv.appendChild(heightTextBox);\n element.appendChild(sizeDiv);\n this.widthBox = new NumericTextBox({ value: 612, width: 170, decimals: 2 });\n this.widthBox.appendTo(widthTextBox);\n this.heightBox = new NumericTextBox({ value: 792, width: 170, decimals: 2 });\n this.heightBox.appendTo(heightTextBox);\n // tslint:disable-next-line:max-line-length\n var paperSizeDiv = createElement('div', { id: '_paperSizeDiv', styles: 'height:37px;', className: 'e-de-page-setup-dlg-sub-container' });\n var paperSize = createElement('select', {\n id: this.target.id + '_papersize', styles: 'width:170px;padding-bottom: 20px;',\n innerHTML: ''\n });\n paperSizeDiv.appendChild(paperSize);\n this.paperSize = new DropDownList({ change: this.changeByPaperSize, width: '170px' });\n this.paperSize.appendTo(paperSize);\n element.appendChild(paperSizeDiv);\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initLayoutProperties = function (element, locale) {\n // tslint:disable-next-line:max-line-length\n var layoutDiv = createElement('div', { id: '_layoutDiv', className: 'e-de-page-setup-dlg-layout-sub-container', });\n // tslint:disable-next-line:max-line-length\n var firstPageDiv = createElement('div', { id: '_firstPageDiv', styles: 'height: 27px;', className: 'e-de-page-setup-dlg-first-page-prop' });\n var checkBox1 = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_oddoreven'\n });\n firstPageDiv.appendChild(checkBox1);\n // tslint:disable-next-line:max-line-length\n var oddOrEvenDiv = createElement('div', { id: '_oddOrEvenDiv', styles: 'height: 27px;', className: 'e-de-page-setup-dlg-odd-or-even-prop' });\n var checkBox2 = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_even'\n });\n oddOrEvenDiv.appendChild(checkBox2);\n layoutDiv.appendChild(firstPageDiv);\n layoutDiv.appendChild(oddOrEvenDiv);\n this.checkBox1 = new CheckBox({ label: locale.getConstant('Different odd and even') });\n this.checkBox2 = new CheckBox({ label: locale.getConstant('Different first page') });\n this.checkBox1.appendTo(checkBox1);\n this.checkBox2.appendTo(checkBox2);\n element.appendChild(layoutDiv);\n // tslint:disable-next-line:max-line-length\n var textLabelDiv = createElement('div', { id: '_textLabelDiv', className: 'e-de-page-setup-dlg-sub-label' });\n var textLabel = createElement('label', {\n innerHTML: locale.getConstant('From edge'), id: this.target.id + '_textLabel'\n });\n textLabelDiv.appendChild(textLabel);\n element.appendChild(textLabelDiv);\n // tslint:disable-next-line:max-line-length\n var propertyDiv = createElement('div', { id: '_headerFooeterPropDiv', className: 'e-de-page-setup-dlg-sub-container', styles: 'height: 65px;' });\n // tslint:disable-next-line:max-line-length\n var leftLayoutDiv = createElement('div', { id: '_leftLayoutDiv', className: 'e-de-page-setup-dlg-left-layout-container' });\n propertyDiv.appendChild(leftLayoutDiv);\n // tslint:disable-next-line:max-line-length\n var rightLayoutDiv = createElement('div', { className: 'e-de-page-setup-dlg-right-layout-container' });\n propertyDiv.appendChild(rightLayoutDiv);\n var headerLabel = createElement('label', {\n innerHTML: locale.getConstant('Header'), className: 'e-de-page-setup-dlg-sub-header',\n id: this.target.id + '_headerLabel', styles: 'padding-top:0px;width:190px;'\n });\n var headerBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_header'\n });\n leftLayoutDiv.appendChild(headerLabel);\n leftLayoutDiv.appendChild(headerBox);\n var footerLabel = createElement('label', {\n innerHTML: locale.getConstant('Footer'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;width:190px;',\n id: this.target.id + '_footerLabel'\n });\n var footerBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_footer'\n });\n rightLayoutDiv.appendChild(footerLabel);\n rightLayoutDiv.appendChild(footerBox);\n element.appendChild(propertyDiv);\n this.headerBox = new NumericTextBox({ value: 612, width: 170, decimals: 2 });\n this.headerBox.appendTo(headerBox);\n this.footerBox = new NumericTextBox({ value: 792, width: 170, decimals: 2 });\n this.footerBox.appendTo(footerBox);\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initPageSetupDialog(localValue);\n }\n this.owner.dialog.header = localValue.getConstant('Page Setup');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadPageSetupDialog;\n this.owner.dialog.close = this.closePageSetupDialog;\n this.owner.dialog.buttons = [{\n click: this.applyPageSetupProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-layout-ppty-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-layout-ppty-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.destroy = function () {\n if (this.topMarginBox) {\n this.topMarginBox.destroy();\n this.topMarginBox = undefined;\n }\n if (this.leftMarginBox) {\n this.leftMarginBox.destroy();\n this.leftMarginBox = undefined;\n }\n if (this.bottomMarginBox) {\n this.bottomMarginBox.destroy();\n this.bottomMarginBox = undefined;\n }\n if (this.rightMarginBox) {\n this.rightMarginBox.destroy();\n this.rightMarginBox = undefined;\n }\n if (this.headerBox) {\n this.headerBox.destroy();\n this.headerBox = undefined;\n }\n if (this.footerBox) {\n this.footerBox.destroy();\n this.footerBox = undefined;\n }\n if (this.widthBox) {\n this.widthBox.destroy();\n this.widthBox = undefined;\n }\n if (this.heightBox) {\n this.heightBox.destroy();\n this.heightBox = undefined;\n }\n if (this.paperSize) {\n this.paperSize.destroy();\n this.paperSize = undefined;\n }\n if (this.checkBox1) {\n this.checkBox1.destroy();\n this.checkBox1 = undefined;\n }\n if (this.checkBox2) {\n this.checkBox2.destroy();\n this.checkBox2 = undefined;\n }\n if (this.portrait) {\n this.portrait.destroy();\n this.portrait = undefined;\n }\n if (this.landscape) {\n this.landscape.destroy();\n this.landscape = undefined;\n }\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[s]);\n s--;\n }\n this.target = undefined;\n }\n };\n return PageSetupDialog;\n}());\nexport { PageSetupDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { WParagraphFormat } from '../index';\n/**\n * The Paragraph dialog is used to modify formatting of selected paragraphs.\n */\nvar ParagraphDialog = /** @class */ (function () {\n /**\n * @private\n */\n function ParagraphDialog(viewer) {\n var _this = this;\n //paragraph Format properties\n this.leftIndent = undefined;\n this.rightIndent = undefined;\n this.beforeSpacing = undefined;\n this.afterSpacing = undefined;\n this.textAlignment = undefined;\n this.firstLineIndent = undefined;\n this.lineSpacingIn = undefined;\n this.lineSpacingType = undefined;\n this.paragraphFormat = undefined;\n /**\n * @private\n */\n this.keyUpParagraphSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyParagraphFormat();\n }\n };\n this.changeBeforeSpacing = function (event) {\n _this.beforeSpacing = event.value;\n };\n this.changeAfterSpacing = function (event) {\n _this.afterSpacing = event.value;\n };\n this.changeLeftIndent = function (event) {\n _this.leftIndent = event.value;\n };\n this.changeRightIndent = function (event) {\n _this.rightIndent = event.value;\n };\n this.changeLineSpacingValue = function (event) {\n _this.lineSpacingIn = event.value;\n };\n this.changeFirstLineIndent = function (event) {\n _this.firstLineIndent = event.value;\n };\n this.changeByTextAlignment = function (args) {\n _this.textAlignment = args.value;\n };\n /**\n * @private\n */\n this.changeByValue = function (event) {\n var paragraphFormat = _this.owner.selection.paragraphFormat;\n switch (_this.special.index) {\n case 0:\n if (paragraphFormat.firstLineIndent !== 0) {\n _this.byIn.value = 0;\n }\n break;\n case 1:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n _this.byIn.value = 0.1;\n }\n else if (paragraphFormat.firstLineIndent < 0) {\n _this.byIn.value = -(paragraphFormat.firstLineIndent);\n }\n break;\n case 2:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = -0.1;\n }\n else if (paragraphFormat.firstLineIndent > 0) {\n _this.byIn.value = -(paragraphFormat.firstLineIndent);\n }\n break;\n }\n };\n /**\n * @private\n */\n this.changeBySpacing = function (event) {\n if (isNullOrUndefined(_this.lineSpacing)) {\n return;\n }\n switch (_this.lineSpacing.index) {\n case 0:\n _this.lineSpacingType = 'AtLeast';\n _this.atIn.value = 12;\n break;\n case 1:\n _this.lineSpacingType = 'Exactly';\n _this.atIn.value = 12;\n break;\n case 2:\n _this.lineSpacingType = 'Multiple';\n _this.atIn.value = 1;\n break;\n }\n };\n /* tslint:enable */\n /**\n * @private\n */\n this.loadParagraphDialog = function () {\n var selectionFormat;\n if (_this.paragraphFormat) {\n selectionFormat = _this.paragraphFormat;\n }\n else {\n selectionFormat = _this.owner.selection.paragraphFormat;\n }\n var alignValue = _this.alignment.index;\n if (selectionFormat.textAlignment === 'Center') {\n alignValue = 0;\n }\n else if (selectionFormat.textAlignment === 'Left') {\n alignValue = 1;\n }\n else if (selectionFormat.textAlignment === 'Right') {\n alignValue = 2;\n }\n else {\n alignValue = 3;\n }\n _this.alignment.index = alignValue;\n _this.beforeSpacingIn.value = selectionFormat.beforeSpacing;\n _this.afterSpacingIn.value = selectionFormat.afterSpacing;\n _this.leftIndentIn.value = selectionFormat.leftIndent;\n _this.rightIndentIn.value = selectionFormat.rightIndent;\n _this.byIn.value = selectionFormat.firstLineIndent;\n var lineSpaceValue = _this.lineSpacing.index;\n if (selectionFormat.lineSpacingType === 'AtLeast') {\n lineSpaceValue = 0;\n }\n else if (selectionFormat.lineSpacingType === 'Exactly') {\n lineSpaceValue = 1;\n }\n else {\n lineSpaceValue = 2;\n }\n _this.lineSpacing.index = lineSpaceValue;\n _this.atIn.value = selectionFormat.lineSpacing;\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n */\n this.applyParagraphFormat = function () {\n var paraFormat;\n var isApply;\n if (_this.paragraphFormat) {\n paraFormat = _this.paragraphFormat;\n isApply = false;\n }\n else {\n paraFormat = new WParagraphFormat();\n isApply = true;\n }\n if (!isNullOrUndefined(_this.beforeSpacing)) {\n paraFormat.beforeSpacing = _this.beforeSpacing;\n }\n if (!isNullOrUndefined(_this.afterSpacing)) {\n paraFormat.afterSpacing = _this.afterSpacing;\n }\n if (!isNullOrUndefined(_this.lineSpacingType)) {\n paraFormat.lineSpacingType = _this.lineSpacingType;\n }\n if (!isNullOrUndefined(_this.leftIndent)) {\n paraFormat.leftIndent = _this.leftIndent;\n }\n if (!isNullOrUndefined(_this.rightIndent)) {\n paraFormat.rightIndent = _this.rightIndent;\n }\n if (!isNullOrUndefined(_this.lineSpacingIn)) {\n paraFormat.lineSpacing = _this.lineSpacingIn;\n }\n if (!isNullOrUndefined(_this.firstLineIndent)) {\n paraFormat.firstLineIndent = _this.firstLineIndent;\n }\n if (!isNullOrUndefined(_this.textAlignment)) {\n paraFormat.textAlignment = _this.textAlignment;\n }\n if (isApply) {\n _this.onParagraphFormat(paraFormat);\n }\n else {\n _this.owner.owner.styleDialogModule.updateParagraphFormat();\n }\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.closeParagraphDialog = function () {\n _this.leftIndent = undefined;\n _this.afterSpacing = undefined;\n _this.beforeSpacing = undefined;\n _this.firstLineIndent = undefined;\n _this.textAlignment = undefined;\n _this.rightIndent = undefined;\n _this.lineSpacingIn = undefined;\n _this.lineSpacingType = undefined;\n _this.paragraphFormat = undefined;\n _this.owner.dialog.hide();\n _this.owner.updateFocus();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n ParagraphDialog.prototype.getModuleName = function () {\n return 'ParagraphDialog';\n };\n /*tslint:disable max-func-body-length*/\n /**\n * @private\n */\n ParagraphDialog.prototype.initParagraphDialog = function (locale) {\n var instance = this;\n var ownerId = this.owner.owner.containerId;\n var id = ownerId + '_paragraph_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-para-dlg-container' });\n // tslint:disable-next-line:max-line-length\n var div = createElement('div', { id: 'property_div', styles: 'width:400px;' });\n var generalDiv = createElement('div', { id: 'genral_div', styles: 'width:200px;height:85px;', className: 'e-de-para-dlg-sub-container' });\n // tslint:disable-next-line:max-line-length\n var genLabel = createElement('div', { id: ownerId + '_genLabel', className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('General') });\n var alignLabel = createElement('div', { id: ownerId + '_AlignLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Alignment') });\n var alignment = createElement('select', {\n id: ownerId + '_Alignment',\n innerHTML: ''\n });\n generalDiv.appendChild(genLabel);\n generalDiv.appendChild(alignLabel);\n generalDiv.appendChild(alignment);\n // tslint:disable-next-line:max-line-length\n var indentionDiv = createElement('div', { id: 'indention_div', styles: 'width: 400px;height: 150px;', className: 'e-de-para-dlg-sub-container' });\n var leftIndentionDiv = createElement('div', { id: 'left_indention', styles: 'float:left;position:relative;' });\n indentionDiv.appendChild(leftIndentionDiv);\n // tslint:disable-next-line:max-line-length\n var rightIndentionDiv = createElement('div', { className: 'e-de-para-dlg-right-sub-container', styles: 'float:right;position:relative;' });\n indentionDiv.appendChild(rightIndentionDiv);\n // tslint:disable-next-line:max-line-length\n var spacingDiv = createElement('div', { id: 'spacing_div', styles: 'width: 400px;height: 150px;', className: 'e-de-para-dlg-sub-container' });\n var leftSpacingDiv = createElement('div', { id: 'left_spacing', styles: 'float:left;position:relative;' });\n spacingDiv.appendChild(leftSpacingDiv);\n // tslint:disable-next-line:max-line-length\n var rightSpacingDiv = createElement('div', { className: 'e-de-para-dlg-right-sub-container', styles: 'float:right;position:relative;' });\n spacingDiv.appendChild(rightSpacingDiv);\n // tslint:disable-next-line:max-line-length\n var indentLabel = createElement('div', {\n id: ownerId + '_indentLabel', className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Indentation')\n });\n var beforeTextLabel = createElement('div', {\n id: ownerId + '_bfTextLabel',\n className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Before text')\n });\n // tslint:disable-next-line:max-line-length\n var leftIndent = createElement('input', { id: ownerId + '_leftIndent', attrs: { 'type': 'text' } });\n var specialLabel = createElement('div', { id: ownerId + '_specialLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Special') });\n var special = createElement('select', {\n id: ownerId + '_special',\n innerHTML: ' '\n });\n leftIndentionDiv.appendChild(indentLabel);\n leftIndentionDiv.appendChild(beforeTextLabel);\n leftIndentionDiv.appendChild(leftIndent);\n leftIndentionDiv.appendChild(specialLabel);\n leftIndentionDiv.appendChild(special);\n // tslint:disable-next-line:max-line-length\n var afterTextLabel = createElement('div', { id: ownerId + '_afTextLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('After text') });\n var rightIndent = createElement('input', { id: ownerId + '_rightIndent', attrs: { 'type': 'text' } });\n // tslint:disable-next-line:max-line-length\n var byLabel = createElement('label', { id: ownerId + '_byLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('By') });\n var by = createElement('input', { id: ownerId + '_By', attrs: { 'type': 'text' } });\n rightIndentionDiv.appendChild(afterTextLabel);\n rightIndentionDiv.appendChild(rightIndent);\n rightIndentionDiv.appendChild(byLabel);\n rightIndentionDiv.appendChild(by);\n // tslint:disable-next-line:max-line-length\n var spaceLabel = createElement('div', { innerHTML: locale.getConstant('Spacing'), className: 'e-de-para-dlg-heading', id: ownerId + '_spaceLabel' });\n var beforeLabel = createElement('div', { className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Before'), id: ownerId + '_beforeLabel' });\n // tslint:disable-next-line:max-line-length\n var beforeSpacing = createElement('input', { id: ownerId + '_beforeSpacing', attrs: { 'type': 'text' } });\n var lineSpaceLabel = createElement('div', { id: ownerId + '_lineSpaceLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Line Spacing') });\n // tslint:disable-next-line:max-line-length\n var lineSpacing = createElement('select', {\n id: ownerId + '_lineSpacing', styles: 'width:180px;',\n innerHTML: ''\n });\n leftSpacingDiv.appendChild(spaceLabel);\n leftSpacingDiv.appendChild(beforeLabel);\n leftSpacingDiv.appendChild(beforeSpacing);\n leftSpacingDiv.appendChild(lineSpaceLabel);\n leftSpacingDiv.appendChild(lineSpacing);\n // tslint:disable-next-line:max-line-length\n var afterLabel = createElement('div', { innerHTML: locale.getConstant('After'), className: 'e-de-dlg-sub-header', id: ownerId + '_afterLabel' });\n var afterSpacing = createElement('input', { id: ownerId + '_afterSpacing', attrs: { 'type': 'text' } });\n // tslint:disable-next-line:max-line-length\n var atLabel = createElement('div', { innerHTML: locale.getConstant('At'), id: ownerId + '_atLabel', className: 'e-de-dlg-sub-header' });\n var lineSpacingAt = createElement('input', { id: ownerId + '_lineSpacingAt', attrs: { 'type': 'text' } });\n rightSpacingDiv.appendChild(afterLabel);\n rightSpacingDiv.appendChild(afterSpacing);\n rightSpacingDiv.appendChild(atLabel);\n rightSpacingDiv.appendChild(lineSpacingAt);\n div.appendChild(generalDiv);\n div.appendChild(indentionDiv);\n div.appendChild(spacingDiv);\n this.target.appendChild(div);\n this.leftIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, width: 180, enablePersistence: false, change: this.changeLeftIndent\n });\n this.leftIndentIn.appendTo(leftIndent);\n this.rightIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, width: 180, enablePersistence: false, change: this.changeRightIndent\n });\n this.rightIndentIn.appendTo(rightIndent);\n this.byIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, width: 180, enablePersistence: false, change: this.changeFirstLineIndent\n });\n this.byIn.appendTo(by);\n this.beforeSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, width: 180, step: 6, enablePersistence: false,\n change: this.changeBeforeSpacing\n });\n this.beforeSpacingIn.appendTo(beforeSpacing);\n this.afterSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, width: 180, step: 6, enablePersistence: false,\n change: this.changeAfterSpacing\n });\n this.afterSpacingIn.appendTo(afterSpacing);\n this.atIn = new NumericTextBox({\n format: 'n1', value: 0, min: 1, max: 1584, width: 180, step: 0.5, enablePersistence: false, change: this.changeLineSpacingValue\n });\n this.special = new DropDownList({ change: this.changeByValue, width: 180 });\n this.special.appendTo(special);\n this.lineSpacing = new DropDownList({ change: this.changeBySpacing, width: '180px' });\n this.lineSpacing.appendTo(lineSpacing);\n this.alignment = new DropDownList({ width: 180, change: this.changeByTextAlignment });\n this.alignment.appendTo(alignment);\n this.atIn.appendTo(lineSpacingAt);\n this.target.addEventListener('keyup', instance.keyUpParagraphSettings);\n };\n /**\n * Applies Paragraph Format\n * @param {WParagraphFormat} paragraphFormat\n * @private\n */\n ParagraphDialog.prototype.onParagraphFormat = function (paragraphFormat) {\n this.owner.owner.editorModule.initHistory('ParagraphFormat');\n var selection = this.owner.selection;\n this.owner.owner.isShiftingEnabled = true;\n if (this.owner.selection.isEmpty) {\n this.owner.owner.editorModule.applyParaFormatProperty(selection.start.paragraph, undefined, paragraphFormat, false);\n this.owner.owner.editor.layoutItemBlock(selection.start.paragraph, false);\n }\n else {\n this.owner.owner.editorModule.updateSelectionParagraphFormatting('ParagraphFormat', paragraphFormat, false);\n }\n this.owner.owner.editorModule.reLayout(selection);\n };\n /**\n * @private\n */\n ParagraphDialog.prototype.show = function (paragraphFormat) {\n if (paragraphFormat) {\n this.paragraphFormat = paragraphFormat;\n }\n var local = new L10n('documenteditor', this.owner.owner.defaultLocale);\n local.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initParagraphDialog(local);\n }\n this.loadParagraphDialog();\n this.owner.dialog.header = 'Paragraph';\n this.owner.dialog.content = this.target;\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.buttons = [{\n click: this.applyParagraphFormat,\n buttonModel: { content: local.getConstant('Ok'), cssClass: 'e-flat e-para-okay', isPrimary: true }\n },\n {\n click: this.closeParagraphDialog,\n buttonModel: { content: local.getConstant('Cancel'), cssClass: 'e-flat e-para-cancel' }\n }];\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n ParagraphDialog.prototype.destroy = function () {\n if (this.afterSpacingIn) {\n this.afterSpacingIn.destroy();\n this.afterSpacingIn = undefined;\n }\n if (this.beforeSpacingIn) {\n this.beforeSpacingIn.destroy();\n this.beforeSpacingIn = undefined;\n }\n if (this.leftIndentIn) {\n this.leftIndentIn.destroy();\n this.leftIndentIn = undefined;\n }\n if (this.rightIndentIn) {\n this.rightIndentIn.destroy();\n this.rightIndentIn = undefined;\n }\n if (this.byIn) {\n this.byIn.destroy();\n this.byIn = undefined;\n }\n if (this.atIn) {\n this.atIn.destroy();\n this.atIn = undefined;\n }\n if (this.alignment) {\n this.alignment.change = undefined;\n this.alignment.destroy();\n }\n this.alignment = undefined;\n if (this.lineSpacing) {\n this.lineSpacing.change = undefined;\n this.lineSpacing.destroy();\n }\n this.lineSpacing = undefined;\n if (this.special) {\n this.special.change = undefined;\n this.special.destroy();\n }\n this.special = undefined;\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var q = 0; q < this.target.childNodes.length; q++) {\n this.target.removeChild(this.target.childNodes[q]);\n q--;\n }\n this.target = undefined;\n }\n };\n return ParagraphDialog;\n}());\nexport { ParagraphDialog };\n","import { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * List view model implementation\n * @private\n */\nvar ListViewModel = /** @class */ (function () {\n /**\n * @private\n */\n function ListViewModel() {\n this.listIn = undefined;\n this.levelNumberIn = undefined;\n /**\n * @private\n */\n this.dialog = undefined;\n this.levelNumber = 0;\n }\n Object.defineProperty(ListViewModel.prototype, \"levelNumber\", {\n /**\n * @private\n */\n get: function () {\n return this.levelNumberIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.levelNumberIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"list\", {\n /**\n * @private\n */\n get: function () {\n return this.listIn;\n },\n /**\n * @private\n */\n set: function (value) {\n if (isNullOrUndefined(value)) {\n this.createList();\n }\n else {\n this.listIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevel\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.list) && this.levelNumber >= 0 && this.levelNumber < 9) {\n if (!isNullOrUndefined(this.dialog.owner.getAbstractListById(this.list.abstractListId))) {\n if (this.dialog.owner.getAbstractListById(this.list.abstractListId).levels.length <= this.levelNumber) {\n this.addListLevels();\n }\n return this.dialog.owner.getAbstractListById(this.list.abstractListId).levels[this.levelNumber];\n }\n else {\n this.dialog.owner.lists.push(this.list);\n var abstractList = this.list.abstractList;\n if (!this.list.abstractList) {\n abstractList = new WAbstractList();\n abstractList.abstractListId = this.list.abstractListId;\n }\n var listLevelAdv = new WListLevel(abstractList);\n listLevelAdv.characterFormat = new WCharacterFormat(listLevelAdv);\n listLevelAdv.paragraphFormat = new WParagraphFormat(listLevelAdv);\n listLevelAdv.paragraphFormat.leftIndent = (1) * 48;\n listLevelAdv.paragraphFormat.firstLineIndent = -24;\n listLevelAdv.numberFormat = '%' + (1).toString() + '.';\n listLevelAdv.listLevelPattern = 'UpRoman';\n listLevelAdv.followCharacter = 'Tab';\n listLevelAdv.startAt = 1;\n listLevelAdv.restartLevel = 1;\n this.dialog.owner.abstractLists.push(abstractList);\n return this.dialog.owner.getAbstractListById(this.list.abstractListId).levels[0];\n // return this.dialog.owner.getAbstractListById(this.list.abstractListId).levels.getItem(0);\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevelPattern\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.listLevelPattern;\n }\n return 'Arabic';\n },\n /**\n * @private\n */\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.listLevelPattern = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"followCharacter\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.followCharacter;\n }\n return 'None';\n },\n /**\n * @private\n */\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.followCharacter = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n ListViewModel.prototype.createList = function () {\n this.list = new WList();\n this.list.listId = this.dialog.owner.lists.length + 1;\n var abstractList = new WAbstractList();\n abstractList.abstractListId = this.dialog.owner.abstractLists.length + 1;\n this.list.abstractListId = abstractList.abstractListId;\n this.dialog.owner.lists.push(this.list);\n var listLevel = new WListLevel(abstractList);\n listLevel.paragraphFormat = new WParagraphFormat(listLevel);\n listLevel.paragraphFormat.leftIndent = 48;\n listLevel.paragraphFormat.firstLineIndent = -24;\n listLevel.characterFormat = new WCharacterFormat(listLevel);\n listLevel.numberFormat = '%1.';\n listLevel.startAt = 1;\n abstractList.levels.push(listLevel);\n this.dialog.owner.abstractLists.push(abstractList);\n };\n ListViewModel.prototype.addListLevels = function () {\n if (!isNullOrUndefined(this.list) && !isNullOrUndefined(this.list.abstractListId)) {\n for (var i = this.dialog.owner.getAbstractListById(this.list.abstractListId).levels.length; i < 9; i++) {\n var listLevelAdv = new WListLevel(this.dialog.owner.getAbstractListById(this.list.abstractListId));\n listLevelAdv.characterFormat = new WCharacterFormat(listLevelAdv);\n listLevelAdv.paragraphFormat = new WParagraphFormat(listLevelAdv);\n listLevelAdv.paragraphFormat.leftIndent = (i + 1) * 48;\n listLevelAdv.paragraphFormat.firstLineIndent = -24;\n listLevelAdv.numberFormat = '%' + (i + 1).toString() + '.';\n listLevelAdv.listLevelPattern = 'Arabic';\n listLevelAdv.followCharacter = 'Tab';\n listLevelAdv.startAt = 1;\n listLevelAdv.restartLevel = i;\n (this.dialog.owner).getAbstractListById(this.list.abstractListId).levels.push(listLevelAdv);\n }\n }\n };\n /**\n * @private\n */\n ListViewModel.prototype.destroy = function () {\n this.list = undefined;\n this.followCharacter = undefined;\n this.levelNumber = undefined;\n this.listLevelPattern = undefined;\n };\n return ListViewModel;\n}());\nexport { ListViewModel };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n// tslint:disable-next-line:max-line-length\nimport { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { ListViewModel } from './list-view-model';\n/**\n * The List dialog is used to create or modify lists.\n */\n/* tslint:disable:no-any */\nvar ListDialog = /** @class */ (function () {\n /**\n * @private\n */\n function ListDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.dialog = undefined;\n this.target = undefined;\n /**\n * @private\n */\n this.owner = undefined;\n this.viewModel = undefined;\n this.startAt = undefined;\n this.textIndent = undefined;\n this.alignedAt = undefined;\n this.listLevelElement = undefined;\n this.followNumberWith = undefined;\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n this.restartBy = undefined;\n /**\n * @private\n */\n this.isListCharacterFormat = false;\n this.onTextIndentChanged = function (args) {\n _this.viewModel.listLevel.paragraphFormat.leftIndent = args.value;\n };\n this.onStartValueChanged = function (args) {\n _this.viewModel.listLevel.startAt = args.value;\n };\n this.onListLevelValueChanged = function (args) {\n _this.viewModel.levelNumber = parseInt(args.value.slice(args.value.length - 1), 10) - 1;\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n if (isNullOrUndefined(_this.listLevel.characterFormat)) {\n _this.listLevel.characterFormat = new WCharacterFormat(_this.viewModel.listLevel);\n }\n if (!isNullOrUndefined(_this.listLevel.paragraphFormat)) {\n _this.listLevel.paragraphFormat = new WParagraphFormat(_this.viewModel.listLevel);\n }\n _this.updateDialogValues();\n _this.updateRestartLevelBox();\n };\n this.onNumberFormatChanged = function (args) {\n _this.viewModel.listLevel.numberFormat = args.target.value;\n };\n this.onAlignedAtValueChanged = function (args) {\n _this.viewModel.listLevel.paragraphFormat.firstLineIndent = args.value;\n };\n this.onFollowCharacterValueChanged = function (args) {\n if (args.value) {\n _this.viewModel.followCharacter = args.value;\n }\n };\n this.onLevelPatternValueChanged = function (args) {\n _this.viewModel.listLevelPattern = args.value;\n var numberFormat = '%' + (_this.levelNumber + 1).toString();\n // tslint:disable-next-line:max-line-length\n var numberFormatTextBox = document.getElementById(_this.owner.owner.containerId + '_numberFormat');\n if (_this.listLevel.listLevelPattern === 'Bullet') {\n _this.listLevel.numberFormat = '\\uf0b7';\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n _this.listLevel.characterFormat.fontFamily = 'Wingdings';\n }\n else {\n if (_this.listLevel.listLevelPattern === 'None') {\n _this.listLevel.numberFormat = '';\n }\n if (!_this.listLevel.numberFormat.match(numberFormat) && _this.listLevel.listLevelPattern !== 'None') {\n _this.listLevel.numberFormat = numberFormat + '.';\n }\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n }\n };\n this.loadListDialog = function () {\n _this.owner.updateFocus();\n if (isNullOrUndefined(_this.owner.owner)) {\n return;\n }\n _this.viewModel = new ListViewModel();\n _this.viewModel.dialog = _this;\n if (_this.owner.selection.paragraphFormat.listLevelNumber > 0) {\n _this.viewModel.levelNumber = _this.owner.selection.paragraphFormat.listLevelNumber;\n }\n _this.viewModel.list = _this.owner.selection.paragraphFormat.getList();\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n if (isNullOrUndefined(_this.listLevel.characterFormat)) {\n _this.listLevel.characterFormat = new WCharacterFormat(_this.viewModel.listLevel);\n }\n if (isNullOrUndefined(_this.listLevel.paragraphFormat)) {\n _this.listLevel.paragraphFormat = new WParagraphFormat(_this.viewModel.listLevel);\n }\n _this.updateDialogValues();\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n this.showFontDialog = function () {\n _this.owner.owner.fontDialogModule.showFontDialog(_this.listLevel.characterFormat);\n };\n this.onApplyList = function () {\n if (!isNullOrUndefined(_this.owner)) {\n _this.owner.selection.paragraphFormat.setList(_this.list);\n }\n _this.owner.dialog2.hide();\n _this.owner.updateFocus();\n };\n this.onCancelButtonClick = function () {\n _this.disposeBindingForListUI();\n _this.owner.dialog2.hide();\n _this.owner.updateFocus();\n _this.isListCharacterFormat = false;\n };\n this.closeListDialog = function () {\n _this.disposeBindingForListUI();\n _this.owner.updateFocus();\n _this.isListCharacterFormat = false;\n };\n this.owner = viewer;\n this.viewModel = new ListViewModel();\n }\n Object.defineProperty(ListDialog.prototype, \"listLevel\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.listLevel;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"list\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.list;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"levelNumber\", {\n /**\n * @private\n */\n get: function () {\n if (this.listLevel.ownerBase instanceof WLevelOverride) {\n return this.listLevel.ownerBase.levelNumber;\n // tslint:disable-next-line:max-line-length\n }\n else if (this.listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(this.listLevel.ownerBase.levels)) {\n return this.listLevel.ownerBase.levels.indexOf(this.listLevel);\n }\n else {\n return -1;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ListDialog.prototype.getModuleName = function () {\n return 'ListDialog';\n };\n /**\n * @private\n */\n ListDialog.prototype.showListDialog = function () {\n var locale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n locale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initListDialog(locale);\n }\n this.isListCharacterFormat = true;\n this.owner.dialog2.header = locale.getConstant('Define new Multilevel list');\n this.owner.dialog2.height = 'auto';\n this.owner.dialog2.width = 'auto';\n this.owner.dialog2.content = this.target;\n this.owner.dialog2.buttons = [{\n click: this.showFontDialog,\n buttonModel: { content: locale.getConstant('Font'), cssClass: 'e-flat e-list-dlg-font e-font' }\n }, {\n click: this.onApplyList,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-list-dlg', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-list-dlg' }\n }];\n this.owner.dialog2.dataBind();\n this.owner.dialog2.beforeOpen = this.loadListDialog;\n this.owner.dialog2.close = this.closeListDialog;\n this.owner.dialog2.position = { X: 'center', Y: 'top' };\n this.owner.dialog2.show();\n };\n /**\n * Shows the table properties dialog\n * @private\n */\n ListDialog.prototype.initListDialog = function (locale) {\n var instance = this;\n var containerId = this.owner.owner.containerId;\n var id = containerId + '_insert_list';\n this.target = createElement('div', { id: id, className: 'e-de-list-dlg' });\n this.owner.owner.element.appendChild(this.target);\n // tslint:disable-next-line:max-line-length\n var listLevelDiv = createElement('div', { innerHTML: '' });\n this.target.appendChild(listLevelDiv);\n var div = createElement('div');\n // tslint:disable-next-line:max-line-length\n var numberStyleDiv = createElement('div', { innerHTML: '
    ' });\n div.appendChild(numberStyleDiv);\n // tslint:disable-next-line:max-line-length\n var numberFormatDiv = createElement('div', { className: 'e-de-list-dlg-subdiv', innerHTML: '
    ' });\n div.appendChild(numberFormatDiv);\n this.target.appendChild(div);\n // tslint:disable-next-line:max-line-length\n var indentsDiv = createElement('div', { innerHTML: '
    ', });\n this.target.appendChild(indentsDiv);\n var startAtTextBox = document.getElementById(containerId + '_startAt');\n var textIndentAtTextBox = document.getElementById(containerId + '_textIndent');\n var alignedAtTextBox = document.getElementById(containerId + '_alignedAt');\n this.startAt = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 50,\n width: '180px',\n enablePersistence: false,\n });\n this.startAt.addEventListener('change', instance.onStartValueChanged);\n this.startAt.appendTo(startAtTextBox);\n this.textIndent = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 1584,\n width: '180px',\n step: 4,\n enablePersistence: false\n });\n this.textIndent.addEventListener('change', instance.onTextIndentChanged);\n this.textIndent.appendTo(textIndentAtTextBox);\n this.alignedAt = new NumericTextBox({\n format: '#',\n max: 1584,\n step: 6,\n width: '180px',\n enablePersistence: false\n });\n this.alignedAt.addEventListener('change', instance.onAlignedAtValueChanged);\n this.alignedAt.appendTo(alignedAtTextBox);\n var listLevel = document.getElementById(containerId + '_listLevel');\n this.listLevelElement = new DropDownList({ popupHeight: '150px', width: '180px', change: instance.onListLevelValueChanged });\n this.listLevelElement.appendTo(listLevel);\n var followCharacterElement = document.getElementById(containerId + '_followCharacter');\n this.followNumberWith = new DropDownList({ popupHeight: '150px', width: '180px', change: instance.onFollowCharacterValueChanged });\n this.followNumberWith.appendTo(followCharacterElement);\n var numberStyleEle = document.getElementById(containerId + '_numberStyle');\n this.numberStyle = new DropDownList({ popupHeight: '150px', width: '180px', change: instance.onLevelPatternValueChanged });\n this.numberStyle.appendTo(numberStyleEle);\n this.numberFormat = document.getElementById(containerId + '_numberFormat');\n this.numberFormat.addEventListener('change', instance.onNumberFormatChanged);\n var restartElement = document.getElementById(containerId + '_restartBy');\n this.restartBy = new DropDownList({ popupHeight: '150px', width: '180px' });\n this.restartBy.appendTo(restartElement);\n var button = document.getElementById(containerId + '_list_info');\n this.formatInfoToolTip = new Tooltip({ width: 200 });\n // tslint:disable-next-line:max-line-length\n this.formatInfoToolTip.content = locale.getConstant('Number format tooltip information');\n this.formatInfoToolTip.position = 'RightTop';\n this.formatInfoToolTip.appendTo(button);\n };\n ListDialog.prototype.updateRestartLevelBox = function () {\n var containerId = this.owner.owner.containerId;\n var listLevel = document.getElementById(containerId + '_listLevel');\n var restartBy = document.getElementById(containerId + '_restartBy');\n for (var i = 0; i < restartBy.options.length; i) {\n restartBy.options.remove(i);\n }\n if (listLevel.selectedIndex === 0) {\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n else {\n for (var i = listLevel.selectedIndex; i > 0; i--) {\n var option_1 = document.createElement('option');\n option_1.value = 'Level ' + i;\n option_1.innerHTML = 'Level ' + i;\n restartBy.appendChild(option_1);\n }\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n restartBy.selectedIndex = 0;\n };\n ListDialog.prototype.listPatternConverter = function (listLevelPattern) {\n switch (listLevelPattern) {\n case 'Arabic': return 0;\n case 'UpRoman': return 1;\n case 'LowRoman': return 2;\n case 'UpLetter': return 3;\n case 'LowLetter': return 4;\n case 'Number': return 5;\n case 'LeadingZero': return 6;\n case 'Bullet': return 7;\n case 'Ordinal': return 8;\n case 'OrdinalText': return 9;\n case 'Special': return 10;\n case 'FarEast': return 11;\n default: return 12;\n }\n };\n ListDialog.prototype.followCharacterConverter = function (followCharacter) {\n switch (followCharacter) {\n case 'Tab':\n return 0;\n case 'Space':\n return 1;\n default:\n return 2;\n }\n };\n ListDialog.prototype.updateDialogValues = function () {\n // tslint:disable-next-line:max-line-length\n var restartByTextBox = document.getElementById(this.owner.owner.containerId + '_restartBy');\n this.startAt.value = this.viewModel.listLevel.startAt;\n this.textIndent.value = this.viewModel.listLevel.paragraphFormat.leftIndent;\n this.alignedAt.value = this.viewModel.listLevel.paragraphFormat.firstLineIndent;\n this.followNumberWith.index = this.followCharacterConverter(this.viewModel.followCharacter);\n this.numberFormat.value = this.viewModel.listLevel.numberFormat;\n this.numberStyle.index = this.listPatternConverter(this.viewModel.listLevelPattern);\n this.listLevelElement.index = this.viewModel.levelNumber;\n this.viewModel.levelNumber = this.viewModel.levelNumber;\n };\n ListDialog.prototype.disposeBindingForListUI = function () {\n this.followNumberWith.index = -1;\n this.numberFormat.value = ' ';\n this.numberStyle.index = -1;\n this.listLevelElement.index = -1;\n this.restartBy.index = -1;\n this.viewModel.destroy();\n };\n /**\n * @private\n */\n ListDialog.prototype.destroy = function () {\n if (this.alignedAt) {\n this.alignedAt.destroy();\n }\n this.alignedAt = undefined;\n this.dialog = undefined;\n if (this.followNumberWith) {\n this.followNumberWith.destroy();\n }\n this.followNumberWith = undefined;\n if (this.listLevelElement) {\n this.listLevelElement.destroy();\n }\n this.listLevelElement = undefined;\n if (this.textIndent) {\n this.textIndent.destroy();\n }\n this.textIndent = undefined;\n if (this.startAt) {\n this.startAt.destroy();\n }\n this.startAt = undefined;\n if (this.numberStyle) {\n this.numberStyle.destroy();\n }\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n if (this.restartBy) {\n this.restartBy.destroy();\n }\n this.restartBy = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var l = 0; l < this.target.childNodes.length; l++) {\n this.target.removeChild(this.target.childNodes[l]);\n l--;\n }\n this.target = undefined;\n }\n this.owner = undefined;\n this.viewModel = undefined;\n };\n return ListDialog;\n}());\nexport { ListDialog };\n/* tslint:enable:no-any */ \n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { WCharacterStyle, WParagraphStyle } from '../../implementation/format/style';\nimport { BulletsAndNumberingDialog } from './index';\nimport { WAbstractList } from '../list/abstract-list';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * The Style dialog is used to create or modify styles.\n */\nvar StyleDialog = /** @class */ (function () {\n /**\n * @private\n */\n function StyleDialog(viewer) {\n var _this = this;\n this.target = undefined;\n this.styleType = undefined;\n this.styleBasedOn = undefined;\n this.styleParagraph = undefined;\n this.onlyThisDocument = undefined;\n this.template = undefined;\n this.fontFamily = undefined;\n this.fontSize = undefined;\n this.characterFormat = undefined;\n this.paragraphFormat = undefined;\n /* tslint:disable-next-line:no-any */\n this.openDialog = function (args) {\n switch (args.item.id) {\n case 'style_font':\n _this.showFontDialog();\n break;\n case 'style_paragraph':\n _this.showParagraphDialog();\n break;\n case 'style_numbering':\n _this.showNumberingBulletDialog();\n break;\n }\n };\n this.setBoldProperty = function () {\n _this.characterFormat.bold = !_this.characterFormat.bold;\n _this.fontButtonClicked(undefined);\n };\n this.setItalicProperty = function () {\n _this.characterFormat.italic = !_this.characterFormat.italic;\n _this.fontButtonClicked(undefined);\n };\n this.setUnderlineProperty = function () {\n _this.characterFormat.underline = _this.characterFormat.underline === 'None' ? 'Single' : 'None';\n _this.fontButtonClicked(undefined);\n };\n /* tslint:disable-next-line:no-any */\n this.fontButtonClicked = function (args) {\n if (_this.characterFormat.bold) {\n if (!_this.bold.classList.contains('e-active')) {\n _this.bold.classList.add('e-active');\n }\n }\n else {\n if (_this.bold.classList.contains('e-active')) {\n _this.bold.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.italic) {\n if (!_this.italic.classList.contains('e-active')) {\n _this.italic.classList.add('e-active');\n }\n }\n else {\n if (_this.italic.classList.contains('e-active')) {\n _this.italic.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.underline !== undefined && _this.characterFormat.underline !== 'None') {\n if (!_this.underline.classList.contains('e-active')) {\n _this.underline.classList.add('e-active');\n _this.characterFormat.underline = 'Single';\n }\n }\n else {\n if (_this.underline.classList.contains('e-active')) {\n _this.underline.classList.remove('e-active');\n _this.characterFormat.underline = 'None';\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n this.fontSizeUpdate = function (args) {\n _this.characterFormat.fontSize = args.value;\n };\n /* tslint:disable-next-line:no-any */\n this.fontFamilyChanged = function (args) {\n _this.characterFormat.fontFamily = args.value;\n };\n /* tslint:disable-next-line:no-any */\n this.fontColorUpdate = function (args) {\n _this.characterFormat.fontColor = args.currentValue.rgba;\n };\n this.setLeftAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Left') {\n _this.paragraphFormat.textAlignment = 'Justify';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n _this.updateParagraphFormat();\n };\n this.setRightAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Right') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Right';\n }\n _this.updateParagraphFormat();\n };\n this.setCenterAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Center') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Center';\n }\n _this.updateParagraphFormat();\n };\n this.setJustifyAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Justify') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Justify';\n }\n _this.updateParagraphFormat();\n };\n this.increaseBeforeAfterSpacing = function () {\n _this.paragraphFormat.beforeSpacing += 6;\n _this.paragraphFormat.afterSpacing += 6;\n };\n this.decreaseBeforeAfterSpacing = function () {\n if (_this.paragraphFormat.beforeSpacing >= 6) {\n _this.paragraphFormat.beforeSpacing -= 6;\n }\n else {\n _this.paragraphFormat.beforeSpacing = 0;\n }\n if (_this.paragraphFormat.afterSpacing >= 6) {\n _this.paragraphFormat.afterSpacing -= 6;\n }\n else {\n _this.paragraphFormat.afterSpacing = 0;\n }\n };\n /**\n * @private\n */\n this.updateNextStyle = function (args) {\n var typedName = args.srcElement.value;\n if (_this.getTypeValue() === 'Paragraph' && !isNullOrUndefined(typedName) && typedName !== '' && !_this.isUserNextParaUpdated) {\n var styles = _this.owner.owner.viewer.styles.getStyleNames(_this.getTypeValue());\n if (_this.isEdit) {\n styles = styles.filter(function (e) { return e !== _this.editStyleName; });\n }\n styles.push(typedName);\n _this.styleParagraph.dataSource = styles;\n _this.styleParagraph.index = null;\n _this.styleParagraph.index = styles.indexOf(typedName);\n _this.styleParagraph.dataBind();\n }\n };\n /**\n * @private\n */\n this.updateOkButton = function () {\n var styleName = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0).value;\n _this.enableOrDisableOkButton();\n };\n /**\n * @private\n */\n /* tslint:disable-next-line:no-any */\n this.styleTypeChange = function (args) {\n if (args.isInteracted) {\n var type = void 0;\n if (args.value === 'Character') {\n _this.style = new WCharacterStyle();\n type = 'Character';\n }\n if (args.value === 'Paragraph' || args.value === 'Linked(Paragraph and Character)') {\n _this.style = new WParagraphStyle();\n type = 'Paragraph';\n }\n _this.toggleDisable();\n _this.updateStyleNames(type);\n }\n };\n /* tslint:disable-next-line:no-any */\n this.styleBasedOnChange = function (args) {\n //Based on change\n };\n /**\n * @private\n */\n /* tslint:disable-next-line:no-any */\n this.styleParagraphChange = function (args) {\n if (args.isInteracted) {\n _this.isUserNextParaUpdated = true;\n }\n //Next change\n };\n /**\n * @private\n */\n this.showFontDialog = function () {\n if (!isNullOrUndefined(_this.owner.owner.fontDialogModule)) {\n _this.owner.owner.showFontDialog(_this.characterFormat);\n }\n _this.updateCharacterFormat();\n };\n /**\n * @private\n */\n this.showParagraphDialog = function () {\n if (!isNullOrUndefined(_this.owner.owner.paragraphDialogModule)) {\n _this.owner.owner.showParagraphDialog(_this.paragraphFormat);\n }\n };\n /**\n * @private\n */\n this.showNumberingBulletDialog = function () {\n _this.numberingBulletDialog = new BulletsAndNumberingDialog(_this.owner.owner.viewer);\n if (_this.style instanceof WParagraphStyle && (!isNullOrUndefined(_this.style.paragraphFormat))) {\n // tslint:disable-next-line:max-line-length\n _this.numberingBulletDialog.showNumberBulletDialog(_this.style.paragraphFormat.listFormat, _this.abstractList);\n }\n };\n /**\n * @private\n */\n this.onOkButtonClick = function () {\n var styleName = _this.styleNameElement.value;\n if (styleName.length > 0) {\n var style = _this.owner.owner.viewer.styles.findByName(styleName);\n var name_1;\n if (!isNullOrUndefined(style)) {\n _this.style.type = _this.getTypeValue();\n _this.style.basedOn = _this.owner.owner.viewer.styles.findByName(_this.styleBasedOn.value);\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked(Paragraph and Character)') {\n _this.style.next = _this.owner.owner.viewer.styles.findByName(_this.styleParagraph.value);\n _this.style.characterFormat.mergeFormat(style.characterFormat);\n _this.style.paragraphFormat.mergeFormat(style.paragraphFormat);\n _this.updateList();\n // tslint:disable-next-line:max-line-length\n _this.style.link = (_this.styleType.value === 'Linked(Paragraph and Character)') ? _this.createLinkStyle(styleName, _this.isEdit) : undefined;\n }\n //Updating existing style implementation\n _this.style.name = style.name;\n name_1 = style.name;\n style = _this.style;\n _this.owner.owner.isShiftingEnabled = true;\n _this.owner.owner.editorModule.layoutWholeDocument();\n _this.owner.owner.isShiftingEnabled = false;\n }\n else {\n /* tslint:disable-next-line:no-any */\n var basedOn = _this.owner.owner.viewer.styles.findByName(_this.styleBasedOn.value);\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked(Paragraph and Character)') {\n if (styleName === _this.styleParagraph.value) {\n _this.style.next = _this.style;\n }\n else {\n _this.style.next = _this.owner.owner.viewer.styles.findByName(_this.styleParagraph.value);\n }\n _this.updateList();\n }\n // tslint:disable-next-line:max-line-length\n _this.style.link = (_this.styleType.value === 'Linked(Paragraph and Character)') ? _this.createLinkStyle(styleName) : undefined;\n _this.style.type = _this.getTypeValue();\n _this.style.name = styleName;\n _this.style.basedOn = basedOn;\n /* tslint:disable-next-line:no-any */\n _this.owner.owner.viewer.styles.push(_this.style);\n name_1 = styleName;\n _this.owner.owner.editorModule.applyStyle(name_1);\n }\n _this.owner.owner.viewer.dialog2.hide();\n }\n else {\n throw new Error('Enter valid Style name');\n }\n if (_this.style) {\n //this.style.destroy();\n }\n };\n /* tslint:disable-next-line:no-any */\n this.loadStyleDialog = function (args) {\n _this.owner.owner.viewer.updateFocus();\n _this.isUserNextParaUpdated = false;\n /* tslint:disable-next-line:max-line-length */\n _this.styleNameElement = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0);\n _this.styleNameElement.value = null;\n if (!_this.isEdit) {\n _this.styleType.index = 0; //Set to paragraph \n }\n var name;\n if (_this.isEdit) {\n _this.styleNameElement.value = _this.editStyleName;\n name = _this.editStyleName;\n }\n /* tslint:disable-next-line:max-line-length */\n _this.okButton = _this.owner.dialog2.element.getElementsByClassName('e-flat e-style-okay').item(0);\n _this.enableOrDisableOkButton();\n _this.updateStyleNames(_this.getTypeValue(), name);\n _this.updateCharacterFormat(_this.style.characterFormat);\n _this.updateParagraphFormat(_this.style.paragraphFormat);\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n if (!_this.isEdit && _this.style) {\n _this.style.destroy();\n }\n _this.owner.owner.viewer.dialog2.hide();\n };\n /**\n * @private\n */\n this.closeStyleDialog = function () {\n _this.owner.owner.viewer.updateFocus();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n StyleDialog.prototype.getModuleName = function () {\n return 'StyleDialog';\n };\n /**\n * @private\n */\n //tslint:disable: max-func-body-length\n StyleDialog.prototype.initStyleDialog = function (localValue) {\n var instance = this;\n var id = this.owner.owner.containerId + '_style';\n this.target = createElement('div', { id: id, className: 'e-de-style-dialog' });\n var container = createElement('div');\n // tslint:disable-next-line:max-line-length\n var properties = createElement('div', { className: 'e-de-style-properties', innerHTML: localValue.getConstant('Properties') });\n container.appendChild(properties);\n var styleNameTypeDiv = createElement('div', { styles: 'display:flex', className: 'e-de-style-nametype-div' });\n container.appendChild(styleNameTypeDiv);\n var nameWholeDiv = createElement('div', { className: 'e-de-style-left-div' });\n styleNameTypeDiv.appendChild(nameWholeDiv);\n var name = createElement('div', { className: 'e-de-style-name', innerHTML: localValue.getConstant('Name') + ':' });\n nameWholeDiv.appendChild(name);\n // tslint:disable-next-line:max-line-length\n var nameValue = createElement('input', { id: this.owner.owner.containerId + '_style_name', styles: 'width:210px;', className: 'e-input e-de-style-dlg-name-input' });\n nameValue.addEventListener('keyup', this.updateOkButton);\n nameValue.addEventListener('input', this.updateOkButton);\n nameValue.addEventListener('blur', this.updateNextStyle);\n nameWholeDiv.appendChild(nameValue);\n var styleTypeWholeDiv = createElement('div');\n styleNameTypeDiv.appendChild(styleTypeWholeDiv);\n // tslint:disable-next-line:max-line-length\n var styleType = createElement('div', { className: 'e-de-style-styletype', innerHTML: localValue.getConstant('Style type') + ':' });\n styleTypeWholeDiv.appendChild(styleType);\n var styleTypeDivElement = createElement('div', { className: 'e-de-style-style-type-div' });\n var styleTypeValue = createElement('select', { id: 'e-de-style-style-type' });\n // tslint:disable-next-line:max-line-length\n styleTypeValue.innerHTML = ''; //';\n styleTypeDivElement.appendChild(styleTypeValue);\n this.styleType = new DropDownList({ change: this.styleTypeChange, popupHeight: '253px', width: '210px' });\n this.styleType.appendTo(styleTypeValue);\n styleTypeWholeDiv.appendChild(styleTypeDivElement);\n // tslint:disable-next-line:max-line-length\n var styleBasedParaDiv = createElement('div', { styles: 'display:flex', className: 'e-de-style-based-para-div' });\n container.appendChild(styleBasedParaDiv);\n var styleBasedOnWholeDiv = createElement('div', { className: 'e-de-style-left-div' });\n styleBasedParaDiv.appendChild(styleBasedOnWholeDiv);\n // tslint:disable-next-line:max-line-length\n var styleBasedOn = createElement('div', { className: 'e-de-style-style-based-on', innerHTML: localValue.getConstant('Style based on') + ':' });\n styleBasedOnWholeDiv.appendChild(styleBasedOn);\n var styleBasedOnDivElement = createElement('div', { className: 'e-de-style-style-based-on-div' });\n // tslint:disable-next-line:max-line-length\n var styleBasedOnValue = createElement('input', { id: 'e-de-style-style-based-on-value' });\n //styleBasedOnValue.innerHTML = '';\n styleBasedOnDivElement.appendChild(styleBasedOnValue);\n this.styleBasedOn = new DropDownList({ dataSource: [], select: this.styleBasedOnChange, popupHeight: '253px', width: '210px' });\n this.styleBasedOn.appendTo(styleBasedOnValue);\n styleBasedOnWholeDiv.appendChild(styleBasedOnDivElement);\n var styleParagraphWholeDiv = createElement('div', { className: 'e-de-style-left-div' });\n styleBasedParaDiv.appendChild(styleParagraphWholeDiv);\n // tslint:disable-next-line:max-line-length\n var styleParagraph = createElement('div', { className: 'e-de-style-style-paragraph', innerHTML: localValue.getConstant('Style for following paragraph') + ':' });\n styleParagraphWholeDiv.appendChild(styleParagraph);\n var styleParagraphDivElement = createElement('div', { className: 'e-de-style-style-paragraph-div' });\n // tslint:disable-next-line:max-line-length\n var styleParagraphValue = createElement('input', { id: 'e-de-style-style-paragraph-value' });\n // tslint:disable-next-line:max-line-length\n //styleParagraphValue.innerHTML = '';\n styleParagraphDivElement.appendChild(styleParagraphValue);\n this.styleParagraph = new DropDownList({ dataSource: [], select: this.styleParagraphChange, popupHeight: '253px', width: '210px' });\n this.styleParagraph.appendTo(styleParagraphValue);\n styleParagraphWholeDiv.appendChild(styleParagraphDivElement);\n // tslint:disable-next-line:max-line-length\n var formatting = createElement('div', { className: 'e-de-style-formatting', innerHTML: localValue.getConstant('Formatting') });\n container.appendChild(formatting);\n var optionsDiv = createElement('div', { className: 'e-de-style-options-div' });\n container.appendChild(optionsDiv);\n var fontOptionsDiv = createElement('div', { styles: 'display:flex;margin-bottom: 15px;' });\n optionsDiv.appendChild(fontOptionsDiv);\n this.createFontOptions(fontOptionsDiv);\n var paragraphOptionsDiv = createElement('div', { styles: 'display:flex', className: 'e-style-paragraph' });\n optionsDiv.appendChild(paragraphOptionsDiv);\n this.createParagraphOptions(paragraphOptionsDiv);\n // let radioOptionsDiv: HTMLElement = createElement('div', { styles: 'display:flex' });\n // container.appendChild(radioOptionsDiv);\n // let onlyThisDocumentDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // tslint:disable-next-line:max-line-length\n // let onlyThisDocument: HTMLInputElement = createElement('input', { className: 'e-de-style-only-this-doc', attrs: { type: 'radio' } }) as HTMLInputElement;\n // onlyThisDocumentDiv.appendChild(onlyThisDocument);\n // tslint:disable-next-line:max-line-length\n // this.onlyThisDocument = new RadioButton({ label: 'Only in this document', value: 'only in this document', checked: true, name: 'styles' });\n // this.onlyThisDocument.appendTo(onlyThisDocument);\n // radioOptionsDiv.appendChild(onlyThisDocumentDiv);\n // let templateDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // tslint:disable-next-line:max-line-length\n // let template: HTMLInputElement = createElement('input', { className: 'e-de-style-temp', attrs: { type: 'radio' } }) as HTMLInputElement;\n // templateDiv.appendChild(template);\n // this.template = new RadioButton({ label: 'Template', value: 'template', name: 'styles' });\n // this.template.appendTo(template);\n // radioOptionsDiv.appendChild(templateDiv);\n this.createFormatDropdown(container, localValue);\n this.target.appendChild(container);\n };\n StyleDialog.prototype.createFormatDropdown = function (parentDiv, localValue) {\n var _this = this;\n var formatBtn = createElement('button', { id: 'style_format_dropdown', innerHTML: localValue.getConstant('Format') });\n formatBtn.style.height = '35px';\n parentDiv.appendChild(formatBtn);\n var items = [{ text: localValue.getConstant('Font') + '..', id: 'style_font' },\n { text: localValue.getConstant('Paragraph') + '..', id: 'style_paragraph' },\n { text: localValue.getConstant('Numbering') + '..', id: 'style_numbering' }];\n var dropDownbtn = new DropDownButton({\n items: items, cssClass: 'e-de-style-format-dropdwn',\n beforeItemRender: function (args) {\n if (_this.styleType.value === 'Character') {\n if (args.item.text === 'Paragraph') {\n args.element.classList.add('e-disabled');\n }\n if (args.item.text === 'Numbering') {\n args.element.classList.add('e-disabled');\n }\n }\n else {\n if (args.item.text === 'Paragraph') {\n args.element.classList.remove('e-disabled');\n }\n if (args.item.text === 'Numbering') {\n args.element.classList.remove('e-disabled');\n }\n }\n }\n });\n dropDownbtn.appendTo(formatBtn);\n dropDownbtn.addEventListener('select', this.openDialog);\n };\n StyleDialog.prototype.createFontOptions = function (parentDiv) {\n var fontFamilyElement = createElement('select', { id: this.target.id + '_fontName' });\n fontFamilyElement.innerHTML = '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '';\n parentDiv.appendChild(fontFamilyElement);\n this.fontFamily = new ComboBox({\n width: '123px', popupWidth: '123px',\n cssClass: 'e-style-font-fmaily-right', change: this.fontFamilyChanged\n });\n this.fontFamily.showClearButton = false;\n this.fontFamily.appendTo(fontFamilyElement);\n var fontSizeElement = createElement('input');\n parentDiv.appendChild(fontSizeElement);\n var sizeDataSource = [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72];\n this.fontSize = new ComboBox({\n dataSource: sizeDataSource, width: '73px', cssClass: 'e-style-font-fmaily-right',\n change: this.fontSizeUpdate\n });\n this.fontSize.showClearButton = false;\n this.fontSize.appendTo(fontSizeElement);\n var fontGroupButton = createElement('div', { className: 'e-de-style-font-group-button' });\n parentDiv.appendChild(fontGroupButton);\n // tslint:disable-next-line:max-line-length\n this.bold = this.createButtonElement(fontGroupButton, 'e-de-bold', 'e-de-style-bold-button-size', this.owner.owner.containerId + '_style_bold');\n this.bold.addEventListener('click', this.setBoldProperty);\n // tslint:disable-next-line:max-line-length\n this.italic = this.createButtonElement(fontGroupButton, 'e-de-italic', 'e-de-style-icon-button-size', this.owner.owner.containerId + '_style_italic');\n this.italic.addEventListener('click', this.setItalicProperty);\n // tslint:disable-next-line:max-line-length\n this.underline = this.createButtonElement(fontGroupButton, 'e-de-underline', 'e-de-style-icon-button-size', this.owner.owner.containerId + '_style_underline');\n this.underline.addEventListener('click', this.setUnderlineProperty);\n var fontColorElement = createElement('input', { attrs: { type: 'color' }, className: 'e-de-style-icon-button-size' });\n parentDiv.appendChild(fontColorElement);\n this.fontColor = new ColorPicker({ cssClass: 'e-de-style-font-color-picker', change: this.fontColorUpdate });\n this.fontColor.appendTo(fontColorElement);\n };\n StyleDialog.prototype.createParagraphOptions = function (parentDiv) {\n var _this = this;\n var alignmentDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(alignmentDiv);\n this.leftAlign = this.createButtonElement(alignmentDiv, 'e-de-align-left', 'e-de-style-icon-button-size');\n this.leftAlign.addEventListener('click', this.setLeftAlignment);\n this.centerAlign = this.createButtonElement(alignmentDiv, 'e-de-align-center', 'e-de-style-icon-button-size');\n this.centerAlign.addEventListener('click', this.setCenterAlignment);\n this.rightAlign = this.createButtonElement(alignmentDiv, 'e-de-align-right', 'e-de-style-icon-button-size');\n this.rightAlign.addEventListener('click', this.setRightAlignment);\n this.justify = this.createButtonElement(alignmentDiv, 'e-de-justify', 'e-de-style-icon-button-last-size');\n this.justify.addEventListener('click', this.setJustifyAlignment);\n var lineSpacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(lineSpacingDiv);\n this.singleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-single-spacing', 'e-de-style-icon-button-first-size');\n this.singleLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 1;\n _this.updateParagraphFormat();\n });\n // tslint:disable-next-line:max-line-length\n this.onePointFiveLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-one-point-five-spacing', 'e-de-style-icon-button-size');\n this.onePointFiveLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 1.5;\n _this.updateParagraphFormat();\n });\n this.doubleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-double-spacing', 'e-de-style-icon-button-last-size');\n this.doubleLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 2;\n _this.updateParagraphFormat();\n });\n var spacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(spacingDiv);\n var beforeSpacing = this.createButtonElement(spacingDiv, 'e-de-before-spacing', 'e-de-style-icon-button-first-size');\n var afterSpacing = this.createButtonElement(spacingDiv, 'e-de-after-spacing', 'e-de-style-icon-button-last-size');\n beforeSpacing.addEventListener('click', this.increaseBeforeAfterSpacing);\n afterSpacing.addEventListener('click', this.decreaseBeforeAfterSpacing);\n var indentingDiv = createElement('div', { className: 'e-de-style-paragraph-indent-group-button' });\n parentDiv.appendChild(indentingDiv);\n var decreaseIndent = this.createButtonElement(indentingDiv, 'e-de-indent', 'e-de-style-icon-button-first-size');\n decreaseIndent.addEventListener('click', function () {\n if (_this.paragraphFormat.leftIndent >= 36) {\n _this.paragraphFormat.leftIndent -= 36;\n }\n else {\n _this.paragraphFormat.leftIndent = 0;\n }\n });\n var increaseindent = this.createButtonElement(indentingDiv, 'e-de-outdent', 'e-de-style-icon-button-size');\n increaseindent.addEventListener('click', function () {\n _this.paragraphFormat.leftIndent += 36;\n });\n };\n StyleDialog.prototype.createButtonElement = function (parentDiv, iconCss, className, id) {\n var buttonElement = createElement('button');\n if (!isNullOrUndefined(id)) {\n buttonElement.id = id;\n }\n parentDiv.appendChild(buttonElement);\n var button = new Button({ iconCss: iconCss, cssClass: className });\n button.appendTo(buttonElement);\n return buttonElement;\n };\n StyleDialog.prototype.toggleDisable = function () {\n if (this.styleType.value === 'Character') {\n this.styleParagraph.enabled = false;\n // tslint:disable-next-line:max-line-length\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex;pointer-events:none;opacity:0.5');\n }\n else {\n this.styleParagraph.enabled = true;\n this.target.getElementsByClassName('e-style-paragraph').item(0).removeAttribute('style');\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex');\n }\n this.styleBasedOn.enabled = true;\n };\n /**\n * @private\n */\n StyleDialog.prototype.show = function (styleName, header) {\n var localObj = new L10n('documenteditor', this.owner.owner.defaultLocale);\n this.isEdit = (!isNullOrUndefined(styleName) && styleName.length > 0) ? true : false;\n this.editStyleName = styleName;\n this.abstractList = new WAbstractList();\n // tslint:disable-next-line:max-line-length\n var style = this.owner.owner.viewer.styles.findByName(styleName);\n this.style = !this.isEdit ? new WParagraphStyle() : style ? style : this.getStyle(styleName);\n localObj.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initStyleDialog(localObj);\n }\n if (isNullOrUndefined(header)) {\n header = localObj.getConstant('Create New Style');\n }\n this.owner.owner.viewer.dialog2.header = header;\n this.owner.owner.viewer.dialog2.height = 'auto';\n this.owner.owner.viewer.dialog2.width = 'auto';\n this.owner.owner.viewer.dialog2.content = this.target;\n this.owner.owner.viewer.dialog2.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-style-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-style-cancel' }\n }];\n this.toggleDisable();\n this.owner.owner.viewer.dialog2.dataBind();\n this.owner.owner.viewer.dialog2.beforeOpen = this.loadStyleDialog;\n this.owner.owner.viewer.dialog2.close = this.closeStyleDialog;\n this.owner.owner.viewer.dialog2.position = { X: 'center', Y: 'center' };\n this.owner.owner.viewer.dialog2.show();\n };\n StyleDialog.prototype.updateList = function () {\n var listId = this.style.paragraphFormat.listFormat.listId;\n if (listId > -1) {\n if (this.owner.owner.viewer.lists.filter(function (a) { return (a.listId === listId); }).length === 0) {\n this.owner.owner.viewer.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n else {\n this.owner.owner.viewer.lists = this.owner.owner.viewer.lists.filter(function (a) { return (a.listId !== listId); });\n this.owner.owner.viewer.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n }\n if (this.abstractList.abstractListId !== -1) {\n this.owner.owner.viewer.abstractLists.push(this.abstractList);\n }\n };\n StyleDialog.prototype.createLinkStyle = function (name, isEdit) {\n var charStyle;\n if (isEdit) {\n charStyle = this.owner.owner.viewer.styles.findByName((name + ' Char'), 'Character');\n }\n else {\n charStyle = new WCharacterStyle();\n }\n charStyle.type = 'Character';\n charStyle.name = name + ' Char';\n charStyle.characterFormat = this.style.characterFormat.cloneFormat();\n charStyle.basedOn = this.style.basedOn;\n if (!isEdit) {\n this.owner.owner.viewer.styles.push(charStyle);\n }\n return this.owner.owner.viewer.styles.findByName(charStyle.name, 'Character');\n };\n /**\n * @private\n */\n StyleDialog.prototype.updateCharacterFormat = function (characterFormat) {\n if (!isNullOrUndefined(characterFormat)) {\n this.characterFormat = characterFormat;\n }\n this.fontFamily.value = this.characterFormat.fontFamily;\n this.fontSize.value = this.characterFormat.fontSize;\n this.fontColor.value = this.characterFormat.fontColor;\n this.fontButtonClicked(undefined);\n };\n /**\n * @private\n */\n StyleDialog.prototype.updateParagraphFormat = function (paragraphFOrmat) {\n if (!isNullOrUndefined(paragraphFOrmat)) {\n this.paragraphFormat = paragraphFOrmat;\n }\n if (this.paragraphFormat.textAlignment === 'Left') {\n if (!this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.add('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Right') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (!this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.add('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Center') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (!this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.add('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Justify') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (!this.justify.classList.contains('e-active')) {\n this.justify.classList.add('e-active');\n }\n }\n if (this.paragraphFormat.lineSpacing === 1) {\n this.singleLineSpacing.classList.add('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.paragraphFormat.lineSpacing === 1.5) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.add('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.paragraphFormat.lineSpacing === 2) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.add('e-active');\n }\n else {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n };\n StyleDialog.prototype.enableOrDisableOkButton = function () {\n if (!isNullOrUndefined(this.okButton)) {\n this.okButton.disabled = (this.styleNameElement.value === '');\n }\n };\n StyleDialog.prototype.getTypeValue = function () {\n var type;\n if (this.styleType.value === 'Linked(Paragraph and Character)' || this.styleType.value === 'Paragraph') {\n return 'Paragraph';\n }\n else {\n return 'Character';\n }\n };\n StyleDialog.prototype.updateStyleNames = function (type, name) {\n var styles = this.owner.owner.viewer.styles.getStyleNames(type);\n this.styleParagraph.dataSource = styles;\n this.styleParagraph.index = null;\n if (name) {\n this.styleBasedOn.dataSource = styles.filter(function (e) { return e !== name; });\n this.styleBasedOn.index = null;\n var style = this.getStyle(name);\n if (style.basedOn instanceof String || isNullOrUndefined(style.basedOn)) {\n this.styleBasedOn.enabled = false;\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n this.styleBasedOn.index = styles.indexOf(style.basedOn.name) > -1 ? styles.indexOf(style.basedOn.name) : 0;\n }\n if (style.type === 'Paragraph') {\n if (!isNullOrUndefined(style.link)) {\n this.styleType.index = 2;\n }\n else {\n this.styleType.index = 0;\n }\n }\n else {\n this.styleType.index = 1;\n }\n if (!isNullOrUndefined(style.next)) {\n var nxtName = style.next.name;\n var index = 0;\n if (styles.indexOf(nxtName) > -1) {\n index = styles.indexOf(nxtName);\n }\n this.styleParagraph.index = index;\n this.isUserNextParaUpdated = (nxtName === name) ? false : true;\n }\n }\n else {\n this.styleBasedOn.dataSource = styles;\n this.styleBasedOn.index = null;\n var basedOnIndex = 0;\n if (this.owner.owner.selectionModule) {\n var styleName = void 0;\n if (type === 'Character') {\n styleName = this.owner.owner.selection.characterFormat.styleName;\n }\n else {\n styleName = this.owner.owner.selection.paragraphFormat.styleName;\n }\n basedOnIndex = styles.indexOf(styleName);\n }\n this.styleBasedOn.index = basedOnIndex;\n this.styleParagraph.index = 0;\n }\n if (this.isEdit) {\n this.styleType.enabled = false;\n }\n else {\n this.styleType.enabled = true;\n }\n this.styleBasedOn.dataBind();\n this.styleParagraph.dataBind();\n };\n StyleDialog.prototype.getStyle = function (styleName) {\n /* tslint:disable-next-line:max-line-length */\n if (isNullOrUndefined(this.owner.owner.viewer.styles.findByName(styleName))) {\n /* tslint:disable-next-line:max-line-length */\n this.owner.owner.editor.createStyle(this.owner.owner.viewer.preDefinedStyles.get(styleName));\n }\n return this.owner.owner.viewer.styles.findByName(styleName);\n };\n /**\n * @private\n */\n StyleDialog.prototype.destroy = function () {\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var n = 0; n < this.target.childNodes.length; n++) {\n this.target.removeChild(this.target.childNodes[n]);\n n--;\n }\n this.target = undefined;\n }\n if (this.styleType) {\n this.styleType.destroy();\n }\n this.styleType = undefined;\n if (this.styleBasedOn) {\n this.styleBasedOn.destroy();\n }\n this.styleBasedOn = undefined;\n if (this.styleParagraph) {\n this.styleParagraph.destroy();\n }\n this.styleParagraph = undefined;\n if (this.onlyThisDocument) {\n this.onlyThisDocument.destroy();\n }\n this.onlyThisDocument = undefined;\n if (this.template) {\n this.template.destroy();\n }\n this.template = undefined;\n if (this.style) {\n this.style = undefined;\n }\n if (this.abstractList) {\n this.abstractList = undefined;\n }\n if (this.numberingBulletDialog) {\n this.numberingBulletDialog.destroy();\n }\n this.numberingBulletDialog = undefined;\n };\n return StyleDialog;\n}());\nexport { StyleDialog };\n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WListFormat } from '../../implementation/format/list-format';\n/**\n * The Bullets and Numbering dialog is used to apply list format for a paragraph style.\n */\n/* tslint:disable:no-any */\nvar BulletsAndNumberingDialog = /** @class */ (function () {\n /**\n * @private\n */\n function BulletsAndNumberingDialog(layoutViewer) {\n var _this = this;\n this.isBullet = false;\n /**\n * @private\n */\n this.numberListClick = function (args) {\n _this.isBullet = false;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-de-list-numbered-none')) {\n _this.numberFormat = undefined;\n _this.listLevelPattern = undefined;\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpRoman';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-letter')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-letter-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-numbered-low-letter-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowRoman';\n }\n };\n /**\n * @private\n */\n this.bulletListClick = function (args) {\n _this.isBullet = true;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-bullet-none')) {\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n }\n else if (args.currentTarget.classList.contains('e-bullet-dot')) {\n _this.symbol = '\\uf0b7';\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-circle')) {\n _this.symbol = '\\uf06f' + '\\u0020';\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-square')) {\n _this.symbol = '\\uf0a7';\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-flower')) {\n _this.symbol = '\\uf076';\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-arrow')) {\n _this.symbol = '\\uf0d8';\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-tick')) {\n _this.symbol = '\\uf0fc';\n _this.fontFamily = 'Wingdings';\n }\n };\n /**\n * @private\n */\n this.loadNumberingBulletDialog = function () {\n //Load \n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.closeNumberingBulletDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.isBullet = false;\n _this.listLevelPattern = undefined;\n _this.numberFormat = undefined;\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n */\n this.onOkButtonClick = function () {\n if (_this.owner.owner.viewer.lists.length > 0) {\n _this.listFormat.list.listId = _this.owner.owner.viewer.lists[_this.owner.owner.viewer.lists.length - 1].listId + 1;\n _this.listFormat.listId = _this.listFormat.list.listId;\n }\n else {\n _this.listFormat.list.listId = 0;\n _this.listFormat.listId = 0;\n }\n if (_this.owner.owner.viewer.abstractLists.length > 0) {\n /* tslint:disable-next-line:max-line-length */\n _this.abstractList.abstractListId = _this.owner.owner.viewer.abstractLists[_this.owner.owner.viewer.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n _this.abstractList.abstractListId = 0;\n }\n _this.listFormat.list.abstractListId = _this.abstractList.abstractListId;\n var listLevel = new WListLevel(_this.abstractList);\n listLevel.listLevelPattern = !isNullOrUndefined(_this.listLevelPattern) ? _this.listLevelPattern : 'Bullet';\n listLevel.numberFormat = _this.isBullet ? _this.symbol : _this.numberFormat;\n if (listLevel.listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n listLevel.characterFormat.fontFamily = !isNullOrUndefined(_this.fontFamily) ? _this.fontFamily : 'Verdana';\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n _this.abstractList.levels.push(listLevel);\n _this.listFormat.listLevelNumber = 0;\n _this.listFormat.list.abstractList = _this.abstractList;\n _this.owner.dialog.hide();\n };\n this.owner = layoutViewer;\n }\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.getModuleName = function () {\n return 'BulletsAndNumberingDialog';\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.initNumberingBulletDialog = function (locale) {\n var instance = this;\n var id = this.owner.owner.containerId;\n this.target = createElement('div', { id: id + '_insertNumberBulletDialog', className: 'e-de-number-bullet-dlg' });\n var tabTarget = createElement('div', { id: id + '_tabNumberBulletDialog', className: 'e-de-tab-number-bullet-dlg' });\n this.target.appendChild(tabTarget);\n this.createNumberList(id);\n this.createBulletList(id);\n //Initialize Tab component\n var tabObj = new Tab({\n items: [\n {\n header: { 'text': locale.getConstant('Numbering') },\n /* tslint:disable-next-line:max-line-length */\n content: ('#' + id + '_Number'),\n },\n {\n header: { 'text': locale.getConstant('Bullets') },\n /* tslint:disable-next-line:max-line-length */\n content: ('#' + id + '_Bullet'),\n },\n ],\n heightAdjustMode: 'None',\n width: 272,\n });\n //Render initialized Tab component\n tabObj.appendTo(tabTarget);\n this.owner.owner.element.appendChild(this.target);\n tabObj.refresh();\n };\n BulletsAndNumberingDialog.prototype.createNumberList = function (id) {\n var numberListDiv = createElement('div', { className: 'e-de-style-numbered-list', id: id + '_Number' });\n numberListDiv.style.display = 'none';\n numberListDiv.style.height = '270px';\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;',\n id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n numberListDiv.appendChild(ulTag);\n var numberedNone = this.createNumberNoneListTag(ulTag);\n var numberedNumberDot = this.createNumberListTag(ulTag, '1.', '2.', '3.', 'e-de-list-numbered-number-dot');\n var numberedNumberBrace = this.createNumberListTag(ulTag, '1)', '2)', '3)', 'e-de-list-numbered-number-brace');\n var numberedUpRoman = this.createNumberListTag(ulTag, 'I.', 'II.', 'III.', 'e-de-list-numbered-up-roman');\n var numberedUpLettter = this.createNumberListTag(ulTag, 'A.', 'B.', 'C.', 'e-de-list-numbered-up-letter');\n var numberedLowLetterDot = this.createNumberListTag(ulTag, 'a.', 'b.', 'c.', 'e-de-numbered-low-letter-dot');\n var numberedLowLetterBrace = this.createNumberListTag(ulTag, 'a)', 'b)', 'c)', 'e-de-list-numbered-low-letter-brace');\n var numberedLowRoman = this.createNumberListTag(ulTag, 'i.', 'ii.', 'iii.', 'e-de-list-numbered-low-roman');\n numberedNone.addEventListener('click', this.numberListClick);\n numberedNumberDot.addEventListener('click', this.numberListClick);\n numberedNumberBrace.addEventListener('click', this.numberListClick);\n numberedUpRoman.addEventListener('click', this.numberListClick);\n numberedUpLettter.addEventListener('click', this.numberListClick);\n numberedLowLetterBrace.addEventListener('click', this.numberListClick);\n numberedLowLetterDot.addEventListener('click', this.numberListClick);\n numberedLowRoman.addEventListener('click', this.numberListClick);\n this.target.appendChild(numberListDiv);\n };\n BulletsAndNumberingDialog.prototype.createNumberListTag = function (ulTag, text1, text2, text3, className) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n /* tslint:disable-next-line:max-line-length */\n var innerHTML = '
    ' + text1 + '
    ' + text2 + '';\n innerHTML += '
    ' + text3 + '
    ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createNumberNoneListTag = function (ulTag) {\n var liTag = createElement('li', {\n styles: 'display:block',\n /* tslint:disable-next-line:max-line-length */\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size e-de-list-numbered-none'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
    None
    ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletListTag = function (ulTag, iconCss, className) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-bullet-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n /* tslint:disable-next-line:max-line-length */\n var liInnerDiv = createElement('div', { className: 'e-de-ui-bullet-list-header-presetmenu e-de-bullet-icon-size', id: 'e-de-ui-zlist0' });\n var liNextDiv = createElement('div', { className: iconCss });\n liInnerDiv.appendChild(liNextDiv);\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletList = function (id) {\n var bulletListDiv = createElement('div', { className: 'e-de-ui-bullet-list-header-presetmenu', id: id + '_Bullet' });\n bulletListDiv.style.display = 'none';\n bulletListDiv.style.height = '270px';\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;', id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n bulletListDiv.appendChild(ulTag);\n var bulletNone = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-none e-de-bullet-icons', 'e-bullet-none');\n var bulletDot = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-dot e-de-bullet-icons', 'e-bullet-dot');\n /* tslint:disable-next-line:max-line-length */\n var bulletCircle = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-circle e-de-bullet-icons', 'e-bullet-circle');\n var bulletSquare = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-square e-de-bullet-icons', 'e-bullet-square');\n /* tslint:disable-next-line:max-line-length */\n var bulletFlower = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-flower e-de-bullet-icons', 'e-bullet-flower');\n var bulletArrow = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-arrow e-de-bullet-icons', 'e-bullet-arrow');\n var bulletTick = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-tick e-de-bullet-icons', 'e-bullet-tick');\n bulletNone.addEventListener('click', this.bulletListClick);\n bulletDot.addEventListener('click', this.bulletListClick);\n bulletCircle.addEventListener('click', this.bulletListClick);\n bulletSquare.addEventListener('click', this.bulletListClick);\n bulletFlower.addEventListener('click', this.bulletListClick);\n bulletArrow.addEventListener('click', this.bulletListClick);\n bulletTick.addEventListener('click', this.bulletListClick);\n // bulletListDiv.appendChild(table1); \n this.target.appendChild(bulletListDiv);\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.showNumberBulletDialog = function (listFormat, abstractList) {\n if (!isNullOrUndefined(listFormat)) {\n this.listFormat = listFormat;\n }\n else {\n this.listFormat = new WListFormat();\n }\n if (isNullOrUndefined(this.listFormat.list)) {\n this.listFormat.list = new WList();\n }\n if (!isNullOrUndefined(abstractList)) {\n this.abstractList = abstractList;\n }\n else {\n this.abstractList = new WAbstractList();\n }\n var locale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n locale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initNumberingBulletDialog(locale);\n }\n this.owner.dialog.header = locale.getConstant('Numbering and Bullets');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadNumberingBulletDialog;\n this.owner.dialog.close = this.closeNumberingBulletDialog;\n this.owner.dialog.position = { X: 'center', Y: 'center' };\n this.owner.dialog.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-numbering-bullet-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-numbering-bullet-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n BulletsAndNumberingDialog.prototype.setActiveElement = function (args) {\n var html = args.currentTarget.parentElement;\n for (var i = 0; i < html.childElementCount; i++) {\n if (html.childNodes[i].classList.contains('e-de-list-active')) {\n html.childNodes[i].classList.remove('e-de-list-active');\n }\n }\n args.currentTarget.classList.add('e-de-list-active');\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.unWireEventsAndBindings = function () {\n //Unwire events\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.destroy = function () {\n this.owner = undefined;\n if (this.listFormat) {\n this.listFormat.destroy();\n this.listFormat = undefined;\n }\n if (this.abstractList) {\n this.abstractList.destroy();\n this.abstractList = undefined;\n }\n if (this.target && this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[m]);\n m--;\n }\n this.target = undefined;\n }\n };\n return BulletsAndNumberingDialog;\n}());\nexport { BulletsAndNumberingDialog };\n/* tslint:enable:no-any */ \n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { WCharacterFormat } from '../format/character-format';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * The Font dialog is used to modify formatting of selected text.\n */\n/* tslint:disable:no-any */\nvar FontDialog = /** @class */ (function () {\n /**\n * @private\n */\n function FontDialog(layoutViewer) {\n var _this = this;\n this.fontStyleInternal = undefined;\n this.fontNameList = undefined;\n this.fontStyleText = undefined;\n this.fontSizeText = undefined;\n this.colorPicker = undefined;\n this.underlineDrop = undefined;\n this.strikethroughBox = undefined;\n this.doublestrikethrough = undefined;\n this.superscript = undefined;\n this.subscript = undefined;\n //Character Format Property\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n this.fontColor = undefined;\n /**\n * @private\n */\n this.characterFormat = undefined;\n /**\n * @private\n */\n this.loadFontDialog = function () {\n _this.owner.updateFocus();\n var characterFormat;\n if (_this.characterFormat) {\n characterFormat = _this.characterFormat;\n }\n else {\n characterFormat = _this.owner.owner.selection.characterFormat;\n }\n _this.fontNameList.value = characterFormat.fontFamily;\n if (!characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 0;\n }\n else if (characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 1;\n }\n else if (!characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 2;\n }\n else if (characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 3;\n }\n if (!isNullOrUndefined(characterFormat.fontSize)) {\n for (var i = 0; i <= 15; i++) {\n var items = _this.fontSizeText.getItems();\n if (characterFormat.fontSize.toString() === items[i].innerHTML) {\n _this.fontSizeText.value = characterFormat.fontSize;\n _this.fontSizeText.index = i;\n break;\n }\n }\n }\n if (!isNullOrUndefined(characterFormat.fontColor)) {\n _this.colorPicker.value = characterFormat.fontColor;\n }\n else {\n _this.colorPicker.value = '#000000';\n }\n if (characterFormat.underline === 'None') {\n _this.underlineDrop.index = 0;\n }\n else if (characterFormat.underline === 'Single') {\n _this.underlineDrop.index = 1;\n }\n if (characterFormat.strikethrough === 'SingleStrike') {\n _this.strikethroughBox.checked = true;\n }\n else if (characterFormat.strikethrough === 'DoubleStrike') {\n _this.doublestrikethrough.checked = true;\n }\n else {\n _this.strikethroughBox.checked = false;\n _this.doublestrikethrough.checked = false;\n }\n if (characterFormat.baselineAlignment === 'Superscript') {\n _this.superscript.checked = true;\n }\n else if (characterFormat.baselineAlignment === 'Subscript') {\n _this.subscript.checked = true;\n }\n else {\n _this.superscript.checked = false;\n _this.subscript.checked = false;\n }\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n */\n this.closeFontDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n */\n this.onInsertFontFormat = function () {\n var format;\n if (_this.characterFormat) {\n format = _this.characterFormat;\n }\n else {\n format = new WCharacterFormat(undefined);\n }\n if (!isNullOrUndefined(_this.bold)) {\n format.bold = _this.bold;\n }\n if (!isNullOrUndefined(_this.italic)) {\n format.italic = _this.italic;\n }\n if (!isNullOrUndefined(_this.fontSize) && _this.fontSize > 0) {\n format.fontSize = _this.fontSize;\n }\n if (!isNullOrUndefined(_this.fontColor)) {\n format.fontColor = _this.fontColor;\n }\n if (!isNullOrUndefined(_this.baselineAlignment)) {\n format.baselineAlignment = _this.baselineAlignment;\n }\n if (!isNullOrUndefined(_this.strikethrough)) {\n format.strikethrough = _this.strikethrough;\n }\n if (!isNullOrUndefined(_this.underline)) {\n format.underline = _this.underline;\n }\n if (!isNullOrUndefined(_this.fontFamily)) {\n format.fontFamily = _this.fontFamily;\n }\n if (!_this.characterFormat) {\n _this.onCharacterFormat(_this.owner.selection, format);\n }\n else {\n _this.owner.owner.styleDialogModule.updateCharacterFormat();\n }\n _this.owner.dialog.hide();\n };\n this.fontSizeUpdate = function (args) {\n _this.fontSize = args.value;\n };\n this.fontStyleUpdate = function (args) {\n _this.fontStyle = args.value;\n };\n this.fontFamilyUpdate = function (args) {\n _this.fontFamily = args.value;\n };\n this.underlineUpdate = function (args) {\n _this.underline = args.value;\n };\n this.fontColorUpdate = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n _this.fontColor = args.currentValue.hex;\n }\n };\n this.singleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'SingleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n this.doubleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'DoubleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n this.superscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Superscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n this.subscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Subscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n this.owner = layoutViewer;\n }\n Object.defineProperty(FontDialog.prototype, \"fontStyle\", {\n /**\n * @private\n */\n get: function () {\n return this.fontStyleInternal;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontStyleInternal = value;\n switch (this.fontStyle) {\n case 'Bold':\n this.bold = true;\n this.italic = false;\n break;\n case 'Italic':\n this.bold = false;\n this.italic = true;\n break;\n case 'BoldItalic':\n this.bold = true;\n this.italic = true;\n break;\n case 'Regular':\n this.bold = false;\n this.italic = false;\n break;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FontDialog.prototype.getModuleName = function () {\n return 'FontDialog';\n };\n FontDialog.prototype.createInputElement = function (type, id, className) {\n var element = createElement('input', {\n attrs: { type: type },\n id: id,\n className: className\n });\n return element;\n };\n /**\n * @private\n */\n FontDialog.prototype.initFontDialog = function (locale) {\n var instance = this;\n var effectLabel;\n var strikeThroughElement;\n var superScriptElement;\n var subScriptElement;\n var doubleStrikeThroughElement;\n var id = this.owner.owner.containerId;\n this.target = createElement('div', { id: id + '_insertFontDialog', className: 'e-de-font-dlg' });\n var fontDiv = this.getFontDiv(locale);\n this.target.appendChild(fontDiv);\n var sizeDiv = this.getFontSizeDiv(locale);\n this.target.appendChild(sizeDiv);\n var colorDiv = createElement('div', { id: id + '_fontColor', styles: 'margin-top:15px;' });\n this.fontColorDiv = createElement('div', { id: id + '_fontColorDiv', className: 'e-de-font-dlg-display' });\n var fontColorLabel = createElement('label', {\n className: 'e-de-font-dlg-header-font-color e-de-font-color-margin', innerHTML: locale.getConstant('Font color')\n });\n this.fontColorDiv.appendChild(fontColorLabel);\n var fontColorElement = this.createInputElement('color', this.target.id + '_ColorDiv', 'e-de-font-dlg-color');\n this.fontColorDiv.appendChild(fontColorElement);\n colorDiv.appendChild(this.fontColorDiv);\n this.target.appendChild(colorDiv);\n var fontEffectsDiv = createElement('div', { id: id + '_fontEffectsDiv' });\n var fontEffectSubDiv1 = createElement('div', {\n className: 'e-de-font-color-label e-de-font-dlg-display',\n id: this.target.id + '_fontEffectsSubDiv1'\n });\n effectLabel = createElement('label', { className: 'e-de-font-dlg-header-effects', innerHTML: locale.getConstant('Effects') });\n fontEffectSubDiv1.appendChild(effectLabel);\n strikeThroughElement = this.createInputElement('checkbox', this.target.id + '_strikeThrough', '');\n fontEffectSubDiv1.appendChild(strikeThroughElement);\n superScriptElement = this.createInputElement('checkbox', this.target.id + '_superScript', '');\n fontEffectSubDiv1.appendChild(superScriptElement);\n fontEffectsDiv.appendChild(fontEffectSubDiv1);\n var fontEffectSubDiv2 = createElement('div', { className: 'e-de-font-checkbox', id: id + '_fontEffectsSubDiv2' });\n subScriptElement = this.createInputElement('checkbox', this.target.id + '_subScript', '');\n fontEffectSubDiv2.appendChild(subScriptElement);\n doubleStrikeThroughElement = this.createInputElement('checkbox', this.target.id + '_doubleStrikeThrough', '');\n fontEffectSubDiv2.appendChild(doubleStrikeThroughElement);\n fontEffectsDiv.appendChild(fontEffectSubDiv2);\n this.target.appendChild(fontEffectsDiv);\n this.owner.owner.element.appendChild(this.target);\n this.colorPicker = new ColorPicker({\n change: this.fontColorUpdate, value: '#000000',\n });\n this.colorPicker.appendTo(fontColorElement);\n this.strikethroughBox = new CheckBox({\n change: this.singleStrikeUpdate,\n cssClass: 'e-de-font-content-label',\n label: locale.getConstant('Strikethrough')\n });\n this.strikethroughBox.appendTo(strikeThroughElement);\n this.doublestrikethrough = new CheckBox({\n change: this.doubleStrikeUpdate,\n cssClass: 'e-de-font-content-checkbox-label',\n label: locale.getConstant('Double strikethrough')\n });\n this.doublestrikethrough.appendTo(doubleStrikeThroughElement);\n this.subscript = new CheckBox({\n label: locale.getConstant('Subscript'),\n change: this.subscriptUpdate\n });\n this.subscript.appendTo(subScriptElement);\n this.superscript = new CheckBox({\n label: locale.getConstant('Superscript'),\n cssClass: 'e-de-font-content-label', change: this.superscriptUpdate\n });\n this.superscript.appendTo(superScriptElement);\n };\n FontDialog.prototype.getFontSizeDiv = function (locale) {\n var fontSize;\n var sizeDiv;\n var id = this.owner.owner.containerId;\n sizeDiv = createElement('div', { id: id + '_fontSizeAndUnderlineDiv', className: 'e-de-font-dlg-padding e-de-font-dlg-display' });\n var sizeSubDiv1 = createElement('div', { id: id + '_fontSizeAndUnderlineSubDiv1' });\n var sizeLabel = createElement('label', { className: 'e-de-font-dlg-header', innerHTML: locale.getConstant('Size') });\n var styles = 'font-family:Roboto;font-size:14px;opacity:0.8;';\n fontSize = createElement('select', { id: this.target.id + '_fontSize', styles: styles });\n fontSize.innerHTML = '' +\n '' +\n '';\n sizeSubDiv1.appendChild(sizeLabel);\n sizeSubDiv1.appendChild(fontSize);\n sizeDiv.appendChild(sizeSubDiv1);\n var sizeSubDiv2 = createElement('div', {\n className: 'e-de-font-dlg-cb-right',\n id: id + '_fontSizeAndUnderlineSubDiv2'\n });\n var html = locale.getConstant('Underline style');\n var underlineLabel = createElement('label', { className: 'e-de-font-dlg-header', innerHTML: html });\n var underlineElement;\n underlineElement = createElement('select', { id: this.target.id + '_underLine', styles: styles });\n underlineElement.innerHTML = '';\n sizeSubDiv2.appendChild(underlineLabel);\n sizeSubDiv2.appendChild(underlineElement);\n sizeDiv.appendChild(sizeSubDiv2);\n this.fontSizeText = new ComboBox({ change: this.fontSizeUpdate, popupHeight: '170px', width: '170px' });\n this.fontSizeText.showClearButton = false;\n this.fontSizeText.appendTo(fontSize);\n this.underlineDrop = new DropDownList({ change: this.underlineUpdate, popupHeight: '100px', width: '170px' });\n this.underlineDrop.appendTo(underlineElement);\n return sizeDiv;\n };\n FontDialog.prototype.getFontDiv = function (locale) {\n var id = this.owner.owner.containerId;\n var fontDiv = createElement('div', { id: id + '_fontDiv', className: 'e-de-font-dlg-display' });\n var fontSubDiv1 = createElement('div', { id: id + '_fontSubDiv1' });\n var fontNameLabel = createElement('label', {\n className: 'e-de-font-dlg-header',\n innerHTML: locale.getConstant('Font')\n });\n var fontNameValues = createElement('select', { id: this.target.id + '_fontName' });\n fontNameValues.innerHTML = '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '';\n fontSubDiv1.appendChild(fontNameLabel);\n fontSubDiv1.appendChild(fontNameValues);\n fontDiv.appendChild(fontSubDiv1);\n var fontSubDiv2;\n var fontStyleLabel;\n var fontStyleValues;\n fontSubDiv2 = createElement('div', { className: 'e-de-font-dlg-cb-right', id: id + '_fontSubDiv2', styles: 'float:right;' });\n fontStyleLabel = createElement('label', { className: 'e-de-font-dlg-header', innerHTML: locale.getConstant('Font style') });\n var fontStyle = 'font-family:Roboto;font-size:14px;opacity:0.8;';\n fontStyleValues = createElement('select', { id: this.target.id + '_fontStyle', styles: fontStyle });\n fontStyleValues.innerHTML = '';\n fontSubDiv2.appendChild(fontStyleLabel);\n fontSubDiv2.appendChild(fontStyleValues);\n fontDiv.appendChild(fontSubDiv2);\n this.fontNameList = new ComboBox({ change: this.fontFamilyUpdate, popupHeight: '200px', width: '170px' });\n this.fontNameList.showClearButton = false;\n this.fontNameList.appendTo(fontNameValues);\n this.fontStyleText = new DropDownList({ change: this.fontStyleUpdate, popupHeight: '170px', width: '170px' });\n this.fontStyleText.appendTo(fontStyleValues);\n return fontDiv;\n };\n /**\n * @private\n */\n FontDialog.prototype.showFontDialog = function (characterFormat) {\n if (characterFormat) {\n this.characterFormat = characterFormat;\n }\n var locale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n locale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initFontDialog(locale);\n }\n this.owner.dialog.header = locale.getConstant('Font');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadFontDialog;\n this.owner.dialog.close = this.closeFontDialog;\n this.owner.dialog.buttons = [{\n click: this.onInsertFontFormat,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-font-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-font-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * Applies character format\n * @param {Selection} selection\n * @param {WCharacterFormat} format\n * @private\n */\n FontDialog.prototype.onCharacterFormat = function (selection, format) {\n this.owner.owner.editorModule.initHistory('CharacterFormat');\n if (selection.isEmpty) {\n if (selection.start.offset === selection.getParagraphLength(selection.start.paragraph)) {\n // tslint:disable-next-line:max-line-length\n this.owner.owner.editorModule.applyCharFormatValueInternal(selection, selection.start.paragraph.characterFormat, undefined, format);\n this.owner.owner.editorModule.reLayout(selection);\n }\n this.owner.updateFocus();\n return;\n }\n else {\n //Iterate and update formating.\n this.owner.owner.editorModule.setOffsetValue(this.owner.selection);\n this.owner.owner.editorModule.updateSelectionCharacterFormatting('CharacterFormat', format, false);\n }\n };\n /**\n * @private\n */\n FontDialog.prototype.enableCheckBoxProperty = function (args) {\n if (this.strikethroughBox.checked && this.doublestrikethrough.checked) {\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_doubleStrikeThrough') {\n this.doublestrikethrough.checked = true;\n }\n else {\n this.strikethroughBox.checked = true;\n }\n }\n if (this.superscript.checked && this.subscript.checked) {\n this.subscript.checked = false;\n this.superscript.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_subScript') {\n this.subscript.checked = true;\n }\n else {\n this.superscript.checked = true;\n }\n }\n };\n /**\n * @private\n */\n FontDialog.prototype.unWireEventsAndBindings = function () {\n this.fontNameList.value = '';\n this.fontSizeText.value = '';\n this.fontStyleText.value = '';\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n this.superscript.checked = false;\n this.subscript.checked = false;\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.fontColor = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n };\n /**\n * @private\n */\n FontDialog.prototype.destroy = function () {\n this.owner = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[m]);\n m--;\n }\n this.target = undefined;\n }\n if (this.fontNameList) {\n this.fontNameList.destroy();\n }\n this.fontNameList = undefined;\n if (this.fontStyleText) {\n this.fontStyleText.destroy();\n }\n this.fontStyleText = undefined;\n if (this.fontSizeText) {\n this.fontSizeText.destroy();\n }\n this.fontSizeText = undefined;\n if (this.colorPicker) {\n this.colorPicker.destroy();\n }\n this.colorPicker = undefined;\n if (this.underlineDrop) {\n this.underlineDrop.destroy();\n }\n this.underlineDrop = undefined;\n if (this.strikethroughBox) {\n this.strikethroughBox.destroy();\n }\n this.strikethroughBox = undefined;\n if (this.doublestrikethrough) {\n this.doublestrikethrough.destroy();\n }\n this.doublestrikethrough = undefined;\n if (this.superscript) {\n this.superscript.destroy();\n }\n this.superscript = undefined;\n if (this.subscript) {\n this.subscript.destroy();\n }\n this.subscript = undefined;\n };\n return FontDialog;\n}());\nexport { FontDialog };\n/* tslint:enable:no-any */ \n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WRowFormat, WCellFormat } from '../format/index';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { classList } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * The Table properties dialog is used to modify properties of selected table.\n */\nvar TablePropertiesDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TablePropertiesDialog(viewer) {\n var _this = this;\n this.hasTableWidth = false;\n this.hasCellWidth = false;\n /**\n * @private\n */\n this.isTableBordersAndShadingUpdated = false;\n /**\n * @private\n */\n this.isCellBordersAndShadingUpdated = false;\n this.tabObj = undefined;\n /**\n * @private\n */\n this.isCellOptionsUpdated = false;\n /**\n * @private\n */\n this.isTableOptionsUpdated = false;\n this.onBeforeOpen = function () {\n _this.owner.updateFocus();\n _this.loadTableProperties();\n };\n /**\n * @private\n */\n this.onCloseTablePropertyDialog = function () {\n _this.unWireEvent.bind(_this);\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.applyTableProperties = function () {\n var selection = _this.owner.selection;\n if (!_this.preferCheckBox.checked && !_this.preferCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.tableFormat.preferredWidth) || selection.tableFormat.preferredWidth !== 0) {\n _this.tableFormat.preferredWidth = 0;\n _this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (_this.tableFormat.hasValue('tableAlignment') && _this.tableFormat.tableAlignment !== 'Left') {\n if (isNullOrUndefined(selection.tableFormat.leftIndent) || selection.tableFormat.leftIndent !== 0) {\n _this.tableFormat.leftIndent = 0;\n }\n }\n if (!_this.rowHeightCheckBox.checked && !_this.rowHeightCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.rowFormat.height) || selection.rowFormat.height !== 0) {\n _this.rowFormat.heightType = 'AtLeast';\n _this.rowFormat.height = 0;\n }\n }\n if (!_this.preferredCellWidthCheckBox.checked && !_this.preferredCellWidthCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.cellFormat.preferredWidth) || selection.cellFormat.preferredWidth === 0) {\n _this.cellFormat.preferredWidthType = 'Point';\n _this.cellFormat.preferredWidth = 0;\n }\n }\n else {\n if (_this.cellFormat.preferredWidthType === 'Percent') {\n if (!_this.tableFormat.hasValue('preferredWidth') && !_this.tableFormat.hasValue('preferredWidthType')\n && _this.owner.selection.start.paragraph.associatedCell.ownerTable.tableFormat.preferredWidth === 0) {\n // tslint:disable-next-line:max-line-length\n var containerWidth = _this.owner.selection.start.paragraph.associatedCell.ownerTable.getOwnerWidth(true);\n var tableWidth = _this.owner.selection.start.paragraph.associatedCell.ownerTable.getTableClientWidth(containerWidth);\n _this.tableFormat.preferredWidthType = 'Percent';\n _this.tableFormat.preferredWidth = tableWidth / HelperMethods.convertPixelToPoint(_this.owner.clientArea.width) * 100;\n }\n }\n }\n if (_this.rowHeightValue) {\n _this.rowFormat.height = _this.rowHeightValue;\n }\n _this.owner.owner.editorModule.initComplexHistory('TableProperties');\n _this.owner.owner.editorModule.onTableFormat(_this.tableFormat);\n _this.owner.owner.editorModule.onRowFormat(_this.rowFormat);\n _this.owner.owner.editorModule.onCellFormat(_this.cellFormat);\n _this.owner.owner.editorHistory.updateComplexHistory();\n _this.closeTablePropertiesDialog();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.applyTableSubProperties = function () {\n if (_this.isCellOptionsUpdated) {\n var cellFormat = _this.owner.owner.cellOptionsDialogModule.cellFormat;\n _this.owner.owner.cellOptionsDialogModule.applySubCellOptions(cellFormat);\n }\n if (_this.isTableOptionsUpdated) {\n var tableFormat = _this.owner.owner.tableOptionsDialogModule.tableFormat;\n _this.owner.owner.tableOptionsDialogModule.applySubTableOptions(tableFormat);\n }\n _this.isCellOptionsUpdated = false;\n _this.isTableOptionsUpdated = false;\n };\n /**\n * @private\n */\n this.unWireEvent = function () {\n //Table Format\n _this.preferCheckBox.change = undefined;\n _this.tableWidthBox.change = undefined;\n _this.tableWidthType.change = undefined;\n _this.leftIndentBox.change = undefined;\n //Row Format\n _this.rowHeightCheckBox.change = undefined;\n _this.rowHeightBox.change = undefined;\n _this.rowHeightType.change = undefined;\n _this.repeatHeader.change = undefined;\n _this.allowRowBreak.change = undefined;\n //Cell Format\n _this.preferredCellWidthCheckBox.change = undefined;\n _this.cellWidthBox.change = undefined;\n _this.cellWidthType.change = undefined;\n _this.cellFormat.destroy();\n _this.rowFormat.destroy();\n _this.tableFormat.destroy();\n _this.rowHeightValue = undefined;\n _this.owner.dialog2.open = _this.owner.selection.hideCaret.bind(_this.owner);\n };\n /**\n * @private\n */\n this.closeTablePropertiesDialog = function () {\n _this.owner.dialog2.hide();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.changeTableCheckBox = function () {\n var enable = (_this.preferCheckBox.checked || _this.preferCheckBox.indeterminate);\n _this.tableWidthBox.enabled = enable;\n _this.tableWidthType.enabled = enable;\n if (enable) {\n _this.tableFormat.preferredWidthType = (_this.tableWidthType.value === 'Points') ?\n 'Point' : _this.tableWidthType.value;\n }\n else {\n _this.tableFormat.preferredWidthType = _this.owner.selection.tableFormat.preferredWidthType;\n }\n };\n /**\n * @private\n */\n this.changeTableAlignment = function (event) {\n _this.updateClassForAlignmentProperties(_this.tableTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n if (element.classList.contains('e-de-table-left-alignment')) {\n _this.leftIndentBox.enabled = true;\n }\n else {\n _this.leftIndentBox.enabled = false;\n }\n _this.tableFormat.tableAlignment = _this.getTableAlignment();\n };\n /**\n * @private\n */\n this.changeTableRowCheckBox = function () {\n _this.rowHeightType.enabled = _this.rowHeightCheckBox.checked;\n _this.rowHeightBox.enabled = _this.rowHeightCheckBox.checked;\n if (_this.rowHeightType.enabled) {\n _this.rowFormat.heightType = _this.rowHeightType.value;\n }\n else {\n _this.rowFormat.heightType = _this.owner.selection.rowFormat.heightType;\n }\n };\n /**\n * @private\n */\n this.changeTableCellCheckBox = function () {\n _this.cellWidthType.enabled = _this.preferredCellWidthCheckBox.checked;\n _this.cellWidthBox.enabled = _this.preferredCellWidthCheckBox.checked;\n };\n /**\n * @private\n */\n this.changeCellAlignment = function (event) {\n _this.updateClassForCellAlignment(_this.cellTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n _this.cellFormat.verticalAlignment = _this.getCellAlignment();\n };\n //#endregion\n /**\n * @private\n */\n this.showTableOptionsDialog = function () {\n _this.owner.owner.tableOptionsDialogModule.show();\n _this.owner.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n */\n this.showBordersShadingsPropertiesDialog = function () {\n _this.owner.owner.bordersAndShadingDialogModule.show();\n _this.owner.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n */\n this.showCellOptionsDialog = function () {\n _this.owner.owner.cellOptionsDialogModule.show();\n _this.owner.dialog2.element.style.pointerEvents = 'none';\n };\n this.owner = viewer;\n }\n Object.defineProperty(TablePropertiesDialog.prototype, \"cellFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.cellFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"tableFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n this.tableFormatIn = new WTableFormat();\n return this.tableFormatIn;\n }\n return this.tableFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.tableFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"rowFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.rowFormatInternal)) {\n this.rowFormatInternal = new WRowFormat();\n return this.rowFormatInternal;\n }\n return this.rowFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n TablePropertiesDialog.prototype.getModuleName = function () {\n return 'TablePropertiesDialog';\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.initTablePropertyDialog = function (localValue) {\n var id = this.owner.owner.containerId + '_TablePropertiesDialog';\n this.target = createElement('div', { id: id, className: 'e-de-table-properties-dlg' });\n this.owner.owner.element.appendChild(this.target);\n var ejtabContainer = createElement('div', { id: this.target.id + '_TabContainer' });\n this.target.appendChild(ejtabContainer);\n this.tableTab = createElement('div', {\n id: this.target.id + '_TablePropertiesContentDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.rowTab = createElement('div', {\n id: this.target.id + '_RowPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.cellTab = createElement('div', {\n id: this.target.id + '_CellPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n var separatorLine = createElement('div', { className: 'e-de-table-dialog-separator-line' });\n // tslint:disable-next-line:max-line-length\n var ejtab = createElement('div', { id: this.target.id + '_TablePropertiesDialogTab', className: 'e-de-table-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var tableHeader = createElement('div', {\n id: this.target.id + '_tableHeader', innerHTML: localValue.getConstant('Table')\n });\n var rowHeader = createElement('div', {\n id: this.target.id + '_rowHeader', innerHTML: localValue.getConstant('Row')\n });\n var cellHeader = createElement('div', {\n id: this.target.id + '_cellHeader', innerHTML: localValue.getConstant('Cell')\n });\n headerContainer.appendChild(tableHeader);\n headerContainer.appendChild(rowHeader);\n headerContainer.appendChild(cellHeader);\n var contentContainer = createElement('div', { className: 'e-content' });\n var tableContent = createElement('div', { id: this.target.id + '_tableContent' });\n var rowContent = createElement('div', { id: this.target.id + '_rowContent' });\n var cellContent = createElement('div', { id: this.target.id + '_cellContent' });\n tableContent.appendChild(this.tableTab);\n rowContent.appendChild(this.rowTab);\n cellContent.appendChild(this.cellTab);\n contentContainer.appendChild(tableContent);\n contentContainer.appendChild(rowContent);\n contentContainer.appendChild(cellContent);\n ejtab.appendChild(headerContainer);\n ejtab.appendChild(contentContainer);\n ejtabContainer.appendChild(ejtab);\n this.initTableProperties(this.tableTab, localValue);\n this.initTableRowProperties(this.rowTab, localValue);\n this.initTableCellProperties(this.cellTab, localValue);\n this.tabObj = new Tab({}, ejtab);\n this.target.appendChild(separatorLine);\n var alignMentButtons = this.tableTab.getElementsByClassName(this.tableTab.id + 'e-de-table-alignment');\n for (var i = 0; i < alignMentButtons.length; i++) {\n alignMentButtons[i].addEventListener('click', this.changeTableAlignment);\n }\n var cellAlignment = this.cellTab.getElementsByClassName(this.cellTab.id + 'e-de-table-cell-alignment');\n for (var i = 0; i < cellAlignment.length; i++) {\n cellAlignment[i].addEventListener('click', this.changeCellAlignment);\n }\n var tableTabHeader = this.tabObj.element.getElementsByClassName('e-item e-toolbar-item')[0];\n var tableTabHeaderItem = tableTabHeader.getElementsByClassName('e-tab-wrap')[0];\n tableTabHeaderItem.classList.add('e-de-table-ppty-dlg-table-header');\n var rowTabHeader = this.tabObj.element.getElementsByClassName('e-item e-toolbar-item')[1];\n var rowTabHeaderItem = rowTabHeader.getElementsByClassName('e-tab-wrap')[0];\n rowTabHeaderItem.classList.add('e-de-table-ppty-dlg-row-header');\n var cellTabHeader = this.tabObj.element.getElementsByClassName('e-item e-toolbar-item')[2];\n var cellTabHeaderItem = cellTabHeader.getElementsByClassName('e-tab-wrap')[0];\n cellTabHeaderItem.classList.add('e-de-table-ppty-dlg-cell-header');\n this.tabObj.element.getElementsByClassName('e-indicator')[0].style.right = '155px';\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTablePropertyDialog(localValue);\n }\n if (this.owner.selection.caret.style.display !== 'none') {\n this.owner.selection.caret.style.display = 'none';\n }\n this.owner.dialog2.header = localValue.getConstant('Table Properties');\n this.owner.dialog2.position = { X: 'center', Y: 'center' };\n this.owner.dialog2.width = 'auto';\n this.owner.dialog2.height = 'auto';\n this.owner.dialog2.content = this.target;\n this.owner.dialog2.beforeOpen = this.onBeforeOpen;\n this.owner.dialog2.close = this.onCloseTablePropertyDialog;\n this.owner.dialog2.open = this.wireEvent.bind(this);\n this.owner.dialog2.buttons = [{\n click: this.applyTableProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ppty-okay', isPrimary: true }\n },\n {\n click: this.closeTablePropertiesDialog,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-ppty-cancel' }\n }];\n //this.tabObj.select(0);\n this.owner.dialog2.dataBind();\n this.owner.dialog2.show();\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.calculateGridValue = function (table) {\n table.calculateGrid();\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.owner.selection.owner.isLayoutEnabled = true;\n this.owner.layout.reLayoutTable(table);\n this.owner.owner.editorModule.reLayout(this.owner.selection);\n this.owner.owner.editorModule.updateSelectionTextPosition(true);\n var history = this.owner.owner.editorHistory;\n if (history && history.currentBaseHistoryInfo) {\n if (history.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history.currentBaseHistoryInfo.updateSelection();\n }\n history.updateHistory();\n }\n this.owner.owner.editorModule.fireContentChange();\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.loadTableProperties = function () {\n this.setTableProperties();\n this.setTableRowProperties();\n this.setTableCellProperties();\n if (!this.owner.owner.bordersAndShadingDialogModule) {\n this.bordersAndShadingButton.disabled = true;\n }\n else {\n this.bordersAndShadingButton.disabled = false;\n }\n // if (!this.owner.owner.tableOptionsDialogModule) {\n // this.tableOptionButton.disabled = true;\n // } else {\n this.tableOptionButton.disabled = false;\n // }\n // if (!this.owner.owner.cellOptionsDialogModule) {\n // this.cellOptionButton.disabled = true;\n // } else {\n this.cellOptionButton.disabled = false;\n // }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.wireEvent = function () {\n this.owner.selection.hideCaret();\n //Table Format\n this.preferCheckBox.change = this.changeTableCheckBox.bind(this);\n this.tableWidthBox.change = this.onTableWidthChange.bind(this);\n this.tableWidthType.change = this.onTableWidthTypeChange.bind(this);\n this.leftIndentBox.change = this.onLeftIndentChange.bind(this);\n //Row Format\n this.rowHeightCheckBox.change = this.changeTableRowCheckBox.bind(this);\n this.rowHeightBox.change = this.onRowHeightChange.bind(this);\n this.rowHeightType.change = this.onRowHeightTypeChange.bind(this);\n this.allowRowBreak.change = this.onAllowBreakAcrossPage.bind(this);\n this.repeatHeader.change = this.onRepeatHeader.bind(this);\n //Cell Format\n this.preferredCellWidthCheckBox.change = this.changeTableCellCheckBox.bind(this);\n this.cellWidthBox.change = this.onCellWidthChange.bind(this);\n this.cellWidthType.change = this.onCellWidthTypeChange.bind(this);\n };\n //#region Table Format\n /**\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n TablePropertiesDialog.prototype.initTableProperties = function (element, localValue) {\n var container = createElement('div', { id: element.id + '_table_TabContainer' });\n var sizeHeader = createElement('div', {\n id: container.id + '_sizeLabel', innerHTML: localValue.getConstant('Size'),\n styles: 'width:100%;margin:0px;padding-top: 20px;padding-bottom: 0px;', className: 'e-de-table-dialog-options-label'\n });\n var parentContainer = createElement('div', { styles: 'display: inline-flex;' });\n var childContainer1 = createElement('div', {\n styles: 'float: left;',\n className: 'e-de-table-container-div'\n });\n var childContainer2 = createElement('div', {\n className: 'e-de-table-ppty-dlg-preferred-width-div'\n });\n var child1 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-ppty-dlg-measure-div'\n });\n var child2 = createElement('div', {\n styles: 'display: inline;position: absolute;',\n className: 'e-de-table-ppty-dlg-measure-drop-down-div'\n });\n var childContainer3 = createElement('div');\n var preferCheckBox = createElement('input', {\n id: element.id + '_Prefer_Width_CheckBox', attrs: { 'type': 'checkbox' }\n });\n this.preferredWidth = createElement('input', { id: element.id + 'preferred_Width' });\n var controlDiv = createElement('div');\n var tableWidthType = createElement('select', {\n innerHTML: '', id: element.id + '_width_dropdown'\n });\n var labeltext = createElement('label', {\n innerHTML: localValue.getConstant('Measure in'), styles: 'width: 60px;font-size: 11px; font-weight: normal;'\n });\n var alignmentHeader = createElement('div', {\n innerHTML: localValue.getConstant('Alignment'), className: 'e-de-table-dialog-options-label',\n styles: 'width: 100%;margin: 0px;padding-bottom: 15px'\n });\n var alignmentContainer = createElement('div', { styles: 'height:70px;' });\n var classDivName = element.id + 'e-de-table-alignment';\n var leftAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.left = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-left-alignment ' + classDivName,\n id: element.id + '_left_alignment', styles: 'width:54px;height:54px;margin:2px'\n });\n leftAlignDiv.appendChild(this.left);\n var centerAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.center = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-center-alignment ' + classDivName,\n id: element.id + '_center_alignment', styles: 'width:54px;height:54px;margin:2px'\n });\n centerAlignDiv.appendChild(this.center);\n this.right = createElement('div', {\n styles: 'width:54px;height:54px;margin:2px', id: element.id + '_right_alignment',\n className: 'e-icons e-de-table-properties-alignment e-de-table-right-alignment ' + classDivName\n });\n var rightAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n rightAlignDiv.appendChild(this.right);\n var leftlabel = createElement('label', {\n innerHTML: localValue.getConstant('Left'), className: 'e-de-table-dia-align-label'\n });\n var centerlabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var rightlabel = createElement('label', {\n innerHTML: localValue.getConstant('Right'), className: 'e-de-table-dia-align-label'\n });\n var leftIndenetContainer = createElement('div', {\n className: 'e-de-table-ppty-dlg-left-indent-container'\n });\n var leftIndentLabel = createElement('label', {\n innerHTML: localValue.getConstant('Indent from left'),\n styles: 'font-weight: normal;font-size: 11px;float:right;margin-right:121px;'\n });\n var leftIndentBox = createElement('div', {\n styles: 'margin-top: 27px;'\n });\n this.leftIndent = createElement('input', { id: element.id + '_left_indent' });\n var tableOptionContiner = createElement('div', {\n className: 'e-de-tbl-dlg-border-btn'\n });\n this.bordersAndShadingButton = createElement('button', {\n innerHTML: localValue.getConstant('Borders and Shading'),\n id: element.id + '_borders_and_shadings', className: 'e-control e-btn e-flat e-de-ok-button'\n });\n this.tableOptionButton = createElement('button', {\n className: 'e-control e-btn e-flat', innerHTML: localValue.getConstant('Options'),\n id: element.id + '_table_cellmargin'\n });\n this.tableOptionButton.addEventListener('click', this.showTableOptionsDialog);\n this.bordersAndShadingButton.addEventListener('click', this.showBordersShadingsPropertiesDialog);\n tableOptionContiner.appendChild(this.bordersAndShadingButton);\n tableOptionContiner.appendChild(this.tableOptionButton);\n leftIndenetContainer.appendChild(leftIndentLabel);\n leftIndentBox.appendChild(this.leftIndent);\n leftIndenetContainer.appendChild(leftIndentBox);\n alignmentContainer.appendChild(leftAlignDiv);\n alignmentContainer.appendChild(centerAlignDiv);\n alignmentContainer.appendChild(rightAlignDiv);\n leftAlignDiv.appendChild(leftlabel);\n centerAlignDiv.appendChild(centerlabel);\n rightAlignDiv.appendChild(rightlabel);\n alignmentContainer.appendChild(leftIndenetContainer);\n container.appendChild(sizeHeader);\n element.appendChild(container);\n childContainer1.appendChild(preferCheckBox);\n parentContainer.appendChild(childContainer1);\n childContainer2.appendChild(this.preferredWidth);\n parentContainer.appendChild(childContainer2);\n controlDiv.appendChild(tableWidthType);\n child1.appendChild(labeltext);\n child2.appendChild(controlDiv);\n childContainer3.appendChild(child1);\n childContainer3.appendChild(child2);\n parentContainer.appendChild(childContainer3);\n element.appendChild(parentContainer);\n element.appendChild(alignmentHeader);\n element.appendChild(alignmentContainer);\n element.appendChild(tableOptionContiner);\n this.tableWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, width: 120, enablePersistence: false\n });\n this.tableWidthBox.appendTo(this.preferredWidth);\n this.leftIndentBox = new NumericTextBox({\n value: 0, decimals: 2, min: -1584, max: 1584, width: 140, enablePersistence: false\n });\n this.leftIndentBox.appendTo(this.leftIndent);\n this.preferCheckBox = new CheckBox({\n label: localValue.getConstant('Preferred Width')\n });\n this.preferCheckBox.appendTo(preferCheckBox);\n this.tableWidthType = new DropDownList({ width: '120px' });\n this.tableWidthType.appendTo(tableWidthType);\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onTableWidthChange = function () {\n this.tableFormat.preferredWidth = this.tableWidthBox.value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onTableWidthTypeChange = function () {\n var value;\n var table = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n var width = HelperMethods.convertPixelToPoint(this.owner.clientArea.width);\n if (this.tableWidthType.text === 'Percent' && this.owner.selection.tableFormat.preferredWidthType !== 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n this.formatNumericTextBox(this.tableWidthBox, 'Percent', value);\n }\n else if (this.tableWidthType.text === 'Points' && this.owner.selection.tableFormat.preferredWidthType !== 'Point') {\n value = width / 100 * this.tableWidthBox.value;\n this.formatNumericTextBox(this.tableWidthBox, 'Point', value);\n }\n else {\n if (this.tableWidthBox.format === '#\\'\\%\\'') {\n if (this.tableWidthType.text === 'Points') {\n value = width / 100 * this.tableWidthBox.value;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n else {\n if (this.tableWidthType.text === 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n // tslint:disable-next-line:max-line-length\n this.formatNumericTextBox(this.tableWidthBox, (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text, value);\n }\n this.tableFormat.preferredWidthType = (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onLeftIndentChange = function () {\n this.tableFormat.leftIndent = this.leftIndentBox.value;\n };\n TablePropertiesDialog.prototype.setTableProperties = function () {\n //instance of Table Property values\n var tableFormat = this.owner.selection.tableFormat;\n var tableHasWidth = tableFormat.preferredWidth > 0;\n var preferredWidth = tableFormat.preferredWidth;\n if (isNullOrUndefined(tableFormat.preferredWidth)) {\n this.preferCheckBox.indeterminate = true;\n var startTable = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n var table = startTable.combineWidget(this.owner);\n preferredWidth = table.tableFormat.preferredWidth;\n }\n else {\n this.preferCheckBox.checked = tableHasWidth;\n }\n this.tableWidthBox.enabled = tableHasWidth;\n this.tableWidthType.enabled = tableHasWidth;\n this.formatNumericTextBox(this.tableWidthBox, tableFormat.preferredWidthType, preferredWidth);\n if (tableFormat.preferredWidthType === 'Auto' || tableFormat.preferredWidthType === 'Point') {\n this.tableWidthType.index = 0;\n }\n else {\n this.tableWidthType.index = 1;\n }\n this.leftIndentBox.value = tableFormat.leftIndent;\n this.leftIndentBox.enabled = tableFormat.tableAlignment === 'Left';\n classList(this.left, [], ['e-de-table-alignment-active']);\n classList(this.right, [], ['e-de-table-alignment-active']);\n classList(this.center, [], ['e-de-table-alignment-active']);\n if (tableFormat.tableAlignment === 'Left') {\n this.left.classList.add('e-de-table-alignment-active');\n }\n else if (tableFormat.tableAlignment === 'Center') {\n this.center.classList.add('e-de-table-alignment-active');\n }\n else if (tableFormat.tableAlignment === 'Right') {\n this.right.classList.add('e-de-table-alignment-active');\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.getTableAlignment = function () {\n var id = this.tableTab.id;\n var groupButtons = this.tableTab.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return 'Left';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return 'Right';\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.updateClassForAlignmentProperties = function (element) {\n var id = element.id;\n var groupButtons = element.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n classList(groupButton, ['e-de-table-properties-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n //#endregion\n //#region Row Format\n /**\n * @private\n */\n TablePropertiesDialog.prototype.initTableRowProperties = function (element, localValue) {\n var rowDiv = createElement('div', { styles: 'width: 100%;' });\n var sizeLabeldiv = createElement('div', {\n innerHTML: localValue.getConstant('Size'),\n styles: 'width: 100%;padding-top: 20px;padding-bottom: 10px;',\n className: 'e-de-table-dialog-options-label'\n });\n var parentDiv = createElement('div', { styles: 'display: inline;width: 100%;' });\n var childDiv1 = createElement('div', {\n styles: 'display: inline;float: left;',\n className: 'e-de-table-header-div'\n });\n var rowHeightCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: element.id + '_height_CheckBox'\n });\n var childdiv2 = createElement('div', {\n styles: 'display: inline-block;',\n className: 'e-de-row-ht-top'\n });\n this.rowHeight = createElement('input', {\n attrs: { 'type': 'text' }, 'id': element.id + '_table_row_height'\n });\n var child2 = createElement('div', {\n styles: 'float: right;display: inline;width: auto;margin-top: 5px;'\n });\n var child3 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-ppty-dlg-row-height-label'\n });\n var child4 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-subheader-div'\n });\n var controlDiv = createElement('div');\n var rowHeightType = createElement('select', {\n innerHTML: '',\n id: element.id + '_height_type'\n });\n var labeltext = createElement('label', {\n innerHTML: localValue.getConstant('Row height is'), styles: 'font-size: 11px;font-weight: normal;width: 75px;'\n });\n rowDiv.appendChild(sizeLabeldiv);\n element.appendChild(rowDiv);\n childDiv1.appendChild(rowHeightCheckBox);\n parentDiv.appendChild(childDiv1);\n childdiv2.appendChild(this.rowHeight);\n parentDiv.appendChild(childdiv2);\n controlDiv.appendChild(rowHeightType);\n child3.appendChild(labeltext);\n child4.appendChild(controlDiv);\n child2.appendChild(child3);\n child2.appendChild(child4);\n parentDiv.appendChild(child2);\n element.appendChild(parentDiv);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Options'), styles: 'width: 100%;',\n className: 'e-de-table-dialog-options-label'\n });\n // tslint:disable-next-line:max-line-length\n var allowRowContainer = createElement('div', { className: 'e-de-table-ppty-options-break' });\n var repeatHeaderContaniner = createElement('div', { className: 'e-de-table-ppty-options-header-row' });\n var allowRowBreak = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: element.id + '_allow_row_break'\n });\n var repeatHeader = createElement('input', {\n attrs: { 'type': 'checkbox' }, 'id': element.id + '_repeat_header'\n });\n allowRowContainer.appendChild(allowRowBreak);\n repeatHeaderContaniner.appendChild(repeatHeader);\n element.appendChild(alignmentDiv);\n element.appendChild(allowRowContainer);\n element.appendChild(repeatHeaderContaniner);\n this.rowHeightBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, width: 120, enablePersistence: false\n });\n this.rowHeightBox.appendTo(this.rowHeight);\n this.rowHeightCheckBox = new CheckBox({\n label: localValue.getConstant('Specify height')\n });\n this.rowHeightCheckBox.appendTo(rowHeightCheckBox);\n this.rowHeightType = new DropDownList({ width: '120px' });\n this.rowHeightType.appendTo(rowHeightType);\n this.allowRowBreak = new CheckBox({\n label: localValue.getConstant('Allow row to break across pages')\n });\n this.allowRowBreak.appendTo(allowRowBreak);\n this.repeatHeader = new CheckBox({\n label: localValue.getConstant('Repeat as header row at the top of each page')\n });\n this.repeatHeader.appendTo(repeatHeader);\n };\n TablePropertiesDialog.prototype.setTableRowProperties = function () {\n var rowFormat = this.owner.selection.rowFormat;\n var enableRowHeight = (rowFormat.height > 0 || rowFormat.heightType === 'Exactly');\n //instance of table row values\n if (enableRowHeight) {\n this.rowHeightCheckBox.checked = true;\n }\n else {\n if (rowFormat.heightType === undefined) {\n this.rowHeightCheckBox.indeterminate = true;\n enableRowHeight = true;\n }\n else {\n this.rowHeightCheckBox.checked = false;\n }\n }\n this.rowHeightBox.enabled = enableRowHeight;\n this.rowHeightType.enabled = enableRowHeight;\n // let enabledHeader: boolean = this.enableRepeatHeader() ? false : true;\n var enabledHeader = true;\n if (isNullOrUndefined(this.owner.selection.rowFormat.isHeader)) {\n this.repeatHeader.indeterminate = true;\n this.repeatHeader.disabled = true;\n }\n else if (this.owner.selection.rowFormat.isHeader) {\n this.repeatHeader.checked = !enabledHeader;\n this.repeatHeader.indeterminate = enabledHeader;\n this.repeatHeader.disabled = enabledHeader;\n }\n else {\n this.repeatHeader.checked = false;\n this.repeatHeader.indeterminate = false;\n this.repeatHeader.disabled = enabledHeader;\n }\n if (isNullOrUndefined(rowFormat.allowBreakAcrossPages)) {\n this.allowRowBreak.indeterminate = true;\n }\n else {\n this.allowRowBreak.checked = rowFormat.allowBreakAcrossPages;\n }\n this.rowHeightBox.value = rowFormat.height;\n if (rowFormat.heightType === 'Auto' || rowFormat.heightType === 'AtLeast') {\n this.rowHeightType.index = 0;\n }\n else {\n this.rowHeightType.index = 1;\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onRowHeightChange = function () {\n this.rowHeightValue = this.rowHeightBox.value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onRowHeightTypeChange = function () {\n this.rowFormat.heightType = this.rowHeightType.text;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onAllowBreakAcrossPage = function () {\n this.rowFormat.allowBreakAcrossPages = this.allowRowBreak.checked;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onRepeatHeader = function () {\n this.rowFormat.isHeader = this.repeatHeader.checked;\n };\n /**\n * @private\n */\n // public enableRepeatHeader(): boolean {\n // let isFirstRow: number = 0;\n // for (let i: number = 0; i < this.owner.selection.selectionRanges.length; i++) {\n // let range: SelectionRange = this.owner.selection.selectionRanges.getRange(i);\n // let table: WTable = range.start.paragraph.associatedCell.ownerTable;\n // if (table.childNodes.indexOf(range.start.paragraph.associatedCell.ownerRow) === 0 ||\n // table.childNodes.indexOf(range.start.paragraph.associatedCell.ownerRow) === 0) {\n // isFirstRow++;\n // }\n // }\n // return isFirstRow === this.owner.selection.selectionRanges.length;\n // }\n //#endregion\n //#region Cell Format\n /**\n * @private\n */\n TablePropertiesDialog.prototype.initTableCellProperties = function (element, localValue) {\n var sizeDiv = createElement('div', { styles: 'width: 100%;' });\n var div = createElement('div', {\n innerHTML: localValue.getConstant('Size'), className: 'e-de-table-dialog-options-label',\n styles: 'width: 100%;padding-top: 20px;padding-bottom: 10px;',\n });\n var parentdiv = createElement('div', { styles: 'display: inline;width: 100%;' });\n var childdiv1 = createElement('div', {\n styles: 'display: inline;float: left;',\n className: 'e-de-table-cell-header-div'\n });\n var preferredCellWidthCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: element.id + '_Prefer_Width_CheckBox_cell'\n });\n var childdiv2 = createElement('div', {\n styles: 'display: inline-block;',\n className: 'e-de-cell-width-top'\n });\n this.preferredCellWidth = createElement('input', {\n id: element.id + 'tablecell_Width_textBox', attrs: { 'type': 'text' }\n });\n var child2 = createElement('div', {\n styles: 'float: right;display: inline;width: auto;margin-top: 5px;'\n });\n var child3 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-ppty-dlg-cell-tab-measure-label'\n });\n var child4 = createElement('div', {\n styles: 'display: inline;float: right;', className: 'e-de-table-cell-subheader-div'\n });\n var controlDiv = createElement('div');\n var cellWidthType = createElement('select', {\n innerHTML: '', 'id': element.id + '_measure_type_cell'\n });\n var labeltext = createElement('label', {\n innerHTML: localValue.getConstant('Measure in'),\n styles: 'font-size: 11px;font-weight: normal;'\n });\n sizeDiv.appendChild(div);\n element.appendChild(sizeDiv);\n childdiv1.appendChild(preferredCellWidthCheckBox);\n parentdiv.appendChild(childdiv1);\n childdiv2.appendChild(this.preferredCellWidth);\n parentdiv.appendChild(childdiv2);\n controlDiv.appendChild(cellWidthType);\n child3.appendChild(labeltext);\n child4.appendChild(controlDiv);\n child2.appendChild(child3);\n child2.appendChild(child4);\n parentdiv.appendChild(child2);\n element.appendChild(parentdiv);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Vertical alignment'),\n styles: 'width: 100%;margin: 0px;',\n className: 'e-de-table-dialog-options-label'\n });\n var classDivName = element.id + 'e-de-table-cell-alignment';\n var divAlignment = createElement('div', {\n styles: 'width: 100%;height: 100px;'\n });\n var divStyle = 'width:54px;height:54px;margin:2px;border-style:solid;border-width:1px';\n var topAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.cellTopAlign = createElement('div', {\n styles: divStyle, id: element.id + '_cell_top-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-top-alignment ' + classDivName\n });\n topAlignDiv.appendChild(this.cellTopAlign);\n var centerAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.cellCenterAlign = createElement('div', {\n styles: divStyle, id: element.id + '_cell_center-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-center-alignment ' + classDivName\n });\n centerAlignDiv.appendChild(this.cellCenterAlign);\n var bottomAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.cellBottomAlign = createElement('div', {\n styles: divStyle, id: element.id + '_cell_bottom-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-bottom-alignment ' + classDivName\n });\n bottomAlignDiv.appendChild(this.cellBottomAlign);\n var topLabel = createElement('label', {\n innerHTML: localValue.getConstant('Top'), className: 'e-de-table-dia-align-label'\n });\n var centerLabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var bottomLabel = createElement('label', {\n innerHTML: localValue.getConstant('Bottom'), className: 'e-de-table-dia-align-label'\n });\n this.cellOptionButton = createElement('button', {\n innerHTML: localValue.getConstant('Options'), id: element.id + '_table_cellmargin',\n className: 'e-de-tbl-dlg-op-btn e-control e-btn e-flat e-de-cell-options',\n });\n divAlignment.appendChild(topAlignDiv);\n divAlignment.appendChild(centerAlignDiv);\n divAlignment.appendChild(bottomAlignDiv);\n topAlignDiv.appendChild(topLabel);\n centerAlignDiv.appendChild(centerLabel);\n bottomAlignDiv.appendChild(bottomLabel);\n element.appendChild(alignmentDiv);\n element.appendChild(divAlignment);\n element.appendChild(this.cellOptionButton);\n this.cellOptionButton.addEventListener('click', this.showCellOptionsDialog);\n this.cellWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, width: 120, enablePersistence: false\n });\n this.cellWidthBox.appendTo(this.preferredCellWidth);\n this.preferredCellWidthCheckBox = new CheckBox({ label: localValue.getConstant('Preferred Width') });\n this.preferredCellWidthCheckBox.appendTo(preferredCellWidthCheckBox);\n this.cellWidthType = new DropDownList({ width: '120px' });\n this.cellWidthType.appendTo(cellWidthType);\n };\n TablePropertiesDialog.prototype.setTableCellProperties = function () {\n var cellFormat = this.owner.selection.cellFormat;\n //instance of table cell Values\n this.hasCellWidth = cellFormat.preferredWidth > 0;\n var preferredWidth = cellFormat.preferredWidth;\n if (isNullOrUndefined(cellFormat.preferredWidth)) {\n this.preferredCellWidthCheckBox.indeterminate = true;\n preferredWidth = this.owner.selection.start.paragraph.associatedCell.cellFormat.preferredWidth;\n }\n else {\n this.preferredCellWidthCheckBox.checked = this.hasCellWidth;\n }\n this.cellWidthBox.enabled = this.hasCellWidth;\n this.cellWidthType.enabled = this.hasCellWidth;\n if (cellFormat.preferredWidthType === 'Auto' || cellFormat.preferredWidthType === 'Point') {\n this.cellWidthType.index = 0;\n }\n else {\n this.cellWidthType.index = 1;\n }\n this.formatNumericTextBox(this.cellWidthBox, cellFormat.preferredWidthType, preferredWidth);\n classList(this.cellTopAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellCenterAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellBottomAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n if (cellFormat.verticalAlignment === 'Top') {\n this.cellTopAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Center') {\n this.cellCenterAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Bottom') {\n this.cellBottomAlign.classList.add('e-de-table-alignment-active');\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.updateClassForCellAlignment = function (element) {\n var cellAlignments = element.getElementsByClassName(element.id + 'e-de-table-cell-alignment');\n for (var j = 0; j < cellAlignments.length; j++) {\n var cellAlignment = cellAlignments[j];\n if (cellAlignment.classList.contains('e-de-table-alignment-active')) {\n classList(cellAlignment, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.formatNumericTextBox = function (textBox, format, value) {\n if (format === 'Auto' || format === 'Point') {\n textBox.format = 'n2';\n }\n else {\n textBox.format = '#\\'\\%\\'';\n }\n textBox.step = 1;\n textBox.decimals = 2;\n textBox.value = value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.getCellAlignment = function () {\n var id = this.cellTab.id;\n var groupButtons = this.cellTab.getElementsByClassName(id + 'e-de-table-cell-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return 'Top';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return 'Bottom';\n }\n }\n }\n return this.owner.selection.cellFormat.verticalAlignment;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onCellWidthChange = function () {\n this.cellFormat.preferredWidth = this.cellWidthBox.value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onCellWidthTypeChange = function () {\n var value;\n var table = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n if (this.cellWidthType.text === 'Percent' && this.owner.selection.cellFormat.preferredWidthType !== 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n this.formatNumericTextBox(this.cellWidthBox, 'Percent', value);\n }\n else if (this.cellWidthType.text === 'Points' && this.owner.selection.cellFormat.preferredWidthType !== 'Point') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n this.formatNumericTextBox(this.cellWidthBox, 'Point', value);\n }\n else {\n if (this.cellWidthBox.format === '#\\'\\%\\'') {\n if (this.cellWidthType.text === 'Points') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n else {\n if (this.cellWidthType.text === 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n // tslint:disable-next-line:max-line-length\n this.formatNumericTextBox(this.cellWidthBox, (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text, value);\n }\n this.cellFormat.preferredWidthType = (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[s]);\n s--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.cellAlignment = undefined;\n this.tableAlignment = undefined;\n this.owner = undefined;\n this.preferCheckBox = undefined;\n this.tableWidthType = undefined;\n this.preferredWidth = undefined;\n this.rowHeightType = undefined;\n this.rowHeightCheckBox = undefined;\n this.rowHeight = undefined;\n this.cellWidthType = undefined;\n this.preferredCellWidthCheckBox = undefined;\n this.preferredCellWidth = undefined;\n this.tableTab = undefined;\n this.rowTab = undefined;\n this.cellTab = undefined;\n this.left = undefined;\n this.center = undefined;\n this.right = undefined;\n this.leftIndent = undefined;\n this.allowRowBreak = undefined;\n this.repeatHeader = undefined;\n this.cellTopAlign = undefined;\n this.cellCenterAlign = undefined;\n this.cellBottomAlign = undefined;\n this.tableFormat.destroy();\n this.cellFormat.destroy();\n this.tableFormat = undefined;\n this.cellFormat = undefined;\n };\n return TablePropertiesDialog;\n}());\nexport { TablePropertiesDialog };\n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WBorder, WBorders, WShading, WCellFormat } from '../format/index';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * The Borders and Shading dialog is used to modify borders and shading options for selected table or cells.\n */\nvar BordersAndShadingDialog = /** @class */ (function () {\n /**\n * @private\n */\n function BordersAndShadingDialog(viewer) {\n var _this = this;\n this.cellFormat = new WCellFormat();\n this.tableFormat = new WTableFormat();\n this.applyBordersShadingsProperties = function () {\n var tablePropertiesDialog = _this.owner.owner.tablePropertiesDialogModule;\n var selectedCell = _this.owner.selection.start.paragraph.associatedCell;\n //Need to bind the properties with current cell and current table formats.\n var borders = undefined;\n if (_this.checkClassName(_this.previewDivTopTop) || _this.checkClassName(_this.previewDivTopBottom)\n || _this.checkClassName(_this.previewDivTopCenter) || _this.checkClassName(_this.previewDivBottomcenter)\n || _this.checkClassName(_this.previewDivBottomLeft) || _this.checkClassName(_this.previewDivBottomRight)\n || _this.checkClassName(_this.previewDivDiagonalRight) || _this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders = new WBorders();\n if (_this.checkClassName(_this.previewDivTopTop)) {\n borders.top = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivTopBottom)) {\n borders.bottom = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivBottomLeft)) {\n borders.left = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivBottomRight)) {\n borders.right = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivTopCenter)) {\n borders.horizontal = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivBottomcenter)) {\n borders.vertical = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders.diagonalDown = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivDiagonalRight)) {\n borders.diagonalUp = _this.getBorder();\n }\n }\n var shading = new WShading();\n var editorModule = _this.owner.owner.editorModule;\n shading.backgroundColor = _this.shadingColorPicker.value;\n if (_this.ulelementShading.index === 0) {\n _this.applyTo = 0;\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isCellBordersAndShadingUpdated = true;\n }\n _this.cellFormat.borders = new WBorders();\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(selectedCell.cellFormat.shading)) {\n shading.foregroundColor = selectedCell.cellFormat.shading.foregroundColor;\n shading.textureStyle = selectedCell.cellFormat.shading.textureStyle;\n }\n _this.cellFormat.shading = new WShading();\n editorModule.applyShading(_this.cellFormat.shading, shading);\n }\n else {\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isTableBordersAndShadingUpdated = true;\n }\n _this.applyTo = 1;\n var currentTableFormat = _this.owner.owner.selection.tableFormat.table.tableFormat;\n _this.tableFormat.copyFormat(currentTableFormat);\n _this.tableFormat.borders = new WBorders();\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(currentTableFormat.shading)) {\n shading.foregroundColor = currentTableFormat.shading.foregroundColor;\n shading.textureStyle = currentTableFormat.shading.textureStyle;\n }\n _this.tableFormat.shading = new WShading();\n editorModule.applyShading(_this.tableFormat.shading, shading);\n }\n _this.applyFormat();\n _this.closeDialog();\n };\n /**\n * @private\n */\n this.closeDialog = function () {\n _this.owner.dialog.hide();\n _this.closeBordersShadingsDialog();\n };\n this.closeBordersShadingsDialog = function () {\n _this.owner.dialog2.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n this.handleSettingCheckBoxAction = function (event) {\n var targetId = event.target.id;\n var tableBorderDialogId = _this.target.id;\n var targetDiv;\n if (targetId === tableBorderDialogId + '_None_Div' || targetId === tableBorderDialogId + '_None_Div_Container'\n || targetId === tableBorderDialogId + '_None_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('none');\n }\n else if (targetId === tableBorderDialogId + '_Box_Div' || targetId === tableBorderDialogId + '_Box_Div_Container'\n || targetId === tableBorderDialogId + '_Box_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.boxDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('box');\n }\n else if (targetId === tableBorderDialogId + '_All_Div' || targetId === tableBorderDialogId + '_All_Div_Container'\n || targetId === tableBorderDialogId + '_All_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.allDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('all');\n }\n else {\n _this.updateClassForSettingDivElements();\n _this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('customDiv');\n }\n };\n this.handlePreviewCheckBoxAction = function (event) {\n var target = event.target;\n var targetId = target.id;\n var tableBorderDialog = _this.target;\n var tableBorderDialogId = _this.target.id;\n var checkBox;\n var compareClass = 'e-de-table-border-inside-preview-click';\n _this.customDiv.click();\n if (targetId === tableBorderDialogId + '_Preview_Div_TopTop_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopTop'\n || targetId === tableBorderDialogId + '_previewDivTopTopTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopTop);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopTop', 'TopTop');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_TopCenter'\n || targetId === tableBorderDialogId + '_previewDivTopCenterTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopCenter);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Horizontal', '_Preview_Div_TopCenter', 'TopCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopBottom_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopBottom'\n || targetId === tableBorderDialogId + '_previewDivTopBottomTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopBottom);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopBottom', 'TopBottom');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal'\n || targetId === tableBorderDialogId + '_previewDivLeftDiagonalTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivLeftDiagonal);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Left_Diagonal', '_Preview_Div_LeftDiagonal', 'LeftDiagonal');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomLeft_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomLeft'\n || targetId === tableBorderDialogId + '_previewDivBottomLeftTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomLeft);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomLeft', 'BottomLeft');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_BottomCenter'\n || targetId === tableBorderDialogId + '_previewDivBottomcenterTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomcenter);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Vertical', '_Preview_Div_BottomCenter', 'BottomCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomRight_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomRight'\n || targetId === tableBorderDialogId + '_previewDivBottomRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomRight);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomRight', 'BottomRight');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal'\n || targetId === tableBorderDialogId + '_previewDivDiagonalRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivDiagonalRight);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Right_Diagonal', '_Preview_Div_RightDiagonal', 'RightDiagonal');\n }\n };\n this.applyTableCellPreviewBoxes = function () {\n _this.customDiv.click();\n if (!isNullOrUndefined(_this.ulelementShading)) {\n if (_this.ulelementShading.index === 0) {\n _this.previewDivBottomcenterContainer.style.display = 'none';\n _this.previewDivTopCenterContainer.style.display = 'none';\n _this.previewVerticalDiv.style.display = 'none';\n _this.previewHorizontalDiv.style.display = 'none';\n _this.previewDivLeftDiagonal.style.display = '';\n _this.previewDivDiagonalRight.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '80px';\n }\n else {\n _this.previewDivLeftDiagonal.style.display = 'none';\n _this.previewDivDiagonalRight.style.display = 'none';\n _this.previewDivBottomcenterContainer.style.display = '';\n _this.previewDivTopCenterContainer.style.display = '';\n _this.previewVerticalDiv.style.display = '';\n _this.previewHorizontalDiv.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '110px';\n }\n }\n };\n this.applyPreviewTableBackgroundColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.backgroundColor = color;\n }\n };\n this.applyPreviewTableBorderColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.borderColor = color;\n _this.previewRightDiagonalDiv.style.backgroundColor = color;\n _this.previewLeftDiagonalDiv.style.backgroundColor = color;\n _this.previewVerticalDiv.style.backgroundColor = color;\n _this.previewHorizontalDiv.style.backgroundColor = color;\n }\n };\n this.owner = viewer;\n }\n BordersAndShadingDialog.prototype.getModuleName = function () {\n return 'BordersAndShadingDialog';\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n BordersAndShadingDialog.prototype.initBordersAndShadingsDialog = function (localeValue) {\n var instance = this;\n this.target = createElement('div', {\n id: instance.owner.owner.containerId + '_table_border_shadings',\n className: 'e-de-table-border-shading-dlg'\n });\n this.owner.owner.element.appendChild(this.target);\n var displayText = createElement('div', {\n innerHTML: localeValue.getConstant('Borders'), styles: 'position: absolute;top: 65px;',\n id: this.target.id + '_border_label', className: 'e-de-table-border-heading'\n });\n var settingsContiner = createElement('div', {\n styles: 'display: inline-block;position: absolute;top: 105px;width: 100px;height: 235px;border-style: none;',\n id: this.target.id + '_border_settings'\n });\n var styleContainer = createElement('div', {\n // tslint:disable-next-line:max-line-length\n styles: 'display: inline-block;position: absolute;left: 125px;top: 125px;width: 150px;height: 235px;padding-left: 40px;border-style: none;padding-right: 40px;',\n id: this.target.id + '_border_style'\n });\n var previewContiner = createElement('div', {\n // tslint:disable-next-line:max-line-length\n styles: 'display: inline-block;position: absolute;left: 345px;top: 87px;width: 180px;height: 235px;padding: 0px;border-style: none;',\n id: this.target.id + '_border_preview'\n });\n var styleText = createElement('div', {\n innerHTML: localeValue.getConstant('Style'), styles: 'width: 100%;padding-bottom: 10px;',\n className: 'e-de-table-element-subheading'\n });\n var dropDownList = createElement('select', {\n id: this.target.id + '_border_style_dropDown'\n });\n dropDownList.innerHTML = '';\n var widthText = createElement('div', {\n innerHTML: localeValue.getConstant('Width'), styles: 'width:100%;padding-top: 20px;padding-bottom: 10px;',\n className: 'e-de-table-element-subheading'\n });\n var widthNumeric = createElement('input', {\n id: this.target.id + '_width'\n });\n var colorText = createElement('div', {\n innerHTML: localeValue.getConstant('Color'), styles: 'padding-top: 25px;',\n className: 'e-de-table-setting-heading'\n });\n var borderColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n id: this.target.id + '_border_color',\n styles: 'width: 30px;position: absolute;left: 90px;',\n className: 'e-dlg-clr-pkr-top'\n });\n var settingText = createElement('div', {\n innerHTML: localeValue.getConstant('Setting'), styles: 'width: 100%;position: absolute;',\n className: 'e-de-table-setting-heading'\n });\n var noneDivContainer = createElement('div', {\n id: this.target.id + '_None_Div_Container', className: 'e-de-table-border-none'\n });\n this.noneDiv = createElement('div', {\n id: this.target.id + '_None_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var noneDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('None'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 20px;position: absolute;',\n id: this.target.id + '_None_Div_Label'\n });\n var boxDivContainer = createElement('div', {\n id: this.target.id + '_Box_Div_Container', className: 'e-de-table-border-box'\n });\n this.boxDiv = createElement('div', {\n id: this.target.id + '_Box_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var boxDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Box'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 20px;position: absolute;',\n id: this.target.id + '_Box_Div_Label'\n });\n var allDivContainer = createElement('div', {\n id: this.target.id + '_All_Div_Container', className: 'e-de-table-border-all'\n });\n this.allDiv = createElement('div', {\n id: this.target.id + '_All_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var allDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('All'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 25px;position: absolute;',\n id: this.target.id + '_All_Div_Label'\n });\n var customDivContainer = createElement('div', {\n id: this.target.id + '_Custom_Div_Container', className: 'e-de-table-border-custom'\n });\n this.customDiv = createElement('div', {\n id: this.target.id + '_Custom_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var customDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Custom'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 25px;position: absolute;',\n id: this.target.id + '_Custom_Div_Label'\n });\n this.noneDivTransparent = createElement('div', {\n id: this.target.id + '_None_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-none-setting'\n });\n this.boxDivTransparent = createElement('div', {\n id: this.target.id + '_Box_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-box-setting'\n });\n this.allDivTransparent = createElement('div', {\n id: this.target.id + '_All_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-all-setting'\n });\n this.customDivTransparent = createElement('div', {\n id: this.target.id + '_Custom_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-custom-setting'\n });\n var previewText = createElement('div', {\n innerHTML: localeValue.getConstant('Preview'), className: 'e-de-table-setting-heading',\n styles: 'position: absolute;top: 20px;left: 10px;'\n });\n this.previewDiv = createElement('div', {\n styles: 'width: 80px;height: 80px;position: absolute; left: 50px;top: 50px;',\n id: this.target.id + '_Preview_Div', className: 'e-de-border-dlg-preview-div'\n });\n this.previewRightDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width:1px;height:113px;left: 90px;top: 34px;transform: rotate(135deg);',\n id: this.target.id + '_Preview_Div_Right_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewLeftDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width: 1px;height: 113px;left: 90px;top: 34px;transform:rotate(45deg);',\n id: this.target.id + '_Preview_Div_Left_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewVerticalDiv = createElement('div', {\n styles: 'width: 1px;height: 81px;position: absolute;left: 90px;top: 50px;',\n id: this.target.id + '_Preview_Div_Vertical',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewHorizontalDiv = createElement('div', {\n styles: 'width: 81px;height: 1px;position: absolute;left: 50px;top: 90px;',\n id: this.target.id + '_Preview_Div_Horizontal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewDivTopTopContainer = createElement('div', {\n styles: 'top: 50px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_TopTop_Container'\n });\n this.previewDivTopTop = createElement('div', {\n id: this.target.id + '_Preview_Div_TopTop',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopCenterContainer = createElement('div', {\n styles: 'top: 80px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_TopCenter_Container'\n });\n this.previewDivTopCenter = createElement('div', {\n id: this.target.id + '_Preview_Div_TopCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopBottomContainer = createElement('div', {\n styles: 'top: 110px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_TopBottom_Container'\n });\n this.previewDivTopBottom = createElement('div', {\n id: this.target.id + '_Preview_Div_TopBottom',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivLeftDiagonalContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_LeftDiagonal_Container'\n });\n this.previewDivLeftDiagonal = createElement('div', {\n id: this.target.id + '_Preview_Div_LeftDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomLeftContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 50px', id: this.target.id + '_Preview_Div_BottomLeft_Container'\n });\n this.previewDivBottomLeft = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomLeft',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomcenterContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 80px;', id: this.target.id + '_Preview_Div_BottomCenter_Container'\n });\n this.previewDivBottomcenter = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomRightContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 110px;', id: this.target.id + '_Preview_Div_BottomRight_Container'\n });\n this.previewDivBottomRight = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomRight',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivDiagonalRightContainer = createElement('div', {\n styles: 'top: 145px; position: absolute; left: 110px;', id: this.target.id + '_Preview_Div_RightDiagonal_Container'\n });\n this.previewDivDiagonalRight = createElement('div', {\n id: this.target.id + '_Preview_Div_RightDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopTopTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopTopTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-toptop-alignment'\n });\n this.previewDivTopCenterTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopCenterTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topcenter-alignment'\n });\n this.previewDivTopBottomTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopBottomTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topbottom-alignment'\n });\n this.previewDivLeftDiagonalTransParent = createElement('div', {\n id: this.target.id + '_previewDivLeftDiagonalTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionalup-alignment'\n });\n this.previewDivBottomLeftTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomLeftTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomleft-alignment'\n });\n this.previewDivBottomcenterTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomcenterTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomcenter-alignment'\n });\n this.previewDivBottomRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomright-alignment'\n });\n this.previewDivDiagonalRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivDiagonalRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionaldown-alignment'\n });\n this.shadingContiner = createElement('div', {\n /* tslint:disable:max-line-length */\n styles: 'display:inline-block;position:absolute;left:17px;width:400px;height:100px;padding:0px;border-style: none;margin-left:10px;',\n id: this.target.id + '_shading_preview', className: 'e-de-table-shading-preview'\n });\n var shadingText = createElement('div', {\n innerHTML: localeValue.getConstant('Shading'), className: 'e-de-table-border-heading',\n styles: 'padding-top: 30px;left: 5px;'\n });\n var shadings = createElement('div', { styles: 'display:flex;' });\n var label = createElement('div', {\n innerHTML: localeValue.getConstant('Fill'), className: 'e-de-table-setting-heading e-de-table-border-fill',\n styles: 'top: 50px;left: 10px;'\n });\n var shadingColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n id: this.target.id + '_shading_color', styles: 'position: absolute;top: 75px;left: 40px;width: 30px;'\n });\n var shdApply = createElement('div', {\n styles: 'position:absolute;top:41px;left:150px;width:180px;'\n });\n var div = createElement('div', {\n styles: 'width:100px;padding-bottom: 10px;', innerHTML: localeValue.getConstant('Apply To'),\n className: 'e-de-table-element-subheading'\n });\n var divsion = createElement('div', { styles: 'width:100px;position:absolute;' });\n var ulelementShading = createElement('select', {\n innerHTML: ''\n + '',\n id: this.target.id + '_shading'\n });\n divsion.appendChild(ulelementShading);\n this.noneDiv.appendChild(this.noneDivTransparent);\n this.boxDiv.appendChild(this.boxDivTransparent);\n this.allDiv.appendChild(this.allDivTransparent);\n this.customDiv.appendChild(this.customDivTransparent);\n noneDivContainer.appendChild(this.noneDiv);\n noneDivContainer.appendChild(noneDivLabel);\n boxDivContainer.appendChild(this.boxDiv);\n boxDivContainer.appendChild(boxDivLabel);\n allDivContainer.appendChild(this.allDiv);\n allDivContainer.appendChild(allDivLabel);\n customDivContainer.appendChild(this.customDiv);\n customDivContainer.appendChild(customDivLabel);\n settingsContiner.appendChild(settingText);\n settingsContiner.appendChild(noneDivContainer);\n settingsContiner.appendChild(boxDivContainer);\n settingsContiner.appendChild(allDivContainer);\n settingsContiner.appendChild(customDivContainer);\n this.previewDivBottomcenter.appendChild(this.previewDivBottomcenterTransparent);\n this.previewDivBottomRight.appendChild(this.previewDivBottomRightTransparent);\n this.previewDivBottomLeft.appendChild(this.previewDivBottomLeftTransparent);\n this.previewDivTopTop.appendChild(this.previewDivTopTopTransParent);\n this.previewDivTopCenter.appendChild(this.previewDivTopCenterTransParent);\n this.previewDivTopBottom.appendChild(this.previewDivTopBottomTransParent);\n this.previewDivDiagonalRight.appendChild(this.previewDivDiagonalRightTransparent);\n this.previewDivLeftDiagonal.appendChild(this.previewDivLeftDiagonalTransParent);\n this.previewDivBottomcenterContainer.appendChild(this.previewDivBottomcenter);\n this.previewDivBottomLeftContainer.appendChild(this.previewDivBottomLeft);\n this.previewDivBottomRightContainer.appendChild(this.previewDivBottomRight);\n this.previewDivDiagonalRightContainer.appendChild(this.previewDivDiagonalRight);\n this.previewDivLeftDiagonalContainer.appendChild(this.previewDivLeftDiagonal);\n this.previewDivTopBottomContainer.appendChild(this.previewDivTopBottom);\n this.previewDivTopCenterContainer.appendChild(this.previewDivTopCenter);\n this.previewDivTopTopContainer.appendChild(this.previewDivTopTop);\n previewContiner.appendChild(previewText);\n previewContiner.appendChild(this.previewDiv);\n previewContiner.appendChild(this.previewRightDiagonalDiv);\n previewContiner.appendChild(this.previewHorizontalDiv);\n previewContiner.appendChild(this.previewLeftDiagonalDiv);\n previewContiner.appendChild(this.previewVerticalDiv);\n previewContiner.appendChild(this.previewDivBottomcenterContainer);\n previewContiner.appendChild(this.previewDivBottomLeftContainer);\n previewContiner.appendChild(this.previewDivBottomRightContainer);\n previewContiner.appendChild(this.previewDivDiagonalRightContainer);\n previewContiner.appendChild(this.previewDivLeftDiagonalContainer);\n previewContiner.appendChild(this.previewDivTopBottomContainer);\n previewContiner.appendChild(this.previewDivTopCenterContainer);\n previewContiner.appendChild(this.previewDivTopTopContainer);\n shdApply.appendChild(div);\n shdApply.appendChild(divsion);\n shadings.appendChild(label);\n shadings.appendChild(shadingColorPickerElement);\n shadings.appendChild(shdApply);\n this.shadingContiner.appendChild(shadingText);\n this.shadingContiner.appendChild(shadings);\n styleContainer.appendChild(styleText);\n styleContainer.appendChild(dropDownList);\n styleContainer.appendChild(widthText);\n styleContainer.appendChild(widthNumeric);\n styleContainer.appendChild(colorText);\n styleContainer.appendChild(borderColorPickerElement);\n this.target.appendChild(displayText);\n this.target.appendChild(settingsContiner);\n this.target.appendChild(styleContainer);\n this.target.appendChild(previewContiner);\n this.target.appendChild(this.shadingContiner);\n // Handling Setting Container\n noneDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n boxDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n allDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n customDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n // Handling Preview Div Container\n this.previewDivBottomcenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomLeftContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopTopContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopBottomContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopCenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivDiagonalRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivLeftDiagonalContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n // handling dropdown change\n this.borderWidth = new NumericTextBox({\n value: 0, min: 0, max: 6, decimals: 2,\n width: 150, enablePersistence: false\n });\n this.borderWidth.appendTo(widthNumeric);\n this.borderStyle = new DropDownList({\n width: '150px', popupHeight: '150px', index: 1\n });\n this.borderStyle.appendTo(dropDownList);\n this.ulelementShading = new DropDownList({\n width: '150px', change: this.applyTableCellPreviewBoxes, index: 1\n });\n this.ulelementShading.appendTo(ulelementShading);\n this.borderColorPicker = new ColorPicker({\n value: '#000000', change: this.applyPreviewTableBorderColor\n });\n this.borderColorPicker.appendTo(borderColorPickerElement);\n this.shadingColorPicker = new ColorPicker({\n value: '#000000', change: this.applyPreviewTableBackgroundColor\n });\n this.shadingColorPicker.appendTo(shadingColorPickerElement);\n };\n BordersAndShadingDialog.prototype.applyFormat = function () {\n var selection = this.owner.selection;\n var editorModule = this.owner.owner.editorModule;\n editorModule.initComplexHistory('BordersAndShading');\n editorModule.isBordersAndShadingDialog = true;\n if (this.applyTo === 0) {\n editorModule.onCellFormat(this.cellFormat);\n }\n else {\n editorModule.onTableFormat(this.tableFormat);\n }\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentHistoryInfo)) {\n this.owner.owner.editorHistory.updateComplexHistory();\n }\n editorModule.isBordersAndShadingDialog = false;\n };\n BordersAndShadingDialog.prototype.getBorder = function () {\n var border = new WBorder();\n border.color = this.borderColorPicker.value;\n border.lineStyle = this.borderStyle.text;\n border.lineWidth = this.borderWidth.value;\n return border;\n };\n BordersAndShadingDialog.prototype.checkClassName = function (element) {\n return element.classList.contains('e-de-table-border-inside-preview-click');\n };\n /**\n * @private\n */\n BordersAndShadingDialog.prototype.show = function () {\n var localeValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localeValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initBordersAndShadingsDialog(localeValue);\n }\n this.loadBordersShadingsPropertiesDialog();\n this.owner.dialog.content = this.target;\n this.owner.dialog.header = localeValue.getConstant('Borders and Shading');\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.closeBordersShadingsDialog;\n this.owner.dialog.position = { X: 'center', Y: 'top' };\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.buttons = [{\n click: this.applyBordersShadingsProperties,\n buttonModel: { content: localeValue.getConstant('Ok'), cssClass: 'e-flat e-table-border-shading-okay', isPrimary: true }\n },\n {\n click: this.closeDialog,\n buttonModel: { content: localeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-border-shading-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n BordersAndShadingDialog.prototype.updateClassForSettingDivElements = function () {\n var settingDivs = this.target.getElementsByClassName('e-de-table-border-inside-setting');\n for (var j = 0; j < settingDivs.length; j++) {\n if (settingDivs[j].className.indexOf('e-de-table-border-inside-setting-click') !== -1) {\n var tempClassName = settingDivs[j].className;\n tempClassName = tempClassName.replace('e-de-table-border-inside-setting-click', '');\n settingDivs[j].className = tempClassName;\n }\n }\n };\n BordersAndShadingDialog.prototype.setSettingPreviewDivElement = function (position) {\n switch (position) {\n case 'none':\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('none');\n break;\n case 'box':\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('box');\n break;\n case 'all':\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('all');\n break;\n }\n };\n BordersAndShadingDialog.prototype.isShowHidePreviewTableElements = function (settingDiv) {\n switch (settingDiv) {\n case 'none':\n this.previewDiv.style.border = 'none';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'box':\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'all':\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'block';\n this.previewVerticalDiv.style.display = 'block';\n break;\n }\n };\n BordersAndShadingDialog.prototype.handlePreviewCheckBoxShowHide = function (tableBorderDialogId, compareClass, element) {\n if (element.classList.contains(compareClass)) {\n element.classList.remove(compareClass);\n }\n else {\n element.classList.add(compareClass);\n }\n };\n // tslint:disable-next-line:max-line-length\n BordersAndShadingDialog.prototype.showHidePreviewDivElements = function (tableBorderDialogId, compareClass, elementClass, compareElementClass, position) {\n var setElement = document.getElementById(tableBorderDialogId + elementClass);\n var compareElement = document.getElementById(tableBorderDialogId + compareElementClass);\n if (position === 'TopTop') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-top');\n }\n else if (position === 'TopCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'TopBottom') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-bottom');\n }\n else if (position === 'LeftDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomLeft') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-left');\n }\n else if (position === 'BottomCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomRight') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-right');\n }\n else if (position === 'RightDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n };\n BordersAndShadingDialog.prototype.setPropertyPreviewDivElement = function (ele, compareElement, compareClass, property) {\n if (compareElement.classList.contains(compareClass) && property.split('-')[0] === 'border') {\n /* tslint:disable:no-any */\n ele.style[property] = '1px solid rgba(0, 0, 0, .54)';\n }\n else if (compareElement.classList.contains(compareClass) && property === 'display') {\n ele.style[property] = 'block';\n }\n else {\n ele.style[property] = 'none';\n /* tslint:enable:no-any */\n }\n };\n BordersAndShadingDialog.prototype.loadBordersShadingsPropertiesDialog = function () {\n var tableFormat = this.owner.selection.tableFormat.table.tableFormat;\n var lineStyle;\n var borderColor;\n var fillColor;\n var borderWidth;\n if (!isNullOrUndefined(tableFormat) && !isNullOrUndefined(tableFormat.borders)) {\n this.cloneBorders(tableFormat.borders);\n if (isNullOrUndefined(tableFormat.borders) || isNullOrUndefined(tableFormat.borders.top)) {\n lineStyle = 1;\n borderColor = '#000000';\n borderWidth = 0;\n fillColor = '#000000';\n }\n else {\n lineStyle = this.getLineStyle(tableFormat.borders.top.lineStyle);\n borderColor = tableFormat.borders.top.color;\n borderWidth = tableFormat.borders.top.getLineWidth();\n fillColor = tableFormat.shading.backgroundColor;\n }\n }\n this.borderColorPicker.value = borderColor;\n this.shadingColorPicker.value = fillColor;\n /* tslint:disable:no-any */\n var colorPickerEvent = {\n target: this.borderColorPicker, ctrlKey: false,\n shiftKey: false, which: 0\n };\n var fillColorEvent = {\n target: this.shadingColorPicker, ctrlKey: false,\n shiftKey: false, which: 0\n };\n /* tslint:enable:no-any */\n this.applyPreviewTableBackgroundColor(fillColorEvent);\n this.applyPreviewTableBorderColor(colorPickerEvent);\n this.ulelementShading.index = 1;\n this.previewDivLeftDiagonal.style.display = 'none';\n this.previewDivDiagonalRight.style.display = 'none';\n this.borderWidth.value = borderWidth;\n this.borderStyle.index = lineStyle;\n };\n // tslint:disable:max-func-body-length\n BordersAndShadingDialog.prototype.cloneBorders = function (borders) {\n var topBorder = false;\n var bottomBorder = false;\n var leftBorder = false;\n var rightBorder = false;\n var horizontalBorder = false;\n var verticalBorder = false;\n var diagonalDownBorder = false;\n var customBorder = false;\n var diagonalUpBorder = false;\n if (borders !== null) {\n if (borders.top && (borders.top.hasNoneStyle || borders.top.lineStyle !== 'None')) {\n topBorder = true;\n }\n if (borders.bottom && (borders.bottom.hasNoneStyle || borders.bottom.lineStyle !== 'None')) {\n bottomBorder = true;\n }\n if (borders.left && (borders.left.hasNoneStyle || borders.left.lineStyle !== 'None')) {\n leftBorder = true;\n }\n if (borders.right && (borders.right.hasNoneStyle || borders.right.lineStyle !== 'None')) {\n rightBorder = true;\n }\n if (borders.horizontal && (borders.horizontal.hasNoneStyle || borders.horizontal.lineStyle !== 'None')) {\n horizontalBorder = true;\n }\n if (borders.vertical && (borders.vertical.hasNoneStyle || borders.vertical.lineStyle !== 'None')) {\n verticalBorder = true;\n }\n if (borders.diagonalDown && (borders.diagonalDown.hasNoneStyle || borders.diagonalDown.lineStyle !== 'None')) {\n diagonalDownBorder = true;\n }\n if (borders.diagonalUp && (borders.diagonalUp.hasNoneStyle || borders.diagonalUp.lineStyle !== 'None')) {\n diagonalUpBorder = true;\n }\n if (!(!topBorder || !bottomBorder || !leftBorder || !rightBorder)) {\n if (!(!topBorder || !bottomBorder || !leftBorder || !rightBorder || !horizontalBorder\n || !verticalBorder || diagonalUpBorder || diagonalDownBorder)) {\n if ((topBorder && bottomBorder && leftBorder && rightBorder && horizontalBorder && verticalBorder\n && !diagonalUpBorder && !diagonalDownBorder)) {\n if (borders.top.hasNoneStyle && borders.bottom.hasNoneStyle && borders.left.hasNoneStyle\n && borders.right.hasNoneStyle && borders.horizontal.hasNoneStyle && borders.vertical.hasNoneStyle) {\n this.setSettingPreviewDivElement('none');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('all');\n this.allDiv.classList.add('e-de-table-border-inside-setting-click');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n }\n else if ((leftBorder && bottomBorder && topBorder && rightBorder && !horizontalBorder && !verticalBorder)) {\n if (borders.top.hasNoneStyle && borders.bottom.hasNoneStyle && borders.left.hasNoneStyle\n && borders.right.hasNoneStyle && borders.horizontal.hasNoneStyle && borders.vertical.hasNoneStyle) {\n this.setSettingPreviewDivElement('none');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('box');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.add('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n else {\n customBorder = true;\n }\n }\n else {\n customBorder = true;\n }\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n if (customBorder) {\n this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n if (topBorder) {\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (bottomBorder) {\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (leftBorder) {\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (rightBorder) {\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (verticalBorder) {\n this.previewDivBottomcenter.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (horizontalBorder) {\n this.previewDivTopCenter.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n }\n };\n BordersAndShadingDialog.prototype.getLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'Single': return 1;\n case 'Dot': return 2;\n case 'DashSmallGap': return 3;\n case 'DashLargeGap': return 4;\n case 'DashDot': return 5;\n case 'DashDotDot': return 6;\n case 'Double': return 7;\n case 'Triple': return 8;\n case 'ThinThickSmallGap': return 9;\n case 'ThickThinSmallGap': return 10;\n case 'ThinThickThinSmallGap': return 11;\n case 'ThinThickMediumGap': return 12;\n case 'ThickThinMediumGap': return 13;\n case 'ThinThickThinMediumGap': return 14;\n case 'ThinThickLargeGap': return 15;\n case 'ThickThinLargeGap': return 16;\n case 'ThinThickThinLargeGap': return 17;\n case 'SingleWavy': return 18;\n case 'DoubleWavy': return 19;\n case 'DashDotStroked': return 20;\n case 'Emboss3D': return 21;\n case 'Engrave3D': return 22;\n case 'Outset': return 23;\n case 'Inset': return 24;\n case 'Thick': return 25;\n }\n return 0;\n };\n /**\n * @private\n */\n BordersAndShadingDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var k = 0; k < this.target.childNodes.length; k++) {\n this.target.removeChild(this.target.childNodes[k]);\n k--;\n }\n this.target = undefined;\n }\n if (this.cellFormat) {\n this.cellFormat.destroy();\n this.cellFormat = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat.destroy();\n this.tableFormat = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n if (!isNullOrUndefined(this.borderStyle)) {\n this.borderStyle.destroy();\n }\n this.borderStyle = undefined;\n if (!isNullOrUndefined(this.borderColorPicker)) {\n this.borderColorPicker.destroy();\n }\n this.borderColorPicker = undefined;\n if (!isNullOrUndefined(this.shadingColorPicker)) {\n this.shadingColorPicker.destroy();\n }\n this.shadingColorPicker = undefined;\n if (!isNullOrUndefined(this.ulelementShading)) {\n this.ulelementShading.destroy();\n }\n this.ulelementShading = undefined;\n this.noneDivTransparent = undefined;\n this.boxDivTransparent = undefined;\n this.allDivTransparent = undefined;\n this.customDivTransparent = undefined;\n this.previewDiv = undefined;\n this.previewRightDiagonalDiv = undefined;\n this.previewLeftDiagonalDiv = undefined;\n this.previewVerticalDiv = undefined;\n this.previewHorizontalDiv = undefined;\n this.previewDivTopTopContainer = undefined;\n this.previewDivTopTop = undefined;\n this.previewDivTopCenterContainer = undefined;\n this.previewDivTopCenter = undefined;\n this.previewDivTopBottomContainer = undefined;\n this.previewDivTopBottom = undefined;\n this.previewDivLeftDiagonalContainer = undefined;\n this.previewDivLeftDiagonal = undefined;\n this.previewDivBottomLeftContainer = undefined;\n this.previewDivBottomLeft = undefined;\n this.previewDivBottomcenterContainer = undefined;\n this.previewDivBottomcenter = undefined;\n this.previewDivBottomRightContainer = undefined;\n this.previewDivBottomRight = undefined;\n this.previewDivDiagonalRightContainer = undefined;\n this.previewDivDiagonalRight = undefined;\n this.previewDivTopTopTransParent = undefined;\n this.previewDivTopCenterTransParent = undefined;\n this.previewDivTopBottomTransParent = undefined;\n this.previewDivLeftDiagonalTransParent = undefined;\n this.previewDivBottomLeftTransparent = undefined;\n this.previewDivBottomcenterTransparent = undefined;\n this.previewDivBottomRightTransparent = undefined;\n this.previewDivDiagonalRightTransparent = undefined;\n this.shadingContiner = undefined;\n this.noneDiv = undefined;\n this.customDiv = undefined;\n this.allDiv = undefined;\n this.boxDiv = undefined;\n };\n return BordersAndShadingDialog;\n}());\nexport { BordersAndShadingDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement, setCulture } from '@syncfusion/ej2-base';\nimport { CellOptionsDialog } from './index';\n/**\n * The Table options dialog is used to modify default cell margins and cell spacing of selected table.\n */\nvar TableOptionsDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TableOptionsDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.applyTableCellProperties = function () {\n var tableFormat = _this.owner.selection.tableFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value || _this.cellSpaceTextBox.value)\n && (tableFormat.bottomMargin !== _this.bottomMarginBox.value\n || tableFormat.leftMargin !== _this.leftMarginBox.value\n || tableFormat.rightMargin !== _this.rightMarginBox.value\n || tableFormat.topMargin !== _this.topMarginBox.value\n || tableFormat.cellSpacing !== _this.cellSpaceTextBox.value)) {\n _this.owner.owner.tablePropertiesDialogModule.isTableOptionsUpdated = true;\n _this.applyTableOptions(_this.tableFormat);\n _this.owner.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n */\n this.closeCellMarginsDialog = function () {\n _this.owner.dialog.hide();\n _this.owner.dialog.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.changeAllowSpaceCheckBox = function () {\n if (_this.allowSpaceCheckBox.checked) {\n _this.cellSpaceTextBox.enabled = true;\n }\n else {\n _this.cellSpaceTextBox.enabled = false;\n }\n };\n /**\n * @private\n */\n this.removeEvents = function () {\n _this.owner.dialog2.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n this.owner = viewer;\n }\n Object.defineProperty(TableOptionsDialog.prototype, \"tableFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n return this.tableFormatIn = new WTableFormat();\n }\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableOptionsDialog.prototype.getModuleName = function () {\n return 'TableOptionsDialog';\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.initTableOptionsDialog = function (localValue) {\n var instance = this.owner;\n this.target = createElement('div', {\n id: this.owner.owner.containerId + '_insertCellMarginsDialog', className: 'e-de-table-options-dlg'\n });\n this.owner.owner.element.appendChild(this.target);\n var innerDiv = createElement('div', { styles: 'width: 475px;position: relative;height: 180px;' });\n var innerDivLabel = createElement('Label', {\n id: this.target.id + '_innerDivLabel', className: 'e-de-cell-dia-options-label',\n innerHTML: localValue.getConstant('Default cell margins')\n });\n innerDiv.appendChild(innerDivLabel);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue);\n var div = createElement('div', { styles: 'width: 475px; position: relative;' });\n var cellSpaceLabel = createElement('Label', {\n className: 'e-de-cell-dia-options-label',\n id: this.target.id + '_cellSpaceLabel'\n });\n cellSpaceLabel.innerHTML = localValue.getConstant('Default cell spacing');\n div.appendChild(cellSpaceLabel);\n var table2 = createElement('TABLE', {\n styles: 'height: 30px;padding-bottom: 15px;'\n });\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var allowSpaceCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_cellcheck'\n });\n var td6 = createElement('td', { styles: 'padding-left: 15px;', });\n this.cellspacingTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_cellspacing'\n });\n td5.appendChild(allowSpaceCheckBox);\n td6.appendChild(this.cellspacingTextBox);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n table2.appendChild(tr3);\n div.appendChild(table2);\n var divBtn = document.createElement('div');\n this.target.appendChild(div);\n this.target.appendChild(divBtn);\n this.cellSpaceTextBox = new NumericTextBox({\n value: 0, min: 0, max: 264.5, width: 150,\n decimals: 2, enablePersistence: false\n });\n this.cellSpaceTextBox.appendTo(this.cellspacingTextBox);\n this.allowSpaceCheckBox = new CheckBox({\n label: localValue.getConstant('Allow spacing between cells'),\n change: this.changeAllowSpaceCheckBox,\n cssClass: 'e-de-tbl-margin-sub-header',\n });\n this.allowSpaceCheckBox.appendTo(allowSpaceCheckBox);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var tableFormat = this.owner.selection.tableFormat;\n this.cellSpaceTextBox.value = tableFormat.cellSpacing;\n this.bottomMarginBox.value = tableFormat.bottomMargin;\n this.topMarginBox.value = tableFormat.topMargin;\n this.rightMarginBox.value = tableFormat.rightMargin;\n this.leftMarginBox.value = tableFormat.leftMargin;\n if (tableFormat.cellSpacing > 0) {\n this.allowSpaceCheckBox.checked = true;\n this.cellSpaceTextBox.enabled = true;\n }\n else {\n this.allowSpaceCheckBox.checked = false;\n this.cellSpaceTextBox.enabled = false;\n }\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applySubTableOptions = function (tableFormat) {\n this.owner.owner.editorHistory.initComplexHistory(this.owner.selection, 'TableMarginsSelection');\n this.applyTableOptionsHistory(tableFormat);\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentHistoryInfo)) {\n this.owner.owner.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applyTableOptionsHelper = function (tableFormat) {\n this.applySubTableOptionsHelper(tableFormat);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applyTableOptionsHistory = function (tableFormat) {\n this.owner.owner.editorModule.initHistory('TableOptions');\n this.applySubTableOptionsHelper(tableFormat);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applySubTableOptionsHelper = function (tableFormat) {\n var ownerTable = this.owner.selection.start.currentWidget.paragraph.associatedCell.ownerTable;\n ownerTable = ownerTable.combineWidget(this.owner);\n var currentTableFormat = ownerTable.tableFormat;\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentBaseHistoryInfo)) {\n this.owner.owner.editorHistory.currentBaseHistoryInfo.addModifiedTableOptions(currentTableFormat);\n }\n currentTableFormat.cellSpacing = tableFormat.cellSpacing;\n currentTableFormat.leftMargin = tableFormat.leftMargin;\n currentTableFormat.topMargin = tableFormat.topMargin;\n currentTableFormat.rightMargin = tableFormat.rightMargin;\n currentTableFormat.bottomMargin = tableFormat.bottomMargin;\n this.owner.owner.tablePropertiesDialogModule.calculateGridValue(ownerTable);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applyTableOptions = function (tableFormat) {\n tableFormat.leftMargin = this.leftMarginBox.value;\n tableFormat.topMargin = this.topMarginBox.value;\n tableFormat.bottomMargin = this.bottomMarginBox.value;\n tableFormat.rightMargin = this.rightMarginBox.value;\n if (this.allowSpaceCheckBox.checked) {\n tableFormat.cellSpacing = this.cellSpaceTextBox.value;\n }\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.show = function () {\n var documentLocale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n documentLocale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTableOptionsDialog(documentLocale);\n }\n this.loadCellMarginsDialog();\n this.owner.dialog.header = documentLocale.getConstant('Table Options');\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = undefined;\n this.owner.dialog.position = { X: 'center', Y: 'top' };\n // this.owner.dialog.cssClass = 'e-de-table-margin-size';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.open = undefined;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.removeEvents;\n this.owner.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: documentLocale.getConstant('Ok'), cssClass: 'e-flat e-table-cell-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: documentLocale.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var p = 0; p < this.target.childNodes.length; p++) {\n this.target.removeChild(this.target.childNodes[p]);\n p--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.owner = undefined;\n this.cellspacingTextBox = undefined;\n this.allowSpaceCheckBox = undefined;\n };\n return TableOptionsDialog;\n}());\nexport { TableOptionsDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WCellFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement, setCulture } from '@syncfusion/ej2-base';\n/**\n * The Cell options dialog is used to modify margins of selected cells.\n */\nvar CellOptionsDialog = /** @class */ (function () {\n /**\n * @private\n */\n function CellOptionsDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.removeEvents = function () {\n _this.owner.dialog2.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.changeSameAsTable = function () {\n if (_this.sameAsTableCheckBox.checked) {\n _this.leftMarginBox.enabled = false;\n _this.rightMarginBox.enabled = false;\n _this.bottomMarginBox.enabled = false;\n _this.topMarginBox.enabled = false;\n }\n else {\n _this.leftMarginBox.enabled = true;\n _this.rightMarginBox.enabled = true;\n _this.bottomMarginBox.enabled = true;\n _this.topMarginBox.enabled = true;\n }\n };\n /**\n * @private\n */\n this.applyTableCellProperties = function () {\n var cellFormat = _this.owner.selection.cellFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value) &&\n (cellFormat.bottomMargin !== _this.bottomMarginBox.value || cellFormat.leftMargin !== _this.leftMarginBox.value\n || cellFormat.rightMargin !== _this.rightMarginBox.value || cellFormat.topMargin !== _this.topMarginBox.value)) {\n _this.owner.owner.tablePropertiesDialogModule.isCellOptionsUpdated = true;\n _this.applyTableOptions(_this.cellFormat);\n _this.owner.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n */\n this.closeCellMarginsDialog = function () {\n _this.owner.dialog.hide();\n _this.owner.dialog.element.style.pointerEvents = '';\n };\n this.owner = viewer;\n }\n Object.defineProperty(CellOptionsDialog.prototype, \"cellFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n CellOptionsDialog.prototype.getModuleName = function () {\n return 'CellOptionsDialog';\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.initCellMarginsDialog = function (localValue) {\n var instance = this.owner;\n this.target = createElement('div', {\n id: this.owner.owner.containerId + '_tableCellMarginsDialog', className: 'e-de-table-cell-margin-dlg'\n });\n this.owner.owner.element.appendChild(this.target);\n var innerDiv = createElement('div', { styles: 'width: 475px;position: relative;height: 165px;' });\n var innerDivLabel = createElement('Label', {\n className: 'e-de-cell-dia-options-label', id: this.target.id + '_innerDivLabel'\n });\n innerDivLabel.innerHTML = localValue.getConstant('Cell margins');\n innerDiv.appendChild(innerDivLabel);\n var table = createElement('TABLE', {\n styles: 'height: 40px;padding-bottom: 0px;', className: 'e-de-cell-margin-top'\n });\n var tr = createElement('tr');\n var td = createElement('td', { className: 'e-de-tbl-btn-seperator' });\n var sameAsTableCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_sameAsCheckBox'\n });\n td.appendChild(sameAsTableCheckBox);\n tr.appendChild(td);\n table.appendChild(tr);\n innerDiv.appendChild(table);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue);\n var divBtn = document.createElement('div');\n this.target.appendChild(divBtn);\n this.sameAsTableCheckBox = new CheckBox({\n label: localValue.getConstant('Same as the whole table'),\n change: this.changeSameAsTable\n });\n this.sameAsTableCheckBox.appendTo(sameAsTableCheckBox);\n this.sameAsTableCheckBox.addEventListener('change', this.changeSameAsTable);\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.show = function () {\n var localizeValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localizeValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initCellMarginsDialog(localizeValue);\n }\n this.loadCellMarginsDialog();\n this.owner.dialog.header = localizeValue.getConstant('Cell Options');\n this.owner.dialog.position = { X: 'center', Y: 'top' };\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = undefined;\n this.owner.dialog.open = undefined;\n this.owner.dialog.close = this.removeEvents;\n this.owner.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: localizeValue.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: localizeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var cellFormat = this.owner.selection.cellFormat;\n this.sameAsTable = isNullOrUndefined(cellFormat.leftMargin || cellFormat.topMargin\n || cellFormat.rightMargin || cellFormat.bottomMargin);\n if (this.sameAsTable) {\n var tableFormat = this.owner.selection.tableFormat;\n this.loadCellProperties(tableFormat, false, true);\n }\n else {\n this.loadCellProperties(cellFormat, true, false);\n }\n };\n CellOptionsDialog.prototype.loadCellProperties = function (format, enableTextBox, enableCheckBox) {\n this.leftMarginBox.value = format.leftMargin;\n this.rightMarginBox.value = format.rightMargin;\n this.topMarginBox.value = format.topMargin;\n this.bottomMarginBox.value = format.bottomMargin;\n this.leftMarginBox.enabled = enableTextBox;\n this.rightMarginBox.enabled = enableTextBox;\n this.topMarginBox.enabled = enableTextBox;\n this.bottomMarginBox.enabled = enableTextBox;\n this.sameAsTableCheckBox.checked = enableCheckBox;\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applySubCellOptions = function (cellFormat) {\n this.owner.owner.editorHistory.initComplexHistory(this.owner.selection, 'CellMarginsSelection');\n this.owner.owner.editorModule.initHistory('CellOptions');\n /* tslint:disable:max-line-length */\n var startTable = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n startTable = startTable.combineWidget(this.owner);\n this.applyCellmarginsValue(this.owner.selection.start.paragraph.associatedCell.ownerRow.combineWidget(this.owner), this.owner.selection.start, this.owner.selection.end, cellFormat);\n this.owner.owner.editorModule.reLayout(this.owner.selection, false);\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentHistoryInfo)) {\n this.owner.owner.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applyCellmarginsValue = function (row, start, end, cellFormat) {\n this.applyCellMarginsInternal(row, cellFormat);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyCellmarginsValue(newRow, start, end, cellFormat);\n }\n };\n CellOptionsDialog.prototype.applyCellMarginsInternal = function (row, cellFormat) {\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentBaseHistoryInfo)) {\n var currentFormat = row.childWidgets[0].cellFormat;\n /* tslint:disable:max-line-length */\n cellFormat = this.owner.owner.editorHistory.currentBaseHistoryInfo.addModifiedCellOptions(currentFormat, cellFormat, row.ownerTable);\n }\n if (!isNullOrUndefined(cellFormat)) {\n this.applyCellMarginsForCells(row, cellFormat);\n }\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applyCellMarginsForCells = function (row, cellFormat) {\n var rowCells = row.childWidgets;\n this.iterateCells(rowCells, cellFormat);\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.iterateCells = function (cells, cellFormat) {\n for (var i = 0; i < cells.length; i++) {\n this.applySubCellMargins(cells[i].cellFormat, cellFormat);\n }\n this.owner.owner.tablePropertiesDialogModule.calculateGridValue(cells[0].ownerTable);\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applySubCellMargins = function (sourceFormat, cellFormat) {\n sourceFormat.leftMargin = cellFormat.leftMargin;\n sourceFormat.topMargin = cellFormat.topMargin;\n sourceFormat.rightMargin = cellFormat.rightMargin;\n sourceFormat.bottomMargin = cellFormat.bottomMargin;\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applyTableOptions = function (cellFormat) {\n if (!this.sameAsTableCheckBox.checked) {\n cellFormat.leftMargin = this.leftMarginBox.value;\n cellFormat.topMargin = this.topMarginBox.value;\n cellFormat.bottomMargin = this.bottomMarginBox.value;\n cellFormat.rightMargin = this.rightMarginBox.value;\n }\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var y = 0; y < this.target.childNodes.length; y++) {\n this.target.removeChild(this.target.childNodes[y]);\n y--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.owner = undefined;\n this.sameAsTableCheckBox = undefined;\n };\n /**\n * @private\n */\n CellOptionsDialog.getCellMarginDialogElements = function (dialog, div, locale) {\n if (!isNullOrUndefined(dialog)) {\n var table = createElement('TABLE', { className: 'e-de-cell-margin-top' });\n var tr1 = createElement('tr', { styles: 'height: 50px;color:black;' });\n var td1 = createElement('td');\n var topLabel = createElement('label', {\n innerHTML: locale.getConstant('Top'), className: 'e-de-cell-dia-label-common',\n id: dialog.target.id + '_TopLabel'\n });\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%', id: dialog.target.id + '_Top'\n });\n td1.appendChild(topLabel);\n td1.appendChild(topTextBox);\n var td2 = createElement('td', { className: 'e-de-tbl-btn-seperator' });\n var leftLabel = createElement('label', {\n innerHTML: locale.getConstant('Left'), className: 'e-de-cell-dia-label-common',\n id: dialog.target.id + '_leftLabel'\n });\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n styles: 'width:100%', id: dialog.target.id + '_left'\n });\n td2.appendChild(leftLabel);\n td2.appendChild(leftTextBox);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n var tr2 = createElement('tr', { styles: 'height: 50px;color:black;' });\n var td3 = createElement('td', { styles: 'width:40%;' });\n var bottomLabel = createElement('label', {\n innerHTML: locale.getConstant('Bottom'),\n className: 'e-de-cell-dia-label-common', id: dialog.target.id + '_bottomLabel'\n });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n styles: 'width:100%', id: dialog.target.id + '_bottom'\n });\n td3.appendChild(bottomLabel);\n td3.appendChild(bottomTextBox);\n var td4 = createElement('td', { styles: 'width:40%;' });\n var rightLabel = createElement('label', {\n innerHTML: locale.getConstant('Right'), id: dialog.target.id + '_rightLabel',\n className: 'e-de-cell-dia-label-common'\n });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n styles: 'width:100%', id: dialog.target.id + '_right'\n });\n td4.appendChild(rightLabel);\n td4.appendChild(rightTextBox);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n table.appendChild(tr1);\n table.appendChild(tr2);\n div.appendChild(table);\n dialog.target.appendChild(div);\n dialog.topMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150, decimals: 2,\n enablePersistence: false\n });\n dialog.topMarginBox.appendTo(topTextBox);\n dialog.leftMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150,\n decimals: 2, enablePersistence: false\n });\n dialog.leftMarginBox.appendTo(leftTextBox);\n dialog.bottomMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150, decimals: 2,\n enablePersistence: false\n });\n dialog.bottomMarginBox.appendTo(bottomTextBox);\n dialog.rightMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150,\n decimals: 2, enablePersistence: false\n });\n dialog.rightMarginBox.appendTo(rightTextBox);\n }\n };\n return CellOptionsDialog;\n}());\nexport { CellOptionsDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\n/**\n * The Styles dialog is used to create or modify styles.\n */\nvar StylesDialog = /** @class */ (function () {\n /**\n * @private\n */\n function StylesDialog(viewer) {\n var _this = this;\n this.updateStyleNames = function () {\n var collection = _this.owner.owner.viewer.styles.getStyleNames('Paragraph');\n var defaultStyleNames = ['Normal', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'];\n var finalList = collection.concat(defaultStyleNames).filter(function (v, i, a) { return a.indexOf(v) === i; });\n return finalList;\n };\n this.modifyStyles = function () {\n _this.owner.dialog.hide();\n _this.owner.owner.styleDialogModule.show(_this.styleName, _this.localValue.getConstant('Modify Style'));\n };\n /* tslint:disable:no-any */\n this.selectHandler = function (args) {\n _this.styleName = args.text;\n };\n this.addNewStyles = function () {\n _this.owner.dialog.hide();\n _this.owner.owner.styleDialogModule.show();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n StylesDialog.prototype.getModuleName = function () {\n return 'StylesDialog';\n };\n /**\n * @private\n */\n StylesDialog.prototype.initStylesDialog = function (localValue, styles) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_styles';\n this.target = createElement('div', { id: id, className: 'e-de-styles' });\n var headerValue = localValue.getConstant('Styles');\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-styles-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-styles-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-styles-list' });\n commonDiv.appendChild(searchDiv);\n var listviewDiv = createElement('div', { className: 'e-styles-listViewDiv', id: 'styles_listview' });\n searchDiv.appendChild(listviewDiv);\n this.listviewInstance = new ListView({\n dataSource: styles,\n cssClass: 'e-styles-listview',\n });\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-styles-button' });\n commonDiv.appendChild(buttonDiv);\n var newButtonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(newButtonDiv);\n var newButtonElement = createElement('button', { innerHTML: localValue.getConstant('New'), id: 'new' });\n newButtonDiv.appendChild(newButtonElement);\n var newbutton = new Button({ cssClass: 'e-button-custom' });\n newbutton.appendTo(newButtonElement);\n newButtonElement.addEventListener('click', this.addNewStyles);\n var modifybuttonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(modifybuttonDiv);\n var modifyButtonElement = createElement('button', { innerHTML: localValue.getConstant('Modify'), id: 'modify' });\n modifybuttonDiv.appendChild(modifyButtonElement);\n var addbutton = new Button({ cssClass: 'e-button-custom' });\n addbutton.appendTo(modifyButtonElement);\n modifyButtonElement.addEventListener('click', this.modifyStyles);\n };\n /**\n * @private\n */\n StylesDialog.prototype.show = function () {\n var styles = this.updateStyleNames();\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n this.localValue = localValue;\n this.initStylesDialog(localValue, styles);\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.header = 'Styles';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.buttons = [{\n click: this.hideObjects.bind(this),\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n StylesDialog.prototype.hideObjects = function () {\n this.owner.dialog.hide();\n };\n /**\n * @private\n */\n StylesDialog.prototype.destroy = function () {\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n };\n return StylesDialog;\n}());\nexport { StylesDialog };\n","import * as index from '@syncfusion/ej2-documenteditor';\nindex.DocumentEditor.Inject( index.Print,index.SfdtExport,index.WordExport,index.TextExport,index.Selection,index.Search,index.Editor,index.EditorHistory,index.OptionsPane,index.ContextMenu,index.ImageResizer,index.HyperlinkDialog,index.TableDialog,index.BookmarkDialog,index.TableOfContentsDialog,index.PageSetupDialog,index.ParagraphDialog,index.ListDialog,index.StyleDialog,index.StylesDialog,index.BulletsAndNumberingDialog,index.FontDialog,index.TablePropertiesDialog,index.BordersAndShadingDialog,index.TableOptionsDialog,index.CellOptionsDialog);\nexport * from '@syncfusion/ej2-documenteditor';\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 * @private\n */\nvar CellStyle = /** @class */ (function () {\n function CellStyle() {\n this.numFmtId = 0;\n this.backColor = 'none';\n this.fontName = 'Calibri';\n this.fontSize = 14;\n this.fontColor = '#000000';\n this.italic = false;\n this.bold = false;\n this.underline = false;\n this.wrapText = false;\n this.hAlign = 'general';\n this.vAlign = 'bottom';\n this.indent = 0;\n this.numberFormat = 'GENERAL';\n this.type = 'datetime';\n this.borders = new Borders();\n this.isGlobalStyle = false;\n }\n return CellStyle;\n}());\nexport { CellStyle };\n/**\n * Font Class\n * @private\n */\nvar Font = /** @class */ (function () {\n function Font() {\n this.sz = 14;\n this.name = 'Calibri';\n this.u = false;\n this.b = false;\n this.i = false;\n this.color = 'FF000000';\n }\n return Font;\n}());\nexport { Font };\n/**\n * CellXfs class\n * @private\n */\nvar CellXfs = /** @class */ (function () {\n function CellXfs() {\n }\n return CellXfs;\n}());\nexport { CellXfs };\n/**\n * Alignment class\n * @private\n */\nvar Alignment = /** @class */ (function () {\n function Alignment() {\n }\n return Alignment;\n}());\nexport { Alignment };\n/**\n * CellStyleXfs class\n * @private\n */\nvar CellStyleXfs = /** @class */ (function () {\n function CellStyleXfs() {\n }\n return CellStyleXfs;\n}());\nexport { CellStyleXfs };\n/**\n * CellStyles class\n * @private\n */\nvar CellStyles = /** @class */ (function () {\n function CellStyles() {\n this.name = 'Normal';\n this.xfId = 0;\n }\n return CellStyles;\n}());\nexport { CellStyles };\n/**\n * NumFmt class\n * @private\n */\nvar NumFmt = /** @class */ (function () {\n function NumFmt(id, code) {\n this.numFmtId = id;\n this.formatCode = code;\n }\n return NumFmt;\n}());\nexport { NumFmt };\n/**\n * Border class\n * @private\n */\nvar Border = /** @class */ (function () {\n function Border(mLine, mColor) {\n this.lineStyle = mLine;\n this.color = mColor;\n }\n return Border;\n}());\nexport { Border };\n/**\n * Borders class\n * @private\n */\nvar Borders = /** @class */ (function () {\n function Borders() {\n this.left = new Border('none', '#FFFFFF');\n this.right = new Border('none', '#FFFFFF');\n this.top = new Border('none', '#FFFFFF');\n this.bottom = new Border('none', '#FFFFFF');\n this.all = new Border('none', '#FFFFFF');\n }\n return Borders;\n}());\nexport { Borders };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Cell = /** @class */ (function () {\n function Cell() {\n }\n return Cell;\n}());\nexport { Cell };\n/**\n * Cells class\n * @private\n */\nvar Cells = /** @class */ (function (_super) {\n __extends(Cells, _super);\n function Cells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (cell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var c = _a[_i];\n if (c.index === cell.index) {\n _this[count] = cell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(cell);\n }\n };\n return _this;\n }\n return Cells;\n}(Array));\nexport { Cells };\n","/**\n * Column class\n * @private\n */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Row class\n * @private\n */\nvar Row = /** @class */ (function () {\n function Row() {\n }\n return Row;\n}());\nexport { Row };\n/**\n * Rows class\n * @private\n */\nvar Rows = /** @class */ (function (_super) {\n __extends(Rows, _super);\n function Rows() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (row) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var r = _a[_i];\n if (r.index === row.index) {\n _this[count] = row;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(row);\n }\n };\n return _this;\n }\n return Rows;\n}(Array));\nexport { Rows };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheets class\n * @private\n */\nvar Worksheets = /** @class */ (function (_super) {\n __extends(Worksheets, _super);\n function Worksheets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Worksheets;\n}(Array));\nexport { Worksheets };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Worksheet = /** @class */ (function () {\n function Worksheet() {\n this.isSummaryRowBelow = true;\n this.showGridLines = true;\n }\n return Worksheet;\n}());\nexport { Worksheet };\n/**\n * Hyperlink class\n * @private\n */\nvar HyperLink = /** @class */ (function () {\n function HyperLink() {\n }\n return HyperLink;\n}());\nexport { HyperLink };\n/**\n * Grouping class\n * @private\n */\nvar Grouping = /** @class */ (function () {\n function Grouping() {\n }\n return Grouping;\n}());\nexport { Grouping };\n/**\n * FreezePane class\n * @private\n */\nvar FreezePane = /** @class */ (function () {\n function FreezePane() {\n }\n return FreezePane;\n}());\nexport { FreezePane };\n/**\n * MergeCell\n * @private\n */\nvar MergeCell = /** @class */ (function () {\n function MergeCell() {\n }\n return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\n * @private\n */\nvar MergeCells = /** @class */ (function (_super) {\n __extends(MergeCells, _super);\n function MergeCells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (mergeCell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var mCell = _a[_i];\n if (MergeCells.isIntersecting(mCell, mergeCell)) {\n var intersectingCell = new MergeCell();\n intersectingCell.x = Math.min(mCell.x, mergeCell.x);\n intersectingCell.y = Math.min(mCell.Y, mergeCell.y);\n intersectingCell.width = Math.max(mCell.Width + mCell.X, mergeCell.width + mergeCell.x);\n intersectingCell.height = Math.max(mCell.Height + mCell.Y, mergeCell.height + mergeCell.y);\n intersectingCell.ref = (_this[count].ref.split(':')[0]) + ':' + (mergeCell.ref.split(':')[1]);\n _this[count] = intersectingCell;\n mergeCell = intersectingCell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(mergeCell);\n }\n return mergeCell;\n };\n return _this;\n }\n MergeCells.isIntersecting = function (base, compare) {\n return (base.x <= compare.x + compare.width)\n && (compare.x <= base.x + base.width)\n && (base.y <= compare.y + compare.height)\n && (compare.y <= base.y + base.height);\n };\n return MergeCells;\n}(Array));\nexport { MergeCells };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n// import { IValueFormatter } from '../base/interface';\n/**\n * ValueFormatter class to globalize the value.\n * @private\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n // if (!isNullOrUndefined(cultureName)) {\n // this.intl.culture = cultureName;\n // }\n }\n ValueFormatter.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n // public getParserFunction(format: NumberFormatOptions | DateFormatOptions): Function {\n // if ((format).type) {\n // return this.intl.getDateParser(format);\n // } else {\n // return this.intl.getNumberParser(format);\n // }\n // }\n // public fromView(value: string, format: Function, type?: string): string | number | Date {\n // if (type === 'date' || type === 'datetime' || type === 'number') {\n // return format(value);\n // } else {\n // return value;\n // }\n // }\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n // public setCulture(cultureName: string): void {\n // if (!isNullOrUndefined(cultureName)) {\n // setCulture(cultureName);\n // }\n // }\n /* tslint:disable:no-any */\n ValueFormatter.prototype.displayText = function (value, format) {\n return this.toView(value, this.getFormatFunction(format));\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { ValueFormatter } from './value-formatter';\n/**\n * CsvHelper class\n * @private\n */\nvar CsvHelper = /** @class */ (function () {\n /* tslint:disable:no-any */\n function CsvHelper(json) {\n this.csvStr = '';\n this.formatter = new ValueFormatter();\n this.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n if (json.styles !== null && json.styles !== undefined) {\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined && json.styles[i].numberFormat !== undefined) {\n this.globalStyles.set(json.styles[i].name, json.styles[i].numberFormat);\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parseWorksheet(json.worksheets[0]);\n }\n //this.csvStr = 'a1,a2,a3\\nb1,b2,b3';\n }\n CsvHelper.prototype.parseWorksheet = function (json) {\n //Rows\n if (json.rows !== null && json.rows !== undefined) {\n this.parseRows(json.rows);\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRows = function (rows) {\n var count = 1;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n //Row index\n if (row.index !== null && row.index !== undefined) {\n while (count < row.index) {\n this.csvStr += '\\n';\n count++;\n }\n this.parseRow(row);\n }\n else {\n throw Error('Row index is missing.');\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRow = function (row) {\n if (row.cells !== null && row.cells !== undefined) {\n var count = 1;\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n //cell index\n if (cell.index !== null && cell.index !== undefined) {\n while (count < cell.index) {\n this.csvStr += ',';\n count++;\n }\n this.parseCell(cell);\n }\n else {\n throw Error('Cell index is missing.');\n }\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseCell = function (cell) {\n var csv = this.csvStr;\n if (cell.value !== undefined) {\n if (cell.value instanceof Date) {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else if (typeof (cell.value) === 'boolean') {\n csv += cell.value ? 'TRUE' : 'FALSE';\n }\n else if (typeof (cell.value) === 'number') {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else {\n csv += this.parseCellValue(cell.value);\n }\n }\n this.csvStr = csv;\n };\n CsvHelper.prototype.parseCellValue = function (value) {\n if (value.indexOf(',') !== -1) {\n return value = '\\\"' + value + '\\\"';\n }\n else {\n return value;\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n */\n CsvHelper.prototype.save = function (fileName) {\n this.buffer = new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(this.buffer, fileName);\n }\n else {\n var dataUrl_1 = window.URL.createObjectURL(this.buffer);\n var dwlLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n dwlLink.download = fileName;\n dwlLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n dwlLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n });\n }\n };\n CsvHelper.prototype.saveAsBlob = function () {\n return new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n };\n return CsvHelper;\n}());\nexport { CsvHelper };\n","/**\n * BlobHelper class\n * @private\n */\nvar BlobHelper = /** @class */ (function () {\n function BlobHelper() {\n /* tslint:disable:no-any */\n this.parts = [];\n }\n /* tslint:disable:no-any */\n BlobHelper.prototype.append = function (part) {\n this.parts.push(part);\n this.blob = undefined; // Invalidate the blob\n };\n BlobHelper.prototype.getBlob = function () {\n return new Blob(this.parts, { type: 'text/plain' });\n };\n return BlobHelper;\n}());\nexport { BlobHelper };\n","import { Worksheets } from './worksheets';\nimport { Worksheet, FreezePane, MergeCell, MergeCells, HyperLink, Grouping } from './worksheet';\nimport { CellStyle, Font, Borders, CellXfs, Alignment, NumFmt, CellStyleXfs, CellStyles } from './cell-style';\nimport { Column } from './column';\nimport { Row, Rows } from './row';\nimport { Cell, Cells } from './cell';\nimport { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { CsvHelper } from './csv-helper';\nimport { Internationalization, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BlobHelper } from './blob-helper';\n/**\n * Workbook class\n */\nvar Workbook = /** @class */ (function () {\n /* tslint:disable:no-any */\n function Workbook(json, saveType, culture, currencyString) {\n this.sharedStringCount = 0;\n this.unitsProportions = [\n 96 / 75.0,\n 96 / 300.0,\n 96,\n 96 / 25.4,\n 96 / 2.54,\n 1,\n 96 / 72.0,\n 96 / 72.0 / 12700,\n ];\n /* tslint:disable:no-any */\n this.hyperlinkStyle = { fontColor: '#0000FF', underline: true };\n if (culture !== undefined) {\n this.culture = culture;\n }\n else {\n this.culture = 'en-US';\n }\n if (currencyString !== undefined) {\n this.currency = currencyString;\n }\n else {\n this.currency = 'USD';\n }\n this.intl = new Internationalization(this.culture);\n this.mSaveType = saveType;\n if (saveType === 'xlsx') {\n this.mArchive = new ZipArchive();\n this.sharedString = [];\n this.mFonts = [];\n this.mBorders = [];\n this.mStyles = [];\n this.printTitles = new Map();\n this.cellStyles = new Map();\n this.mNumFmt = new Map();\n this.mFills = new Map();\n this.mStyles.push(new CellStyle());\n this.mFonts.push(new Font());\n /* tslint:disable */\n this.cellStyles.set('Normal', new CellStyles());\n /* tslint:enable */\n this.mCellXfs = [];\n this.mCellStyleXfs = [];\n if (json.styles !== null && json.styles !== undefined) {\n /* tslint:disable-next-line:no-any */\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined) {\n if (!this.cellStyles.has(json.styles[i].name)) {\n var cellStyle = new CellStyle();\n cellStyle.isGlobalStyle = true;\n this.parserCellStyle(json.styles[i], cellStyle, 'none');\n var cellStylesIn = new CellStyles();\n cellStylesIn.name = cellStyle.name;\n cellStylesIn.xfId = (cellStyle.index - 1);\n this.cellStyles.set(cellStylesIn.name, cellStylesIn);\n /* tslint:disable-next-line:no-any */\n var tFormat = {};\n if (json.styles[i].numberFormat !== undefined) {\n tFormat.format = json.styles[i].numberFormat;\n }\n if (json.styles[i].type !== undefined) {\n tFormat.type = json.styles[i].type;\n }\n else {\n tFormat.type = 'datetime';\n }\n if (tFormat.format !== undefined) {\n this.globalStyles.set(json.styles[i].name, tFormat);\n }\n }\n else {\n throw Error('Style name ' + json.styles[i].name + ' is already existed');\n }\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parserWorksheets(json.worksheets);\n }\n else {\n throw Error('Worksheet is expected.');\n }\n // Parses the BuiltInProperties data to DOM. \n if (json.builtInProperties !== null && json.builtInProperties !== undefined) {\n this.builtInProperties = new BuiltInProperties();\n this.parserBuiltInProperties(json.builtInProperties, this.builtInProperties);\n }\n }\n else {\n this.csvHelper = new CsvHelper(json);\n }\n }\n /* tslint:disable:no-any */\n Workbook.prototype.parserBuiltInProperties = function (jsonBuiltInProperties, builtInProperties) {\n //Author\n if (jsonBuiltInProperties.author !== null && jsonBuiltInProperties.author !== undefined) {\n builtInProperties.author = jsonBuiltInProperties.author;\n }\n //Comments\n if (jsonBuiltInProperties.comments !== null && jsonBuiltInProperties.comments !== undefined) {\n builtInProperties.comments = jsonBuiltInProperties.comments;\n }\n //Category\n if (jsonBuiltInProperties.category !== null && jsonBuiltInProperties.category !== undefined) {\n builtInProperties.category = jsonBuiltInProperties.category;\n }\n //Company\n if (jsonBuiltInProperties.company !== null && jsonBuiltInProperties.company !== undefined) {\n builtInProperties.company = jsonBuiltInProperties.company;\n }\n //Manager\n if (jsonBuiltInProperties.manager !== null && jsonBuiltInProperties.manager !== undefined) {\n builtInProperties.manager = jsonBuiltInProperties.manager;\n }\n //Subject\n if (jsonBuiltInProperties.subject !== null && jsonBuiltInProperties.subject !== undefined) {\n builtInProperties.subject = jsonBuiltInProperties.subject;\n }\n //Title\n if (jsonBuiltInProperties.title !== null && jsonBuiltInProperties.title !== undefined) {\n builtInProperties.title = jsonBuiltInProperties.title;\n }\n //Creation date\n if (jsonBuiltInProperties.createdDate !== null && jsonBuiltInProperties.createdDate !== undefined) {\n builtInProperties.createdDate = jsonBuiltInProperties.createdDate;\n }\n //Modified date\n if (jsonBuiltInProperties.modifiedDate !== null && jsonBuiltInProperties.modifiedDate !== undefined) {\n builtInProperties.modifiedDate = jsonBuiltInProperties.modifiedDate;\n }\n //Tags\n if (jsonBuiltInProperties.tags !== null && jsonBuiltInProperties.tags !== undefined) {\n builtInProperties.tags = jsonBuiltInProperties.tags;\n }\n //Status\n if (jsonBuiltInProperties.status !== null && jsonBuiltInProperties.status !== undefined) {\n builtInProperties.status = jsonBuiltInProperties.status;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserWorksheets = function (json) {\n this.worksheets = new Worksheets();\n var length = json.length;\n for (var i = 0; i < length; i++) {\n var jsonSheet = json[i];\n var sheet = new Worksheet();\n this.mergeCells = new MergeCells();\n this.mergedCellsStyle = new Map();\n this.mHyperLinks = [];\n //Name\n if (jsonSheet.name !== null && jsonSheet.name !== undefined) {\n sheet.name = jsonSheet.name;\n }\n else {\n sheet.name = 'Sheet' + (i + 1).toString();\n }\n sheet.index = (i + 1);\n //Columns\n if (jsonSheet.columns !== null && jsonSheet.columns !== undefined) {\n this.parserColumns(jsonSheet.columns, sheet);\n }\n //Rows\n if (jsonSheet.rows !== null && jsonSheet.rows !== undefined) {\n this.parserRows(jsonSheet.rows, sheet);\n }\n //showGridLines\n if (jsonSheet.showGridLines !== null && jsonSheet.showGridLines !== undefined) {\n sheet.showGridLines = jsonSheet.showGridLines;\n }\n //FreezePanes\n if (jsonSheet.freeze !== null && jsonSheet.freeze !== undefined) {\n this.parserFreezePanes(jsonSheet.freeze, sheet);\n }\n //Print Title\n if (jsonSheet.printTitle !== null && jsonSheet.printTitle !== undefined) {\n this.parserPrintTitle(jsonSheet.printTitle, sheet);\n }\n if (jsonSheet.pageSetup !== undefined) {\n if (jsonSheet.pageSetup.isSummaryRowBelow !== undefined) {\n sheet.isSummaryRowBelow = jsonSheet.pageSetup.isSummaryRowBelow;\n }\n }\n sheet.index = (i + 1);\n sheet.mergeCells = this.mergeCells;\n sheet.hyperLinks = this.mHyperLinks;\n this.worksheets.push(sheet);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.mergeOptions = function (fromJson, toJson) {\n /* tslint:disable:no-any */\n var result = {};\n this.applyProperties(fromJson, result);\n this.applyProperties(toJson, result);\n return result;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.applyProperties = function (sourceJson, destJson) {\n var keys = Object.keys(sourceJson);\n for (var index = 0; index < keys.length; index++) {\n if (keys[index] !== 'name') {\n destJson[keys[index]] = sourceJson[keys[index]];\n }\n }\n };\n Workbook.prototype.getCellName = function (row, column) {\n return this.getColumnName(column) + row.toString();\n };\n Workbook.prototype.getColumnName = function (col) {\n col--;\n var strColumnName = '';\n do {\n var iCurrentDigit = col % 26;\n col = col / 26 - 1;\n strColumnName = String.fromCharCode(65 + iCurrentDigit) + strColumnName;\n } while (col >= 0);\n return strColumnName;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserPrintTitle = function (json, sheet) {\n var printTitleName = '';\n var titleRowName;\n if (json.fromRow !== null && json.fromRow !== undefined) {\n var fromRow = json.fromRow;\n var toRow = void 0;\n if (json.toRow !== null && json.toRow !== undefined) {\n toRow = json.toRow;\n }\n else {\n toRow = json.fromRow;\n }\n titleRowName = '$' + fromRow + ':$' + toRow;\n }\n var titleColName;\n if (json.fromColumn !== null && json.fromColumn !== undefined) {\n var fromColumn = json.fromColumn;\n var toColumn = void 0;\n if (json.toColumn !== null && json.toColumn !== undefined) {\n toColumn = json.toColumn;\n }\n else {\n toColumn = json.fromColumn;\n }\n titleColName = '$' + this.getColumnName(fromColumn) + ':$' + this.getColumnName(toColumn);\n }\n if (titleRowName !== undefined) {\n printTitleName += (sheet.name + '!' + titleRowName);\n }\n if (titleColName !== undefined && titleRowName !== undefined) {\n printTitleName += ',' + (sheet.name + '!' + titleColName);\n }\n else if (titleColName !== undefined) {\n printTitleName += (sheet.name + '!' + titleColName);\n }\n if (printTitleName !== '') {\n this.printTitles.set(sheet.index - 1, printTitleName);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserFreezePanes = function (json, sheet) {\n sheet.freezePanes = new FreezePane();\n if (json.row !== null && json.row !== undefined) {\n sheet.freezePanes.row = json.row;\n }\n else {\n sheet.freezePanes.row = 0;\n }\n if (json.column !== null && json.column !== undefined) {\n sheet.freezePanes.column = json.column;\n }\n else {\n sheet.freezePanes.column = 0;\n }\n sheet.freezePanes.leftCell = this.getCellName(sheet.freezePanes.row + 1, sheet.freezePanes.column + 1);\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserColumns = function (json, sheet) {\n var columnsLength = json.length;\n sheet.columns = [];\n for (var column = 0; column < columnsLength; column++) {\n var col = new Column();\n if (json[column].index !== null && json[column].index !== undefined) {\n col.index = json[column].index;\n }\n else {\n throw Error('Column index is missing.');\n }\n if (json[column].width !== null && json[column].width !== undefined) {\n col.width = json[column].width;\n }\n sheet.columns.push(col);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRows = function (json, sheet) {\n var rowsLength = json.length;\n sheet.rows = new Rows();\n var rowId = 0;\n for (var r = 0; r < rowsLength; r++) {\n var row = this.parserRow(json[r], rowId);\n rowId = row.index;\n sheet.rows.add(row);\n }\n this.insertMergedCellsStyle(sheet);\n };\n Workbook.prototype.insertMergedCellsStyle = function (sheet) {\n var _this = this;\n if (this.mergeCells.length > 0) {\n this.mergedCellsStyle.forEach(function (value, key) {\n var row = sheet.rows.filter(function (item) {\n return item.index === value.y;\n })[0];\n if (!isNullOrUndefined(row)) {\n var cell = row.cells.filter(function (item) {\n return item.index === value.x;\n })[0];\n if (!isNullOrUndefined(cell)) {\n cell.styleIndex = value.styleIndex;\n }\n else {\n var cells = row.cells.filter(function (item) {\n return item.index <= value.x;\n });\n var insertIndex = 0;\n if (cells.length > 0) {\n insertIndex = row.cells.indexOf(cells[cells.length - 1]) + 1;\n }\n row.cells.splice(insertIndex, 0, _this.createCell(value, key));\n }\n }\n else {\n var rows = sheet.rows.filter(function (item) {\n return item.index <= value.y;\n });\n var rowToInsert = new Row();\n rowToInsert.index = value.y;\n rowToInsert.cells = new Cells();\n rowToInsert.cells.add(_this.createCell(value, key));\n var insertIndex = 0;\n if (rows.length > 0) {\n insertIndex = sheet.rows.indexOf(rows[rows.length - 1]) + 1;\n }\n sheet.rows.splice(insertIndex, 0, rowToInsert);\n }\n });\n }\n };\n Workbook.prototype.createCell = function (value, key) {\n var cellToInsert = new Cell();\n cellToInsert.refName = key;\n cellToInsert.index = value.x;\n cellToInsert.cellStyle = new CellStyle();\n cellToInsert.styleIndex = value.styleIndex;\n return cellToInsert;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRow = function (json, rowIndex) {\n var row = new Row();\n //Row Height\n if (json.height !== null && json.height !== undefined) {\n row.height = json.height;\n }\n //Row index\n if (json.index !== null && json.index !== undefined) {\n row.index = json.index;\n }\n else {\n throw Error('Row index is missing.');\n }\n if (json.grouping !== null && json.grouping !== undefined) {\n this.parseGrouping(json.grouping, row);\n }\n this.parseCells(json.cells, row);\n return row;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseGrouping = function (json, row) {\n row.grouping = new Grouping();\n if (json.outlineLevel !== undefined) {\n row.grouping.outlineLevel = json.outlineLevel;\n }\n if (json.isCollapsed !== undefined) {\n row.grouping.isCollapsed = json.isCollapsed;\n }\n if (json.isHidden !== undefined) {\n row.grouping.isHidden = json.isHidden;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseCells = function (json, row) {\n row.cells = new Cells();\n var cellsLength = json !== undefined ? json.length : 0;\n var spanMin = 1;\n var spanMax = 1;\n var curCellIndex = 0;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable:no-any */\n var jsonCell = json[cellId];\n var cell = new Cell();\n //cell index\n if (jsonCell.index !== null && jsonCell.index !== undefined) {\n cell.index = jsonCell.index;\n }\n else {\n throw Error('Cell index is missing.');\n }\n if (cell.index < spanMin) {\n spanMin = cell.index;\n }\n else if (cell.index > spanMax) {\n spanMax = cell.index;\n }\n //Update the Cell name\n cell.refName = this.getCellName(row.index, cell.index);\n //Row span\n if (jsonCell.rowSpan !== null && jsonCell.rowSpan !== undefined) {\n cell.rowSpan = jsonCell.rowSpan - 1;\n }\n else {\n cell.rowSpan = 0;\n }\n //Column span\n if (jsonCell.colSpan !== null && jsonCell.colSpan !== undefined) {\n cell.colSpan = jsonCell.colSpan - 1;\n }\n else {\n cell.colSpan = 0;\n }\n //Hyperlink\n if (jsonCell.hyperlink !== null && jsonCell.hyperlink !== undefined) {\n var hyperLink = new HyperLink();\n if (jsonCell.hyperlink.target !== undefined) {\n hyperLink.target = jsonCell.hyperlink.target;\n if (jsonCell.hyperlink.displayText !== undefined) {\n cell.value = jsonCell.hyperlink.displayText;\n }\n else {\n cell.value = jsonCell.hyperlink.target;\n }\n cell.type = this.getCellValueType(cell.value);\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n cell.cellStyle = new CellStyle();\n /* tslint:disable-next-line:max-line-length */\n this.parserCellStyle((jsonCell.style !== undefined ? this.mergeOptions(jsonCell.style, this.hyperlinkStyle) : this.hyperlinkStyle), cell.cellStyle, 'string');\n cell.styleIndex = cell.cellStyle.index;\n }\n }\n //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 this.mergeCells = this.processMergeCells(cell, row.index, this.mergeCells);\n row.cells.add(cell);\n curCellIndex = (cell.index + 1);\n }\n row.spans = (spanMin) + ':' + (spanMax);\n };\n Workbook.prototype.applyGlobalStyle = function (json, cellStyle) {\n var index = 0;\n if (this.cellStyles.has(json.name)) {\n cellStyle.index = this.mStyles.filter(function (a) { return (a.name === json.name); })[0].index;\n cellStyle.name = json.name;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserCellStyle = function (json, cellStyle, cellType, defStyleIndex) {\n //name\n if (json.name !== null && json.name !== undefined) {\n if (cellStyle.isGlobalStyle) {\n cellStyle.name = json.name;\n }\n else {\n this.applyGlobalStyle(json, cellStyle);\n return;\n }\n }\n //background color\n if (json.backColor !== null && json.backColor !== undefined) {\n cellStyle.backColor = json.backColor;\n }\n //borders\n //leftBorder\n cellStyle.borders = new Borders();\n //AllBorder\n if (json.borders !== null && json.borders !== undefined) {\n this.parserBorder(json.borders, cellStyle.borders.all);\n }\n //leftborder\n if (json.leftBorder !== null && json.leftBorder !== undefined) {\n this.parserBorder(json.leftBorder, cellStyle.borders.left);\n }\n //rightBorder\n if (json.rightBorder !== null && json.rightBorder !== undefined) {\n this.parserBorder(json.rightBorder, cellStyle.borders.right);\n }\n //topBorder\n if (json.topBorder !== null && json.topBorder !== undefined) {\n this.parserBorder(json.topBorder, cellStyle.borders.top);\n }\n //bottomBorder\n if (json.bottomBorder !== null && json.bottomBorder !== undefined) {\n this.parserBorder(json.bottomBorder, cellStyle.borders.bottom);\n }\n //fontName\n if (json.fontName !== null && json.fontName !== undefined) {\n cellStyle.fontName = json.fontName;\n }\n //fontSize\n if (json.fontSize !== null && json.fontSize !== undefined) {\n cellStyle.fontSize = json.fontSize;\n }\n //fontColor\n if (json.fontColor !== null && json.fontColor !== undefined) {\n cellStyle.fontColor = json.fontColor;\n }\n //italic\n if (json.italic !== null && json.italic !== undefined) {\n cellStyle.italic = json.italic;\n }\n //bold\n if (json.bold !== null && json.bold !== undefined) {\n cellStyle.bold = json.bold;\n }\n //hAlign\n if (json.hAlign !== null && json.hAlign !== undefined) {\n cellStyle.hAlign = json.hAlign;\n }\n //indent\n if (json.indent !== null && json.indent !== undefined) {\n cellStyle.indent = json.indent;\n if (!(cellStyle.hAlign === 'left' || cellStyle.hAlign === 'right')) {\n cellStyle.hAlign = 'left';\n }\n }\n //vAlign\n if (json.vAlign !== null && json.vAlign !== undefined) {\n cellStyle.vAlign = json.vAlign;\n }\n //underline\n if (json.underline !== null && json.underline !== undefined) {\n cellStyle.underline = json.underline;\n }\n //wrapText\n if (json.wrapText !== null && json.wrapText !== undefined) {\n cellStyle.wrapText = json.wrapText;\n }\n //numberFormat\n if (json.numberFormat !== null && json.numberFormat !== undefined) {\n if (json.type !== null && json.type !== undefined) {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, json.type);\n }\n else {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, cellType);\n }\n }\n else if (defStyleIndex !== undefined) {\n cellStyle.numFmtId = 14;\n cellStyle.numberFormat = 'GENERAL';\n }\n else {\n cellStyle.numberFormat = 'GENERAL';\n }\n cellStyle.index = this.processCellStyle(cellStyle);\n };\n Workbook.prototype.switchNumberFormat = function (numberFormat, type) {\n var format = this.getNumberFormat(numberFormat, type);\n if (format !== numberFormat) {\n var numFmt = this.mNumFmt.get(numberFormat);\n if (numFmt !== undefined) {\n numFmt.formatCode = format;\n if (this.mNumFmt.has(format)) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXfs = _a[_i];\n if (cellStyleXfs.numFmtId === numFmt.numFmtId) {\n cellStyleXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n for (var _b = 0, _c = this.mCellXfs; _b < _c.length; _b++) {\n var cellXfs = _c[_b];\n if (cellXfs.numFmtId === numFmt.numFmtId) {\n cellXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n }\n }\n }\n };\n Workbook.prototype.getNumberFormat = function (numberFormat, type) {\n var returnFormat;\n switch (type) {\n case 'number':\n try {\n returnFormat = this.intl.getNumberPattern({ format: numberFormat, currency: this.currency });\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'datetime':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'date':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'time':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n default:\n returnFormat = numberFormat;\n break;\n }\n return returnFormat;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserBorder = function (json, border) {\n if (json.color !== null && json.color !== undefined) {\n border.color = json.color;\n }\n else {\n border.color = '#000000';\n }\n if (json.lineStyle !== null && json.lineStyle !== undefined) {\n border.lineStyle = json.lineStyle;\n }\n else {\n border.lineStyle = 'thin';\n }\n };\n Workbook.prototype.processCellStyle = function (style) {\n if (style.isGlobalStyle) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n var compareResult = this.compareStyle(style);\n if (!compareResult.result) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n //Return the index of the already existing style.\n return compareResult.index;\n }\n }\n };\n Workbook.prototype.processNumFormatId = function (style) {\n if (style.numberFormat !== 'GENERAL' && !this.mNumFmt.has(style.numberFormat)) {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n }\n };\n Workbook.prototype.isNewFont = function (toCompareStyle) {\n var result = false;\n var index = 0;\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n index++;\n var fontColor = undefined;\n if (toCompareStyle.fontColor !== undefined) {\n fontColor = ('FF' + toCompareStyle.fontColor.replace('#', ''));\n }\n result = font.color === fontColor &&\n font.b === toCompareStyle.bold &&\n font.i === toCompareStyle.italic &&\n font.u === toCompareStyle.underline &&\n font.name === toCompareStyle.fontName &&\n font.sz === toCompareStyle.fontSize;\n if (result) {\n break;\n }\n }\n index = index - 1;\n return { index: index, result: result };\n };\n Workbook.prototype.isNewBorder = function (toCompareStyle) {\n var bStyle = new CellStyle();\n if (this.isAllBorder(toCompareStyle.borders)) {\n return (bStyle.borders.all.color === toCompareStyle.borders.all.color &&\n bStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle);\n }\n else {\n return (bStyle.borders.left.color === toCompareStyle.borders.left.color &&\n bStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n bStyle.borders.right.color === toCompareStyle.borders.right.color &&\n bStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n bStyle.borders.top.color === toCompareStyle.borders.top.color &&\n bStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n bStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n bStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle);\n }\n };\n Workbook.prototype.isAllBorder = function (toCompareBorder) {\n var allBorderStyle = new CellStyle();\n return allBorderStyle.borders.all.color !== toCompareBorder.all.color &&\n allBorderStyle.borders.all.lineStyle !== toCompareBorder.all.lineStyle;\n };\n Workbook.prototype.compareStyle = function (toCompareStyle) {\n var result = true;\n var index = 0;\n var globalStyleIndex = 0;\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var baseStyle = _a[_i];\n result = baseStyle.isGlobalStyle ? false : (baseStyle.backColor === toCompareStyle.backColor &&\n baseStyle.bold === toCompareStyle.bold &&\n baseStyle.numFmtId === toCompareStyle.numFmtId &&\n baseStyle.numberFormat === toCompareStyle.numberFormat &&\n baseStyle.type === toCompareStyle.type &&\n baseStyle.fontColor === toCompareStyle.fontColor &&\n baseStyle.fontName === toCompareStyle.fontName &&\n baseStyle.fontSize === toCompareStyle.fontSize &&\n baseStyle.hAlign === toCompareStyle.hAlign &&\n baseStyle.italic === toCompareStyle.italic &&\n baseStyle.underline === toCompareStyle.underline &&\n baseStyle.vAlign === toCompareStyle.vAlign &&\n baseStyle.indent === toCompareStyle.indent &&\n baseStyle.wrapText === toCompareStyle.wrapText &&\n (baseStyle.borders.all.color === toCompareStyle.borders.all.color &&\n baseStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle) &&\n (baseStyle.borders.left.color === toCompareStyle.borders.left.color &&\n baseStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n baseStyle.borders.right.color === toCompareStyle.borders.right.color &&\n baseStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n baseStyle.borders.top.color === toCompareStyle.borders.top.color &&\n baseStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n baseStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n baseStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle));\n if (result) {\n index = baseStyle.index;\n break;\n }\n }\n return { index: index, result: result };\n };\n Workbook.prototype.contains = function (array, item) {\n var index = array.indexOf(item);\n return index > -1 && index < array.length;\n };\n Workbook.prototype.getCellValueType = function (value) {\n if (value instanceof Date) {\n return 'datetime';\n }\n else if (typeof (value) === 'boolean') {\n return 'boolean';\n }\n else if (typeof (value) === 'number') {\n return 'number';\n }\n else {\n return 'string';\n }\n };\n Workbook.prototype.parseCellType = function (cell) {\n var type = cell.type;\n var saveType;\n var value = cell.value;\n switch (type) {\n case 'datetime':\n value = this.toOADate(value);\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n var value_1 = this.globalStyles.get(cell.cellStyle.name);\n this.switchNumberFormat(value_1.format, value_1.type);\n }\n }\n saveType = 'n';\n break;\n //TODO: Update the number format index and style\n case 'boolean':\n value = value ? 1 : 0;\n saveType = 'b';\n break;\n case 'number':\n saveType = 'n';\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n this.switchNumberFormat(this.globalStyles.get(cell.cellStyle.name).format, 'number');\n }\n }\n break;\n case 'string':\n this.sharedStringCount++;\n saveType = 's';\n if (!this.contains(this.sharedString, value)) {\n this.sharedString.push(value);\n }\n value = this.sharedString.indexOf(value);\n break;\n default:\n break;\n }\n cell.saveType = saveType;\n cell.value = value;\n };\n Workbook.prototype.saveAsBlob = function (blobSaveType) {\n var _this = this;\n switch (blobSaveType) {\n case 'text/csv':\n return new Promise(function (resolve, reject) {\n var obj = {};\n obj.blobData = _this.csvHelper.saveAsBlob();\n resolve(obj);\n });\n default:\n return new Promise(function (resolve, reject) {\n _this.saveInternal();\n _this.mArchive.saveAsBlob().then(function (blob) {\n var obj = {};\n obj.blobData = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n resolve(obj);\n });\n });\n }\n };\n Workbook.prototype.save = function (fileName, proxyUrl) {\n var _this = this;\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('Argument Null Exception: fileName cannot be null or empty');\n }\n var xlsxMatch = fileName.match('.xlsx$');\n var csvMatch = fileName.match('.csv$');\n if (xlsxMatch !== null && xlsxMatch[0] === ('.' + this.mSaveType)) {\n this.saveInternal();\n this.mArchive.save(fileName).then(function () {\n _this.mArchive.destroy();\n });\n }\n else if (csvMatch !== null && csvMatch[0] === ('.' + this.mSaveType)) {\n this.csvHelper.save(fileName);\n }\n else {\n throw Error('Save type and file extension is different.');\n }\n };\n Workbook.prototype.saveInternal = function () {\n this.saveWorkbook();\n this.saveWorksheets();\n this.saveSharedString();\n this.saveStyles();\n this.saveApp(this.builtInProperties);\n this.saveCore(this.builtInProperties);\n this.saveContentType();\n this.saveTopLevelRelation();\n this.saveWorkbookRelation();\n };\n Workbook.prototype.saveWorkbook = function () {\n /* tslint:disable-next-line:max-line-length */\n var workbookTemp = '';\n var sheets = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheets += '';\n }\n sheets += '';\n workbookTemp += sheets;\n if (this.printTitles.size > 0) {\n var printTitle_1 = '';\n this.printTitles.forEach(function (value, key) {\n printTitle_1 += '' + value + '';\n });\n printTitle_1 += '';\n workbookTemp += printTitle_1;\n }\n this.addToArchive(workbookTemp + '', 'xl/workbook.xml');\n };\n Workbook.prototype.saveWorksheets = function () {\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n this.saveWorksheet(this.worksheets[i], i);\n }\n };\n Workbook.prototype.saveWorksheet = function (sheet, index) {\n var sheetBlob = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetString = '';\n if (!sheet.isSummaryRowBelow) {\n sheetString += ('' + '' + '' + '');\n }\n else {\n sheetString += ('');\n }\n sheetString += this.saveSheetView(sheet);\n if (sheet.columns !== undefined) {\n var colString = '';\n for (var _i = 0, _a = sheet.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n if (column.width !== undefined) {\n colString += '';\n }\n else {\n colString += '';\n }\n }\n sheetString += (colString + '');\n }\n sheetString += ('');\n sheetBlob.append(sheetString);\n sheetString = '';\n if (sheet.rows !== undefined) {\n for (var _b = 0, _c = sheet.rows; _b < _c.length; _b++) {\n var row = _c[_b];\n var rowString = '');\n for (var _d = 0, _e = row.cells; _d < _e.length; _d++) {\n var cell = _e[_d];\n if (cell !== undefined && (cell.value !== undefined || cell.cellStyle !== undefined)) {\n rowString += ('');\n if (cell.value !== undefined) {\n rowString += ('' + cell.value + '');\n }\n else {\n rowString += ('');\n }\n }\n }\n rowString += ('');\n sheetBlob.append(rowString);\n }\n }\n sheetString += ('');\n if (sheet.mergeCells.length > 0) {\n sheetString += ('');\n for (var _f = 0, _g = sheet.mergeCells; _f < _g.length; _f++) {\n var mCell = _g[_f];\n sheetString += ('');\n }\n sheetString += ('');\n }\n if (sheet.hyperLinks.length > 0) {\n sheetString += ('');\n for (var _h = 0, _j = sheet.hyperLinks; _h < _j.length; _h++) {\n var hLink = _j[_h];\n sheetString += ('');\n }\n sheetString += ('');\n this.addToArchive(this.saveSheetRelations(sheet), ('xl/worksheets/_rels/sheet' + sheet.index + '.xml.rels'));\n }\n /* tslint:disable-next-line:max-line-length */\n sheetString += ('');\n sheetBlob.append(sheetString);\n this.addToArchive(sheetBlob.getBlob(), 'xl/worksheets' + '/sheet' + (index + 1) + '.xml');\n };\n Workbook.prototype.pixelsToColumnWidth = function (pixels) {\n var dDigitWidth = 7;\n var val = (pixels > dDigitWidth + 5) ?\n this.trunc((pixels - 5) / dDigitWidth * 100 + 0.5) / 100 :\n pixels / (dDigitWidth + 5);\n return (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n };\n Workbook.prototype.trunc = function (x) {\n var n = x - x % 1;\n return n === 0 && (x < 0 || (x === 0 && (1 / x !== 1 / 0))) ? -0 : n;\n };\n Workbook.prototype.pixelsToRowHeight = function (pixels) {\n return (pixels * this.unitsProportions[5] / this.unitsProportions[6]);\n };\n Workbook.prototype.saveSheetRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var relStr = '';\n for (var _i = 0, _a = sheet.hyperLinks; _i < _a.length; _i++) {\n var hLink = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n relStr += '';\n return relStr;\n };\n Workbook.prototype.saveSheetView = function (sheet) {\n var paneString = ' 0) {\n /* tslint:disable-next-line:max-line-length */\n var sstStart = '';\n var si = '';\n for (var i = 0; i < length; i++) {\n si += '';\n si += this.processString(this.sharedString[i]);\n si += '';\n }\n si += '';\n this.addToArchive(sstStart + si, 'xl/sharedStrings.xml');\n }\n };\n Workbook.prototype.processString = function (value) {\n if (value.indexOf('&') !== -1) {\n value = value.replace(/&/g, '&');\n }\n if (value.indexOf('<') !== -1) {\n value = value.replace(/') !== -1) {\n value = value.replace(/>/g, '>');\n }\n return value;\n };\n Workbook.prototype.saveStyles = function () {\n this.updateCellXfsStyleXfs();\n /* tslint:disable-next-line:max-line-length */\n var styleTemp = '';\n styleTemp += this.saveNumberFormats();\n styleTemp += this.saveFonts();\n styleTemp += this.saveFills();\n styleTemp += this.saveBorders();\n styleTemp += this.saveCellStyleXfs();\n styleTemp += this.saveCellXfs();\n styleTemp += this.saveCellStyles();\n this.addToArchive(styleTemp + '', 'xl/styles.xml');\n };\n Workbook.prototype.updateCellXfsStyleXfs = function () {\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var style = _a[_i];\n var cellXfs = undefined;\n if (style.isGlobalStyle) {\n cellXfs = new CellStyleXfs();\n cellXfs.xfId = (style.index - 1);\n }\n else {\n cellXfs = new CellXfs();\n cellXfs.xfId = 0;\n }\n //Add font\n var compareFontResult = this.isNewFont(style);\n if (!compareFontResult.result) {\n var font = new Font();\n font.b = style.bold;\n font.i = style.italic;\n font.name = style.fontName;\n font.sz = style.fontSize;\n font.u = style.underline;\n font.color = ('FF' + style.fontColor.replace('#', ''));\n this.mFonts.push(font);\n cellXfs.fontId = this.mFonts.length - 1;\n }\n else {\n cellXfs.fontId = compareFontResult.index;\n }\n //Add fill\n if (style.backColor !== 'none') {\n var backColor = 'FF' + style.backColor.replace('#', '');\n if (this.mFills.has(backColor)) {\n var fillId = this.mFills.get(backColor);\n cellXfs.fillId = fillId;\n }\n else {\n var fillId = this.mFills.size + 2;\n this.mFills.set(backColor, fillId);\n cellXfs.fillId = (fillId);\n }\n }\n else {\n cellXfs.fillId = 0;\n }\n //Add border \n if (!this.isNewBorder(style)) {\n this.mBorders.push(style.borders);\n cellXfs.borderId = this.mBorders.length;\n }\n else {\n cellXfs.borderId = 0;\n }\n //Add Number Format \n if (style.numberFormat !== 'GENERAL') {\n if (this.mNumFmt.has(style.numberFormat)) {\n var numFmt = this.mNumFmt.get(style.numberFormat);\n cellXfs.numFmtId = numFmt.numFmtId;\n }\n else {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n cellXfs.numFmtId = id;\n }\n }\n else {\n if (style.numberFormat === 'GENERAL' && style.numFmtId === 14) {\n cellXfs.numFmtId = 14;\n }\n else {\n cellXfs.numFmtId = 0;\n }\n }\n //Add alignment \n if (!style.isGlobalStyle) {\n cellXfs.applyAlignment = 1;\n }\n cellXfs.alignment = new Alignment();\n cellXfs.alignment.indent = style.indent;\n cellXfs.alignment.horizontal = style.hAlign;\n cellXfs.alignment.vertical = style.vAlign;\n cellXfs.alignment.wrapText = style.wrapText ? 1 : 0;\n if (style.isGlobalStyle) {\n this.mCellStyleXfs.push(cellXfs);\n this.mCellXfs.push(cellXfs);\n }\n else {\n //Add cellxfs\n this.mCellXfs.push(cellXfs);\n }\n }\n };\n Workbook.prototype.saveNumberFormats = function () {\n if (this.mNumFmt.size >= 1) {\n var numFmtStyle_1 = '';\n this.mNumFmt.forEach(function (value, key) {\n numFmtStyle_1 += '';\n });\n return (numFmtStyle_1 += '');\n }\n else {\n return '';\n }\n };\n Workbook.prototype.saveFonts = function () {\n /* tslint:disable-next-line:max-line-length */\n var fontStyle = '';\n if (this.mFonts.length >= 1) {\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n fontStyle += '';\n if (font.b) {\n fontStyle += '';\n }\n if (font.i) {\n fontStyle += '';\n }\n if (font.u) {\n fontStyle += '';\n }\n fontStyle += '';\n fontStyle += '';\n fontStyle += '';\n }\n }\n return fontStyle + '';\n };\n Workbook.prototype.saveFills = function () {\n /* tslint:disable-next-line:max-line-length */\n var fillsStyle = '';\n if (this.mFills.size >= 1) {\n this.mFills.forEach(function (value, key) {\n /* tslint:disable-next-line:max-line-length */\n fillsStyle += '';\n });\n }\n return fillsStyle + '';\n };\n Workbook.prototype.saveBorders = function () {\n /* tslint:disable-next-line:max-line-length */\n var bordersStyle = '';\n if (this.mBorders.length >= 1) {\n for (var _i = 0, _a = this.mBorders; _i < _a.length; _i++) {\n var borders = _a[_i];\n if (this.isAllBorder(borders)) {\n var color = borders.all.color.replace('#', '');\n var lineStyle = borders.all.lineStyle;\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n }\n }\n return bordersStyle + '';\n };\n Workbook.prototype.saveCellStyles = function () {\n var _this = this;\n var cellStyleString = '';\n this.cellStyles.forEach(function (value, key) {\n cellStyleString += '';\n if (this.mCellStyleXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n else {\n cellXfsStyle += ' />';\n }\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveCellXfs = function () {\n /* tslint:disable-next-line:max-line-length */\n var cellXfsStyle = '';\n if (this.mCellXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n var cellXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveAlignment = function (cellXf) {\n var alignString = '';\n return alignString;\n };\n Workbook.prototype.saveApp = function (builtInProperties) {\n /* tslint:disable-next-line:max-line-length */\n var appString = 'Essential XlsIO';\n if (builtInProperties !== undefined) {\n if (builtInProperties.manager !== undefined) {\n appString += '' + builtInProperties.manager + '';\n }\n if (builtInProperties.company !== undefined) {\n appString += '' + builtInProperties.company + '';\n }\n }\n this.addToArchive((appString + ''), 'docProps/app.xml');\n };\n Workbook.prototype.saveCore = function (builtInProperties) {\n var createdDate = new Date();\n /* tslint:disable-next-line:max-line-length */\n var coreString = '';\n if (this.builtInProperties !== undefined) {\n if (builtInProperties.author !== undefined) {\n coreString += '' + builtInProperties.author + '';\n }\n if (builtInProperties.subject !== undefined) {\n coreString += '' + builtInProperties.subject + '';\n }\n if (builtInProperties.category !== undefined) {\n coreString += '' + builtInProperties.category + '';\n }\n if (builtInProperties.comments !== undefined) {\n coreString += '' + builtInProperties.comments + '';\n }\n if (builtInProperties.title !== undefined) {\n coreString += '' + builtInProperties.title + '';\n }\n if (builtInProperties.tags !== undefined) {\n coreString += '' + builtInProperties.tags + '';\n }\n if (builtInProperties.status !== undefined) {\n coreString += '' + builtInProperties.status + '';\n }\n if (builtInProperties.createdDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.createdDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n if (builtInProperties.modifiedDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.modifiedDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n coreString += '' + createdDate.toISOString() + '';\n }\n /* tslint:disable-next-line:max-line-length */\n coreString += '';\n this.addToArchive(coreString, 'docProps/core.xml');\n };\n Workbook.prototype.saveTopLevelRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var topRelation = '';\n this.addToArchive(topRelation, '_rels/.rels');\n };\n Workbook.prototype.saveWorkbookRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var wbRelation = '';\n var length = this.worksheets.length;\n var count = 0;\n for (var i = 0; i < length; i++, count++) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n this.addToArchive((wbRelation + ''), 'xl/_rels/workbook.xml.rels');\n };\n Workbook.prototype.saveContentType = function () {\n /* tslint:disable-next-line:max-line-length */\n var contentTypeString = '';\n var sheetsOverride = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n }\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n contentTypeString += '';\n }\n this.addToArchive((contentTypeString + sheetsOverride + ''), '[Content_Types].xml');\n };\n Workbook.prototype.addToArchive = function (xmlString, itemName) {\n if (typeof (xmlString) === 'string') {\n var blob = new Blob([xmlString], { type: 'text/plain' });\n var archiveItem = new ZipArchiveItem(blob, itemName);\n this.mArchive.addItem(archiveItem);\n }\n else {\n var archiveItem = new ZipArchiveItem(xmlString, itemName);\n this.mArchive.addItem(archiveItem);\n }\n };\n Workbook.prototype.processMergeCells = function (cell, rowIndex, mergeCells) {\n if (cell.rowSpan !== 0 || cell.colSpan !== 0) {\n var mCell = new MergeCell();\n mCell.x = cell.index;\n mCell.width = cell.colSpan;\n mCell.y = rowIndex;\n mCell.height = cell.rowSpan;\n var startCell = this.getCellName(mCell.y, mCell.x);\n var endCell = this.getCellName(rowIndex + mCell.height, cell.index + mCell.width);\n mCell.ref = startCell + ':' + endCell;\n var mergedCell = mergeCells.add(mCell);\n var start = { x: mCell.x, y: mCell.y };\n var end = {\n x: (cell.index + mCell.width), y: (rowIndex + mCell.height)\n };\n this.updatedMergedCellStyles(start, end, cell);\n }\n return mergeCells;\n };\n Workbook.prototype.updatedMergedCellStyles = function (sCell, eCell, cell) {\n for (var x = sCell.x; x <= eCell.x; x++) {\n for (var y = sCell.y; y <= eCell.y; y++) {\n this.mergedCellsStyle.set(this.getCellName(y, x), { x: x, y: y, styleIndex: cell.styleIndex });\n }\n }\n };\n /**\n * Returns the tick count corresponding to the given year, month, and day.\n * @param year number value of year\n * @param month number value of month\n * @param day number value of day\n */\n Workbook.prototype.dateToTicks = function (year, month, day) {\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysToMonth365 = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n var daysToMonth366 = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366];\n if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {\n var days = this.isLeapYear(year) ? daysToMonth366 : daysToMonth365;\n var y = year - 1;\n var n = y * 365 + ((y / 4) | 0) - ((y / 100) | 0) + ((y / 400) | 0) + days[month - 1] + day - 1;\n return n * ticksPerDay;\n }\n throw new Error('Not a valid date');\n };\n /**\n * Return the tick count corresponding to the given hour, minute, second.\n * @param hour number value of hour\n * @param minute number value if minute\n * @param second number value of second\n */\n Workbook.prototype.timeToTicks = function (hour, minute, second) {\n if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60) {\n var totalSeconds = hour * 3600 + minute * 60 + second;\n return totalSeconds * 10000 * 1000;\n }\n throw new Error('Not valid time');\n };\n /**\n * Checks if given year is a leap year.\n * @param year Year value.\n */\n Workbook.prototype.isLeapYear = function (year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n };\n /**\n * Converts `DateTime` to the equivalent OLE Automation date.\n */\n Workbook.prototype.toOADate = function (date) {\n var ticks = 0;\n /* tslint:disable-next-line:max-line-length */\n ticks = this.dateToTicks(date.getFullYear(), (date.getMonth() + 1), date.getDate()) + this.timeToTicks(date.getHours(), date.getMinutes(), date.getSeconds());\n if (ticks === 0) {\n return 0.0;\n }\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysTo1899 = (((365 * 4 + 1) * 25 - 1) * 4 + 1) * 4 + ((365 * 4 + 1) * 25 - 1) * 3 - 367;\n var doubleDateOffset = daysTo1899 * ticksPerDay;\n var oaDateMinAsTicks = (((365 * 4 + 1) * 25 - 1) - 365) * ticksPerDay;\n if (ticks < oaDateMinAsTicks) {\n throw new Error('Arg_OleAutDateInvalid');\n }\n var millisPerDay = 1000 * 60 * 60 * 24;\n return ((ticks - doubleDateOffset) / 10000) / millisPerDay;\n };\n return Workbook;\n}());\nexport { Workbook };\n/**\n * BuiltInProperties Class\n * @private\n */\nvar BuiltInProperties = /** @class */ (function () {\n function BuiltInProperties() {\n }\n return BuiltInProperties;\n}());\nexport { BuiltInProperties };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization, setCulture } from '@syncfusion/ej2-base';\n/**\n * ValueFormatter class to globalize the value.\n * @hidden\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n if (!isNullOrUndefined(cultureName)) {\n this.intl.culture = cultureName;\n }\n }\n ValueFormatter.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n ValueFormatter.prototype.getParserFunction = function (format) {\n if (format.type) {\n return this.intl.getDateParser(format);\n }\n else {\n return this.intl.getNumberParser(format);\n }\n };\n ValueFormatter.prototype.fromView = function (value, format, type) {\n if ((type === 'date' || type === 'datetime' || type === 'number') && (!isNullOrUndefined(format))) {\n return format(value);\n }\n else {\n return value;\n }\n };\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n ValueFormatter.prototype.setCulture = function (cultureName) {\n if (!isNullOrUndefined(cultureName)) {\n setCulture(cultureName);\n }\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { merge, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getUid, templateCompiler, getForeignData, getObject } from '../base/util';\n/**\n * Represents Grid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n var _this = this;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n * @default true\n */\n this.allowResizing = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowGrouping` set to false, then it disables grouping of a particular column.\n * By default all columns are groupable.\n * @default true\n */\n this.allowGrouping = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `enableGroupByFormat` set to true, then it groups the particular column by formatted values.\n * @default true\n */\n this.enableGroupByFormat = false;\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n * @default true\n */\n this.allowEditing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu or checkbox.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n * {% codeBlock src=\"grid/filter-menu-api/index.ts\" %}{% endcodeBlock %}\n *\n * > Check the [`Filter UI`](./filtering.html#custom-component-in-filter-menu) for its customization.\n * @default null\n */\n this.filter = {};\n /**\n * If `showInColumnChooser` set to false, then hide the particular column in column chooser.\n * By default all columns are displayed in column Chooser.\n * @default true\n */\n this.showInColumnChooser = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n * @default {}\n */\n this.edit = {};\n this.sortDirection = 'Descending';\n /** @hidden */\n this.getEditTemplate = function () { return _this.editTemplateFn; };\n /** @hidden */\n this.getFilterTemplate = function () { return _this.filterTemplateFn; };\n merge(this, options);\n this.uid = getUid('grid-column');\n var valueFormatter = new ValueFormatter();\n if (options.format && (options.format.skeleton || options.format.format)) {\n this.setFormatter(valueFormatter.getFormatFunction(options.format));\n this.setParser(valueFormatter.getParserFunction(options.format));\n }\n 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.editTemplate) {\n this.editTemplateFn = templateCompiler(this.editTemplate);\n }\n if (this.filterTemplate) {\n this.filterTemplateFn = templateCompiler(this.filterTemplate);\n }\n if (this.isForeignColumn() && (isNullOrUndefined(this.editType) || this.editType === 'dropdownedit')) {\n this.editType = 'dropdownedit';\n this.edit.params = extend({\n dataSource: this.dataSource,\n query: new Query(), fields: { value: this.foreignKeyField || this.field, text: this.foreignKeyValue }\n }, this.edit.params);\n }\n if (this.sortComparer) {\n var a_1 = this.sortComparer;\n this.sortComparer = function comparer(x, y) {\n if (typeof a_1 === 'string') {\n a_1 = getObject(a_1, window);\n }\n if (this.sortDirection === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return a_1(x, y);\n };\n }\n if (!this.sortComparer && this.isForeignColumn()) {\n this.sortComparer = function (x, y) {\n x = getObject(_this.foreignKeyValue, getForeignData(_this, {}, x)[0]);\n y = getObject(_this.foreignKeyValue, getForeignData(_this, {}, y)[0]);\n return _this.sortDirection === 'Descending' ? DataUtil.fnDescending(x, y) : DataUtil.fnAscending(x, y);\n };\n }\n }\n /** @hidden */\n Column.prototype.getSortDirection = function () {\n return this.sortDirection;\n };\n /** @hidden */\n Column.prototype.setSortDirection = function (direction) {\n this.sortDirection = direction;\n };\n /** @hidden */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n }\n };\n /**\n * @hidden\n * It defines the column is foreign key column or not.\n */\n Column.prototype.isForeignColumn = function () {\n return !!(this.dataSource && this.foreignKeyValue);\n };\n /** @hidden */\n Column.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /** @hidden */\n Column.prototype.setFormatter = function (value) {\n this.formatFn = value;\n };\n /** @hidden */\n Column.prototype.getParser = function () {\n return this.parserFn;\n };\n /** @hidden */\n Column.prototype.setParser = function (value) {\n this.parserFn = value;\n };\n /** @hidden */\n Column.prototype.getColumnTemplate = function () {\n return this.templateFn;\n };\n /** @hidden */\n Column.prototype.getHeaderTemplate = function () {\n return this.headerTemplateFn;\n };\n /** @hidden */\n Column.prototype.getFilterItemTemplate = function () {\n return this.fltrTemplateFn;\n };\n /** @hidden */\n Column.prototype.getDomSetter = function () {\n return this.disableHtmlEncode ? 'textContent' : 'innerHTML';\n };\n return Column;\n}());\nexport { Column };\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var headerCellInfo = 'headerCellInfo';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var cellSelecting = 'cellSelecting';\n/** @hidden */\nexport var cellSelected = 'cellSelected';\n/** @hidden */\nexport var cellDeselecting = 'cellDeselecting';\n/** @hidden */\nexport var cellDeselected = 'cellDeselected';\n/** @hidden */\nexport var columnDragStart = 'columnDragStart';\n/** @hidden */\nexport var columnDrag = 'columnDrag';\n/** @hidden */\nexport var columnDrop = 'columnDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var beforePrint = 'beforePrint';\n/** @hidden */\nexport var printComplete = 'printComplete';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var endAdd = 'endAdd';\n/** @hidden */\nexport var endDelete = 'endDelete';\n/** @hidden */\nexport var endEdit = 'endEdit';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var recordClick = 'recordClick';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var beforeOpenColumnChooser = 'beforeOpenColumnChooser';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var onResize = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var checkBoxChange = 'checkBoxChange';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var filterChoiceRequest = 'filterchoicerequest';\n/** @hidden */\nexport var filterAfterOpen = 'filterafteropen';\n/** @hidden */\nexport var filterBeforeOpen = 'filterbeforeopen';\n/** @hidden */\nexport var filterSearchBegin = 'filtersearchbegin';\n/**\n * Specifies grid internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var onEmpty = 'on-empty';\n/** @hidden */\nexport var inBoundModelChanged = 'inbound-model-changed';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var colGroupRefresh = 'colgroup-refresh';\n/** @hidden */\nexport var headerRefreshed = 'header-refreshed';\n/** @hidden */\nexport var pageBegin = 'paging-begin';\n/** @hidden */\nexport var pageComplete = 'paging-complete';\n/** @hidden */\nexport var sortBegin = 'sorting-begin';\n/** @hidden */\nexport var sortComplete = 'sorting-complete';\n/** @hidden */\nexport var filterBegin = 'filtering-begin';\n/** @hidden */\nexport var filterComplete = 'filtering-complete';\n/** @hidden */\nexport var searchBegin = 'searching-begin';\n/** @hidden */\nexport var searchComplete = 'searching-complete';\n/** @hidden */\nexport var reorderBegin = 'reorder-begin';\n/** @hidden */\nexport var reorderComplete = 'reorder-complete';\n/** @hidden */\nexport var rowDragAndDropBegin = 'rowdraganddrop-begin';\n/** @hidden */\nexport var rowDragAndDropComplete = 'rowdraganddrop-complete';\n/** @hidden */\nexport var groupBegin = 'grouping-begin';\n/** @hidden */\nexport var groupComplete = 'grouping-complete';\n/** @hidden */\nexport var ungroupBegin = 'ungrouping-begin';\n/** @hidden */\nexport var ungroupComplete = 'ungrouping-complete';\n/** @hidden */\nexport var groupAggregates = 'group-aggregates';\n/** @hidden */\nexport var refreshFooterRenderer = 'refresh-footer-rendered';\n/** @hidden */\nexport var refreshAggregateCell = 'refresh-aggregate-cell';\n/** @hidden */\nexport var refreshAggregates = 'refresh-aggregates';\n/** @hidden */\nexport var rowSelectionBegin = 'rowselecting';\n/** @hidden */\nexport var rowSelectionComplete = 'rowselected';\n/** @hidden */\nexport var columnSelectionBegin = 'columnselecting';\n/** @hidden */\nexport var columnSelectionComplete = 'columnselected';\n/** @hidden */\nexport var cellSelectionBegin = 'cellselecting';\n/** @hidden */\nexport var cellSelectionComplete = 'cellselected';\n/** @hidden */\nexport var beforeCellFocused = 'beforecellfocused';\n/** @hidden */\nexport var cellFocused = 'cellfocused';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var click = 'click';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var columnVisibilityChanged = 'column-visible-changed';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var columnWidthChanged = 'column-width-changed';\n/** @hidden */\nexport var columnPositionChanged = 'column-position-changed';\n/** @hidden */\nexport var rowDragAndDrop = 'row-drag-and-drop';\n/** @hidden */\nexport var rowsAdded = 'rows-added';\n/** @hidden */\nexport var rowsRemoved = 'rows-removed';\n/** @hidden */\nexport var columnDragStop = 'column-drag-stop';\n/** @hidden */\nexport var headerDrop = 'header-drop';\n/** @hidden */\nexport var dataSourceModified = 'datasource-modified';\n/** @hidden */\nexport var refreshComplete = 'refresh-complete';\n/** @hidden */\nexport var refreshVirtualBlock = 'refresh-virtual-block';\n/** @hidden */\nexport var dblclick = 'dblclick';\n/** @hidden */\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\nexport var bulkSave = 'bulk-save';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var tooltipDestroy = 'tooltip-destroy';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var editBegin = 'edit-begin';\n/** @hidden */\nexport var editComplete = 'edit-complete';\n/** @hidden */\nexport var addBegin = 'add-begin';\n/** @hidden */\nexport var addComplete = 'add-complete';\n/** @hidden */\nexport var saveComplete = 'save-complete';\n/** @hidden */\nexport var deleteBegin = 'delete-begin';\n/** @hidden */\nexport var deleteComplete = 'delete-complete';\n/** @hidden */\nexport var preventBatch = 'prevent-batch';\n/** @hidden */\nexport var dialogDestroy = 'dialog-destroy';\n/** @hidden */\nexport var crudAction = 'crud-Action';\n/** @hidden */\nexport var addDeleteAction = 'add-delete-Action';\n/** @hidden */\nexport var destroyForm = 'destroy-form';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var excelExportComplete = 'excelExportComplete';\n/** @hidden */\nexport var excelQueryCellInfo = 'excelQueryCellInfo';\n/** @hidden */\nexport var excelHeaderQueryCellInfo = 'excelHeaderQueryCellInfo';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var pdfExportComplete = 'pdfExportComplete';\n/** @hidden */\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\n/** @hidden */\nexport var pdfHeaderQueryCellInfo = 'pdfHeaderQueryCellInfo';\n/** @hidden */\nexport var accessPredicate = 'access-predicate';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var freezeRender = 'freezerender';\n/** @hidden */\nexport var freezeRefresh = 'freezerefresh';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var columnMenuClick = 'columnMenuClick';\n/** @hidden */\nexport var columnMenuOpen = 'columnMenuOpen';\n/** @hidden */\nexport var filterOpen = 'filterOpen';\n/** @hidden */\nexport var filterDialogCreated = 'filterDialogCreated';\n/** @hidden */\nexport var filterMenuClose = 'filter-menu-close';\n/** @hidden */\nexport var initForeignKeyColumn = 'initForeignKeyColumn';\n/** @hidden */\nexport var getForeignKeyData = 'getForeignKeyData';\n/** @hidden */\nexport var generateQuery = 'generateQuery';\n/** @hidden */\nexport var showEmptyGrid = 'showEmptyGrid';\n/** @hidden */\nexport var foreignKeyData = 'foreignKeyData';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var dataSourceChanged = 'dataSourceChanged';\n/** @hidden */\nexport var rtlUpdated = 'rtl-updated';\n/** @hidden */\nexport var beforeFragAppend = 'beforeFragAppend';\n/** @hidden */\nexport var frozenHeight = 'frozenHeight';\n/** @hidden */\nexport var recordAdded = 'recordAdded';\n/** @hidden */\nexport var cancelBegin = 'cancel-Begin';\n/** @hidden */\nexport var editNextValCell = 'editNextValCell';\n","/* tslint:disable-next-line:max-line-length */\nimport { EventHandler, isNullOrUndefined, extend, classList, addClass, removeClass, Browser, getValue, setValue } from '@syncfusion/ej2-base';\nimport { parentsUntil, getUid, isActionPrevent, appendChildren, getDatePredicate } from '../base/util';\nimport { remove, debounce } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate, UrlAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getForeignData } from '../base/util';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { getFilterMenuPostion, toogleCheckbox, createCboxWithWrap, removeAddCboxClasses, getColumnByForeignKeyValue } from '../base/util';\n/**\n * @hidden\n * `CheckBoxFilter` module is used to handle filtering action.\n */\nvar CheckBoxFilter = /** @class */ (function () {\n /**\n * Constructor for checkbox filtering module\n * @hidden\n */\n function CheckBoxFilter(parent, filterSettings, serviceLocator) {\n this.existingPredicate = {};\n this.filterState = true;\n this.values = {};\n this.parent = parent;\n this.id = this.parent.element.id;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n this.valueFormatter = new ValueFormatter(this.parent.locale);\n this.cBoxTrue = createCheckBox(this.parent.createElement, false, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(this.parent.createElement, false, { checked: false, label: ' ' });\n this.cBoxTrue.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden', attrs: { 'type': 'checkbox' }\n }), this.cBoxFalse.firstChild);\n this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n if (this.parent.enableRtl) {\n addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n }\n }\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n CheckBoxFilter.prototype.destroy = function () {\n this.closeDialog();\n };\n CheckBoxFilter.prototype.wireEvents = function () {\n EventHandler.add(this.dlg, 'click', this.clickHandler, this);\n this.searchHandler = debounce(this.searchBoxKeyUp, 200);\n EventHandler.add(this.dlg.querySelector('.e-searchinput'), 'keyup', this.searchHandler, this);\n };\n CheckBoxFilter.prototype.unWireEvents = function () {\n EventHandler.remove(this.dlg, 'click', this.clickHandler);\n var elem = this.dlg.querySelector('.e-searchinput');\n if (elem) {\n EventHandler.remove(elem, 'keyup', this.searchHandler);\n }\n };\n CheckBoxFilter.prototype.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 = this.parent.createElement('div', {\n id: this.id + this.options.type + '_excelDlg',\n className: 'e-checkboxfilter e-filter-popup'\n });\n this.sBox = this.parent.createElement('div', { className: 'e-searchcontainer' });\n if (!options.hideSearchbox) {\n this.sInput = this.parent.createElement('input', {\n id: this.id + '_SearchBox',\n className: 'e-searchinput'\n });\n this.sIcon = this.parent.createElement('span', {\n className: 'e-searchclear e-search-icon e-icons e-input-group-icon', attrs: {\n type: 'text', title: this.getLocalizedLabel('Search')\n }\n });\n this.searchBox = this.parent.createElement('span', { className: 'e-searchbox e-fields' });\n this.searchBox.appendChild(this.sInput);\n this.sBox.appendChild(this.searchBox);\n var inputargs = {\n element: this.sInput, floatLabelType: 'Never', properties: {\n placeholder: this.getLocalizedLabel('Search')\n }\n };\n Input.createInput(inputargs, this.parent.createElement);\n this.searchBox.querySelector('.e-input-group').appendChild(this.sIcon);\n }\n this.spinner = this.parent.createElement('div', { className: 'e-spinner' }); //for spinner\n this.cBox = this.parent.createElement('div', {\n id: this.id + this.options.type + '_CheckBoxList',\n className: 'e-checkboxlist e-fields'\n });\n this.spinner.appendChild(this.cBox);\n this.sBox.appendChild(this.spinner);\n return this.sBox;\n };\n CheckBoxFilter.prototype.showDialog = function (options) {\n var args = {\n requestType: events.filterBeforeOpen, filterModel: this,\n columnName: this.options.field, columnType: this.options.type, cancel: false\n };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n this.dialogObj = new Dialog({\n visible: false, content: this.sBox,\n close: this.closeDialog.bind(this),\n width: (!isNullOrUndefined(parentsUntil(options.target, 'e-bigger')))\n || this.parent.element.classList.contains('e-device') ? 260 : 255,\n target: this.parent.element, animationSettings: { effect: 'None' },\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: {\n content: this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton'),\n cssClass: 'e-primary', isPrimary: true\n }\n },\n {\n click: this.btnClick.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.getLocalizedLabel(this.isExcel ? 'CancelButton' : 'ClearButton') }\n }],\n created: this.dialogCreated.bind(this),\n open: this.dialogOpen.bind(this)\n });\n this.dialogObj.appendTo(this.dlg);\n this.dialogObj.element.style.maxHeight = '800px';\n this.dialogObj.show();\n this.wireEvents();\n createSpinner({ target: this.spinner }, this.parent.createElement);\n showSpinner(this.spinner);\n this.getAllData();\n };\n CheckBoxFilter.prototype.dialogCreated = function (e) {\n if (!Browser.isDevice) {\n getFilterMenuPostion(this.options.target, this.dialogObj, this.parent);\n }\n else {\n this.dialogObj.position = { X: 'center', Y: 'center' };\n }\n this.parent.notify(events.filterDialogCreated, e);\n };\n CheckBoxFilter.prototype.openDialog = function (options) {\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n };\n CheckBoxFilter.prototype.closeDialog = function () {\n if (this.dialogObj && !this.dialogObj.isDestroyed) {\n var filterTemplateCol = this.parent.getColumns().filter(function (col) { return col.getFilterItemTemplate(); });\n if (filterTemplateCol.length) {\n this.parent.destroyTemplate(['filterItemTemplate']);\n }\n this.parent.notify(events.filterMenuClose, { field: this.options.field });\n this.dialogObj.destroy();\n this.unWireEvents();\n remove(this.dlg);\n this.dlg = null;\n }\n };\n CheckBoxFilter.prototype.clearFilter = function () {\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFilter });\n return;\n }\n this.options.handler({ action: 'clear-filter', field: this.options.field });\n };\n CheckBoxFilter.prototype.btnClick = function (e) {\n if (this.filterState) {\n if (e.target.tagName.toLowerCase() === 'input') {\n var 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, type: this.options.type, matchCase: caseSen, ignoreAccent: this.parent.filterSettings.ignoreAccent\n };\n var isNotEqual = this.itemsCnt !== checked.length && this.itemsCnt - checked.length < checked.length;\n if (isNotEqual) {\n optr = 'notequal';\n checked = [].slice.call(this.cBox.querySelectorAll('.e-uncheck:not(.e-selectall)'));\n defaults.predicate = 'and';\n defaults.operator = 'notequal';\n }\n var value;\n var fObj;\n var coll = [];\n var searchInput = this.searchBox.querySelector('.e-searchinput');\n if (checked.length !== this.itemsCnt || (searchInput.value && searchInput.value !== '')) {\n for (var i = 0; i < checked.length; i++) {\n value = this.values[parentsUntil(checked[i], 'e-ftrchk').getAttribute('uid')];\n fObj = extend({}, { value: value }, defaults);\n if (value && !value.toString().length) {\n fObj.operator = isNotEqual ? 'notequal' : 'equal';\n }\n coll.push(fObj);\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, {\n instance: this, handler: this.fltrBtnHandler, arg1: fObj.field, arg2: fObj.predicate, arg3: fObj.operator,\n arg4: fObj.matchCase, arg5: fObj.ignoreAccent, arg6: fObj.value\n });\n return;\n }\n }\n this.initiateFilter(coll);\n }\n else {\n this.clearFilter();\n }\n };\n CheckBoxFilter.prototype.initiateFilter = function (fColl) {\n var firstVal = fColl[0];\n var predicate;\n if (!isNullOrUndefined(firstVal)) {\n predicate = firstVal.ejpredicate ? firstVal.ejpredicate :\n new Predicate(firstVal.field, firstVal.operator, firstVal.value, !firstVal.matchCase, firstVal.ignoreAccent);\n for (var j = 1; j < fColl.length; j++) {\n predicate = fColl[j].ejpredicate !== undefined ?\n predicate[fColl[j].predicate](fColl[j].ejpredicate) :\n predicate[fColl[j].predicate](fColl[j].field, fColl[j].operator, fColl[j].value, !fColl[j].matchCase, fColl[j].ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: Predicate.or(predicate)\n };\n this.options.handler(args);\n }\n };\n CheckBoxFilter.prototype.refreshCheckboxes = function () {\n var 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.parent.getDataModule().isRemote() ?\n (this.options.type === 'string' ? 'contains' : 'equal') : (this.options.type ? 'startswith' : 'contains');\n var matchCase = true;\n var ignoreAccent = this.parent.filterSettings.ignoreAccent;\n 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 parsed = parsed === 'true';\n operator = 'equal';\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 var filterObj = {\n field: this.options.field, operator: operator, value: parsed, matchCase: matchCase,\n ignoreAccent: ignoreAccent\n };\n predicte = getDatePredicate(filterObj, this.options.type);\n }\n if (val.length) {\n query.where(predicte);\n }\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n query.take(args.filterChoiceCount);\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.filterEvent(args, query);\n }\n else {\n this.processSearch(query);\n }\n };\n CheckBoxFilter.prototype.getPredicateFromCols = function (columns) {\n var 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 if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.filterEvent(args, query);\n }\n else {\n this.processDataOperation(query);\n }\n };\n CheckBoxFilter.prototype.filterEvent = function (args, query) {\n var _this = this;\n var def = this.eventPromise(args, query);\n def.promise.then(function (e) {\n _this.dataSuccess(e);\n });\n };\n CheckBoxFilter.prototype.eventPromise = function (args, query) {\n var state;\n state = this.getStateEventArgument(query);\n var def = new Deferred();\n state.dataSource = def.resolve;\n state.action = args;\n this.parent.trigger(events.dataStateChange, state);\n return def;\n };\n ;\n CheckBoxFilter.prototype.getStateEventArgument = function (query) {\n var adaptr = new UrlAdaptor();\n var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n var state = adaptr.processQuery(dm, query);\n var data = JSON.parse(state.data);\n return data;\n };\n ;\n CheckBoxFilter.prototype.processDataOperation = function (query) {\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.sInput.focus();\n var args = {\n requestType: events.filterAfterOpen,\n filterModel: this, columnName: this.options.field, columnType: this.options.type\n };\n this.parent.trigger(events.actionComplete, args);\n };\n CheckBoxFilter.prototype.processDataSource = function (query, isInitial, dataSource) {\n showSpinner(this.spinner);\n // query = query ? query : this.options.query.clone();\n // query.requiresCount();\n // let result: Object = new DataManager(dataSource as JSON[]).executeLocal(query);\n // let res: { result: Object[] } = result as { result: Object[] };\n this.updateResult();\n this.createFilterItems(dataSource, isInitial);\n };\n CheckBoxFilter.prototype.processSearch = function (query) {\n this.processDataOperation(query);\n };\n CheckBoxFilter.prototype.updateResult = function () {\n this.result = {};\n var predicate = this.getPredicateFromCols(this.options.filteredColumns);\n var query = new Query();\n if (predicate) {\n query.where(predicate);\n }\n var result = new DataManager(this.fullData).executeLocal(query);\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n this.result[getValue(this.options.field, res)] = true;\n }\n };\n CheckBoxFilter.prototype.clickHandler = function (e) {\n var target = e.target;\n var elem = parentsUntil(target, 'e-checkbox-wrapper');\n if (parentsUntil(target, 'e-searchbox')) {\n this.searchBoxClick(e);\n }\n if (elem) {\n var selectAll = elem.querySelector('.e-selectall');\n if (selectAll) {\n this.updateAllCBoxes(!selectAll.classList.contains('e-check'));\n }\n else {\n toogleCheckbox(elem.parentElement);\n }\n this.updateIndeterminatenBtn();\n elem.querySelector('.e-chk-hidden').focus();\n }\n };\n CheckBoxFilter.prototype.updateAllCBoxes = function (checked) {\n var cBoxes = [].slice.call(this.cBox.querySelectorAll('.e-frame'));\n for (var _i = 0, cBoxes_1 = cBoxes; _i < cBoxes_1.length; _i++) {\n var cBox = cBoxes_1[_i];\n removeAddCboxClasses(cBox, checked);\n }\n };\n CheckBoxFilter.prototype.dialogOpen = function () {\n if (this.parent.element.classList.contains('e-device')) {\n this.dialogObj.element.querySelector('.e-input-group').classList.remove('e-input-focus');\n this.dialogObj.element.querySelector('.e-btn').focus();\n }\n };\n CheckBoxFilter.prototype.createCheckbox = function (value, checked, data) {\n var elem = checked ? this.cBoxTrue.cloneNode(true) :\n this.cBoxFalse.cloneNode(true);\n var label = elem.querySelector('.e-label');\n label.innerHTML = !isNullOrUndefined(value) && value.toString().length ? value :\n this.getLocalizedLabel('Blanks');\n addClass([label], ['e-checkboxfiltertext']);\n if (this.options.template) {\n label.innerHTML = '';\n appendChildren(label, this.options.template(data, this.parent, 'filterItemTemplate'));\n }\n return elem;\n };\n CheckBoxFilter.prototype.updateIndeterminatenBtn = function () {\n var cnt = this.cBox.children.length - 1;\n var className = [];\n var elem = this.cBox.querySelector('.e-selectall');\n var selected = this.cBox.querySelectorAll('.e-check:not(.e-selectall)').length;\n var btn = this.dialogObj.btnObj[0];\n btn.disabled = false;\n if (cnt === selected) {\n className = ['e-check'];\n }\n else if (selected) {\n className = ['e-stop'];\n }\n else {\n className = ['e-uncheck'];\n btn.disabled = true;\n }\n this.filterState = !btn.disabled;\n btn.dataBind();\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n addClass([elem], className);\n };\n CheckBoxFilter.prototype.createFilterItems = function (data, isInitial) {\n var cBoxes = this.parent.createElement('div');\n var btn = this.dialogObj.btnObj[0];\n this.itemsCnt = data.length;\n if (data.length) {\n var selectAllValue = this.getLocalizedLabel('SelectAll');\n var checkBox = this.createCheckbox(selectAllValue, false, (_a = {}, _a[this.options.field] = selectAllValue, _a));\n var selectAll = createCboxWithWrap(getUid('cbox'), checkBox, 'e-ftrchk');\n selectAll.querySelector('.e-frame').classList.add('e-selectall');\n cBoxes.appendChild(selectAll);\n var predicate = new Predicate('field', 'equal', this.options.field);\n if (this.options.foreignKeyValue) {\n predicate = predicate.or('field', 'equal', this.options.foreignKeyValue);\n }\n var isColFiltered = new DataManager(this.options.filteredColumns).executeLocal(new Query().where(predicate)).length;\n 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 var checkbox = this.createCheckbox(value, this.getCheckedState(isColFiltered, this.values[uid]), getValue('dataObj', data[i]));\n cBoxes.appendChild(createCboxWithWrap(uid, checkbox, 'e-ftrchk'));\n }\n this.cBox.innerHTML = cBoxes.innerHTML;\n this.updateIndeterminatenBtn();\n btn.disabled = false;\n }\n else {\n cBoxes.appendChild(this.parent.createElement('span', { innerHTML: this.getLocalizedLabel('NoResult') }));\n this.cBox.innerHTML = 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 var _a;\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 if (isForeignKey) {\n var foreignDataObj = getForeignData(column, {}, value, foreignKeyData)[0];\n setValue(events.foreignKeyData, foreignDataObj, json[len]);\n value = getValue(column.foreignKeyValue, foreignDataObj);\n }\n setValue(field, isNullOrUndefined(value) ? null : value, obj);\n setValue('dataObj', json[len], obj);\n result.push(obj);\n }\n }\n }\n return DataUtil.group(DataUtil.sort(result, field, DataUtil.fnAscending), 'ejValue');\n };\n CheckBoxFilter.getPredicate = function (columns) {\n var cols = DataUtil.distinct(columns, 'field', true) || [];\n var collection = [];\n var pred = {};\n for (var i = 0; i < cols.length; i++) {\n collection = new DataManager(columns).executeLocal(new Query().where('field', 'equal', cols[i].field));\n if (collection.length !== 0) {\n pred[cols[i].field] = CheckBoxFilter.generatePredicate(collection);\n }\n }\n return pred;\n };\n CheckBoxFilter.generatePredicate = function (cols) {\n var len = cols ? cols.length : 0;\n var predicate;\n var first;\n first = CheckBoxFilter.updateDateFilter(cols[0]);\n first.ignoreAccent = !isNullOrUndefined(first.ignoreAccent) ? first.ignoreAccent : false;\n if (first.type === 'date' || first.type === 'datetime') {\n predicate = getDatePredicate(first, first.type);\n }\n else {\n predicate = first.ejpredicate ? first.ejpredicate :\n new Predicate(first.field, first.operator, first.value, !CheckBoxFilter.getCaseValue(first), first.ignoreAccent);\n }\n for (var p = 1; p < len; p++) {\n cols[p] = CheckBoxFilter.updateDateFilter(cols[p]);\n if (len > 2 && p > 1 && cols[p].predicate === 'or') {\n if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n predicate.predicates.push(getDatePredicate(cols[p], cols[p].type));\n }\n else {\n predicate.predicates.push(new Predicate(cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilter.getCaseValue(cols[p]), cols[p].ignoreAccent));\n }\n }\n else {\n if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n predicate = predicate[(cols[p].predicate)](getDatePredicate(cols[p]), cols[p].type, cols[p].ignoreAccent);\n }\n else {\n predicate = cols[p].ejpredicate ?\n predicate[cols[p].predicate](cols[p].ejpredicate) :\n predicate[(cols[p].predicate)](cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilter.getCaseValue(cols[p]), cols[p].ignoreAccent);\n }\n }\n }\n return predicate || null;\n };\n CheckBoxFilter.getCaseValue = function (filter) {\n if (isNullOrUndefined(filter.matchCase)) {\n return true;\n }\n else {\n return filter.matchCase;\n }\n };\n CheckBoxFilter.updateDateFilter = function (filter) {\n if ((filter.type === 'date' || filter.type === 'datetime' || filter.value instanceof Date)) {\n filter.type = filter.type || 'date';\n }\n return filter;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n CheckBoxFilter.prototype.getModuleName = function () {\n return 'checkboxFilter';\n };\n return CheckBoxFilter;\n}());\nexport { CheckBoxFilter };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate, Deferred, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { setFormatter, getDatePredicate, getColumnByForeignKeyValue } from '../base/util';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\n/**\n * Grid data module is used to generate query and data source.\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module.\n * @hidden\n */\n function Data(parent, serviceLocator) {\n this.dataState = { isPending: false, resolver: null, group: [] };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.initDataManager();\n if (this.parent.isDestroyed) {\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 if (this.parent.columnQueryMode === 'ExcludeHidden') {\n query.select(this.parent.getColumns().filter(function (column) { return !(column.isPrimaryKey !== true && column.visible === false || column.field === undefined); }).map(function (column) { return column.field; }));\n }\n else if (this.parent.columnQueryMode === 'Schema') {\n var selectQueryFields = [];\n var columns = this.parent.columns;\n for (var i = 0; i < columns.length; i++) {\n selectQueryFields.push(columns[i].field);\n }\n query.select(selectQueryFields);\n }\n this.filterQuery(query);\n this.searchQuery(query);\n this.aggregateQuery(query);\n this.sortQuery(query);\n this.pageQuery(query, skipPage);\n this.groupQuery(query);\n return query;\n };\n Data.prototype.aggregateQuery = function (query, isForeign) {\n this.parent.aggregates.forEach(function (row) {\n row.columns.forEach(function (column) {\n var types = column.type instanceof Array ? column.type : [column.type];\n types.forEach(function (type) { return query.aggregate(type.toLowerCase(), column.field); });\n });\n });\n return query;\n };\n Data.prototype.pageQuery = function (query, skipPage) {\n var gObj = this.parent;\n 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 var needForeignKeySearch = false;\n if (this.parent.searchSettings.key.length) {\n needForeignKeySearch = this.parent.getForeignKeyColumns().some(function (col) { return fields.indexOf(col.field) > -1; });\n if (needForeignKeySearch && !(this.dataManager.adaptor.getModulename &&\n this.dataManager.adaptor.getModulename() === 'ODataV4Adaptor')) {\n fields.forEach(function (columnName) {\n var column = _this.getColumnByField(columnName);\n if (column.isForeignColumn()) {\n predicateList = _this.fGeneratePredicate(column, predicateList);\n }\n else {\n predicateList.push(new Predicate(column.field, sSettings.operator, sSettings.key, sSettings.ignoreCase, sSettings.ignoreAccent));\n }\n });\n query.where(Predicate.or(predicateList));\n }\n else {\n query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, sSettings.ignoreAccent);\n }\n }\n return query;\n };\n Data.prototype.filterQuery = function (query, column, skipFoerign) {\n var gObj = this.parent;\n var predicateList = [];\n var fPredicate = {};\n var actualFilter = [];\n var foreignColumn = this.parent.getForeignKeyColumns();\n if (gObj.allowFiltering && gObj.filterSettings.columns.length) {\n var columns = column ? column : gObj.filterSettings.columns;\n var colType = {};\n for (var _i = 0, _a = gObj.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, sType));\n }\n }\n }\n }\n if (predicateList.length) {\n query.where(Predicate.and(predicateList));\n }\n else {\n this.parent.notify(events.showEmptyGrid, {});\n }\n }\n return query;\n };\n Data.prototype.fGeneratePredicate = function (col, predicateList) {\n var fPredicate = {};\n if (col) {\n this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n if (fPredicate.predicate.predicates.length) {\n predicateList.push(fPredicate.predicate);\n }\n }\n return predicateList;\n };\n /**\n * The function is used to get dataManager promise by executing given Query.\n * @param {Query} query - Defines the query which will execute along with data processing.\n * @return {Promise}\n * @hidden\n */\n Data.prototype.getData = function (args, query) {\n var _this = this;\n if (args === void 0) { args = { requestType: '' }; }\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ?\n args.foreignKeyData : this.parent.getPrimaryKeyFieldNames());\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n var def = this.eventPromise(args, query, key);\n return def.promise;\n }\n else {\n var crud = void 0;\n switch (args.requestType) {\n case 'delete':\n query = query ? query : this.generateQuery();\n var len = Object.keys(args.data).length;\n if (len === 1) {\n crud = this.dataManager.remove(key, args.data[0], query.fromTable, query);\n }\n else {\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n changes.deletedRecords = args.data;\n crud = this.dataManager.saveChanges(changes, key, query.fromTable, query.requiresCount());\n }\n break;\n case 'save':\n query = query ? query : this.generateQuery();\n args.index = isNullOrUndefined(args.index) ? 0 : args.index;\n crud = this.dataManager.insert(args.data, query.fromTable, query, args.index);\n break;\n }\n if (crud && !Array.isArray(crud) && !crud.hasOwnProperty('deletedRecords')) {\n return crud.then(function (result) {\n return _this.insert(query, args);\n });\n }\n else {\n return this.insert(query, args);\n }\n }\n };\n Data.prototype.insert = function (query, args) {\n if (args.requestType === 'save') {\n this.parent.notify(events.recordAdded, args);\n }\n return this.executeQuery(query);\n };\n Data.prototype.executeQuery = function (query) {\n var _this = this;\n if (this.dataManager.ready) {\n var deferred_1 = new Deferred();\n var ready = this.dataManager.ready;\n ready.then(function (e) {\n _this.dataManager.executeQuery(query).then(function (result) {\n deferred_1.resolve(result);\n });\n }).catch(function (e) {\n deferred_1.reject(e);\n });\n return deferred_1.promise;\n }\n else {\n return this.dataManager.executeQuery(query);\n }\n };\n Data.prototype.formatGroupColumn = function (value, field) {\n var gObj = this.parent;\n var serviceLocator = this.serviceLocator;\n var column = this.getColumnByField(field);\n var date = value;\n if (!column.type) {\n column.type = date.getDay ? (date.getHours() > 0 || date.getMinutes() > 0 ||\n date.getSeconds() > 0 || date.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n if (isNullOrUndefined(column.getFormatter())) {\n setFormatter(serviceLocator, column);\n }\n var formatVal = ValueFormatter.prototype.toView(value, column.getFormatter());\n return formatVal;\n };\n Data.prototype.crudActions = function (args) {\n var query = this.generateQuery();\n var promise = null;\n var pr = 'promise';\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ? args.foreignKeyData :\n this.parent.getPrimaryKeyFieldNames());\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.eventPromise(args, query, key);\n }\n switch (args.requestType) {\n case 'save':\n promise = this.dataManager.update(key, args.data, query.fromTable, query, args.previousData);\n break;\n }\n args[pr] = promise;\n this.parent.notify(events.crudAction, args);\n };\n /** @hidden */\n Data.prototype.saveChanges = function (changes, key, original) {\n var query = this.generateQuery().requiresCount();\n if ('result' in this.parent.dataSource) {\n var state = void 0;\n state = this.getStateEventArgument(query);\n var deff = new Deferred();\n var args = {\n requestType: 'batchsave', changes: changes, key: key, query: query,\n endEdit: deff.resolve\n };\n this.setState({ isPending: true, resolver: deff.resolve });\n this.parent.trigger(events.dataSourceChanged, args);\n return deff.promise;\n }\n else {\n var promise = this.dataManager.saveChanges(changes, key, query.fromTable, query, original);\n return promise;\n }\n };\n Data.prototype.getKey = function (keys) {\n if (keys && keys.length) {\n return keys[0];\n }\n return undefined;\n };\n /** @hidden */\n Data.prototype.isRemote = function () {\n return this.dataManager.dataSource.offline !== true && this.dataManager.dataSource.url !== undefined;\n };\n Data.prototype.addRows = function (e) {\n for (var i = e.records.length; i > 0; i--) {\n this.dataManager.dataSource.json.splice(e.toIndex, 0, e.records[i - 1]);\n }\n };\n Data.prototype.removeRows = function (e) {\n var json = this.dataManager.dataSource.json;\n this.dataManager.dataSource.json = json.filter(function (value, index) { return e.records.indexOf(value) === -1; });\n };\n Data.prototype.getColumnByField = function (field) {\n var col;\n return (this.parent.columnModel).some(function (column) {\n col = column;\n return column.field === field;\n }) && col;\n };\n Data.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowsAdded, this.addRows);\n this.parent.off(events.rowsRemoved, this.removeRows);\n this.parent.off(events.dataSourceModified, this.initDataManager);\n this.parent.off(events.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 var data = JSON.parse(state.data);\n return extend(data, state.pvtData);\n };\n Data.prototype.eventPromise = function (args, query, key) {\n var _this = this;\n var state;\n var dataArgs = args;\n state = this.getStateEventArgument(query);\n var def = new Deferred();\n var deff = new Deferred();\n if (args.requestType !== undefined && this.dataState.isDataChanged !== false) {\n state.action = args;\n if (args.requestType === 'save' || args.requestType === 'delete') {\n var editArgs = args;\n editArgs.key = key;\n editArgs.state = state;\n this.setState({ isPending: true, resolver: deff.resolve });\n dataArgs.endEdit = deff.resolve;\n this.parent.trigger(events.dataSourceChanged, editArgs);\n deff.promise.then(function (e) {\n _this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n _this.parent.trigger(events.dataStateChange, state);\n });\n }\n else {\n this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n this.parent.trigger(events.dataStateChange, state);\n }\n }\n else {\n this.setState({});\n def.resolve(this.parent.dataSource);\n }\n return def;\n };\n return Data;\n}());\nexport { Data };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Row\n * @hidden\n */\nvar Row = /** @class */ (function () {\n function Row(options) {\n merge(this, options);\n }\n Row.prototype.clone = function () {\n var row = new Row({});\n merge(row, this);\n row.cells = this.cells.map(function (cell) { return cell.clone(); });\n return row;\n };\n return Row;\n}());\nexport { Row };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Cell\n * @hidden\n */\nvar Cell = /** @class */ (function () {\n function Cell(options) {\n this.isSpanned = false;\n 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, addClass } from '@syncfusion/ej2-base';\nimport { attributes as addAttributes } from '@syncfusion/ej2-base';\nimport { rowDataBound, queryCellInfo } from '../base/constant';\nimport { setStyleAndAttributes, getObject } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { CellMergeRender } from './cell-merge-renderer';\n/**\n * RowRenderer class which responsible for building row content.\n * @hidden\n */\nvar RowRenderer = /** @class */ (function () {\n function RowRenderer(serviceLocator, cellType, parent) {\n this.cellType = cellType;\n this.serviceLocator = serviceLocator;\n this.parent = parent;\n this.element = this.parent.createElement('tr', { attrs: { role: 'row' } });\n }\n /**\n * Function to render the row content based on Column[] and data.\n * @param {Column[]} columns\n * @param {Object} data?\n * @param {{[x:string]:Object}} attributes?\n * @param {string} rowTemplate?\n */\n RowRenderer.prototype.render = function (row, columns, attributes, rowTemplate, cloneNode) {\n return this.refreshRow(row, columns, attributes, rowTemplate, cloneNode);\n };\n /**\n * Function to refresh the row content based on Column[] and data.\n * @param {Column[]} columns\n * @param {Object} data?\n * @param {{[x:string]:Object}} attributes?\n * @param {string} rowTemplate?\n */\n RowRenderer.prototype.refresh = function (row, columns, isChanged, attributes, rowTemplate) {\n if (isChanged) {\n row.data = extend({}, row.changes);\n this.refreshMergeCells(row);\n }\n var node = this.parent.element.querySelector('[data-uid=' + row.uid + ']');\n var tr = this.refreshRow(row, columns, attributes, rowTemplate);\n var cells = [].slice.call(tr.cells);\n node.innerHTML = '';\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n node.appendChild(cell);\n }\n };\n RowRenderer.prototype.refreshRow = function (row, columns, attributes, rowTemplate, cloneNode) {\n var tr = !isNullOrUndefined(cloneNode) ? cloneNode : this.element.cloneNode();\n var rowArgs = { data: row.data };\n var cellArgs = { data: row.data };\n var attrCopy = extend({}, attributes, {});\n var chekBoxEnable = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox' && col.field; })[0];\n var value = false;\n if (chekBoxEnable) {\n value = getObject(chekBoxEnable.field, rowArgs.data);\n }\n if (row.isDataRow) {\n row.isSelected = this.parent.getSelectedRowIndexes().indexOf(row.index) > -1 || value;\n }\n if (row.isDataRow && this.parent.isCheckBoxSelection\n && this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n row.isSelected = true;\n if (this.parent.getSelectedRowIndexes().indexOf(row.index) === -1) {\n this.parent.getSelectedRowIndexes().push(row.index);\n }\n }\n this.buildAttributeFromRow(tr, row);\n addAttributes(tr, attrCopy);\n setStyleAndAttributes(tr, row.attributes);\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n 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 && tr.querySelector('.e-headercell')) {\n tr.style.height = this.parent.rowHeight + 'px';\n }\n if (row.cssClass) {\n tr.classList.add(row.cssClass);\n }\n if (this.parent.element.scrollHeight > this.parent.height && this.parent.aggregates.length) {\n for (var i = 0; i < this.parent.aggregates.length; i++) {\n var property = 'properties';\n var column = 'columns';\n if (this.parent.aggregates[i][property][column][0].footerTemplate) {\n var summarycell = tr.querySelectorAll('.e-summarycell');\n if (summarycell.length) {\n var lastSummaryCell = (summarycell[summarycell.length - 1]);\n addClass([lastSummaryCell], ['e-lastsummarycell']);\n }\n }\n }\n }\n return tr;\n };\n RowRenderer.prototype.refreshMergeCells = function (row) {\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n cell.isSpanned = false;\n }\n return row;\n };\n /**\n * Function to check and add alternative row css class.\n * @param {Element} tr\n * @param {{[x:string]:Object}} attr\n */\n RowRenderer.prototype.buildAttributeFromRow = function (tr, row) {\n var attr = {};\n var prop = { 'rowindex': 'aria-rowindex', 'dataUID': 'data-uid', 'ariaSelected': 'aria-selected' };\n var classes = [];\n if (row.isDataRow) {\n classes.push('e-row');\n }\n if (row.isAltRow) {\n classes.push('e-altrow');\n }\n if (!isNullOrUndefined(row.index)) {\n attr[prop.rowindex] = row.index;\n }\n if (row.rowSpan) {\n attr.rowSpan = row.rowSpan;\n }\n if (row.uid) {\n attr[prop.dataUID] = row.uid;\n }\n if (row.isSelected) {\n attr[prop.ariaSelected] = true;\n }\n if (row.visible === false) {\n classes.push('e-hide');\n }\n attr.class = classes;\n setStyleAndAttributes(tr, attr);\n };\n return RowRenderer;\n}());\nexport { RowRenderer };\n","import { isNullOrUndefined, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Row } from '../models/row';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\nimport { getUid } from '../base/util';\nimport { getForeignData } from '../../grid/base/util';\n/**\n * RowModelGenerator is used to generate grid data rows.\n * @hidden\n */\nvar RowModelGenerator = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n */\n function RowModelGenerator(parent) {\n this.parent = parent;\n }\n RowModelGenerator.prototype.generateRows = function (data, args) {\n var rows = [];\n var startIndex = this.parent.enableVirtualization ? args.startIndex : 0;\n for (var i = 0, len = Object.keys(data).length; i < len; i++, startIndex++) {\n rows[i] = this.generateRow(data[i], startIndex);\n }\n return rows;\n };\n RowModelGenerator.prototype.ensureColumns = function () {\n //TODO: generate dummy column for group, detail here;\n var cols = [];\n if (this.parent.detailTemplate || this.parent.childGrid) {\n cols.push(this.generateCell({}, null, CellType.DetailExpand));\n }\n 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 = oIndex;\n }\n return new Cell(opt);\n };\n RowModelGenerator.prototype.refreshRows = function (input) {\n var _this = this;\n input.forEach(function (row) {\n _this.refreshForeignKeyRow(row);\n row.cells = _this.generateCells(row);\n });\n return input;\n };\n return RowModelGenerator;\n}());\nexport { RowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Row } from '../models/row';\nimport { Column } from '../models/column';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { calculateAggregate, getUid } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\n/**\n * Summary row model generator\n * @hidden\n */\nvar SummaryModelGenerator = /** @class */ (function () {\n /**\n * Constructor for Summary row model generator\n */\n function SummaryModelGenerator(parent) {\n this.parent = parent;\n }\n SummaryModelGenerator.prototype.getData = function () {\n var _this = this;\n var rows = [];\n this.parent.aggregates.slice().forEach(function (row) {\n var columns = row.columns.filter(function (column) {\n return !(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)\n || _this.columnSelector(column);\n });\n if (columns.length) {\n rows.push({ columns: columns });\n }\n });\n return rows;\n };\n SummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.footerTemplate !== undefined;\n };\n SummaryModelGenerator.prototype.getColumns = function (start, end) {\n var columns = [];\n if (this.parent.allowGrouping) {\n this.parent.groupSettings.columns.forEach(function (value) { return columns.push(new Column({})); });\n }\n if (this.parent.detailTemplate || !isNullOrUndefined(this.parent.childGrid)) {\n columns.push(new Column({}));\n }\n columns.push.apply(columns, this.parent.getColumns());\n return isNullOrUndefined(start) ? columns : columns.slice(start, end);\n };\n SummaryModelGenerator.prototype.generateRows = function (input, args, start, end) {\n var _this = this;\n if (this.parent.currentViewData.length === 0) {\n return [];\n }\n var data = this.buildSummaryData(input, args);\n var rows = [];\n this.getData().forEach(function (row, index) {\n rows.push(_this.getGeneratedRow(row, data[index], args ? args.level : undefined, start, end));\n });\n return rows;\n };\n SummaryModelGenerator.prototype.getGeneratedRow = function (summaryRow, data, raw, start, end) {\n var _this = this;\n var tmp = [];\n var indents = this.getIndentByLevel(raw);\n var isDetailGridAlone = !isNullOrUndefined(this.parent.childGrid);\n var indentLength = this.parent.groupSettings.columns.length + (this.parent.detailTemplate ||\n !isNullOrUndefined(this.parent.childGrid) ? 1 : 0);\n this.getColumns(start, end).forEach(function (value, index) { return tmp.push(_this.getGeneratedCell(value, summaryRow, index >= indentLength ? _this.getCellType() : CellType.Indent, indents[index], isDetailGridAlone)); });\n var row = new Row({ data: data, attributes: { class: 'e-summaryrow' } });\n row.cells = tmp;\n row.uid = getUid('grid-row');\n row.visible = tmp.some(function (cell) { return cell.isDataCell && cell.visible; });\n return row;\n };\n SummaryModelGenerator.prototype.getGeneratedCell = function (column, summaryRow, cellType, indent, isDetailGridAlone) {\n //Get the summary column by display\n var sColumn = summaryRow.columns.filter(function (scolumn) { return scolumn.columnName === column.field; })[0];\n var attrs = { 'style': { 'textAlign': column.textAlign } };\n if (indent) {\n attrs.class = indent;\n }\n if (isNullOrUndefined(indent) && isDetailGridAlone) {\n attrs.class = 'e-detailindentcelltop';\n }\n var opt = {\n 'visible': column.visible,\n 'isDataCell': !isNullOrUndefined(sColumn),\n 'isTemplate': sColumn && !isNullOrUndefined(sColumn.footerTemplate\n || sColumn.groupFooterTemplate || sColumn.groupCaptionTemplate),\n 'column': sColumn || {},\n 'attributes': attrs,\n 'cellType': cellType\n };\n return new Cell(opt);\n };\n SummaryModelGenerator.prototype.buildSummaryData = function (data, args) {\n var _this = this;\n var dummy = [];\n var summaryRows = this.getData();\n var single = {};\n var key = '';\n summaryRows.forEach(function (row) {\n single = {};\n row.columns.forEach(function (column) {\n single = _this.setTemplate(column, (args && args.aggregates) ? args : data, single);\n });\n dummy.push(single);\n });\n return dummy;\n };\n SummaryModelGenerator.prototype.getIndentByLevel = function (data) {\n return this.parent.groupSettings.columns.map(function () { return 'e-indentcelltop'; });\n };\n SummaryModelGenerator.prototype.setTemplate = function (column, data, single) {\n var _this = this;\n var types = column.type;\n var helper = {};\n var formatFn = column.getFormatter() || (function () { return function (a) { return a; }; })();\n var group = data;\n if (!(types instanceof Array)) {\n types = [column.type];\n }\n types.forEach(function (type) {\n var key = column.field + ' - ' + type.toLowerCase();\n var disp = column.columnName;\n var val = type !== 'Custom' && group.aggregates && key in group.aggregates ? group.aggregates[key] :\n calculateAggregate(type, group.aggregates ? group : data, column, _this.parent);\n single[disp] = single[disp] || {};\n single[disp][key] = val;\n single[disp][type] = !isNullOrUndefined(val) ? formatFn(val) : ' ';\n if (group.field) {\n single[disp].field = group.field;\n single[disp].key = group.key;\n }\n });\n helper.format = column.getFormatter();\n column.setTemplate(helper);\n return single;\n };\n SummaryModelGenerator.prototype.getCellType = function () {\n return CellType.Summary;\n };\n return SummaryModelGenerator;\n}());\nexport { SummaryModelGenerator };\nvar GroupSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(GroupSummaryModelGenerator, _super);\n function GroupSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GroupSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupFooterTemplate !== undefined;\n };\n GroupSummaryModelGenerator.prototype.getIndentByLevel = function (level) {\n if (level === void 0) { level = this.parent.groupSettings.columns.length; }\n return this.parent.groupSettings.columns.map(function (v, indx) { return indx <= level - 1 ? '' : 'e-indentcelltop'; });\n };\n GroupSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.GroupSummary;\n };\n return GroupSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { GroupSummaryModelGenerator };\nvar CaptionSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(CaptionSummaryModelGenerator, _super);\n function CaptionSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CaptionSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupCaptionTemplate !== undefined;\n };\n CaptionSummaryModelGenerator.prototype.getData = function () {\n var initVal = { columns: [] };\n return [_super.prototype.getData.call(this).reduce(function (prev, cur) {\n prev.columns = prev.columns.concat(cur.columns);\n return prev;\n }, initVal)];\n };\n CaptionSummaryModelGenerator.prototype.isEmpty = function () {\n return (this.getData()[0].columns || []).length === 0;\n };\n CaptionSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.CaptionSummary;\n };\n return CaptionSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { CaptionSummaryModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Row } from '../models/row';\nimport { isNullOrUndefined, extend, setValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { getForeignData, getUid } from '../../grid/base/util';\n/**\n * GroupModelGenerator is used to generate group caption rows and data rows.\n * @hidden\n */\nvar GroupModelGenerator = /** @class */ (function (_super) {\n __extends(GroupModelGenerator, _super);\n function GroupModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.rows = [];\n _this.index = 0;\n _this.parent = parent;\n _this.summaryModelGen = new GroupSummaryModelGenerator(parent);\n _this.captionModelGen = new CaptionSummaryModelGenerator(parent);\n return _this;\n }\n GroupModelGenerator.prototype.generateRows = function (data, args) {\n if (this.parent.groupSettings.columns.length === 0) {\n return _super.prototype.generateRows.call(this, data, args);\n }\n this.rows = [];\n this.index = this.parent.enableVirtualization ? args.startIndex : 0;\n for (var i = 0, len = data.length; i < len; i++) {\n this.getGroupedRecords(0, data[i], data.level);\n }\n this.index = 0;\n return this.rows;\n };\n GroupModelGenerator.prototype.getGroupedRecords = function (index, data, raw) {\n var 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 options.uid = getUid('grid-row');\n var row = new Row(options);\n row.indent = indent;\n this.getForeignKeyData(row);\n row.cells = this.getCaptionRowCells(data.field, indent, row.data);\n return row;\n };\n GroupModelGenerator.prototype.getForeignKeyData = function (row) {\n var data = row.data;\n var col = this.parent.getColumnByField(data.field);\n if (col && col.isForeignColumn && col.isForeignColumn()) {\n setValue('foreignKey', col.valueAccessor(col.foreignKeyValue, getForeignData(col, {}, data.key)[0], col), row.data);\n }\n };\n GroupModelGenerator.prototype.generateDataRows = function (data, indent) {\n var rows = [];\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = data.length; i < len; i++) {\n rows[i] = this.generateRow(data[i], this.index, i ? undefined : 'e-firstchildrow', indent);\n for (var j = 0; j < indent; j++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(indent) === -1) {\n continue;\n }\n rows[i].cells.unshift(this.generateIndentCell());\n }\n this.index++;\n }\n return rows;\n };\n GroupModelGenerator.prototype.generateIndentCell = function () {\n return this.generateCell({}, null, CellType.Indent);\n };\n GroupModelGenerator.prototype.refreshRows = function (input) {\n var _this = this;\n var indexes = this.parent.getColumnIndexesInView();\n input.forEach(function (row) {\n if (row.isDataRow) {\n row.cells = _this.generateCells(row);\n for (var j = 0; j < row.indent; j++) {\n if (_this.parent.enableColumnVirtualization && indexes.indexOf(row.indent) === -1) {\n continue;\n }\n row.cells.unshift(_this.generateIndentCell());\n }\n }\n else {\n var cRow = _this.generateCaptionRow(row.data, row.indent);\n row.cells = cRow.cells;\n }\n });\n return input;\n };\n return GroupModelGenerator;\n}(RowModelGenerator));\nexport { GroupModelGenerator };\n","import { Droppable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, remove } from '@syncfusion/ej2-base';\nimport { getUpdateUsingRaf, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from './row-renderer';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { getScrollBarWidth } from '../base/util';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function ContentRender(parent, serviceLocator) {\n var _this = this;\n this.rows = [];\n this.freezeRows = [];\n this.movableRows = [];\n this.isLoaded = true;\n this.drop = function (e) {\n _this.parent.notify(events.columnDrop, { target: e.target, droppedElement: e.droppedElement });\n remove(e.droppedElement);\n };\n this.rafCallback = function (args) {\n var arg = args;\n return function () {\n _this.ariaService.setBusy(_this.getPanel().firstChild, false);\n if (_this.parent.isDestroyed) {\n return;\n }\n var rows = _this.rows.slice(0);\n if (_this.parent.getFrozenColumns() !== 0) {\n rows = args.isFrozen ? _this.freezeRows : _this.movableRows;\n }\n _this.parent.notify(events.contentReady, { rows: rows, args: arg });\n if (_this.isLoaded) {\n _this.parent.trigger(events.dataBound, {});\n if (_this.parent.allowTextWrap) {\n _this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n }\n if (arg) {\n var action = (arg.requestType || '').toLowerCase() + '-complete';\n _this.parent.notify(action, arg);\n if (args.requestType === 'batchsave') {\n args.cancel = false;\n _this.parent.trigger(events.actionComplete, args);\n }\n }\n if (_this.isLoaded) {\n _this.parent.hideSpinner();\n }\n };\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.generator = this.getModelGenerator();\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n this.parent.on(events.colGroupRefresh, this.colGroupRefresh, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n }\n /**\n * The function is used to render grid content div\n */\n ContentRender.prototype.renderPanel = function () {\n var gObj = this.parent;\n var div = this.parent.createElement('div', { className: 'e-gridcontent' });\n var innerDiv = this.parent.createElement('div', {\n className: 'e-content'\n });\n this.ariaService.setOptions(innerDiv, { busy: false });\n div.appendChild(innerDiv);\n this.setPanel(div);\n gObj.element.appendChild(div);\n };\n /**\n * The function is used to render grid content table\n */\n ContentRender.prototype.renderTable = function () {\n var contentDiv = this.getPanel();\n contentDiv.appendChild(this.createContentTable('_content_table'));\n this.setTable(contentDiv.querySelector('.e-table'));\n this.ariaService.setOptions(this.getTable(), {\n multiselectable: this.parent.selectionSettings.type === 'Multiple'\n });\n this.initializeContentDrop();\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().classList.add('e-frozenhdrcont');\n }\n };\n /**\n * The function is used to create content table elements\n * @return {Element}\n * @hidden\n */\n ContentRender.prototype.createContentTable = function (id) {\n var innerDiv = this.getPanel().firstChild;\n var table = this.parent.createElement('table', {\n className: 'e-table', attrs: {\n cellspacing: '0.25px', role: 'grid',\n id: this.parent.element.id + id\n }\n });\n this.setColGroup(this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true));\n table.appendChild(this.getColGroup());\n table.appendChild(this.parent.createElement('tbody'));\n innerDiv.appendChild(table);\n return innerDiv;\n };\n ContentRender.prototype.splitRows = function (idx) {\n if (this.parent.getFrozenColumns()) {\n if (idx === 0) {\n this.freezeRows = this.rows;\n this.freezeRowElements = this.rowElements;\n }\n else {\n this.movableRows = this.rows;\n }\n }\n };\n /**\n * Refresh the content of the Grid.\n * @return {void}\n */\n // tslint:disable-next-line:max-func-body-length\n ContentRender.prototype.refreshContentRows = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n var gObj = this.parent;\n if (gObj.currentViewData.length === 0) {\n return;\n }\n var dataSource = gObj.currentViewData;\n var frag = document.createDocumentFragment();\n var hdrfrag = document.createDocumentFragment();\n var columns = gObj.getColumns();\n var tr;\n var hdrTbody;\n var frzCols = gObj.getFrozenColumns();\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n this.rowElements = [];\n this.rows = [];\n var fCont = this.getPanel().querySelector('.e-frozencontent');\n var mCont = this.getPanel().querySelector('.e-movablecontent');\n var cont = this.getPanel().querySelector('.e-content');\n var modelData = this.generator.generateRows(dataSource, args);\n if (isNullOrUndefined(modelData[0].cells[0])) {\n mCont.querySelector('tbody').innerHTML = '';\n }\n var idx = modelData[0].cells[0].index;\n // tslint:disable-next-line:no-any\n if (this.parent.registeredTemplate && this.parent.registeredTemplate.template) {\n this.parent.destroyTemplate(['template']);\n }\n if (this.parent.enableColumnVirtualization) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n cellMerge.updateVirtualCells(modelData);\n }\n if (frzCols && idx >= frzCols) {\n this.tbody = mCont.querySelector('tbody');\n }\n else {\n this.tbody = this.getTable().querySelector('tbody');\n }\n for (var i = 0, len = modelData.length; i < len; i++) {\n if (!gObj.rowTemplate) {\n tr = row.render(modelData[i], columns);\n if (gObj.frozenRows && i < gObj.frozenRows) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n }\n else {\n var elements = gObj.getRowTemplate()(extend({ index: i }, dataSource[i]), gObj, 'rowTemplate');\n if (elements[0].tagName === 'TBODY') {\n for (var j = 0; j < elements.length; j++) {\n var isTR = elements[j].nodeName.toLowerCase() === 'tr';\n if (isTR || (elements[j].querySelectorAll && elements[j].querySelectorAll('tr').length)) {\n tr = isTR ? elements[j] : elements[j].querySelector('tr');\n }\n }\n if (gObj.frozenRows && i < gObj.frozenRows) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n }\n else {\n if (gObj.frozenRows && i < gObj.frozenRows) {\n tr = appendChildren(hdrfrag, elements);\n }\n else {\n // frag.appendChild(tr);\n tr = appendChildren(frag, elements);\n }\n }\n }\n 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 this.index = idx;\n getUpdateUsingRaf(function () {\n _this.parent.notify(events.beforeFragAppend, args);\n if (!_this.parent.enableVirtualization) {\n remove(_this.tbody);\n _this.tbody = _this.parent.createElement('tbody');\n }\n if (frzCols) {\n _this.tbody.appendChild(frag);\n if (_this.index === 0) {\n _this.isLoaded = false;\n fCont.querySelector('table').appendChild(_this.tbody);\n }\n else {\n if (_this.tbody.childElementCount < 1) {\n _this.tbody.appendChild(_this.parent.createElement('tr').appendChild(_this.parent.createElement('td')));\n }\n _this.isLoaded = true;\n mCont.querySelector('table').appendChild(_this.tbody);\n fCont.style.height = ((mCont.offsetHeight) - getScrollBarWidth()) + 'px';\n mCont.style.overflowY = _this.parent.height !== 'auto' ? 'scroll' : 'auto';\n fCont.style.borderRightWidth = '1px';\n }\n }\n else {\n _this.appendContent(_this.tbody, frag, args);\n }\n if (frzCols && idx === 0) {\n _this.refreshContentRows(extend({}, args));\n }\n frag = null;\n }, this.rafCallback(extend({}, args)));\n };\n ContentRender.prototype.appendContent = function (tbody, frag, args) {\n tbody.appendChild(frag);\n this.getTable().appendChild(tbody);\n };\n /**\n * Get the content div element of grid\n * @return {Element}\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Set the content div element of grid\n * @param {Element} panel\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the content table element of grid\n * @return {Element}\n */\n ContentRender.prototype.getTable = function () {\n return this.contentTable;\n };\n /**\n * Set the content table element of grid\n * @param {Element} table\n */\n ContentRender.prototype.setTable = function (table) {\n this.contentTable = table;\n };\n /**\n * Get the Row collection in the Grid.\n * @returns {Row[] | HTMLCollectionOf}\n */\n ContentRender.prototype.getRows = function () {\n return this.parent.getFrozenColumns() ? this.freezeRows : this.rows;\n };\n /**\n * Get the Movable Row collection in the Freeze pane Grid.\n * @returns {Row[] | HTMLCollectionOf}\n */\n ContentRender.prototype.getMovableRows = function () {\n return this.movableRows;\n };\n /**\n * Get the content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.getRowElements = function () {\n return this.parent.getFrozenColumns() ? this.freezeRowElements : this.rowElements;\n };\n /**\n * Get the Freeze pane movable content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.getMovableRowElements = function () {\n return this.rowElements;\n };\n /**\n * Get the content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.setRowElements = function (elements) {\n this.rowElements = elements;\n };\n /**\n * Get the header colgroup element\n * @returns {Element}\n */\n ContentRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n * @param {Element} colgroup\n * @returns {Element}\n */\n ContentRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Function to hide content table column based on visible property\n * @param {Column[]} columns?\n */\n ContentRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n var rows = [];\n if (frzCols) {\n var fRows = this.freezeRows;\n var mRows = this.movableRows;\n var rowLen = fRows.length;\n var cellLen = void 0;\n for (var i = 0, row = void 0; i < rowLen; i++) {\n cellLen = mRows[i].cells.length;\n row = fRows[i].clone();\n for (var j = 0; j < cellLen; j++) {\n row.cells.push(mRows[i].cells[j]);\n }\n rows.push(row);\n }\n }\n else {\n rows = this.getRows();\n }\n var element;\n var testRow;\n rows.some(function (r) { if (r.isDataRow) {\n testRow = r;\n } return r.isDataRow; });\n var tasks = [];\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[c];\n var idx = this.parent.getNormalizedColumnIndex(column.uid);\n //used canSkip method to skip unwanted visible toggle operation. \n if (this.canSkip(column, testRow, idx)) {\n continue;\n }\n var displayVal = column.visible === true ? '' : 'none';\n if (frzCols) {\n if (idx < frzCols) {\n setStyleAttribute(this.getColGroup().childNodes[idx], { 'display': displayVal });\n }\n else {\n var mTable = gObj.getContent().querySelector('.e-movablecontent').querySelector('colgroup');\n setStyleAttribute(mTable.childNodes[idx - frzCols], { 'display': displayVal });\n }\n }\n else {\n setStyleAttribute(this.getColGroup().childNodes[idx], { 'display': displayVal });\n }\n }\n this.refreshContentRows({ requestType: 'refresh' });\n };\n ContentRender.prototype.colGroupRefresh = function () {\n if (this.getColGroup()) {\n var colGroup = this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true);\n this.getTable().replaceChild(colGroup, this.getColGroup());\n this.setColGroup(colGroup);\n }\n };\n ContentRender.prototype.initializeContentDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(gObj.getContent(), {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n ContentRender.prototype.canSkip = function (column, row, index) {\n /**\n * Skip the toggle visiblity operation when one of the following success\n * 1. Grid has empty records\n * 2. column visible property is unchanged\n * 3. cell`s isVisible property is same as column`s visible property.\n */\n return isNullOrUndefined(row) || //(1)\n isNullOrUndefined(column.visible) || //(2) \n row.cells[index].visible === column.visible; //(3)\n };\n ContentRender.prototype.getModelGenerator = function () {\n return this.generator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n };\n ContentRender.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector('tbody').innerHTML = '';\n }\n };\n ContentRender.prototype.setSelection = function (uid, set, clearAll) {\n if (this.parent.getFrozenColumns()) {\n this.getMovableRows().filter(function (row) { return clearAll || uid === row.uid; }).forEach(function (row) { return row.isSelected = set; });\n }\n this.getRows().filter(function (row) { return clearAll || uid === row.uid; })\n .forEach(function (row) {\n row.isSelected = set;\n row.cells.forEach(function (cell) { return cell.isSelected = set; });\n });\n };\n ContentRender.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows()[index];\n };\n ContentRender.prototype.getVirtualRowIndex = function (index) {\n return index;\n };\n ContentRender.prototype.getMovableRowByIndex = function (index) {\n return this.parent.getMovableDataRows()[index];\n };\n ContentRender.prototype.enableAfterRender = function (e) {\n if (e.module === 'group' && e.enable) {\n this.generator = this.getModelGenerator();\n }\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, closest as getClosest, remove } from '@syncfusion/ej2-base';\nimport { classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from './row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport * as events from '../base/constant';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { parentsUntil, wrap } 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 = _this.parent.createElement('div', { className: 'e-cloneproperties e-dragclone e-headerclone' });\n var element = target.classList.contains('e-headercell') ? target : parentEle;\n if (!element || (!gObj.allowReordering && element.classList.contains('e-stackedheadercell'))) {\n return false;\n }\n var height = element.offsetHeight;\n var headercelldiv = element.querySelector('.e-headercelldiv') || element.querySelector('.e-stackedheadercelldiv');\n var col;\n if (headercelldiv) {\n if (element.querySelector('.e-stackedheadercelldiv')) {\n col = gObj.getStackedHeaderColumnByHeaderText(headercelldiv.innerText.trim(), gObj.columns);\n }\n else {\n col = gObj.getColumnByUid(headercelldiv.getAttribute('e-mappinguid'));\n }\n _this.column = col;\n visualElement.setAttribute('e-mappinguid', _this.column.uid);\n }\n if (col && !isNullOrUndefined(col.headerTemplate)) {\n if (col.headerTemplate.indexOf('#') !== -1) {\n visualElement.innerHTML = document.querySelector(col.headerTemplate).innerHTML.trim();\n }\n else {\n visualElement.innerHTML = col.headerTemplate;\n }\n }\n else {\n visualElement.innerHTML = headercelldiv ?\n col.headerText : element.firstElementChild.innerHTML;\n }\n visualElement.style.width = element.offsetWidth + 'px';\n visualElement.style.height = element.offsetHeight + 'px';\n visualElement.style.lineHeight = (height - 6).toString() + 'px';\n gObj.element.appendChild(visualElement);\n return visualElement;\n };\n this.dragStart = function (e) {\n var gObj = _this.parent;\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n gObj.notify(events.columnDragStart, { target: e.target, column: _this.column, event: e.event });\n };\n this.drag = function (e) {\n var gObj = _this.parent;\n var target = e.target;\n if (target) {\n var closest = getClosest(target, '.e-grid');\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n if (!closest || closest.getAttribute('id') !== gObj.element.getAttribute('id')) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n if (gObj.allowReordering) {\n gObj.element.querySelector('.e-reorderuparrow').style.display = 'none';\n gObj.element.querySelector('.e-reorderdownarrow').style.display = 'none';\n }\n return;\n }\n gObj.notify(events.columnDrag, { target: e.target, column: _this.column, event: e.event });\n }\n };\n this.dragStop = function (e) {\n var gObj = _this.parent;\n var cancel;\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n if ((!parentsUntil(e.target, 'e-headercell') && !parentsUntil(e.target, 'e-groupdroparea')) ||\n (!gObj.allowReordering && parentsUntil(e.target, 'e-headercell')) ||\n (!e.helper.getAttribute('e-mappinguid') && parentsUntil(e.target, 'e-groupdroparea'))) {\n remove(e.helper);\n cancel = true;\n }\n gObj.notify(events.columnDragStop, { target: e.target, event: e.event, column: _this.column, cancel: cancel });\n };\n this.drop = function (e) {\n var gObj = _this.parent;\n var uid = e.droppedElement.getAttribute('e-mappinguid');\n var closest = getClosest(e.target, '.e-grid');\n remove(e.droppedElement);\n if (closest && closest.getAttribute('id') !== gObj.element.getAttribute('id') ||\n !(gObj.allowReordering || gObj.allowGrouping)) {\n return;\n }\n gObj.notify(events.headerDrop, { target: e.target, uid: uid });\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.widthService = this.serviceLocator.getService('widthService');\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n this.parent.on(events.columnPositionChanged, this.colPosRefresh, this);\n }\n /**\n * The function is used to render grid header div\n */\n HeaderRender.prototype.renderPanel = function () {\n var div = this.parent.createElement('div', { className: 'e-gridheader' });\n var innerDiv = this.parent.createElement('div', { className: 'e-headercontent' });\n div.appendChild(innerDiv);\n this.setPanel(div);\n this.parent.element.appendChild(div);\n };\n /**\n * The function is used to render grid header table\n */\n HeaderRender.prototype.renderTable = function () {\n var headerDiv = this.getPanel();\n headerDiv.appendChild(this.createHeaderTable());\n this.setTable(headerDiv.querySelector('.e-table'));\n if (!this.parent.getFrozenColumns()) {\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n }\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.getFrozenColumns() !== 0 } });\n };\n /**\n * Get the header content div element of grid\n * @return {Element}\n */\n HeaderRender.prototype.getPanel = function () {\n return this.headerPanel;\n };\n /**\n * Set the header content div element of grid\n * @param {Element} panel\n */\n HeaderRender.prototype.setPanel = function (panel) {\n this.headerPanel = panel;\n };\n /**\n * Get the header table element of grid\n * @return {Element}\n */\n HeaderRender.prototype.getTable = function () {\n return this.headerTable;\n };\n /**\n * Set the header table element of grid\n * @param {Element} table\n */\n HeaderRender.prototype.setTable = function (table) {\n this.headerTable = table;\n };\n /**\n * Get the header colgroup element\n * @returns {Element}\n */\n HeaderRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n * @param {Element} colgroup\n * @returns {Element}\n */\n HeaderRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Get the header row element collection.\n * @return {Element[]}\n */\n HeaderRender.prototype.getRows = function () {\n var table = this.getTable();\n return table.tHead.rows;\n };\n /**\n * The function is used to create header table elements\n * @return {Element}\n * @hidden\n */\n HeaderRender.prototype.createHeaderTable = function () {\n var table = this.createTable();\n var innerDiv = this.getPanel().firstChild;\n innerDiv.appendChild(table);\n return innerDiv;\n };\n /**\n * @hidden\n */\n HeaderRender.prototype.createTable = function () {\n var gObj = this.parent;\n var columns = gObj.getColumns();\n var table = this.parent.createElement('table', { className: 'e-table', attrs: { cellspacing: '0.25px', role: 'grid' } });\n var innerDiv = this.getPanel().firstChild;\n var findHeaderRow = this.createHeaderContent();\n var thead = findHeaderRow.thead;\n var tbody = this.parent.createElement('tbody', { className: this.parent.frozenRows ? '' : 'e-hide' });\n this.caption = this.parent.createElement('caption', { innerHTML: this.parent.element.id + '_header_table', className: 'e-hide' });\n var colGroup = this.parent.createElement('colgroup');\n var rowBody = this.parent.createElement('tr');\n var bodyCell;\n var rows = this.rows = findHeaderRow.rows;\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header, this.parent);\n for (var i = 0, len = rows.length; i < len; i++) {\n for (var j = 0, len_1 = rows[i].cells.length; j < len_1; j++) {\n var cell = rows[i].cells[j];\n bodyCell = this.parent.createElement('td');\n rowBody.appendChild(bodyCell);\n }\n }\n if (gObj.allowFiltering || gObj.allowSorting || gObj.allowGrouping) {\n table.classList.add('e-sortfilter');\n }\n this.updateColGroup(colGroup);\n tbody.appendChild(rowBody);\n table.appendChild(this.setColGroup(colGroup));\n table.appendChild(thead);\n table.appendChild(tbody);\n table.appendChild(this.caption);\n this.ariaService.setOptions(table, { colcount: gObj.getColumns().length.toString() });\n return table;\n };\n HeaderRender.prototype.createHeaderContent = function () {\n var gObj = this.parent;\n var columns = gObj.getColumns();\n var thead = this.parent.createElement('thead');\n var colHeader = this.parent.createElement('tr', { className: 'e-columnheader' });\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header, gObj);\n rowRenderer.element = colHeader;\n var rows = [];\n var headerRow;\n this.colDepth = 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 && headerRow.querySelector('.e-headercell')) {\n headerRow.style.height = this.parent.rowHeight + 'px';\n }\n thead.appendChild(headerRow);\n }\n var findHeaderRow = {\n thead: thead,\n rows: rows\n };\n return findHeaderRow;\n };\n HeaderRender.prototype.updateColGroup = function (colGroup) {\n var cols = this.parent.getColumns();\n var col;\n var indexes = this.parent.getColumnIndexesInView();\n if (this.parent.allowGrouping) {\n for (var i = 0, len = this.parent.groupSettings.columns.length; i < len; i++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n continue;\n }\n col = this.parent.createElement('col');\n colGroup.appendChild(col);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n col = this.parent.createElement('col');\n colGroup.appendChild(col);\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n col = this.parent.createElement('col');\n if (cols[i].visible === false) {\n setStyleAttribute(col, { 'display': 'none' });\n }\n colGroup.appendChild(col);\n }\n return colGroup;\n };\n HeaderRender.prototype.ensureColumns = function (rows) {\n //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n var gObj = this.parent;\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (gObj.allowGrouping) {\n for (var c = 0, len_2 = gObj.groupSettings.columns.length; c < len_2; c++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(c) === -1) {\n continue;\n }\n rows[i].cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (gObj.detailTemplate || gObj.childGrid) {\n rows[i].cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n }\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 if (this.getTable()) {\n remove(this.getTable());\n table.removeChild(table.firstChild);\n table.removeChild(table.childNodes[0]);\n var colGroup = this.parent.createElement('colgroup');\n var findHeaderRow = this.createHeaderContent();\n this.rows = findHeaderRow.rows;\n table.insertBefore(findHeaderRow.thead, table.firstChild);\n this.updateColGroup(colGroup);\n table.insertBefore(this.setColGroup(colGroup), table.firstChild);\n this.setTable(table);\n this.appendContent(table);\n this.parent.notify(events.colGroupRefresh, {});\n this.widthService.setWidthToColumns();\n this.parent.updateDefaultCursor();\n if (!frzCols) {\n this.initializeHeaderDrag();\n }\n var rows = [].slice.call(headerDiv.querySelectorAll('tr.e-columnheader'));\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n var gCells = [].slice.call(row.querySelectorAll('.e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n }\n if (!frzCols) {\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.getFrozenColumns() !== 0 } });\n }\n if (this.parent.allowTextWrap && this.parent.textWrapSettings.wrapMode === 'Header') {\n wrap(rows, true);\n }\n }\n };\n HeaderRender.prototype.appendContent = function (table) {\n this.getPanel().firstChild.appendChild(table);\n };\n HeaderRender.prototype.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 var max = index;\n var indices = [];\n if (col.columns) {\n index++;\n for (var i = 0, len = col.columns.length; i < len; i++) {\n indices[i] = this.checkDepth(col.columns[i], index);\n }\n for (var j = 0; j < indices.length; j++) {\n if (max < indices[j]) {\n max = indices[j];\n }\n }\n index = max;\n }\n return index;\n };\n HeaderRender.prototype.getCellCnt = function (col, cnt) {\n if (col.columns) {\n for (var i = 0, len = col.columns.length; i < len; i++) {\n cnt = this.getCellCnt(col.columns[i], cnt);\n }\n }\n else {\n if (col.visible) {\n cnt++;\n }\n }\n return cnt;\n };\n HeaderRender.prototype.initializeHeaderDrag = function () {\n var gObj = this.parent;\n if (!(this.parent.allowReordering || (this.parent.allowGrouping && this.parent.groupSettings.showDropArea))) {\n return;\n }\n var headerRows = [].slice.call(gObj.getHeaderContent().querySelectorAll('.e-columnheader'));\n for (var i = 0, len = headerRows.length; i < len; i++) {\n var drag = new Draggable(headerRows[i], {\n dragTarget: '.e-headercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop,\n abort: '.e-rhandler'\n });\n }\n };\n HeaderRender.prototype.initializeHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(gObj.getHeaderContent(), {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n return HeaderRender;\n}());\nexport { HeaderRender };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { doesImplementInterface, setStyleAndAttributes, appendChildren } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { foreignKeyData } from '../base/constant';\n/**\n * CellRenderer class which responsible for building cell content.\n * @hidden\n */\nvar CellRenderer = /** @class */ (function () {\n function CellRenderer(parent, locator) {\n this.localizer = locator.getService('localization');\n this.formatter = locator.getService('valueFormatter');\n this.parent = parent;\n this.element = this.parent.createElement('TD', { className: 'e-rowcell', attrs: { role: 'gridcell', tabindex: '-1' } });\n this.rowChkBox = this.parent.createElement('input', { className: 'e-checkselect', attrs: { 'type': 'checkbox' } });\n }\n /**\n * Function to return the wrapper for the TD content\n * @returns string\n */\n CellRenderer.prototype.getGui = function () {\n return '';\n };\n /**\n * Function to format the cell value.\n * @param {Column} column\n * @param {Object} value\n * @param {Object} data\n */\n CellRenderer.prototype.format = function (column, value, data) {\n if (!isNullOrUndefined(column.format)) {\n value = this.formatter.toView(value, column.getFormatter());\n }\n return isNullOrUndefined(value) ? '' : value.toString();\n };\n CellRenderer.prototype.evaluate = function (node, cell, data, attributes, fData) {\n var 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 result = null;\n node.setAttribute('aria-label', node.innerText + ' is template cell' + ' column header ' +\n cell.column.headerText);\n return false;\n }\n return true;\n 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' || column.type === 'datetime') && !isNullOrUndefined(value)) {\n value = new Date(value);\n }\n value = this.format(column, value, data);\n innerHtml = value.toString();\n if (column.type === 'boolean' && !column.displayAsCheckBox) {\n var localeStr = (value !== 'true' && value !== 'false') ? null : value === 'true' ? 'True' : 'False';\n innerHtml = localeStr ? this.localizer.getConstant(localeStr) : innerHtml;\n }\n var fromFormatter = this.invokeFormatter(column, value, data);\n innerHtml = !isNullOrUndefined(column.formatter) ? isNullOrUndefined(fromFormatter) ? '' : fromFormatter.toString() : innerHtml;\n node.setAttribute('aria-label', (innerHtml === '' ? 'empty' : innerHtml) + ' column header ' + cell.column.headerText);\n if (!isNullOrUndefined(cell.column.headerText)) {\n node.setAttribute('aria-label', innerHtml + ' column header ' + cell.column.headerText);\n }\n if (this.evaluate(node, cell, data, attributes, fData) && column.type !== 'checkbox') {\n this.appendHtml(node, innerHtml, column.getDomSetter ? column.getDomSetter() : 'innerHTML');\n }\n else if (column.type === 'checkbox') {\n node.classList.add('e-gridchkbox');\n node.setAttribute('aria-label', 'checkbox');\n if (this.parent.selectionSettings.persistSelection) {\n value = value === 'true';\n }\n else {\n value = false;\n }\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.insertBefore(this.rowChkBox.cloneNode(), checkWrap.firstChild);\n node.appendChild(checkWrap);\n }\n if (this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n cell.isSelected = true;\n }\n this.setAttributes(node, cell, attributes);\n if (column.type === 'boolean' && column.displayAsCheckBox) {\n var checked = isNaN(parseInt(value.toString(), 10)) ? value === 'true' : parseInt(value.toString(), 10) > 0;\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: checked, label: ' ' });\n node.innerHTML = '';\n checkWrap.classList.add('e-checkbox-disabled');\n node.appendChild(checkWrap);\n node.setAttribute('aria-label', checked + ' column header ' + cell.column.headerText);\n }\n return node;\n 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 { attributes } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes, appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { AriaService } from '../services/aria-service';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { headerCellInfo } from '../base/constant';\n/**\n * HeaderCellRenderer class which responsible for building header cell content.\n * @hidden\n */\nvar HeaderCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderCellRenderer, _super);\n function HeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent\n .createElement('TH', { className: 'e-headercell', attrs: { role: 'columnheader', tabindex: '-1' } });\n _this.ariaService = new AriaService();\n _this.hTxtEle = _this.parent.createElement('span', { className: 'e-headertext' });\n _this.sortEle = _this.parent.createElement('div', { className: 'e-sortfilterdiv e-icons' });\n _this.gui = _this.parent.createElement('div');\n _this.chkAllBox = _this.parent.createElement('input', { className: 'e-checkselectall', attrs: { 'type': 'checkbox' } });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n * @returns string\n */\n HeaderCellRenderer.prototype.getGui = function () {\n return this.gui.cloneNode();\n };\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {Element}\n */\n HeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var fltrMenuEle = this.parent.createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter' });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n /**\n * Function to refresh the cell content based on Column object.\n * @param {Cell} cell\n * @param {Element} node\n */\n HeaderCellRenderer.prototype.refresh = function (cell, node) {\n this.clean(node);\n var fltrMenuEle = this.parent.createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter' });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n HeaderCellRenderer.prototype.clean = function (node) {\n node.innerHTML = '';\n };\n HeaderCellRenderer.prototype.prepareHeader = function (cell, node, fltrMenuEle) {\n var column = cell.column;\n var ariaAttr = {};\n //Prepare innerHtml\n var innerDIV = this.getGui();\n attributes(innerDIV, {\n 'e-mappinguid': column.uid,\n 'class': 'e-headercelldiv'\n });\n if (column.type !== 'checkbox') {\n var value = column.headerText;\n var headerText = this.hTxtEle.cloneNode();\n headerText[column.getDomSetter()] = value;\n innerDIV.appendChild(headerText);\n }\n else {\n column.editType = 'booleanedit';\n var checkAllWrap = createCheckBox(this.parent.createElement, false, { checked: false, label: ' ' });\n checkAllWrap.insertBefore(this.chkAllBox.cloneNode(), checkAllWrap.firstChild);\n innerDIV.appendChild(checkAllWrap);\n innerDIV.classList.add('e-headerchkcelldiv');\n }\n this.buildAttributeFromCell(node, cell);\n this.appendHtml(node, innerDIV);\n node.appendChild(this.sortEle.cloneNode());\n if ((this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') &&\n (column.allowFiltering && !isNullOrUndefined(column.field)) &&\n !(this.parent.showColumnMenu && column.showColumnMenu)) {\n attributes(fltrMenuEle, {\n 'e-mappinguid': 'e-flmenu-' + column.uid,\n });\n node.classList.add('e-fltr-icon');\n var matchFlColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFlColumns.length) {\n for (var index = 0; index < this.parent.columns.length; index++) {\n for (var count = 0; count < this.parent.filterSettings.columns.length; count++) {\n if (this.parent.filterSettings.columns[count].field === column.field) {\n fltrMenuEle.classList.add('e-filtered');\n matchFlColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.appendChild(fltrMenuEle.cloneNode());\n }\n if (cell.className) {\n node.classList.add(cell.className);\n }\n if (column.customAttributes) {\n setStyleAndAttributes(node, column.customAttributes);\n }\n if (column.allowSorting) {\n ariaAttr.sort = 'none';\n }\n if (column.allowGrouping) {\n ariaAttr.grabbed = false;\n }\n node = this.extendPrepareHeader(column, node);\n var result;\n var gridObj = this.parent;\n var colIndex = gridObj.getColumnIndexByField(column.field);\n if (!isNullOrUndefined(column.headerTemplate)) {\n result = column.getHeaderTemplate()(extend({ 'index': colIndex }, column), gridObj, 'headerTemplate');\n node.firstElementChild.innerHTML = '';\n appendChildren(node.firstElementChild, result);\n }\n this.ariaService.setOptions(node, ariaAttr);\n if (!isNullOrUndefined(column.headerTextAlign) || !isNullOrUndefined(column.textAlign)) {\n var alignment = column.headerTextAlign || column.textAlign;\n innerDIV.style.textAlign = alignment;\n if (alignment === 'Right' || alignment === 'Left') {\n node.classList.add(alignment === 'Right' ? 'e-rightalign' : 'e-leftalign');\n }\n else if (alignment === 'Center') {\n node.classList.add('e-centeralign');\n }\n }\n if (column.clipMode === 'Clip') {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip') {\n node.classList.add('e-ellipsistooltip');\n }\n node.setAttribute('aria-rowspan', (!isNullOrUndefined(cell.rowSpan) ? cell.rowSpan : 1).toString());\n node.setAttribute('aria-colspan', '1');\n this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n return node;\n };\n HeaderCellRenderer.prototype.extendPrepareHeader = function (column, node) {\n if (this.parent.showColumnMenu && column.showColumnMenu && !isNullOrUndefined(column.field)) {\n var element = (this.parent.createElement('div', { className: 'e-icons e-columnmenu' }));\n var matchFilteredColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFilteredColumns.length) {\n for (var i = 0; i < this.parent.columns.length; i++) {\n for (var j = 0; j < this.parent.filterSettings.columns.length; j++) {\n if (this.parent.filterSettings.columns[j].field === column.field) {\n element.classList.add('e-filtered');\n matchFilteredColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.classList.add('e-fltr-icon');\n node.appendChild(element);\n }\n if (this.parent.allowResizing) {\n var handler = this.parent.createElement('div');\n handler.className = column.allowResizing ? 'e-rhandler e-rcursor' : 'e-rsuppress';\n node.appendChild(handler);\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHtml\n * @returns Element\n */\n HeaderCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n return HeaderCellRenderer;\n}(CellRenderer));\nexport { HeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { headerCellInfo } from '../base/constant';\n/**\n * StackedHeaderCellRenderer class which responsible for building stacked header cell content.\n * @hidden\n */\nvar StackedHeaderCellRenderer = /** @class */ (function (_super) {\n __extends(StackedHeaderCellRenderer, _super);\n function StackedHeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', {\n className: 'e-headercell e-stackedheadercell', attrs: {\n role: 'columnheader',\n tabindex: '-1'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {Element}\n */\n StackedHeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var div = this.parent.createElement('div', { 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 this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n return node;\n };\n return StackedHeaderCellRenderer;\n}(CellRenderer));\nexport { StackedHeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\n/**\n * IndentCellRenderer class which responsible for building group indent cell.\n * @hidden\n */\nvar IndentCellRenderer = /** @class */ (function (_super) {\n __extends(IndentCellRenderer, _super);\n function IndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', { className: 'e-indentcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n IndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n setStyleAndAttributes(node, cell.attributes);\n return node;\n };\n return IndentCellRenderer;\n}(CellRenderer));\nexport { IndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren, templateCompiler } from '../base/util';\n/**\n * GroupCaptionCellRenderer class which responsible for building group caption cell.\n * @hidden\n */\nvar GroupCaptionCellRenderer = /** @class */ (function (_super) {\n __extends(GroupCaptionCellRenderer, _super);\n function GroupCaptionCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent\n .createElement('TD', { className: 'e-groupcaption', 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 data.headerText = cell.column.headerText;\n if (cell.isForeignKey) {\n fKeyValue = this.format(cell.column, cell.column.valueAccessor('foreignKey', data, cell.column));\n }\n var value = cell.isForeignKey ? fKeyValue : cell.column.enableGroupByFormat ? data.key :\n this.format(cell.column, cell.column.valueAccessor('key', data, cell.column));\n if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n 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 = _this.parent.createElement('TD', { className: 'e-groupcaption' });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n GroupCaptionEmptyCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.innerHTML = ' ';\n node.setAttribute('colspan', cell.colSpan.toString());\n return node;\n };\n return GroupCaptionEmptyCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionEmptyCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { IndentCellRenderer } from './indent-cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n * @hidden\n */\nvar ExpandCellRenderer = /** @class */ (function (_super) {\n __extends(ExpandCellRenderer, _super);\n function ExpandCellRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Function to render the expand cell\n * @param {Cell} cell\n * @param {Object} data\n */\n ExpandCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.className = 'e-recordplusexpand';\n node.setAttribute('ej-mappingname', data.field);\n node.setAttribute('ej-mappingvalue', data.key);\n node.setAttribute('aria-expanded', 'true');\n node.setAttribute('tabindex', '-1');\n node.appendChild(this.parent.createElement('div', { className: 'e-icons e-gdiagonaldown e-icon-gdownarrow' }));\n return node;\n };\n return ExpandCellRenderer;\n}(IndentCellRenderer));\nexport { ExpandCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CellRenderer } from './cell-renderer';\n/**\n * HeaderIndentCellRenderer class which responsible for building header indent cell.\n * @hidden\n */\nvar HeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderIndentCellRenderer, _super);\n function HeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-grouptopleftcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n HeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(this.parent.createElement('div', { className: 'e-headercelldiv e-emptycell', innerHTML: '' }));\n return node;\n };\n return HeaderIndentCellRenderer;\n}(CellRenderer));\nexport { HeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CellRenderer } from './cell-renderer';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n * @hidden\n */\nvar DetailHeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(DetailHeaderIndentCellRenderer, _super);\n function DetailHeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-detailheadercell' });\n return _this;\n }\n /**\n * Function to render the detail indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n DetailHeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(this.parent.createElement('div', { className: 'e-emptycell' }));\n return node;\n };\n return DetailHeaderIndentCellRenderer;\n}(CellRenderer));\nexport { DetailHeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n * @hidden\n */\nvar DetailExpandCellRenderer = /** @class */ (function (_super) {\n __extends(DetailExpandCellRenderer, _super);\n function DetailExpandCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', {\n className: 'e-detailrowcollapse',\n attrs: { 'aria-expanded': 'false', role: 'gridcell', tabindex: '-1' }\n });\n return _this;\n }\n /**\n * Function to render the detail expand cell\n */\n DetailExpandCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n if (attributes && !isNullOrUndefined(attributes['class'])) {\n node.className = '';\n node.className = attributes['class'];\n node.appendChild(this.parent.createElement('div', { className: 'e-icons e-dtdiagonaldown e-icon-gdownarrow' }));\n }\n else {\n node.appendChild(this.parent.createElement('div', { className: 'e-icons e-dtdiagonalright e-icon-grightarrow' }));\n }\n return node;\n };\n return DetailExpandCellRenderer;\n}(CellRenderer));\nexport { DetailExpandCellRenderer };\n","import { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Deferred, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RenderType, CellType } from '../base/enum';\nimport { Data } from '../actions/data';\nimport { Column } from '../models/column';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport * as events from '../base/constant';\nimport { prepareColumns, setFormatter, getDatePredicate, getObject } from '../base/util';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { HeaderRender } from '../renderer/header-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\nimport { StackedHeaderCellRenderer } from '../renderer/stacked-cell-renderer';\nimport { IndentCellRenderer } from '../renderer/indent-cell-renderer';\nimport { GroupCaptionCellRenderer, GroupCaptionEmptyCellRenderer } from '../renderer/caption-cell-renderer';\nimport { ExpandCellRenderer } from '../renderer/expand-cell-renderer';\nimport { HeaderIndentCellRenderer } from '../renderer/header-indent-renderer';\nimport { DetailHeaderIndentCellRenderer } from '../renderer/detail-header-indent-renderer';\nimport { DetailExpandCellRenderer } from '../renderer/detail-expand-cell-renderer';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function Render(parent, locator) {\n this.emptyGrid = false;\n this.parent = parent;\n this.locator = locator;\n this.data = new Data(parent, locator);\n this.l10n = locator.getService('localization');\n this.ariaService = this.locator.getService('ariaService');\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize grid header, content and footer rendering\n */\n Render.prototype.render = function () {\n var gObj = this.parent;\n this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.headerRenderer.renderPanel();\n this.contentRenderer.renderPanel();\n if (gObj.getColumns().length) {\n this.isLayoutRendered = true;\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.emptyRow(false);\n }\n this.refreshDataManager();\n };\n /**\n * Refresh the entire Grid.\n * @return {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n this.parent.trigger(events.actionBegin, e);\n if (e.cancel) {\n this.parent.notify(events.cancelBegin, e);\n return;\n }\n this.refreshDataManager(e);\n };\n Render.prototype.refreshComplete = function (e) {\n this.parent.trigger(events.actionComplete, e);\n };\n /**\n * The function is used to refresh the dataManager\n * @return {void}\n */\n Render.prototype.refreshDataManager = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n if (args.requestType !== 'virtualscroll') {\n this.parent.showSpinner();\n }\n this.emptyGrid = false;\n var dataManager;\n var isFActon = this.isNeedForeignAction();\n this.ariaService.setBusy(this.parent.getContent().firstChild, true);\n if (isFActon) {\n var deffered = new Deferred();\n dataManager = this.getFData(deffered);\n }\n if (!dataManager) {\n dataManager = this.data.getData(args, this.data.generateQuery().requiresCount());\n }\n else {\n dataManager = dataManager.then(function (e) {\n var query = _this.data.generateQuery().requiresCount();\n if (_this.emptyGrid) {\n var def = new Deferred();\n def.resolve({ result: [], count: 0 });\n return def.promise;\n }\n return _this.data.getData(args, query);\n });\n }\n if (this.parent.getForeignKeyColumns().length && (!isFActon || this.parent.searchSettings.key.length)) {\n var deffered_1 = new Deferred();\n dataManager = dataManager.then(function (e) {\n _this.parent.notify(events.getForeignKeyData, { dataManager: dataManager, result: e, promise: deffered_1 });\n return deffered_1.promise;\n });\n }\n if (this.parent.groupSettings.disablePageWiseAggregates && this.parent.groupSettings.columns.length) {\n dataManager = dataManager.then(function (e) { return _this.validateGroupRecords(e); });\n }\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, args); })\n .catch(function (e) { return _this.dataManagerFailure(e, args); });\n };\n Render.prototype.getFData = function (deferred) {\n this.parent.notify(events.getForeignKeyData, { isComplex: true, promise: deferred });\n return deferred.promise;\n };\n Render.prototype.isNeedForeignAction = function () {\n var gObj = this.parent;\n return !!((gObj.allowFiltering && gObj.filterSettings.columns.length) ||\n (gObj.searchSettings.key.length)) && this.foreignKey(this.parent.getForeignKeyColumns());\n };\n Render.prototype.foreignKey = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n var fbool = false;\n fbool = _this.parent.filterSettings.columns.some(function (value) {\n return col.foreignKeyValue === value.field;\n });\n return !!(fbool || _this.parent.searchSettings.key.length);\n });\n };\n Render.prototype.sendBulkRequest = function (args) {\n var _this = this;\n var promise = this.data.saveChanges(args.changes, this.parent.getPrimaryKeyFieldNames()[0], args.original);\n var query = this.data.generateQuery().requiresCount();\n if (this.data.dataManager.dataSource.offline) {\n this.refreshDataManager({ requestType: 'batchsave' });\n return;\n }\n else {\n promise.then(function (e) {\n _this.data.getData(args, query)\n .then(function (e) { return _this.dmSuccess(e, args); })\n .catch(function (e) { return _this.dmFailure(e, args); });\n })\n .catch(function (e) { return _this.dmFailure(e, args); });\n }\n };\n Render.prototype.dmSuccess = function (e, args) {\n this.dataManagerSuccess(e, args);\n };\n Render.prototype.dmFailure = function (e, args) {\n this.dataManagerFailure(e, args);\n };\n /**\n * Render empty row to Grid which is used at the time to represent to no records.\n * @return {void}\n * @hidden\n */\n Render.prototype.renderEmptyRow = function () {\n this.emptyRow(true);\n };\n Render.prototype.emptyRow = function (isTrigger) {\n var gObj = this.parent;\n var tbody = this.contentRenderer.getTable().querySelector('tbody');\n var tr;\n if (!isNullOrUndefined(tbody)) {\n remove(tbody);\n }\n tbody = this.parent.createElement('tbody');\n tr = this.parent.createElement('tr', { className: 'e-emptyrow' });\n tr.appendChild(this.parent.createElement('td', {\n innerHTML: this.l10n.getConstant('EmptyRecord'),\n attrs: { colspan: gObj.getColumns().length.toString() }\n }));\n tbody.appendChild(tr);\n this.contentRenderer.renderEmpty(tbody);\n if (isTrigger) {\n this.parent.trigger(events.dataBound, {});\n this.parent.notify(events.onEmpty, { rows: [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })] });\n }\n };\n Render.prototype.dynamicColumnChange = function () {\n if (this.parent.getCurrentViewRecords().length) {\n this.updateColumnType(this.parent.getCurrentViewRecords()[0]);\n }\n };\n Render.prototype.updateColumnType = function (record) {\n var columns = this.parent.getColumns();\n var value;\n var data = record && record.items ? record.items[0] : record;\n var fmtr = this.locator.getService('valueFormatter');\n for (var i = 0, len = columns.length; i < len; i++) {\n value = getObject(columns[i].field || '', data);\n if (columns[i].isForeignColumn() && columns[i].columnData) {\n value = getObject(columns[i].foreignKeyValue || '', columns[i].columnData[0]);\n }\n if (!isNullOrUndefined(value)) {\n this.isColTypeDef = true;\n if (!columns[i].type) {\n columns[i].type = value.getDay ? (value.getHours() > 0 || value.getMinutes() > 0 ||\n value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n }\n else {\n columns[i].type = columns[i].type || null;\n }\n var valueFormatter = new ValueFormatter();\n if (columns[i].format && (columns[i].format.skeleton || columns[i].format.format)) {\n columns[i].setFormatter(valueFormatter.getFormatFunction(columns[i].format));\n columns[i].setParser(valueFormatter.getParserFunction(columns[i].format));\n }\n if (typeof (columns[i].format) === 'string') {\n setFormatter(this.locator, columns[i]);\n }\n else if (!columns[i].format && columns[i].type === 'number') {\n columns[i].setParser(fmtr.getParserFunction({ format: 'n2' }));\n }\n }\n };\n 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 if ((!gObj.getColumns().length && !len) && !(gObj.columns.length && gObj.columns[0] instanceof Column)) {\n gObj.hideSpinner();\n return;\n }\n this.parent.isEdit = false;\n this.parent.notify(events.tooltipDestroy, {});\n gObj.currentViewData = e.result;\n if (!len && e.count && gObj.allowPaging) {\n gObj.prevPageMoving = true;\n gObj.pageSettings.totalRecordsCount = e.count;\n gObj.pageSettings.currentPage = Math.ceil(e.count / gObj.pageSettings.pageSize);\n gObj.dataBind();\n return;\n }\n if (!gObj.getColumns().length && len || !this.isLayoutRendered) {\n this.updatesOnInitialRender(e);\n }\n if (!this.isColTypeDef && gObj.getCurrentViewRecords()) {\n this.updateColumnType(gObj.getCurrentViewRecords()[0]);\n }\n 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, args) {\n this.ariaService.setOptions(this.parent.getContent().firstChild, { busy: false, invalid: true });\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.hideSpinner();\n if (args.requestType === 'save' || args.requestType === 'delete'\n || args.name === 'bulk-save') {\n return;\n }\n this.parent.currentViewData = [];\n this.renderEmptyRow();\n };\n Render.prototype.updatesOnInitialRender = function (e) {\n this.isLayoutRendered = true;\n if (this.parent.columns.length < 1) {\n this.buildColumns(e.result[0]);\n }\n prepareColumns(this.parent.columns);\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.parent.notify(events.autoCol, {});\n };\n Render.prototype.buildColumns = function (record) {\n var columns = Object.keys(record);\n var cols = [];\n for (var i = 0, len = columns.length; i < len; i++) {\n cols[i] = { 'field': columns[i] };\n if (this.parent.enableColumnVirtualization) {\n cols[i].width = !isNullOrUndefined(cols[i].width) ? cols[i].width : 200;\n }\n }\n this.parent.columns = cols;\n };\n Render.prototype.instantiateRenderer = function () {\n this.renderer.addRenderer(RenderType.Header, new HeaderRender(this.parent, this.locator));\n this.renderer.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n var cellrender = this.locator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Header, new HeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Data, new CellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Indent, new IndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaption, new GroupCaptionCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaptionEmpty, new GroupCaptionEmptyCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Expand, new ExpandCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.HeaderIndent, new HeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailHeader, new DetailHeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.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.toLowerCase();\n var data = itemGroup.level ? uGroupItem.records : uGroup.items;\n var context = _this.parent;\n if (type === 'Custom') {\n element.aggregates[key] = column.customAggregate ?\n column.customAggregate.call(context, data, column) : '';\n }\n else {\n element.aggregates[key] = DataUtil.aggregates[type.toLowerCase()](data, column.field);\n }\n });\n });\n });\n });\n return current;\n };\n return Render;\n}());\nexport { Render };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\n/**\n * CellRendererFactory\n * @hidden\n */\nvar CellRendererFactory = /** @class */ (function () {\n function CellRendererFactory() {\n this.cellRenderMap = {};\n }\n CellRendererFactory.prototype.addCellRenderer = function (name, type) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[name])) {\n this.cellRenderMap[name] = type;\n }\n };\n CellRendererFactory.prototype.getCellRenderer = function (name) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[name])) {\n throw \"The cellRenderer \" + name + \" is not found\";\n }\n else {\n return this.cellRenderMap[name];\n }\n };\n return CellRendererFactory;\n}());\nexport { CellRendererFactory };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[name])) {\n this.services[name] = type;\n }\n };\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[name])) {\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n * @hidden\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n this.rendererMap[rName] = type;\n }\n };\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { columnWidthChanged } from '../base/constant';\nimport { Column } from '../models/column';\n/**\n * ColumnWidthService\n * @hidden\n */\nvar ColumnWidthService = /** @class */ (function () {\n function ColumnWidthService(parent) {\n this.parent = parent;\n }\n ColumnWidthService.prototype.setWidthToColumns = function () {\n var _this = this;\n var i = 0;\n var indexes = this.parent.getColumnIndexesInView();\n var wFlag = true;\n if (this.parent.allowGrouping) {\n for (var len = this.parent.groupSettings.columns.length; i < len; i++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n wFlag = false;\n continue;\n }\n this.setColumnWidth(new Column({ width: '30px' }), i);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }), i);\n }\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 if (typeof (width) === 'string' && width.indexOf('%') !== -1 &&\n !(navigator.userAgent.indexOf('Chrome') > -1) && this.parent.allowGrouping) {\n var elementWidth = this.parent.element.offsetWidth;\n width = parseInt(width, 10) / 100 * (elementWidth);\n }\n var header = this.parent.getHeaderTable();\n var content = this.parent.getContentTable();\n var fWidth = formatUnit(width);\n var headerCol;\n var frzCols = this.parent.getFrozenColumns();\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader');\n if (frzCols && index >= frzCols && mHdr && mHdr.querySelector('colgroup')) {\n headerCol = mHdr.querySelector('colgroup').children[index - frzCols];\n }\n else {\n headerCol = header.querySelector('colgroup').children[index];\n }\n if (headerCol) {\n headerCol.style.width = fWidth;\n }\n var contentCol;\n if (frzCols && index >= frzCols) {\n contentCol = this.parent.getContent().querySelector('.e-movablecontent')\n .querySelector('colgroup').children[index - frzCols];\n }\n else {\n contentCol = content.querySelector('colgroup').children[index];\n }\n if (contentCol) {\n contentCol.style.width = fWidth;\n }\n var edit = content.querySelector('.e-table.e-inline-edit');\n if (edit) {\n if (edit.querySelector('colgroup').children[index]) {\n edit.querySelector('colgroup').children[index].style.width = fWidth;\n }\n }\n };\n ColumnWidthService.prototype.getSiblingsHeight = function (element) {\n var previous = this.getHeightFromDirection(element, 'previous');\n var next = this.getHeightFromDirection(element, 'next');\n return previous + next;\n };\n ColumnWidthService.prototype.getHeightFromDirection = function (element, direction) {\n var sibling = element[direction + 'ElementSibling'];\n var result = 0;\n var classList = ['e-gridheader', 'e-gridfooter', 'e-groupdroparea', 'e-gridpager', 'e-toolbar'];\n while (sibling) {\n if (classList.some(function (value) { return sibling.classList.contains(value); })) {\n result += sibling.offsetHeight;\n }\n sibling = sibling[direction + 'ElementSibling'];\n }\n return result;\n };\n ColumnWidthService.prototype.getWidth = function (column) {\n if (isNullOrUndefined(column.width) && this.parent.allowResizing) {\n column.width = 200;\n }\n if (!column.width) {\n return null;\n }\n var width = parseInt(column.width.toString(), 10);\n if (column.minWidth && width < parseInt(column.minWidth.toString(), 10)) {\n return column.minWidth;\n }\n else if ((column.maxWidth && width > parseInt(column.maxWidth.toString(), 10))) {\n return column.maxWidth;\n }\n else {\n return column.width;\n }\n };\n ColumnWidthService.prototype.getTableWidth = function (columns) {\n var tWidth = 0;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n var cWidth = this.getWidth(column);\n if (column.visible !== false && cWidth !== null) {\n tWidth += parseInt(cWidth.toString(), 10);\n }\n }\n return tWidth;\n };\n ColumnWidthService.prototype.setWidthToFrozenTable = function () {\n var columns = this.parent.getColumns();\n columns.splice(this.parent.getFrozenColumns(), columns.length);\n var freezeWidth = formatUnit(this.getTableWidth(columns));\n this.parent.getHeaderTable().style.width = freezeWidth;\n this.parent.getContentTable().style.width = freezeWidth;\n };\n ColumnWidthService.prototype.setWidthToMovableTable = function () {\n var columns = this.parent.getColumns();\n columns.splice(0, this.parent.getFrozenColumns());\n var movableWidth = formatUnit(this.getTableWidth(columns));\n if (this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild) {\n this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild.style.width\n = movableWidth;\n }\n this.parent.getContent().querySelector('.e-movablecontent').firstElementChild.style.width =\n movableWidth;\n };\n ColumnWidthService.prototype.setWidthToTable = function () {\n var tWidth = formatUnit(this.getTableWidth(this.parent.getColumns()));\n if (this.parent.getFrozenColumns()) {\n this.setWidthToFrozenTable();\n this.setWidthToMovableTable();\n }\n else {\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }));\n }\n this.parent.getHeaderTable().style.width = tWidth;\n this.parent.getContentTable().style.width = tWidth;\n }\n var edit = this.parent.element.querySelector('.e-table.e-inline-edit');\n if (edit) {\n edit.style.width = tWidth;\n }\n };\n return ColumnWidthService;\n}());\nexport { ColumnWidthService };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { EventHandler, getValue, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, extend, Browser } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport * as event from '../base/constant';\n/**\n * FocusStrategy class\n * @hidden\n */\nvar FocusStrategy = /** @class */ (function () {\n function FocusStrategy(parent) {\n this.currentInfo = {};\n this.oneTime = true;\n this.swap = {};\n this.forget = true;\n this.skipFocus = true;\n this.focusByClick = false;\n this.prevIndexes = {};\n this.parent = parent;\n this.addEventListener();\n }\n FocusStrategy.prototype.focusCheck = function (e) {\n var target = e.target;\n this.focusByClick = true;\n this.skipFocus = target.classList.contains('e-grid');\n };\n FocusStrategy.prototype.onFocus = function () {\n if (this.parent.isDestroyed || Browser.isDevice || this.parent.enableVirtualization) {\n return;\n }\n this.setActive(this.parent.frozenRows === 0, this.parent.frozenColumns !== 0);\n var current = this.getContent().matrix.get(0, -1, [0, 1], null, this.getContent().validator());\n this.getContent().matrix.select(current[0], current[1]);\n if (this.skipFocus) {\n this.focus();\n this.skipFocus = false;\n }\n };\n FocusStrategy.prototype.passiveFocus = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n if (e.target && e.target.classList.contains('e-detailcell')) {\n this.currentInfo.skipAction = false;\n addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n }\n };\n FocusStrategy.prototype.onBlur = function (e) {\n if ((this.parent.isEdit || e && (!e.relatedTarget || closest(e.relatedTarget, '.e-grid')))) {\n return;\n }\n this.removeFocus();\n this.skipFocus = false;\n this.currentInfo.skipAction = false;\n if (this.getContent().getFocusInfo().elementToFocus) {\n this.getContent().getFocusInfo().elementToFocus.tabIndex = 0;\n }\n };\n FocusStrategy.prototype.onClick = function (e, force) {\n var isContent = !isNullOrUndefined(closest(e.target, '.e-gridcontent'));\n var isHeader = !isNullOrUndefined(closest(e.target, '.e-gridheader'));\n isContent = isContent && isHeader ? !isContent : isContent;\n var isFrozen = !isNullOrUndefined(closest(e.target, '.e-frozencontent')) ||\n !isNullOrUndefined(closest(e.target, '.e-frozenheader'));\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-gridheader')) ||\n e.target.classList.contains('e-content')) {\n return;\n }\n this.setActive(isContent, isFrozen);\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-gridheader')) ||\n e.target.classList.contains('e-filtermenudiv')) {\n this.clearOutline();\n return;\n }\n var beforeArgs = { cancel: false, byKey: false, byClick: !isNullOrUndefined(e.target), clickArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel || closest(e.target, '.e-inline-edit')) {\n return;\n }\n this.setActive(isContent, isFrozen);\n if (this.getContent()) {\n var returnVal = this.getContent().onClick(e, force);\n if (returnVal === false) {\n return;\n }\n this.focus();\n }\n };\n FocusStrategy.prototype.onKeyPress = function (e) {\n if (this.skipOn(e)) {\n return;\n }\n var beforeArgs = { cancel: false, byKey: true, byClick: false, keyArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel) {\n return;\n }\n var bValue = this.getContent().matrix.current;\n this.currentInfo.outline = true;\n var swapInfo = this.getContent().jump(e.action, bValue);\n this.swap = swapInfo;\n if (swapInfo.swap) {\n this.setActive(!swapInfo.toHeader, swapInfo.toFrozen);\n this.getContent().matrix.current = this.getContent().getNextCurrent(bValue, swapInfo, this.active, e.action);\n this.prevIndexes = {};\n }\n this.setActiveByKey(e.action, this.getContent());\n var returnVal = this.getContent().onKeyPress(e);\n if (returnVal === false) {\n this.clearIndicator();\n return;\n }\n e.preventDefault();\n this.focus(e);\n };\n FocusStrategy.prototype.skipOn = function (e) {\n var target = e.target;\n if (!target) {\n return false;\n }\n if (this.currentInfo.skipAction) {\n this.clearIndicator();\n return true;\n }\n if (['pageUp', 'pageDown'].indexOf(e.action) > -1) {\n this.clearIndicator();\n return true;\n }\n return (e.action === 'delete'\n || (this.parent.editSettings.mode !== 'Batch' && (this.parent.isEdit || ['insert', 'f2'].indexOf(e.action) > -1))\n || (closest(document.activeElement, '.e-filterbarcell') !== null ||\n closest(document.activeElement, '#' + this.parent.element.id + '_searchbar') !== null\n && ['enter', 'leftArrow', 'rightArrow',\n 'shiftLeft', 'shiftRight', 'ctrlPlusA'].indexOf(e.action) > -1)\n || (closest(target, '.e-gridcontent') === null && closest(target, '.e-gridheader') === null)\n || (e.action === 'space' && (!target.classList.contains('e-gridchkbox') && closest(target, '.e-gridchkbox') === null\n && closest(target, '.e-headerchkcelldiv') === null)));\n };\n FocusStrategy.prototype.getFocusedElement = function () {\n return this.currentInfo.elementToFocus;\n };\n FocusStrategy.prototype.getContent = function () {\n return this.active || this.content;\n };\n FocusStrategy.prototype.setActive = function (content, isFrozen) {\n this.active = content ? isFrozen ? this.fContent : this.content :\n isFrozen ? this.fHeader : this.header;\n };\n FocusStrategy.prototype.setFocusedElement = function (element) {\n var _this = this;\n this.currentInfo.elementToFocus = element;\n setTimeout(function () { return _this.currentInfo.elementToFocus.focus(); }, 0);\n };\n FocusStrategy.prototype.focus = function (e) {\n this.removeFocus();\n this.addFocus(this.getContent().getFocusInfo(), e);\n };\n FocusStrategy.prototype.removeFocus = function (e) {\n if (!this.currentInfo.element) {\n return;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n this.currentInfo.element.tabIndex = -1;\n };\n FocusStrategy.prototype.addFocus = function (info, e) {\n this.currentInfo = info;\n this.currentInfo.outline = info.outline && !isNullOrUndefined(e);\n if (!info.element) {\n return;\n }\n var isFocused = info.elementToFocus.classList.contains('e-focus');\n if (isFocused) {\n return;\n }\n if (this.currentInfo.outline) {\n addClass([info.element], ['e-focused']);\n }\n addClass([info.elementToFocus], ['e-focus']);\n info.element.tabIndex = 0;\n if (!isFocused) {\n this.setFocusedElement(info.elementToFocus);\n }\n this.parent.notify(event.cellFocused, {\n element: info.elementToFocus,\n parent: info.element,\n indexes: this.getContent().matrix.current,\n byKey: !isNullOrUndefined(e),\n byClick: isNullOrUndefined(e),\n keyArgs: e,\n isJump: this.swap.swap,\n container: this.getContent().getInfo(e),\n outline: !isNullOrUndefined(e),\n swapInfo: this.swap\n });\n var _a = this.getContent().matrix.current, rowIndex = _a[0], cellIndex = _a[1];\n this.prevIndexes = { rowIndex: rowIndex, cellIndex: cellIndex };\n this.focusedColumnUid = this.parent.getColumnByIndex(cellIndex).uid;\n this.focusByClick = false;\n };\n FocusStrategy.prototype.refreshMatrix = function (content) {\n var _this = this;\n return function (e) {\n if (content && (e.args && e.args.isFrozen) && !_this.fContent) {\n _this.fContent = new FixedContentFocus(_this.parent);\n }\n else if (content && !_this.content) {\n _this.content = new ContentFocus(_this.parent);\n }\n if (!content && (e.args && e.args.isFrozen) && !_this.fHeader) {\n _this.fHeader = new FixedHeaderFocus(_this.parent);\n }\n else if (!content && !_this.header) {\n _this.header = new HeaderFocus(_this.parent);\n }\n var cFocus = content ? (e.args && e.args.isFrozen) ? _this.fContent : _this.content :\n (e.args && e.args.isFrozen) ? _this.fHeader : _this.header;\n var rows = content ? e.rows.slice(_this.parent.frozenRows) : e.rows;\n var updateRow = content ? e.rows.slice(0, _this.parent.frozenRows) : e.rows;\n var 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 if (e && e.args && e.args.requestType === 'virtualscroll') {\n if (_this.currentInfo.uid) {\n var index_1;\n var bool = e.rows.some(function (row, i) {\n index_1 = i;\n return row.uid === _this.currentInfo.uid;\n });\n if (bool) {\n _this.content.matrix.current[0] = index_1;\n _this.content.matrix.current[1] = _this.parent.getColumnIndexByUid(_this.focusedColumnUid) || 0;\n var focusElement = _this.getContent().getFocusInfo().elementToFocus;\n if (focusElement) {\n var cellPosition = focusElement.getBoundingClientRect();\n var gridPosition = _this.parent.element.getBoundingClientRect();\n if (cellPosition.top >= 0 && cellPosition.left >= 0 &&\n cellPosition.right <= Math.min(gridPosition.right, window.innerWidth ||\n document.documentElement.clientWidth) &&\n cellPosition.bottom <= Math.min(gridPosition.bottom, window.innerHeight ||\n document.documentElement.clientHeight)) {\n _this.focus();\n }\n }\n }\n }\n else if (e.args.focusElement && e.args.focusElement.classList.contains('e-filtertext')) {\n var focusElement = _this.parent.element.querySelector('#' + e.args.focusElement.id);\n if (focusElement) {\n focusElement.focus();\n }\n }\n }\n };\n };\n FocusStrategy.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.add(this.parent.element, 'mousedown', this.focusCheck, this);\n EventHandler.add(this.parent.element, 'focus', this.onFocus, this);\n this.parent.element.addEventListener('focus', this.passiveHandler = function (e) { return _this.passiveFocus(e); }, true);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n this.parent.on(event.keyPressed, this.onKeyPress, this);\n this.parent.on(event.click, this.onClick, this);\n this.parent.on(event.contentReady, this.refreshMatrix(true), this);\n this.parent.on(event.headerRefreshed, this.refreshMatrix(), this);\n this.parent.on('close-edit', this.restoreFocus, this);\n ['start-edit', 'start-add'].forEach(function (evt) { return _this.parent.on(evt, _this.clearIndicator, _this); });\n ['sorting'].forEach(function (action) { return _this.parent.on(action + \"-complete\", _this.restoreFocus, _this); });\n this.parent.on(event.batchAdd, this.refreshMatrix(true), this);\n this.parent.on(event.batchCancel, this.refreshMatrix(true), this);\n this.parent.on(event.batchDelete, this.refreshMatrix(true), this);\n this.parent.on(event.detailDataBound, this.refreshMatrix(true), this);\n this.parent.on(event.onEmpty, this.refreshMatrix(true), this);\n this.parent.on(event.cellFocused, this.internalCellFocus, this);\n };\n FocusStrategy.prototype.removeEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(this.parent.element, 'mousedown', this.focusCheck);\n EventHandler.remove(this.parent.element, 'focus', this.onFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n this.parent.element.removeEventListener('focus', this.passiveHandler, true);\n this.parent.off(event.keyPressed, this.onKeyPress);\n this.parent.off(event.click, this.onClick);\n this.parent.off(event.contentReady, this.refreshMatrix(true));\n this.parent.off(event.headerRefreshed, this.refreshMatrix());\n this.parent.off('close-edit', this.restoreFocus);\n ['start-edit', 'start-add'].forEach(function (evt) { return _this.parent.off(evt, _this.clearOutline); });\n ['sorting'].forEach(function (action) { return _this.parent.off(action + \"-complete\", _this.restoreFocus); });\n this.parent.off(event.batchAdd, this.refreshMatrix(true));\n this.parent.off(event.batchDelete, this.refreshMatrix(true));\n this.parent.off(event.batchCancel, this.refreshMatrix(true));\n this.parent.off(event.detailDataBound, this.refreshMatrix(true));\n this.parent.off(event.onEmpty, this.refreshMatrix(true));\n this.parent.off(event.cellFocused, this.internalCellFocus);\n };\n FocusStrategy.prototype.destroy = function () {\n this.removeEventListener();\n };\n FocusStrategy.prototype.restoreFocus = function () {\n this.addFocus(this.getContent().getFocusInfo());\n };\n FocusStrategy.prototype.clearOutline = function () {\n this.getContent().matrix.current = this.getContent().matrix.get(0, -1, [0, 1], 'downArrow', this.getContent().validator());\n this.clearIndicator();\n };\n FocusStrategy.prototype.clearIndicator = function () {\n if (!this.currentInfo.element || !this.currentInfo.elementToFocus) {\n return;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focus', 'e-focused']);\n };\n FocusStrategy.prototype.getPrevIndexes = function () {\n var forget = this.forget;\n this.forget = false;\n return forget ? { rowIndex: null, cellIndex: null } : this.prevIndexes;\n };\n FocusStrategy.prototype.forgetPrevious = function () {\n this.forget = true;\n };\n FocusStrategy.prototype.setActiveByKey = function (action, active) {\n var _this = this;\n if (this.parent.frozenColumns === 0 && this.parent.frozenRows === 0) {\n return;\n }\n var info;\n var actions = {\n 'home': function () { return ({ toHeader: !info.isContent, toFrozen: true }); },\n 'end': function () { return ({ toHeader: !info.isContent, toFrozen: false }); },\n 'ctrlHome': function () { return ({ toHeader: true, toFrozen: _this.parent.frozenColumns !== 0 }); },\n 'ctrlEnd': function () { return ({ toHeader: false, toFrozen: false }); }\n };\n if (!(action in actions)) {\n return;\n }\n info = active.getInfo();\n var swap = actions[action]();\n this.setActive(!swap.toHeader, swap.toFrozen);\n this.getContent().matrix.current = active.matrix.current;\n };\n FocusStrategy.prototype.internalCellFocus = function (e) {\n if (!(e.byKey && e.container.isContent && e.keyArgs.action === 'enter'\n && (e.parent.classList.contains('e-detailcell') ||\n e.parent.classList.contains('e-unboundcell') || e.parent.classList.contains('e-templatecell')))) {\n return;\n }\n this.clearIndicator();\n var focusEle = this.getContent().getFocusable(this.getFocusedElement());\n this.setFocusedElement(focusEle);\n this.currentInfo.skipAction = true;\n };\n return FocusStrategy;\n}());\nexport { FocusStrategy };\n/**\n * Create matrix from row collection which act as mental model for cell navigation\n * @hidden\n */\nvar Matrix = /** @class */ (function () {\n function Matrix() {\n this.matrix = [];\n this.current = [];\n }\n Matrix.prototype.set = function (rowIndex, columnIndex, allow) {\n rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex, this.columns));\n this.matrix[rowIndex] = this.matrix[rowIndex] || [];\n this.matrix[rowIndex][columnIndex] = allow ? 1 : 0;\n };\n Matrix.prototype.get = function (rowIndex, columnIndex, navigator, action, validator) {\n var tmp = columnIndex;\n if (rowIndex + navigator[0] < 0) {\n return [rowIndex, columnIndex];\n }\n rowIndex = Math.max(0, Math.min(rowIndex + navigator[0], this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex + navigator[1], this.matrix[rowIndex].length - 1));\n if (tmp + navigator[1] > this.matrix[rowIndex].length - 1 && validator(rowIndex, columnIndex, action)) {\n return [rowIndex, tmp];\n }\n var first = this.first(this.matrix[rowIndex], columnIndex, navigator, true, action);\n columnIndex = first === null ? tmp : first;\n var val = getValue(rowIndex + \".\" + columnIndex, this.matrix);\n if (rowIndex === this.rows && action === 'downArrow') {\n navigator[0] = -1;\n }\n return this.inValid(val) || !validator(rowIndex, columnIndex, action) ?\n this.get(rowIndex, tmp, navigator, action, validator) : [rowIndex, columnIndex];\n };\n Matrix.prototype.first = function (vector, index, navigator, moveTo, action) {\n if (((index < 0 || index === vector.length) && this.inValid(vector[index])\n && (action !== 'upArrow' && action !== 'downArrow')) || !vector.some(function (v) { return v === 1; })) {\n return null;\n }\n return !this.inValid(vector[index]) ? index :\n this.first(vector, (['upArrow', 'downArrow', 'shiftUp', 'shiftDown'].indexOf(action) !== -1) ? moveTo ? 0 : ++index : index + navigator[1], navigator, false, action);\n };\n Matrix.prototype.select = function (rowIndex, columnIndex) {\n rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex, this.matrix[rowIndex].length - 1));\n this.current = [rowIndex, columnIndex];\n };\n Matrix.prototype.generate = function (rows, selector) {\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 = !isNullOrUndefined(this.getTable().rows[rowIndex]) ? this.getTable().rows[rowIndex].cells[cellIndex] : null;\n if (!info.element) {\n return info;\n }\n info.elementToFocus = !info.element.classList.contains('e-unboundcell') && !info.element.classList.contains('e-detailcell')\n ? this.getFocusable(info.element) : info.element;\n info.outline = true;\n info.uid = info.element.parentElement.getAttribute('data-uid');\n return info;\n };\n ContentFocus.prototype.getFocusable = function (element) {\n var query = 'button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n if (this.parent.isEdit) {\n query = 'input:not([type=\"hidden\"]), select:not([aria-hidden=\"true\"]), textarea';\n }\n var child = [].slice.call(element.querySelectorAll(query));\n /* Select the first focusable child element\n * if no child found then select the cell itself.\n * if Grid is in editable state, check for editable control inside child.\n */\n return child.length ? child[0] : element;\n };\n ContentFocus.prototype.selector = function (row, cell) {\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.getFrozenColumns() ?\n this.parent.getHeaderContent().querySelector('.e-movableheader .e-table') :\n this.parent.getHeaderTable());\n };\n HeaderFocus.prototype.onClick = function (e) {\n var target = e.target;\n target = (target.classList.contains('e-headercell') ? target : closest(target, 'th'));\n if (!target && this.parent.frozenRows !== 0) {\n target = (e.target.classList.contains('e-rowcell') ? e.target :\n closest(e.target, 'td'));\n }\n if (!target) {\n return;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val)) {\n return false;\n }\n this.matrix.select(target.parentElement.rowIndex, target.cellIndex);\n };\n HeaderFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n info.element = this.getTable().rows[rowIndex].cells[cellIndex];\n info.elementToFocus = this.getFocusable(info.element);\n info.outline = !info.element.classList.contains('e-filterbarcell');\n return info;\n };\n HeaderFocus.prototype.selector = function (row, cell) {\n return (cell.visible && (cell.column.field !== undefined || cell.isTemplate)) || cell.column.type === 'checkbox' ||\n cell.cellType === CellType.StackedHeader;\n };\n HeaderFocus.prototype.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 &&\n (action === 'leftArrow' || action === 'shiftTab') && current[1] === 0;\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n return {\n swap: ((action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1) ||\n frozenSwap,\n toHeader: frozenSwap,\n toFrozen: frozenSwap\n };\n };\n HeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current1 = [];\n if (action === 'upArrow' || action === 'shiftEnter') {\n current1[0] = this.matrix.matrix.length;\n current1[1] = previous[1];\n }\n else if (action === 'rightArrow' || action === 'tab') {\n current1[0] = previous[0];\n current1[1] = -1;\n }\n return current1;\n };\n HeaderFocus.prototype.generateRows = function (rows) {\n var _this = this;\n var length = this.matrix.matrix.length;\n if (this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar') {\n this.matrix.rows = ++this.matrix.rows;\n rows[0].cells.forEach(function (cell, cIndex) {\n return _this.matrix.set(length, cIndex, cell.visible && cell.column.allowFiltering !== false);\n });\n }\n };\n HeaderFocus.prototype.getInfo = function (e) {\n return extend(_super.prototype.getInfo.call(this, e), { isContent: false, isHeader: true });\n };\n HeaderFocus.prototype.validator = function () {\n return function () { return true; };\n };\n HeaderFocus.prototype.shouldFocusChange = function (e) {\n var _a = this.matrix.current, 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 current2 = [];\n if (action === 'leftArrow' || action === 'shiftTab') {\n current2[0] = previous[0];\n current2[1] = active.matrix.columns + 1;\n }\n else if (action === 'downArrow' || action === 'enter') {\n current2[0] = -1;\n current2[1] = previous[1];\n }\n return current2;\n };\n return FixedContentFocus;\n}(ContentFocus));\nexport { FixedContentFocus };\nvar FixedHeaderFocus = /** @class */ (function (_super) {\n __extends(FixedHeaderFocus, _super);\n function FixedHeaderFocus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FixedHeaderFocus.prototype.jump = function (action, current) {\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n return {\n swap: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1\n || ((action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns),\n toHeader: (action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns,\n toFrozen: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1\n };\n };\n FixedHeaderFocus.prototype.getTable = function () {\n return (this.parent.getHeaderContent().querySelector('.e-frozenheader .e-table'));\n };\n FixedHeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current3 = [];\n if (action === 'leftArrow' || action === 'shiftTab') {\n current3[0] = previous[0];\n current3[1] = active.matrix.columns + 1;\n }\n else if (action === 'upArrow' || action === 'shiftEnter') {\n current3[0] = this.matrix.matrix.length;\n current3[1] = previous[1];\n }\n return current3;\n };\n return FixedHeaderFocus;\n}(HeaderFocus));\nexport { FixedHeaderFocus };\n/** @hidden */\nvar SearchBox = /** @class */ (function () {\n function SearchBox(searchBox) {\n this.searchBox = searchBox;\n }\n SearchBox.prototype.searchFocus = function (args) {\n args.target.parentElement.classList.add('e-input-focus');\n };\n SearchBox.prototype.searchBlur = function (args) {\n args.target.parentElement.classList.remove('e-input-focus');\n };\n SearchBox.prototype.wireEvent = function () {\n if (this.searchBox) {\n EventHandler.add(this.searchBox, 'focus', this.searchFocus, this);\n EventHandler.add(this.searchBox, 'blur', this.searchBlur, this);\n }\n };\n SearchBox.prototype.unWireEvent = function () {\n if (this.searchBox) {\n EventHandler.remove(this.searchBox, 'focus', this.searchFocus);\n EventHandler.remove(this.searchBox, 'blur', this.searchBlur);\n }\n };\n return SearchBox;\n}());\nexport { SearchBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, 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.disableUI = false;\n this.parent = parent;\n this.selectionSettings = selectionSettings;\n this.factory = locator.getService('rendererFactory');\n this.focus = locator.getService('focus');\n this.addEventListener();\n }\n Selection.prototype.initializeSelection = function () {\n EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n };\n /**\n * The function used to trigger onActionBegin\n * @return {void}\n * @hidden\n */\n Selection.prototype.onActionBegin = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n Selection.prototype.fDataUpdate = function (args) {\n if (args.cellIndex || args.rowIndex) {\n var rowObj = this.getRowObj(isNullOrUndefined(args.rowIndex) ? isNullOrUndefined(args.cellIndex) ?\n this.currentIndex : args.cellIndex.rowIndex : args.rowIndex);\n args.foreignKeyData = rowObj.foreignKeyData;\n }\n return args;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Selection.prototype.onActionComplete = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n /**\n * To destroy the selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.hidePopUp();\n this.clearSelection();\n this.removeEventListener();\n EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n };\n Selection.prototype.isEditing = function () {\n return (this.parent.editSettings.mode === 'Normal' || (this.parent.editSettings.mode === 'Batch' &&\n this.parent.editModule.formObj && !this.parent.editModule.formObj.validate())) &&\n this.parent.isEdit && !this.parent.isPersistSelection;\n };\n Selection.prototype.getSelectedMovableRow = function (index) {\n var gObj = this.parent;\n if (gObj.getFrozenColumns()) {\n return gObj.getMovableRowByIndex(index);\n }\n return null;\n };\n /**\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 (gObj.enableVirtualization && gObj.allowGrouping && gObj.groupSettings.columns.length && selectedRow) {\n selectData = gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid')).data;\n }\n if (!this.isRowType() || !selectedRow || this.isEditing()) {\n // if (this.isEditing()) {\n // gObj.selectedRowIndex = index;\n // }\n return;\n }\n var isRowSelected = selectedRow.hasAttribute('aria-selected');\n isToggle = !isToggle ? isToggle :\n !this.selectedRowIndexes.length ? false :\n (this.selectedRowIndexes.length === 1 ? (index === this.selectedRowIndexes[0]) : false);\n var args;\n var can = 'cancel';\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, row: selectedRow,\n previousRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex, target: this.target, 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 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 this.updateRowProps(index);\n };\n Selection.prototype.addMovableArgs = function (targetObj, mRow) {\n if (this.parent.getFrozenColumns()) {\n var mObj = { mRow: mRow, previousMovRow: this.parent.getMovableRows()[this.prevRowIndex] };\n targetObj = __assign({}, targetObj, mObj);\n }\n return targetObj;\n };\n /**\n * Selects a range of rows from start and end row indexes.\n * @param {number} startIndex - Specifies the start row index.\n * @param {number} endIndex - Specifies the end row index.\n * @return {void}\n */\n Selection.prototype.selectRowsByRange = function (startIndex, endIndex) {\n this.selectRows(this.getCollectionFromIndexes(startIndex, endIndex));\n this.parent.selectedRowIndex = endIndex;\n };\n /**\n * Selects a collection of rows by index.\n * @param {number[]} rowIndexes - Specifies an array of row indexes.\n * @return {void}\n */\n Selection.prototype.selectRows = function (rowIndexes) {\n var gObj = this.parent;\n var rowIndex = !this.isSingleSel() ? rowIndexes[0] : rowIndexes[rowIndexes.length - 1];\n var selectedRow = gObj.getRowByIndex(rowIndex);\n var selectedMovableRow = this.getSelectedMovableRow(rowIndex);\n var frzCols = gObj.getFrozenColumns();\n var can = 'cancel';\n var selectedData = gObj.getCurrentViewRecords()[rowIndexes[0]];\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n var args = {\n rowIndexes: rowIndexes, row: selectedRow, rowIndex: rowIndex, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n data: selectedData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n this.clearRow();\n gObj.selectedRowIndex = rowIndexes.slice(-1)[0];\n if (!this.isSingleSel()) {\n for (var _i = 0, rowIndexes_1 = rowIndexes; _i < rowIndexes_1.length; _i++) {\n var rowIdx = rowIndexes_1[_i];\n this.updateRowSelection(gObj.getRowByIndex(rowIdx), rowIdx);\n if (frzCols) {\n this.updateRowSelection(gObj.getMovableRowByIndex(rowIdx), rowIdx);\n }\n this.updateRowProps(rowIndex);\n }\n }\n else {\n this.updateRowSelection(gObj.getRowByIndex(rowIndex), rowIndex);\n if (frzCols) {\n this.updateRowSelection(gObj.getMovableRowByIndex(rowIndex), rowIndex);\n }\n this.updateRowProps(rowIndex);\n }\n args = {\n rowIndexes: rowIndexes, row: selectedRow, rowIndex: rowIndex, target: this.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\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n if (this.isSingleSel()) {\n this.clearRow();\n }\n this.updateRowSelection(selectedRow, rowIndex);\n if (frzCols) {\n this.updateRowSelection(selectedMovableRow, rowIndex);\n }\n }\n if (!isUnSelected) {\n args = {\n data: rowObj.data, rowIndex: rowIndex, row: selectedRow, target: this.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 this.updateRowProps(rowIndex);\n if (this.isSingleSel()) {\n break;\n }\n }\n };\n Selection.prototype.getCollectionFromIndexes = function (startIndex, endIndex) {\n var indexes = [];\n var _a = (startIndex < endIndex) ?\n { i: startIndex, max: endIndex } : { i: endIndex, max: startIndex }, i = _a.i, max = _a.max;\n for (; i <= max; i++) {\n indexes.push(i);\n }\n if (startIndex > endIndex) {\n indexes.reverse();\n }\n return indexes;\n };\n Selection.prototype.clearRow = function () {\n this.clearRowSelection();\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.parent.selectedRowIndex = -1;\n if (this.isSingleSel() && this.parent.isPersistSelection) {\n this.selectedRowState = {};\n }\n };\n Selection.prototype.updateRowProps = function (startIndex) {\n this.prevRowIndex = startIndex;\n this.isRowSelected = this.selectedRowIndexes.length && true;\n };\n Selection.prototype.updatePersistCollection = function (selectedRow, chkState) {\n var _this = this;\n if (this.parent.isPersistSelection && !isNullOrUndefined(selectedRow)) {\n var rowObj = this.getRowObj(selectedRow);\n var pKey_1 = rowObj.data ? rowObj.data[this.primaryKey] : null;\n if (pKey_1 === null) {\n return;\n }\n rowObj.isSelected = chkState;\n if (chkState) {\n this.selectedRowState[pKey_1] = chkState;\n if (!this.persistSelectedData.some(function (data) { return data[_this.primaryKey] === pKey_1; })) {\n this.persistSelectedData.push(rowObj.data);\n }\n }\n else {\n this.updatePersistDelete(pKey_1);\n }\n }\n };\n Selection.prototype.updatePersistDelete = function (pKey) {\n var _this = this;\n delete (this.selectedRowState[pKey]);\n var index;\n var isPresent = this.persistSelectedData.some(function (data, i) {\n index = i;\n return data[_this.primaryKey] === pKey;\n });\n if (isPresent) {\n this.persistSelectedData.splice(index, 1);\n }\n };\n Selection.prototype.updateCheckBoxes = function (row, chkState) {\n if (!isNullOrUndefined(row)) {\n var chkBox = row.querySelector('.e-checkselect');\n if (!isNullOrUndefined(chkBox)) {\n removeAddCboxClasses(chkBox.nextElementSibling, chkState);\n if (isNullOrUndefined(this.checkedTarget) || (!isNullOrUndefined(this.checkedTarget)\n && !this.checkedTarget.classList.contains('e-checkselectall'))) {\n this.setCheckAllState(parseInt(row.getAttribute('aria-rowindex'), 10));\n }\n }\n }\n };\n Selection.prototype.updateRowSelection = function (selectedRow, startIndex) {\n if (!selectedRow) {\n return;\n }\n this.selectedRowIndexes.push(startIndex);\n var len = this.selectedRowIndexes.length;\n if (this.parent.getFrozenColumns() && len > 1) {\n if ((this.selectedRowIndexes[len - 2] === this.selectedRowIndexes[len - 1])) {\n this.selectedRowIndexes.pop();\n }\n }\n this.selectedRecords.push(selectedRow);\n selectedRow.setAttribute('aria-selected', 'true');\n this.updatePersistCollection(selectedRow, true);\n this.updateCheckBoxes(selectedRow, true);\n this.addRemoveClassesForRow(selectedRow, true, null, 'e-selectionbackground', 'e-active');\n if (!this.preventFocus) {\n var target = this.focus.getPrevIndexes().cellIndex ?\n selectedRow.cells[this.focus.getPrevIndexes().cellIndex] :\n selectedRow.querySelector('.e-selectionbackground:not(.e-hide)');\n if (!target) {\n return;\n }\n this.focus.onClick({ target: target }, true);\n }\n };\n /**\n * Deselects the currently selected rows and cells.\n * @return {void}\n */\n Selection.prototype.clearSelection = function () {\n if (!this.parent.isPersistSelection || (this.parent.isPersistSelection && !this.parent.isEdit) ||\n (!isNullOrUndefined(this.checkedTarget) && this.checkedTarget.classList.contains('e-checkselectall'))) {\n var span = this.parent.element.querySelector('.e-gridpopup').querySelector('span');\n if (span.classList.contains('e-rowselect')) {\n span.classList.remove('e-spanclicked');\n }\n this.clearRowSelection();\n this.clearCellSelection();\n this.enableSelectMultiTouch = false;\n }\n };\n /**\n * Deselects the currently selected rows.\n * @return {void}\n */\n Selection.prototype.clearRowSelection = function () {\n var _this = this;\n if (this.isRowSelected) {\n var gObj = this.parent;\n var rows = this.parent.getDataRows();\n var data = [];\n var row = [];\n var mRow = [];\n var rowIndex = [];\n var frzCols = gObj.getFrozenColumns();\n var foreignKeyData = [];\n var 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 if (!_this.disableUI) {\n ele.removeAttribute('aria-selected');\n _this.addRemoveClassesForRow(ele, false, true, 'e-selectionbackground', 'e-active');\n }\n _this.updatePersistCollection(ele, false);\n _this.updateCheckBoxes(ele);\n });\n for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n var movableRow = this.getSelectedMovableRow(this.selectedRowIndexes[i]);\n if (movableRow) {\n if (!this.disableUI) {\n movableRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(movableRow, false, true, 'e-selectionbackground', 'e-active');\n }\n this.updatePersistCollection(movableRow, false);\n }\n }\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.isRowSelected = false;\n this.parent.selectedRowIndex = -1;\n this.rowDeselect(events.rowDeselected, rowIndex, data, row, foreignKeyData, 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 var args;\n var cncl = 'cancel';\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n var selectedTable;\n var cIdx;\n this.currentIndex = cellIndex.rowIndex;\n var selectedData = 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 this.currentIndex = startIndex.rowIndex;\n var cncl = 'cancel';\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[cncl] === true) {\n return;\n }\n this.clearCell();\n if (startIndex.rowIndex > endIndex.rowIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex.rowIndex; i <= endIndex.rowIndex; i++) {\n if (this.selectionSettings.cellSelectionMode !== '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 = this.parent.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.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.initialEnd, this.initializeSelection, this);\n this.parent.on(events.rowSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.cellSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.cellFocused, this.onCellFocused, this);\n this.parent.on(events.beforeFragAppend, this.clearSelAfterRefresh, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.actionBeginFunction = this.actionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.on(events.rowsRemoved, this.rowsRemoved, this);\n this.parent.on(events.headerRefreshed, this.refreshHeader, this);\n this.addEventListener_checkbox();\n };\n /**\n * @hidden\n */\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.initialEnd, this.initializeSelection);\n this.parent.off(events.rowSelectionComplete, this.onActionComplete);\n this.parent.off(events.cellSelectionComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.off(events.beforeFragAppend, this.clearSelAfterRefresh);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.off(events.rowsRemoved, this.rowsRemoved);\n this.parent.off(events.headerRefreshed, this.refreshHeader);\n this.removeEventListener_checkbox();\n };\n Selection.prototype.columnPositionChanged = function () {\n if (!this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n Selection.prototype.refreshHeader = function () {\n this.setCheckAllState();\n };\n Selection.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n delete (this.selectedRowState[e.records[i][this.primaryKey]]);\n --this.totalRecordsCount;\n }\n this.setCheckAllState();\n };\n ;\n Selection.prototype.beforeFragAppend = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n ;\n Selection.prototype.getCheckAllBox = function () {\n return this.parent.getHeaderContent().querySelector('.e-checkselectall');\n };\n Selection.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n Selection.prototype.render = function (e) {\n EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n };\n Selection.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n if (!isNullOrUndefined(e.properties.type) && this.selectionSettings.type === 'Single') {\n if (this.selectedRowCellIndexes.length > 1) {\n this.clearCellSelection();\n }\n if (this.selectedRowIndexes.length > 1) {\n this.clearRowSelection();\n }\n this.enableSelectMultiTouch = false;\n this.hidePopUp();\n }\n if (!isNullOrUndefined(e.properties.mode) ||\n !isNullOrUndefined(e.properties.cellSelectionMode)) {\n this.clearSelection();\n }\n this.checkBoxSelectionChanged();\n this.initPerisistSelection();\n var checkboxColumn = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length) {\n gObj.isCheckBoxSelection = !(this.selectionSettings.checkboxMode === 'ResetOnRowClick');\n }\n };\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 var _this = this;\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n if (e.action === 'add' && this.isCheckedOnAdd) {\n var rowObj = this.parent.getRowObjectFromUID(this.parent.getRows()[e.selectedRow].getAttribute('data-uid'));\n this.selectedRowState[rowObj.data[this.primaryKey]] = rowObj.isSelected = this.isCheckedOnAdd;\n }\n this.refreshPersistSelection();\n }\n if (e.requestType === 'delete' && this.parent.isPersistSelection) {\n e.data.slice().forEach(function (data) {\n if (!isNullOrUndefined(data[_this.primaryKey])) {\n _this.updatePersistDelete(data[_this.primaryKey]);\n }\n });\n this.setCheckAllState();\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n }\n };\n Selection.prototype.onDataBound = function () {\n if (!this.parent.enableVirtualization && this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n };\n Selection.prototype.checkSelectAllAction = function (checkState) {\n var cRenderer = this.getRenderer();\n var editForm = this.parent.element.querySelector('.e-gridform');\n this.checkedTarget = this.getCheckAllBox();\n if (checkState && this.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 = this.parent.getDataModule().isRemote() ? this.persistSelectedData : [];\n }\n else if (this.parent.checkAllRows === 'Check') {\n this.setRowSelection(true);\n this.persistSelectedData = !this.parent.getDataModule().isRemote() ? this.getData().slice() : this.persistSelectedData;\n }\n }\n if (!isNullOrUndefined(editForm)) {\n var editChkBox = editForm.querySelector('.e-edit-checkselect');\n removeAddCboxClasses(editChkBox.nextElementSibling, checkState);\n }\n };\n Selection.prototype.checkSelectAll = function (checkBox) {\n var _this = this;\n var stateStr = this.getCheckAllStatus(checkBox);\n var state = stateStr === 'Check';\n if (stateStr === 'Intermediate') {\n state = this.parent.getCurrentViewRecords().some(function (data) {\n return data[_this.primaryKey] in _this.selectedRowState;\n });\n }\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.updateSelectedRowIndex = function (index) {\n if (this.parent.isCheckBoxSelection && this.parent.enableVirtualization && !this.parent.getDataModule().isRemote()) {\n if (this.parent.checkAllRows === 'Check') {\n this.selectedRowIndexes = [];\n for (var data = 0; data < this.getData().length; data++) {\n this.selectedRowIndexes.push(data);\n }\n }\n else if (this.parent.checkAllRows === 'Uncheck') {\n this.selectedRowIndexes = [];\n }\n else {\n if (index && this.parent.getRowByIndex(index).getAttribute('aria-selected') === 'false') {\n var selectedVal = this.selectedRowIndexes.indexOf(index);\n this.selectedRowIndexes.splice(selectedVal, 1);\n }\n }\n }\n };\n ;\n Selection.prototype.setCheckAllState = function (index, isInteraction) {\n if (this.parent.isCheckBoxSelection || this.parent.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n var checkedLen = Object.keys(this.selectedRowState).length;\n if (!this.parent.isPersistSelection) {\n checkedLen = this.selectedRecords.length;\n this.totalRecordsCount = this.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 && this.totalRecordsCount || (this.parent.enableVirtualization\n && !this.parent.allowPaging && !this.parent.getDataModule().isRemote() && checkedLen === this.getData().length)) {\n addClass([spanEle], ['e-check']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, true, true);\n }\n this.parent.checkAllRows = 'Check';\n }\n else if (checkedLen === 0 || this.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 if (checkedLen === 0 && this.parent.getCurrentViewRecords().length === 0) {\n addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n else {\n removeClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n }\n else {\n addClass([spanEle], ['e-stop']);\n this.parent.checkAllRows = 'Intermediate';\n }\n if (this.parent.enableVirtualization && !this.parent.allowPaging && !this.parent.getDataModule().isRemote()) {\n this.updateSelectedRowIndex(index);\n }\n }\n }\n };\n Selection.prototype.clickHandler = function (e) {\n var target = e.target;\n this.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 if (this.parent.isCheckBoxSelection || (!this.parent.isCheckBoxSelection && !this.target.classList.contains('e-gridchkbox'))) {\n this.selectRowsByRange(isUndefined(this.prevRowIndex) ? rowIndex : this.prevRowIndex, rowIndex);\n }\n else {\n this.addRowsToSelection([rowIndex]);\n }\n this.selectCellsByRange(isUndefined(this.prevCIdxs) ? { rowIndex: rowIndex, cellIndex: cellIndex } : this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\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 && !this.parent.isCheckBoxSelection) {\n this.clearSelection();\n }\n return;\n }\n var _a = e.container.isContent ? e.container.indexes : e.indexes, rowIndex = _a[0], cellIndex = _a[1];\n var prev = this.focus.getPrevIndexes();\n if (this.parent.frozenRows) {\n if (e.container.isHeader && (e.element.tagName === 'TD' || closest(e.element, '.e-rowcell'))) {\n var thLen = this.parent.getHeaderTable().querySelector('thead').childElementCount;\n rowIndex -= thLen;\n prev.rowIndex = prev.rowIndex ? prev.rowIndex - thLen : null;\n }\n else {\n rowIndex += this.parent.frozenRows;\n prev.rowIndex = prev.rowIndex === 0 || !isNullOrUndefined(prev.rowIndex) ? prev.rowIndex + this.parent.frozenRows : null;\n }\n if (this.parent.getFrozenColumns()) {\n var cIdx = Number(e.element.getAttribute('aria-colindex'));\n prev.cellIndex = prev.cellIndex ? (prev.cellIndex === cellIndex ? cIdx : cIdx - 1) : null;\n cellIndex = cIdx;\n }\n }\n if (headerAction || (['ctrlPlusA', 'escape'].indexOf(e.keyArgs.action) === -1 && e.keyArgs.action !== 'space' &&\n rowIndex === prev.rowIndex && cellIndex === prev.cellIndex)) {\n return;\n }\n this.preventFocus = true;\n switch (e.keyArgs.action) {\n case 'downArrow':\n case 'upArrow':\n case 'enter':\n case 'shiftEnter':\n this.applyDownUpKey(rowIndex, cellIndex);\n break;\n case 'rightArrow':\n case 'leftArrow':\n this.applyRightLeftKey(rowIndex, cellIndex);\n break;\n case 'shiftDown':\n case 'shiftUp':\n this.shiftDownKey(rowIndex, cellIndex);\n break;\n case 'shiftLeft':\n case 'shiftRight':\n this.applyShiftLeftRightKey(rowIndex, cellIndex);\n break;\n case 'home':\n case 'end':\n cellIndex = e.keyArgs.action === 'end' ? this.getLastColIndex(rowIndex) : 0;\n this.applyHomeEndKey(rowIndex, cellIndex);\n break;\n case 'ctrlHome':\n case 'ctrlEnd':\n this.applyCtrlHomeEndKey(rowIndex, cellIndex);\n break;\n case 'escape':\n this.clearSelection();\n break;\n case 'ctrlPlusA':\n this.ctrlPlusA();\n break;\n case 'space':\n this.applySpaceSelection(e.element);\n break;\n }\n this.preventFocus = false;\n };\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.dataReady = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.disableUI = true;\n this.clearSelection();\n this.disableUI = false;\n }\n };\n Selection.prototype.actionCompleteHandler = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n };\n return Selection;\n}());\nexport { Selection };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isActionPrevent } from '../base/util';\n/**\n * The `Search` module is used to handle search action.\n */\nvar Search = /** @class */ (function () {\n /**\n * Constructor for Grid search module.\n * @hidden\n */\n function Search(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * Searches Grid records by given key.\n *\n * > You can customize the default search action by using [`searchSettings`](./api-grid.html#searchsettings-searchsettingsmodel).\n * @param {string} searchString - Defines the key.\n * @return {void}\n */\n Search.prototype.search = function (searchString) {\n var gObj = this.parent;\n searchString = isNullOrUndefined(searchString) ? '' : searchString;\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.search, arg1: searchString });\n return;\n }\n if (searchString !== gObj.searchSettings.key) {\n gObj.searchSettings.key = searchString.toString();\n gObj.dataBind();\n }\n else if (this.refreshSearch) {\n gObj.refresh();\n }\n };\n /**\n * @hidden\n */\n Search.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.searchComplete, this.onSearchComplete, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.actionCompleteFunc = this.onActionComplete.bind(this);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n };\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 if (this.parent.columnQueryMode !== 'All') {\n this.parent.refresh();\n }\n };\n return ShowHide;\n}());\nexport { ShowHide };\n","import { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getScrollBarWidth, getUpdateUsingRaf } from '../base/util';\nimport { scroll, contentReady, uiUpdate, onEmpty, headerRefreshed } from '../base/constant';\nimport { ColumnWidthService } from '../services/width-controller';\n/**\n * The `Scroll` module is used to handle scrolling behaviour.\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the Grid scrolling.\n * @hidden\n */\n function Scroll(parent) {\n this.lastScrollTop = 0;\n //To maintain scroll state on grid actions.\n this.previousValues = { top: 0, left: 0 };\n this.oneTimeReady = true;\n this.parent = parent;\n this.widthService = new ColumnWidthService(parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Scroll.prototype.getModuleName = function () {\n return 'scroll';\n };\n /**\n * @hidden\n */\n Scroll.prototype.setWidth = function () {\n this.parent.element.style.width = formatUnit(this.parent.width);\n if (this.parent.toolbarModule && this.parent.toolbarModule.toolbar &&\n this.parent.toolbarModule.toolbar.element) {\n this.parent.toolbarModule.toolbar.refreshOverflow();\n }\n };\n /**\n * @hidden\n */\n Scroll.prototype.setHeight = function () {\n var mHdrHeight = 0;\n var content = this.parent.getContent().firstChild;\n if (this.parent.frozenRows && this.parent.height !== 'auto') {\n mHdrHeight =\n this.parent.getHeaderContent().querySelector('tbody').offsetHeight;\n content.style.height = formatUnit(this.parent.height - mHdrHeight);\n }\n else {\n content.style.height = formatUnit(this.parent.height);\n }\n this.ensureOverflow(content);\n };\n /**\n * @hidden\n */\n Scroll.prototype.setPadding = function () {\n var content = this.parent.getHeaderContent();\n var scrollWidth = Scroll.getScrollBarWidth() - this.getThreshold();\n var cssProps = this.getCssProperties();\n content.firstChild.style[cssProps.border] = scrollWidth > 0 ? '1px' : '0px';\n content.style[cssProps.padding] = scrollWidth > 0 ? scrollWidth + 'px' : '0px';\n };\n /**\n * @hidden\n */\n Scroll.prototype.removePadding = function (rtl) {\n var cssProps = this.getCssProperties(rtl);\n this.parent.getHeaderContent().firstChild.style[cssProps.border] = '';\n this.parent.getHeaderContent().firstChild.parentElement.style[cssProps.padding] = '';\n };\n /**\n * Refresh makes the Grid adoptable with the height of parent container.\n *\n * > The [`height`](./api-grid.html#height) must be set to 100%.\n * @return\n */\n Scroll.prototype.refresh = function () {\n if (this.parent.height !== '100%') {\n return;\n }\n var content = this.parent.getContent();\n this.parent.element.style.height = '100%';\n var height = this.widthService.getSiblingsHeight(content);\n content.style.height = 'calc(100% - ' + height + 'px)'; //Set the height to the '.e-gridcontent';\n };\n Scroll.prototype.getThreshold = function () {\n /* Some browsers places the scroller outside the content,\n * hence the padding should be adjusted.*/\n var appName = Browser.info.name;\n if (appName === 'mozilla') {\n return 0.5;\n }\n return 1;\n };\n /**\n * @hidden\n */\n Scroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(onEmpty, this.wireEvents, this);\n this.parent.on(contentReady, this.wireEvents, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n this.parent.on(headerRefreshed, this.setScrollLeft, this);\n };\n /**\n * @hidden\n */\n Scroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(onEmpty, this.wireEvents);\n this.parent.off(contentReady, this.wireEvents);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n this.parent.off(headerRefreshed, this.setScrollLeft);\n };\n Scroll.prototype.setScrollLeft = function () {\n if (this.parent.frozenColumns) {\n this.parent.headerModule.getMovableHeader().scrollLeft = this.previousValues.left;\n }\n };\n Scroll.prototype.onContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n var isHeader = element.classList.contains('e-headercontent');\n return function (e) {\n if (_this.content.querySelector('tbody') === null || _this.parent.isPreventScrollEvent) {\n return;\n }\n var target = e.target;\n var left = target.scrollLeft;\n var sLimit = target.scrollWidth;\n var isFooter = target.classList.contains('e-summarycontent');\n if (_this.previousValues.left === left) {\n _this.previousValues.top = !isHeader ? _this.previousValues.top : target.scrollTop;\n return;\n }\n element.scrollLeft = left;\n if (isFooter) {\n _this.header.scrollLeft = left;\n }\n _this.previousValues.left = left;\n _this.parent.notify(scroll, { left: left });\n };\n };\n Scroll.prototype.onFreezeContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n var target = e.target;\n var top = target.scrollTop;\n if (_this.previousValues.top === top) {\n return;\n }\n element.scrollTop = top;\n _this.previousValues.top = top;\n if (_this.parent.isDestroyed) {\n return;\n }\n };\n };\n Scroll.prototype.onWheelScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n var top = element.scrollTop + (e.deltaMode === 1 ? e.deltaY * 30 : e.deltaY);\n if (_this.previousValues.top === top) {\n return;\n }\n e.preventDefault();\n _this.parent.getContent().querySelector('.e-frozencontent').scrollTop = top;\n element.scrollTop = top;\n _this.previousValues.top = top;\n };\n };\n Scroll.prototype.onTouchScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n var cont;\n var mHdr;\n var pageXY = _this.getPointXY(e);\n var top = element.scrollTop + (_this.pageXY.y - pageXY.y);\n var left = element.scrollLeft + (_this.pageXY.x - pageXY.x);\n if (_this.parent.getHeaderContent().contains(e.target)) {\n mHdr = _this.parent.getFrozenColumns() ?\n _this.parent.getHeaderContent().querySelector('.e-movableheader') : _this.parent.getHeaderContent().firstChild;\n if (_this.previousValues.left === left || (left < 0 || (mHdr.scrollWidth - mHdr.clientWidth) < left)) {\n return;\n }\n e.preventDefault();\n mHdr.scrollLeft = left;\n element.scrollLeft = left;\n _this.pageXY.x = pageXY.x;\n _this.previousValues.left = left;\n }\n else {\n cont = _this.parent.getContent().querySelector('.e-frozencontent');\n if (_this.previousValues.top === top || (top < 0 || (cont.scrollHeight - cont.clientHeight) < top)) {\n return;\n }\n e.preventDefault();\n cont.scrollTop = top;\n element.scrollTop = top;\n _this.pageXY.y = pageXY.y;\n _this.previousValues.top = top;\n }\n };\n };\n Scroll.prototype.setPageXY = function () {\n var _this = this;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n _this.pageXY = _this.getPointXY(e);\n };\n };\n Scroll.prototype.getPointXY = function (e) {\n var pageXY = { x: 0, y: 0 };\n if (e.touches && e.touches.length) {\n pageXY.x = e.touches[0].pageX;\n pageXY.y = e.touches[0].pageY;\n }\n else {\n pageXY.x = e.pageX;\n pageXY.y = e.pageY;\n }\n return pageXY;\n };\n Scroll.prototype.wireEvents = function () {\n var _this = this;\n if (this.oneTimeReady) {\n var frzCols = this.parent.getFrozenColumns();\n this.content = this.parent.getContent().firstChild;\n this.header = this.parent.getHeaderContent().firstChild;\n var mCont = this.content.querySelector('.e-movablecontent');\n var fCont = this.content.querySelector('.e-frozencontent');\n var mHdr = this.header.querySelector('.e-movableheader');\n if (this.parent.frozenRows) {\n EventHandler.add(frzCols ? mHdr : this.header, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(frzCols ? mHdr : this.header, 'touchmove pointermove', this.onTouchScroll(frzCols ? mCont : this.content), this);\n }\n if (frzCols) {\n EventHandler.add(mCont, 'scroll', this.onContentScroll(mHdr), this);\n EventHandler.add(mCont, 'scroll', this.onFreezeContentScroll(fCont), this);\n EventHandler.add(fCont, 'scroll', this.onFreezeContentScroll(mCont), this);\n EventHandler.add(mHdr, 'scroll', this.onContentScroll(mCont), this);\n EventHandler.add(fCont, 'wheel', this.onWheelScroll(mCont), this);\n EventHandler.add(fCont, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(fCont, 'touchmove pointermove', this.onTouchScroll(mCont), this);\n }\n else {\n EventHandler.add(this.content, 'scroll', this.onContentScroll(this.header), this);\n EventHandler.add(this.header, 'scroll', this.onContentScroll(this.content), this);\n }\n if (this.parent.aggregates.length) {\n EventHandler.add(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll(this.content), this);\n }\n this.refresh();\n this.oneTimeReady = false;\n }\n var table = this.parent.getContentTable();\n var sLeft;\n var sHeight;\n var clientHeight;\n getUpdateUsingRaf(function () {\n sLeft = _this.header.scrollLeft;\n sHeight = table.scrollHeight;\n clientHeight = _this.parent.getContent().clientHeight;\n }, function () {\n if (!_this.parent.enableVirtualization) {\n if (sHeight < clientHeight) {\n addClass(table.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n if (_this.parent.getFrozenColumns()) {\n addClass(_this.parent.getContent().querySelector('.e-movablecontent').querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n }\n }\n if ((_this.parent.frozenRows > 0 || _this.parent.frozenColumns > 0) && _this.header.querySelector('.e-movableheader')) {\n _this.header.querySelector('.e-movableheader').scrollLeft = _this.previousValues.left;\n }\n else {\n _this.header.scrollLeft = _this.previousValues.left;\n }\n _this.content.scrollLeft = _this.previousValues.left;\n _this.content.scrollTop = _this.previousValues.top;\n }\n if (!_this.parent.enableColumnVirtualization) {\n _this.content.scrollLeft = sLeft;\n }\n if (_this.parent.frozenColumns && _this.header.querySelector('.e-movableheader')) {\n _this.header.querySelector('.e-movableheader').scrollLeft =\n _this.content.querySelector('.e-movablecontent').scrollLeft;\n }\n });\n this.parent.isPreventScrollEvent = false;\n };\n /**\n * @hidden\n */\n Scroll.prototype.getCssProperties = function (rtl) {\n var css = {};\n var enableRtl = isNullOrUndefined(rtl) ? this.parent.enableRtl : rtl;\n css.border = enableRtl ? 'borderLeftWidth' : 'borderRightWidth';\n css.padding = enableRtl ? 'paddingLeft' : 'paddingRight';\n return css;\n };\n Scroll.prototype.ensureOverflow = function (content) {\n if (this.parent.getFrozenColumns()) {\n content.querySelector('.e-movablecontent').style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n }\n else {\n content.style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n }\n };\n Scroll.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n this.setPadding();\n this.oneTimeReady = true;\n if (this.parent.height === 'auto') {\n this.removePadding();\n }\n this.wireEvents();\n this.setHeight();\n this.setWidth();\n };\n /**\n * @hidden\n */\n Scroll.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.removeEventListener();\n //Remove padding\n this.removePadding();\n removeClass([this.parent.getHeaderContent().firstChild], 'e-headercontent');\n removeClass([this.parent.getContent().firstChild], 'e-content');\n //Remove height\n this.parent.getContent().firstChild.style.height = '';\n //Remove width\n this.parent.element.style.width = '';\n //Remove Dom event\n EventHandler.remove(this.parent.getContent().firstChild, 'scroll', this.onContentScroll);\n };\n /**\n * Function to get the scrollbar width of the browser.\n * @return {number}\n * @hidden\n */\n Scroll.getScrollBarWidth = function () {\n return getScrollBarWidth();\n };\n return Scroll;\n}());\nexport { Scroll };\n","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 (cultureName) {\n var valueFormatter = new ValueFormatter(cultureName);\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = valueFormatter.getFormatFunction(this.format);\n }\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n if (this.groupFooterTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.GroupSummary)] = { fn: compile(this.groupFooterTemplate, helper),\n property: 'groupFooterTemplate' };\n }\n if (this.groupCaptionTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = { fn: compile(this.groupCaptionTemplate, helper),\n property: 'groupCaptionTemplate' };\n }\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupFooterTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupCaptionTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\n/**\n * Configures the aggregate rows.\n */\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","import { Browser, remove } 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 = this.parent.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 if (this.clipBoardTextArea) {\n remove(this.clipBoardTextArea);\n }\n };\n Clipboard.prototype.checkBoxSelection = function () {\n var gridObj = this.parent;\n var obj = { status: false };\n if (gridObj.selectionSettings.mode === 'Cell') {\n var rowCellIndxes = gridObj.getSelectedRowCellIndexes();\n var str = void 0;\n var isBox = void 0;\n var rowIndexes = [];\n var i = void 0;\n for (i = 0; i < rowCellIndxes.length; i++) {\n if (rowCellIndxes[i].cellIndexes.length) {\n rowIndexes.push(rowCellIndxes[i].rowIndex);\n }\n if (rowCellIndxes[i].cellIndexes.length) {\n if (!str) {\n str = JSON.stringify(rowCellIndxes[i].cellIndexes.sort());\n }\n if (str !== JSON.stringify(rowCellIndxes[i].cellIndexes.sort())) {\n break;\n }\n }\n }\n rowIndexes.sort();\n if (i === rowCellIndxes.length && rowIndexes[rowIndexes.length - 1] - rowIndexes[0] === rowIndexes.length - 1) {\n obj = { status: true, rowIndexes: rowIndexes, colIndexes: rowCellIndxes[0].cellIndexes };\n }\n }\n return obj;\n };\n return Clipboard;\n}());\nexport { Clipboard };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, ChildProperty, Browser, closest, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, append, classList } 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, getRowHeight } from './util';\nimport * as events from '../base/constant';\nimport { Render } from '../renderer/render';\nimport { RenderType } from './enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { CellRendererFactory } from '../services/cell-render-factory';\nimport { ServiceLocator } from '../services/service-locator';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { ColumnWidthService } from '../services/width-controller';\nimport { AriaService } from '../services/aria-service';\nimport { FocusStrategy } from '../services/focus-strategy';\nimport { PageSettings } from '../models/page-settings';\nimport { Selection } from '../actions/selection';\nimport { Search } from '../actions/search';\nimport { ShowHide } from '../actions/show-hide';\nimport { Scroll } from '../actions/scroll';\nimport { Print } from '../actions/print';\nimport { AggregateRow } from '../models/aggregate';\nimport { Clipboard } from '../actions/clipboard';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of Grid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n/**\n * Represents the predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the Grid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n/**\n * Configures the selection behavior of the Grid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n/**\n * Configures the search behavior of the Grid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('')\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreAccent\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n/**\n * Configures the row drop settings of the Grid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n/**\n * Configures the text wrap settings of the Grid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n/**\n * Configures the group behavior of the Grid.\n */\nvar GroupSettings = /** @class */ (function (_super) {\n __extends(GroupSettings, _super);\n function GroupSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showDropArea\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showToggleButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showGroupedColumn\", void 0);\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showUngroupButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"disablePageWiseAggregates\", void 0);\n __decorate([\n Property([])\n ], GroupSettings.prototype, \"columns\", void 0);\n __decorate([\n Property()\n ], GroupSettings.prototype, \"captionTemplate\", void 0);\n return GroupSettings;\n}(ChildProperty));\nexport { GroupSettings };\n/**\n * Configures the edit behavior of the Grid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Normal')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n/**\n * Represents the Grid component.\n * ```html\n *
    \n * \n * ```\n */\nvar Grid = /** @class */ (function (_super) {\n __extends(Grid, _super);\n /**\n * Constructor for creating the component\n * @hidden\n */\n function Grid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isPreventScrollEvent = false;\n _this.inViewIndexes = [];\n _this.freezeRefresh = Component.prototype.refresh;\n /**\n * Gets the currently visible records of the Grid.\n */\n _this.currentViewData = [];\n /** @hidden */\n _this.prevPageMoving = false;\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 column.filter = {};\n });\n };\n /**\n * To provide the array of modules needed for component rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n Grid.prototype.requiredModules = function () {\n var modules = [];\n if (this.isDestroyed) {\n return modules;\n }\n if (this.allowFiltering) {\n modules.push({\n member: 'filter',\n args: [this, this.filterSettings, this.serviceLocator]\n });\n }\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport',\n args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this, this.sortSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this, this.selectionSettings, this.serviceLocator]\n });\n }\n modules.push({\n member: 'resize',\n args: [this]\n });\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.allowGrouping) {\n modules.push({\n member: 'group',\n args: [this, this.groupSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.aggregates.length) {\n modules.push({ member: 'aggregate', args: [this, this.serviceLocator] });\n }\n if (this.isDetail()) {\n modules.push({\n member: 'detailRow',\n args: [this, this.serviceLocator]\n });\n }\n if (this.toolbar || this.toolbarTemplate) {\n modules.push({\n member: 'toolbar',\n args: [this, this.serviceLocator]\n });\n }\n if (this.enableVirtualization || this.enableColumnVirtualization) {\n modules.push({\n member: 'virtualscroll',\n args: [this, this.serviceLocator]\n });\n }\n if (this.getFrozenColumns() || this.frozenRows) {\n modules.push({ member: 'freeze', args: [this, this.serviceLocator] });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this, this.serviceLocator]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this, this.serviceLocator]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n Grid.prototype.extendRequiredModules = function (modules) {\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'columnChooser',\n args: [this, this.serviceLocator]\n });\n }\n if (this.isForeignKeyEnabled(this.columns)) {\n modules.push({ member: 'foreignKey', args: [this, this.serviceLocator] });\n }\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n Grid.prototype.preRender = function () {\n this.serviceLocator = new ServiceLocator;\n this.initProperties();\n this.initializeServices();\n };\n Grid.prototype.initProperties = function () {\n /* tslint:disable */\n this.isInitial = true;\n this.sortedColumns = [];\n this.inViewIndexes = [];\n this.mediaCol = [];\n this.isInitialLoad = false;\n this.mergeCells = {};\n this.isEdit = false;\n this.checkAllRows = 'None';\n this.isCheckBoxSelection = false;\n this.isPersistSelection = false;\n this.freezeRefresh = Component.prototype.refresh;\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith'\n };\n this.defaultLocale = {\n EmptyRecord: 'No records to display',\n True: 'true',\n False: 'false',\n InvalidFilterMessage: 'Invalid Filter Data',\n GroupDropArea: 'Drag a column header here to group its column',\n UnGroup: 'Click here to ungroup',\n GroupDisable: 'Grouping is disabled for this column',\n FilterbarTitle: '\\'s filter bar cell',\n EmptyDataSourceError: 'DataSource must not be empty at initial load since columns are generated from dataSource in AutoGenerate Column Grid',\n // Toolbar Items\n Add: 'Add',\n Edit: 'Edit',\n Cancel: 'Cancel',\n Update: 'Update',\n Delete: 'Delete',\n Print: 'Print',\n Pdfexport: 'PDF Export',\n Excelexport: 'Excel Export',\n Wordexport: 'Word Export',\n Csvexport: 'CSV Export',\n Search: 'Search',\n Columnchooser: 'Columns',\n Save: 'Save',\n Item: 'item',\n Items: 'items',\n EditOperationAlert: 'No records selected for edit operation',\n DeleteOperationAlert: 'No records selected for delete operation',\n SaveButton: 'Save',\n OKButton: 'OK',\n CancelButton: 'Cancel',\n EditFormTitle: 'Details of ',\n AddFormTitle: 'Add New Record',\n BatchSaveConfirm: 'Are you sure you want to save changes?',\n BatchSaveLostChanges: 'Unsaved changes will be lost. Are you sure you want to continue?',\n ConfirmDelete: 'Are you sure you want to Delete Record?',\n CancelEdit: 'Are you sure you want to Cancel the changes?',\n ChooseColumns: 'Choose Column',\n SearchColumns: 'search columns',\n Matchs: 'No Matches Found',\n FilterButton: 'Filter',\n ClearButton: 'Clear',\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n ChooseDate: 'Choose a Date',\n EnterValue: 'Enter the value',\n Copy: 'Copy',\n Group: 'Group by this column',\n Ungroup: 'Ungroup by this column',\n autoFitAll: 'Auto Fit all columns',\n autoFit: 'Auto Fit this column',\n Export: 'Export',\n FirstPage: 'First Page',\n LastPage: 'Last Page',\n PreviousPage: 'Previous Page',\n NextPage: 'Next Page',\n SortAscending: 'Sort Ascending',\n SortDescending: 'Sort Descending',\n EditRecord: 'Edit Record',\n DeleteRecord: 'Delete Record',\n FilterMenu: 'Filter',\n SelectAll: 'Select All',\n Blanks: 'Blanks',\n FilterTrue: 'True',\n FilterFalse: 'False',\n NoResult: 'No Matches Found',\n ClearFilter: 'Clear Filter',\n NumberFilter: 'Number Filters',\n TextFilter: 'Text Filters',\n DateFilter: 'Date Filters',\n DateTimeFilter: 'DateTime Filters',\n MatchCase: 'Match Case',\n Between: 'Between',\n CustomFilter: 'Custom Filter',\n CustomFilterPlaceHolder: 'Enter the value',\n CustomFilterDatePlaceHolder: 'Choose a date',\n AND: 'AND',\n OR: 'OR',\n ShowRowsWhere: 'Show rows where:'\n };\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftRight: 'shift+rightarrow',\n shiftLeft: 'shift+leftarrow',\n home: 'home',\n end: 'end',\n escape: 'escape',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n ctrlAltPageUp: 'ctrl+alt+pageup',\n ctrlAltPageDown: 'ctrl+alt+pagedown',\n altPageUp: 'alt+pageup',\n altPageDown: 'alt+pagedown',\n altDownArrow: 'alt+downarrow',\n altUpArrow: 'alt+uparrow',\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlPlusA: 'ctrl+A',\n ctrlPlusP: 'ctrl+P',\n insert: 'insert',\n delete: 'delete',\n f2: 'f2',\n enter: 'enter',\n ctrlEnter: 'ctrl+enter',\n shiftEnter: 'shift+enter',\n tab: 'tab',\n shiftTab: 'shift+tab',\n space: 'space',\n ctrlPlusC: 'ctrl+C',\n ctrlShiftPlusH: 'ctrl+shift+H'\n };\n /* tslint:enable */\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n */\n Grid.prototype.render = function () {\n this.ariaService.setOptions(this.element, { role: 'grid' });\n createSpinner({ target: this.element }, this.createElement);\n this.renderModule = new Render(this, this.serviceLocator);\n this.getMediaColumns();\n this.searchModule = new Search(this);\n this.scrollModule = new Scroll(this);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n prepareColumns(this.columns, this.enableColumnVirtualization);\n this.getColumns();\n this.processModel();\n this.gridRender();\n this.wireEvents();\n this.addListener();\n this.updateDefaultCursor();\n this.updateStackedFilter();\n this.showSpinner();\n this.notify(events.initialEnd, {});\n };\n /**\n * By default, grid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n */\n Grid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually showed spinner needs to hide by `hideSpinnner`.\n */\n Grid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n Grid.prototype.updateStackedFilter = function () {\n if (this.allowFiltering && this.filterSettings.type === 'FilterBar' &&\n this.getHeaderContent().querySelectorAll('.e-stackedheadercell').length) {\n this.getHeaderContent().classList.add('e-stackedfilter');\n }\n else {\n this.getHeaderContent().classList.remove('e-stackedfilter');\n }\n };\n Grid.prototype.getMediaColumns = function () {\n if (!this.enableColumnVirtualization) {\n var gcol = this.getColumns();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n if (!isNullOrUndefined(gcol)) {\n for (var index = 0; index < gcol.length; index++) {\n if (!isNullOrUndefined(gcol[index].hideAtMedia)) {\n this.mediaCol.push(gcol[index]);\n var media = window.matchMedia(gcol[index].hideAtMedia);\n this.mediaQueryUpdate(index, media);\n media.addListener(this.mediaQueryUpdate.bind(this, index));\n }\n }\n }\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.mediaQueryUpdate = function (columnIndex, e) {\n var col = this.getColumns()[columnIndex];\n col.visible = e.matches;\n if (this.isInitialLoad) {\n if (col.visible) {\n this.showHider.show(col.headerText, 'headerText');\n }\n else {\n this.showHider.hide(col.headerText, 'headerText');\n }\n }\n };\n Grid.prototype.refreshMediaCol = function () {\n this.isInitialLoad = true;\n if (this.aggregates.length && this.element.scrollHeight > this.height) {\n var footerContent = this.element.querySelector('.e-gridfooter');\n addClass([footerContent], ['e-footerpadding']);\n }\n var checkboxColumn = this.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length && this.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n this.isCheckBoxSelection = false;\n this.refreshHeader();\n }\n };\n /**\n * For internal use only - Initialize the event handler\n * @private\n */\n Grid.prototype.eventInitializer = function () {\n //eventInitializer\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n * @method destroy\n * @return {void}\n */\n Grid.prototype.destroy = function () {\n var gridElement = this.element;\n if (!gridElement) {\n return;\n }\n var hasGridChild = gridElement.querySelector('.e-gridheader') &&\n gridElement.querySelector('.e-gridcontent') ? true : false;\n if (hasGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n if (hasGridChild) {\n _super.prototype.destroy.call(this);\n }\n this.toolTipObj.destroy();\n var modules = ['renderModule', 'headerModule', 'contentModule', 'valueFormatterService',\n 'serviceLocator', 'ariaService', 'keyboardModule', 'widthService', 'searchModule', 'showHider',\n 'scrollModule', 'printModule', 'clipboardModule', 'focusModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[i]]) {\n this[modules[i]] = null;\n }\n }\n this.element.innerHTML = '';\n classList(this.element, [], ['e-rtl', 'e-gridhover', 'e-responsive', 'e-default', 'e-device', 'e-grid-min-height']);\n };\n Grid.prototype.destroyDependentModules = function () {\n var gridElement = this.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.scrollModule.destroy();\n this.keyboardModule.destroy();\n this.focusModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Grid.prototype.getModuleName = function () {\n return 'grid';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n /* tslint:disable-next-line:max-line-length */\n // tslint:disable-next-line:max-func-body-length\n Grid.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n var requireGridRefresh = false;\n var freezeRefresh = false;\n var checkCursor;\n var args = { requestType: 'refresh' };\n if (this.isDestroyed) {\n return;\n }\n var properties = Object.keys(newProp);\n if (properties.indexOf('columns') > -1) {\n this.updateColumnObject();\n requireGridRefresh = true;\n }\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'allowPaging':\n this.notify(events.uiUpdate, { module: 'pager', enable: this.allowPaging });\n requireRefresh = true;\n break;\n case 'pageSettings':\n this.notify(events.inBoundModelChanged, { module: 'pager', properties: newProp.pageSettings });\n if (isNullOrUndefined(newProp.pageSettings.currentPage) && isNullOrUndefined(newProp.pageSettings.totalRecordsCount)\n || !isNullOrUndefined(oldProp.pageSettings) &&\n ((newProp.pageSettings.currentPage !== oldProp.pageSettings.currentPage)\n && !this.enableColumnVirtualization && !this.enableVirtualization\n && this.pageSettings.totalRecordsCount <= this.pageSettings.pageSize)) {\n requireRefresh = true;\n }\n break;\n case '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 'allowSelection':\n this.notify(events.uiUpdate, { module: 'selection', enable: this.allowSelection });\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, {\n module: 'group', properties: newProp.groupSettings,\n oldProperties: oldProp.groupSettings\n });\n break;\n case 'aggregates':\n if (!this.aggregates.length && this.allowGrouping && this.groupSettings.columns.length) {\n requireRefresh = true;\n }\n this.notify(events.uiUpdate, { module: 'aggregate', properties: newProp });\n break;\n case 'frozenColumns':\n case 'frozenRows':\n freezeRefresh = true;\n requireGridRefresh = true;\n break;\n case 'enableVirtualization':\n _super.prototype.refresh.call(this);\n break;\n default:\n this.extendedPropertyChange(prop, newProp);\n }\n }\n if (checkCursor) {\n this.updateDefaultCursor();\n }\n if (requireGridRefresh) {\n if (freezeRefresh || this.frozenColumns || this.frozenRows) {\n this.freezeRefresh();\n }\n else {\n this.refresh();\n }\n }\n else if (requireRefresh) {\n this.notify(events.modelChanged, args);\n requireRefresh = false;\n }\n };\n /* tslint:disable-next-line:max-line-length */\n Grid.prototype.extendedPropertyChange = function (prop, newProp) {\n switch (prop) {\n case 'enableRtl':\n this.updateRTL();\n if (this.allowPaging) {\n this.element.querySelector('.e-gridpager').ej2_instances[0].enableRtl = newProp.enableRtl;\n this.element.querySelector('.e-gridpager').ej2_instances[0].dataBind();\n }\n if (this.height !== 'auto') {\n this.scrollModule.removePadding(!newProp.enableRtl);\n this.scrollModule.setPadding();\n }\n if (this.toolbar) {\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) {\n gResult_1 = DataUtil.group(gResult_1, name, pending_1.aggregates || []);\n });\n this.dataSource = {\n result: gResult_1, count: this.dataSource.count,\n aggregates: this.dataSource.aggregates\n };\n pending_1.resolver(this.dataSource);\n }\n else {\n this.getDataModule().setState({ isDataChanged: false });\n this.notify(events.dataSourceModified, {});\n this.renderModule.refresh();\n }\n break;\n case 'enableHover':\n var action = newProp.enableHover ? addClass : removeClass;\n action([this.element], 'e-gridhover');\n break;\n }\n };\n /**\n * @private\n */\n Grid.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n 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.groupSettings.showDropArea) || this.allowReordering) {\n row.classList.remove('e-defaultcursor');\n }\n else {\n row.classList.add('e-defaultcursor');\n }\n }\n };\n Grid.prototype.updateColumnModel = function (columns) {\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].columns) {\n this.updateColumnModel(columns[i].columns);\n }\n else {\n this.columnModel.push(columns[i]);\n }\n }\n this.updateFrozenColumns();\n };\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.getStackedHeaderColumnByHeaderText = function (stackedHeader, col) {\n for (var i = 0; i < col.length; i++) {\n var individualColumn = col[i];\n if (individualColumn.field === stackedHeader || individualColumn.headerText === stackedHeader) {\n this.stackedColumn = individualColumn;\n break;\n }\n else if (individualColumn.columns) {\n this.getStackedHeaderColumnByHeaderText(stackedHeader, individualColumn.columns);\n }\n }\n return this.stackedColumn;\n };\n /**\n * @private\n */\n Grid.prototype.getColumnIndexesInView = function () {\n return this.inViewIndexes;\n };\n /**\n * @private\n */\n Grid.prototype.getLocaleConstants = function () {\n return this.defaultLocale;\n };\n /**\n * @private\n */\n Grid.prototype.setColumnIndexesInView = function (indexes) {\n this.inViewIndexes = indexes;\n };\n /**\n * Gets the visible columns from the Grid.\n * @return {Column[]}\n */\n Grid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * Gets the header div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getHeaderContent = function () {\n return this.headerModule.getPanel();\n };\n /**\n * Sets the header div of the Grid to replace the old header.\n * @param {Element} element - Specifies the Grid header.\n * @return {void}\n */\n Grid.prototype.setGridHeaderContent = function (element) {\n this.headerModule.setPanel(element);\n };\n /**\n * Gets the content table of the Grid.\n * @return {Element}\n */\n Grid.prototype.getContentTable = function () {\n return this.contentModule.getTable();\n };\n /**\n * Sets the content table of the Grid to replace the old content table.\n * @param {Element} element - Specifies the Grid content table.\n * @return {void}\n */\n Grid.prototype.setGridContentTable = function (element) {\n this.contentModule.setTable(element);\n };\n /**\n * Gets the content div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Sets the content div of the Grid to replace the old Grid content.\n * @param {Element} element - Specifies the Grid content.\n * @return {void}\n */\n Grid.prototype.setGridContent = function (element) {\n this.contentModule.setPanel(element);\n };\n /**\n * Gets the header table element of the Grid.\n * @return {Element}\n */\n Grid.prototype.getHeaderTable = function () {\n return this.headerModule.getTable();\n };\n /**\n * Sets the header table of the Grid to replace the old one.\n * @param {Element} element - Specifies the Grid header table.\n * @return {void}\n */\n Grid.prototype.setGridHeaderTable = function (element) {\n this.headerModule.setTable(element);\n };\n /**\n * Gets the footer div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getFooterContent = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n return this.footerElement;\n };\n /**\n * Gets the footer table element of the Grid.\n * @return {Element}\n */\n Grid.prototype.getFooterContentTable = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n return this.footerElement.firstChild.firstChild;\n };\n /**\n * Gets the pager of the Grid.\n * @return {Element}\n */\n Grid.prototype.getPager = function () {\n return this.gridPager; //get element from pager\n };\n /**\n * Sets the pager of the Grid to replace the old pager.\n * @param {Element} element - Specifies the Grid pager.\n * @return {void}\n */\n Grid.prototype.setGridPager = function (element) {\n this.gridPager = element;\n };\n /**\n * Gets a row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n Grid.prototype.getRowByIndex = function (index) {\n return this.contentModule.getRowByIndex(index);\n };\n /**\n * Gets a movable tables row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n Grid.prototype.getMovableRowByIndex = function (index) {\n return this.contentModule.getMovableRowByIndex(index);\n };\n /**\n * Gets all the data rows of the Grid.\n * @return {Element[]}\n */\n Grid.prototype.getRows = function () {\n return this.contentModule.getRowElements();\n };\n /**\n * Get a row information based on cell\n * @param {Element}\n * @return RowInfo\n */\n Grid.prototype.getRowInfo = function (target) {\n var ele = target;\n var args = { target: target };\n if (!isNullOrUndefined(target) && isNullOrUndefined(parentsUntil(ele, 'e-detailrowcollapse')\n && isNullOrUndefined(parentsUntil(ele, 'e-recordplusexpand'))) && !this.isEdit) {\n var cell = closest(ele, '.e-rowcell');\n if (!cell) {\n return args;\n }\n var cellIndex = parseInt(cell.getAttribute('aria-colindex'), 10);\n if (!isNullOrUndefined(cell) && !isNaN(cellIndex)) {\n var row_1 = closest(cell, '.e-row');\n var rowIndex = parseInt(row_1.getAttribute('aria-rowindex'), 10);\n var frzCols = this.getFrozenColumns();\n var isMovable = frzCols ? cellIndex >= frzCols : false;\n var rows = (isMovable ?\n this.contentModule.getMovableRows() : this.contentModule.getRows());\n var rowsObject = rows.filter(function (r) { return r.uid === row_1.getAttribute('data-uid'); });\n var rowData = rowsObject[0].data;\n var column = rowsObject[0].cells[isMovable ? cellIndex - frzCols : cellIndex].column;\n args = { cell: cell, cellIndex: cellIndex, row: row_1, rowIndex: rowIndex, rowData: rowData, column: column, target: target };\n }\n }\n return args;\n };\n /**\n * Gets the Grid's movable content rows from frozen grid.\n * @return {Element[]}\n */\n Grid.prototype.getMovableRows = function () {\n return this.contentModule.getMovableRowElements();\n };\n /**\n * Gets all the Grid's data rows.\n * @return {Element[]}\n */\n Grid.prototype.getDataRows = function () {\n var rows = [].slice.call(this.getContentTable().querySelector('tbody').children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderTable().querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\n * @hidden\n */\n Grid.prototype.addMovableRows = function (fRows, mrows) {\n for (var i = 0, len = mrows.length; i < len; i++) {\n fRows.push(mrows[i]);\n }\n return fRows;\n };\n Grid.prototype.generateDataRows = function (rows) {\n var dRows = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-hiddenrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Gets all the Grid's movable table data rows.\n * @return {Element[]}\n */\n Grid.prototype.getMovableDataRows = function () {\n var rows = [].slice.call(this.getContent().querySelector('.e-movablecontent').querySelector('tbody').children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n */\n Grid.prototype.setCellValue = function (key, field, value) {\n var cells = 'cells';\n var rowData = 'data';\n var rowIdx = 'index';\n var rowuID = 'uid';\n var fieldIdx;\n var col;\n var tr;\n var mTr;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var cell = new CellRenderer(this, this.serviceLocator);\n var selectedRow = {};\n var movableSelectedRow = {};\n var rowObjects = this.contentModule.getRows();\n var movableRowObjects = this.contentModule.getMovableRows();\n fieldIdx = this.getColumnIndexByField(field);\n if (this.groupSettings.columns.length > 0 || this.childGrid || this.detailTemplate) {\n fieldIdx = fieldIdx + 1;\n }\n col = this.getColumnByField(field);\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n movableSelectedRow = movableRowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n tr = !isNullOrUndefined(selectedRow) ? this.element.querySelector('[data-uid=' + selectedRow[rowuID] + ']') : null;\n mTr = !isNullOrUndefined(movableSelectedRow) ? this.element.querySelector('[data-uid=' + movableSelectedRow[rowuID] + ']') : null;\n if (!isNullOrUndefined(tr)) {\n setValue(field, value, selectedRow[rowData]);\n var td = !isNullOrUndefined(tr.childNodes[fieldIdx]) ?\n tr.childNodes[fieldIdx] : mTr.childNodes[fieldIdx - this.frozenColumns];\n if (!isNullOrUndefined(td)) {\n var sRow = selectedRow[cells][fieldIdx];\n var mRow = void 0;\n if (this.frozenColumns) {\n mRow = movableSelectedRow[cells][fieldIdx - this.frozenColumns];\n }\n cell.refreshTD(td, !isNullOrUndefined(sRow) ? sRow : mRow, selectedRow[rowData]);\n if (this.aggregates.length > 0) {\n this.notify(events.refreshFooterRenderer, {});\n if (this.groupSettings.columns.length > 0) {\n this.notify(events.groupAggregates, {});\n }\n }\n /* tslint:disable:no-string-literal */\n if (!isNullOrUndefined(movableSelectedRow) && !isNullOrUndefined(movableSelectedRow['changes'])) {\n movableSelectedRow['changes'][field] = value;\n }\n /* tslint:disable:no-string-literal */\n this.trigger(events.queryCellInfo, {\n cell: td, column: col, data: selectedRow[rowData]\n });\n }\n }\n else {\n return;\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n */\n Grid.prototype.setRowData = function (key, rowData) {\n var rwdata = 'data';\n var rowuID = 'uid';\n var rowObjects = this.contentModule.getRows();\n var selectedRow;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this);\n if (this.groupSettings.columns.length > 0 && this.aggregates.length > 0) {\n rowObjects = rowObjects.filter(function (row) { return row.isDataRow; });\n }\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n if (!isNullOrUndefined(selectedRow) && this.element.querySelectorAll('[data-uid=' + selectedRow[rowuID] + ']').length) {\n selectedRow.changes = rowData;\n refreshForeignData(selectedRow, this.getForeignKeyColumns(), selectedRow.changes);\n rowRenderer.refresh(selectedRow, this.getColumns(), true);\n if (this.aggregates.length > 0) {\n this.notify(events.refreshFooterRenderer, {});\n if (this.groupSettings.columns.length > 0) {\n this.notify(events.groupAggregates, {});\n }\n }\n }\n else {\n return;\n }\n };\n /**\n * Gets a cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.getDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex];\n };\n /**\n * Gets a movable table cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.getMovableDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex - this.getFrozenColumns()];\n };\n /**\n * Gets a column header by column index.\n * @param {number} index - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByIndex = function (index) {\n return this.getHeaderTable().querySelectorAll('.e-headercell')[index];\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowObjectFromUID = function (uid) {\n var rows = this.contentModule.getRows();\n var row = this.rowObject(rows, uid);\n if (this.getFrozenColumns()) {\n if (!row) {\n row = this.rowObject(this.contentModule.getMovableRows(), uid);\n return row;\n }\n }\n return row;\n };\n Grid.prototype.rowObject = function (rows, uid) {\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (row.uid === uid) {\n return row;\n }\n }\n return null;\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowsObject = function () {\n return this.contentModule.getRows();\n };\n /**\n * @hidden\n */\n Grid.prototype.getMovableRowsObject = function () {\n return this.contentModule.getMovableRows();\n };\n /**\n * Gets a column header by column name.\n * @param {string} field - Specifies the column name.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByField = function (field) {\n return this.getColumnHeaderByUid(this.getColumnByField(field).uid);\n };\n /**\n * Gets a column header by UID.\n * @param {string} field - Specifies the column uid.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByUid = function (uid) {\n return this.getHeaderContent().querySelector('[e-mappinguid=' + uid + ']').parentElement;\n };\n /**\n * @hidden\n */\n Grid.prototype.getColumnByIndex = function (index) {\n var column;\n this.getColumns().some(function (col, i) {\n column = col;\n return i === index;\n });\n return column;\n };\n /**\n * Gets a Column by column name.\n * @param {string} field - Specifies the column name.\n * @return {Column}\n */\n Grid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column index by column name.\n * @param {string} field - Specifies the column name.\n * @return {number}\n */\n Grid.prototype.getColumnIndexByField = function (field) {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Gets a column by UID.\n * @param {string} uid - Specifies the column UID.\n * @return {Column}\n */\n Grid.prototype.getColumnByUid = function (uid) {\n return iterateArrayOrObject(this.getColumns(), 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 * Gets a compiled detail row template.\n * @private\n * @return {Function}\n */\n Grid.prototype.getEditTemplate = function () {\n return this.editTemplateFn;\n };\n /**\n * Get the names of the primary key columns of the Grid.\n * @return {string[]}\n */\n Grid.prototype.getPrimaryKeyFieldNames = function () {\n var keys = [];\n for (var k = 0; k < this.columnModel.length; k++) {\n if (this.columnModel[k].isPrimaryKey) {\n keys.push(this.columnModel[k].field);\n }\n }\n return keys;\n };\n /**\n * Refreshes the Grid header and content.\n */\n Grid.prototype.refresh = function () {\n this.headerModule.refreshUI();\n this.updateStackedFilter();\n this.renderModule.refresh();\n };\n /**\n * Refreshes the Grid header.\n */\n Grid.prototype.refreshHeader = function () {\n this.headerModule.refreshUI();\n };\n /**\n * Gets the collection of selected rows.\n * @return {Element[]}\n */\n Grid.prototype.getSelectedRows = function () {\n return this.selectionModule ? this.selectionModule.selectedRecords : [];\n };\n /**\n * Gets the collection of selected row indexes.\n * @return {number[]}\n */\n Grid.prototype.getSelectedRowIndexes = function () {\n return this.selectionModule ? this.selectionModule.selectedRowIndexes : [];\n };\n /**\n * Gets the collection of selected row and cell indexes.\n * @return {number[]}\n */\n Grid.prototype.getSelectedRowCellIndexes = function () {\n return this.selectionModule.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 /**\n * @hidden\n */\n Grid.prototype.getVisibleFrozenColumns = function () {\n return this.getVisibleFrozenColumnsCount() + this.getVisibleFrozenCount(this.columns, 0);\n };\n Grid.prototype.getVisibleFrozenColumnsCount = function () {\n var visibleFrozenColumns = 0;\n var col = this.columns;\n for (var i = 0; i < this.frozenColumns; i++) {\n if (col[i].visible) {\n visibleFrozenColumns++;\n }\n }\n return visibleFrozenColumns;\n };\n Grid.prototype.getVisibleFrozenCount = function (cols, cnt) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].columns) {\n cnt = this.getVisibleFrozenCount(cols[i].columns, cnt);\n }\n else {\n if (cols[i].isFrozen && cols[i].visible) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n Grid.prototype.getFrozenCount = function (cols, cnt) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].columns) {\n cnt = this.getFrozenCount(cols[i].columns, cnt);\n }\n else {\n if (cols[i].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Navigates to the specified target page.\n * @param {number} pageNo - Defines the page number to navigate.\n * @return {void}\n */\n Grid.prototype.goToPage = function (pageNo) {\n 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 this.editTemplateFn = templateCompiler(this.editSettings.template);\n if (!isNullOrUndefined(this.parentDetails)) {\n var value = isNullOrUndefined(this.parentDetails.parentKeyFieldValue) ? 'undefined' :\n this.parentDetails.parentKeyFieldValue;\n this.query.where(this.queryString, 'equal', value, true);\n }\n this.initForeignColumn();\n };\n Grid.prototype.initForeignColumn = function () {\n if (this.isForeignKeyEnabled(this.getColumns())) {\n this.notify(events.initForeignKeyColumn, this.getForeignKeyColumns());\n }\n };\n Grid.prototype.gridRender = function () {\n this.updateRTL();\n if (this.enableHover) {\n this.element.classList.add('e-gridhover');\n }\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n if (this.rowHeight) {\n this.element.classList.add('e-grid-min-height');\n }\n classList(this.element, ['e-responsive', 'e-default'], []);\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.headerModule = rendererFactory.getRenderer(RenderType.Header);\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.printModule = new Print(this, this.scrollModule);\n this.clipboardModule = new Clipboard(this);\n this.renderModule.render();\n this.eventInitializer();\n this.createGridPopUpElement();\n this.widthService.setWidthToColumns();\n this.updateGridLines();\n this.applyTextWrap();\n this.createTooltip(); //for clip mode ellipsis\n };\n Grid.prototype.dataReady = function () {\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n if (this.height !== 'auto') {\n this.scrollModule.setPadding();\n }\n };\n Grid.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n Grid.prototype.createGridPopUpElement = function () {\n var popup = this.createElement('div', { className: 'e-gridpopup', styles: 'display:none;' });\n var content = this.createElement('div', { className: 'e-content', attrs: { tabIndex: '-1' } });\n append([content, this.createElement('div', { className: 'e-uptail e-tail' })], popup);\n content.appendChild(this.createElement('span'));\n append([content, this.createElement('div', { className: 'e-downtail e-tail' })], popup);\n this.element.appendChild(popup);\n };\n Grid.prototype.updateGridLines = function () {\n classList(this.element, [], ['e-verticallines', 'e-horizontallines', 'e-hidelines', 'e-bothlines']);\n switch (this.gridLines) {\n case 'Horizontal':\n this.element.classList.add('e-horizontallines');\n break;\n case 'Vertical':\n this.element.classList.add('e-verticallines');\n break;\n case 'None':\n this.element.classList.add('e-hidelines');\n break;\n case 'Both':\n this.element.classList.add('e-bothlines');\n break;\n }\n this.updateResizeLines();\n };\n Grid.prototype.updateResizeLines = function () {\n if (this.allowResizing &&\n !(this.gridLines === 'Vertical' || this.gridLines === 'Both')) {\n this.element.classList.add('e-resize-lines');\n }\n else {\n this.element.classList.remove('e-resize-lines');\n }\n };\n /**\n * The function is used to apply text wrap\n * @return {void}\n * @hidden\n */\n Grid.prototype.applyTextWrap = function () {\n if (this.allowTextWrap) {\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n switch (this.textWrapSettings.wrapMode) {\n case 'Header':\n wrap(this.element, false);\n wrap(this.getContent(), false);\n wrap(headerRows, true);\n break;\n case 'Content':\n wrap(this.getContent(), true);\n wrap(this.element, false);\n wrap(headerRows, false);\n break;\n default:\n wrap(this.element, true);\n wrap(this.getContent(), false);\n wrap(headerRows, false);\n }\n }\n };\n /**\n * The function is used to remove text wrap\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeTextWrap = function () {\n wrap(this.element, false);\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n wrap(headerRows, false);\n wrap(this.getContent(), false);\n };\n /**\n * The function is used to add Tooltip to the grid cell that has ellipsiswithtooltip clip mode.\n * @return {void}\n * @hidden\n */\n Grid.prototype.createTooltip = function () {\n this.toolTipObj = new Tooltip({ opensOn: 'custom', content: '' }, this.element);\n };\n Grid.prototype.getTooltipStatus = function (element) {\n var width;\n var headerTable = this.getHeaderTable();\n var contentTable = this.getContentTable();\n var headerDivTag = 'e-gridheader';\n var contentDivTag = 'e-gridcontent';\n var htable = this.createTable(headerTable, headerDivTag, 'header');\n var ctable = this.createTable(headerTable, headerDivTag, 'content');\n var td = element;\n var table = headerTable.contains(element) ? htable : ctable;\n var ele = headerTable.contains(element) ? 'th' : 'tr';\n table.querySelector(ele).className = element.className;\n table.querySelector(ele).innerHTML = element.innerHTML;\n width = table.querySelector(ele).getBoundingClientRect().width;\n document.body.removeChild(htable);\n document.body.removeChild(ctable);\n if (width > element.getBoundingClientRect().width) {\n return true;\n }\n return false;\n };\n Grid.prototype.mouseMoveHandler = function (e) {\n if (this.isEllipsisTooltip()) {\n var element = parentsUntil(e.target, 'e-ellipsistooltip');\n if (element) {\n if (element.getAttribute('aria-describedby')) {\n return;\n }\n if (this.getTooltipStatus(element)) {\n if (element.getElementsByClassName('e-headertext').length) {\n this.toolTipObj.content = element.getElementsByClassName('e-headertext')[0].innerText;\n }\n else {\n this.toolTipObj.content = element.innerText;\n }\n this.toolTipObj.open(element);\n }\n 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 = this.createElement('div');\n myTableDiv.className = this.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = this.createElement('div');\n mySubDiv.className = tag;\n var myTable = this.createElement('table');\n myTable.className = table.className;\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var ele = (type === 'header') ? 'th' : 'td';\n var myTr = this.createElement('tr');\n var mytd = this.createElement(ele);\n myTr.appendChild(mytd);\n myTable.appendChild(myTr);\n mySubDiv.appendChild(myTable);\n myTableDiv.appendChild(mySubDiv);\n document.body.appendChild(myTableDiv);\n return myTableDiv;\n };\n Grid.prototype.keyPressed = function (e) {\n if (e.action === 'tab' || e.action === 'shiftTab') {\n this.toolTipObj.close();\n }\n };\n /**\n * Binding events to the element while component creation.\n * @hidden\n */\n Grid.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(this.getContent(), 'dblclick', this.dblClickHandler, this);\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.getContent().firstElementChild, 'scroll', this.scrollHandler, this);\n EventHandler.add(this.element, 'mousemove', this.mouseMoveHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy.\n * @hidden\n */\n Grid.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.mouseClickHandler);\n EventHandler.remove(this.element, 'touchend', this.mouseClickHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.getContent().firstElementChild, 'scroll', this.scrollHandler);\n EventHandler.remove(this.element, 'mousemove', this.mouseMoveHandler);\n };\n /**\n * @hidden\n */\n Grid.prototype.addListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.on(events.dataReady, this.dataReady, this);\n this.on(events.contentReady, this.recalcIndentWidth, this);\n this.on(events.headerRefreshed, this.recalcIndentWidth, this);\n this.dataBoundFunction = this.refreshMediaCol.bind(this);\n this.addEventListener(events.dataBound, this.dataBoundFunction);\n this.on(events.keyPressed, this.keyPressed, this);\n };\n /**\n * @hidden\n */\n Grid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.dataReady, this.dataReady);\n this.off(events.contentReady, this.recalcIndentWidth);\n this.off(events.headerRefreshed, this.recalcIndentWidth);\n this.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.off(events.keyPressed, this.keyPressed);\n };\n /**\n * Get current visible data of grid.\n * @return {Object[]}\n * @hidden\n */\n Grid.prototype.getCurrentViewRecords = function () {\n return (this.allowGrouping && this.groupSettings.columns.length && this.currentViewData.length) ?\n this.currentViewData.records : this.currentViewData;\n };\n Grid.prototype.mouseClickHandler = function (e) {\n if (this.isChildGrid(e) || (parentsUntil(e.target, 'e-gridpopup') && e.touches) ||\n this.element.querySelectorAll('.e-cloneproperties').length || this.checkEdit(e)) {\n return;\n }\n if (((!this.allowRowDragAndDrop && (parentsUntil(e.target, 'e-gridcontent') ||\n e.target.tagName === 'TD')) || (!(this.allowGrouping || this.allowReordering) &&\n parentsUntil(e.target, 'e-gridheader'))) && e.touches) {\n return;\n }\n if (parentsUntil(e.target, 'e-gridheader') && this.allowRowDragAndDrop) {\n e.preventDefault();\n }\n this.notify(events.click, e);\n };\n Grid.prototype.checkEdit = function (e) {\n var tr = parentsUntil(e.target, 'e-row');\n var isEdit = this.editSettings.mode !== 'Batch' &&\n this.isEdit && tr && (tr.classList.contains('e-editedrow') || tr.classList.contains('e-addedrow'));\n return !parentsUntil(e.target, 'e-unboundcelldiv') && (isEdit || (parentsUntil(e.target, 'e-rowcell') &&\n parentsUntil(e.target, 'e-rowcell').classList.contains('e-editedbatchcell')));\n };\n Grid.prototype.dblClickHandler = function (e) {\n var grid = parentsUntil(e.target, 'e-grid');\n if (isNullOrUndefined(grid) || grid.id !== this.element.id || closest(e.target, '.e-unboundcelldiv')) {\n return;\n }\n var args = this.getRowInfo(e.target);\n args.target = e.target;\n this.trigger(events.recordDoubleClick, args);\n this.notify(events.dblclick, e);\n };\n Grid.prototype.focusOutHandler = function (e) {\n if (this.isChildGrid(e)) {\n return;\n }\n if (!parentsUntil(e.target, 'e-grid')) {\n this.element.querySelector('.e-gridpopup').style.display = 'None';\n }\n var filterClear = this.element.querySelector('.e-cancel:not(.e-hide)');\n if (filterClear) {\n filterClear.classList.add('e-hide');\n }\n if ((!e.relatedTarget || !parentsUntil(e.relatedTarget, 'e-grid'))\n && !this.keyPress && this.editSettings.mode === 'Batch' && this.isEdit && !Browser.isDevice) {\n this.editModule.saveCell();\n this.notify(events.editNextValCell, {});\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 * @hidden\n */\n Grid.prototype.getRowHeight = function () {\n return this.rowHeight ? this.rowHeight : getRowHeight(this.element);\n };\n /**\n * Refreshes the Grid column changes.\n */\n Grid.prototype.refreshColumns = function () {\n this.isPreventScrollEvent = true;\n this.updateColumnObject();\n this.refresh();\n };\n /**\n * Export Grid data to Excel file(.xlsx).\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n */\n Grid.prototype.excelExport = function (excelExportProperties, isMultipleExport, \n /* tslint:disable-next-line:no-any */\n workbook, isBlob) {\n return this.excelExportModule.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 Property('All')\n ], Grid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeOpenColumnChooser\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"checkBoxChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataSourceChanged\", void 0);\n Grid = __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 { closest, classList } from '@syncfusion/ej2-base';\nimport { setCssInGridPopUp, getActualPropFromColl, isActionPrevent, iterateExtend } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\n/**\n *\n * The `Sort` module is used to handle sorting action.\n */\nvar Sort = /** @class */ (function () {\n /**\n * Constructor for Grid sorting module\n * @hidden\n */\n function Sort(parent, sortSettings, sortedColumns, locator) {\n this.contentRefresh = true;\n this.isModelChanged = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.sortSettings = sortSettings;\n this.sortedColumns = sortedColumns;\n this.focus = locator.getService('focus');\n this.addEventListener();\n }\n /**\n * The function used to update sortSettings\n * @return {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n var sortedColumn = { field: this.columnName, direction: this.direction };\n var index;\n var gCols = this.parent.groupSettings.columns;\n var flag = false;\n if (!this.isMultiSort) {\n if (!gCols.length) {\n this.sortSettings.columns = [sortedColumn];\n }\n else {\n var sortedCols = [];\n for (var i = 0, len = gCols.length; i < len; i++) {\n index = this.getSortedColsIndexByField(gCols[i], sortedCols);\n if (this.columnName === gCols[i]) {\n flag = true;\n sortedCols.push(sortedColumn);\n }\n else {\n var sCol = this.getSortColumnFromField(gCols[i]);\n sortedCols.push({ field: sCol.field, direction: sCol.direction });\n }\n }\n if (!flag) {\n sortedCols.push(sortedColumn);\n }\n this.sortSettings.columns = sortedCols;\n }\n }\n else {\n index = this.getSortedColsIndexByField(this.columnName);\n if (index > -1) {\n this.sortSettings.columns.splice(index, 1);\n }\n this.sortSettings.columns.push(sortedColumn);\n this.sortSettings.columns = this.sortSettings.columns;\n }\n this.parent.dataBind();\n this.lastSortedCol = this.columnName;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Sort.prototype.onActionComplete = function (e) {\n var args = !this.isRemove ? {\n columnName: this.columnName, direction: this.direction, requestType: 'sorting', type: events.actionComplete\n } : { requestType: 'sorting', type: events.actionComplete };\n this.isRemove = false;\n this.parent.trigger(events.actionComplete, extend(e, args));\n };\n /**\n * Sorts a column with the given options.\n * @param {string} columnName - Defines the column name to sort.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previously sorted columns are to be maintained.\n * @return {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n var gObj = this.parent;\n if (this.parent.getColumnByField(columnName).allowSorting === false || this.parent.isContextMenuOpen()) {\n return;\n }\n if (!gObj.allowMultiSorting) {\n isMultiSort = gObj.allowMultiSorting;\n }\n if (this.isActionPrevent()) {\n gObj.notify(events.preventBatch, {\n instance: this, handler: this.sortColumn,\n arg1: columnName, arg2: direction, arg3: isMultiSort\n });\n return;\n }\n this.backupSettings();\n this.columnName = columnName;\n this.direction = direction;\n this.isMultiSort = isMultiSort;\n this.removeSortIcons();\n var column = gObj.getColumnHeaderByField(columnName);\n this.updateSortedCols(columnName, isMultiSort);\n this.updateModel();\n };\n Sort.prototype.backupSettings = function () {\n this.lastSortedCols = iterateExtend(this.sortSettings.columns);\n this.lastCols = this.sortedColumns;\n };\n Sort.prototype.restoreSettings = function () {\n this.isModelChanged = false;\n this.isMultiSort = true;\n this.parent.setProperties({ sortSettings: { columns: this.lastSortedCols } }, true);\n //this.parent.sortSettings.columns = this.lastSortedCols; \n this.sortedColumns = this.lastCols;\n this.isModelChanged = true;\n };\n Sort.prototype.updateSortedCols = function (columnName, isMultiSort) {\n if (!isMultiSort) {\n if (this.parent.allowGrouping) {\n for (var i = 0, len = this.sortedColumns.length; i < len; i++) {\n if (this.parent.groupSettings.columns.indexOf(this.sortedColumns[i]) < 0) {\n this.sortedColumns.splice(i, 1);\n len--;\n i--;\n }\n }\n }\n else {\n this.sortedColumns.splice(0, this.sortedColumns.length);\n }\n }\n if (this.sortedColumns.indexOf(columnName) < 0) {\n this.sortedColumns.push(columnName);\n }\n };\n /**\n * @hidden\n */\n Sort.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.contentRefresh) {\n var args = this.sortSettings.columns.length ? {\n columnName: this.columnName, direction: this.direction, requestType: 'sorting', type: events.actionBegin\n } : { requestType: 'sorting', type: events.actionBegin, cancel: false };\n this.parent.notify(events.modelChanged, args);\n }\n this.refreshSortSettings();\n this.removeSortIcons();\n this.addSortIcons();\n };\n Sort.prototype.refreshSortSettings = function () {\n var _this = this;\n this.sortedColumns = [];\n this.sortSettings.columns.forEach(function (e) {\n _this.sortedColumns.push(e.field);\n });\n };\n /**\n * Clears all the sorted columns of the Grid.\n * @return {void}\n */\n Sort.prototype.clearSorting = function () {\n var cols = getActualPropFromColl(this.sortSettings.columns);\n if (this.isActionPrevent()) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearSorting });\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.removeSortColumn(cols[i].field);\n }\n };\n Sort.prototype.isActionPrevent = function () {\n return isActionPrevent(this.parent);\n };\n /**\n * Remove sorted column by field name.\n * @param {string} field - Defines the column field name to remove sort.\n * @return {void}\n * @hidden\n */\n Sort.prototype.removeSortColumn = function (field) {\n var gObj = this.parent;\n var cols = this.sortSettings.columns;\n if (this.sortedColumns.indexOf(field) < 0) {\n return;\n }\n if (this.isActionPrevent()) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.removeSortColumn, arg1: field });\n return;\n }\n this.backupSettings();\n this.removeSortIcons();\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === field) {\n if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1) {\n continue;\n }\n this.sortedColumns.splice(this.sortedColumns.indexOf(cols[i].field), 1);\n cols.splice(i, 1);\n this.isRemove = true;\n if (this.isModelChanged) {\n this.parent.notify(events.modelChanged, {\n requestType: 'sorting', type: events.actionBegin\n });\n }\n break;\n }\n }\n this.addSortIcons();\n };\n Sort.prototype.getSortedColsIndexByField = function (field, sortedColumns) {\n var cols = sortedColumns ? sortedColumns : this.sortSettings.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n Sort.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n if (this.parent.getColumns().length && this.sortSettings.columns.length) {\n var gObj = this.parent;\n this.contentRefresh = false;\n this.isMultiSort = this.sortSettings.columns.length > 1;\n for (var _i = 0, _a = gObj.sortSettings.columns.slice(); _i < _a.length; _i++) {\n var col = _a[_i];\n if (this.sortedColumns.indexOf(col.field) > -1) {\n this.sortColumn(col.field, col.direction, true);\n }\n }\n this.isMultiSort = false;\n this.contentRefresh = true;\n }\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.sortComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressed, this);\n this.parent.on(events.cancelBegin, this.cancelBeginEvent, this);\n };\n /**\n * @hidden\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.sortComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressed);\n this.parent.off(events.cancelBegin, this.cancelBeginEvent);\n };\n /**\n * To destroy the sorting\n * @return {void}\n * @hidden\n */\n Sort.prototype.destroy = function () {\n this.isModelChanged = false;\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n if (this.parent.element.querySelector('.e-gridpopup').querySelectorAll('.e-sortdirect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n this.clearSorting();\n this.isModelChanged = true;\n this.removeEventListener();\n };\n Sort.prototype.cancelBeginEvent = function (e) {\n if (e.requestType === 'sorting') {\n this.restoreSettings();\n this.refreshSortIcons();\n this.isMultiSort = true;\n }\n };\n Sort.prototype.clickHandler = function (e) {\n this.popUpClickHandler(e);\n var target = closest(e.target, '.e-headercell');\n if (target && !e.target.classList.contains('e-grptogglebtn') &&\n !e.target.classList.contains('e-stackedheadercell') &&\n !e.target.classList.contains('e-stackedheadercelldiv') &&\n !(target.classList.contains('e-resized')) &&\n !e.target.classList.contains('e-rhandler') &&\n !e.target.classList.contains('e-columnmenu') &&\n !e.target.classList.contains('e-filtermenudiv')) {\n var gObj = this.parent;\n var colObj = gObj.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n var direction = !target.querySelectorAll('.e-ascending').length ? 'Ascending' :\n 'Descending';\n if (colObj.type !== 'checkbox') {\n this.initiateSort(target, e, colObj);\n if (Browser.isDevice) {\n this.showPopUp(e);\n }\n }\n }\n if (target) {\n target.classList.remove('e-resized');\n }\n };\n Sort.prototype.keyPressed = function (e) {\n var ele = e.target;\n if (!this.parent.isEdit && (e.action === 'enter' || e.action === 'ctrlEnter' || e.action === 'shiftEnter')\n && closest(ele, '.e-headercell')) {\n var target = this.focus.getFocusedElement();\n if (isNullOrUndefined(target) || !target.classList.contains('e-headercell')\n || !target.querySelector('.e-headercelldiv')) {\n return;\n }\n var col = this.parent.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n this.initiateSort(target, e, col);\n }\n };\n Sort.prototype.initiateSort = function (target, e, column) {\n var gObj = this.parent;\n var field = column.field;\n var direction = !target.querySelectorAll('.e-ascending').length ? 'Ascending' :\n 'Descending';\n if (e.shiftKey || (this.sortSettings.allowUnsort && target.querySelectorAll('.e-descending').length)\n && !(gObj.groupSettings.columns.indexOf(field) > -1)) {\n this.removeSortColumn(field);\n }\n else {\n this.sortColumn(field, direction, e.ctrlKey || this.enableSortMultiTouch);\n }\n };\n Sort.prototype.showPopUp = function (e) {\n var target = closest(e.target, '.e-headercell');\n if (!isNullOrUndefined(target) || this.parent.isContextMenuOpen()) {\n setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-sortdirect e-icons e-icon-sortdirect' + (this.sortedColumns.length > 1 ? ' e-spanclicked' : ''));\n }\n };\n Sort.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.e-headercell') || e.target.classList.contains('e-rowcell') ||\n closest(target, '.e-gridpopup')) {\n if (target.classList.contains('e-sortdirect')) {\n if (!target.classList.contains('e-spanclicked')) {\n target.classList.add('e-spanclicked');\n this.enableSortMultiTouch = true;\n }\n else {\n target.classList.remove('e-spanclicked');\n this.enableSortMultiTouch = false;\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n }\n }\n else {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Sort.prototype.addSortIcons = function () {\n var gObj = this.parent;\n var header;\n var filterElement;\n var cols = this.sortSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var i = 0, len = cols.length; i < len; i++) {\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n header = gObj.getColumnHeaderByField(cols[i].field);\n this.aria.setSort(header, cols[i].direction);\n if (this.isMultiSort && cols.length > 1) {\n header.querySelector('.e-headercelldiv').insertBefore(this.parent.createElement('span', { className: 'e-sortnumber', innerHTML: (i + 1).toString() }), header.querySelector('.e-headertext'));\n }\n filterElement = header.querySelector('.e-sortfilterdiv');\n if (cols[i].direction === 'Ascending') {\n classList(filterElement, ['e-ascending', 'e-icon-ascending'], []);\n }\n else {\n classList(filterElement, ['e-descending', 'e-icon-descending'], []);\n }\n }\n };\n Sort.prototype.removeSortIcons = function (position) {\n var gObj = this.parent;\n var header;\n var cols = this.sortSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var i = position ? position : 0, len = !isNullOrUndefined(position) ? position + 1 : cols.length; i < len; i++) {\n header = gObj.getColumnHeaderByField(cols[i].field);\n if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1 &&\n (isNullOrUndefined(header) || !header.querySelector('.e-sortfilterdiv'))) {\n continue;\n }\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n this.aria.setSort(header, 'none');\n classList(header.querySelector('.e-sortfilterdiv'), [], ['e-descending', 'e-icon-descending', 'e-ascending', 'e-icon-ascending']);\n if (header.querySelector('.e-sortnumber')) {\n header.querySelector('.e-headercelldiv').removeChild(header.querySelector('.e-sortnumber'));\n }\n }\n };\n Sort.prototype.getSortColumnFromField = function (field) {\n for (var i = 0, len = this.sortSettings.columns.length; i < len; i++) {\n if (this.sortSettings.columns[i].field === field) {\n return this.sortSettings.columns[i];\n }\n }\n return false;\n };\n Sort.prototype.updateAriaAttr = function () {\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var _i = 0, _a = this.sortedColumns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (fieldNames.indexOf(col) === -1) {\n continue;\n }\n var header = this.parent.getColumnHeaderByField(col);\n this.aria.setSort(header, this.getSortColumnFromField(col).direction);\n }\n };\n Sort.prototype.refreshSortIcons = function (params) {\n if (params === void 0) { params = { args: { isFrozen: false } }; }\n if (!params.args.isFrozen) {\n this.removeSortIcons();\n this.isMultiSort = true;\n this.removeSortIcons();\n this.addSortIcons();\n this.isMultiSort = false;\n this.updateAriaAttr();\n }\n };\n return Sort;\n}());\nexport { Sort };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { createElement, classList, append } from '@syncfusion/ej2-base';\n/**\n * `NumericContainer` module handles rendering and refreshing numeric container.\n */\nvar NumericContainer = /** @class */ (function () {\n /**\n * Constructor for numericContainer module\n * @hidden\n */\n function NumericContainer(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render numericContainer\n * @hidden\n */\n NumericContainer.prototype.render = function () {\n this.pagerElement = this.pagerModule.element;\n this.renderNumericContainer();\n this.refreshNumericLinks();\n this.wireEvents();\n };\n /**\n * Refreshes the numeric container of Pager.\n */\n NumericContainer.prototype.refresh = function () {\n this.pagerModule.updateTotalPages();\n if (this.links.length) {\n this.updateLinksHtml();\n }\n this.updateStyles();\n };\n /**\n * The function is used to refresh refreshNumericLinks\n * @hidden\n */\n NumericContainer.prototype.refreshNumericLinks = function () {\n var link;\n var pagerObj = this.pagerModule;\n var div = pagerObj.element.querySelector('.e-numericcontainer');\n var frag = document.createDocumentFragment();\n div.innerHTML = '';\n for (var i = 1; i <= pagerObj.pageCount; i++) {\n link = createElement('a', {\n className: 'e-link e-numericitem e-spacing e-pager-default',\n attrs: { role: 'link', tabindex: '-1', 'aria-label': 'Goto Page ' + i,\n href: 'javascript:void(0);', name: 'Goto page' + i }\n });\n if (pagerObj.currentPage === i) {\n classList(link, ['e-currentitem', 'e-active'], ['e-pager-default']);\n }\n frag.appendChild(link);\n }\n div.appendChild(frag);\n this.links = [].slice.call(div.childNodes);\n };\n /**\n * Binding events to the element while component creation\n * @hidden\n */\n NumericContainer.prototype.wireEvents = function () {\n EventHandler.add(this.pagerElement, 'click', this.clickHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy\n * @hidden\n */\n NumericContainer.prototype.unwireEvents = function () {\n EventHandler.remove(this.pagerElement, 'click', this.clickHandler);\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n NumericContainer.prototype.destroy = function () {\n this.unwireEvents();\n };\n NumericContainer.prototype.renderNumericContainer = function () {\n this.element = createElement('div', {\n className: 'e-pagercontainer', attrs: { 'role': 'navigation' }\n });\n this.renderFirstNPrev(this.element);\n this.renderPrevPagerSet(this.element);\n this.element.appendChild(createElement('div', { className: 'e-numericcontainer' }));\n this.renderNextPagerSet(this.element);\n this.renderNextNLast(this.element);\n this.pagerModule.element.appendChild(this.element);\n };\n NumericContainer.prototype.renderFirstNPrev = function (pagerContainer) {\n this.first = createElement('div', {\n className: 'e-first e-icons e-icon-first',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n tabindex: '-1'\n }\n });\n this.prev = createElement('div', {\n className: 'e-prev e-icons e-icon-prev',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n tabindex: '-1'\n }\n });\n append([this.first, this.prev], pagerContainer);\n };\n NumericContainer.prototype.renderPrevPagerSet = function (pagerContainer) {\n var prevPager = createElement('div');\n this.PP = createElement('a', {\n className: 'e-link e-pp e-spacing', innerHTML: '...',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPagerTooltip'), role: 'link',\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n href: 'javascript:void(0);'\n }\n });\n prevPager.appendChild(this.PP);\n pagerContainer.appendChild(prevPager);\n };\n NumericContainer.prototype.renderNextPagerSet = function (pagerContainer) {\n var nextPager = createElement('div');\n this.NP = createElement('a', {\n className: 'e-link e-np e-spacing',\n innerHTML: '...', attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPagerTooltip'), role: 'link',\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n href: 'javascript:void(0);'\n }\n });\n nextPager.appendChild(this.NP);\n pagerContainer.appendChild(nextPager);\n };\n NumericContainer.prototype.renderNextNLast = function (pagerContainer) {\n this.next = createElement('div', {\n className: 'e-next e-icons e-icon-next',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n tabindex: '-1'\n }\n });\n this.last = createElement('div', {\n className: 'e-last e-icons e-icon-last',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n tabindex: '-1'\n }\n });\n append([this.next, this.last], pagerContainer);\n };\n NumericContainer.prototype.clickHandler = function (e) {\n var pagerObj = this.pagerModule;\n var target = e.target;\n pagerObj.previousPageNo = pagerObj.currentPage;\n if (!target.classList.contains('e-disable') && !isNullOrUndefined(target.getAttribute('index'))) {\n pagerObj.currentPage = parseInt(target.getAttribute('index'), 10);\n pagerObj.dataBind();\n }\n return false;\n };\n NumericContainer.prototype.updateLinksHtml = function () {\n var pagerObj = this.pagerModule;\n var currentPageSet;\n var pageNo;\n pagerObj.currentPage = pagerObj.totalPages === 1 ? 1 : pagerObj.currentPage;\n if (pagerObj.currentPage > pagerObj.totalPages && pagerObj.totalPages) {\n pagerObj.currentPage = pagerObj.totalPages;\n }\n currentPageSet = parseInt((pagerObj.currentPage / pagerObj.pageCount).toString(), 10);\n if (pagerObj.currentPage % pagerObj.pageCount === 0 && currentPageSet > 0) {\n currentPageSet = currentPageSet - 1;\n }\n for (var i = 0; i < pagerObj.pageCount; i++) {\n pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n if (pageNo <= pagerObj.totalPages) {\n this.links[i].style.display = '';\n this.links[i].setAttribute('index', pageNo.toString());\n this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n if (pagerObj.currentPage !== pageNo) {\n this.links[i].classList.add('e-pager-default');\n }\n else {\n this.links[i].classList.remove('e-pager-default');\n }\n }\n else {\n this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n this.links[i].style.display = 'none';\n }\n classList(this.links[i], [], ['e-currentitem', 'e-active']);\n }\n this.first.setAttribute('index', '1');\n this.last.setAttribute('index', pagerObj.totalPages.toString());\n this.prev.setAttribute('index', (pagerObj.currentPage - 1).toString());\n this.next.setAttribute('index', (pagerObj.currentPage + 1).toString());\n this.pagerElement.querySelector('.e-mfirst').setAttribute('index', '1');\n this.pagerElement.querySelector('.e-mlast').setAttribute('index', pagerObj.totalPages.toString());\n this.pagerElement.querySelector('.e-mprev').setAttribute('index', (pagerObj.currentPage - 1).toString());\n this.pagerElement.querySelector('.e-mnext').setAttribute('index', (pagerObj.currentPage + 1).toString());\n this.PP.setAttribute('index', (parseInt(this.links[0].getAttribute('index'), 10) - pagerObj.pageCount).toString());\n this.NP.setAttribute('index', (parseInt(this.links[this.links.length - 1].getAttribute('index'), 10) + 1).toString());\n };\n NumericContainer.prototype.updateStyles = function () {\n this.updateFirstNPrevStyles();\n this.updatePrevPagerSetStyles();\n this.updateNextPagerSetStyles();\n this.updateNextNLastStyles();\n if (this.links.length) {\n classList(this.links[(this.pagerModule.currentPage - 1) % this.pagerModule.pageCount], ['e-currentitem', 'e-active'], []);\n }\n };\n NumericContainer.prototype.updateFirstNPrevStyles = function () {\n var firstPage = ['e-firstpage', 'e-pager-default'];\n var firstPageDisabled = ['e-firstpagedisabled', 'e-disable'];\n var prevPage = ['e-prevpage', 'e-pager-default'];\n var prevPageDisabled = ['e-prevpagedisabled', 'e-disable'];\n if (this.pagerModule.totalPages > 0 && this.pagerModule.currentPage > 1) {\n classList(this.prev, prevPage, prevPageDisabled);\n classList(this.first, firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPage, prevPageDisabled);\n }\n else {\n classList(this.prev, prevPageDisabled, prevPage);\n classList(this.first, firstPageDisabled, firstPage);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPageDisabled, prevPage);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPageDisabled, firstPage);\n }\n };\n NumericContainer.prototype.updatePrevPagerSetStyles = function () {\n if (this.pagerModule.currentPage > this.pagerModule.pageCount) {\n classList(this.PP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n else {\n classList(this.PP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n };\n NumericContainer.prototype.updateNextPagerSetStyles = function () {\n var pagerObj = this.pagerModule;\n var firstPage = this.links[0].innerHTML.replace(pagerObj.customText, '');\n if (!firstPage.length || !this.links.length || (parseInt(firstPage, 10) + pagerObj.pageCount > pagerObj.totalPages)) {\n classList(this.NP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n else {\n classList(this.NP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n };\n NumericContainer.prototype.updateNextNLastStyles = function () {\n var lastPage = ['e-lastpage', 'e-pager-default'];\n var lastPageDisabled = ['e-lastpagedisabled', 'e-disable'];\n var nextPage = ['e-nextpage', 'e-pager-default'];\n var nextPageDisabled = ['e-nextpagedisabled', 'e-disable'];\n var pagerObj = this.pagerModule;\n if (pagerObj.currentPage === pagerObj.totalPages || pagerObj.totalRecordsCount === 0) {\n classList(this.last, lastPageDisabled, lastPage);\n classList(this.next, nextPageDisabled, nextPage);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPageDisabled, lastPage);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPageDisabled, nextPage);\n }\n else {\n classList(this.last, lastPage, lastPageDisabled);\n classList(this.next, nextPage, nextPageDisabled);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPage, lastPageDisabled);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPage, nextPageDisabled);\n }\n };\n return NumericContainer;\n}());\nexport { NumericContainer };\n","import { createElement, append } from '@syncfusion/ej2-base';\n/**\n * `PagerMessage` module is used to display pager information.\n */\nvar PagerMessage = /** @class */ (function () {\n /**\n * Constructor for externalMessage module\n * @hidden\n */\n function PagerMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render pager message\n * @hidden\n */\n PagerMessage.prototype.render = function () {\n var div = createElement('div', { className: 'e-parentmsgbar', attrs: { 'aria-label': 'Pager Information' } });\n this.pageNoMsgElem = createElement('span', { className: 'e-pagenomsg', styles: 'textalign:right' });\n this.pageCountMsgElem = createElement('span', { className: 'e-pagecountmsg', styles: 'textalign:right' });\n append([this.pageNoMsgElem, this.pageCountMsgElem], div);\n this.pagerModule.element.appendChild(div);\n this.refresh();\n };\n /**\n * Refreshes the pager information.\n */\n PagerMessage.prototype.refresh = function () {\n var pagerObj = this.pagerModule;\n this.pageNoMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('currentPageInfo'), [pagerObj.totalRecordsCount === 0 ? 0 :\n pagerObj.currentPage, pagerObj.totalPages || 0]) + ' ';\n this.pageCountMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('totalItemsInfo'), [pagerObj.totalRecordsCount || 0]);\n this.pageNoMsgElem.parentElement.setAttribute('aria-label', this.pageNoMsgElem.textContent + this.pageCountMsgElem.textContent);\n };\n /**\n * Hides the Pager information.\n */\n PagerMessage.prototype.hideMessage = function () {\n if (this.pageNoMsgElem) {\n this.pageNoMsgElem.style.display = 'none';\n }\n if (this.pageCountMsgElem) {\n this.pageCountMsgElem.style.display = 'none';\n }\n };\n /**\n * Shows the Pager information.\n */\n PagerMessage.prototype.showMessage = function () {\n if (!this.pageNoMsgElem) {\n this.render();\n }\n this.pageNoMsgElem.style.display = '';\n this.pageCountMsgElem.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n PagerMessage.prototype.destroy = function () {\n //destroy\n };\n PagerMessage.prototype.format = function (str, args) {\n var regx;\n for (var i = 0; i < args.length; i++) {\n regx = new RegExp('\\\\{' + (i) + '\\\\}', 'gm');\n str = str.replace(regx, args[i].toString());\n }\n return str;\n };\n return PagerMessage;\n}());\nexport { PagerMessage };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, L10n, Browser } from '@syncfusion/ej2-base';\nimport { createElement, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Property, Event, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { NumericContainer } from './numeric-container';\nimport { PagerMessage } from './pager-message';\nimport { appendChildren } from '../grid/base/util';\n/**\n * Represents the `Pager` component.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Pager = /** @class */ (function (_super) {\n __extends(Pager, _super);\n /**\n * Constructor for creating the component.\n * @hidden\n */\n function Pager(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.defaultConstants = {\n currentPageInfo: '{0} of {1} pages',\n totalItemsInfo: '({0} items)',\n firstPageTooltip: 'Go to first page',\n lastPageTooltip: 'Go to last page',\n nextPageTooltip: 'Go to next page',\n previousPageTooltip: 'Go to previous page',\n nextPagerTooltip: 'Go to next pager',\n previousPagerTooltip: 'Go to previous pager',\n pagerDropDown: 'Items per page',\n pagerAllDropDown: 'Items',\n All: 'All'\n };\n /**\n * `containerModule` is used to manipulate numeric container behavior of Pager.\n */\n _this.containerModule = new NumericContainer(_this);\n /**\n * `pagerMessageModule` is used to manipulate pager message of Pager.\n */\n _this.pagerMessageModule = new PagerMessage(_this);\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n * @hidden\n */\n Pager.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableExternalMessage) {\n modules.push({\n member: 'externalMessage',\n args: [this]\n });\n }\n if (this.checkpagesizes()) {\n modules.push({\n member: 'pagerdropdown',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Initialize the event handler\n * @hidden\n */\n Pager.prototype.preRender = function () {\n //preRender\n };\n /**\n * To Initialize the component rendering\n */\n Pager.prototype.render = function () {\n if (this.template) {\n this.pagerTemplate();\n }\n else {\n this.initLocalization();\n this.updateRTL();\n this.totalRecordsCount = this.totalRecordsCount || 0;\n this.renderFirstPrevDivForDevice();\n this.containerModule.render();\n if (this.enablePagerMessage) {\n this.pagerMessageModule.render();\n }\n this.renderNextLastDivForDevice();\n if (this.checkpagesizes()) {\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 ? this.convertValue(pageSizesModule) :\n [this.pagerModule.getLocalizedLabel('All'), '5', '10', '12', '20']);\n var defaultValue = this.pagerModule.pageSize;\n this.dropDownListObject = new DropDownList({\n dataSource: pageSizesArray,\n value: defaultValue.toString(),\n change: this.onChange.bind(this),\n cssClass: 'e-alldrop'\n });\n this.dropDownListObject.appendTo(input);\n if (pageSizesModule.length) {\n this.dropDownListObject.element.value = this.pagerModule.pageSize.toString();\n }\n pagerObj.pageSize = defaultValue;\n pagerObj.dataBind();\n pagerObj.trigger('dropDownChanged', { pageSize: defaultValue });\n this.addEventListener();\n };\n /**\n * For internal use only - Get the pagesize.\n * @private\n * @hidden\n */\n PagerDropDown.prototype.onChange = function (e) {\n if (this.dropDownListObject.value === this.pagerModule.getLocalizedLabel('All')) {\n this.pagerModule.pageSize = this.pagerModule.totalRecordsCount;\n this.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerAllDropDown');\n e.value = this.pagerModule.pageSize;\n if (document.getElementsByClassName('e-popup-open e-alldrop').length) {\n document.getElementsByClassName('e-alldrop')[1].style.display = 'none';\n }\n }\n else {\n this.pagerModule.pageSize = parseInt(this.dropDownListObject.value, 10);\n if (this.pagerCons.innerHTML !== this.pagerModule.getLocalizedLabel('pagerDropDown')) {\n this.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerDropDown');\n }\n }\n this.pagerModule.dataBind();\n this.pagerModule.trigger('dropDownChanged', { pageSize: this.dropDownListObject.value });\n };\n PagerDropDown.prototype.beforeValueChange = function (prop) {\n if (typeof prop.newProp.value === 'number') {\n var val = prop.newProp.value.toString();\n prop.newProp.value = val;\n }\n };\n PagerDropDown.prototype.convertValue = function (pageSizeValue) {\n var item = pageSizeValue;\n for (var i = 0; i < item.length; i++) {\n item[i] = typeof item[i] === 'number' ? item[i].toString() : item[i];\n }\n return item;\n };\n PagerDropDown.prototype.setDropDownValue = function (prop, value) {\n if (this.dropDownListObject) {\n this.dropDownListObject[prop] = value;\n }\n };\n PagerDropDown.prototype.addEventListener = function () {\n this.dropDownListObject.on('beforeValueChange', this.beforeValueChange, this);\n };\n PagerDropDown.prototype.removeEventListener = function () {\n this.dropDownListObject.off('beforeValueChange', this.beforeValueChange);\n };\n /**\n * To destroy the Pagerdropdown\n * @method destroy\n * @return {void}\n * @hidden\n */\n PagerDropDown.prototype.destroy = function (args) {\n if (this.dropDownListObject && !this.dropDownListObject.isDestroyed) {\n this.removeEventListener();\n this.dropDownListObject.destroy();\n remove(this.pagerDropDownDiv);\n }\n };\n return PagerDropDown;\n}());\nexport { PagerDropDown };\n","import { createElement, remove } 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, 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 = this.parent.createElement('div', { className: 'e-gridpager' });\n pagerObj = gridExtend({}, extend({}, getActualProperties(this.pageSettings)), {\n click: this.clickHandler.bind(this),\n dropDownChanged: this.onSelect.bind(this),\n enableRtl: gObj.enableRtl, locale: gObj.locale,\n created: this.addAriaAttr.bind(this)\n }, ['parentObj', 'propName']);\n this.pagerObj = new Pager(pagerObj);\n };\n Page.prototype.onSelect = function (e) {\n this.pageSettings.pageSize = e.pageSize;\n this.pageSettings.currentPage = 1;\n };\n Page.prototype.addAriaAttr = function () {\n var _this = this;\n if (!(this.pageSettings.template)) {\n var numericContainerNew = this.parent.createElement('div', { className: 'e-numericcontainer' });\n var pagerContainer = this.element.querySelector('.e-pagercontainer');\n var frag = document.createDocumentFragment();\n var numericContainer = this.element.querySelector('.e-numericcontainer');\n var links = numericContainer.querySelectorAll('a');\n for (var i = 0; i < links.length; i++) {\n if (this.parent.getContentTable()) {\n links[i].setAttribute('aria-owns', this.parent.getContentTable().id);\n }\n else {\n links[i].setAttribute('aria-owns', this.parent.element.getAttribute('id') + '_content_table');\n }\n var numericContainerDiv = this.parent.createElement('div');\n numericContainerDiv.appendChild(links[i]);\n frag.appendChild(numericContainerDiv);\n }\n numericContainerNew.appendChild(frag);\n pagerContainer.replaceChild(numericContainerNew, numericContainer);\n var classList = ['.e-mfirst', '.e-mprev', '.e-first', '.e-prev', '.e-next', '.e-last', '.e-mnext', '.e-mlast'];\n classList.forEach(function (value) {\n var element = _this.element.querySelector(value);\n if (_this.parent.getContentTable()) {\n element.setAttribute('aria-owns', _this.parent.getContentTable().id);\n }\n });\n }\n };\n Page.prototype.dataReady = function (e) {\n this.updateModel(e);\n };\n /**\n * Refreshes the page count, pager information, and external message.\n * @return {void}\n */\n Page.prototype.refresh = function () {\n this.pagerObj.refresh();\n };\n /**\n * Navigates to the target page according to the given number.\n * @param {number} pageNo - Defines the page number to navigate.\n * @return {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.pagerObj.goToPage(pageNo);\n };\n /**\n * The function used to update pageSettings model\n * @return {void}\n * @hidden\n */\n Page.prototype.updateModel = function (e) {\n this.parent.pageSettings.totalRecordsCount = e.count;\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Page.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n currentPage: this.parent.pageSettings.currentPage, requestType: 'paging',\n type: events.actionComplete\n }));\n };\n /**\n * @hidden\n */\n Page.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.pagerObj[prop] = newProp[prop];\n }\n this.pagerObj.dataBind();\n };\n Page.prototype.clickHandler = function (e) {\n var gObj = this.parent;\n if (this.isForceCancel || isActionPrevent(gObj) && !gObj.prevPageMoving) {\n if (!this.isForceCancel) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.goToPage, arg1: e.currentPage });\n this.isForceCancel = true;\n this.pagerObj.currentPage = gObj.pageSettings.currentPage;\n this.pagerObj.dataBind();\n }\n else {\n this.isForceCancel = false;\n }\n e.cancel = true;\n return;\n }\n gObj.prevPageMoving = false;\n var prevPage = this.pageSettings.currentPage;\n this.pageSettings.currentPage = e.currentPage;\n this.parent.notify(events.modelChanged, {\n requestType: 'paging',\n previousPage: prevPage,\n currentPage: e.currentPage,\n type: events.actionBegin\n });\n };\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","import { EventHandler, closest, isUndefined } from '@syncfusion/ej2-base';\nimport { extend, getValue } from '@syncfusion/ej2-base';\nimport { remove } 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, getComplexFieldID, setComplexFieldID } from '../base/util';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport { DatePickerEditCell } from '../renderer/datepicker-edit-cell';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { TemplateEditCell } from '../renderer/template-edit-cell';\n/**\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for the Grid editing module\n * @hidden\n */\n function Edit(parent, serviceLocator) {\n this.editCellType = {\n 'dropdownedit': DropDownEditCell, 'numericedit': NumericEditCell,\n 'datepickeredit': DatePickerEditCell, 'datetimepickeredit': DatePickerEditCell,\n 'booleanedit': BooleanEditCell, 'defaultedit': DefaultEditCell,\n 'templateedit': TemplateEditCell\n };\n this.editType = { 'Inline': InlineEdit, 'Normal': InlineEdit, 'Batch': BatchEdit, 'Dialog': DialogEdit };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.l10n = this.serviceLocator.getService('localization');\n this.addEventListener();\n this.updateEditObj();\n this.createAlertDlg();\n this.createConfirmDlg();\n }\n Edit.prototype.updateColTypeObj = function () {\n var _this = this;\n this.parent.columnModel.forEach(function (col) {\n if (_this.parent.editSettings.template || col.editTemplate) {\n var templteCell = 'templateedit';\n col.edit = extend(new _this.editCellType[templteCell](_this.parent), col.edit || {});\n }\n else {\n col.edit = extend(new _this.editCellType[col.editType && _this.editCellType[col.editType] ?\n col.editType : 'defaultedit'](_this.parent, _this.serviceLocator), col.edit || {});\n }\n });\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n */\n Edit.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowAdding':\n case 'allowDeleting':\n case 'allowEditing':\n if (gObj.editSettings.allowAdding || gObj.editSettings.allowEditing || gObj.editSettings.allowDeleting) {\n this.initialEnd();\n }\n break;\n case 'mode':\n this.updateEditObj();\n gObj.isEdit = false;\n gObj.refresh();\n break;\n }\n }\n };\n Edit.prototype.updateEditObj = function () {\n if (this.editModule) {\n this.editModule.destroy();\n }\n this.renderer = new EditRender(this.parent, this.serviceLocator);\n this.editModule = new this.editType[this.parent.editSettings.mode](this.parent, this.serviceLocator, this.renderer);\n };\n Edit.prototype.initialEnd = function () {\n this.updateColTypeObj();\n };\n Edit.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getContent(), 'touchstart', this.tapEvent, this);\n };\n Edit.prototype.unwireEvents = function () {\n EventHandler.remove(this.parent.getContent(), 'touchstart', this.tapEvent);\n };\n Edit.prototype.tapEvent = function (e) {\n if (this.getUserAgent()) {\n if (!Global.timer) {\n Global.timer = setTimeout(function () {\n Global.timer = null;\n }, 300);\n }\n else {\n clearTimeout(Global.timer);\n Global.timer = null;\n this.parent.notify(events.doubleTap, e);\n }\n }\n };\n Edit.prototype.getUserAgent = function () {\n var userAgent = window.navigator.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n /**\n * Edits any bound record in the Grid by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\n */\n Edit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowEditing || gObj.isEdit || gObj.editSettings.mode === 'Batch') {\n return;\n }\n if (!gObj.getSelectedRows().length) {\n if (!tr) {\n this.showDialog('EditOperationAlert', this.alertDObj);\n return;\n }\n }\n else if (!tr) {\n tr = gObj.getSelectedRows()[0];\n }\n if (tr.style.display === 'none') {\n return;\n }\n this.editModule.startEdit(tr);\n this.refreshToolbar();\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n this.parent.notify('start-edit', {});\n };\n /**\n * Cancels edited state.\n */\n Edit.prototype.closeEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog\n && this.parent.element.querySelectorAll('.e-updatedtd').length) {\n this.showDialog('CancelEdit', this.dialogObj);\n return;\n }\n this.editModule.closeEdit();\n this.refreshToolbar();\n this.parent.notify('close-edit', {});\n };\n Edit.prototype.refreshToolbar = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * To adds a new row at the top with the given data. When data is not passed, it will add empty rows.\n * > `editSettings.allowEditing` should be true.\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n */\n Edit.prototype.addRecord = function (data, index) {\n if (!this.parent.editSettings.allowAdding) {\n return;\n }\n this.editModule.addRecord(data, index);\n this.refreshToolbar();\n this.parent.notify('start-add', {});\n };\n /**\n * Deletes a record with the given options. If fieldname and data are not given, the Grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n * @param {string} fieldname - Defines the primary key field name of the column.\n * @param {Object} data - Defines the JSON data record to be deleted.\n */\n Edit.prototype.deleteRecord = function (fieldname, data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowDeleting) {\n return;\n }\n if (!data) {\n if (!gObj.getSelectedRecords().length) {\n this.showDialog('DeleteOperationAlert', this.alertDObj);\n return;\n }\n }\n if (gObj.editSettings.showDeleteConfirmDialog) {\n this.showDialog('ConfirmDelete', this.dialogObj);\n return;\n }\n this.editModule.deleteRecord(fieldname, data);\n };\n /**\n * Deletes a visible row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n */\n Edit.prototype.deleteRow = function (tr) {\n this.deleteRecord(null, this.parent.getCurrentViewRecords()[parseInt(tr.getAttribute('aria-rowindex'), 10)]);\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n */\n Edit.prototype.endEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog &&\n (isNullOrUndefined(this.formObj) || this.formObj.validate())) {\n this.parent.editModule.saveCell();\n this.parent.notify(events.editNextValCell, {});\n if (isNullOrUndefined(this.formObj) || this.formObj.validate()) {\n this.showDialog('BatchSaveConfirm', this.dialogObj);\n return;\n }\n }\n this.endEditing();\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n */\n Edit.prototype.updateCell = function (rowIndex, field, value) {\n this.editModule.updateCell(rowIndex, field, value);\n };\n /**\n * To update the specified row by given values without changing into edited state.\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n */\n Edit.prototype.updateRow = function (index, data) {\n this.editModule.updateRow(index, data);\n };\n /**\n * Resets added, edited, and deleted records in the batch mode.\n */\n Edit.prototype.batchCancel = function () {\n this.closeEdit();\n };\n /**\n * Bulk saves added, edited, and deleted records in the batch mode.\n */\n Edit.prototype.batchSave = function () {\n this.endEdit();\n };\n /**\n * Changes a particular cell into edited state based on the row index and field name provided in the `batch` mode.\n * @param {number} index - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform batch edit.\n */\n Edit.prototype.editCell = function (index, field) {\n this.editModule.editCell(index, field);\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n * @return {boolean}\n */\n Edit.prototype.editFormValidate = function () {\n if (this.formObj) {\n return this.formObj.validate();\n }\n return false;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n * @return {Object}\n */\n Edit.prototype.getBatchChanges = function () {\n return this.editModule.getBatchChanges ? this.editModule.getBatchChanges() : {};\n };\n /**\n * Gets the current value of the edited component.\n */\n Edit.prototype.getCurrentEditCellData = function () {\n var obj = this.getCurrentEditedData(this.formObj.element, {});\n return obj[Object.keys(obj)[0]];\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n */\n Edit.prototype.saveCell = function () {\n this.editModule.saveCell();\n };\n Edit.prototype.endEditing = function () {\n this.editModule.endEdit();\n this.refreshToolbar();\n };\n Edit.prototype.showDialog = function (content, obj) {\n obj.content = '
    ' + this.l10n.getConstant(content) + '
    ';\n obj.dataBind();\n obj.show();\n };\n Edit.prototype.getValueFromType = function (col, value) {\n var val = value;\n switch (col.type) {\n case 'number':\n val = !isNaN(parseFloat(value)) ? parseFloat(value) : null;\n break;\n case 'boolean':\n if (col.editType !== 'booleanedit') {\n val = value === this.l10n.getConstant('True') || value === true ? true : false;\n }\n break;\n case 'date':\n case 'datetime':\n if (col.editType !== 'datepickeredit' && col.editType !== 'datetimepickeredit' && value && value.length) {\n val = new Date(value);\n }\n break;\n }\n return val;\n };\n Edit.prototype.destroyToolTip = function () {\n var elements = [].slice.call(this.parent.element.querySelectorAll('.e-griderror'));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n remove(elem);\n }\n this.parent.getContent().firstElementChild.style.position = 'relative';\n };\n Edit.prototype.createConfirmDlg = function () {\n this.dialogObj = this.dlgWidget([\n {\n click: this.dlgOk.bind(this),\n buttonModel: { content: this.l10n.getConstant('OKButton'), cssClass: 'e-primary', isPrimary: true }\n },\n {\n click: this.dlgCancel.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.l10n.getConstant('CancelButton') }\n }\n ], 'EditConfirm');\n };\n Edit.prototype.createAlertDlg = function () {\n this.alertDObj = this.dlgWidget([\n {\n click: this.alertClick.bind(this), buttonModel: { content: this.l10n.getConstant('OKButton'), cssClass: 'e-flat', isPrimary: true }\n }\n ], 'EditAlert');\n };\n Edit.prototype.alertClick = function () {\n this.alertDObj.hide();\n };\n Edit.prototype.dlgWidget = function (btnOptions, name) {\n var div = this.parent.createElement('div', { id: this.parent.element.id + name });\n this.parent.element.appendChild(div);\n var options = {\n showCloseIcon: false,\n isModal: true,\n visible: false,\n closeOnEscape: true,\n target: this.parent.element,\n width: '320px',\n animationSettings: { effect: 'None' }\n };\n options.buttons = btnOptions;\n var obj = new Dialog(options);\n obj.appendTo(div);\n return obj;\n };\n Edit.prototype.dlgCancel = function () {\n this.dialogObj.hide();\n };\n Edit.prototype.dlgOk = function (e) {\n switch (this.dialogObj.element.querySelector('.e-dlg-content').firstElementChild.innerText) {\n case this.l10n.getConstant('ConfirmDelete'):\n this.editModule.deleteRecord();\n break;\n case this.l10n.getConstant('CancelEdit'):\n this.editModule.closeEdit();\n break;\n case this.l10n.getConstant('BatchSaveConfirm'):\n this.endEditing();\n break;\n case this.l10n.getConstant('BatchSaveLostChanges'):\n if (this.parent.editSettings.mode === 'Batch') {\n this.editModule.addCancelWhilePaging();\n }\n this.executeAction();\n break;\n }\n this.dlgCancel();\n };\n /**\n * @hidden\n */\n Edit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.initialEnd, this.initialEnd, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.autoCol, this.updateColTypeObj, this);\n this.parent.on(events.tooltipDestroy, this.destroyToolTip, this);\n this.parent.on(events.preventBatch, this.preventBatch, this);\n this.parent.on(events.destroyForm, this.destroyForm, this);\n this.actionBeginFunction = this.onActionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n /**\n * @hidden\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.initialEnd, this.initialEnd);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.autoCol, this.updateColTypeObj);\n this.parent.off(events.tooltipDestroy, this.destroyToolTip);\n this.parent.off(events.preventBatch, this.preventBatch);\n this.parent.off(events.destroyForm, this.destroyForm);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.off(events.initialEnd, this.unwireEvents);\n };\n Edit.prototype.actionComplete = function (e) {\n var actions = ['add', 'beginEdit', 'save', 'delete', 'cancel'];\n if (actions.indexOf(e.requestType) < 0) {\n this.parent.isEdit = false;\n }\n this.refreshToolbar();\n };\n /**\n * @hidden\n */\n Edit.prototype.getCurrentEditedData = function (form, editedData) {\n var _this = this;\n var gObj = this.parent;\n if (gObj.editSettings.template) {\n [].slice.call(form.elements).forEach(function (element) {\n if (element.hasAttribute('name')) {\n var field = setComplexFieldID(element.getAttribute('name'));\n var column = gObj.getColumnByField(field) || { field: field, type: element.getAttribute('type') };\n var value = void 0;\n if (column.type === 'checkbox' || column.type === 'boolean') {\n value = element.checked;\n }\n else if (element.value) {\n value = element.value;\n if (element.ej2_instances &&\n element.ej2_instances.length &&\n !isNullOrUndefined(element.ej2_instances[0].value)) {\n element.blur();\n value = element.ej2_instances[0].value;\n }\n }\n if (column.edit && typeof column.edit.read === 'string') {\n value = getValue(column.edit.read, window)(element, value);\n }\n else if (column.edit && column.edit.read) {\n value = column.edit.read(element, value);\n }\n value = gObj.editModule.getValueFromType(column, value);\n setValue(column.field, isUndefined(value) || value === 'null' ? null : value, editedData);\n }\n });\n return editedData;\n }\n gObj.columnModel.filter(function (col) { return col.editTemplate; }).forEach(function (col) {\n if (form[getComplexFieldID(col.field)]) {\n var inputElements = [].slice.call(form[getComplexFieldID(col.field)]);\n inputElements = inputElements.length ? inputElements : [form[getComplexFieldID(col.field)]];\n inputElements.forEach(function (input) {\n var value = _this.getValue(col, input);\n setValue(col.field, isUndefined(value) || value === 'null' ? null : value, editedData);\n });\n }\n });\n var inputs = [].slice.call(form.querySelectorAll('.e-field'));\n for (var i = 0, len = inputs.length; i < len; i++) {\n var col = gObj.getColumnByUid(inputs[i].getAttribute('e-mappinguid'));\n if (col && col.field) {\n var value = this.getValue(col, inputs[i]);\n setValue(col.field, isUndefined(value) || value === 'null' ? null : value, editedData);\n }\n }\n return editedData;\n };\n Edit.prototype.getValue = function (col, input) {\n var value = input.value;\n var gObj = this.parent;\n var temp = col.edit.read;\n if (!(col.type === 'checkbox' || col.type === 'boolean')) {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n value = gObj.editModule.getValueFromType(col, (temp)(input, value));\n }\n else {\n value = gObj.editModule.getValueFromType(col, col.edit.read(input, value));\n }\n }\n else {\n value = input.checked;\n }\n return value;\n };\n /**\n * @hidden\n */\n Edit.prototype.onActionBegin = function (e) {\n var restrictedRequestTypes = ['filterafteropen', 'filterbeforeopen', 'filterchoicerequest', 'save'];\n if (this.parent.editSettings.mode !== 'Batch' && this.formObj && !this.formObj.isDestroyed\n && restrictedRequestTypes.indexOf(e.requestType) === -1) {\n this.destroyWidgets();\n this.destroyForm();\n }\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyWidgets = function (cols) {\n var gObj = this.parent;\n if (gObj.editSettings.template) {\n this.parent.destroyTemplate(['editSettingsTemplate']);\n }\n if (gObj.columnModel.some(function (column) { return !isNullOrUndefined(column.editTemplate); })) {\n this.parent.destroyTemplate(['editTemplate']);\n }\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 [].slice.call(this.formObj.element.elements).forEach(function (element) {\n if (element.hasAttribute('name')) {\n if (element.ej2_instances &&\n element.ej2_instances.length &&\n !element.ej2_instances[0].isDestroyed) {\n element.ej2_instances[0].destroy();\n }\n }\n });\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyForm = function () {\n this.destroyToolTip();\n if (this.formObj && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n this.destroyToolTip();\n };\n /**\n * To destroy the editing.\n * @return {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement) {\n return;\n }\n var hasGridChild = gridElement.querySelector('.e-gridheader') &&\n gridElement.querySelector('.e-gridcontent') ? true : false;\n if (hasGridChild) {\n this.destroyForm();\n }\n this.removeEventListener();\n var elem = this.dialogObj.element;\n if (elem.childElementCount > 0) {\n this.dialogObj.destroy();\n remove(elem);\n }\n elem = this.alertDObj.element;\n if (elem.childElementCount > 0) {\n this.alertDObj.destroy();\n remove(elem);\n }\n if (!hasGridChild) {\n return;\n }\n this.unwireEvents();\n if (this.editModule) {\n this.editModule.destroy();\n }\n };\n Edit.prototype.keyPressHandler = function (e) {\n switch (e.action) {\n case 'insert':\n this.addRecord();\n break;\n case 'delete':\n if ((e.target.tagName !== 'INPUT' || e.target.classList.contains('e-checkselect'))\n && !document.querySelector('.e-popup-open')) {\n this.deleteRecord();\n }\n break;\n case 'f2':\n this.startEdit();\n break;\n case 'enter':\n if (!parentsUntil(e.target, '.e-unboundcelldiv') && this.parent.editSettings.mode !== 'Batch' &&\n (parentsUntil(e.target, 'e-gridcontent') || (this.parent.frozenRows\n && parentsUntil(e.target, 'e-headercontent')))\n && !document.querySelectorAll('.e-popup-open').length) {\n e.preventDefault();\n this.endEdit();\n }\n break;\n case 'escape':\n this.closeEdit();\n break;\n }\n };\n Edit.prototype.preventBatch = function (args) {\n this.preventObj = args;\n this.showDialog('BatchSaveLostChanges', this.dialogObj);\n };\n Edit.prototype.executeAction = function () {\n this.preventObj.handler.call(this.preventObj.instance, this.preventObj.arg1, this.preventObj.arg2, this.preventObj.arg3, this.preventObj.arg4, this.preventObj.arg5, this.preventObj.arg6, this.preventObj.arg7, this.preventObj.arg8);\n };\n /**\n * @hidden\n */\n Edit.prototype.applyFormValidation = function (cols) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n var form = 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 cols.forEach(function (col, index) {\n if (!col.visible) {\n return;\n }\n if (index < frzCols && col.validationRules) {\n rules[getComplexFieldID(col.field)] = col.validationRules;\n }\n else if (index >= frzCols && col.validationRules) {\n mRules[getComplexFieldID(col.field)] = col.validationRules;\n }\n });\n if (frzCols && this.parent.editSettings.mode !== 'Dialog') {\n this.parent.editModule.mFormObj = this.createFormObj(mForm, mRules);\n }\n else {\n rules = extend(rules, mRules);\n }\n this.parent.editModule.formObj = this.createFormObj(form, rules);\n };\n Edit.prototype.createFormObj = function (form, rules) {\n var _this = this;\n return new FormValidator(form, {\n rules: rules,\n 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 || gcontent.scrollWidth > gcontent.clientWidth;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var isFHdr;\n if (isInline) {\n isFHdr = (this.parent.frozenRows && this.parent.frozenRows\n > (parseInt(closest(element, '.e-row').getAttribute('aria-rowindex'), 10) || 0));\n }\n var fCont = this.parent.getContent().querySelector('.e-frozencontent');\n var table = isInline ?\n (isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable()) :\n 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 = closest(element, 'td');\n var inputClient = input ? input.getBoundingClientRect() : element.parentElement.getBoundingClientRect();\n var div = this.parent.createElement('div', {\n className: 'e-tooltip-wrap e-control e-popup e-griderror',\n id: name + '_Error',\n styles: 'display:' + display + ';top:' +\n ((isFHdr ? inputClient.top + inputClient.height : inputClient.bottom - client.top\n - (this.parent.getFrozenColumns() ? fCont.scrollTop : 0)) + table.scrollTop + 9) + 'px;left:' +\n (inputClient.left - left + table.scrollLeft + inputClient.width / 2) + 'px;' +\n 'max-width:' + inputClient.width + 'px;text-align:center;'\n });\n var content = this.parent.createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow = this.parent.createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n div.appendChild(content);\n div.appendChild(arrow);\n table.appendChild(div);\n var lineHeight = parseInt(document.defaultView.getComputedStyle(div, null).getPropertyValue('font-size'), 10);\n if (div.getBoundingClientRect().width < inputClient.width &&\n div.querySelector('label').getBoundingClientRect().height / (lineHeight * 1.2) >= 2) {\n div.style.width = div.style.maxWidth;\n }\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n if (!isScroll && isInline && !this.parent.allowPaging) {\n gcontent.style.position = 'static';\n var pos = calculateRelativeBasedPosition(input, div);\n div.style.top = pos.top + inputClient.height + 9 + 'px';\n }\n };\n return Edit;\n}());\nexport { Edit };\n/** @hidden */\nexport var Global;\n(function (Global) {\n Global.timer = null;\n})(Global || (Global = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { attributes } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { appendChildren } from '../base/util';\n/**\n * FilterCellRenderer class which responsible for building filter cell.\n * @hidden\n */\nvar FilterCellRenderer = /** @class */ (function (_super) {\n __extends(FilterCellRenderer, _super);\n function FilterCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-filterbarcell' });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n * @returns string\n */\n FilterCellRenderer.prototype.getGui = function () {\n return this.parent.createElement('div');\n };\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n FilterCellRenderer.prototype.render = function (cell, data) {\n var tr = this.parent.element.querySelector('.e-filterbar');\n var node = this.element.cloneNode();\n var innerDIV = this.getGui();\n var input;\n var column = cell.column;\n tr.appendChild(node);\n node.setAttribute('e-mappinguid', column.uid);\n if (column.filterTemplate) {\n var fltrData = {};\n if (data) {\n fltrData[column.field] = data[column.field];\n }\n var col = 'column';\n fltrData[col] = column;\n if (column.visible) {\n var element = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate');\n appendChildren(node, element);\n }\n else {\n node.classList.add('e-hide');\n }\n }\n else {\n if (column.type !== 'checkbox') {\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n node.classList.add('e-fltrtemp');\n attributes(innerDIV, {\n 'class': 'e-fltrtempdiv'\n });\n if (isNullOrUndefined(column.filterBarTemplate.create)) {\n input = this.parent.createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filterUi_input e-filtertext e-fltrTemp',\n attrs: { type: 'search', title: column.headerText }\n });\n innerDIV.appendChild(input);\n }\n else {\n var args = { column: column, node: Element };\n var temp = column.filterBarTemplate.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n input = temp(args);\n if (typeof input === 'string') {\n var div = this.parent.createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n attributes(innerDIV, {\n class: 'e-filterUi_input e-filtertext e-fltrTemp',\n title: column.headerText,\n id: column.field + '_filterBarcell',\n });\n innerDIV.appendChild(input);\n }\n }\n else {\n attributes(innerDIV, {\n 'class': 'e-filterdiv e-fltrinputdiv'\n });\n input = this.parent.createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filtertext',\n attrs: {\n type: 'search', title: column.headerText + cell.attributes.title,\n value: data[cell.column.field] ? data[cell.column.field] : '', role: 'search'\n }\n });\n innerDIV.appendChild(input);\n var args = {\n element: input, floatLabelType: 'Never',\n properties: {\n enableRtl: this.parent.enableRtl, showClearButton: true\n }\n };\n Input.createInput(args, this.parent.createElement);\n }\n //TODO: apply intial filtering\n if (column.allowFiltering === false || column.field === '' || isNullOrUndefined(column.field)) {\n input.setAttribute('disabled', 'true');\n input.classList.add('e-disable');\n }\n if (!column.visible) {\n node.classList.add('e-hide');\n }\n this.appendHtml(node, innerDIV);\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n var templateWrite = column.filterBarTemplate.write;\n var args = { element: input, column: column };\n if (typeof templateWrite === 'string') {\n templateWrite = getValue(templateWrite, window);\n }\n templateWrite.call(this, args);\n }\n }\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHTML\n * @returns Element\n */\n FilterCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n return FilterCellRenderer;\n}(CellRenderer));\nexport { FilterCellRenderer };\n","import { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * `filter operators` render boolean column.\n * @hidden\n */\nvar FlMenuOptrUI = /** @class */ (function () {\n function FlMenuOptrUI(parent, customFltrOperators, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n this.customFilterOperators = customFltrOperators;\n }\n /**\n * @hidden\n */\n FlMenuOptrUI.prototype.renderOperatorUI = function (dlgConetntEle, target, column, dlgObj) {\n this.dialogObj = dlgObj;\n var optr = column.type + 'Operator';\n this.optrData = this.customOptr = (!isNullOrUndefined(this.parent.filterSettings.operators) &&\n !isNullOrUndefined(this.parent.filterSettings.operators[optr])) ?\n this.parent.filterSettings.operators[optr] : this.customFilterOperators[optr];\n var dropDatasource = this.customOptr;\n var selectedValue = this.dropSelectedVal(column, optr);\n var optrDiv = this.parent.createElement('div', { className: 'e-flm_optrdiv' });\n dlgConetntEle.appendChild(optrDiv);\n var optrInput = this.parent.createElement('input', { id: column.uid + '-floptr' });\n optrDiv.appendChild(optrInput);\n this.dropOptr = new DropDownList({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n open: this.dropDownOpen.bind(this),\n text: selectedValue\n });\n this.dropOptr.appendTo('#' + column.uid + '-floptr');\n };\n FlMenuOptrUI.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n FlMenuOptrUI.prototype.dropSelectedVal = function (col, optr) {\n var selValue = '';\n var columns = this.parent.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.field === column.field || (col.isForeignColumn() && col.foreignKeyValue === column.field)) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', column.operator));\n selValue = !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n }\n }\n if (selValue === '') {\n selValue = this.optrData[0].text;\n }\n return selValue;\n };\n /**\n * @hidden\n */\n FlMenuOptrUI.prototype.getFlOperator = function () {\n return this.dropOptr.value;\n };\n return FlMenuOptrUI;\n}());\nexport { FlMenuOptrUI };\n","import { AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getZIndexCalcualtion } from '../base/util';\n/**\n * `string filterui` render string column.\n * @hidden\n */\nvar StringFilterUI = /** @class */ (function () {\n function StringFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serLocator = serviceLocator;\n this.filterSettings = filterSettings;\n }\n StringFilterUI.prototype.create = function (args) {\n var data;\n var floptr;\n this.instance = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'strui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.dialogObj = args.dialogObj;\n this.actObj = new AutoComplete(this.getAutoCompleteOptions(args));\n this.actObj.appendTo(this.instance);\n };\n StringFilterUI.prototype.getAutoCompleteOptions = function (args) {\n var _this = this;\n var isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = { value: isForeignColumn ? args.column.foreignKeyValue : args.column.field };\n return {\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n query: this.parent.query.clone(),\n sortOrder: 'Ascending',\n open: this.openPopup.bind(this),\n cssClass: 'e-popup-flmenu',\n focus: function () {\n _this.actObj.filterType = args.getOptrInstance.getFlOperator();\n },\n autofill: true,\n placeholder: args.localizeText.getConstant('EnterValue'),\n actionComplete: function (e) {\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObj) {\n return mapObj[_this.actObj.fields.value];\n }).indexOf(obj[_this.actObj.fields.value]) === index;\n });\n }\n };\n };\n StringFilterUI.prototype.write = function (args) {\n var columns = this.filterSettings.columns;\n if (args.filteredValue !== '' && !isNullOrUndefined(args.filteredValue)) {\n var struiObj = document.querySelector('#strui-' + args.column.uid).ej2_instances[0];\n struiObj.value = args.filteredValue;\n }\n };\n StringFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var actuiObj = document.querySelector('#strui-' + column.uid).ej2_instances[0];\n if (Browser.isDevice) {\n actuiObj.hidePopup();\n actuiObj.focusOut();\n }\n var filterValue = actuiObj.value;\n if (isNullOrUndefined(filterValue) || filterValue === '') {\n filterValue = null;\n }\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n StringFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return StringFilterUI;\n}());\nexport { StringFilterUI };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\n/**\n * `numberfilterui` render number column.\n * @hidden\n */\nvar NumberFilterUI = /** @class */ (function () {\n function NumberFilterUI(parent, serviceLocator, filterSettings) {\n this.filterSettings = filterSettings;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n NumberFilterUI.prototype.create = function (args) {\n this.instance = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'numberui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.numericTxtObj = new NumericTextBox({\n format: args.column.format,\n locale: this.parent.locale,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('EnterValue'),\n enableRtl: this.parent.enableRtl,\n });\n this.numericTxtObj.appendTo(this.instance);\n };\n NumberFilterUI.prototype.write = function (args) {\n var numberuiObj = document.querySelector('#numberui-' + args.column.uid).ej2_instances[0];\n numberuiObj.value = args.filteredValue;\n };\n NumberFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var numberuiObj = document.querySelector('#numberui-' + column.uid).ej2_instances[0];\n var filterValue = numberuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n return NumberFilterUI;\n}());\nexport { NumberFilterUI };\n","import { getZIndexCalcualtion } from '../base/util';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `boolfilterui` render boolean column.\n * @hidden\n */\nvar BooleanFilterUI = /** @class */ (function () {\n function BooleanFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n }\n BooleanFilterUI.prototype.create = function (args) {\n var isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = isForeignColumn ? args.column.foreignKeyValue : args.column.field;\n this.elem = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'bool-ui-' + args.column.uid });\n args.target.appendChild(this.elem);\n this.dialogObj = args.dialogObj;\n this.dropInstance = new DropDownList({\n dataSource: dataSource instanceof DataManager ?\n dataSource : new DataManager(dataSource),\n query: new Query().select(fields),\n fields: { text: fields, value: fields },\n placeholder: args.localizeText.getConstant('SelectValue'),\n cssClass: 'e-popup-flmenu',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n actionComplete: function (e) {\n e.result = DataUtil.distinct(e.result, fields, true);\n }\n });\n this.dropInstance.appendTo(this.elem);\n };\n BooleanFilterUI.prototype.write = function (args) {\n var drpuiObj = document.querySelector('#bool-ui-' + args.column.uid).ej2_instances[0];\n if (!isNullOrUndefined(args.filteredValue)) {\n drpuiObj.text = args.filteredValue;\n }\n };\n BooleanFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var drpuiObj = document.querySelector('#bool-ui-' + column.uid).ej2_instances[0];\n var filterValue = drpuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n BooleanFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return BooleanFilterUI;\n}());\nexport { BooleanFilterUI };\n","import { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getCustomDateFormat } from '../base/util';\n/**\n * `datefilterui` render date column.\n * @hidden\n */\nvar DateFilterUI = /** @class */ (function () {\n function DateFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.fltrSettings = filterSettings;\n }\n DateFilterUI.prototype.create = function (args) {\n var format = getCustomDateFormat(args.column.format, args.column.type);\n this.dialogObj = args.dialogObj;\n this.inputElem = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'dateui-' + args.column.uid });\n args.target.appendChild(this.inputElem);\n if (args.column.type === 'date') {\n this.datePickerObj = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n });\n }\n else if (args.column.type === 'datetime') {\n this.datePickerObj = new DateTimePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n });\n }\n this.datePickerObj.appendTo(this.inputElem);\n };\n DateFilterUI.prototype.write = function (args) {\n var columns = this.fltrSettings.columns;\n var dateuiObj = document.querySelector('#dateui-' + args.column.uid).ej2_instances[0];\n dateuiObj.value = !isNullOrUndefined(args.filteredValue) ? new Date(args.filteredValue) : null;\n };\n DateFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var dateuiObj = document.querySelector('#dateui-' + column.uid).ej2_instances[0];\n var filterValue = dateuiObj.value;\n filterValue = isNullOrUndefined(filterValue) ? null : filterValue;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n DateFilterUI.prototype.openPopup = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n return DateFilterUI;\n}());\nexport { DateFilterUI };\n","import { isNullOrUndefined, getValue, remove } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { FlMenuOptrUI } from './filter-menu-operator';\nimport { StringFilterUI } from './string-filter-ui';\nimport { NumberFilterUI } from './number-filter-ui';\nimport { BooleanFilterUI } from './boolean-filter-ui';\nimport { DateFilterUI } from './date-filter-ui';\nimport { getFilterMenuPostion, parentsUntil, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * `filter menu` render boolean column.\n * @hidden\n */\nvar FilterMenuRenderer = /** @class */ (function () {\n function FilterMenuRenderer(parent, filterSettings, serviceLocator, customFltrOperators, fltrObj) {\n this.isDialogOpen = false;\n this.colTypes = {\n 'string': StringFilterUI, 'number': NumberFilterUI, 'date': DateFilterUI, 'boolean': BooleanFilterUI, 'datetime': DateFilterUI\n };\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.customFilterOperators = customFltrOperators;\n this.filterObj = fltrObj;\n this.flMuiObj = new FlMenuOptrUI(this.parent, this.customFilterOperators, this.serviceLocator);\n this.l10n = this.serviceLocator.getService('localization');\n }\n FilterMenuRenderer.prototype.openDialog = function (args) {\n this.col = this.parent.getColumnByField(args.field);\n if (isNullOrUndefined(this.col.filter) || (isNullOrUndefined(this.col.filter.type) || this.col.filter.type === 'Menu')) {\n this.renderDlgContent(args.target, this.col);\n }\n };\n FilterMenuRenderer.prototype.closeDialog = function () {\n if (!this.dlgObj) {\n return;\n }\n var elem = document.getElementById(this.dlgObj.element.id);\n if (this.dlgObj && !this.dlgObj.isDestroyed && elem) {\n this.parent.notify(events.filterMenuClose, { field: this.col.field });\n this.isDialogOpen = false;\n this.dlgObj.destroy();\n remove(elem);\n }\n };\n FilterMenuRenderer.prototype.renderDlgContent = function (target, column) {\n var args = {\n requestType: events.filterBeforeOpen, filterModel: this,\n columnName: column.field, columnType: column.type\n };\n this.parent.trigger(events.actionBegin, args);\n var mainDiv = this.parent.createElement('div', { className: 'e-flmenu-maindiv', id: column.uid + '-flmenu' });\n this.dlgDiv = this.parent.createElement('div', { className: 'e-flmenu', id: column.uid + '-flmdlg' });\n this.parent.element.appendChild(this.dlgDiv);\n this.dlgObj = new Dialog({\n showCloseIcon: false,\n closeOnEscape: false,\n locale: this.parent.locale,\n visible: false,\n enableRtl: this.parent.enableRtl,\n created: this.dialogCreated.bind(this, target, column),\n position: this.parent.element.classList.contains('e-device') ? { X: 'center', Y: 'center' } : { X: '', Y: '' },\n target: this.parent.element.classList.contains('e-device') ? document.body : this.parent.element,\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.l10n.getConstant('FilterButton'), isPrimary: true, cssClass: 'e-flmenu-okbtn'\n }\n },\n {\n click: this.clearBtnClick.bind(this, column),\n buttonModel: { content: this.l10n.getConstant('ClearButton'), cssClass: 'e-flmenu-cancelbtn' }\n }],\n content: mainDiv,\n width: (!isNullOrUndefined(parentsUntil(target, 'e-bigger'))) || this.parent.element.classList.contains('e-device') ? 260 : 250,\n animationSettings: { effect: 'None' },\n cssClass: 'e-filter-popup'\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n FilterMenuRenderer.prototype.dialogCreated = function (target, column) {\n if (!Browser.isDevice) {\n getFilterMenuPostion(target, this.dlgObj, this.parent);\n }\n this.renderFilterUI(target, column);\n this.parent.notify(events.filterDialogCreated, {});\n this.dlgObj.element.style.maxHeight = '350px';\n this.dlgObj.show();\n if (!column.filterTemplate) {\n this.writeMethod(column, this.dlgObj.element.querySelector('#' + column.uid + '-flmenu'));\n }\n var args = {\n requestType: events.filterAfterOpen,\n filterModel: this, columnName: column.field, columnType: column.type\n };\n this.isDialogOpen = true;\n this.parent.trigger(events.actionComplete, args);\n };\n FilterMenuRenderer.prototype.renderFilterUI = function (target, col) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-flmenu-maindiv');\n this.renderOperatorUI(dlgConetntEle, target, col);\n this.renderFlValueUI(dlgConetntEle, target, col);\n };\n FilterMenuRenderer.prototype.renderOperatorUI = function (dlgConetntEle, target, column) {\n this.flMuiObj.renderOperatorUI(dlgConetntEle, target, column, this.dlgObj);\n };\n FilterMenuRenderer.prototype.renderFlValueUI = function (dlgConetntEle, target, column) {\n var valueDiv = this.parent.createElement('div', { className: 'e-flmenu-valuediv' });\n var fObj = this.filterObj;\n dlgConetntEle.appendChild(valueDiv);\n var args = { target: valueDiv, column: column, getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj };\n var instanceofFilterUI = new this.colTypes[column.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (column.filterTemplate) {\n var fltrData = {};\n fltrData[column.field] = fObj.values[column.field];\n if (column.foreignKeyValue) {\n fltrData[column.foreignKeyValue] = fObj.values[column.foreignKeyValue];\n }\n var col = 'column';\n fltrData[col] = column;\n var compElement = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate');\n appendChildren(valueDiv, compElement);\n }\n else {\n if (!isNullOrUndefined(column.filter) && !isNullOrUndefined(column.filter.ui)\n && !isNullOrUndefined(column.filter.ui.create)) {\n var temp = column.filter.ui.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n temp({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj\n });\n }\n else {\n instanceofFilterUI.create({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, localizeText: this.l10n, dialogObj: this.dlgObj\n });\n }\n }\n };\n FilterMenuRenderer.prototype.writeMethod = function (col, dlgContentEle) {\n var flValue;\n var target = dlgContentEle.querySelector('.e-flmenu-valinput');\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.field === column.field || col.foreignKeyValue === column.field) {\n flValue = column.value;\n }\n }\n if (!isNullOrUndefined(col.filter) && !isNullOrUndefined(col.filter.ui)\n && !isNullOrUndefined(col.filter.ui.write)) {\n var temp = col.filter.ui.write;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n temp({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n else {\n instanceofFilterUI.write({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n };\n FilterMenuRenderer.prototype.filterBtnClick = function (col) {\n var flValue;\n var flOptrValue;\n var targ = this.dlgObj.element.querySelector('.e-flmenu-valuediv input');\n flOptrValue = this.flMuiObj.getFlOperator();\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (col.filterTemplate) {\n var element = this.dlgDiv.querySelector('.e-flmenu-valuediv');\n var fltrValue = void 0;\n if (element.children[0].value) {\n fltrValue = element.children[0].value;\n }\n else {\n fltrValue = element.children[0].ej2_instances[0].value;\n }\n this.filterObj.filterByColumn(col.field, flOptrValue, fltrValue);\n }\n else {\n if (!isNullOrUndefined(col.filter) &&\n !isNullOrUndefined(col.filter.ui) && !isNullOrUndefined(col.filter.ui.read)) {\n var temp = col.filter.ui.read;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n flValue = temp({ element: targ, column: col, operator: flOptrValue, fltrObj: this.filterObj });\n }\n else {\n instanceofFilterUI.read(targ, col, flOptrValue, this.filterObj);\n }\n }\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var column = this.parent.element.querySelector('[e-mappinguid=\"' + col.uid + '\"]').parentElement;\n var flIcon = column.querySelector(iconClass);\n if (flIcon) {\n flIcon.classList.add('e-filtered');\n }\n this.closeDialog();\n };\n FilterMenuRenderer.prototype.clearBtnClick = function (column) {\n this.filterObj.removeFilteredColsByField(column.field);\n this.closeDialog();\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var col = this.parent.element.querySelector('[e-mappinguid=\"' + column.uid + '\"]').parentElement;\n var flIcon = col.querySelector(iconClass);\n if (flIcon) {\n flIcon.classList.remove('e-filtered');\n }\n };\n FilterMenuRenderer.prototype.destroy = function () {\n this.closeDialog();\n };\n return FilterMenuRenderer;\n}());\nexport { FilterMenuRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { EventHandler, remove, Browser } from '@syncfusion/ej2-base';\nimport { parentsUntil, isActionPrevent, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { isNullOrUndefined, } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList, AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { distinctStringValues, isComplexField, getComplexFieldID, getCustomDateFormat } from '../base/util';\nimport { generateQuery } from '../base/constant';\nimport { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\n/**\n * @hidden\n * `ExcelFilter` module is used to handle filtering action.\n */\nvar ExcelFilter = /** @class */ (function (_super) {\n __extends(ExcelFilter, _super);\n /**\n * Constructor for excel filtering module\n * @hidden\n */\n function ExcelFilter(parent, filterSettings, serviceLocator, customFltrOperators) {\n var _this = _super.call(this, parent, filterSettings, serviceLocator) || this;\n _this.customFilterOperators = customFltrOperators;\n _this.isExcel = true;\n return _this;\n }\n ExcelFilter.prototype.getCMenuDS = function (type, operator) {\n var options = {\n number: ['Equal', 'NotEqual', '', 'LessThan', 'LessThanOrEqual', 'GreaterThan',\n 'GreaterThanOrEqual', 'Between', '', 'CustomFilter'],\n string: ['Equal', 'NotEqual', '', 'StartsWith', 'EndsWith', '', 'Contains', '', 'CustomFilter'],\n };\n options.date = options.number;\n options.datetime = options.number;\n var model = [];\n for (var i = 0; i < options[type].length; i++) {\n if (options[type][i].length) {\n if (operator) {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...',\n iconCss: 'e-icons e-icon-check ' + (operator === options[type][i].toLowerCase() ? '' : 'e-emptyicon')\n });\n }\n else {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...'\n });\n }\n }\n else {\n model.push({ separator: true });\n }\n }\n return model;\n };\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n ExcelFilter.prototype.destroy = function () {\n if (this.dlg) {\n this.unwireExEvents();\n _super.prototype.destroy.call(this);\n }\n if (this.cmenu && this.cmenu.parentElement) {\n remove(this.cmenu);\n }\n };\n ExcelFilter.prototype.createMenu = function (type, isFiltered, isCheckIcon) {\n var options = { string: 'TextFilter', date: 'DateFilter', datetime: 'DateTimeFilter', number: 'NumberFilter' };\n this.menu = this.parent.createElement('div', { className: 'e-contextmenu-wrapper' });\n if (this.parent.enableRtl) {\n this.menu.classList.add('e-rtl');\n }\n else {\n this.menu.classList.remove('e-rtl');\n }\n var ul = this.parent.createElement('ul');\n var icon = isFiltered ? 'e-excl-filter-icon e-filtered' : 'e-excl-filter-icon';\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel('ClearFilter'), isFiltered ? '' : 'e-disabled', icon));\n if (type !== 'boolean') {\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel(options[type]), 'e-submenu', isCheckIcon && this.ensureTextFilter() ? 'e-icon-check' : icon + ' e-emptyicon', true));\n }\n this.menu.appendChild(ul);\n };\n ExcelFilter.prototype.createMenuElem = function (val, className, iconName, isSubMenu) {\n var li = this.parent.createElement('li', { className: className + ' e-menu-item' });\n li.innerHTML = val;\n li.insertBefore(this.parent.createElement('span', { className: 'e-menu-icon e-icons ' + iconName }), li.firstChild);\n if (isSubMenu) {\n li.appendChild(this.parent.createElement('span', { className: 'e-icons e-caret' }));\n }\n return li;\n };\n ExcelFilter.prototype.wireExEvents = function () {\n EventHandler.add(this.dlg, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.dlg, 'click', this.clickExHandler, this);\n };\n ExcelFilter.prototype.unwireExEvents = function () {\n EventHandler.remove(this.dlg, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.dlg, 'click', this.clickExHandler);\n };\n ExcelFilter.prototype.clickExHandler = function (e) {\n var menuItem = parentsUntil(e.target, 'e-menu-item');\n if (menuItem && this.getLocalizedLabel('ClearFilter') === menuItem.innerText.trim()) {\n this.clearFilter();\n this.closeDialog();\n }\n };\n ExcelFilter.prototype.destroyCMenu = function () {\n if (this.menuObj && !this.menuObj.isDestroyed) {\n this.menuObj.destroy();\n remove(this.cmenu);\n }\n };\n ExcelFilter.prototype.hoverHandler = function (e) {\n var target = e.target.querySelector('.e-contextmenu');\n var li = parentsUntil(e.target, 'e-menu-item');\n var focused = this.menu.querySelector('.e-focused');\n var isSubMenu;\n if (focused) {\n focused.classList.remove('e-focused');\n }\n if (li) {\n li.classList.add('e-focused');\n isSubMenu = li.classList.contains('e-submenu');\n }\n if (target) {\n return;\n }\n if (!isSubMenu) {\n var submenu = this.menu.querySelector('.e-submenu');\n if (!isNullOrUndefined(submenu)) {\n submenu.classList.remove('e-selected');\n }\n this.isCMenuOpen = false;\n this.destroyCMenu();\n }\n var selectedMenu = this.ensureTextFilter();\n if (!this.isCMenuOpen && isSubMenu) {\n li.classList.add('e-selected');\n this.isCMenuOpen = true;\n var menuOptions = {\n items: this.getCMenuDS(this.options.type, selectedMenu ? selectedMenu.replace(/\\s/g, '') : undefined),\n select: this.selectHandler.bind(this),\n onClose: this.destroyCMenu.bind(this),\n enableRtl: this.parent.enableRtl,\n beforeClose: this.preventClose\n };\n this.parent.element.appendChild(this.cmenu);\n this.menuObj = new ContextMenu(menuOptions, this.cmenu);\n var client = this.menu.querySelector('.e-submenu').getBoundingClientRect();\n var pos = { top: 0, left: 0 };\n if (Browser.isDevice) {\n var contextRect = this.getContextBounds(this.menuObj);\n pos.top = (window.innerHeight - contextRect.height) / 2;\n pos.left = (window.innerWidth - contextRect.width) / 2;\n this.closeDialog();\n }\n else {\n pos.top = client.top;\n pos.left = this.getCMenuYPosition(this.dlg, this.menuObj);\n }\n this.menuObj.open(pos.top, pos.left, e.target);\n }\n };\n ExcelFilter.prototype.ensureTextFilter = function () {\n var selectedMenu;\n var predicates = this.existingPredicate[this.options.field];\n if (predicates && predicates.length === 2) {\n if (predicates[0].operator === 'greaterThanOrEqual' && predicates[1].operator === 'lessThanOrEqual') {\n selectedMenu = 'Between';\n }\n else {\n selectedMenu = 'CustomFilter';\n }\n }\n else {\n if (predicates && predicates.length === 1) {\n this.optrData = this.customFilterOperators[this.options.type + 'Operator'];\n selectedMenu = predicates[0].operator;\n }\n }\n return selectedMenu;\n };\n ExcelFilter.prototype.preventClose = function (args) {\n if (args.event instanceof MouseEvent && args.event.target.classList.contains('e-submenu')) {\n args.cancel = true;\n }\n };\n ExcelFilter.prototype.getContextBounds = function (context) {\n var elementVisible = this.menuObj.element.style.display;\n this.menuObj.element.style.display = 'block';\n return this.menuObj.element.getBoundingClientRect();\n };\n ExcelFilter.prototype.getCMenuYPosition = function (target, context) {\n var contextWidth = this.getContextBounds(context).width;\n var targetPosition = target.getBoundingClientRect();\n var leftPos = targetPosition.right + contextWidth - this.parent.element.clientWidth;\n return (leftPos < 1) ? (targetPosition.right + 1) : (targetPosition.left - contextWidth - 1);\n };\n ExcelFilter.prototype.openDialog = function (options) {\n var _this = this;\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n this.dialogObj.dataBind();\n var filterLength = (this.existingPredicate[options.field] && this.existingPredicate[options.field].length) ||\n this.options.filteredColumns.filter(function (col) {\n return _this.options.field === col.field;\n }).length;\n this.createMenu(options.type, filterLength > 0, (filterLength === 1 || filterLength === 2));\n this.dlg.insertBefore(this.menu, this.dlg.firstChild);\n this.dlg.classList.add('e-excelfilter');\n this.dlg.classList.remove('e-checkboxfilter');\n this.cmenu = this.parent.createElement('ul', { className: 'e-excel-menu' });\n this.wireExEvents();\n };\n ExcelFilter.prototype.closeDialog = function () {\n _super.prototype.closeDialog.call(this);\n };\n ExcelFilter.prototype.selectHandler = function (e) {\n if (e.item) {\n this.menuItem = e.item;\n this.renderDialogue(e);\n }\n };\n ExcelFilter.prototype.renderDialogue = function (e) {\n var _this = this;\n var target = e.element;\n var column = this.options.field;\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var mainDiv = this.parent.createElement('div', {\n className: 'e-xlfl-maindiv',\n id: isComplex ? complexFieldName + '-xlflmenu' : column + '-xlflmenu'\n });\n this.dlgDiv = this.parent.createElement('div', {\n className: 'e-xlflmenu',\n id: isComplex ? complexFieldName + '-xlfldlg' : column + '-xlfldlg'\n });\n this.parent.element.appendChild(this.dlgDiv);\n this.dlgObj = new Dialog({\n header: this.getLocalizedLabel('CustomFilter'),\n isModal: true,\n overlayClick: this.removeDialog.bind(this),\n showCloseIcon: true,\n closeOnEscape: false,\n target: document.body,\n // target: this.parent.element,\n visible: false,\n enableRtl: this.parent.enableRtl,\n open: function () {\n var row = _this.dlgObj.element.querySelector('table.e-xlfl-table>tr');\n if (_this.options.column.filterTemplate) {\n row.querySelector('#' + _this.options.column.field + '-xlfl-frstvalue').focus();\n }\n else {\n row.cells[1].querySelector('input:not([type=hidden])').focus();\n }\n },\n close: this.removeDialog.bind(this),\n created: this.createdDialog.bind(this, target, column),\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.getLocalizedLabel('OKButton'), isPrimary: true, cssClass: 'e-xlfl-okbtn'\n }\n },\n {\n click: this.removeDialog.bind(this),\n buttonModel: { content: this.getLocalizedLabel('CancelButton'), cssClass: 'e-xlfl-cancelbtn' }\n }],\n content: mainDiv,\n width: 430,\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n ExcelFilter.prototype.removeDialog = function () {\n this.removeObjects([this.dropOptr, this.datePicker, this.dateTimePicker, this.actObj, this.numericTxtObj, this.dlgObj]);\n remove(this.dlgDiv);\n };\n ExcelFilter.prototype.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 = this.parent.createElement('div', { innerHTML: this.getLocalizedLabel('ShowRowsWhere'), className: 'e-xlfl-dlgfields' });\n dlgConetntEle.appendChild(dlgFields);\n //column name\n var fieldSet = this.parent.createElement('div', { innerHTML: this.options.displayName, className: 'e-xlfl-fieldset' });\n dlgConetntEle.appendChild(fieldSet);\n this.renderFilterUI(column, dlgConetntEle);\n };\n ExcelFilter.prototype.filterBtnClick = function (col) {\n var isComplex = !isNullOrUndefined(col) && isComplexField(col);\n var complexFieldName = !isNullOrUndefined(col) && getComplexFieldID(col);\n var colValue = isComplex ? complexFieldName : col;\n var fValue = this.dlgDiv.querySelector('#' + colValue + '-xlfl-frstvalue').ej2_instances[0];\n var fOperator = this.dlgDiv.querySelector('#' + colValue + '-xlfl-frstoptr').ej2_instances[0];\n var sValue = this.dlgDiv.querySelector('#' + colValue + '-xlfl-secndvalue').ej2_instances[0];\n var sOperator = this.dlgDiv.querySelector('#' + colValue + '-xlfl-secndoptr').ej2_instances[0];\n var checkBoxValue;\n if (this.options.type === 'string') {\n var checkBox = this.dlgDiv.querySelector('#' + colValue + '-xlflmtcase').ej2_instances[0];\n checkBoxValue = checkBox.checked;\n }\n var andRadio = this.dlgDiv.querySelector('#' + colValue + 'e-xlfl-frstpredicate').ej2_instances[0];\n var orRadio = this.dlgDiv.querySelector('#' + colValue + 'e-xlfl-secndpredicate').ej2_instances[0];\n var predicate = (andRadio.checked ? 'and' : 'or');\n if (sValue.value === null) {\n predicate = 'or';\n }\n this.filterByColumn(this.options.field, fOperator.value, fValue.value, predicate, checkBoxValue, this.parent.filterSettings.ignoreAccent, sOperator.value, sValue.value);\n this.removeDialog();\n };\n /**\n * Filters grid row by column name with given options.\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} firstOperator - Defines the first operator by how to filter records.\n * @param {string | number | Date | boolean} firstValue - Defines the first value which is used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If ignore case set to true, then filter records with exact match or else\n * filter records with case insensitive(uppercase and lowercase letters treated as same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, then ignores the diacritic characters or accents when filtering.\n * @param {string} secondOperator - Defines the second operator by how to filter records.\n * @param {string | number | Date | boolean} secondValue - Defines the first value which is used to filter records.\n */\n ExcelFilter.prototype.filterByColumn = function (fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue) {\n var _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 if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, {\n instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: firstOperator, arg3: firstValue, arg4: predicate,\n arg5: matchCase, arg6: ignoreAccent, arg7: secondOperator, arg8: secondValue\n });\n return;\n }\n mPredicate = new Predicate(field, firstOperator.toLowerCase(), firstValue, !matchCase, ignoreAccent);\n if (secondValue) {\n secondOperator = !isNullOrUndefined(secondOperator) ? secondOperator : 'equal';\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: secondOperator,\n value: secondValue,\n type: this.options.type\n });\n /* tslint:disable-next-line:max-line-length */\n mPredicate = mPredicate[predicate](field, secondOperator.toLowerCase(), secondValue, !matchCase, ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: mPredicate, actualPredicate: fColl\n };\n 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 = this.parent.createElement('tr', { className: 'e-xlfl-fields' });\n table.appendChild(fieldElement);\n var xlfloptr = this.parent.createElement('td', { className: 'e-xlfl-optr' });\n fieldElement.appendChild(xlfloptr);\n var optrDiv = this.parent.createElement('div', { className: 'e-xlfl-optrdiv' });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var optrInput = this.parent\n .createElement('input', { id: isComplex ? complexFieldName + elementID : column + elementID });\n optrDiv.appendChild(optrInput);\n xlfloptr.appendChild(optrDiv);\n var optr = this.options.type + 'Operator';\n var dropDatasource = this.customFilterOperators[optr];\n this.optrData = dropDatasource;\n var selectedValue = this.dropSelectedVal(column, predicates, isFirst);\n //Trailing three dots are sliced.\n var menuText = '';\n if (this.menuItem) {\n menuText = this.menuItem.text.slice(0, -3);\n if (menuText !== this.getLocalizedLabel('CustomFilter')) {\n selectedValue = isFirst ? menuText : undefined;\n }\n if (menuText === this.getLocalizedLabel('Between')) {\n selectedValue = this.getLocalizedLabel(isFirst ? 'GreaterThanOrEqual' : 'LessThanOrEqual');\n }\n }\n this.dropOptr = new DropDownList({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n text: selectedValue,\n open: this.dropDownOpen.bind(this),\n enableRtl: this.parent.enableRtl\n });\n this.dropOptr.appendTo(optrInput);\n var operator = this.getSelectedValue(selectedValue);\n return { fieldElement: fieldElement, operator: operator };\n };\n ExcelFilter.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n ExcelFilter.prototype.getSelectedValue = function (text) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('text', 'equal', text));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].value : '';\n };\n ExcelFilter.prototype.dropSelectedVal = function (col, predicates, isFirst) {\n var operator;\n if (predicates && predicates.length > 0) {\n operator = predicates.length === 2 ?\n (isFirst ? predicates[0].operator : predicates[1].operator) :\n (isFirst ? predicates[0].operator : undefined);\n }\n else {\n operator = isFirst ? 'equal' : undefined;\n }\n return this.getSelectedText(operator);\n };\n ExcelFilter.prototype.getSelectedText = function (operator) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', operator));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n };\n ExcelFilter.prototype.renderFilterUI = function (column, dlgConetntEle) {\n var predicates = this.existingPredicate[column];\n var table = this.parent.createElement('table', { className: 'e-xlfl-table' });\n dlgConetntEle.appendChild(table);\n var colGroup = this.parent.createElement('colGroup');\n colGroup.innerHTML = '';\n table.appendChild(colGroup);\n //Renders first dropdown\n /* tslint:disable-next-line:max-line-length */\n var optr = this.renderOperatorUI(column, table, '-xlfl-frstoptr', predicates, true);\n //Renders first value\n this.renderFlValueUI(column, optr, '-xlfl-frstvalue', predicates, true);\n var predicate = this.parent.createElement('tr', { className: 'e-xlfl-predicate' });\n table.appendChild(predicate);\n //Renders first radion button\n this.renderRadioButton(column, predicate, predicates);\n //Renders second dropdown\n optr = this.renderOperatorUI(column, table, '-xlfl-secndoptr', predicates, false);\n //Renders second text box\n this.renderFlValueUI(column, optr, '-xlfl-secndvalue', predicates, false);\n };\n ExcelFilter.prototype.renderRadioButton = function (column, tr, predicates) {\n var td = this.parent.createElement('td', { className: 'e-xlfl-radio', attrs: { 'colSpan': '2' } });\n tr.appendChild(td);\n var radioDiv = this.parent\n .createElement('div', { className: 'e-xlfl-radiodiv', attrs: { 'style': 'display: inline-block' } });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n /* tslint:disable-next-line:max-line-length */\n var frstpredicate = this.parent.createElement('input', { id: isComplex ? complexFieldName + 'e-xlfl-frstpredicate' : column + 'e-xlfl-frstpredicate', attrs: { 'type': 'radio' } });\n /* tslint:disable-next-line:max-line-length */\n var secndpredicate = this.parent.createElement('input', { id: isComplex ? complexFieldName + 'e-xlfl-secndpredicate' : column + 'e-xlfl-secndpredicate', attrs: { 'type': 'radio' } });\n //appends into div\n radioDiv.appendChild(frstpredicate);\n radioDiv.appendChild(secndpredicate);\n td.appendChild(radioDiv);\n if (this.options.type === 'string') {\n this.renderMatchCase(column, tr, td, '-xlflmtcase', predicates);\n }\n // Initialize AND RadioButton component.\n /* tslint:disable-next-line:max-line-length */\n var andRadio = new RadioButton({ label: this.getLocalizedLabel('AND'), name: 'default', cssClass: 'e-xlfl-radio-and', checked: true, enableRtl: this.parent.enableRtl });\n // Initialize OR RadioButton component.\n /* tslint:disable-next-line:max-line-length */\n var orRadio = new RadioButton({ label: this.getLocalizedLabel('OR'), name: 'default', cssClass: 'e-xlfl-radio-or', enableRtl: this.parent.enableRtl });\n var flValue = predicates && predicates.length === 2 ? predicates[1].predicate : 'and';\n if (flValue === 'and') {\n andRadio.checked = true;\n orRadio.checked = false;\n }\n else {\n orRadio.checked = true;\n andRadio.checked = false;\n }\n // Render initialized RadioButton.\n andRadio.appendTo(frstpredicate);\n orRadio.appendTo(secndpredicate);\n };\n /* tslint:disable-next-line:no-any */\n ExcelFilter.prototype.removeObjects = function (elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var obj = elements_1[_i];\n if (obj && !obj.isDestroyed) {\n obj.destroy();\n }\n }\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderFlValueUI = function (column, optr, elementId, predicates, isFirst) {\n var value = this.parent.createElement('td', { className: 'e-xlfl-value' });\n optr.fieldElement.appendChild(value);\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var valueDiv = this.parent.createElement('div', { className: 'e-xlfl-valuediv' });\n var isFilteredCol = this.filterSettings.columns.some(function (col) { return column === col.field; });\n var fltrPredicates = this.options.filteredColumns.filter(function (col) { return col.field === column; });\n if (this.options.column.filterTemplate) {\n var data = {};\n var columnObj = this.parent.getColumnByField(column);\n if (isFilteredCol && elementId === '-xlfl-frstvalue') {\n data = { column: predicates instanceof Array ? predicates[0] : predicates };\n var indx = this.options.column.columnData && fltrPredicates.length > 1 ?\n (this.options.column.columnData.length === 1 ? 0 : 1) : 0;\n data[this.options.field] = columnObj.foreignKeyValue ? this.options.column.columnData[indx][columnObj.foreignKeyValue] :\n fltrPredicates[indx].value;\n if (this.options.foreignKeyValue) {\n data[this.options.foreignKeyValue] = this.options.column.columnData[indx][columnObj.foreignKeyValue];\n }\n }\n var element = this.options.column.getFilterTemplate()(data, this.parent, 'filterTemplate');\n appendChildren(valueDiv, element);\n valueDiv.children[0].id = isComplex ? complexFieldName + elementId : column + elementId;\n value.appendChild(valueDiv);\n }\n else {\n var valueInput = this.parent\n .createElement('input', { id: isComplex ? complexFieldName + elementId : column + elementId });\n valueDiv.appendChild(valueInput);\n value.appendChild(valueDiv);\n var flValue = void 0;\n var predicate = void 0;\n if (predicates && predicates.length > 0) {\n predicate = predicates.length === 2 ?\n (isFirst ? predicates[0] : predicates[1]) :\n (isFirst ? predicates[0] : undefined);\n flValue = (predicate && predicate.operator === optr.operator) ? predicate.value : undefined;\n }\n var types = {\n 'string': this.renderAutoComplete.bind(this),\n 'number': this.renderNumericTextBox.bind(this),\n 'date': this.renderDate.bind(this),\n 'datetime': this.renderDateTime.bind(this)\n };\n types[this.options.type](this.options, column, valueInput, flValue, this.parent.enableRtl);\n }\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderMatchCase = function (column, tr, matchCase, elementId, predicates) {\n /* tslint:disable-next-line:max-line-length */\n var matchCaseDiv = this.parent.createElement('div', { className: 'e-xlfl-matchcasediv', attrs: { 'style': 'display: inline-block' } });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var matchCaseInput = this.parent.createElement('input', { id: isComplex ? complexFieldName + elementId : column + elementId, attrs: { 'type': 'checkbox' } });\n matchCaseDiv.appendChild(matchCaseInput);\n matchCase.appendChild(matchCaseDiv);\n var flValue = predicates && predicates.length > 0 ?\n (predicates && predicates.length === 2 ? predicates[1].matchCase : predicates[0].matchCase) :\n false;\n // Initialize Match Case check box.\n var checkbox = new CheckBox({\n label: this.getLocalizedLabel('MatchCase'),\n enableRtl: this.parent.enableRtl, checked: flValue\n });\n // Render initialized CheckBox.\n checkbox.appendTo(matchCaseInput);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderDate = function (options, column, inputValue, fValue, isRtl) {\n var format = getCustomDateFormat(options.format, options.type);\n this.datePicker = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n });\n this.datePicker.appendTo(inputValue);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderDateTime = function (options, column, inputValue, fValue, isRtl) {\n var format = getCustomDateFormat(options.format, options.type);\n this.dateTimePicker = new DateTimePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n });\n this.dateTimePicker.appendTo(inputValue);\n };\n ExcelFilter.prototype.completeAction = function (e) {\n e.result = distinctStringValues(e.result);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderNumericTextBox = function (options, column, inputValue, fValue, isRtl) {\n this.numericTxtObj = new NumericTextBox({\n format: options.format,\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n value: fValue\n });\n this.numericTxtObj.appendTo(inputValue);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderAutoComplete = function (options, column, inputValue, fValue, isRtl) {\n var _this = this;\n var colObj = this.parent.getColumnByField(column);\n var isForeignColumn = colObj.isForeignColumn();\n var dataSource = isForeignColumn ? colObj.dataSource : options.dataSource;\n var fields = { value: isForeignColumn ? colObj.foreignKeyValue : column };\n var actObj = new AutoComplete({\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n query: this.parent.query.clone(),\n sortOrder: 'Ascending',\n locale: this.parent.locale,\n autofill: true,\n focus: function () {\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var columnvalue = isComplex ? complexFieldName : column;\n actObj.filterType = _this.dlgDiv.querySelector('#' + columnvalue +\n (inputValue.id === (columnvalue + '-xlfl-frstvalue') ?\n '-xlfl-frstoptr' :\n '-xlfl-secndoptr')).ej2_instances[0].value;\n actObj.ignoreCase = options.type === 'string' ?\n !_this.dlgDiv.querySelector('#' + columnvalue + '-xlflmtcase').ej2_instances[0].checked :\n true;\n actObj.filterType = !isNullOrUndefined(actObj.filterType) ? actObj.filterType :\n 'equal';\n },\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n actionComplete: function (e) {\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObject) {\n return isComplex ? _this.performComplexDataOperation(actObj.fields.value, mapObject)\n : mapObject[actObj.fields.value];\n }).indexOf(isComplex ? _this.performComplexDataOperation(actObj.fields.value, obj) :\n obj[_this.actObj.fields.value]) === index;\n });\n },\n value: fValue\n });\n actObj.appendTo(inputValue);\n this.actObj = actObj;\n };\n ExcelFilter.prototype.performComplexDataOperation = function (value, mapObject) {\n var returnObj;\n var length = value.split('.').length;\n var splits = value.split('.');\n var duplicateMap = mapObject;\n for (var i = 0; i < length; i++) {\n returnObj = duplicateMap[splits[i]];\n duplicateMap = returnObj;\n }\n return returnObj;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n ExcelFilter.prototype.getModuleName = function () {\n return 'excelFilter';\n };\n return ExcelFilter;\n}(CheckBoxFilter));\nexport { ExcelFilter };\n","import { EventHandler, isNullOrUndefined, extend, closest, getValue } from '@syncfusion/ej2-base';\nimport { getActualPropFromColl, isActionPrevent, getColumnByForeignKeyValue } from '../base/util';\nimport { remove, matches } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport { FilterCellRenderer } from '../renderer/filter-cell-renderer';\nimport { parentsUntil } from '../base/util';\nimport { FilterMenuRenderer } from '../renderer/filter-menu-renderer';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { ExcelFilter } from '../actions/excel-filter';\n/**\n *\n * The `Filter` module is used to handle filtering action.\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Grid filtering module\n * @hidden\n */\n function Filter(parent, filterSettings, serviceLocator) {\n this.predicate = 'and';\n this.contentRefresh = true;\n this.values = {};\n this.cellText = {};\n this.nextFlMenuOpen = '';\n this.type = { 'Menu': FilterMenuRenderer, 'CheckBox': CheckBoxFilter, 'Excel': ExcelFilter };\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith'\n };\n this.fltrDlgDetails = { field: '', isOpen: false };\n this.actualPredicate = {};\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * To render filter bar when filtering enabled.\n * @return {void}\n * @hidden\n */\n Filter.prototype.render = function (e) {\n if (DataUtil.getObject('args.isFrozen', e)) {\n return;\n }\n var gObj = this.parent;\n this.l10n = this.serviceLocator.getService('localization');\n this.getLocalizedCustomOperators();\n if (this.parent.filterSettings.type === 'FilterBar') {\n if (gObj.columns.length) {\n var fltrElem = this.parent.element.querySelector('.e-filterbar');\n if (fltrElem) {\n remove(fltrElem);\n }\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Filter, gObj);\n var row = void 0;\n var cellrender = this.serviceLocator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Filter, new FilterCellRenderer(this.parent, this.serviceLocator));\n this.valueFormatter = this.serviceLocator.getService('valueFormatter');\n rowRenderer.element = this.parent.createElement('tr', { className: 'e-filterbar' });\n row = this.generateRow();\n row.data = this.values;\n this.parent.getHeaderContent().querySelector('thead').appendChild(rowRenderer.element);\n 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 var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.destroy();\n }\n 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,\n /* tslint:disable:no-string-literal */\n currentFilteringColumn: !isNullOrUndefined(this.column) ? this.column.field : undefined,\n /* tslint:enable:no-string-literal */\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionComplete\n } : {\n requestType: 'filtering', type: events.actionComplete\n };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.isRemove = false;\n };\n Filter.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderContent(), 'keyup', this.keyUpHandler, this);\n };\n Filter.prototype.unWireEvents = function () {\n EventHandler.remove(this.parent.getHeaderContent(), 'keyup', this.keyUpHandler);\n };\n Filter.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n Filter.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n if (this.parent.getColumns().length && this.filterSettings.columns.length) {\n var gObj = this.parent;\n this.contentRefresh = false;\n for (var _i = 0, _a = gObj.filterSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.filterByColumn(col.field, col.operator, col.value, col.predicate, col.matchCase, col.ignoreAccent, col.actualFilterValue, col.actualOperator);\n }\n this.updateFilterMsg();\n this.contentRefresh = true;\n }\n };\n /**\n * @hidden\n */\n Filter.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.filterComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.keyPressed, this.keyUpHandler, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.headerRefreshed, this.render, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.filterMenuClose, this.filterMenuClose, this);\n EventHandler.add(document, 'click', this.clickHandler, this);\n this.parent.on(events.filterOpen, this.columnMenuFilter, this);\n this.parent.on(events.click, this.filterIconClickHandler, this);\n };\n /**\n * @hidden\n */\n Filter.prototype.removeEventListener = function () {\n EventHandler.remove(document, 'click', this.clickHandler);\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.filterComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.keyPressed, this.keyUpHandler);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.off(events.headerRefreshed, this.render);\n this.parent.off(events.filterOpen, this.columnMenuFilter);\n this.parent.off(events.filterMenuClose, this.filterMenuClose);\n this.parent.off(events.click, this.filterIconClickHandler);\n };\n Filter.prototype.filterMenuClose = function (args) {\n this.fltrDlgDetails.isOpen = false;\n };\n /**\n * Filters the Grid row by fieldName, filterOperator, and filterValue.\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value which is used to filter records.\n * @param {string} predicate - Defines the relationship of one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, then the filter records\n * the exact match or
    filters records that are case insensitive (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, then filter ignores the diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for the filter column.\n * @param {string} actualOperator - Defines the actual filter operator for the filter column.\n * @return {void}\n */\n Filter.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n var gObj = this.parent;\n var filterCell;\n this.column = gObj.getColumnByField(fieldName);\n if (this.filterSettings.type === 'FilterBar') {\n filterCell = gObj.getHeaderContent().querySelector('[id=\\'' + this.column.field + '_filterBarcell\\']');\n }\n if (!isNullOrUndefined(this.column.allowFiltering) && !this.column.allowFiltering) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, {\n instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: filterOperator, arg3: filterValue, arg4: predicate,\n arg5: matchCase, arg6: ignoreAccent, arg7: actualFilterValue, arg8: actualOperator\n });\n return;\n }\n this.value = filterValue;\n this.matchCase = matchCase || false;\n this.ignoreAccent = this.ignoreAccent = !isNullOrUndefined(ignoreAccent) ? ignoreAccent : this.parent.filterSettings.ignoreAccent;\n this.fieldName = fieldName;\n this.predicate = predicate || 'and';\n this.operator = filterOperator;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (this.column.type === 'number' || this.column.type === 'date') {\n this.matchCase = true;\n }\n gObj.getColumnHeaderByField(fieldName).setAttribute('aria-filtered', 'true');\n if (filterValue.length < 1 || this.checkForSkipInput(this.column, filterValue)) {\n this.filterStatusMsg = filterValue.length < 1 ? '' : this.l10n.getConstant('InvalidFilterMessage');\n this.updateFilterMsg();\n return;\n }\n if (filterCell && this.filterSettings.type === 'FilterBar' && filterCell.value !== filterValue) {\n filterCell.value = filterValue;\n }\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n this.values[this.column.field] = filterValue; //this line should be above updateModel\n }\n this.actualPredicate[this.fieldName] = [{\n field: this.fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: this.operator,\n value: this.value,\n type: this.column.type\n }];\n this.addFilteredClass(this.fieldName);\n if (this.checkAlreadyColFiltered(this.column.field)) {\n return;\n }\n this.updateModel();\n };\n Filter.prototype.applyColumnFormat = function (filterValue) {\n var getFlvalue = (this.column.type === 'date' || this.column.type === 'datetime') ?\n new Date(filterValue) : parseFloat(filterValue);\n this.values[this.column.field] = this.setFormatForFlColumn(getFlvalue, this.column);\n };\n Filter.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'columns':\n if (this.contentRefresh) {\n this.parent.notify(events.modelChanged, {\n currentFilterObject: this.currentFilterObject, currentFilteringColumn: this.column ?\n this.column.field : undefined,\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionBegin\n });\n this.refreshFilterSettings();\n this.updateFilterMsg();\n this.updateFilter();\n }\n break;\n case 'showFilterBarStatus':\n if (e.properties[prop]) {\n this.updateFilterMsg();\n }\n else if (this.parent.allowPaging) {\n this.parent.updateExternalMessage('');\n }\n break;\n case 'type':\n this.parent.refreshHeader();\n this.refreshFilterSettings();\n break;\n }\n }\n };\n Filter.prototype.refreshFilterSettings = function () {\n if (this.filterSettings.type === 'FilterBar') {\n for (var i = 0; i < this.filterSettings.columns.length; i++) {\n this.column = this.parent.getColumnByField(this.filterSettings.columns[i].field) ||\n getColumnByForeignKeyValue(this.filterSettings.columns[i].field, this.parent.getForeignKeyColumns());\n var filterValue = this.filterSettings.columns[i].value;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n var key = this.filterSettings.columns[i].field;\n this.values[key] = this.filterSettings.columns[i].value;\n }\n var filterElement = this.getFilterBarElement(this.filterSettings.columns[i].field);\n if (filterElement) {\n if (!isNullOrUndefined(this.cellText[this.filterSettings.columns[i].field])) {\n filterElement.value = this.cellText[this.filterSettings.columns[i].field];\n }\n else {\n filterElement.value = this.filterSettings.columns[i].value;\n }\n }\n }\n if (this.filterSettings.columns.length === 0) {\n var col = this.parent.getColumns();\n for (var i = 0; i < col.length; i++) {\n var filterElement = this.getFilterBarElement(col[i].field);\n if (filterElement && filterElement.value !== '') {\n filterElement.value = '';\n delete this.values[col[i].field];\n }\n }\n }\n }\n };\n Filter.prototype.getFilterBarElement = function (col) {\n var selector = '[id=\\'' + col + '_filterBarcell\\']';\n var filterElement;\n if (selector && !isNullOrUndefined(this.element)) {\n filterElement = this.element.querySelector(selector);\n }\n return filterElement;\n };\n /**\n * @private\n */\n Filter.prototype.refreshFilter = function () {\n this.refreshFilterSettings();\n this.updateFilterMsg();\n };\n /**\n * Clears all the filtered rows of the Grid.\n * @return {void}\n */\n Filter.prototype.clearFiltering = function () {\n var cols = getActualPropFromColl(this.filterSettings.columns);\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFiltering });\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.removeFilteredColsByField(cols[i].field, false);\n }\n if (this.parent.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n var fltrElement = [].slice.call(this.parent.element.querySelectorAll('.e-filtered'));\n for (var i = 0, len = fltrElement.length; i < len; i++) {\n fltrElement[0].removeAttribute('aria-filtered');\n fltrElement[0].classList.remove('e-filtered');\n }\n }\n this.isRemove = true;\n this.filterStatusMsg = '';\n this.updateFilterMsg();\n };\n Filter.prototype.checkAlreadyColFiltered = function (field) {\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n if (col.field === field && col.value === this.value &&\n col.operator === this.operator && col.predicate === this.predicate) {\n return true;\n }\n }\n return false;\n };\n Filter.prototype.columnMenuFilter = function (args) {\n this.column = args.col;\n var ele = closest(args.target, '#' + args.id);\n if (args.isClose && !ele) {\n this.filterModule.closeDialog();\n }\n else if (ele) {\n this.filterDialogOpen(this.column, args.target);\n }\n };\n Filter.prototype.filterDialogOpen = function (col, target, left, top) {\n var gObj = this.parent;\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.filterModule = new this.type[col.filter.type || this.parent.filterSettings.type](this.parent, gObj.filterSettings, this.serviceLocator, this.customOperators, this);\n var dataSource = col.filter.dataSource || gObj.getDataModule().dataManager;\n this.filterModule.openDialog({\n type: col.type, field: col.field, displayName: col.headerText,\n dataSource: dataSource, format: col.format,\n filteredColumns: gObj.filterSettings.columns, target: target,\n sortedColumns: gObj.sortSettings.columns, formatFn: col.getFormatter(),\n parserFn: col.getParser(), query: gObj.query, template: col.getFilterItemTemplate(),\n hideSearchbox: isNullOrUndefined(col.filter.hideSearchbox) ? false : col.filter.hideSearchbox,\n handler: this.filterHandler.bind(this), localizedStrings: gObj.getLocaleConstants(),\n position: { X: left, Y: top }, column: col, foreignKeyValue: col.foreignKeyValue,\n actualPredicate: this.actualPredicate, localeObj: this.parent.localeObj\n });\n };\n /**\n * Removes filtered column by field name.\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @return {void}\n * @hidden\n */\n Filter.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n var fCell;\n var cols = this.filterSettings.columns;\n if (isActionPrevent(this.parent)) {\n var args = { instance: this, handler: this.removeFilteredColsByField, arg1: field, arg2: isClearFilterBar };\n this.parent.notify(events.preventBatch, args);\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n var column = this.parent.getColumnByField(field) ||\n getColumnByForeignKeyValue(field, this.parent.getForeignKeyColumns());\n if (cols[i].field === field || cols[i].field === column.foreignKeyValue) {\n if (this.filterSettings.type === 'FilterBar' && !isClearFilterBar) {\n var selector = '[id=\\'' + cols[i].field + '_filterBarcell\\']';\n fCell = this.parent.getHeaderContent().querySelector(selector);\n 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, currentFilterObject: {\n field: column.field, operator: this.operator, value: this.value, predicate: this.predicate,\n matchCase: this.matchCase, ignoreAccent: this.ignoreAccent, actualFilterValue: {}, actualOperator: {}\n }, currentFilterColumn: column\n });\n break;\n }\n }\n this.updateFilterMsg();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n Filter.prototype.keyUpHandler = function (e) {\n var gObj = this.parent;\n var target = e.target;\n if (target && matches(target, '.e-filterbar input')) {\n var closeHeaderEle = closest(target, 'th.e-filterbarcell');\n this.column = gObj.getColumnByUid(closeHeaderEle.getAttribute('e-mappinguid'));\n if (!this.column) {\n return;\n }\n if ((this.filterSettings.mode === 'Immediate' || e.keyCode === 13) && e.keyCode !== 9) {\n this.value = target.value.trim();\n this.processFilter(e);\n }\n }\n };\n Filter.prototype.updateCrossIcon = function (element) {\n if (element.value.length) {\n element.nextElementSibling.classList.remove('e-hide');\n }\n };\n Filter.prototype.updateFilterMsg = function () {\n if (this.filterSettings.type === 'FilterBar') {\n var gObj = this.parent;\n var getFormatFlValue = void 0;\n var columns = this.filterSettings.columns;\n var formater = this.serviceLocator.getService('valueFormatter');\n var column = void 0;\n var value = void 0;\n if (!this.filterSettings.showFilterBarStatus) {\n return;\n }\n if (columns.length > 0 && this.filterStatusMsg !== this.l10n.getConstant('InvalidFilterMessage')) {\n this.filterStatusMsg = '';\n for (var index = 0; index < columns.length; index++) {\n column = gObj.getColumnByField(columns[index].field) ||\n getColumnByForeignKeyValue(columns[index].field, this.parent.getForeignKeyColumns());\n if (index) {\n this.filterStatusMsg += ' && ';\n }\n if (!isNullOrUndefined(column.format)) {\n var flValue = (column.type === 'date' || column.type === 'datetime') ?\n new Date(this.values[column.field]) :\n this.values[column.field];\n if (!(column.type === 'date' || column.type === 'datetime')) {\n var formater_1 = this.serviceLocator.getService('valueFormatter');\n getFormatFlValue = formater_1.toView(flValue, column.getParser()).toString();\n }\n else {\n getFormatFlValue = this.setFormatForFlColumn(flValue, column);\n }\n this.filterStatusMsg += column.headerText + ': ' + getFormatFlValue;\n }\n else {\n this.filterStatusMsg += column.headerText + ': ' + this.values[column.field];\n }\n }\n }\n if (gObj.allowPaging) {\n gObj.updateExternalMessage(this.filterStatusMsg);\n }\n //TODO: virtual paging \n this.filterStatusMsg = '';\n }\n };\n Filter.prototype.setFormatForFlColumn = function (value, column) {\n var formater = this.serviceLocator.getService('valueFormatter');\n return formater.toView(value, column.getFormatter()).toString();\n };\n Filter.prototype.checkForSkipInput = function (column, value) {\n var isSkip;\n var skipInput;\n if (column.type === 'number') {\n skipInput = ['=', ' ', '!'];\n if (DataUtil.operatorSymbols[value] || skipInput.indexOf(value) > -1) {\n isSkip = true;\n }\n }\n else if (column.type === 'string') {\n skipInput = ['>', '<', '=', '!'];\n for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {\n var val = value_1[_i];\n if (skipInput.indexOf(val) > -1) {\n isSkip = true;\n }\n }\n }\n return isSkip;\n };\n Filter.prototype.processFilter = function (e) {\n this.stopTimer();\n this.startTimer(e);\n };\n Filter.prototype.startTimer = function (e) {\n var _this = this;\n this.timer = window.setInterval(function () { _this.onTimerTick(); }, e.keyCode === 13 ? 0 : this.filterSettings.immediateModeDelay);\n };\n Filter.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Filter.prototype.onTimerTick = function () {\n var selector = '[id=\\'' + this.column.field + '_filterBarcell\\']';\n var filterElement = this.element.querySelector(selector);\n if (!filterElement && this.parent.getFrozenColumns()) {\n filterElement = this.parent.getHeaderContent().querySelector(selector);\n }\n var filterValue;\n this.cellText[this.column.field] = filterElement.value;\n this.stopTimer();\n if (!isNullOrUndefined(this.column.filterBarTemplate)) {\n var templateRead = this.column.filterBarTemplate.read;\n if (typeof templateRead === 'string') {\n templateRead = getValue(templateRead, window);\n }\n if (!isNullOrUndefined(templateRead)) {\n this.value = templateRead.call(this, filterElement);\n }\n }\n else {\n filterValue = JSON.parse(JSON.stringify(filterElement.value));\n }\n if (isNullOrUndefined(this.value) || this.value === '') {\n this.removeFilteredColsByField(this.column.field);\n return;\n }\n this.validateFilterValue(this.value);\n this.filterByColumn(this.column.field, this.operator, this.value, this.predicate, this.matchCase, this.ignoreAccent);\n filterElement.value = filterValue;\n this.updateFilterMsg();\n };\n Filter.prototype.validateFilterValue = function (value) {\n var gObj = this.parent;\n var skipInput;\n var index;\n this.matchCase = true;\n switch (this.column.type) {\n case 'number':\n this.operator = this.filterOperators.equal;\n skipInput = ['>', '<', '=', '!'];\n for (var i = 0; i < value.length; i++) {\n if (skipInput.indexOf(value[i]) > -1) {\n index = i;\n break;\n }\n }\n this.getOperator(value.substring(index));\n if (index !== 0) {\n this.value = value.substring(0, index);\n }\n if (this.value !== '' && value.length >= 1) {\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n }\n if (isNaN(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n break;\n case 'date':\n case 'datetime':\n this.operator = this.filterOperators.equal;\n if (this.value !== '' && !(this.value instanceof Date)) {\n this.getOperator(value);\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n if (isNullOrUndefined(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n }\n break;\n case 'string':\n this.matchCase = false;\n if (value.charAt(0) === '*') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(value.length - 1) === '%') {\n this.value = this.value.slice(0, -1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(0) === '%') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.endsWith;\n }\n else {\n this.operator = this.filterOperators.startsWith;\n }\n break;\n case 'boolean':\n if (value.toLowerCase() === 'true' || value === '1') {\n this.value = true;\n }\n else if (value.toLowerCase() === 'false' || value === '0') {\n this.value = false;\n }\n else if (value.length) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n this.operator = this.filterOperators.equal;\n break;\n default:\n this.operator = this.filterOperators.equal;\n }\n };\n Filter.prototype.getOperator = function (value) {\n var singleOp = value.charAt(0);\n var multipleOp = value.slice(0, 2);\n var operators = extend({ '=': this.filterOperators.equal, '!': this.filterOperators.notEqual }, DataUtil.operatorSymbols);\n if (operators.hasOwnProperty(singleOp) || operators.hasOwnProperty(multipleOp)) {\n this.operator = operators[singleOp];\n this.value = value.substring(1);\n if (!this.operator) {\n this.operator = operators[multipleOp];\n this.value = value.substring(2);\n }\n }\n if (this.operator === this.filterOperators.lessThan || this.operator === this.filterOperators.greaterThan) {\n if (this.value.charAt(0) === '=') {\n this.operator = this.operator + 'orequal';\n this.value = this.value.substring(1);\n }\n }\n };\n Filter.prototype.columnPositionChanged = function (e) {\n if (this.parent.filterSettings.type !== 'FilterBar') {\n return;\n }\n };\n Filter.prototype.getLocalizedCustomOperators = function () {\n var numOptr = [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', text: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', text: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', text: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', text: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', text: this.l10n.getConstant('StartsWith') },\n { value: 'endswith', text: this.l10n.getConstant('EndsWith') },\n { value: 'contains', text: this.l10n.getConstant('Contains') },\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: numOptr,\n dateOperator: numOptr,\n datetimeOperator: numOptr,\n booleanOperator: [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ]\n };\n };\n ;\n Filter.prototype.filterIconClickHandler = function (e) {\n var target = e.target;\n if (target.classList.contains('e-filtermenudiv') && (this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel')) {\n var gObj = this.parent;\n var col = gObj.getColumnByUid(parentsUntil(target, 'e-headercell').firstElementChild.getAttribute('e-mappinguid'));\n var gClient = gObj.element.getBoundingClientRect();\n var fClient = target.getBoundingClientRect();\n this.column = col;\n if (this.fltrDlgDetails.field === col.field && this.fltrDlgDetails.isOpen) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.fltrDlgDetails = { field: col.field, isOpen: true };\n this.filterDialogOpen(this.column, target, fClient.right - gClient.left, fClient.bottom - gClient.top);\n }\n };\n Filter.prototype.clickHandler = function (e) {\n if (this.filterSettings.mode === 'Immediate' || this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel') {\n var gObj = this.parent;\n var target = e.target;\n var datepickerEle = target.classList.contains('e-day'); // due to datepicker popup cause\n if (parentsUntil(target, 'e-filter-popup') || target.classList.contains('e-filtermenudiv')) {\n return;\n }\n else if (this.filterModule &&\n (!parentsUntil(target, 'e-popup-wrapper')\n && (!closest(target, '.e-filter-item.e-menu-item'))\n && (!parentsUntil(target, 'e-popup'))) && !datepickerEle) {\n this.filterModule.closeDialog(target);\n }\n if (this.filterSettings.mode === 'Immediate' && target.classList.contains('e-clear-icon')) {\n var targetText = target.previousElementSibling;\n this.removeFilteredColsByField(targetText.id.slice(0, -14)); //Length of _filterBarcell = 14\n }\n }\n };\n Filter.prototype.filterHandler = function (args) {\n var filterIconElement;\n this.actualPredicate[args.field] = args.actualPredicate;\n var dataManager = new DataManager(this.filterSettings.columns);\n var query = new Query().where('field', this.filterOperators.equal, args.field);\n var result = dataManager.executeLocal(query);\n for (var i = 0; i < result.length; i++) {\n var index = -1;\n for (var j = 0; j < this.filterSettings.columns.length; j++) {\n if (result[i].field === this.filterSettings.columns[j].field) {\n index = j;\n break;\n }\n }\n if (index !== -1) {\n this.filterSettings.columns.splice(index, 1);\n }\n }\n if (this.values[args.field]) {\n delete this.values[args.field];\n }\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n filterIconElement = this.parent.getColumnHeaderByField(args.field).querySelector(iconClass);\n if (args.action === 'filtering') {\n this.filterSettings.columns = this.filterSettings.columns.concat(args.filterCollection);\n if (this.filterSettings.columns.length && filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n }\n else {\n if (filterIconElement) {\n filterIconElement.classList.remove('e-filtered');\n }\n this.parent.renderModule.refresh(); //hot-fix onpropertychanged not working for object { array } \n }\n this.parent.dataBind();\n };\n Filter.prototype.updateFilter = function () {\n var cols = this.filterSettings.columns;\n for (var i = 0; i < cols.length; i++) {\n this.column = this.parent.getColumnByField(cols[i].field) ||\n getColumnByForeignKeyValue(cols[i].field, this.parent.getForeignKeyColumns());\n var fieldName = cols[i].field;\n if (!this.parent.getColumnByField(cols[i].field)) {\n fieldName = getColumnByForeignKeyValue(cols[i].field, this.parent.getForeignKeyColumns()).field;\n }\n /* tslint:disable-next-line:max-line-length */\n this.refreshFilterIcon(fieldName, cols[i].operator, cols[i].value, cols[i].type, cols[i].predicate, cols[i].matchCase, cols[i].ignoreAccent);\n }\n };\n /* tslint:disable-next-line:max-line-length */\n Filter.prototype.refreshFilterIcon = function (fieldName, operator, value, type, predicate, matchCase, ignoreAccent) {\n this.actualPredicate[fieldName] = [{\n field: fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: operator,\n value: value,\n type: type\n }];\n this.addFilteredClass(fieldName);\n };\n Filter.prototype.addFilteredClass = function (fieldName) {\n var filterIconElement;\n filterIconElement = this.parent.getColumnHeaderByField(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, detach, formatUnit, Browser, closest } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { ColumnWidthService } from '../services/width-controller';\nimport * as events from '../base/constant';\nimport { getScrollBarWidth, parentsUntil } from '../base/util';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var resizeClassList = {\n root: 'e-rhandler',\n suppress: 'e-rsuppress',\n icon: 'e-ricon',\n helper: 'e-rhelper',\n header: 'th.e-headercell',\n cursor: 'e-rcursor'\n};\n/**\n * `Resize` module is used to handle Resize to fit for columns.\n * @hidden\n * @private\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for the Grid resize module\n * @hidden\n */\n function Resize(parent) {\n this.tapped = false;\n this.isDblClk = true;\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.widthService = new ColumnWidthService(parent);\n this.addEventListener();\n }\n /**\n * Resize by field names.\n * @param {string|string[]} fName - Defines the field name.\n * @return {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n var columnName = (fName === undefined || fName === null || fName.length <= 0) ?\n this.parent.getColumns().map(function (x) { return x.field; }) : (typeof fName === 'string') ? [fName] : fName;\n this.findColumn(columnName);\n };\n Resize.prototype.resizeColumn = function (fName, index, id) {\n var gObj = this.parent;\n var tWidth = 0;\n var headerTable;\n var contentTable;\n var footerTable;\n var headerDivTag = 'e-gridheader';\n var contentDivTag = 'e-gridcontent';\n var indentWidth = 0;\n var uid = id ? id : this.parent.getUidByColumnField(fName);\n var columnIndex = this.parent.getNormalizedColumnIndex(uid);\n var headerTextClone;\n var contentTextClone;\n var frzCols = gObj.getFrozenColumns();\n if (!isNullOrUndefined(gObj.getFooterContent())) {\n footerTable = gObj.getFooterContentTable();\n }\n if (frzCols) {\n if (index < frzCols) {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \")\");\n }\n else {\n headerTable = gObj.getHeaderContent().querySelector('.e-movableheader').children[0];\n contentTable = gObj.getContent().querySelector('.e-movablecontent').children[0];\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex - frzCols].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + ((columnIndex - frzCols) + 1) + \")\");\n }\n }\n else {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \"):not(.e-groupcaption)\");\n }\n var indentWidthClone = headerTable.querySelector('tr').querySelectorAll('.e-grouptopleftcell');\n if (indentWidthClone.length > 0) {\n for (var i = 0; i < indentWidthClone.length; i++) {\n indentWidth += indentWidthClone[i].offsetWidth;\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n indentWidth += contentTable.querySelector('.e-detailrowcollapse').offsetWidth;\n }\n var headerText = [headerTextClone];\n var contentText = [];\n for (var i = 0; i < contentTextClone.length; i++) {\n contentText[i] = contentTextClone[i].cloneNode(true);\n }\n var wHeader = this.createTable(headerTable, headerText, headerDivTag);\n var wContent = this.createTable(contentTable, contentText, contentDivTag);\n var columnbyindex = gObj.getColumns()[index];\n var result;\n var width = (wHeader > wContent) ? columnbyindex.width = formatUnit(wHeader) : columnbyindex.width = formatUnit(wContent);\n this.widthService.setColumnWidth(gObj.getColumns()[index]);\n result = gObj.getColumns().some(function (x) { return x.width === null || x.width === undefined || x.width.length <= 0; });\n if (result === false) {\n gObj.getColumns().forEach(function (element) {\n if (element.visible) {\n tWidth = tWidth + parseInt(element.width, 10);\n }\n });\n }\n var calcTableWidth = tWidth + indentWidth;\n if (tWidth > 0 && !gObj.getFrozenColumns()) {\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.widthService.setColumnWidth(new Column({ width: '30px' }));\n }\n headerTable.style.width = formatUnit(calcTableWidth);\n contentTable.style.width = formatUnit(calcTableWidth);\n if (!isNullOrUndefined(footerTable)) {\n footerTable.style.width = formatUnit(calcTableWidth);\n }\n }\n var tableWidth = headerTable.offsetWidth;\n var contentwidth = (gObj.getContent().scrollWidth);\n if (contentwidth > tableWidth) {\n headerTable.classList.add('e-tableborder');\n contentTable.classList.add('e-tableborder');\n }\n else {\n headerTable.classList.remove('e-tableborder');\n contentTable.classList.remove('e-tableborder');\n }\n if (!isNullOrUndefined(footerTable)) {\n footerTable.classList.add('e-tableborder');\n }\n };\n /**\n * To destroy the resize\n * @return {void}\n * @hidden\n */\n Resize.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.widthService = null;\n this.unwireEvents();\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n Resize.prototype.findColumn = function (fName) {\n var _this = this;\n fName.forEach(function (element) {\n var fieldName = element;\n var columnIndex = _this.parent.getColumnIndexByField(fieldName);\n if (_this.parent.getColumns()[columnIndex].visible === true) {\n _this.resizeColumn(fieldName, columnIndex);\n }\n });\n };\n /**\n * To create table for autofit\n * @hidden\n */\n Resize.prototype.createTable = function (table, text, tag) {\n var myTableDiv = this.parent.createElement('div');\n myTableDiv.className = this.parent.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = this.parent.createElement('div');\n mySubDiv.className = tag;\n var myTable = this.parent.createElement('table');\n myTable.className = table.className;\n myTable.classList.add('e-resizetable');\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var myTr = this.parent.createElement('tr');\n text.forEach(function (element) {\n var tr = myTr.cloneNode();\n tr.className = table.querySelector('tr').className;\n tr.appendChild(element);\n myTable.appendChild(tr);\n });\n mySubDiv.appendChild(myTable);\n myTableDiv.appendChild(mySubDiv);\n document.body.appendChild(myTableDiv);\n var offsetWidthValue = myTable.getBoundingClientRect().width;\n document.body.removeChild(myTableDiv);\n return Math.ceil(offsetWidthValue);\n };\n /**\n * @hidden\n */\n Resize.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerRefreshed, this.refreshHeight, this);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n /**\n * @hidden\n */\n Resize.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.headerRefreshed, this.refreshHeight);\n this.parent.off(events.initialEnd, this.wireEvents);\n };\n /**\n * @hidden\n */\n Resize.prototype.render = function () {\n this.unwireEvents();\n this.wireEvents();\n this.setHandlerHeight();\n };\n Resize.prototype.refreshHeight = function () {\n this.getResizeHandlers().forEach(function (ele) {\n if (ele.parentElement.offsetHeight > 0) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n }\n });\n this.setHandlerHeight();\n };\n Resize.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderContent(), Browser.touchStartEvent, this.resizeStart, this);\n EventHandler.add(this.parent.getHeaderContent(), events.dblclick, this.callAutoFit, this);\n };\n Resize.prototype.unwireEvents = function () {\n EventHandler.remove(this.parent.getHeaderContent(), Browser.touchStartEvent, this.resizeStart);\n EventHandler.remove(this.parent.getHeaderContent(), events.dblclick, this.callAutoFit);\n };\n Resize.prototype.getResizeHandlers = function () {\n return this.parent.getFrozenColumns() ?\n [].slice.call(this.parent.getHeaderContent().querySelectorAll('.' + resizeClassList.root))\n : [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + resizeClassList.root));\n };\n Resize.prototype.setHandlerHeight = function () {\n [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + resizeClassList.suppress)).forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n });\n };\n Resize.prototype.callAutoFit = function (e) {\n if (e.target.classList.contains('e-rhandler')) {\n var col = this.getTargetColumn(e);\n this.resizeColumn(col.field, this.parent.getNormalizedColumnIndex(col.uid), col.uid);\n var header = closest(e.target, resizeClassList.header);\n header.classList.add('e-resized');\n }\n };\n Resize.prototype.resizeStart = function (e) {\n if (e.target.classList.contains('e-rhandler')) {\n if (!this.helper) {\n if (this.getScrollBarWidth() === 0) {\n for (var _i = 0, _a = this.refreshColumnWidth(); _i < _a.length; _i++) {\n var col = _a[_i];\n this.widthService.setColumnWidth(col);\n }\n this.widthService.setWidthToTable();\n }\n this.element = e.target;\n if (this.parent.getVisibleFrozenColumns()) {\n var mtbody = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n var ftbody = this.parent.getContent().querySelector('.e-frozencontent').querySelector('tbody');\n var mtr = mtbody.querySelectorAll('tr');\n var ftr = ftbody.querySelectorAll('tr');\n for (var i = 0; i < mtr.length; i++) {\n if (this.parent.rowHeight) {\n mtr[i].style.height = this.parent.rowHeight + 'px';\n ftr[i].style.height = this.parent.rowHeight + 'px';\n }\n else {\n mtr[i].style.removeProperty('height');\n ftr[i].style.removeProperty('height');\n }\n }\n }\n this.parentElementWidth = this.parent.element.getBoundingClientRect().width;\n this.appendHelper();\n this.column = this.getTargetColumn(e);\n this.pageX = this.getPointX(e);\n if (this.parent.enableRtl) {\n this.minMove = 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 };\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 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 if (parentsUntil(this.element, 'e-frozenheader')) {\n this.isFrozenColResized = true;\n }\n else {\n this.isFrozenColResized = false;\n }\n if (this.parent.getFrozenColumns()) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n this.refresh();\n this.doubleTapEvent(e);\n this.isDblClk = true;\n };\n Resize.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Resize.prototype.refreshColumnWidth = function () {\n var columns = this.parent.getColumns();\n for (var _i = 0, _a = [].slice.apply(this.parent.getHeaderTable().querySelectorAll('th.e-headercell')); _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, columns_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 = this.parent.createElement('div', {\n className: resizeClassList.helper\n });\n this.parent.element.appendChild(this.helper);\n this.setHelperHeight();\n };\n Resize.prototype.setHelperHeight = function () {\n var height = this.parent.getContent().offsetHeight - this.getScrollBarWidth();\n var rect = closest(this.element, resizeClassList.header);\n var tr = [].slice.call(this.parent.getHeaderContent().querySelectorAll('tr'));\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (rect.parentElement.children.length !== frzCols) {\n tr.splice(0, tr.length / 2);\n }\n else {\n tr.splice(tr.length / 2, tr.length / 2);\n }\n }\n for (var i = tr.indexOf(rect.parentElement); i < tr.length; i++) {\n height += tr[i].offsetHeight;\n }\n var pos = this.calcPos(rect);\n pos.left += (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2);\n this.helper.style.cssText = 'height: ' + height + 'px; top: ' + pos.top + 'px; left:' + Math.floor(pos.left) + 'px;';\n };\n Resize.prototype.getScrollBarWidth = function (height) {\n var ele = this.parent.getFrozenColumns() ? this.parent.getContent().querySelector('.e-movablecontent')\n : this.parent.getContent().firstChild;\n return (ele.scrollHeight > ele.clientHeight && height) ||\n ele.scrollWidth > ele.clientWidth ? getScrollBarWidth() : 0;\n };\n Resize.prototype.removeHelper = function (e) {\n var cls = e.target.classList;\n if (!(cls.contains(resizeClassList.root) || cls.contains(resizeClassList.icon)) && this.helper) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n detach(this.helper);\n this.refresh();\n }\n };\n Resize.prototype.updateHelper = function () {\n var rect = closest(this.element, resizeClassList.header);\n var left = Math.floor(this.calcPos(rect).left + (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2));\n var borderWidth = 2; // to maintain the helper inside of grid element.\n if (left > this.parentElementWidth) {\n left = this.parentElementWidth - borderWidth;\n }\n if (this.parent.getFrozenColumns()) {\n var table = closest(rect, '.e-table');\n var fLeft = table.offsetLeft;\n if (left < fLeft) {\n left = fLeft;\n }\n }\n this.helper.style.left = left + 'px';\n };\n Resize.prototype.calcPos = function (elem) {\n var parentOffset = {\n top: 0,\n left: 0\n };\n var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = elem.offsetParent || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Resize.prototype.doubleTapEvent = function (e) {\n if (this.getUserAgent() && this.isDblClk) {\n if (!this.tapped) {\n this.tapped = setTimeout(this.timeoutHandler(), 300);\n }\n else {\n clearTimeout(this.tapped);\n this.callAutoFit(e);\n this.tapped = null;\n }\n }\n };\n Resize.prototype.getUserAgent = function () {\n var userAgent = Browser.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n Resize.prototype.timeoutHandler = function () {\n this.tapped = null;\n };\n return Resize;\n}());\nexport { Resize };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest as closestElement, removeClass, classList, remove } from '@syncfusion/ej2-base';\nimport { getElementIndex, inArray, parentsUntil, getPosition, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\n/**\n *\n * The `Reorder` module is used for reordering columns.\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for the Grid reorder module\n * @hidden\n */\n function Reorder(parent) {\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.reorderComplete, this.onActionComplete, this);\n this.parent.on(events.columnDrag, this.drag, this);\n this.parent.on(events.columnDragStart, this.dragStart, this);\n this.parent.on(events.columnDragStop, this.dragStop, this);\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.headerRefreshed, this.createReorderElement, this);\n }\n Reorder.prototype.chkDropPosition = function (srcElem, destElem) {\n 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 var dropElement = this.element.querySelector('.e-headercelldiv') || this.element.querySelector('.e-stackedheadercelldiv');\n var uId = dropElement.getAttribute('e-mappinguid');\n var column = gObj.getColumnByUid(uId);\n if (!closestElement(e.target, 'th') || (!isNullOrUndefined(column) && column.allowReordering === false)) {\n return;\n }\n var destElem = closestElement(e.target, '.e-headercell');\n var destElemDiv = destElem.querySelector('.e-headercelldiv') || destElem.querySelector('.e-stackedheadercelldiv');\n var destElemUid = destElemDiv.getAttribute('e-mappinguid');\n if (!isNullOrUndefined(destElemUid)) {\n var destColumn = gObj.getColumnByUid(destElemUid);\n if (isNullOrUndefined(destColumn) || destColumn.allowReordering === false) {\n return;\n }\n }\n if (destElem && !(!this.chkDropPosition(this.element, destElem) || !this.chkDropAllCols(this.element, destElem))) {\n if (this.parent.enableColumnVirtualization) {\n var columns = this.parent.columns;\n var sourceUid_1 = this.element.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n var col = this.parent.getColumns(true).filter(function (col) { return col.uid === sourceUid_1; });\n var colMatchIndex_1 = null;\n var column_1 = col[0];\n var destUid_1 = destElem.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n var bool = columns.some(function (col, index) {\n if (col.uid === destUid_1) {\n colMatchIndex_1 = index;\n return col.uid === destUid_1;\n }\n return false;\n });\n if (!isNullOrUndefined(colMatchIndex_1)) {\n this.moveColumns(colMatchIndex_1, column_1);\n }\n }\n else {\n var headers = this.getHeaderCells();\n var oldIdx = getElementIndex(this.element, headers);\n var columns = this.getColumnsModel(this.parent.columns);\n var column_2 = columns[oldIdx];\n var newIndex = this.targetParentContainerIndex(this.element, destElem);\n this.moveColumns(newIndex, column_2);\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 fColumn = this.parent.getColumnByField(fromFName);\n var toColumn = this.parent.getColumnByField(toFName);\n if ((!isNullOrUndefined(fColumn) && !fColumn.allowReordering) || (!isNullOrUndefined(toColumn) && !toColumn.allowReordering)) {\n return;\n }\n var column = this.parent.getColumnByField(toFName);\n var parent = this.getColParent(column, this.parent.columns);\n var columns = parent ? parent.columns : this.parent.columns;\n var destIndex = inArray(column, columns);\n if (destIndex > -1) {\n this.moveColumns(destIndex, this.parent.getColumnByField(fromFName));\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(this.parent\n .createElement('div', { className: 'e-icons e-icon-reorderuparrow e-reorderuparrow', attrs: { style: 'display:none' } }));\n this.downArrow = header.appendChild(this.parent\n .createElement('div', { className: 'e-icons e-icon-reorderdownarrow e-reorderdownarrow', attrs: { style: 'display:none' } }));\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Reorder.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, { type: events.actionComplete }));\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (this.parent.isDestroyed || !gridElement || (!gridElement.querySelector('.e-gridheader') &&\n !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n remove(this.upArrow);\n remove(this.downArrow);\n this.parent.off(events.headerDrop, this.headerDrop);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.reorderComplete, this.onActionComplete);\n this.parent.off(events.columnDrag, this.drag);\n this.parent.off(events.columnDragStart, this.dragStart);\n this.parent.off(events.columnDragStop, this.dragStop);\n this.parent.off(events.headerRefreshed, this.createReorderElement);\n //call ejdrag and drop destroy\n };\n Reorder.prototype.drag = function (e) {\n var gObj = this.parent;\n var target = e.target;\n if (e.column.allowReordering === false) {\n return;\n }\n var closest = closestElement(target, '.e-headercell:not(.e-stackedHeaderCell)');\n var cloneElement = gObj.element.querySelector('.e-cloneproperties');\n var isLeft = this.x > getPosition(e.event).x + gObj.getContent().firstElementChild.scrollLeft;\n removeClass(gObj.getHeaderTable().querySelectorAll('.e-reorderindicate'), ['e-reorderindicate']);\n this.setDisplay('none');\n this.stopTimer();\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n this.updateScrollPostion(e.event);\n if (closest && !closest.isEqualNode(this.element)) {\n target = closest;\n //consider stacked, detail header cell \n if (!(!this.chkDropPosition(this.element, target) || !this.chkDropAllCols(this.element, target))) {\n this.updateArrowPosition(target, isLeft);\n classList(target, ['e-allowDrop', 'e-reorderindicate'], []);\n }\n else if (!(gObj.allowGrouping && parentsUntil(e.target, 'e-groupdroparea'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n }\n gObj.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: e.column });\n };\n Reorder.prototype.updateScrollPostion = function (e) {\n var _this = this;\n var frzCols = this.parent.getFrozenColumns();\n var x = getPosition(e).x;\n var cliRect = this.parent.element.getBoundingClientRect();\n var cliRectBaseLeft = frzCols ? this.parent.element.querySelector('.e-movableheader')\n .getBoundingClientRect().left : cliRect.left;\n var cliRectBaseRight = cliRect.right;\n var scrollElem = frzCols ? this.parent.getContent().querySelector('.e-movablecontent')\n : this.parent.getContent().firstElementChild;\n if (x > cliRectBaseLeft && x < cliRectBaseLeft + 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, true); }, 50);\n }\n else if (x < cliRectBaseRight && x > cliRectBaseRight - 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, false); }, 50);\n }\n };\n Reorder.prototype.setScrollLeft = function (scrollElem, isLeft) {\n var scrollLeft = scrollElem.scrollLeft;\n scrollElem.scrollLeft = scrollElem.scrollLeft + (isLeft ? -5 : 5);\n if (scrollLeft !== scrollElem.scrollLeft) {\n this.setDisplay('none');\n }\n };\n Reorder.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Reorder.prototype.updateArrowPosition = function (target, isLeft) {\n var cliRect = target.getBoundingClientRect();\n var cliRectBase = this.parent.element.getBoundingClientRect();\n if ((isLeft && cliRect.left < cliRectBase.left) || (!isLeft && cliRect.right > cliRectBase.right)) {\n return;\n }\n this.upArrow.style.top = cliRect.top + cliRect.height - cliRectBase.top + 'px';\n this.downArrow.style.top = cliRect.top - cliRectBase.top - 4 + 'px';\n this.upArrow.style.left = this.downArrow.style.left = (isLeft ? cliRect.left : cliRect.right) - cliRectBase.left - 4 + 'px';\n this.setDisplay('');\n };\n Reorder.prototype.dragStart = function (e) {\n var gObj = this.parent;\n var target = e.target;\n this.element = target.classList.contains('e-headercell') ? target :\n parentsUntil(target, 'e-headercell');\n if (e.column.allowReordering === false) {\n return;\n }\n this.x = getPosition(e.event).x + gObj.getContent().firstElementChild.scrollLeft;\n gObj.trigger(events.columnDragStart, {\n target: target, draggableType: 'headercell', column: e.column\n });\n };\n Reorder.prototype.dragStop = function (e) {\n var gObj = this.parent;\n this.setDisplay('none');\n this.stopTimer();\n if (!e.cancel) {\n gObj.trigger(events.columnDrop, { target: e.target, draggableType: 'headercell', column: e.column });\n }\n removeClass(gObj.getHeaderTable().querySelectorAll('.e-reorderindicate'), ['e-reorderindicate']);\n };\n Reorder.prototype.setDisplay = function (display) {\n this.upArrow.style.display = display;\n this.downArrow.style.display = display;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Draggable } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { remove, 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 = _this.parent.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-grid e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + gObj.element.offsetWidth\n });\n var table = _this.parent.createElement('table', { styles: 'width:' + gObj.element.offsetWidth });\n var tbody = _this.parent.createElement('tbody');\n if (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 var args = {\n target: target, draggableType: 'rows', cancel: false,\n rows: gObj.getSelectedRows(), data: gObj.getSelectedRecords()\n };\n gObj.trigger(events.rowDrop, args);\n if (!parentsUntil(target, 'e-gridcontent') || args.cancel) {\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 var gridElement = this.parent.element;\n if (this.parent.isDestroyed || !gridElement || (!gridElement.querySelector('.e-gridheader') &&\n !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeDrag);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.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';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n *\n * The `Group` module is used to handle group action.\n */\nvar Group = /** @class */ (function () {\n /**\n * Constructor for Grid group module\n * @hidden\n */\n function Group(parent, groupSettings, sortedColumns, serviceLocator) {\n var _this = this;\n this.isAppliedGroup = false;\n this.isAppliedUnGroup = false;\n this.visualElement = createElement('div', {\n className: 'e-cloneproperties e-dragclone e-gdclone',\n styles: 'line-height:23px', attrs: { action: 'grouping' }\n });\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var element = target.classList.contains('e-groupheadercell') ? target :\n parentsUntil(target, 'e-groupheadercell');\n if (!element) {\n return false;\n }\n _this.column = gObj.getColumnByField(element.firstElementChild.getAttribute('ej-mappingname'));\n _this.visualElement.textContent = element.textContent;\n _this.visualElement.style.width = element.offsetWidth + 2 + 'px';\n _this.visualElement.style.height = element.offsetHeight + 2 + 'px';\n _this.visualElement.setAttribute('e-mappinguid', _this.column.uid);\n gObj.element.appendChild(_this.visualElement);\n return _this.visualElement;\n };\n this.dragStart = function () {\n _this.parent.element.classList.add('e-ungroupdrag');\n };\n this.drag = function (e) {\n var target = e.target;\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n _this.parent.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: _this.column });\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!(parentsUntil(target, 'e-gridcontent') || parentsUntil(target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n };\n this.dragStop = function (e) {\n _this.parent.element.classList.remove('e-ungroupdrag');\n if (!(parentsUntil(e.target, 'e-gridcontent') || parentsUntil(e.target, 'e-gridheader'))) {\n remove(e.helper);\n return;\n }\n };\n this.drop = function (e) {\n var gObj = _this.parent;\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n _this.element.classList.remove('e-hover');\n remove(e.droppedElement);\n _this.aria.setDropTarget(_this.parent.element.querySelector('.e-groupdroparea'), false);\n _this.aria.setGrabbed(_this.parent.getHeaderTable().querySelector('[aria-grabbed=true]'), false);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n _this.groupColumn(column.field);\n };\n this.contentRefresh = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.groupSettings = groupSettings;\n this.serviceLocator = serviceLocator;\n this.sortedColumns = sortedColumns;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n this.groupGenerator = new GroupModelGenerator(this.parent);\n }\n Group.prototype.columnDrag = function (e) {\n var gObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!parentsUntil(e.target, 'e-groupdroparea') &&\n !(this.parent.allowReordering && parentsUntil(e.target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n e.target.classList.contains('e-groupdroparea') ? this.element.classList.add('e-hover') : this.element.classList.remove('e-hover');\n };\n Group.prototype.columnDragStart = function (e) {\n if (e.target.classList.contains('e-stackedheadercell')) {\n return;\n }\n var gObj = this.parent;\n var dropArea = this.parent.element.querySelector('.e-groupdroparea');\n this.aria.setDropTarget(dropArea, e.column.allowGrouping);\n var element = e.target.classList.contains('e-headercell') ? e.target : parentsUntil(e.target, 'e-headercell');\n this.aria.setGrabbed(element, true, !e.column.allowGrouping);\n };\n Group.prototype.columnDrop = function (e) {\n var gObj = this.parent;\n if (e.droppedElement.getAttribute('action') === 'grouping') {\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n this.ungroupColumn(column.field);\n }\n };\n /**\n * @hidden\n */\n Group.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.groupComplete, this.onActionComplete, this);\n this.parent.on(events.ungroupComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.columnDrag, this.columnDrag, this);\n this.parent.on(events.columnDragStart, this.columnDragStart, this);\n this.parent.on(events.columnDrop, this.columnDrop, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.sortComplete, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.onEmpty, this.initialEnd, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.groupAggregates, this.onGroupAggregates, this);\n };\n /**\n * @hidden\n */\n Group.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.groupComplete, this.onActionComplete);\n this.parent.off(events.ungroupComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.columnDrag, this.columnDrag);\n this.parent.off(events.columnDragStart, this.columnDragStart);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.sortComplete, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.groupAggregates, this.onGroupAggregates);\n };\n Group.prototype.initialEnd = function () {\n var gObj = this.parent;\n this.parent.off(events.contentReady, this.initialEnd);\n this.parent.off(events.onEmpty, this.initialEnd);\n if (this.parent.getColumns().length && this.groupSettings.columns.length) {\n this.contentRefresh = false;\n for (var _i = 0, _a = gObj.groupSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.groupColumn(col);\n }\n this.contentRefresh = true;\n }\n };\n Group.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n if ((!this.groupSettings.columns.length ||\n ['altDownArrow', 'altUpArrow', 'ctrlDownArrow', 'ctrlUpArrow', 'enter'].indexOf(e.action) === -1)) {\n return;\n }\n e.preventDefault();\n switch (e.action) {\n case 'altDownArrow':\n case 'altUpArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n if (selected.length) {\n var rows = gObj.getContentTable().querySelector('tbody').children;\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var grpRow = void 0;\n for (var i = dataRow.rowIndex; i >= 0; i--) {\n if (!rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-detailrow')) {\n grpRow = rows[i];\n break;\n }\n }\n this.expandCollapseRows(grpRow.querySelector(e.action === 'altUpArrow' ?\n '.e-recordplusexpand' : '.e-recordpluscollapse'));\n }\n break;\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'enter':\n if (this.parent.isEdit || (closest(e.target, '#' + this.parent.element.id + '_searchbar') !== null)) {\n return;\n }\n var element = this.focus.getFocusedElement();\n var row = element ? element.parentElement.querySelector('[class^=\"e-record\"]') : null;\n if (!row) {\n break;\n }\n this.expandCollapseRows(row);\n break;\n }\n };\n Group.prototype.clickHandler = function (e) {\n this.expandCollapseRows(e.target);\n this.applySortFromTarget(e.target);\n this.unGroupFromTarget(e.target);\n this.toogleGroupFromHeader(e.target);\n };\n Group.prototype.unGroupFromTarget = function (target) {\n if (target.classList.contains('e-ungroupbutton')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n };\n Group.prototype.toogleGroupFromHeader = function (target) {\n if (this.groupSettings.showToggleButton) {\n if (target.classList.contains('e-grptogglebtn')) {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n else {\n this.groupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n }\n else {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n }\n }\n };\n Group.prototype.applySortFromTarget = function (target) {\n var gObj = this.parent;\n var gHeader = closest(target, '.e-groupheadercell');\n if (gObj.allowSorting && gHeader && !target.classList.contains('e-ungroupbutton') &&\n !target.classList.contains('e-toggleungroup')) {\n var field = gHeader.firstElementChild.getAttribute('ej-mappingname');\n if (gObj.getColumnHeaderByField(field).querySelectorAll('.e-ascending').length) {\n gObj.sortColumn(field, 'Descending', true);\n }\n else {\n gObj.sortColumn(field, 'Ascending', true);\n }\n }\n };\n /**\n * Expands or collapses grouped rows by target element.\n * @param {Element} target - Defines the target element of the grouped row.\n * @return {void}\n */\n Group.prototype.expandCollapseRows = function (target) {\n var trgt = parentsUntil(target, 'e-recordplusexpand') ||\n parentsUntil(target, 'e-recordpluscollapse');\n if (trgt) {\n var cellIdx = trgt.cellIndex;\n var rowIdx = trgt.parentElement.rowIndex;\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var rows = [].slice.call(rowNodes).slice(rowIdx + 1, rowNodes.length);\n var isHide = void 0;\n var expandElem = void 0;\n var toExpand = [];\n var indent = trgt.parentElement.querySelectorAll('.e-indentcell').length;\n var expand = false;\n if (trgt.classList.contains('e-recordpluscollapse')) {\n addClass([trgt], 'e-recordplusexpand');\n removeClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gdiagonaldown e-icon-gdownarrow';\n expand = true;\n }\n else {\n isHide = true;\n removeClass([trgt], 'e-recordplusexpand');\n addClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n }\n this.aria.setExpand(trgt, expand);\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].querySelectorAll('td')[cellIdx] &&\n rows[i].querySelectorAll('td')[cellIdx].classList.contains('e-indentcell') && rows) {\n if (isHide) {\n rows[i].style.display = 'none';\n }\n else {\n if (rows[i].querySelectorAll('.e-indentcell').length === indent + 1) {\n rows[i].style.display = '';\n expandElem = rows[i].querySelector('.e-recordplusexpand');\n if (expandElem) {\n toExpand.push(expandElem);\n }\n if (rows[i].classList.contains('e-detailrow')) {\n if (rows[i - 1].querySelectorAll('.e-detailrowcollapse').length) {\n rows[i].style.display = 'none';\n }\n }\n }\n }\n }\n else {\n break;\n }\n }\n for (var i = 0, len = toExpand.length; i < len; i++) {\n removeClass([toExpand[i]], 'e-recordplusexpand');\n addClass([toExpand[i]], 'e-recordpluscollapse');\n toExpand[i].firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n this.expandCollapseRows(toExpand[i]);\n }\n }\n };\n Group.prototype.expandCollapse = function (isExpand) {\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var row;\n for (var i = 0, len = rowNodes.length; i < len; i++) {\n if (rowNodes[i].querySelectorAll('.e-recordplusexpand, .e-recordpluscollapse').length) {\n row = rowNodes[i].querySelector(isExpand ? '.e-recordpluscollapse' : '.e-recordplusexpand');\n if (row) {\n row.className = isExpand ? 'e-recordplusexpand' : 'e-recordpluscollapse';\n row.firstElementChild.className = isExpand ? 'e-icons e-gdiagonaldown e-icon-gdownarrow' :\n 'e-icons e-gnextforward e-icon-grightarrow';\n }\n if (!(rowNodes[i].firstElementChild.classList.contains('e-recordplusexpand') ||\n rowNodes[i].firstElementChild.classList.contains('e-recordpluscollapse'))) {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n else {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n };\n /**\n * Expands all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n /**\n * The function is used to render grouping\n * @return {Element}\n * @hidden\n */\n Group.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderGroupDropArea();\n this.initDragAndDrop();\n this.refreshToggleBtn();\n };\n Group.prototype.renderGroupDropArea = function () {\n var groupElem = this.parent.element.querySelector('.e-groupdroparea');\n if (groupElem) {\n remove(groupElem);\n }\n this.element = this.parent.createElement('div', { className: 'e-groupdroparea', attrs: { 'tabindex': '-1' } });\n this.updateGroupDropArea();\n this.parent.element.insertBefore(this.element, this.parent.element.firstChild);\n if (!this.groupSettings.showDropArea) {\n this.element.style.display = 'none';\n }\n };\n Group.prototype.updateGroupDropArea = function (clear) {\n if (this.groupSettings.showDropArea && !this.groupSettings.columns.length) {\n var dragLabel = this.l10n.getConstant('GroupDropArea');\n this.element.innerHTML = dragLabel;\n this.element.classList.remove('e-grouped');\n }\n else {\n if ((this.element.innerHTML === this.l10n.getConstant('GroupDropArea') && (this.groupSettings.columns.length === 1\n || !this.isAppliedGroup && !this.isAppliedUnGroup)) || clear) {\n this.element.innerHTML = '';\n }\n this.element.classList.add('e-grouped');\n }\n };\n Group.prototype.initDragAndDrop = function () {\n this.initializeGHeaderDrop();\n this.initializeGHeaderDrag();\n };\n Group.prototype.initializeGHeaderDrag = function () {\n var drag = new Draggable(this.element, {\n dragTarget: '.e-groupheadercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop\n });\n };\n Group.prototype.initializeGHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(this.element, {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n /**\n * Groups a column by column name.\n * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n Group.prototype.groupColumn = function (columnName) {\n var gObj = this.parent;\n var column = gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n (this.contentRefresh && this.groupSettings.columns.indexOf(columnName) > -1)) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.groupColumn, arg1: columnName });\n return;\n }\n column.visible = gObj.groupSettings.showGroupedColumn;\n this.colName = columnName;\n this.isAppliedGroup = true;\n if (this.contentRefresh) {\n this.updateModel();\n }\n else {\n this.addColToGroupDrop(columnName);\n }\n this.updateGroupDropArea();\n this.isAppliedGroup = false;\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n Group.prototype.ungroupColumn = function (columnName) {\n var gObj = this.parent;\n var column = this.parent.enableColumnVirtualization ?\n this.parent.columns.filter(function (c) { return c.field === columnName; })[0] : gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false || this.groupSettings.columns.indexOf(columnName) < 0) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.ungroupColumn, arg1: columnName });\n return;\n }\n column.visible = true;\n this.colName = column.field;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.splice(columns.indexOf(this.colName), 1);\n if (this.sortedColumns.indexOf(columnName) < 0) {\n for (var i = 0, len = gObj.sortSettings.columns.length; i < len; i++) {\n if (columnName === gObj.sortSettings.columns[i].field) {\n gObj.sortSettings.columns.splice(i, 1);\n break;\n }\n }\n }\n this.groupSettings.columns = columns;\n if (gObj.allowGrouping) {\n this.isAppliedUnGroup = true;\n this.parent.dataBind();\n }\n };\n /**\n * The function used to update groupSettings\n * @return {void}\n * @hidden\n */\n Group.prototype.updateModel = function () {\n var gObj = this.parent;\n var i = 0;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.push(this.colName);\n this.groupSettings.columns = columns;\n this.groupAddSortingQuery(this.colName);\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Group.prototype.onActionComplete = function (e) {\n var gObj = this.parent;\n if (e.requestType === 'grouping') {\n this.addColToGroupDrop(this.colName);\n }\n else {\n this.removeColFromGroupDrop(this.colName);\n }\n var args = this.groupSettings.columns.indexOf(this.colName) > -1 ? {\n columnName: this.colName, requestType: 'grouping', type: events.actionComplete\n } : { requestType: 'ungrouping', type: events.actionComplete };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.colName = null;\n };\n Group.prototype.groupAddSortingQuery = function (colName) {\n var i = 0;\n while (i < this.parent.sortSettings.columns.length) {\n if (this.parent.sortSettings.columns[i].field === colName) {\n break;\n }\n i++;\n }\n if (this.parent.sortSettings.columns.length === i) {\n this.parent.sortSettings.columns.push({ field: colName, direction: 'Ascending' });\n }\n else if (!this.parent.allowSorting) {\n this.parent.sortSettings.columns[i].direction = 'Ascending';\n }\n };\n Group.prototype.addColToGroupDrop = function (field) {\n var gObj = this.parent;\n var direction = 'Ascending';\n var groupedColumn = this.parent.createElement('div', { className: 'e-grid-icon e-groupheadercell' });\n var childDiv = this.parent.createElement('div', { attrs: { 'ej-mappingname': field } });\n var column = this.parent.getColumnByField(field);\n if (isNullOrUndefined(column)) {\n return;\n }\n //Todo headerTemplateID for grouped column, disableHtmlEncode \n var headerCell = gObj.getColumnHeaderByUid(column.uid);\n if (!isNullOrUndefined(column.headerTemplate)) {\n if (column.headerTemplate.indexOf('#') !== -1) {\n childDiv.innerHTML = document.querySelector(column.headerTemplate).innerHTML.trim();\n }\n else {\n childDiv.innerHTML = column.headerTemplate;\n }\n childDiv.firstElementChild.classList.add('e-grouptext');\n }\n else {\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-grouptext', innerHTML: column.headerText,\n attrs: { tabindex: '-1', 'aria-label': 'sort the grouped column' }\n }));\n }\n if (this.groupSettings.showToggleButton) {\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-togglegroupbutton e-icons e-icon-ungroup e-toggleungroup', innerHTML: ' ',\n attrs: { tabindex: '-1', 'aria-label': 'ungroup button' }\n }));\n }\n if (headerCell.querySelectorAll('.e-ascending,.e-descending').length) {\n direction = headerCell.querySelector('.e-ascending') ? 'Ascending' : 'Descending';\n }\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-groupsort e-icons ' +\n ('e-' + direction.toLowerCase() + ' e-icon-' + direction.toLowerCase()), innerHTML: ' ',\n attrs: { tabindex: '-1', 'aria-label': 'sort the grouped column' }\n }));\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-ungroupbutton e-icons e-icon-hide', innerHTML: ' ',\n attrs: { title: this.l10n.getConstant('UnGroup'), tabindex: '-1', 'aria-label': 'ungroup the grouped column' },\n styles: this.groupSettings.showUngroupButton ? '' : 'display:none'\n }));\n groupedColumn.appendChild(childDiv);\n this.element.appendChild(groupedColumn);\n //Todo: rtl \n };\n Group.prototype.refreshToggleBtn = function (isRemove) {\n if (this.groupSettings.showToggleButton) {\n var headers = [].slice.call(this.parent.element.getElementsByClassName('e-headercelldiv'));\n for (var i = 0, len = headers.length; i < len; i++) {\n if (!((headers[i].classList.contains('e-emptycell')) || (headers[i].classList.contains('e-headerchkcelldiv')))) {\n var column = this.parent.getColumnByUid(headers[i].getAttribute('e-mappinguid'));\n if (!this.parent.showColumnMenu || (this.parent.showColumnMenu && !column.showColumnMenu)) {\n if (headers[i].querySelectorAll('.e-grptogglebtn').length) {\n remove(headers[i].querySelectorAll('.e-grptogglebtn')[0]);\n }\n if (!isRemove) {\n headers[i].appendChild(this.parent.createElement('span', {\n className: 'e-grptogglebtn e-icons ' +\n (this.groupSettings.columns.indexOf(column.field) > -1 ? 'e-toggleungroup e-icon-ungroup'\n : 'e-togglegroup e-icon-group'), attrs: { tabindex: '-1', 'aria-label': 'Group button' }\n }));\n }\n }\n }\n }\n }\n };\n Group.prototype.removeColFromGroupDrop = function (field) {\n if (!isNullOrUndefined(this.getGHeaderCell(field))) {\n remove(this.getGHeaderCell(field));\n this.updateGroupDropArea();\n }\n this.isAppliedUnGroup = false;\n };\n Group.prototype.onPropertyChanged = function (e) {\n var _this = this;\n if (e.module !== this.getModuleName()) {\n return;\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'columns':\n var args = void 0;\n if (this_1.contentRefresh) {\n if (!this_1.isAppliedUnGroup) {\n if (!this_1.isAppliedGroup) {\n this_1.updateGroupDropArea(true);\n for (var i = 0; i < this_1.groupSettings.columns.length; i++) {\n this_1.colName = this_1.groupSettings.columns[i];\n var col = this_1.parent.getColumnByField(this_1.colName);\n col.visible = this_1.parent.groupSettings.showGroupedColumn;\n this_1.groupAddSortingQuery(this_1.colName);\n if (i < this_1.groupSettings.columns.length - 1) {\n this_1.addColToGroupDrop(this_1.groupSettings.columns[i]);\n }\n }\n }\n args = { columnName: this_1.colName, requestType: e.properties[prop].length ? 'grouping' : 'ungrouping',\n type: events.actionBegin };\n }\n else {\n args = { requestType: 'ungrouping', type: events.actionBegin };\n }\n if (!this_1.groupSettings.showGroupedColumn) {\n e.oldProperties[prop].forEach(function (column) {\n if (e.properties[prop].indexOf(column) === -1) {\n _this.parent.getColumnByField(column).visible = true;\n }\n });\n }\n this_1.parent.notify(events.modelChanged, args);\n }\n break;\n case 'showDropArea':\n this_1.updateGroupDropArea();\n this_1.groupSettings.showDropArea ? this_1.element.style.display = '' : this_1.element.style.display = 'none';\n break;\n case 'showGroupedColumn':\n this_1.updateGroupedColumn(this_1.groupSettings.showGroupedColumn);\n this_1.parent.notify(events.modelChanged, { requestType: 'refresh' });\n break;\n case 'showUngroupButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showUngroupButton, 'e-ungroupbutton');\n break;\n case 'showToggleButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showToggleButton, 'e-togglegroupbutton ');\n this_1.parent.refreshHeader();\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n Group.prototype.updateGroupedColumn = function (isVisible) {\n for (var i = 0; i < this.groupSettings.columns.length; i++) {\n this.parent.getColumnByField(this.groupSettings.columns[i]).visible = isVisible;\n }\n };\n Group.prototype.updateButtonVisibility = function (isVisible, className) {\n var gHeader = [].slice.call(this.element.querySelectorAll('.' + className));\n for (var i = 0; i < gHeader.length; i++) {\n gHeader[i].style.display = isVisible ? '' : 'none';\n }\n };\n Group.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n Group.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n if (!this.parent.isDestroyed) {\n this.clearGrouping();\n }\n this.removeEventListener();\n this.refreshToggleBtn(true);\n remove(this.element);\n //call ejdrag and drop destroy\n };\n /**\n * Clears all the grouped columns of the Grid.\n * @return {void}\n */\n Group.prototype.clearGrouping = function () {\n var cols = JSON.parse(JSON.stringify(this.groupSettings.columns));\n this.contentRefresh = false;\n for (var i = 0, len = cols.length; i < len; i++) {\n this.ungroupColumn(cols[i]);\n }\n this.contentRefresh = true;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Group.prototype.getModuleName = function () {\n return 'group';\n };\n Group.prototype.refreshSortIcons = function (e) {\n var gObj = this.parent;\n var header;\n var cols = gObj.sortSettings.columns;\n var gCols = gObj.groupSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n this.refreshToggleBtn();\n for (var i = 0, len = cols.length; i < len; i++) {\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n header = gObj.getColumnHeaderByField(cols[i].field);\n if (!gObj.allowSorting && (this.sortedColumns.indexOf(cols[i].field) > -1 ||\n this.groupSettings.columns.indexOf(cols[i].field) > -1)) {\n classList(header.querySelector('.e-sortfilterdiv'), ['e-ascending', 'e-icon-ascending'], []);\n if (cols.length > 1) {\n header.querySelector('.e-headercelldiv').appendChild(this.parent.createElement('span', { className: 'e-sortnumber', innerHTML: (i + 1).toString() }));\n }\n }\n else if (this.getGHeaderCell(cols[i].field) && this.getGHeaderCell(cols[i].field).querySelectorAll('.e-groupsort').length) {\n if (cols[i].direction === 'Ascending') {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-ascending', 'e-icon-ascending'], ['e-descending', 'e-icon-descending']);\n }\n else {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-descending', 'e-icon-descending'], ['e-ascending', 'e-icon-ascending']);\n }\n }\n }\n for (var i = 0, len = gCols.length; i < len; i++) {\n if (fieldNames.indexOf(gCols[i]) === -1) {\n continue;\n }\n gObj.getColumnHeaderByField(gCols[i]).setAttribute('aria-grouped', 'true');\n }\n };\n Group.prototype.getGHeaderCell = function (field) {\n if (this.element && this.element.querySelector('[ej-mappingname=\"' + field + '\"]')) {\n return this.element.querySelector('[ej-mappingname=\"' + field + '\"]').parentElement;\n }\n return null;\n };\n Group.prototype.onGroupAggregates = function (editedData) {\n var _this = this;\n var aggregates = this.iterateGroupAggregates(editedData);\n var rowData = this.groupGenerator.generateRows(aggregates, {});\n var summaryRows = this.parent.getRowsObject().filter(function (row) { return !row.isDataRow; });\n var updateSummaryRows = rowData.filter(function (data) { return !data.isDataRow; });\n updateSummaryRows.forEach(function (row, indx) {\n var cells = row.cells.filter(function (cell) { return cell.isDataCell; });\n var args = { cells: cells, data: row.data, dataUid: summaryRows[indx] ? summaryRows[indx].uid : '' };\n _this.parent.notify(events.refreshAggregateCell, args);\n });\n };\n Group.prototype.iterateGroupAggregates = function (editedData) {\n var updatedData = editedData instanceof Array ? editedData : [];\n var rows = this.parent.getRowsObject();\n var initData = this.parent.getCurrentViewRecords();\n var deletedCols = [];\n var changeds = rows.map(function (row) {\n if (row.edit === 'delete') {\n deletedCols.push(row.data);\n }\n return row.changes instanceof Object ? row.changes : row.data;\n });\n var field = this.parent.getPrimaryKeyFieldNames()[0];\n changeds = updatedData.length === 0 ? changeds : updatedData;\n var mergeData = initData.map(function (item) {\n var pKeyVal = DataUtil.getObject(field, item);\n var value;\n var hasVal = changeds.some(function (cItem) {\n value = cItem;\n return pKeyVal === DataUtil.getObject(field, cItem);\n });\n return hasVal ? value : item;\n });\n var eData = editedData;\n if (!(eData.type && eData.type === 'cancel') && deletedCols.length > 0) {\n deletedCols.forEach(function (row) {\n var index = mergeData.indexOf(row);\n mergeData.splice(index, 1);\n });\n }\n var aggregates = [];\n var aggregateRows = this.parent.aggregates;\n aggregateRows.forEach(function (row) {\n row.columns.forEach(function (col) {\n var aggr = {};\n var type = col.type.toString();\n aggr = { type: type.toLowerCase(), field: col.field };\n aggregates.push(aggr);\n });\n });\n var result;\n var aggrds;\n var groupedCols = this.parent.groupSettings.columns;\n groupedCols.forEach(function (field) {\n aggrds = result ? result : mergeData;\n result = DataUtil.group(aggrds, field, aggregates, null, null);\n });\n return result;\n };\n return Group;\n}());\nexport { Group };\n","import { closest, classList } from '@syncfusion/ej2-base';\nimport { Grid } from '../base/grid';\nimport { parents, getUid, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { CellType } from '../base/enum';\n/**\n * The `DetailRow` module is used to handle detail template and hierarchy Grid operations.\n */\nvar DetailRow = /** @class */ (function () {\n /**\n * Constructor for the Grid detail template module\n * @hidden\n */\n function DetailRow(parent, locator) {\n //Internal variables\n this.aria = new AriaService();\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.focus = locator.getService('focus');\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n }\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 = this.parent.createElement('tr', { className: 'e-detailrow' });\n var detailCell = this.parent.createElement('td', { className: 'e-detailcell' });\n detailCell.setAttribute('colspan', this.parent.getVisibleColumns().length.toString());\n var row = new Row({\n isDataRow: true,\n isExpand: true,\n cells: [new Cell({ cellType: CellType.Indent }), new Cell({ isDataCell: true, visible: true })]\n });\n for (var i = 0, len = gObj.groupSettings.columns.length; i < len; i++) {\n detailRow.appendChild(this.parent.createElement('td', { className: 'e-indentcell' }));\n row.cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n detailRow.appendChild(this.parent.createElement('td', { className: 'e-detailindentcell' }));\n detailRow.appendChild(detailCell);\n tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n if (gObj.detailTemplate) {\n appendChildren(detailCell, gObj.getDetailTemplate()(data, gObj, 'detailTemplate'));\n }\n else {\n 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 = this.parent.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 var gridElement = this.parent.element;\n if (this.parent.isDestroyed || !gridElement || (!gridElement.querySelector('.e-gridheader') &&\n !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n };\n DetailRow.prototype.getTDfromIndex = function (index, className) {\n var tr = this.parent.getDataRows()[index];\n if (tr && tr.querySelector(className)) {\n return tr.querySelector(className);\n }\n return null;\n };\n /**\n * Expands a detail row with the given target.\n * @param {Element} target - Defines the collapsed element to expand.\n * @return {void}\n */\n DetailRow.prototype.expand = function (target) {\n if (!isNaN(target)) {\n target = this.getTDfromIndex(target, '.e-detailrowcollapse');\n }\n if (target && target.classList.contains('e-detailrowcollapse')) {\n this.toogleExpandcollapse(target);\n }\n };\n /**\n * Collapses a detail row with the given target.\n * @param {Element} target - Defines the expanded element to collapse.\n * @return {void}\n */\n DetailRow.prototype.collapse = function (target) {\n if (!isNaN(target)) {\n target = this.getTDfromIndex(target, '.e-detailrowexpand');\n }\n if (target && target.classList.contains('e-detailrowexpand')) {\n this.toogleExpandcollapse(target);\n }\n };\n /**\n * Expands all the detail rows of the Grid.\n * @return {void}\n */\n DetailRow.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the detail rows of the Grid.\n * @return {void}\n */\n DetailRow.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n DetailRow.prototype.expandCollapse = function (isExpand) {\n var td;\n var rows = this.parent.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n td = rows[i].querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n isExpand ? this.expand(td) : this.collapse(td);\n }\n };\n DetailRow.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'altUpArrow':\n case 'altDownArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n if (selected.length) {\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var td = dataRow.querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n e.action === 'altDownArrow' ? this.expand(td) : this.collapse(td);\n }\n break;\n case 'enter':\n if (this.parent.isEdit) {\n return;\n }\n var element = this.focus.getFocusedElement();\n if (!e.target.classList.contains('e-detailrowcollapse') &&\n !e.target.classList.contains('e-detailrowexpand')) {\n break;\n }\n this.toogleExpandcollapse(element);\n break;\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","import { EventHandler, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { Toolbar as tool } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { templateCompiler, appendChildren } from '../base/util';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `Toolbar` module is used to handle ToolBar actions.\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.predefinedItems = {};\n this.items = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print', 'Search',\n 'ColumnChooser', 'PdfExport', 'ExcelExport', 'CsvExport', 'WordExport'];\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n var preItems = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print',\n 'PdfExport', 'ExcelExport', 'WordExport', 'CsvExport'];\n for (var _i = 0, preItems_1 = preItems; _i < preItems_1.length; _i++) {\n var item = preItems_1[_i];\n var itemStr = item.toLowerCase();\n var localeName = itemStr[0].toUpperCase() + itemStr.slice(1);\n this.predefinedItems[item] = {\n id: this.gridID + '_' + itemStr, prefixIcon: 'e-' + itemStr,\n text: this.l10n.getConstant(localeName), tooltipText: this.l10n.getConstant(localeName)\n };\n }\n this.predefinedItems.Search = {\n id: this.gridID + '_search',\n template: '
    \\\n \\\n \\\n
    ',\n tooltipText: this.l10n.getConstant('Search'), align: 'Right', cssClass: 'e-search-wrapper'\n };\n this.predefinedItems.ColumnChooser = {\n id: this.gridID + '_' + 'columnchooser', cssClass: 'e-cc e-ccdiv e-cc-toolbar', suffixIcon: 'e-' + 'columnchooser-btn',\n text: this.l10n.getConstant('Columnchooser'), tooltipText: this.l10n.getConstant('Columnchooser'), align: 'Right',\n };\n this.createToolbar();\n };\n /**\n * Gets the toolbar of the Grid.\n * @return {Element}\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.toolbar.element;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Toolbar.prototype.destroy = function () {\n if (this.toolbar && !this.toolbar.isDestroyed) {\n if (!this.toolbar.element) {\n this.parent.destroyTemplate(['toolbarTemplate']);\n }\n else {\n this.toolbar.destroy();\n }\n this.unWireEvent();\n this.removeEventListener();\n remove(this.element);\n }\n };\n Toolbar.prototype.createToolbar = function () {\n var items = this.getItems();\n this.toolbar = new tool({\n items: items,\n clicked: this.toolbarClickHandler.bind(this),\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl\n });\n var viewStr = 'viewContainerRef';\n var registerTemp = 'registeredTemplate';\n if (this.parent[viewStr]) {\n this.toolbar[registerTemp] = {};\n this.toolbar[viewStr] = this.parent[viewStr];\n }\n this.element = this.parent.createElement('div', { id: this.gridID + '_toolbarItems' });\n if (this.parent.toolbarTemplate) {\n if (typeof (this.parent.toolbarTemplate) === 'string') {\n this.toolbar.appendTo(this.parent.toolbarTemplate);\n this.element = this.toolbar.element;\n }\n else {\n appendChildren(this.element, templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate'));\n }\n }\n else {\n this.toolbar.appendTo(this.element);\n }\n this.parent.element.insertBefore(this.element, this.parent.getHeaderContent());\n this.searchElement = this.element.querySelector('#' + this.gridID + '_searchbar');\n this.wireEvent();\n this.refreshToolbarItems();\n if (this.parent.searchSettings) {\n this.updateSearchBox();\n }\n };\n Toolbar.prototype.refreshToolbarItems = function (args) {\n var gObj = this.parent;\n var enableItems = [];\n var disableItems = [];\n var edit = gObj.editSettings;\n var hasData = gObj.currentViewData && gObj.currentViewData.length;\n edit.allowAdding ? enableItems.push(this.gridID + '_add') : disableItems.push(this.gridID + '_add');\n edit.allowEditing && hasData ? enableItems.push(this.gridID + '_edit') : disableItems.push(this.gridID + '_edit');\n edit.allowDeleting && hasData ? enableItems.push(this.gridID + '_delete') : disableItems.push(this.gridID + '_delete');\n if (gObj.editSettings.mode === 'Batch') {\n if (gObj.element.querySelectorAll('.e-updatedtd').length && (edit.allowAdding || edit.allowEditing)) {\n enableItems.push(this.gridID + '_update');\n enableItems.push(this.gridID + '_cancel');\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n else {\n if (gObj.isEdit && (edit.allowAdding || edit.allowEditing)) {\n enableItems = [this.gridID + '_update', this.gridID + '_cancel'];\n disableItems = [this.gridID + '_add', this.gridID + '_edit', this.gridID + '_delete'];\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n this.enableItems(enableItems, true);\n this.enableItems(disableItems, false);\n };\n Toolbar.prototype.getItems = function () {\n var items = [];\n var toolbarItems = this.parent.toolbar || [];\n if (typeof (this.parent.toolbar) === 'string') {\n return [];\n }\n for (var _i = 0, toolbarItems_1 = toolbarItems; _i < toolbarItems_1.length; _i++) {\n var item = toolbarItems_1[_i];\n switch (typeof item) {\n case 'number':\n items.push(this.getItemObject(this.items[item]));\n break;\n case 'string':\n items.push(this.getItemObject(item));\n break;\n default:\n items.push(this.getItem(item));\n }\n }\n return items;\n };\n Toolbar.prototype.getItem = function (itemObject) {\n var item = this.predefinedItems[itemObject.text];\n return item ? extend(item, item, itemObject) : itemObject;\n };\n Toolbar.prototype.getItemObject = function (itemName) {\n return this.predefinedItems[itemName] || { text: itemName, id: this.gridID + '_' + itemName };\n };\n /**\n * Enables or disables ToolBar items.\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @return {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n var element = this.element.querySelector('#' + item);\n if (element) {\n this.toolbar.enableItems(element.parentElement, isEnable);\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var gObj = this.parent;\n var gID = this.gridID;\n extend(args, { cancel: false });\n gObj.trigger(events.toolbarClick, args);\n if (args.cancel) {\n return;\n }\n switch (!isNullOrUndefined(args.item) && args.item.id) {\n case gID + '_print':\n gObj.print();\n break;\n case gID + '_edit':\n gObj.startEdit();\n break;\n case gID + '_update':\n gObj.endEdit();\n break;\n case gID + '_cancel':\n gObj.closeEdit();\n break;\n case gID + '_add':\n gObj.addRecord();\n break;\n case gID + '_delete':\n gObj.deleteRecord();\n break;\n case gID + '_search':\n if (args.originalEvent.target.id === gID + '_searchbutton') {\n this.search();\n }\n break;\n case gID + '_columnchooser':\n var tarElement = this.parent.element.querySelector('.e-ccdiv');\n var y = tarElement.getBoundingClientRect().top;\n var x = tarElement.getBoundingClientRect().left;\n var targetEle = args.originalEvent.target;\n y = tarElement.getBoundingClientRect().top + tarElement.offsetTop;\n gObj.createColumnchooser(x, y, targetEle);\n break;\n }\n };\n Toolbar.prototype.modelChanged = function (e) {\n if (e.module === 'edit') {\n this.refreshToolbarItems();\n }\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() || !this.parent.toolbar) {\n return;\n }\n if (this.element) {\n remove(this.element);\n }\n this.render();\n };\n Toolbar.prototype.keyUpHandler = function (e) {\n if (e.keyCode === 13) {\n this.search();\n }\n };\n Toolbar.prototype.search = function () {\n this.parent.search(this.searchElement.value);\n };\n Toolbar.prototype.updateSearchBox = function () {\n if (this.searchElement) {\n this.searchElement.value = this.parent.searchSettings.key;\n }\n };\n Toolbar.prototype.wireEvent = function () {\n if (this.searchElement) {\n this.searchBoxObj = new SearchBox(this.searchElement);\n EventHandler.add(this.searchElement, 'keyup', this.keyUpHandler, this);\n this.searchBoxObj.wireEvent();\n }\n };\n Toolbar.prototype.unWireEvent = function () {\n if (this.searchElement) {\n EventHandler.remove(this.searchElement, 'keyup', this.keyUpHandler);\n this.searchBoxObj.unWireEvent();\n }\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.uiUpdate, this.onPropertyChanged, this);\n this.parent.on(events.inBoundModelChanged, this.updateSearchBox.bind(this));\n this.parent.on(events.modelChanged, this.refreshToolbarItems, this);\n this.parent.on(events.toolbarRefresh, this.refreshToolbarItems, this);\n this.parent.on(events.inBoundModelChanged, this.modelChanged, this);\n this.parent.on(events.dataBound, this.refreshToolbarItems, this);\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.onPropertyChanged);\n this.parent.off(events.inBoundModelChanged, this.updateSearchBox);\n this.parent.off(events.modelChanged, this.refreshToolbarItems);\n this.parent.off(events.toolbarRefresh, this.refreshToolbarItems);\n this.parent.off(events.inBoundModelChanged, this.modelChanged);\n this.parent.off(events.dataBound, this.refreshToolbarItems);\n };\n /**\n * For internal use only - Get the module name.\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { colGroupRefresh, columnWidthChanged, scroll, columnVisibilityChanged, refreshFooterRenderer } from '../base/constant';\nimport { ContentRender } from './content-renderer';\nimport { RowRenderer } from './row-renderer';\nimport { SummaryModelGenerator } from '../services/summary-model-generator';\nimport { renderMovable, calculateAggregate } from '../base/util';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Footer module is used to render grid content\n * @hidden\n */\nvar FooterRenderer = /** @class */ (function (_super) {\n __extends(FooterRenderer, _super);\n function FooterRenderer(gridModule, serviceLocator) {\n var _this = _super.call(this, gridModule, serviceLocator) || this;\n _this.aggregates = {};\n _this.parent = gridModule;\n _this.locator = serviceLocator;\n _this.modelGenerator = new SummaryModelGenerator(_this.parent);\n _this.addEventListener();\n return _this;\n }\n /**\n * The function is used to render grid footer div\n */\n FooterRenderer.prototype.renderPanel = function () {\n var div = this.parent.createElement('div', { className: 'e-gridfooter' });\n var innerDiv = this.parent.createElement('div', { className: 'e-summarycontent' });\n var movableContent = innerDiv;\n if (this.parent.getFrozenColumns()) {\n var fDiv = this.parent.createElement('div', { className: 'e-frozenfootercontent' });\n var mDiv = this.parent.createElement('div', { className: 'e-movablefootercontent' });\n innerDiv.appendChild(fDiv);\n innerDiv.appendChild(mDiv);\n this.frozenContent = fDiv;\n this.movableContent = mDiv;\n movableContent = mDiv;\n }\n if (Browser.isDevice) {\n movableContent.style.overflowX = 'scroll';\n }\n div.appendChild(innerDiv);\n this.setPanel(div);\n if (this.parent.getPager() != null) {\n this.parent.element.insertBefore(div, this.parent.getPager());\n }\n else {\n this.parent.element.appendChild(div);\n }\n };\n /**\n * The function is used to render grid footer table\n */\n FooterRenderer.prototype.renderTable = function () {\n var contentDiv = this.getPanel();\n var innerDiv = this.createContentTable('_footer_table');\n var table = innerDiv.querySelector('.e-table');\n var tFoot = this.parent.createElement('tfoot');\n table.appendChild(tFoot);\n if (this.parent.getFrozenColumns()) {\n var freezeTable = table.cloneNode(true);\n this.frozenContent.appendChild(freezeTable);\n this.freezeTable = freezeTable;\n this.movableContent.appendChild(table);\n remove(table.querySelector('colgroup'));\n var colGroup = ((this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup')).cloneNode(true));\n table.insertBefore(colGroup, table.querySelector('tbody'));\n this.setColGroup(colGroup);\n }\n this.setTable(table);\n };\n FooterRenderer.prototype.renderSummaryContent = function (e, table, cStart, cEnd) {\n var input = this.parent.dataSource instanceof Array ? this.parent.dataSource : this.parent.currentViewData;\n var summaries = this.modelGenerator.getData();\n var dummies = isNullOrUndefined(cStart) ? this.modelGenerator.getColumns() :\n this.modelGenerator.getColumns(cStart, cEnd);\n var rows = isNullOrUndefined(cStart) ? this.modelGenerator.generateRows(input, e || this.aggregates) :\n this.modelGenerator.generateRows(input, e || this.aggregates, cStart, cEnd);\n var fragment = document.createDocumentFragment();\n var rowrenderer = new RowRenderer(this.locator, null, this.parent);\n rowrenderer.element = this.parent.createElement('TR', { className: 'e-summaryrow' });\n for (var srow = 0, len = summaries.length; srow < len; srow++) {\n var row = rows[srow];\n if (!row) {\n continue;\n }\n var tr = rowrenderer.render(row, dummies);\n fragment.appendChild(tr);\n }\n table.tFoot.appendChild(fragment);\n this.aggregates = e;\n };\n FooterRenderer.prototype.refresh = function (e) {\n if (this.parent.getFrozenColumns()) {\n remove(this.getPanel());\n this.renderPanel();\n this.renderTable();\n this.freezeTable.tFoot.innerHTML = '';\n this.renderSummaryContent(e, this.freezeTable, 0, this.parent.getFrozenColumns());\n }\n this.getTable().tFoot.innerHTML = '';\n this.renderSummaryContent(e, this.getTable(), this.parent.getFrozenColumns());\n // check freeze content have no row case\n if (this.parent.getFrozenColumns()) {\n var frozenDiv = this.frozenContent;\n if (!frozenDiv.offsetHeight) {\n frozenDiv.style.height = this.getTable().offsetHeight + 'px';\n }\n }\n this.onScroll();\n };\n FooterRenderer.prototype.refreshCol = function () {\n // frozen table \n var mheaderCol;\n var fheaderCol = mheaderCol = this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true);\n if (this.parent.getFrozenColumns()) {\n mheaderCol = renderMovable(fheaderCol, this.parent.getFrozenColumns());\n this.freezeTable.replaceChild(fheaderCol, this.freezeTable.querySelector('colGroup'));\n }\n this.getTable().replaceChild(mheaderCol, this.getColGroup());\n this.setColGroup(mheaderCol);\n };\n FooterRenderer.prototype.onWidthChange = function (args) {\n this.getColFromIndex(args.index).style.width = formatUnit(args.width);\n if (this.parent.allowResizing && args.module === 'resize') {\n this.updateFooterTableWidth(this.getTable());\n }\n };\n FooterRenderer.prototype.onScroll = function (e) {\n if (e === void 0) { e = { left: this.parent.getContent().firstChild.scrollLeft }; }\n this.getTable().parentElement.scrollLeft = e.left;\n };\n FooterRenderer.prototype.getColFromIndex = function (index) {\n var fCol = this.parent.getFrozenColumns();\n if (fCol && fCol > index) {\n return this.freezeTable.querySelector('colGroup').children[index];\n }\n return this.getColGroup().children[index - fCol];\n };\n FooterRenderer.prototype.columnVisibilityChanged = function () {\n this.refresh();\n };\n FooterRenderer.prototype.addEventListener = function () {\n this.parent.on(colGroupRefresh, this.refreshCol, this);\n this.parent.on(columnWidthChanged, this.onWidthChange, this);\n this.parent.on(scroll, this.onScroll, this);\n this.parent.on(columnVisibilityChanged, this.columnVisibilityChanged, this);\n this.parent.on(refreshFooterRenderer, this.refreshFooterRenderer, this);\n };\n FooterRenderer.prototype.removeEventListener = function () {\n this.parent.off(colGroupRefresh, this.refreshCol);\n this.parent.off(columnWidthChanged, this.onWidthChange);\n this.parent.off(scroll, this.onScroll);\n this.parent.off(columnVisibilityChanged, this.columnVisibilityChanged);\n this.parent.off(refreshFooterRenderer, this.refreshFooterRenderer);\n };\n FooterRenderer.prototype.updateFooterTableWidth = function (tFoot) {\n var tHead = this.parent.getHeaderTable();\n if (tHead && tFoot) {\n tFoot.style.width = tHead.style.width;\n }\n };\n FooterRenderer.prototype.refreshFooterRenderer = function (editedData) {\n var aggregates = this.onAggregates(editedData);\n this.refresh(aggregates);\n };\n FooterRenderer.prototype.onAggregates = function (editedData) {\n var _this = this;\n editedData = editedData instanceof Array ? editedData : [];\n var field = this.parent.getPrimaryKeyFieldNames()[0];\n var deletedCols = [];\n var mergeds;\n var rows = this.parent.frozenColumns > 0 ? this.parent.getMovableRowsObject() : this.parent.getRowsObject();\n var initds = this.parent.dataSource instanceof Array ? this.parent.dataSource : this.parent.getCurrentViewRecords();\n var addrow = [];\n var changeds = rows.map(function (row) {\n if (row.changes && row.edit === 'add') {\n addrow.push(row.changes);\n }\n if (row.edit === 'delete') {\n deletedCols.push(row.data);\n }\n return row.isDirty && row.changes ? row.changes : row.data;\n });\n changeds = editedData.length === 0 ? changeds : editedData;\n mergeds = initds.map(function (item) {\n var idVal = DataUtil.getObject(field, item);\n var value;\n var hasVal = changeds.some(function (cItem) {\n value = cItem;\n return idVal === DataUtil.getObject(field, cItem);\n });\n return hasVal ? value : item;\n });\n var currentData = this.parent.groupSettings.columns.length > 0 && 'records' in this.parent.currentViewData ?\n this.parent.getCurrentViewRecords() : this.parent.currentViewData;\n var currentds;\n currentds = currentData.map(function (item) {\n var idVal = DataUtil.getObject(field, item);\n var value;\n var hasVal = mergeds.some(function (cItem) {\n value = cItem;\n return idVal === DataUtil.getObject(field, cItem);\n });\n return hasVal ? value : item;\n });\n if (addrow.length > 0) {\n addrow.forEach(function (row) { mergeds.push(row); currentds.push(row); });\n }\n var eData = editedData;\n if (!(eData.type && eData.type === 'cancel') && deletedCols.length > 0) {\n deletedCols.forEach(function (row) {\n var index = mergeds.indexOf(row);\n var curIndx = currentData.indexOf(row);\n mergeds.splice(index, 1);\n if (currentds && currentds.length) {\n currentds.splice(curIndx, 1);\n }\n });\n }\n var aggregate = {};\n var agrVal;\n var aggregateRows = this.parent.aggregates;\n aggregateRows.forEach(function (row) {\n row.columns.forEach(function (col) {\n var data = [];\n var type = col.type.toString();\n data = type.toLowerCase() === 'custom' && !isNullOrUndefined(currentds) ? currentds : mergeds;\n agrVal = calculateAggregate(type, data, col, _this.parent);\n aggregate[col.field + ' - ' + type.toLowerCase()] = agrVal;\n });\n });\n var result = {\n result: this.parent.groupSettings.columns.length > 0 ? mergeds : currentds,\n count: mergeds.length,\n aggregates: aggregate\n };\n return result;\n };\n return FooterRenderer;\n}(ContentRender));\nexport { FooterRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { refreshAggregateCell } from '../base/constant';\n/**\n * SummaryCellRenderer class which responsible for building summary cell content.\n * @hidden\n */\nvar SummaryCellRenderer = /** @class */ (function (_super) {\n __extends(SummaryCellRenderer, _super);\n function SummaryCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent\n .createElement('TD', { className: 'e-summarycell', attrs: { role: 'gridcell', tabindex: '-1' } });\n return _this;\n }\n SummaryCellRenderer.prototype.getValue = function (field, data, column) {\n var key;\n key = !isNullOrUndefined(column.type) ?\n column.field + ' - ' + (typeof column.type === 'string' ? column.type.toLowerCase() : '') : column.columnName;\n return data[column.columnName] ? data[column.columnName][key] : '';\n };\n SummaryCellRenderer.prototype.evaluate = function (node, cell, data, attributes) {\n var column = cell.column;\n this.parent.on(refreshAggregateCell, this.refreshWithAggregate(node, cell), this);\n if (!(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)) {\n return true;\n }\n var tempObj = column.getTemplate(cell.cellType);\n appendChildren(node, tempObj.fn(data[column.columnName], this.parent, tempObj.property));\n return false;\n };\n SummaryCellRenderer.prototype.refreshWithAggregate = function (node, cell) {\n var _this = this;\n var cellNode = cell;\n return function (args) {\n var cell = cellNode;\n var field = cell.column.columnName ? cell.column.columnName : null;\n var curCell = (!isNullOrUndefined(field) ? args.cells.filter(function (cell) {\n return cell.column.columnName === field;\n })[0] : null);\n if (node.parentElement && node.parentElement.getAttribute('data-uid') === args.dataUid && field &&\n field === curCell.column.columnName) {\n _this.refreshTD(node, curCell, args.data);\n }\n };\n };\n return SummaryCellRenderer;\n}(CellRenderer));\nexport { SummaryCellRenderer };\n","import { EventHandler } from '@syncfusion/ej2-base';\nimport { debounce } from '@syncfusion/ej2-base';\n/**\n * InterSectionObserver - class watch whether it enters the viewport.\n * @hidden\n */\nvar InterSectionObserver = /** @class */ (function () {\n function InterSectionObserver(element, options) {\n var _this = this;\n this.fromWheel = false;\n this.touchMove = false;\n this.options = {};\n this.sentinelInfo = {\n 'up': {\n check: function (rect, info) {\n var top = rect.top - _this.containerRect.top;\n info.entered = top >= 0;\n return top + (_this.options.pageHeight / 2) >= 0;\n },\n axis: 'Y'\n },\n 'down': {\n check: function (rect, info) {\n var cHeight = _this.options.container.clientHeight;\n var top = rect.bottom;\n info.entered = rect.bottom <= _this.containerRect.bottom;\n return top - (_this.options.pageHeight / 2) <= _this.options.pageHeight / 2;\n }, axis: 'Y'\n },\n 'right': {\n check: function (rect, info) {\n var right = rect.right;\n info.entered = right < _this.containerRect.right;\n return right - _this.containerRect.width <= _this.containerRect.right;\n }, axis: 'X'\n },\n 'left': {\n check: function (rect, info) {\n var left = rect.left;\n info.entered = left > 0;\n return left + _this.containerRect.width >= _this.containerRect.left;\n }, axis: 'X'\n }\n };\n this.element = element;\n this.options = options;\n }\n InterSectionObserver.prototype.observe = function (callback, onEnterCallback) {\n var _this = this;\n this.containerRect = this.options.container.getBoundingClientRect();\n EventHandler.add(this.options.container, 'wheel', function () { return _this.fromWheel = true; }, this);\n EventHandler.add(this.options.container, 'scroll', this.virtualScrollHandler(callback, onEnterCallback), this);\n };\n InterSectionObserver.prototype.check = function (direction) {\n var info = this.sentinelInfo[direction];\n return info.check(this.element.getBoundingClientRect(), info);\n };\n InterSectionObserver.prototype.virtualScrollHandler = function (callback, onEnterCallback) {\n var _this = this;\n var prevTop = 0;\n var prevLeft = 0;\n var debounced100 = debounce(callback, 100);\n var debounced50 = debounce(callback, 50);\n return function (e) {\n var top = e.target.scrollTop;\n var left = e.target.scrollLeft;\n var direction = prevTop < top ? 'down' : 'up';\n direction = prevLeft === left ? direction : prevLeft < left ? 'right' : 'left';\n prevTop = top;\n prevLeft = left;\n var current = _this.sentinelInfo[direction];\n if (_this.options.axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered) {\n onEnterCallback(_this.element, current, direction, { top: top, left: left });\n }\n if (check) {\n var fn = debounced100; //this.fromWheel ? this.options.debounceEvent ? debounced100 : callback : debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n }\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n _this.fromWheel = false;\n };\n };\n InterSectionObserver.prototype.setPageHeight = function (value) {\n this.options.pageHeight = value;\n };\n return InterSectionObserver;\n}());\nexport { InterSectionObserver };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\n/**\n * Content module is used to render grid content\n */\nvar VirtualRowModelGenerator = /** @class */ (function () {\n function VirtualRowModelGenerator(parent) {\n this.cOffsets = {};\n this.cache = {};\n this.data = {};\n this.groups = {};\n this.parent = parent;\n this.model = this.parent.pageSettings;\n this.rowModelGenerator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n }\n VirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var _this = this;\n var info = notifyArgs.virtualInfo = notifyArgs.virtualInfo || this.getData();\n var xAxis = info.sentinelInfo && info.sentinelInfo.axis === 'X';\n var page = !xAxis && info.loadNext && !info.loadSelf ? info.nextInfo.page : info.page;\n var result = [];\n var center = ~~(this.model.pageSize / 2);\n var indexes = this.getBlockIndexes(page);\n var loadedBlocks = [];\n this.checkAndResetCache(notifyArgs.requestType);\n if (this.parent.enableColumnVirtualization) {\n info.blockIndexes.forEach(function (value) {\n if (_this.isBlockAvailable(value)) {\n _this.cache[value] = _this.rowModelGenerator.refreshRows(_this.cache[value]);\n }\n });\n }\n info.blockIndexes.forEach(function (value) {\n if (!_this.isBlockAvailable(value)) {\n var rows = _this.rowModelGenerator.generateRows(data, {\n virtualInfo: info, startIndex: _this.getStartIndex(value, data)\n });\n var median = ~~Math.max(rows.length, _this.model.pageSize) / 2;\n if (!_this.isBlockAvailable(indexes[0])) {\n _this.cache[indexes[0]] = rows.slice(0, median);\n }\n if (!_this.isBlockAvailable(indexes[1])) {\n _this.cache[indexes[1]] = rows.slice(median);\n }\n }\n if (_this.parent.groupSettings.columns.length && !xAxis && _this.cache[value]) {\n _this.cache[value] = _this.updateGroupRow(_this.cache[value], value);\n }\n result.push.apply(result, _this.cache[value]);\n if (_this.isBlockAvailable(value)) {\n loadedBlocks.push(value);\n }\n });\n info.blockIndexes = loadedBlocks;\n var grouping = 'records';\n if (this.parent.allowGrouping) {\n this.parent.currentViewData[grouping] = result.map(function (m) { return m.data; });\n }\n else {\n this.parent.currentViewData = result.map(function (m) { return m.data; });\n }\n return result;\n };\n VirtualRowModelGenerator.prototype.getBlockIndexes = function (page) {\n return [page + (page - 1), page * 2];\n };\n VirtualRowModelGenerator.prototype.getPage = function (block) {\n return block % 2 === 0 ? block / 2 : (block + 1) / 2;\n };\n VirtualRowModelGenerator.prototype.isBlockAvailable = function (value) {\n return value in this.cache;\n };\n VirtualRowModelGenerator.prototype.getData = function () {\n return {\n page: this.model.currentPage,\n blockIndexes: this.getBlockIndexes(this.model.currentPage),\n direction: 'down',\n columnIndexes: this.parent.getColumnIndexesInView()\n };\n };\n VirtualRowModelGenerator.prototype.getStartIndex = function (blk, data, full) {\n if (full === void 0) { full = true; }\n var page = this.getPage(blk);\n var even = blk % 2 === 0;\n var index = (page - 1) * this.model.pageSize;\n return full || !even ? index : index + ~~(this.model.pageSize / 2);\n };\n VirtualRowModelGenerator.prototype.getColumnIndexes = function (content) {\n var _this = this;\n if (content === void 0) { content = this.parent.getHeaderContent().firstChild; }\n var indexes = [];\n var sLeft = content.scrollLeft | 0;\n var keys = Object.keys(this.cOffsets);\n var cWidth = content.getBoundingClientRect().width;\n sLeft = Math.min(this.cOffsets[keys.length - 1] - cWidth, sLeft);\n var calWidth = Browser.isDevice ? 2 * cWidth : cWidth / 2;\n var left = sLeft + cWidth + (sLeft === 0 ? calWidth : 0);\n keys.some(function (offset, indx, input) {\n var iOffset = Number(offset);\n var offsetVal = _this.cOffsets[offset];\n var border = sLeft - calWidth <= offsetVal && left + calWidth >= offsetVal;\n if (border) {\n indexes.push(iOffset);\n }\n return left + calWidth < offsetVal;\n });\n return indexes;\n };\n VirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder']\n .some(function (value) { return action === value; });\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n return clear;\n };\n VirtualRowModelGenerator.prototype.refreshColOffsets = function () {\n var _this = this;\n var col = 0;\n this.cOffsets = {};\n var gLen = this.parent.groupSettings.columns.length;\n var cols = this.parent.columns;\n var cLen = cols.length;\n var isVisible = function (column) { return column.visible &&\n (!_this.parent.groupSettings.showGroupedColumn ? _this.parent.groupSettings.columns.indexOf(column.field) < 0 : column.visible); };\n this.parent.groupSettings.columns.forEach(function (c, n) { return _this.cOffsets[n] = (_this.cOffsets[n - 1] | 0) + 30; });\n Array.apply(null, Array(cLen)).map(function () { return col++; }).forEach(function (block, i) {\n block = block + gLen;\n _this.cOffsets[block] = (_this.cOffsets[block - 1] | 0) + (isVisible(cols[i]) ? parseInt(cols[i].width, 10) : 0);\n });\n };\n VirtualRowModelGenerator.prototype.updateGroupRow = function (current, block) {\n var _this = this;\n var currentFirst = current[0];\n var rows = [];\n Object.keys(this.cache).forEach(function (key) {\n if (Number(key) < block) {\n rows = rows.concat(_this.cache[key]);\n }\n });\n if ((currentFirst && currentFirst.isDataRow) || block % 2 === 0) {\n return current;\n }\n return this.iterateGroup(current, rows);\n };\n VirtualRowModelGenerator.prototype.iterateGroup = function (current, rows) {\n var currentFirst = current[0];\n var offset = 0;\n if (currentFirst && currentFirst.isDataRow) {\n return current;\n }\n var isPresent = current.some(function (row) {\n return rows.some(function (oRow, index) {\n var res = oRow && oRow.data.field !== undefined && oRow.data.field === row.data.field &&\n oRow.data.key === row.data.key;\n if (res) {\n offset = index;\n }\n return res;\n });\n });\n if (isPresent) {\n current.shift();\n current = this.iterateGroup(current, rows.slice(offset));\n }\n return current;\n };\n VirtualRowModelGenerator.prototype.getRows = function () {\n var _this = this;\n var rows = [];\n Object.keys(this.cache).forEach(function (key) { return rows = rows.concat(_this.cache[key]); });\n return rows;\n };\n return VirtualRowModelGenerator;\n}());\nexport { VirtualRowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { remove, createElement, closest, formatUnit } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { dataReady, modelChanged, refreshVirtualBlock, contentReady } from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { ContentRender } from './content-renderer';\nimport { HeaderRender } from './header-renderer';\nimport { InterSectionObserver } from '../services/intersection-observer';\nimport { VirtualRowModelGenerator } from '../services/virtual-row-model-generator';\n/**\n * VirtualContentRenderer\n * @hidden\n */\nvar VirtualContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualContentRenderer, _super);\n function VirtualContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.prevHeight = 0;\n _this.currentInfo = {};\n _this.preventEvent = false;\n _this.actions = ['filtering', 'searching', 'grouping', 'ungrouping'];\n _this.offsets = {};\n _this.tmpOffsets = {};\n _this.virtualEle = new VirtualElementHandler();\n _this.offsetKeys = [];\n _this.isFocused = false;\n _this.locator = locator;\n _this.eventListener('on');\n _this.vgenerator = _this.generator;\n return _this;\n }\n VirtualContentRenderer.prototype.renderTable = function () {\n this.header = this.locator.getService('rendererFactory').getRenderer(RenderType.Header);\n _super.prototype.renderTable.call(this);\n this.virtualEle.table = this.getTable();\n this.virtualEle.content = this.content = this.getPanel().firstChild;\n this.virtualEle.renderWrapper(this.parent.height);\n this.virtualEle.renderPlaceHolder();\n this.virtualEle.wrapper.style.position = 'absolute';\n var debounceEvent = (this.parent.dataSource instanceof DataManager && !this.parent.dataSource.dataSource.offline);\n var opt = {\n container: this.content, pageHeight: this.getBlockHeight() * 2, debounceEvent: debounceEvent,\n axes: this.parent.enableColumnVirtualization ? ['X', 'Y'] : ['Y']\n };\n this.observer = new InterSectionObserver(this.virtualEle.wrapper, opt);\n };\n VirtualContentRenderer.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n this.virtualEle.adjustTable(0, 0);\n };\n VirtualContentRenderer.prototype.scrollListener = function (scrollArgs) {\n if (this.preventEvent || this.parent.isDestroyed) {\n this.preventEvent = false;\n return;\n }\n this.isFocused = this.content === closest(document.activeElement, '.e-content') || this.content === document.activeElement;\n var info = scrollArgs.sentinel;\n var viewInfo = this.currentInfo = this.getInfoFromView(scrollArgs.direction, info, scrollArgs.offset);\n if (this.prevInfo && ((info.axis === 'Y' && this.prevInfo.blockIndexes.toString() === viewInfo.blockIndexes.toString())\n || (info.axis === 'X' && this.prevInfo.columnIndexes.toString() === viewInfo.columnIndexes.toString()))) {\n return;\n }\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n this.parent.pageSettings.currentPage = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n };\n VirtualContentRenderer.prototype.block = function (blk) {\n return this.vgenerator.isBlockAvailable(blk);\n };\n VirtualContentRenderer.prototype.getInfoFromView = function (direction, info, e) {\n var tempBlocks = [];\n var infoType = { direction: direction, sentinelInfo: info, offsets: e };\n infoType.page = this.getPageFromTop(e.top, infoType);\n infoType.blockIndexes = tempBlocks = this.vgenerator.getBlockIndexes(infoType.page);\n infoType.loadSelf = !this.vgenerator.isBlockAvailable(tempBlocks[infoType.block]);\n var blocks = this.ensureBlocks(infoType);\n infoType.blockIndexes = blocks;\n infoType.loadNext = !blocks.filter(function (val) { return tempBlocks.indexOf(val) === -1; })\n .every(this.block.bind(this));\n infoType.event = (infoType.loadNext || infoType.loadSelf) ? modelChanged : refreshVirtualBlock;\n infoType.nextInfo = infoType.loadNext ? { page: Math.max(1, infoType.page + (direction === 'down' ? 1 : -1)) } : {};\n infoType.columnIndexes = info.axis === 'X' ? this.vgenerator.getColumnIndexes() : this.parent.getColumnIndexesInView();\n if (this.parent.enableColumnVirtualization && info.axis === 'X') {\n infoType.event = refreshVirtualBlock;\n }\n return infoType;\n };\n VirtualContentRenderer.prototype.ensureBlocks = function (info) {\n var _this = this;\n var index = info.blockIndexes[info.block];\n var mIdx;\n var old = index;\n var max = Math.max;\n var indexes = info.direction === 'down' ? [max(index, 1), ++index, ++index] : [max(index - 1, 1), index, index + 1];\n indexes = indexes.filter(function (val, ind) { return indexes.indexOf(val) === ind; });\n if (this.prevInfo.blockIndexes.toString() === indexes.toString()) {\n return indexes;\n }\n if (info.loadSelf || (info.direction === 'down' && this.isEndBlock(old))) {\n indexes = this.vgenerator.getBlockIndexes(info.page);\n }\n indexes.some(function (val, ind) {\n var result = val === _this.getTotalBlocks();\n if (result) {\n mIdx = ind;\n }\n return result;\n });\n if (mIdx !== undefined) {\n indexes = indexes.slice(0, mIdx + 1);\n if (info.block === 0 && indexes.length === 1 && this.vgenerator.isBlockAvailable(indexes[0] - 1)) {\n indexes = [indexes[0] - 1, indexes[0]];\n }\n }\n return indexes;\n };\n VirtualContentRenderer.prototype.appendContent = function (target, newChild, e) {\n // currentInfo value will be used if there are multiple dom updates happened due to mousewheel\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' && this.currentInfo.page &&\n this.currentInfo.page !== e.virtualInfo.page ? this.currentInfo : e.virtualInfo;\n this.prevInfo = this.prevInfo || e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width;\n var blocks = info.blockIndexes;\n if (this.parent.groupSettings.columns.length) {\n this.refreshOffsets();\n }\n var 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);\n remove(target);\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n this.getTable().appendChild(target);\n if (this.parent.groupSettings.columns.length) {\n if (info.direction === 'up') {\n var blk = this.offsets[this.getTotalBlocks()] - this.prevHeight;\n this.preventEvent = true;\n var sTop = this.content.scrollTop;\n this.content.scrollTop = sTop + blk;\n }\n this.setVirtualHeight();\n this.observer.setPageHeight(this.getOffset(blocks[blocks.length - 1]) - this.getOffset(blocks[0] - 1));\n }\n this.prevInfo = info;\n if (this.isFocused) {\n this.content.focus();\n }\n };\n VirtualContentRenderer.prototype.onDataReady = function (e) {\n if (!isNullOrUndefined(e.count)) {\n this.count = e.count;\n this.maxPage = Math.ceil(e.count / this.parent.pageSettings.pageSize);\n }\n this.vgenerator.checkAndResetCache(e.requestType);\n if (['refresh', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder', undefined]\n .some(function (value) { return e.requestType === value; })) {\n this.refreshOffsets();\n }\n this.setVirtualHeight();\n this.resetScrollPosition(e.requestType);\n };\n VirtualContentRenderer.prototype.setVirtualHeight = function () {\n var width = this.parent.enableColumnVirtualization ?\n this.getColumnOffset(this.parent.columns.length + this.parent.groupSettings.columns.length - 1) + 'px' : '100%';\n this.virtualEle.setVirtualHeight(this.offsets[this.getTotalBlocks()], width);\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.setVirtualHeight(1, width);\n }\n };\n VirtualContentRenderer.prototype.getPageFromTop = function (sTop, info) {\n var _this = this;\n var total = this.getTotalBlocks();\n var page = 0;\n var extra = this.offsets[total] - this.prevHeight;\n this.offsetKeys.some(function (offset) {\n var iOffset = Number(offset);\n var border = sTop < _this.offsets[offset] || (iOffset === total && sTop > _this.offsets[offset]);\n if (border) {\n info.block = iOffset % 2 === 0 ? 1 : 0;\n page = Math.max(1, Math.min(_this.vgenerator.getPage(iOffset), _this.maxPage));\n }\n return border;\n });\n return page;\n };\n VirtualContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if (info === undefined) {\n info = { page: this.getPageFromTop(sTop, {}) };\n info.blockIndexes = this.vgenerator.getBlockIndexes(info.page);\n }\n var block = (info.blockIndexes[0] || 1) - 1;\n var translate = this.getOffset(block);\n var endTranslate = this.getOffset(info.blockIndexes[info.blockIndexes.length - 1]);\n if (isOnenter) {\n info = this.prevInfo;\n }\n var result = translate > sTop ?\n this.getOffset(block - 1) : endTranslate < (sTop + cHeight) ? this.getOffset(block + 1) : translate;\n var blockHeight = this.offsets[info.blockIndexes[info.blockIndexes.length - 1]] -\n this.tmpOffsets[info.blockIndexes[0]];\n if (result + blockHeight > this.offsets[this.getTotalBlocks()]) {\n result -= (result + blockHeight) - this.offsets[this.getTotalBlocks()];\n }\n return result;\n };\n VirtualContentRenderer.prototype.getOffset = function (block) {\n return Math.min(this.offsets[block] | 0, this.offsets[this.maxBlock] | 0);\n };\n VirtualContentRenderer.prototype.onEntered = function () {\n var _this = this;\n return function (element, current, direction, e) {\n var xAxis = current.axis === 'X';\n var top = _this.prevInfo.offsets ? _this.prevInfo.offsets.top : null;\n var height = _this.content.getBoundingClientRect().height;\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0] - 1);\n var y = _this.getTranslateY(e.top, height, xAxis && top === e.top ? _this.prevInfo : undefined, true);\n _this.virtualEle.adjustTable(x, Math.min(y, _this.offsets[_this.maxBlock]));\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n };\n };\n VirtualContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n this.parent[action](dataReady, this.onDataReady, this);\n this.parent[action](refreshVirtualBlock, this.refreshContentRows, this);\n this.actions.forEach(function (event) { return _this.parent[action](event + \"-begin\", _this.onActionBegin, _this); });\n var fn = function () {\n _this.observer.observe(function (scrollArgs) { return _this.scrollListener(scrollArgs); }, _this.onEntered());\n _this.parent.off(contentReady, fn);\n };\n this.parent.on(contentReady, fn, this);\n };\n VirtualContentRenderer.prototype.getBlockSize = function () {\n return this.parent.pageSettings.pageSize >> 1;\n };\n VirtualContentRenderer.prototype.getBlockHeight = function () {\n return this.getBlockSize() * this.parent.getRowHeight();\n };\n VirtualContentRenderer.prototype.isEndBlock = function (index) {\n var totalBlocks = this.getTotalBlocks();\n return index >= totalBlocks || index === totalBlocks - 1;\n };\n VirtualContentRenderer.prototype.getTotalBlocks = function () {\n return Math.ceil(this.count / this.getBlockSize());\n };\n VirtualContentRenderer.prototype.getColumnOffset = function (block) {\n return this.vgenerator.cOffsets[block] | 0;\n };\n VirtualContentRenderer.prototype.getModelGenerator = function () {\n return new VirtualRowModelGenerator(this.parent);\n };\n VirtualContentRenderer.prototype.resetScrollPosition = function (action) {\n if (this.actions.some(function (value) { return value === action; })) {\n this.preventEvent = this.content.scrollTop !== 0;\n this.content.scrollTop = 0;\n }\n };\n VirtualContentRenderer.prototype.onActionBegin = function (e) {\n //Update property silently..\n this.parent.setProperties({ pageSettings: { currentPage: 1 } }, true);\n };\n VirtualContentRenderer.prototype.getRows = function () {\n return this.vgenerator.getRows();\n };\n VirtualContentRenderer.prototype.getRowByIndex = function (index) {\n var prev = this.prevInfo.blockIndexes;\n var startIdx = (prev[0] - 1) * this.getBlockSize();\n return this.parent.getDataRows()[index - startIdx];\n };\n VirtualContentRenderer.prototype.getVirtualRowIndex = function (index) {\n var prev = this.prevInfo.blockIndexes;\n var startIdx = (prev[0] - 1) * this.getBlockSize();\n return startIdx + index;\n };\n VirtualContentRenderer.prototype.refreshOffsets = function () {\n var _this = this;\n var row = 0;\n var bSize = this.getBlockSize();\n var total = this.getTotalBlocks();\n this.prevHeight = this.offsets[total];\n this.maxBlock = total % 2 === 0 ? total - 2 : total - 1;\n this.offsets = {};\n //Row offset update\n Array.apply(null, Array(total)).map(function () { return ++row; })\n .forEach(function (block) {\n var tmp = (_this.vgenerator.cache[block] || []).length;\n var rem = _this.count % bSize;\n var size = block in _this.vgenerator.cache ?\n tmp * _this.parent.getRowHeight() : rem && block === total ? rem * _this.parent.getRowHeight() : _this.getBlockHeight();\n // let size: number = this.parent.groupSettings.columns.length && block in this.vgenerator.cache ?\n // tmp * getRowHeight() : this.getBlockHeight();\n _this.offsets[block] = (_this.offsets[block - 1] | 0) + size;\n _this.tmpOffsets[block] = _this.offsets[block - 1] | 0;\n });\n this.offsetKeys = Object.keys(this.offsets);\n //Column offset update\n if (this.parent.enableColumnVirtualization) {\n this.vgenerator.refreshColOffsets();\n }\n };\n VirtualContentRenderer.prototype.refreshVirtualElement = function () {\n this.vgenerator.refreshColOffsets();\n this.setVirtualHeight();\n };\n return VirtualContentRenderer;\n}(ContentRender));\nexport { VirtualContentRenderer };\n/**\n * @hidden\n */\nvar VirtualHeaderRenderer = /** @class */ (function (_super) {\n __extends(VirtualHeaderRenderer, _super);\n function VirtualHeaderRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.virtualEle = new VirtualElementHandler();\n _this.gen = new VirtualRowModelGenerator(_this.parent);\n _this.parent.on(refreshVirtualBlock, function (e) { return e.virtualInfo.sentinelInfo.axis === 'X' ? _this.refreshUI() : null; }, _this);\n return _this;\n }\n VirtualHeaderRenderer.prototype.renderTable = function () {\n this.gen.refreshColOffsets();\n this.parent.setColumnIndexesInView(this.gen.getColumnIndexes(this.getPanel().firstChild));\n _super.prototype.renderTable.call(this);\n this.virtualEle.table = this.getTable();\n this.virtualEle.content = this.getPanel().firstChild;\n this.virtualEle.content.style.position = 'relative';\n this.virtualEle.renderWrapper();\n this.virtualEle.renderPlaceHolder('absolute');\n };\n VirtualHeaderRenderer.prototype.appendContent = function (table) {\n this.virtualEle.wrapper.appendChild(table);\n };\n VirtualHeaderRenderer.prototype.refreshUI = function () {\n this.gen.refreshColOffsets();\n this.parent.setColumnIndexesInView(this.gen.getColumnIndexes(this.getPanel().firstChild));\n _super.prototype.refreshUI.call(this);\n };\n return VirtualHeaderRenderer;\n}(HeaderRender));\nexport { VirtualHeaderRenderer };\n/**\n * @hidden\n */\nvar VirtualElementHandler = /** @class */ (function () {\n function VirtualElementHandler() {\n }\n VirtualElementHandler.prototype.renderWrapper = function (height) {\n this.wrapper = createElement('div', { className: 'e-virtualtable', styles: \"min-height:\" + formatUnit(height) });\n this.wrapper.appendChild(this.table);\n this.content.appendChild(this.wrapper);\n };\n VirtualElementHandler.prototype.renderPlaceHolder = function (position) {\n if (position === void 0) { position = 'relative'; }\n this.placeholder = createElement('div', { className: 'e-virtualtrack', styles: \"position:\" + position });\n this.content.appendChild(this.placeholder);\n };\n VirtualElementHandler.prototype.adjustTable = function (xValue, yValue) {\n this.wrapper.style.transform = \"translate(\" + xValue + \"px, \" + yValue + \"px)\";\n };\n VirtualElementHandler.prototype.setWrapperWidth = function (width, full) {\n this.wrapper.style.width = width ? width + \"px\" : full ? '100%' : '';\n };\n VirtualElementHandler.prototype.setVirtualHeight = function (height, width) {\n this.placeholder.style.height = height + \"px\";\n this.placeholder.style.width = width;\n };\n return VirtualElementHandler;\n}());\nexport { VirtualElementHandler };\n","import { initialLoad } from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { VirtualContentRenderer, VirtualHeaderRenderer } from '../renderer/virtual-content-renderer';\nimport * as events from '../base/constant';\n/**\n * Virtual Scrolling class\n */\nvar VirtualScroll = /** @class */ (function () {\n function VirtualScroll(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualscroll';\n };\n VirtualScroll.prototype.instantiateRenderer = function () {\n var renderer = this.locator.getService('rendererFactory');\n if (this.parent.enableColumnVirtualization) {\n renderer.addRenderer(RenderType.Header, new VirtualHeaderRenderer(this.parent, this.locator));\n }\n renderer.addRenderer(RenderType.Content, new VirtualContentRenderer(this.parent, this.locator));\n this.ensurePageSize();\n };\n VirtualScroll.prototype.ensurePageSize = function () {\n var rowHeight = this.parent.getRowHeight();\n 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 { isNullOrUndefined, addClass, extend, closest } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { appendChildren } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar InlineEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function InlineEditRender(parent) {\n this.parent = parent;\n }\n InlineEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n var mTbody;\n var tbody;\n if (this.parent.frozenRows) {\n tbody = this.parent.getHeaderContent().querySelector('tbody');\n }\n else {\n tbody = this.parent.getContentTable().querySelector('tbody');\n }\n args.row = this.parent.createElement('tr', { className: 'e-row e-addedrow' });\n if (tbody.querySelector('.e-emptyrow')) {\n tbody.querySelector('.e-emptyrow').classList.add('e-hide');\n }\n tbody.insertBefore(args.row, tbody.firstChild);\n args.row.appendChild(this.getEditElement(elements, false, undefined, args, true));\n if (this.parent.getFrozenColumns()) {\n var mEle = this.renderMovableform(args.row, args);\n if (this.parent.frozenRows) {\n mTbody = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n }\n else {\n mTbody = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n }\n mTbody.insertBefore(mEle, mTbody.firstChild);\n args.row.querySelector('.e-normaledit').setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');\n mEle.setAttribute('colspan', '' + (this.parent.getVisibleColumns().length - this.parent.getVisibleFrozenColumns()));\n if (this.parent.height === 'auto') {\n this.parent.notify(events.frozenHeight, {});\n }\n }\n };\n InlineEditRender.prototype.renderMovableform = function (ele, args) {\n var mEle = ele.cloneNode(true);\n var form = args.movableForm = mEle.querySelector('form');\n if (this.parent.editSettings.template) {\n form.innerHTML = '';\n this.appendChildren(form, args.rowData, false);\n return mEle;\n }\n this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n return mEle;\n };\n InlineEditRender.prototype.updateFreezeEdit = function (row, td) {\n td = td.concat([].slice.call(this.getFreezeRow(row).querySelectorAll('td.e-rowcell')));\n return td;\n };\n InlineEditRender.prototype.getFreezeRow = function (row) {\n if (this.parent.getFrozenColumns()) {\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n var fCont = this.parent.getContent().querySelector('.e-frozencontent').querySelector('tbody');\n var mCont = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n var fHdr = this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody');\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n if (this.parent.frozenRows && idx >= this.parent.frozenRows) {\n idx -= this.parent.frozenRows;\n }\n if (fCont.contains(row)) {\n return mCont.children[idx];\n }\n else if (mCont.contains(row)) {\n return fCont.children[idx];\n }\n else if (fHdr.contains(row)) {\n return mHdr.children[idx];\n }\n else if (mHdr.contains(row)) {\n return fHdr.children[idx];\n }\n }\n return row;\n };\n InlineEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n if (closest(args.row, '.e-movablecontent')) {\n args.row = this.getFreezeRow(args.row);\n }\n var tdElement = [].slice.call(args.row.querySelectorAll('td.e-rowcell'));\n args.row.innerHTML = '';\n tdElement = this.updateFreezeEdit(args.row, tdElement);\n args.row.appendChild(this.getEditElement(elements, true, tdElement, args, true));\n args.row.classList.add('e-editedrow');\n this.refreshFreezeEdit(args.row, args);\n };\n InlineEditRender.prototype.refreshFreezeEdit = function (row, args) {\n var td = row.firstChild;\n var fCls;\n var cont;\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n if (this.parent.getFrozenColumns()) {\n if (idx < this.parent.frozenRows) {\n cont = this.parent.getHeaderContent();\n fCls = '.e-frozenheader';\n }\n else {\n cont = this.parent.getContent();\n fCls = '.e-frozencontent';\n }\n var mTd = td.cloneNode(true);\n var form = args.movableForm = mTd.querySelector('form');\n if (this.parent.editSettings.template) {\n form.innerHTML = '';\n this.appendChildren(form, args.rowData, false);\n }\n var fRows = void 0;\n if (cont.querySelector(fCls).contains(row)) {\n fRows = this.parent.getMovableRowByIndex(idx);\n this.updateFrozenCont(fRows, td, mTd);\n }\n else {\n fRows = this.parent.getRowByIndex(idx);\n this.updateFrozenCont(fRows, mTd, td);\n }\n fRows.appendChild(mTd);\n fRows.classList.add('e-editedrow');\n }\n };\n InlineEditRender.prototype.updateFrozenCont = function (row, ele, mEle) {\n row.innerHTML = '';\n if (!this.parent.editSettings.template) {\n this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n }\n ele.setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');\n mEle.setAttribute('colspan', this.parent.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, args, isFrozen) {\n var gObj = this.parent;\n var gLen = 0;\n var isDetail = !isNullOrUndefined(gObj.detailTemplate) || !isNullOrUndefined(gObj.childGrid) ? 1 : 0;\n if (gObj.allowGrouping) {\n gLen = gObj.groupSettings.columns.length;\n }\n var td = this.parent.createElement('td', {\n className: 'e-editcell e-normaledit',\n attrs: { colspan: (gObj.getVisibleColumns().length - gObj.getVisibleFrozenColumns() + gLen + isDetail).toString() }\n });\n var form = args.form =\n this.parent.createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n if (this.parent.editSettings.template) {\n this.appendChildren(form, args.rowData, isFrozen);\n td.appendChild(form);\n return td;\n }\n var table = this.parent.createElement('table', { className: 'e-table e-inline-edit', attrs: { cellspacing: '0.25' } });\n table.appendChild(gObj.getContentTable().querySelector('colgroup').cloneNode(true));\n var tbody = this.parent.createElement('tbody');\n var tr = this.parent.createElement('tr');\n var i = 0;\n if (isDetail) {\n tr.insertBefore(this.parent.createElement('td', { className: 'e-detailrowcollapse' }), tr.firstChild);\n }\n while (i < gLen) {\n tr.appendChild(this.parent.createElement('td', { className: 'e-indentcell' }));\n i++;\n }\n var m = 0;\n i = 0;\n while ((isEdit && m < tdElement.length && i < gObj.getColumns().length) || i < gObj.getColumns().length) {\n var span = isEdit ? tdElement[m].getAttribute('colspan') : null;\n var col = gObj.getColumns()[i];\n var td_1 = this.parent.createElement('td', {\n className: 'e-rowcell', attrs: { style: 'text-align:' + (col.textAlign ? col.textAlign : ''), 'colspan': span ? span : '' }\n });\n if (col.visible) {\n td_1.appendChild(elements[col.uid]);\n if (col.editType === 'booleanedit') {\n td_1.classList.add('e-boolcell');\n }\n else if (col.commands || col.commandsTemplate) {\n addClass([td_1], 'e-unboundcell');\n }\n }\n else {\n td_1.classList.add('e-hide');\n }\n tr.appendChild(td_1);\n i = span ? i + parseInt(span, 10) : i + 1;\n m++;\n }\n tbody.appendChild(tr);\n table.appendChild(tbody);\n form.appendChild(table);\n td.appendChild(form);\n return td;\n };\n InlineEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n InlineEditRender.prototype.appendChildren = function (form, data, isFrozen) {\n var dummyData = extend({}, data, { isAdd: !this.isEdit, isFrozen: isFrozen }, true);\n appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate'));\n };\n return InlineEditRender;\n}());\nexport { InlineEditRender };\n","import { classList } from '@syncfusion/ej2-base';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar BatchEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function BatchEditRender(parent) {\n this.parent = parent;\n }\n BatchEditRender.prototype.update = function (elements, args) {\n args.cell.innerHTML = '';\n args.cell.appendChild(this.getEditElement(elements, args));\n args.cell.classList.add('e-editedbatchcell');\n classList(args.row, ['e-editedrow', 'e-batchrow'], []);\n };\n BatchEditRender.prototype.getEditElement = function (elements, args) {\n var gObj = this.parent;\n var form = this.parent\n .createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n form.appendChild(elements[args.columnObject.uid]);\n if (args.columnObject.editType === 'booleanedit') {\n args.cell.classList.add('e-boolcell');\n }\n if (!args.columnObject.editType) {\n args.cell.classList.add('e-inputbox');\n }\n return form;\n };\n BatchEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n return BatchEditRender;\n}());\nexport { BatchEditRender };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { remove, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { appendChildren } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar DialogEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function DialogEditRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.dialogDestroy, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n DialogEditRender.prototype.setLocaleObj = function () {\n this.l10n = this.serviceLocator.getService('localization');\n };\n DialogEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.createDialog = function (elements, args) {\n var gObj = this.parent;\n this.dialog = this.parent.createElement('div', { id: gObj.element.id + '_dialogEdit_wrapper', styles: 'width: auto' });\n gObj.element.appendChild(this.dialog);\n this.setLocaleObj();\n var position = this.parent.element.getBoundingClientRect().height < 400 ?\n { X: 'center', Y: 'top' } : { X: 'center', Y: 'center' };\n this.dialogObj = args.dialog = new Dialog({\n header: this.isEdit ? this.l10n.getConstant('EditFormTitle') + args.primaryKeyValue[0] :\n this.l10n.getConstant('AddFormTitle'), isModal: true, visible: true, cssClass: 'e-edit-dialog',\n content: this.getEditElement(elements, args),\n showCloseIcon: true,\n allowDragging: true,\n position: position,\n close: this.dialogClose.bind(this),\n closeOnEscape: true, width: gObj.editSettings.template ? 'auto' : '330px',\n target: 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 };\n DialogEditRender.prototype.btnClick = function (e) {\n if (this.l10n.getConstant('CancelButton').toLowerCase() === e.target.innerText.trim().toLowerCase()) {\n this.dialogClose();\n }\n else {\n this.parent.endEdit();\n }\n };\n DialogEditRender.prototype.dialogClose = function () {\n this.parent.closeEdit();\n this.destroy();\n };\n DialogEditRender.prototype.destroy = function (args) {\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.parent.notify(events.toolbarRefresh, {});\n if (this.dialog && !this.dialogObj.isDestroyed) {\n this.dialogObj.destroy();\n remove(this.dialog);\n }\n };\n DialogEditRender.prototype.getEditElement = function (elements, args) {\n var gObj = this.parent;\n var div = this.parent.createElement('div', { className: this.isEdit ? 'e-editedrow' : 'e-insertedrow' });\n var form = args.form =\n this.parent.createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n if (this.parent.editSettings.template) {\n var dummyData = extend({}, args.rowData, { isAdd: !this.isEdit }, true);\n appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate'));\n div.appendChild(form);\n return div;\n }\n var table = this.parent.createElement('table', { className: 'e-table', attrs: { cellspacing: '6px' } });\n var tbody = this.parent.createElement('tbody');\n var cols = gObj.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (!cols[i].visible || cols[i].commands || cols[i].commandsTemplate) {\n continue;\n }\n var tr = this.parent.createElement('tr');\n var dataCell = this.parent.createElement('td', {\n className: 'e-rowcell', attrs: {\n style: 'text-align:' + (this.parent.enableRtl ? 'right' : 'left') + ';width:190px'\n }\n });\n var label = this.parent.createElement('label', { innerHTML: cols[i].field });\n elements[cols[i].uid].classList.remove('e-input');\n dataCell.appendChild(elements[cols[i].uid]);\n tr.appendChild(dataCell);\n tbody.appendChild(tr);\n }\n table.appendChild(tbody);\n form.appendChild(table);\n div.appendChild(form);\n return div;\n };\n DialogEditRender.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.dialogDestroy, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return DialogEditRender;\n}());\nexport { DialogEditRender };\n","import { isNullOrUndefined, closest, extend } from '@syncfusion/ej2-base';\nimport { InlineEditRender } from './inline-edit-renderer';\nimport { BatchEditRender } from './batch-edit-renderer';\nimport { DialogEditRender } from './dialog-edit-renderer';\nimport { attributes, classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { getComplexFieldID, getObject, appendChildren } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar EditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function EditRender(parent, serviceLocator) {\n //Internal variables \n this.editType = {\n 'Inline': InlineEditRender,\n 'Normal': InlineEditRender, 'Batch': BatchEditRender, 'Dialog': DialogEditRender\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = new this.editType[this.parent.editSettings.mode](parent, serviceLocator);\n this.focus = serviceLocator.getService('focus');\n }\n EditRender.prototype.addNew = function (args) {\n this.renderer.addNew(this.getEditElements(args), args);\n this.convertWidget(args);\n };\n EditRender.prototype.update = function (args) {\n this.renderer.update(this.getEditElements(args), args);\n this.convertWidget(args);\n };\n EditRender.prototype.convertWidget = function (args) {\n var gObj = this.parent;\n var isFocused;\n var cell;\n var value;\n var fForm;\n var frzCols = gObj.getFrozenColumns();\n var form = gObj.element.querySelector('.e-gridform');\n if (frzCols && gObj.editSettings.mode === 'Normal') {\n var rowIndex = parseInt(args.row.getAttribute('aria-rowindex'), 10);\n if (gObj.frozenRows && (args.requestType === 'add' || rowIndex < gObj.frozenRows)) {\n fForm = gObj.element.querySelector('.e-movableheader').querySelector('.e-gridform');\n }\n else {\n fForm = gObj.element.querySelector('.e-movablecontent').querySelector('.e-gridform');\n }\n }\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n if (this.parent.editSettings.template) {\n var cellArgs = extend({}, args);\n cellArgs.element = form.querySelector('[name=' + getComplexFieldID(col.field) + ']');\n if (isNullOrUndefined(cellArgs.element) && frzCols) {\n cellArgs.element = fForm.querySelector('[name=' + getComplexFieldID(col.field) + ']');\n }\n if (typeof col.edit.write === 'string') {\n getObject(col.edit.write, window)(cellArgs);\n }\n else {\n col.edit.write(cellArgs);\n }\n continue;\n }\n if (!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 = getObject(temp, window);\n temp({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getObject(col.field, args.foreignKeyData)\n });\n }\n else {\n col.edit.write({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getObject(col.field, args.foreignKeyData)\n });\n }\n if (!isFocused && !cell.getAttribute('disabled')) {\n this.focusElement(cell, args.type);\n isFocused = true;\n }\n }\n }\n };\n EditRender.prototype.focusElement = function (elem, type) {\n var chkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(chkBox)) {\n chkBox.nextElementSibling.classList.add('e-focus');\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.focus.onClick({ target: closest(elem, 'td') }, true);\n }\n else {\n elem.focus();\n }\n if (elem.classList.contains('e-defaultcell')) {\n elem.setSelectionRange(elem.value.length, elem.value.length);\n }\n };\n EditRender.prototype.getEditElements = function (args) {\n var gObj = this.parent;\n var elements = {};\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n if (this.parent.editSettings.template) {\n return {};\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n var col = cols[i];\n if (!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 (col.editTemplate) {\n input = this.parent.createElement('span', { attrs: { 'e-mappinguid': col.uid } });\n appendChildren(input, col.getEditTemplate()(args.rowData, this.parent, 'editTemplate'));\n }\n else {\n if (typeof temp === 'string') {\n temp = getObject(temp, window);\n input = temp(tArgs);\n }\n else {\n input = col.edit.create(tArgs);\n }\n if (typeof input === 'string') {\n var div = this.parent.createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n var isInput = input.tagName !== 'input' && input.querySelectorAll('input').length;\n var complexFieldName = getComplexFieldID(col.field);\n attributes(isInput ? input.querySelector('input') : input, {\n name: complexFieldName, 'e-mappinguid': col.uid,\n id: gObj.element.id + complexFieldName\n });\n classList(input, ['e-input', 'e-field'], []);\n if (col.textAlign === 'Right') {\n input.classList.add('e-ralign');\n }\n if ((col.isPrimaryKey || col.isIdentity) && args.requestType === 'beginEdit' ||\n (col.isIdentity && args.requestType === 'add')) {\n input.setAttribute('disabled', 'true');\n }\n }\n elements[col.uid] = input;\n }\n return elements;\n };\n EditRender.prototype.destroy = function () {\n this.renderer.removeEventListener();\n };\n return EditRender;\n}());\nexport { EditRender };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { extend } from '@syncfusion/ej2-base';\nimport { isEditable, addRemoveActiveClasses, getComplexFieldID, getObject } from '../base/util';\n/**\n * `BooleanEditCell` is used to handle boolean cell type editing.\n * @hidden\n */\nvar BooleanEditCell = /** @class */ (function () {\n function BooleanEditCell(parent) {\n this.activeClasses = ['e-selectionbackground', 'e-active'];\n this.parent = parent;\n }\n BooleanEditCell.prototype.create = function (args) {\n var col = args.column;\n var classNames = 'e-field e-boolcell';\n if (col.type === 'checkbox') {\n classNames = 'e-field e-boolcell e-edit-checkselect';\n }\n var complexFieldName = getComplexFieldID(args.column.field);\n return this.parent.createElement('input', {\n className: classNames, attrs: {\n type: 'checkbox', value: args.value, 'e-mappinguid': col.uid,\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName\n }\n });\n };\n BooleanEditCell.prototype.read = function (element) {\n return element.checked;\n };\n BooleanEditCell.prototype.write = function (args) {\n var selectChkBox;\n var chkState;\n var isAddRow = args.requestType === 'add' || args.row.classList.contains('e-addedrow');\n if (!isNullOrUndefined(args.row)) {\n selectChkBox = args.row.querySelector('.e-edit-checkselect');\n }\n if (getObject(args.column.field, args.rowData)) {\n chkState = JSON.parse(getObject(args.column.field, args.rowData).toString().toLowerCase());\n }\n if (!isNullOrUndefined(selectChkBox)) {\n this.editType = this.parent.editSettings.mode;\n this.editRow = args.row;\n if (args.requestType !== 'add') {\n var row = this.parent.getRowObjectFromUID(args.row.getAttribute('data-uid'));\n chkState = row ? row.isSelected : false;\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(args.row.querySelectorAll('.e-rowcell')), chkState].concat(this.activeClasses));\n }\n this.obj = new CheckBox(extend({\n label: this.parent.editSettings.mode !== 'Dialog' ? '' : args.column.headerText,\n checked: chkState,\n disabled: !isEditable(args.column, args.requestType, args.element), enableRtl: this.parent.enableRtl,\n change: this.checkBoxChange.bind(this)\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n };\n BooleanEditCell.prototype.checkBoxChange = function (args) {\n if (this.editRow && this.editType !== 'Dialog') {\n var add = false;\n if (!args.checked) {\n this.editRow.removeAttribute('aria-selected');\n }\n else {\n add = true;\n this.editRow.setAttribute('aria-selected', add.toString());\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(this.editRow.querySelectorAll('.e-rowcell')), add].concat(this.activeClasses));\n }\n };\n BooleanEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return BooleanEditCell;\n}());\nexport { BooleanEditCell };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { isEditable, getComplexFieldID, getObject } from '../base/util';\nimport { parentsUntil } from '../base/util';\n/**\n * `DropDownEditCell` is used to handle dropdown cell type editing.\n * @hidden\n */\nvar DropDownEditCell = /** @class */ (function () {\n function DropDownEditCell(parent) {\n //constructor\n this.parent = parent;\n }\n DropDownEditCell.prototype.create = function (args) {\n //create\n var complexFieldName = getComplexFieldID(args.column.field);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName, type: 'text', 'e-mappinguid': args.column.uid,\n }\n });\n };\n DropDownEditCell.prototype.write = function (args) {\n this.column = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n this.obj = new DropDownList(extend({\n dataSource: this.parent.dataSource instanceof DataManager ?\n this.parent.dataSource : new DataManager(this.parent.dataSource),\n query: new Query().select(args.column.field), enabled: isEditable(args.column, args.requestType, args.element),\n fields: { value: args.column.field },\n value: getObject(args.column.field, args.rowData),\n enableRtl: this.parent.enableRtl, actionComplete: this.ddActionComplete.bind(this),\n placeholder: isInline ? '' : args.column.headerText, popupHeight: '200px',\n floatLabelType: isInline ? 'Never' : 'Always', open: this.dropDownOpen.bind(this),\n sortOrder: 'Ascending'\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n /* tslint:disable-next-line:no-any */\n args.element.setAttribute('name', getComplexFieldID(args.column.field));\n };\n DropDownEditCell.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n DropDownEditCell.prototype.ddActionComplete = function (e) {\n e.result = DataUtil.distinct(e.result, this.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 (this.parent.editSettings.mode === 'Dialog' && !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 { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { isEditable, getComplexFieldID, getObject } from '../base/util';\n/**\n * `NumericEditCell` is used to handle numeric cell type editing.\n * @hidden\n */\nvar NumericEditCell = /** @class */ (function () {\n function NumericEditCell(parent) {\n this.parent = parent;\n }\n NumericEditCell.prototype.create = function (args) {\n var complexFieldName = getComplexFieldID(args.column.field);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName, 'e-mappinguid': args.column.uid\n }\n });\n };\n NumericEditCell.prototype.read = function (element) {\n element.blur();\n return element.ej2_instances[0].value;\n };\n NumericEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n this.obj = new NumericTextBox(extend({\n value: parseFloat(getObject(args.column.field, args.rowData)),\n enableRtl: this.parent.enableRtl,\n placeholder: isInline ? '' : args.column.headerText,\n enabled: isEditable(args.column, args.requestType, args.element),\n floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n }, col.edit.params));\n this.obj.appendTo(args.element);\n args.element.setAttribute('name', getComplexFieldID(args.column.field));\n };\n NumericEditCell.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n this.obj.destroy();\n }\n };\n return NumericEditCell;\n}());\nexport { NumericEditCell };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { isEditable, getComplexFieldID } from '../base/util';\n/**\n * `DefaultEditCell` is used to handle default cell type editing.\n * @hidden\n */\nvar DefaultEditCell = /** @class */ (function () {\n function DefaultEditCell(parent) {\n this.parent = parent;\n }\n DefaultEditCell.prototype.create = function (args) {\n var col = args.column;\n var input = this.parent.createElement('input', {\n className: 'e-field e-input e-defaultcell', attrs: {\n type: 'text', value: !isNullOrUndefined(args.value) ? args.value : '', 'e-mappinguid': col.uid,\n id: this.parent.element.id + getComplexFieldID(col.field), name: getComplexFieldID(col.field),\n style: 'text-align:' + col.textAlign,\n }\n });\n return input;\n };\n DefaultEditCell.prototype.read = function (element) {\n return element.value;\n };\n DefaultEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var inputargs = {\n element: args.element, floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n properties: {\n enableRtl: this.parent.enableRtl, enabled: isEditable(args.column, args.requestType, args.element),\n placeholder: isInline ? '' : args.column.headerText\n }\n };\n Input.createInput(inputargs, this.parent.createElement);\n };\n return DefaultEditCell;\n}());\nexport { DefaultEditCell };\n","import { extend, setValue, isUndefined } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { parentsUntil, refreshForeignData, getObject } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\n/**\n * `NormalEdit` module is used to handle normal('inline, dialog, external') editing actions.\n * @hidden\n */\nvar NormalEdit = /** @class */ (function () {\n function NormalEdit(parent, serviceLocator, renderer) {\n this.args = {};\n this.parent = parent;\n this.renderer = renderer;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n NormalEdit.prototype.clickHandler = function (e) {\n var target = e.target;\n var gObj = this.parent;\n if ((((parentsUntil(target, 'e-gridcontent') &&\n parentsUntil(parentsUntil(target, 'e-gridcontent'), 'e-grid').id === gObj.element.id)) || (gObj.frozenRows\n && parentsUntil(target, 'e-headercontent'))) && !parentsUntil(target, 'e-unboundcelldiv')) {\n this.rowIndex = parentsUntil(target, 'e-rowcell') ? parseInt(target.parentElement.getAttribute('aria-rowindex'), 10) : -1;\n if (gObj.isEdit) {\n gObj.editModule.endEdit();\n }\n }\n };\n NormalEdit.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') && this.parent.editSettings.allowEditOnDblClick) {\n this.parent.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n /**\n * The function used to trigger editComplete\n * @return {void}\n * @hidden\n */\n NormalEdit.prototype.editComplete = function (e) {\n this.parent.isEdit = false;\n switch (e.requestType) {\n case 'save':\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n this.parent.selectRow(0);\n }\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'save',\n type: events.actionComplete\n }));\n break;\n case 'delete':\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'delete',\n type: events.actionComplete\n }));\n this.parent.selectRow(this.editRowIndex);\n break;\n }\n };\n NormalEdit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n var primaryKeys = gObj.getPrimaryKeyFieldNames();\n var primaryKeyValues = [];\n this.rowIndex = this.editRowIndex = parseInt(tr.getAttribute('aria-rowindex'), 10);\n this.previousData = gObj.getCurrentViewRecords()[this.rowIndex];\n for (var i = 0; i < primaryKeys.length; i++) {\n primaryKeyValues.push(this.previousData[primaryKeys[i]]);\n }\n this.uid = tr.getAttribute('data-uid');\n var rowObj = gObj.getRowObjectFromUID(this.uid);\n var args = {\n row: tr, primaryKey: primaryKeys, primaryKeyValue: primaryKeyValues, requestType: 'beginEdit',\n rowData: this.previousData, rowIndex: this.rowIndex, type: 'edit', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n gObj.trigger(events.beginEdit, args);\n args.type = 'actionBegin';\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.clearSelection();\n }\n if (gObj.editSettings.mode === 'Dialog') {\n gObj.selectionModule.preventFocus = true;\n args.row.classList.add('e-dlgeditrow');\n }\n this.renderer.update(args);\n this.uid = tr.getAttribute('data-uid');\n gObj.editModule.applyFormValidation();\n args.type = 'actionComplete';\n gObj.trigger(events.actionComplete, args);\n this.args = args;\n if (this.parent.allowTextWrap) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n };\n NormalEdit.prototype.updateRow = function (index, data) {\n var gObj = this.parent;\n var args = {\n requestType: 'save', type: events.actionBegin, data: data, cancel: false,\n previousData: gObj.getCurrentViewRecords()[index]\n };\n gObj.showSpinner();\n gObj.notify(events.updateData, args);\n gObj.refresh();\n };\n NormalEdit.prototype.editFormValidate = function () {\n var gObj = this.parent;\n var form1 = gObj.editModule.formObj.validate();\n var form2 = gObj.editModule.mFormObj ? gObj.editModule.mFormObj.validate() : true;\n return (form1 && form2);\n };\n NormalEdit.prototype.endEdit = function () {\n var gObj = this.parent;\n if (!this.parent.isEdit || !this.editFormValidate()) {\n return;\n }\n var editedData = extend({}, {}, this.previousData, true);\n var args = extend(this.args, {\n requestType: 'save', type: events.actionBegin, data: editedData, cancel: false,\n previousData: this.previousData, selectedRow: gObj.selectedRowIndex, foreignKeyData: {}\n });\n 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 gObj.notify(events.updateData, args);\n }\n else {\n args.action = 'add';\n args.selectedRow = 0;\n args.index = this.addedRowIndex;\n gObj.notify(events.modelChanged, args);\n this.addedRowIndex = null;\n if (args.cancel) {\n return;\n }\n }\n };\n NormalEdit.prototype.destroyElements = function () {\n var gObj = this.parent;\n gObj.editModule.destroyWidgets();\n gObj.editModule.destroyForm();\n this.parent.notify(events.dialogDestroy, {});\n };\n NormalEdit.prototype.editHandler = function (args) {\n var _this = this;\n if (args.promise) {\n args.promise.then(function (e) { return _this.edSucc(e, args); }).catch(function (e) { return _this.edFail(e); });\n }\n else {\n this.editSuccess(args.data, args);\n }\n };\n NormalEdit.prototype.edSucc = function (e, args) {\n this.editSuccess(e, args);\n };\n NormalEdit.prototype.edFail = function (e) {\n this.editFailure(e);\n };\n NormalEdit.prototype.updateCurrentViewData = function (data) {\n this.parent.getCurrentViewRecords()[this.editRowIndex] = data;\n };\n NormalEdit.prototype.requestSuccess = function (args) {\n if (this.parent.editModule.formObj && !this.parent.editModule.formObj.isDestroyed) {\n this.destroyElements();\n this.stopEditStatus();\n if (this.parent.editSettings.mode === 'Dialog' && args.action !== 'add') {\n this.parent.element.querySelector('.e-dlgeditrow').classList.remove('e-dlgeditrow');\n }\n }\n };\n NormalEdit.prototype.editSuccess = function (e, args) {\n if (!isNullOrUndefined(e)) {\n args.data = e;\n }\n this.requestSuccess(args);\n this.parent.trigger(events.beforeDataBound, args);\n args.type = events.actionComplete;\n this.parent.isEdit = false;\n this.refreshRow(args.data);\n this.updateCurrentViewData(args.data);\n this.parent.trigger(events.actionComplete, args);\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n if (this.parent.editSettings.mode !== 'Dialog') {\n this.parent.selectRow(this.rowIndex > -1 ? this.rowIndex : this.editRowIndex);\n }\n }\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.editFailure = function (e) {\n this.parent.trigger(events.actionFailure, e);\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.refreshRow = function (data) {\n var frzCols = this.parent.getFrozenColumns();\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var rowObj = this.parent.getRowObjectFromUID(this.uid);\n if (rowObj) {\n rowObj.changes = data;\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n row.refresh(rowObj, this.parent.getColumns(), true);\n if (frzCols) {\n var uid = void 0;\n var tr = this.parent.element.querySelector('[data-uid=' + rowObj.uid + ']');\n if ((parentsUntil(tr, 'e-frozencontent')) || (parentsUntil(tr, 'e-frozenheader'))) {\n uid = this.parent.getMovableRows()[rowObj.index].getAttribute('data-uid');\n }\n else {\n uid = this.parent.getRows()[rowObj.index].getAttribute('data-uid');\n }\n rowObj = this.parent.getRowObjectFromUID(uid);\n rowObj.changes = data;\n row.refresh(rowObj, this.parent.columns, true);\n }\n }\n };\n NormalEdit.prototype.closeEdit = function () {\n if (!this.parent.isEdit) {\n return;\n }\n var gObj = this.parent;\n var args = extend(this.args, {\n requestType: 'cancel', type: events.actionBegin, data: this.previousData, selectedRow: gObj.selectedRowIndex\n });\n gObj.trigger(events.actionBegin, args);\n if (this.parent.editSettings.mode === 'Dialog') {\n this.parent.notify(events.dialogDestroy, {});\n }\n gObj.isEdit = false;\n this.stopEditStatus();\n args.type = events.actionComplete;\n if (gObj.editSettings.mode !== 'Dialog') {\n this.refreshRow(args.data);\n }\n if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');\n }\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.selectRow(this.rowIndex);\n }\n gObj.trigger(events.actionComplete, args);\n };\n NormalEdit.prototype.addRecord = function (data, index) {\n var _this = this;\n var gObj = this.parent;\n this.addedRowIndex = index = !isNullOrUndefined(index) ? index : 0;\n if (data) {\n gObj.notify(events.modelChanged, {\n requestType: 'save', type: events.actionBegin, data: data, selectedRow: 0, action: 'add', index: index\n });\n return;\n }\n if (gObj.isEdit) {\n return;\n }\n this.previousData = {};\n this.uid = '';\n gObj.columns.forEach(function (col) {\n if (col.field) {\n setValue(col.field, isUndefined(col.defaultValue) ? '' : col.defaultValue, _this.previousData);\n }\n });\n var args = {\n cancel: false, foreignKeyData: {},\n requestType: 'add', data: this.previousData, type: events.actionBegin, index: index,\n rowData: this.previousData\n };\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.clearSelection();\n }\n this.renderer.addNew(args);\n gObj.editModule.applyFormValidation();\n args.type = events.actionComplete;\n args.row = gObj.element.querySelector('.e-addedrow');\n gObj.trigger(events.actionComplete, args);\n this.args = args;\n };\n NormalEdit.prototype.deleteRecord = function (fieldname, data) {\n this.editRowIndex = this.parent.selectedRowIndex;\n if (data) {\n data = (data instanceof Array) ? data : [data];\n var gObj = this.parent;\n var index = 0;\n var dataLen = Object.keys(data).length;\n fieldname = fieldname || this.parent.getPrimaryKeyFieldNames()[0];\n var _loop_1 = function (i) {\n var tmpRecord;\n var contained = gObj.currentViewData.some(function (record) {\n tmpRecord = record;\n return data[i] === getObject(fieldname, record) || data[i] === record;\n });\n data[i] = contained ? tmpRecord : (_a = {}, _a[fieldname] = data[i], _a);\n var _a;\n };\n for (var i = 0; i < dataLen; i++) {\n _loop_1(i);\n }\n }\n this.parent.notify(events.modelChanged, {\n requestType: 'delete', type: events.actionBegin, foreignKeyData: {},\n data: data ? data : this.parent.getSelectedRecords(), tr: this.parent.getSelectedRows(), cancel: false\n });\n };\n NormalEdit.prototype.stopEditStatus = function () {\n var gObj = this.parent;\n var elem = gObj.element.querySelector('.e-addedrow');\n var mElem;\n var editMElem;\n if (gObj.getFrozenColumns()) {\n mElem = gObj.element.querySelectorAll('.e-addedrow')[1];\n editMElem = gObj.element.querySelectorAll('.e-editedrow')[1];\n if (mElem) {\n remove(mElem);\n }\n if (editMElem) {\n editMElem.classList.remove('e-editedrow');\n }\n }\n if (elem) {\n remove(elem);\n }\n elem = gObj.element.querySelector('.e-editedrow');\n if (elem) {\n elem.classList.remove('e-editedrow');\n }\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.crudAction, this.editHandler, this);\n this.parent.on(events.doubleTap, this.dblClickHandler, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.recordAdded, this.requestSuccess, this);\n this.parent.on(events.dblclick, this.dblClickHandler, this);\n this.parent.on(events.deleteComplete, this.editComplete, this);\n this.parent.on(events.saveComplete, this.editComplete, this);\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.editHandler);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.recordAdded, this.requestSuccess);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.deleteComplete, this.editComplete);\n this.parent.off(events.saveComplete, this.editComplete);\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.destroy = function () {\n this.removeEventListener();\n this.renderer.destroy();\n };\n return NormalEdit;\n}());\nexport { NormalEdit };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `InlineEdit` module is used to handle inline editing actions.\n * @hidden\n */\nvar InlineEdit = /** @class */ (function (_super) {\n __extends(InlineEdit, _super);\n function InlineEdit(parent, serviceLocator, renderer) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n InlineEdit.prototype.closeEdit = function () {\n _super.prototype.closeEdit.call(this);\n };\n InlineEdit.prototype.addRecord = function (data, index) {\n _super.prototype.addRecord.call(this, data, index);\n };\n InlineEdit.prototype.endEdit = function () {\n _super.prototype.endEdit.call(this);\n };\n InlineEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n InlineEdit.prototype.deleteRecord = function (fieldname, data) {\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n InlineEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return InlineEdit;\n}(NormalEdit));\nexport { InlineEdit };\n","import { extend, addClass, removeClass, setValue, isUndefined } from '@syncfusion/ej2-base';\nimport { remove, classList } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { parentsUntil, inArray, refreshForeignData, getObject } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { RowModelGenerator } from '../services/row-model-generator';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent, serviceLocator, renderer) {\n this.cellDetails = {};\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = renderer;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n }\n /**\n * @hidden\n */\n BatchEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.dblclick, this.dblClickHandler, this);\n this.parent.on(events.beforeCellFocused, this.onBeforeCellFocused, this);\n this.parent.on(events.cellFocused, this.onCellFocused, this);\n this.dataBoundFunction = this.dataBound.bind(this);\n this.parent.addEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.on(events.doubleTap, this.dblClickHandler, this);\n this.parent.on(events.keyPressed, this.keyDownHandler, this);\n this.parent.on(events.editNextValCell, this.editNextValCell, this);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.beforeCellFocused, this.onBeforeCellFocused);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.keyPressed, this.keyDownHandler);\n this.parent.off(events.editNextValCell, this.editNextValCell);\n };\n BatchEdit.prototype.dataBound = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n BatchEdit.prototype.clickHandler = function (e) {\n if (!parentsUntil(e.target, this.parent.element.id + '_add', true)) {\n if (this.parent.isEdit) {\n this.saveCell();\n this.editNextValCell();\n }\n if (parentsUntil(e.target, 'e-rowcell') && !this.parent.isEdit) {\n this.setCellIdx(e.target);\n }\n }\n };\n BatchEdit.prototype.dblClickHandler = function (e) {\n var target = parentsUntil(e.target, 'e-rowcell');\n var tr = parentsUntil(e.target, 'e-row');\n if (target && tr && !isNaN(parseInt(target.getAttribute('aria-colindex'), 10))\n && !target.parentElement.classList.contains('e-editedrow')) {\n this.editCell(parseInt(tr.getAttribute('aria-rowindex'), 10), this.parent.getColumns()[parseInt(target.getAttribute('aria-colindex'), 10)].field, this.isAddRow(parseInt(tr.getAttribute('aria-rowindex'), 10)));\n }\n };\n BatchEdit.prototype.onBeforeCellFocused = function (e) {\n if (this.parent.isEdit && this.validateFormObj() &&\n (e.byClick || (['tab', 'shiftTab', 'enter', 'shiftEnter'].indexOf(e.keyArgs.action) > -1))) {\n e.cancel = true;\n if (e.byClick) {\n e.clickArgs.preventDefault();\n }\n else {\n e.keyArgs.preventDefault();\n }\n }\n };\n BatchEdit.prototype.onCellFocused = function (e) {\n var frzCols = this.parent.getFrozenColumns();\n var mCont = this.parent.getContent().querySelector('.e-movablecontent');\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader');\n var clear = (!e.container.isContent || !e.container.isDataCell) && !(this.parent.frozenRows && e.container.isHeader);\n if (!e.byKey || clear) {\n return;\n }\n var _a = e.container.indexes, rowIndex = _a[0], cellIndex = _a[1];\n if (frzCols && (mCont.contains(e.element) || (this.parent.frozenRows && mHdr.contains(e.element)))) {\n cellIndex += frzCols;\n }\n if (this.parent.frozenRows && e.container.isContent) {\n rowIndex += this.parent.frozenRows;\n }\n var isEdit = this.parent.isEdit;\n if (!this.parent.element.querySelectorAll('.e-popup-open').length) {\n isEdit = isEdit && !this.validateFormObj();\n switch (e.keyArgs.action) {\n case 'tab':\n case 'shiftTab':\n if (isEdit || this.parent.isLastCellPrimaryKey) {\n this.editCellFromIndex(rowIndex, cellIndex);\n }\n break;\n case 'enter':\n case 'shiftEnter':\n e.keyArgs.preventDefault();\n if (isEdit) {\n this.editCell(rowIndex, this.cellDetails.column.field);\n }\n break;\n case 'f2':\n this.editCellFromIndex(rowIndex, cellIndex);\n this.focus.focus();\n break;\n }\n }\n };\n BatchEdit.prototype.isAddRow = function (index) {\n return this.parent.getDataRows()[index].classList.contains('e-insertedrow');\n };\n BatchEdit.prototype.editCellFromIndex = function (rowIdx, cellIdx) {\n this.cellDetails.rowIndex = rowIdx;\n this.cellDetails.cellIndex = cellIdx;\n this.editCell(rowIdx, this.parent.getColumns()[cellIdx].field, this.isAddRow(rowIdx));\n };\n BatchEdit.prototype.closeEdit = function () {\n var gObj = this.parent;\n var rows = this.parent.getRowsObject();\n if (gObj.frozenColumns && rows.length < this.parent.currentViewData.length * 2) {\n rows.push.apply(rows, this.parent.getMovableRowsObject());\n }\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this.parent);\n var tr;\n var mTr;\n var movObj;\n if (gObj.isEdit) {\n this.saveCell(true);\n }\n this.isAdded = false;\n gObj.clearSelection();\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].isDirty) {\n if (gObj.frozenColumns) {\n movObj = gObj.getMovableRowsObject()[rows[i].index];\n movObj.isDirty = true;\n }\n tr = gObj.getContentTable().querySelector('[data-uid=' + rows[i].uid + ']');\n if (gObj.frozenRows) {\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 || mTr) {\n if (tr && tr.classList.contains('e-insertedrow') || mTr && mTr.classList.contains('e-insertedrow')) {\n if (tr) {\n remove(tr);\n }\n if (mTr && (gObj.frozenColumns || gObj.frozenRows)) {\n remove(mTr);\n }\n this.removeRowObjectFromUID(rows[i].uid);\n i--;\n }\n else {\n refreshForeignData(rows[i], this.parent.getForeignKeyColumns(), rows[i].data);\n delete rows[i].changes;\n rows[i].isDirty = false;\n var ftr = mTr ? mTr : tr;\n classList(ftr, [], ['e-hiddenrow', 'e-updatedtd']);\n rowRenderer.refresh(rows[i], gObj.getColumns(), false);\n if (this.parent.aggregates.length > 0) {\n var type = 'type';\n var editType = [];\n editType[type] = 'cancel';\n this.parent.notify(events.refreshFooterRenderer, editType);\n if (this.parent.groupSettings.columns.length > 0) {\n this.parent.notify(events.groupAggregates, editType);\n }\n }\n }\n }\n }\n }\n if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');\n }\n var args = {\n requestType: 'batchCancel', rows: this.parent.getRowsObject()\n };\n gObj.notify(events.batchCancel, {\n rows: this.parent.getRowsObject().length ? this.parent.getRowsObject() :\n [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })]\n });\n gObj.selectRow(this.cellDetails.rowIndex);\n this.refreshRowIdx();\n gObj.notify(events.toolbarRefresh, {});\n this.parent.notify(events.tooltipDestroy, {});\n args = { requestType: 'batchCancel', rows: this.parent.getRowsObject() };\n gObj.trigger(events.batchCancel, args);\n if (gObj.frozenColumns) {\n rows.splice(this.parent.getMovableRowsObject().length, rows.length);\n }\n };\n BatchEdit.prototype.deleteRecord = function (fieldname, data) {\n this.saveCell();\n if (this.validateFormObj()) {\n this.saveCell(true);\n }\n this.isAdded = false;\n this.bulkDelete(fieldname, data);\n if (this.parent.aggregates.length > 0) {\n this.parent.notify(events.refreshFooterRenderer, {});\n if (this.parent.groupSettings.columns.length > 0) {\n this.parent.notify(events.groupAggregates, {});\n }\n }\n };\n BatchEdit.prototype.addRecord = function (data) {\n this.bulkAddRow(data);\n };\n BatchEdit.prototype.endEdit = function (data) {\n if (this.parent.isEdit && this.validateFormObj()) {\n return;\n }\n this.batchSave();\n };\n BatchEdit.prototype.validateFormObj = function () {\n return this.parent.editModule.formObj && !this.parent.editModule.formObj.validate();\n };\n BatchEdit.prototype.batchSave = function () {\n var gObj = this.parent;\n this.saveCell();\n if (gObj.isEdit || this.editNextValCell() || gObj.isEdit) {\n return;\n }\n var changes = this.getBatchChanges();\n var original = {\n changedRecords: this.parent.getRowsObject()\n .filter(function (row) { return row.isDirty && ['add', 'delete'].indexOf(row.edit) === -1; })\n .map(function (row) { return row.data; })\n };\n var args = { batchChanges: changes, cancel: false };\n gObj.trigger(events.beforeBatchSave, args);\n if (args.cancel) {\n return;\n }\n gObj.showSpinner();\n gObj.notify(events.bulkSave, { changes: changes, original: original });\n };\n BatchEdit.prototype.getBatchChanges = function () {\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n var rows = this.parent.getRowsObject();\n var mRows = this.parent.getMovableRowsObject();\n var frzCols = this.parent.getFrozenColumns();\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (frzCols) {\n this.mergeBatchChanges(row, mRows[row.index], frzCols);\n }\n if (row.isDirty) {\n switch (row.edit) {\n case 'add':\n changes.addedRecords.push(row.changes);\n break;\n case 'delete':\n changes.deletedRecords.push(row.data);\n break;\n default:\n changes.changedRecords.push(row.changes);\n }\n }\n }\n return changes;\n };\n BatchEdit.prototype.mergeBatchChanges = function (row, mRow, frzCols) {\n if (row.isDirty) {\n if (mRow.isDirty) {\n var i_1 = 0;\n Object.keys(row.changes).forEach(function (key) {\n if (i_1 >= frzCols) {\n row.changes[key] = mRow.changes[key];\n }\n i_1++;\n });\n }\n }\n else if (mRow.isDirty) {\n row.changes = mRow.changes;\n row.isDirty = mRow.isDirty;\n }\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.removeRowObjectFromUID = function (uid) {\n var rows = this.parent.getRowsObject();\n var i = 0;\n for (var len = rows.length; i < len; i++) {\n if (rows[i].uid === uid) {\n break;\n }\n }\n rows.splice(i, 1);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.addRowObject = function (row) {\n this.parent.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] = this.parent.createElement('tr', { className: 'emptynonmv' });\n }\n }\n }\n if (frzCols) {\n mRows = mRows.concat([].slice.call(this.parent.getContentTable().querySelector('tbody').children));\n nonMovableRows = nonMovableRows.concat([].slice.call(this.parent.element.querySelector('.e-movablecontent').querySelector('tbody').children));\n }\n rows = rows.concat([].slice.call(this.parent.getContentTable().querySelector('tbody').children));\n for (var i = 0, j = 0, len = rows.length; i < len; i++) {\n if (rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-hiddenrow')) {\n rows[i].setAttribute('aria-rowindex', j.toString());\n if (frzCols) {\n mRows[i].setAttribute('aria-rowindex', j.toString());\n if (nonMovableRows[i].classList.contains('e-row')) {\n nonMovableRows[i].setAttribute('aria-rowindex', j.toString());\n }\n }\n j++;\n }\n else {\n rows[i].removeAttribute('aria-rowindex');\n if (frzCols) {\n mRows[i].removeAttribute('aria-rowindex');\n }\n }\n }\n };\n BatchEdit.prototype.getIndexFromData = function (data) {\n return inArray(data, this.parent.getCurrentViewRecords());\n };\n BatchEdit.prototype.bulkAddRow = function (data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowAdding) {\n return;\n }\n if (gObj.isEdit) {\n this.saveCell();\n this.parent.notify(events.editNextValCell, {});\n }\n if (gObj.isEdit) {\n return;\n }\n var defaultData = data ? data : this.getDefaultData();\n var args = {\n defaultData: defaultData,\n primaryKey: gObj.getPrimaryKeyFieldNames(),\n cancel: false\n };\n gObj.trigger(events.beforeBatchAdd, args);\n if (args.cancel) {\n return;\n }\n this.isAdded = true;\n gObj.clearSelection();\n var mTr;\n var mTbody;\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var model = new RowModelGenerator(this.parent);\n var modelData = model.generateRows([args.defaultData]);\n var tr = row.render(modelData[0], gObj.getColumns());\n var col;\n var index;\n for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n tr.insertBefore(this.parent.createElement('td', { className: 'e-indentcell' }), tr.firstChild);\n modelData[0].cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n var tbody = gObj.getContentTable().querySelector('tbody');\n tr.classList.add('e-insertedrow');\n if (tbody.querySelector('.e-emptyrow')) {\n tbody.querySelector('.e-emptyrow').classList.add('e-hide');\n }\n if (gObj.getFrozenColumns()) {\n mTr = this.renderMovable(tr);\n if (gObj.frozenRows) {\n mTbody = gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n }\n else {\n mTbody = gObj.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n }\n mTbody.insertBefore(mTr, mTbody.firstChild);\n addClass(mTr.querySelectorAll('.e-rowcell'), ['e-updatedtd']);\n if (this.parent.height === 'auto') {\n this.parent.notify(events.frozenHeight, {});\n }\n }\n if (gObj.frozenRows) {\n tbody = gObj.getHeaderContent().querySelector('tbody');\n }\n 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, true);\n modelData[0].edit = 'add';\n this.addRowObject(modelData[0]);\n this.refreshRowIdx();\n this.focus.forgetPrevious();\n gObj.notify(events.batchAdd, { rows: this.parent.getRowsObject() });\n 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 if (this.parent.aggregates.length > 0 && data) {\n this.parent.notify(events.refreshFooterRenderer, {});\n }\n var args1 = {\n defaultData: args.defaultData, row: tr,\n columnObject: col, columnIndex: index, primaryKey: args.primaryKey, cell: tr.cells[index]\n };\n gObj.trigger(events.batchAdd, args1);\n };\n BatchEdit.prototype.renderMovable = function (ele) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < this.parent.frozenColumns; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = this.parent.frozenColumns, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n };\n BatchEdit.prototype.findNextEditableCell = function (columnIndex, isAdd, isValOnly) {\n var cols = this.parent.getColumns();\n var endIndex = cols.length;\n var validation;\n for (var i = columnIndex; i < endIndex; i++) {\n validation = isValOnly ? isNullOrUndefined(cols[i].validationRules) : false;\n if (!isAdd && this.checkNPCell(cols[i])) {\n return i;\n }\n else if (isAdd && !cols[i].template && cols[i].visible && cols[i].allowEditing &&\n !(cols[i].isIdentity && cols[i].isPrimaryKey) && !validation) {\n return i;\n }\n }\n return -1;\n };\n BatchEdit.prototype.checkNPCell = function (col) {\n return !col.template && col.visible && !col.isPrimaryKey && !col.isIdentity && col.allowEditing;\n };\n BatchEdit.prototype.getDefaultData = function () {\n var gObj = this.parent;\n var data = {};\n var dValues = { 'number': 0, 'string': null, 'boolean': false, 'date': null, 'datetime': null };\n for (var _i = 0, _a = gObj.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.field) {\n setValue(col.field, col.defaultValue ? col.defaultValue : dValues[col.type], data);\n }\n }\n return data;\n };\n BatchEdit.prototype.setCellIdx = function (target) {\n var gLen = 0;\n if (this.parent.allowGrouping) {\n gLen = this.parent.groupSettings.columns.length;\n }\n this.cellDetails.cellIndex = target.cellIndex - gLen;\n this.cellDetails.rowIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n };\n BatchEdit.prototype.editCell = function (index, field, isAdd) {\n var gObj = this.parent;\n var col = gObj.getColumnByField(field);\n var keys = gObj.getPrimaryKeyFieldNames();\n if (gObj.editSettings.allowEditing && col.allowEditing) {\n if (gObj.isEdit && !(this.cellDetails.column.field === field\n && (this.cellDetails.rowIndex === index && this.parent.getDataRows().length - 1 !== index))) {\n this.saveCell();\n if (this.cellDetails.rowIndex === index && this.cellDetails.column.field === field) {\n return;\n }\n }\n if (gObj.isEdit) {\n return;\n }\n var row = void 0;\n var rowData = void 0;\n var mRowData = void 0;\n var colIdx = gObj.getColumnIndexByField(field);\n var frzCols = gObj.getFrozenColumns();\n if (frzCols && colIdx >= frzCols) {\n row = gObj.getMovableDataRows()[index];\n mRowData = this.parent.getRowObjectFromUID(this.parent.getMovableDataRows()[index].getAttribute('data-uid'));\n rowData = mRowData.changes ? extend({}, {}, mRowData.changes, true) : extend({}, {}, this.getDataByIndex(index), true);\n }\n else {\n row = gObj.getDataRows()[index];\n rowData = extend({}, {}, this.getDataByIndex(index), true);\n }\n if ((keys[0] === col.field && !row.classList.contains('e-insertedrow')) || col.columns ||\n (col.isPrimaryKey && col.isIdentity)) {\n this.parent.isLastCellPrimaryKey = true;\n return;\n }\n this.parent.isLastCellPrimaryKey = false;\n var rowObj = gObj.getRowObjectFromUID(row.getAttribute('data-uid'));\n var cells = [].slice.apply(row.cells);\n var args = {\n cell: cells[this.getColIndex(cells, this.getCellIdx(col.uid))], row: row,\n columnName: col.field, columnObject: col, isForeignKey: !isNullOrUndefined(col.foreignKeyValue),\n primaryKey: keys, rowData: rowData,\n validationRules: extend({}, col.validationRules ? col.validationRules : {}),\n value: getObject(col.field, rowData),\n type: !isAdd ? 'edit' : 'add', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n if (!args.cell) {\n return;\n }\n gObj.trigger(events.cellEdit, args);\n if (args.cancel) {\n return;\n }\n this.cellDetails = {\n rowData: rowData, column: col, value: args.value, isForeignKey: args.isForeignKey, rowIndex: index,\n cellIndex: parseInt(args.cell.getAttribute('aria-colindex'), 10),\n foreignKeyData: args.foreignKeyData\n };\n if (args.cell.classList.contains('e-updatedtd')) {\n this.isColored = true;\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n if (!gObj.isCheckBoxSelection || !gObj.isPersistSelection) {\n gObj.selectRow(this.cellDetails.rowIndex, true);\n }\n this.renderer.update(args);\n this.form = gObj.element.querySelector('#' + gObj.element.id + 'EditForm');\n gObj.editModule.applyFormValidation([col]);\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n BatchEdit.prototype.updateCell = function (rowIndex, field, value) {\n var col = this.parent.getColumnByField(field);\n if (col && !col.isPrimaryKey) {\n var td = this.parent.getDataRows()[rowIndex].cells[this.parent.getColumnIndexByField(field)];\n var rowObj = this.parent.getRowObjectFromUID(td.parentElement.getAttribute('data-uid'));\n this.refreshTD(td, col, rowObj, value);\n this.parent.trigger(events.queryCellInfo, {\n cell: td, column: col, data: rowObj.changes\n });\n }\n };\n BatchEdit.prototype.setChanges = function (rowObj, field, value) {\n if (!rowObj.changes) {\n rowObj.changes = extend({}, {}, rowObj.data, true);\n }\n setValue(field, isUndefined(value) ? null : value, rowObj.changes);\n if (rowObj.data[field] !== value) {\n rowObj.isDirty = true;\n }\n };\n BatchEdit.prototype.updateRow = function (index, data) {\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var col = keys_1[_i];\n this.updateCell(index, col, data[col]);\n }\n };\n BatchEdit.prototype.getCellIdx = function (uid) {\n var cIdx = this.parent.getColumnIndexByUid(uid) + this.parent.groupSettings.columns.length;\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n return cIdx;\n };\n BatchEdit.prototype.refreshTD = function (td, column, rowObj, value) {\n var cell = new CellRenderer(this.parent, this.serviceLocator);\n var rowcell;\n this.setChanges(rowObj, column.field, value);\n var frzCols = this.parent.getFrozenColumns();\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n if (frzCols && this.getCellIdx(column.uid) >= frzCols && this.parent.getColumns().length === rowObj.cells.length) {\n rowcell = rowObj.cells.slice(frzCols, rowObj.cells.length);\n }\n else {\n rowcell = rowObj.cells;\n }\n cell.refreshTD(td, rowcell[this.getCellIdx(column.uid) - (this.getCellIdx(column.uid) >= frzCols ? frzCols : 0)], rowObj.changes, { 'index': this.getCellIdx(column.uid) });\n td.classList.add('e-updatedtd');\n this.parent.notify(events.toolbarRefresh, {});\n };\n BatchEdit.prototype.getColIndex = function (cells, index) {\n var cIdx = 0;\n if (this.parent.allowGrouping && this.parent.groupSettings.columns) {\n cIdx = this.parent.groupSettings.columns.length;\n }\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[m].getAttribute('aria-colindex'), 10);\n if (colIndex === index - cIdx) {\n return m;\n }\n }\n return -1;\n };\n BatchEdit.prototype.editNextValCell = function () {\n var gObj = this.parent;\n if (this.isAdded && !gObj.isEdit) {\n for (var i = this.cellDetails.cellIndex; i < gObj.getColumns().length; i++) {\n if (gObj.isEdit) {\n return;\n }\n var index = this.findNextEditableCell(this.cellDetails.cellIndex + 1, true, true);\n var col = gObj.getColumns()[index];\n if (col) {\n this.editCell(0, col.field, true);\n this.saveCell();\n }\n }\n if (!gObj.isEdit) {\n this.isAdded = false;\n }\n }\n };\n BatchEdit.prototype.saveCell = function (isForceSave) {\n var gObj = this.parent;\n if (!isForceSave && (!gObj.isEdit || this.validateFormObj())) {\n return;\n }\n var tr = parentsUntil(this.form, 'e-row');\n var column = this.cellDetails.column;\n var editedData = gObj.editModule.getCurrentEditedData(this.form, {});\n var cloneEditedData = extend({}, editedData);\n editedData = extend({}, editedData, this.cellDetails.rowData);\n var value = getObject(column.field, cloneEditedData);\n setValue(column.field, isUndefined(value) ? null : value, editedData);\n var args = {\n columnName: column.field,\n value: getObject(column.field, editedData),\n rowData: this.cellDetails.rowData,\n previousValue: this.cellDetails.value,\n columnObject: column,\n cell: this.form.parentElement,\n isForeignKey: this.cellDetails.isForeignKey, cancel: false\n };\n if (!isForceSave) {\n gObj.trigger(events.cellSave, args);\n }\n if (args.cancel) {\n return;\n }\n gObj.editModule.destroyForm();\n gObj.isEdit = false;\n gObj.editModule.destroyWidgets([column]);\n this.parent.notify(events.tooltipDestroy, {});\n this.refreshTD(args.cell, column, gObj.getRowObjectFromUID(tr.getAttribute('data-uid')), args.value);\n removeClass([tr], ['e-editedrow', 'e-batchrow']);\n removeClass([args.cell], ['e-editedbatchcell', 'e-boolcell']);\n if (!isNullOrUndefined(args.value) && args.value.toString() ===\n (!isNullOrUndefined(this.cellDetails.value) ? this.cellDetails.value : '').toString() && !this.isColored\n || (isNullOrUndefined(args.value) && isNullOrUndefined(this.cellDetails.value) &&\n !args.cell.parentElement.classList.contains('e-insertedrow'))) {\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.trigger(events.cellSaved, args);\n gObj.notify(events.toolbarRefresh, {});\n this.isColored = false;\n if (this.parent.aggregates.length > 0) {\n this.parent.notify(events.refreshFooterRenderer, {});\n if (this.parent.groupSettings.columns.length > 0 && !this.isAddRow(this.cellDetails.rowIndex)) {\n this.parent.notify(events.groupAggregates, {});\n }\n }\n };\n BatchEdit.prototype.getDataByIndex = function (index) {\n var row = this.parent.getRowObjectFromUID(this.parent.getDataRows()[index].getAttribute('data-uid'));\n return row.changes ? row.changes : row.data;\n };\n BatchEdit.prototype.keyDownHandler = function (e) {\n if (e.action === 'tab' && this.parent.isEdit) {\n var rowcell = parentsUntil(e.target, 'e-rowcell');\n if (rowcell) {\n var cell = rowcell.querySelector('.e-field');\n if (cell) {\n var visibleColumns = this.parent.getVisibleColumns();\n if (visibleColumns[visibleColumns.length - 1].field === cell.getAttribute('name')) {\n this.saveCell();\n }\n }\n }\n }\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.addCancelWhilePaging = function () {\n if (this.validateFormObj()) {\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.isColored = false;\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `DialogEdit` module is used to handle dialog editing actions.\n * @hidden\n */\nvar DialogEdit = /** @class */ (function (_super) {\n __extends(DialogEdit, _super);\n function DialogEdit(parent, serviceLocator, renderer) {\n var _this = \n //constructor\n _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n DialogEdit.prototype.closeEdit = function () {\n //closeEdit\n _super.prototype.closeEdit.call(this);\n };\n DialogEdit.prototype.addRecord = function (data, index) {\n //addRecord\n _super.prototype.addRecord.call(this, data, index);\n };\n DialogEdit.prototype.endEdit = function () {\n //endEdit\n _super.prototype.endEdit.call(this);\n };\n DialogEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n DialogEdit.prototype.deleteRecord = function (fieldname, data) {\n //deleteRecord\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n DialogEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return DialogEdit;\n}(NormalEdit));\nexport { DialogEdit };\n","/**\n * `TemplateEditCell` is used to handle template cell.\n * @hidden\n */\nvar TemplateEditCell = /** @class */ (function () {\n function TemplateEditCell(parent) {\n this.parent = parent;\n }\n TemplateEditCell.prototype.read = function (element, value) {\n return value;\n };\n TemplateEditCell.prototype.write = function () {\n //\n };\n TemplateEditCell.prototype.destroy = function () {\n //\n };\n return TemplateEditCell;\n}());\nexport { TemplateEditCell };\n","import { classList, addClass, removeClass, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { EventHandler, closest } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { Dialog, calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { createCboxWithWrap, toogleCheckbox, parentsUntil } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `ColumnChooser` module is used to show or hide columns dynamically.\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for the Grid ColumnChooser module\n * @hidden\n */\n function ColumnChooser(parent, serviceLocator) {\n this.showColumn = [];\n this.hideColumn = [];\n this.isDlgOpen = false;\n this.dlghide = false;\n this.initialOpenDlg = true;\n this.stateChangeColumns = [];\n this.isInitialOpen = false;\n this.isCustomizeOpenCC = false;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n this.cBoxTrue = createCheckBox(this.parent.createElement, true, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(this.parent.createElement, true, { checked: false, label: ' ' });\n this.cBoxTrue.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden e-cc e-cc-chbox', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden e-cc e-cc-chbox', attrs: { 'type': 'checkbox' }\n }), this.cBoxFalse.firstChild);\n this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n if (this.parent.enableRtl) {\n addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n }\n }\n ColumnChooser.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.removeEventListener();\n this.unWireEvents();\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.element && !this.dlgObj.isDestroyed) {\n this.dlgObj.destroy();\n }\n };\n ColumnChooser.prototype.rtlUpdate = function () {\n if (this.parent.enableRtl) {\n addClass(this.innerDiv.querySelectorAll('.e-checkbox-wrapper'), ['e-rtl']);\n }\n else {\n removeClass(this.innerDiv.querySelectorAll('.e-checkbox-wrapper'), ['e-rtl']);\n }\n };\n /**\n * @hidden\n */\n ColumnChooser.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.uiUpdate, this.enableAfterRenderEle, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.addEventListener(events.dataBound, this.hideDialog.bind(this));\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.rtlUpdated, this.rtlUpdate, this);\n };\n /**\n * @hidden\n */\n ColumnChooser.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.uiUpdate, this.enableAfterRenderEle);\n this.parent.off(events.rtlUpdated, this.rtlUpdate);\n };\n ColumnChooser.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderDlgContent();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n };\n ColumnChooser.prototype.clickHandler = function (e) {\n var targetElement = e.target;\n if (!this.isCustomizeOpenCC) {\n if (!isNullOrUndefined(closest(targetElement, '.e-cc')) || !isNullOrUndefined(closest(targetElement, '.e-cc-toolbar'))) {\n if (targetElement.classList.contains('e-columnchooser-btn') || targetElement.classList.contains('e-cc-toolbar')) {\n if ((this.initialOpenDlg && this.dlgObj.visible) || !this.isDlgOpen) {\n this.isDlgOpen = true;\n return;\n }\n }\n else if (targetElement.classList.contains('e-cc-cancel')) {\n targetElement.parentElement.querySelector('.e-ccsearch').value = '';\n this.columnChooserSearch('');\n this.removeCancelIcon();\n }\n }\n else {\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.visible && !targetElement.classList.contains('e-toolbar-items')) {\n this.dlgObj.hide();\n this.clearActions();\n this.refreshCheckboxState();\n // this.unWireEvents();\n this.isDlgOpen = false;\n }\n }\n }\n this.rtlUpdate();\n };\n ColumnChooser.prototype.hideDialog = function () {\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.visible) {\n this.dlgObj.hide();\n // this.unWireEvents();\n this.isDlgOpen = false;\n }\n };\n /**\n * To render columnChooser when showColumnChooser enabled.\n * @return {void}\n * @hidden\n */\n ColumnChooser.prototype.renderColumnChooser = function (x, y, target) {\n if (!this.dlgObj.visible) {\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 this.rtlUpdate();\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @return {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n this.isCustomizeOpenCC = true;\n if (this.dlgObj.visible) {\n this.hideDialog();\n return;\n }\n if (!this.isInitialOpen) {\n this.dlgObj.content = this.renderChooserList();\n }\n else {\n this.refreshCheckboxState();\n }\n this.dlgObj.dataBind();\n this.dlgObj.position = { X: 'center', Y: 'center' };\n if (isNullOrUndefined(X)) {\n this.dlgObj.position = { X: 'center', Y: 'center' };\n this.dlgObj.refreshPosition();\n }\n else {\n this.dlgObj.element.style.top = '';\n this.dlgObj.element.style.left = '';\n this.dlgObj.element.style.top = Y + 'px';\n this.dlgObj.element.style.left = X + 'px';\n }\n this.dlgObj.beforeOpen = this.customDialogOpen.bind(this);\n this.dlgObj.show();\n this.isInitialOpen = true;\n this.dlgObj.beforeClose = this.customDialogClose.bind(this);\n };\n ColumnChooser.prototype.enableAfterRenderEle = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n ColumnChooser.prototype.customDialogOpen = function () {\n var searchElement = this.dlgObj.content.querySelector('input.e-ccsearch');\n EventHandler.add(searchElement, 'keyup', this.columnChooserManualSearch, this);\n };\n ColumnChooser.prototype.customDialogClose = function () {\n var searchElement = this.dlgObj.content.querySelector('input.e-ccsearch');\n EventHandler.remove(searchElement, 'keyup', this.columnChooserManualSearch);\n };\n ColumnChooser.prototype.getColumns = function () {\n var columns = this.parent.getColumns().filter(function (column) { return (column.type !== 'checkbox'\n && column.showInColumnChooser === true) || (column.type === 'checkbox' && column.field !== undefined); });\n return columns;\n };\n ColumnChooser.prototype.renderDlgContent = function () {\n var y;\n this.dlgDiv = this.parent.createElement('div', { className: 'e-ccdlg e-cc', id: this.parent.element.id + '_ccdlg' });\n this.parent.element.appendChild(this.dlgDiv);\n var xpos = this.parent.element.getBoundingClientRect().width - 250;\n var dialoPos = this.parent.enableRtl ? 'left' : 'right';\n var tarElement = this.parent.element.querySelector('.e-ccdiv');\n if (!isNullOrUndefined(tarElement)) {\n y = tarElement.getBoundingClientRect().top;\n }\n var pos = { X: null, Y: null };\n this.dlgObj = new Dialog({\n header: this.l10n.getConstant('ChooseColumns'),\n showCloseIcon: false,\n closeOnEscape: false,\n locale: this.parent.locale,\n visible: false,\n enableRtl: this.parent.enableRtl,\n target: document.getElementById(this.parent.element.id),\n buttons: [{\n click: this.confirmDlgBtnClick.bind(this),\n buttonModel: {\n content: this.l10n.getConstant('OKButton'), isPrimary: true,\n cssClass: 'e-cc e-cc_okbtn',\n }\n },\n {\n click: this.clearActions.bind(this),\n buttonModel: { cssClass: 'e-flat e-cc e-cc-cnbtn', content: this.l10n.getConstant('CancelButton') }\n }],\n content: this.renderChooserList(),\n width: 250,\n cssClass: 'e-cc',\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n this.wireEvents();\n };\n ColumnChooser.prototype.renderChooserList = function () {\n this.mainDiv = this.parent.createElement('div', { className: 'e-main-div e-cc' });\n var searchDiv = this.parent.createElement('div', { className: 'e-cc-searchdiv e-cc e-input-group' });\n var ccsearchele = this.parent.createElement('input', {\n className: 'e-ccsearch e-cc e-input',\n attrs: { placeholder: this.l10n.getConstant('Search') }\n });\n var ccsearchicon = this.parent.createElement('span', { className: 'e-ccsearch-icon e-icons e-cc e-input-group-icon',\n attrs: { title: this.l10n.getConstant('Search') } });\n var conDiv = this.parent.createElement('div', { className: 'e-cc-contentdiv' });\n this.innerDiv = this.parent.createElement('div', { className: 'e-innerdiv e-cc' });\n searchDiv.appendChild(ccsearchele);\n searchDiv.appendChild(ccsearchicon);\n this.searchBoxObj = new SearchBox(ccsearchele);\n var innerDivContent = this.refreshCheckboxList(this.parent.getColumns());\n this.innerDiv.appendChild(innerDivContent);\n conDiv.appendChild(this.innerDiv);\n this.mainDiv.appendChild(searchDiv);\n this.mainDiv.appendChild(conDiv);\n return this.mainDiv;\n };\n ColumnChooser.prototype.confirmDlgBtnClick = function (args) {\n this.stateChangeColumns = [];\n if (!isNullOrUndefined(args)) {\n if (this.hideColumn.length) {\n this.columnStateChange(this.hideColumn, false);\n }\n if (this.showColumn.length) {\n this.columnStateChange(this.showColumn, true);\n }\n var params = {\n requestType: 'columnstate', element: this.parent.element,\n columns: this.stateChangeColumns, dialogInstance: this.dlgObj\n };\n this.parent.trigger(events.actionComplete, params);\n this.getShowHideService.setVisible(this.stateChangeColumns);\n this.clearActions();\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n }\n };\n ColumnChooser.prototype.columnStateChange = function (stateColumns, state) {\n for (var index = 0; index < stateColumns.length; index++) {\n var colUid = stateColumns[index];\n var currentCol = this.parent.getColumnByUid(colUid);\n currentCol.visible = state;\n this.stateChangeColumns.push(currentCol);\n }\n };\n ColumnChooser.prototype.clearActions = function () {\n this.hideColumn = [];\n this.showColumn = [];\n // this.unWireEvents();\n this.hideDialog();\n this.addcancelIcon();\n };\n ColumnChooser.prototype.checkstatecolumn = function (isChecked, coluid) {\n if (isChecked) {\n if (this.hideColumn.indexOf(coluid) !== -1) {\n this.hideColumn.splice(this.hideColumn.indexOf(coluid), 1);\n }\n if (this.showColumn.indexOf(coluid) === -1) {\n this.showColumn.push(coluid);\n }\n }\n else {\n if (this.showColumn.indexOf(coluid) !== -1) {\n this.showColumn.splice(this.showColumn.indexOf(coluid), 1);\n }\n if (this.hideColumn.indexOf(coluid) === -1) {\n this.hideColumn.push(coluid);\n }\n }\n };\n ColumnChooser.prototype.columnChooserSearch = function (searchVal) {\n var clearSearch = false;\n var fltrCol;\n 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 = this.parent.createElement('span', { className: 'e-cc e-nmatch' });\n nMatchele.innerHTML = this.l10n.getConstant('Matchs');\n this.innerDiv.innerHTML = ' ';\n this.innerDiv.appendChild(nMatchele);\n this.innerDiv.classList.add('e-ccnmdiv');\n }\n this.flag = true;\n this.stopTimer();\n };\n ColumnChooser.prototype.wireEvents = function () {\n EventHandler.add(this.dlgObj.element, 'click', this.checkBoxClickHandler, this);\n EventHandler.add(this.searchBoxObj.searchBox, 'keyup', this.columnChooserManualSearch, this);\n this.searchBoxObj.wireEvent();\n };\n ColumnChooser.prototype.unWireEvents = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.dlgObj.element) {\n EventHandler.remove(this.dlgObj.element, 'click', this.checkBoxClickHandler);\n }\n EventHandler.remove(this.searchBoxObj.searchBox, 'keyup', this.columnChooserManualSearch);\n this.searchBoxObj.unWireEvent();\n };\n ColumnChooser.prototype.checkBoxClickHandler = function (e) {\n var checkstate;\n var elem = parentsUntil(e.target, 'e-checkbox-wrapper');\n if (elem) {\n toogleCheckbox(elem.parentElement);\n elem.querySelector('.e-chk-hidden').focus();\n if (elem.querySelector('.e-check')) {\n checkstate = true;\n }\n else if (elem.querySelector('.e-uncheck')) {\n checkstate = false;\n }\n else {\n return;\n }\n var columnUid = parentsUntil(elem, 'e-ccheck').getAttribute('uid');\n this.checkstatecolumn(checkstate, columnUid);\n this.refreshCheckboxButton();\n }\n };\n ColumnChooser.prototype.refreshCheckboxButton = function () {\n var searchValue = this.dlgObj.element.querySelector('.e-cc.e-input').value;\n var selected = this.innerDiv.querySelectorAll('.e-check').length;\n var btn = this.dlgDiv.querySelector('.e-footer-content').querySelector('.e-btn').ej2_instances[0];\n btn.disabled = false;\n if (selected === 0 && searchValue === '') {\n btn.disabled = true;\n }\n btn.dataBind();\n };\n ColumnChooser.prototype.refreshCheckboxList = function (gdCol, searchVal) {\n this.ulElement = this.parent.createElement('ul', { className: 'e-ccul-ele e-cc' });\n for (var i = 0; i < gdCol.length; i++) {\n var columns = gdCol[i];\n this.renderCheckbox(columns);\n }\n return this.ulElement;\n };\n ColumnChooser.prototype.refreshCheckboxState = function () {\n this.dlgObj.element.querySelector('.e-cc.e-input').value = '';\n this.columnChooserSearch('');\n 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 = this.parent.createElement('li', { className: 'e-cclist e-cc', styles: 'list-style:None', id: 'e-ccli_' + column.uid });\n hideColState = this.hideColumn.indexOf(column.uid) === -1 ? false : true;\n showColState = this.showColumn.indexOf(column.uid) === -1 ? false : true;\n var cccheckboxlist = this.createCheckBox(column.headerText, (column.visible && !hideColState) || showColState, column.uid);\n cclist.appendChild(cccheckboxlist);\n this.ulElement.appendChild(cclist);\n }\n };\n ColumnChooser.prototype.columnChooserManualSearch = function (e) {\n this.addcancelIcon();\n this.searchValue = e.target.value;\n var proxy = this;\n this.stopTimer();\n this.startTimer(e);\n };\n ColumnChooser.prototype.startTimer = function (e) {\n var proxy = this;\n var interval = !proxy.flag && e.keyCode !== 13 ? 500 : 0;\n this.timer = window.setInterval(function () { proxy.columnChooserSearch(proxy.searchValue); }, interval);\n };\n ColumnChooser.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n ColumnChooser.prototype.addcancelIcon = function () {\n this.dlgDiv.querySelector('.e-cc.e-ccsearch-icon').classList.add('e-cc-cancel');\n };\n ColumnChooser.prototype.removeCancelIcon = function () {\n this.dlgDiv.querySelector('.e-cc.e-ccsearch-icon').classList.remove('e-cc-cancel');\n };\n ColumnChooser.prototype.mOpenDlg = function () {\n if (Browser.isDevice) {\n this.dlgObj.element.querySelector('.e-cc-searchdiv').classList.remove('e-input-focus');\n this.dlgObj.element.querySelectorAll('.e-cc-chbox')[0].focus();\n }\n };\n // internally use\n ColumnChooser.prototype.getModuleName = function () {\n return 'columnChooser';\n };\n 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 var max = index;\n var indices = [];\n if (col.columns) {\n index++;\n for (var i = 0; i < col.columns.length; i++) {\n indices[i] = this.checkDepth(col.columns[i], index);\n }\n for (var j = 0; j < indices.length; j++) {\n if (max < indices[j]) {\n max = indices[j];\n }\n }\n index = max;\n }\n return index;\n };\n ;\n return ExportHelper;\n}());\nexport { ExportHelper };\n/**\n * @hidden\n * `ExportValueFormatter` for `PdfExport` & `ExcelExport`\n */\nvar ExportValueFormatter = /** @class */ (function () {\n function ExportValueFormatter(culture) {\n this.valueFormatter = new ValueFormatter(culture);\n this.internationalization = new Internationalization(culture);\n }\n /* tslint:disable-next-line:no-any */\n ExportValueFormatter.prototype.returnFormattedValue = function (args, customFormat) {\n if (!isNullOrUndefined(args.value) && args.value) {\n return this.valueFormatter.getFormatFunction(customFormat)(args.value);\n }\n else {\n return '';\n }\n };\n /* tslint:disable-next-line:no-any */\n ExportValueFormatter.prototype.formatCellValue = function (args) {\n if (args.isForeignKey) {\n args.value = getValue(args.column.foreignKeyValue, getForeignData(args.column, {}, args.value)[0]);\n }\n if (args.column.type === 'number' && args.column.format !== undefined && args.column.format !== '') {\n return args.value ? this.internationalization.getNumberFormat({ format: args.column.format })(args.value) : '';\n }\n else if (args.column.type === 'boolean') {\n return args.value ? 'true' : 'false';\n /* tslint:disable-next-line:max-line-length */\n }\n else if ((args.column.type === 'date' || args.column.type === 'datetime' || args.column.type === 'time') && args.column.format !== undefined) {\n if (typeof args.column.format === 'string') {\n var format = void 0;\n if (args.column.type === 'date') {\n format = { type: 'date', skeleton: args.column.format };\n }\n else if (args.column.type === 'time') {\n format = { type: 'time', skeleton: args.column.format };\n }\n else {\n format = { type: 'dateTime', skeleton: args.column.format };\n }\n return this.returnFormattedValue(args, format);\n }\n else {\n if (args.column.format instanceof Object && args.column.format.type === undefined) {\n return (args.value.toString());\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n var customFormat = void 0;\n if (args.column.type === 'date') {\n /* tslint:disable-next-line:max-line-length */\n customFormat = { type: args.column.format.type, format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n else if (args.column.type === 'time') {\n customFormat = { type: 'time', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n else {\n customFormat = { type: 'dateTime', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n return this.returnFormattedValue(args, customFormat);\n }\n }\n }\n else {\n if ((!isNullOrUndefined(args.column.type) && !isNullOrUndefined(args.value)) || !isNullOrUndefined(args.value)) {\n return (args.value).toString();\n }\n else {\n return '';\n }\n }\n };\n return ExportValueFormatter;\n}());\nexport { ExportValueFormatter };\n","import * as events from '../base/constant';\nimport { Workbook } from '@syncfusion/ej2-excel-export';\nimport { isNullOrUndefined, getEnumValue, compile, 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(gObj.locale);\n };\n /**\n * Export Grid to Excel file.\n * @param {exportProperties} exportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Defines is multiple Grid's are exported.\n * @param {workbook} workbook - Defined the Workbook if multiple Grid is exported.\n * @param {isCsv} isCsv - true if export to CSV.\n * @return {Promise}\n */\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.Map = function (grid, exportProperties, isMultipleExport, workbook, isCsv, isBlob) {\n var gObj = grid;\n var cancel = 'cancel';\n var isBlb = 'isBlob';\n var csv = 'isCsv';\n var workbk = 'workbook';\n var isMultiEx = 'isMultipleExport';\n var args = {\n requestType: 'beforeExcelExport', gridObject: gObj, cancel: false,\n isMultipleExport: isMultipleExport, workbook: workbook, isCsv: isCsv, isBlob: isBlob\n };\n gObj.trigger(events.beforeExcelExport, args);\n this.data = new Data(gObj);\n this.isExporting = true;\n this.isBlob = args[isBlb];\n if (args[csv]) {\n this.isCsvExport = args[csv];\n }\n else {\n this.isCsvExport = false;\n }\n return this.processRecords(gObj, exportProperties, args[isMultiEx], args[workbk]);\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecords = function (gObj, exportProperties, isMultipleExport, workbook) {\n var _this = this;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) &&\n exportProperties.dataSource instanceof DataManager) {\n /* 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 this.groupedColLength = gObj.groupSettings.columns.length;\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, exportProperties.dataSource);\n }\n else if (!isNullOrUndefined(exportProperties) && exportProperties.exportType === 'CurrentPage') {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, exportProperties, gObj.currentViewData);\n }\n else {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, exportProperties);\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, exportProperties, 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 if (!isNullOrUndefined(exportProperties) && exportProperties.fileName) {\n book.save(exportProperties.fileName);\n }\n else {\n book.save('Export.csv');\n }\n }\n else {\n this.blobPromise = book.saveAsBlob('text/csv');\n }\n }\n else {\n var book = new Workbook(this.book, 'xlsx', gObj.locale);\n if (!this.isBlob) {\n if (!isNullOrUndefined(exportProperties) && exportProperties.fileName) {\n book.save(exportProperties.fileName);\n }\n else {\n book.save('Export.xlsx');\n }\n }\n else {\n this.blobPromise = book.saveAsBlob('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n }\n }\n if (this.isElementIdChanged) {\n gObj.element.id = '';\n }\n }\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 + dataSource.childLevels)) {\n /* tslint:disable-next-line:no-any */\n var sCell = {};\n sCell.index = (hIndex + 1);\n sCell.style = this.getCaptionThemeStyle(this.theme);\n cells.push(sCell);\n hIndex++;\n }\n }\n else {\n var span = 0;\n //Calculation for column span when group caption dont have aggregates\n for (var _c = 0, _d = headerRow.columns; _c < _d.length; _c++) {\n var col_1 = _d[_c];\n if (col_1.visible) {\n span++;\n }\n }\n cell.colSpan = (dataSource.childLevels + span);\n }\n this.rows[this.rows.length - 1].cells = cells;\n this.rowLength++;\n if (this.groupedColLength < 8 && level > 1) {\n var grouping = { outlineLevel: level - 1, isCollapsed: true };\n this.rows[this.rows.length - 1].grouping = grouping;\n }\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 var cell = {};\n gObj.trigger(events.excelQueryCellInfo, extend(excelCellArgs, {\n column: headerRow.columns[c], data: record[r],\n value: value, style: undefined, colSpan: 1, cell: cell\n }));\n cell = excelCellArgs.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 if (this.groupedColLength < 8 && level > 0) {\n var grouping = { outlineLevel: level, isCollapsed: true };\n this.rows.push({ index: this.rowLength++, cells: cells, grouping: grouping });\n }\n else {\n this.rows.push({ index: this.rowLength++, cells: cells });\n }\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 var row_1 = {};\n if (this.groupedColLength < 8) {\n var dummyOutlineLevel = 'outlineLevel';\n var dummyGrouping = 'grouping';\n var level = this.rows[this.rows.length - 1][dummyGrouping][dummyOutlineLevel];\n var grouping = { outlineLevel: level, isCollapsed: true };\n row_1 = { index: this.rowLength++, cells: cells_2, grouping: grouping };\n }\n else {\n row_1 = { index: this.rowLength++, cells: cells_2 };\n }\n this.rows.push(row_1);\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 /* tslint:disable-next-line:no-any */\n var excelHeaderCellArgs = { cell: cell, gridCell: gridCell, setStyle: style };\n gObj.trigger(events.excelHeaderQueryCellInfo, extend(excelHeaderCellArgs, {\n cell: cell, setStyle: style\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(parent.locale);\n this.pdfDocument = undefined;\n this.hideColumnInclude = false;\n this.currentViewData = false;\n this.parent = parent;\n var gObj = parent;\n var can = 'cancel';\n this.isGrouping = false;\n this.isExporting = true;\n var args = {\n requestType: 'beforePdfExport', gridObject: gObj, cancel: false\n };\n gObj.trigger(events.beforePdfExport, args);\n if (args[can] === true) {\n return;\n }\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 if (!isNullOrUndefined(pdfExportProperties) && pdfExportProperties.fileName) {\n this.pdfDocument.save(pdfExportProperties.fileName);\n }\n else {\n this.pdfDocument.save('Export.pdf');\n }\n }\n else {\n this.blobPromise = this.pdfDocument.save();\n }\n this.pdfDocument.destroy();\n }\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 = this.parent.getColumnByField(dataSourceItems.field).headerText + ': ' + this.exportValueFormatter.formatCellValue(args) + ' - ' + dataSourceItems.count + (dataSource.count > 1 ? ' items' : ' item');\n row.cells.getCell(groupIndex).value = value;\n row.cells.getCell(groupIndex + 1).style.stringFormat = new PdfStringFormat(PdfTextAlignment.Left);\n row.style.setBorder(border);\n row.style.setFont(font);\n row.style.setTextBrush(brush);\n row.style.setBackgroundBrush(backgroundBrush);\n var sRows = void 0;\n var captionSummaryModel = new CaptionSummaryModelGenerator(gObj);\n if (!isNullOrUndefined(dataSourceItems.items.records)) {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items.records, dataSourceItems);\n }\n else {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items, dataSourceItems);\n }\n if (!isNullOrUndefined(sRows) && sRows.length === 0) {\n row.cells.getCell(groupIndex + 1).columnSpan = pdfGrid.columns.count - (groupIndex + 1);\n }\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, true, row, groupIndex);\n /* 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, dataSourceItems);\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, false);\n }\n else {\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, true, row, groupIndex);\n this.processRecord(border, gridColumns, gObj, dataSourceItems.items, pdfGrid, (groupIndex + 1));\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n sRows = groupSummaryModel.generateRows(dataSourceItems.items, dataSourceItems);\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, false);\n }\n }\n };\n /* 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 var gObj = this.parent;\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 /* tslint:disable-next-line:no-any */\n var args = {\n cell: cell,\n gridCell: rows[i].cells[j],\n style: cell.style\n };\n /* tslint:enable:no-any */\n gObj.trigger(events.pdfHeaderQueryCellInfo, args);\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.currentViewData;\n this.currentViewData = true;\n this.customDataSource = false;\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n return { dataSource: 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 args.value = this.exportValueFormatter.formatCellValue(args);\n /* tslint:enable:no-any */\n gObj.trigger(events.pdfQueryCellInfo, args);\n var cell = gridRow.cells.getCell(j + startIndex);\n cell.value = args.value;\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 if (!isNullOrUndefined(args.style.paragraphIndent)) {\n cell.style.stringFormat = new PdfStringFormat();\n cell.style.stringFormat.paragraphIndent = args.style.paragraphIndent;\n }\n };\n /**\n * set text alignment of each columns in exporting grid\n * @private\n */\n PdfExport.prototype.getHorizontalAlignment = function (textAlign, format) {\n if (format === undefined) {\n format = new PdfStringFormat();\n }\n switch (textAlign) {\n case 'Right':\n format.alignment = PdfTextAlignment.Right;\n break;\n case 'Center':\n format.alignment = PdfTextAlignment.Center;\n break;\n case 'Justify':\n format.alignment = PdfTextAlignment.Justify;\n break;\n case 'Left':\n format.alignment = PdfTextAlignment.Left;\n break;\n }\n return format;\n };\n /**\n * set vertical alignment of each columns in exporting grid\n * @private\n */\n PdfExport.prototype.getVerticalAlignment = function (verticalAlign, format, textAlign) {\n if (format === undefined) {\n format = new PdfStringFormat();\n format = this.getHorizontalAlignment(textAlign, format);\n }\n switch (verticalAlign) {\n case 'Bottom':\n format.lineAlignment = PdfVerticalAlignment.Bottom;\n break;\n case 'Middle':\n format.lineAlignment = PdfVerticalAlignment.Middle;\n break;\n case 'Top':\n format.lineAlignment = PdfVerticalAlignment.Top;\n break;\n }\n return format;\n };\n PdfExport.prototype.getFontFamily = function (fontFamily) {\n switch (fontFamily) {\n case 'TimesRoman':\n return 2;\n case 'Courier':\n return 1;\n case 'Symbol':\n return 3;\n case 'ZapfDingbats':\n return 4;\n default:\n return 0;\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getFont = function (content) {\n 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 { 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 = _this.parent.createElement('button', {});\n _this.unbounDiv = _this.parent.createElement('div', { className: 'e-unboundcelldiv', styles: 'display: inline-block' });\n _this.element = _this.parent.createElement('TD', {\n className: 'e-rowcell e-unboundcell', attrs: {\n role: 'gridcell', tabindex: '-1'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CommandColumnRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n node.appendChild(this.unbounDiv.cloneNode());\n node.setAttribute('aria-label', 'is Command column column header ' + cell.column.headerText);\n if (cell.column.commandsTemplate) {\n appendChildren(node.firstElementChild, cell.column.getColumnTemplate()(data));\n }\n else {\n for (var _i = 0, _a = cell.commands; _i < _a.length; _i++) {\n var command = _a[_i];\n node = this.renderButton(node, command, attributes.index);\n }\n }\n this.setAttributes(node, cell, attributes);\n if (this.parent.isEdit) {\n addClass(node.querySelectorAll('.e-edit-delete'), 'e-hide');\n removeClass(node.querySelectorAll('.e-save-cancel'), 'e-hide');\n }\n else {\n addClass(node.querySelectorAll('.e-save-cancel'), 'e-hide');\n removeClass(node.querySelectorAll('.e-edit-delete'), 'e-hide');\n }\n return node;\n };\n CommandColumnRenderer.prototype.renderButton = function (node, buttonOption, index) {\n var button = this.buttonElement.cloneNode();\n attributes(button, {\n 'id': this.parent.element.id + (buttonOption.type || '') + '_' + index, 'type': 'button',\n title: buttonOption.buttonOption.content || this.localizer.getConstant(buttonOption.type) || buttonOption.type\n });\n button.onclick = buttonOption.buttonOption.click;\n var buttonObj = new Button(buttonOption.buttonOption, button);\n buttonObj.commandType = buttonOption.type;\n node.firstElementChild.appendChild(buttonObj.element);\n switch (buttonOption.type) {\n case 'Edit':\n case 'Delete':\n addClass([button], ['e-edit-delete', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n break;\n case 'Cancel':\n case 'Save':\n addClass([button], ['e-save-cancel', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n break;\n }\n return node;\n };\n return CommandColumnRenderer;\n}(CellRenderer));\nexport { CommandColumnRenderer };\n","import { closest } from '@syncfusion/ej2-base';\nimport { initialEnd, click, keyPressed } from '../base/constant';\nimport { CellType } from '../base/enum';\nimport { CommandColumnRenderer } from '../renderer/command-column-renderer';\n/**\n * `CommandColumn` used to handle the command column actions.\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n CommandColumn.prototype.initiateRender = function () {\n var cellFac = this.locator.getService('cellRendererFactory');\n cellFac.addCellRenderer(CellType.CommandColumn, new CommandColumnRenderer(this.parent, this.locator));\n };\n CommandColumn.prototype.commandClickHandler = function (e) {\n var gObj = this.parent;\n var gID = gObj.element.id;\n var target = closest(e.target, 'button');\n if (!target || !gObj.editModule || !closest(e.target, '.e-unboundcell')) {\n return;\n }\n var buttonObj = target.ej2_instances[0];\n var type = buttonObj.commandType;\n if (buttonObj.disabled) {\n return;\n }\n switch (type) {\n case 'Edit':\n gObj.editModule.endEdit();\n gObj.editModule.startEdit(closest(target, 'tr'));\n break;\n case 'Cancel':\n gObj.editModule.closeEdit();\n break;\n case 'Save':\n gObj.editModule.endEdit();\n break;\n case 'Delete':\n gObj.editModule.endEdit();\n gObj.clearSelection();\n //for toogle issue when dbl click\n gObj.selectRow(parseInt(closest(target, 'tr').getAttribute('aria-rowindex'), 10), false);\n gObj.editModule.deleteRecord();\n break;\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * To destroy CommandColumn.\n * @method destroy\n * @return {void}\n */\n CommandColumn.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n CommandColumn.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(click, this.commandClickHandler);\n this.parent.off(initialEnd, this.initiateRender);\n this.parent.off(keyPressed, this.keyPressHandler);\n };\n CommandColumn.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(click, this.commandClickHandler, this);\n this.parent.on(initialEnd, this.initiateRender, this);\n this.parent.on(keyPressed, this.keyPressHandler, this);\n };\n CommandColumn.prototype.keyPressHandler = function (e) {\n if (e.action === 'enter' && closest(e.target, '.e-unboundcelldiv')) {\n this.commandClickHandler(e);\n e.preventDefault();\n }\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { closest, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { Resize } from '../actions/resize';\nimport { Page } from '../actions/page';\nimport { parentsUntil } from '../base/util';\nimport { Group } from '../actions/group';\nimport { Sort } from '../actions/sort';\nimport { PdfExport } from '../actions/pdf-export';\nimport { ExcelExport } from '../actions/excel-export';\nexport var menuClass = {\n header: '.e-gridheader',\n content: '.e-gridcontent',\n edit: '.e-inline-edit',\n batchEdit: '.e-editedbatchcell',\n editIcon: 'e-edit',\n pager: '.e-gridpager',\n delete: 'e-delete',\n save: 'e-save',\n cancel: 'e-cancel',\n copy: 'e-copy',\n pdf: 'e-pdfexport',\n group: 'e-icon-group',\n ungroup: 'e-icon-ungroup',\n csv: 'e-csvexport',\n excel: 'e-excelexport',\n fPage: 'e-icon-first',\n nPage: 'e-icon-next',\n lPage: 'e-icon-last',\n pPage: 'e-icon-prev',\n ascending: 'e-icon-ascending',\n descending: 'e-icon-descending',\n groupHeader: 'e-groupdroparea',\n touchPop: 'e-gridpopup'\n};\n/**\n * The `ContextMenu` module is used to handle context menu actions.\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent, serviceLocator) {\n this.defaultItems = {};\n this.disableItems = [];\n this.hiddenItems = [];\n this.localeText = this.setLocaleKey();\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n ContextMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRenderMenu, this);\n this.parent.on(events.initialLoad, this.render, this);\n };\n /**\n * @hidden\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRenderMenu);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler.bind(this));\n };\n ContextMenu.prototype.keyDownHandler = function (e) {\n if (e.code === 'Tab' || e.which === 9) {\n this.contextMenu.close();\n }\n };\n ContextMenu.prototype.render = function () {\n this.parent.element.classList.add('e-noselect');\n this.l10n = this.serviceLocator.getService('localization');\n this.element = this.parent.createElement('ul', { id: this.gridID + '_cmenu' });\n EventHandler.add(this.element, 'keydown', this.keyDownHandler.bind(this));\n this.parent.element.appendChild(this.element);\n var target = '#' + this.gridID;\n this.contextMenu = new Menu({\n items: this.getMenuItems(),\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n target: target,\n select: this.contextMenuItemClick.bind(this),\n beforeOpen: this.contextMenuBeforeOpen.bind(this),\n onOpen: this.contextMenuOpen.bind(this),\n onClose: this.contextMenuOnClose.bind(this),\n cssClass: 'e-grid-menu'\n });\n this.contextMenu.appendTo(this.element);\n };\n ContextMenu.prototype.enableAfterRenderMenu = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n if (this.contextMenu) {\n this.contextMenu.destroy();\n remove(this.element);\n this.parent.element.classList.remove('e-noselect');\n }\n this.render();\n }\n };\n ContextMenu.prototype.getMenuItems = function () {\n var menuItems = [];\n var exportItems = [];\n for (var _i = 0, _a = this.parent.contextMenuItems; _i < _a.length; _i++) {\n var item = _a[_i];\n if (typeof item === 'string' && this.getDefaultItems().indexOf(item) !== -1) {\n if (item.toLocaleLowerCase().indexOf('export') !== -1) {\n exportItems.push(this.buildDefaultItems(item));\n }\n else {\n menuItems.push(this.buildDefaultItems(item));\n }\n }\n else if (typeof item !== 'string') {\n menuItems.push(item);\n }\n }\n if (exportItems.length > 0) {\n var exportGroup = this.buildDefaultItems('export');\n exportGroup.items = exportItems;\n menuItems.push(exportGroup);\n }\n return menuItems;\n };\n ContextMenu.prototype.getLastPage = function () {\n var totalpage = Math.floor(this.parent.pageSettings.totalRecordsCount / this.parent.pageSettings.pageSize);\n if (this.parent.pageSettings.totalRecordsCount % this.parent.pageSettings.pageSize) {\n totalpage += 1;\n }\n return totalpage;\n };\n ContextMenu.prototype.contextMenuOpen = function () {\n this.isOpen = true;\n };\n ContextMenu.prototype.contextMenuItemClick = function (args) {\n var item = this.getKeyFromId(args.item.id);\n switch (item) {\n case 'AutoFitAll':\n this.parent.autoFitColumns([]);\n break;\n case 'AutoFit':\n this.parent.autoFitColumns(this.targetColumn.field);\n break;\n case 'Group':\n this.parent.groupColumn(this.targetColumn.field);\n break;\n case 'Ungroup':\n this.parent.ungroupColumn(this.targetColumn.field);\n break;\n case 'Edit':\n if (this.parent.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 if (this.parent.getSelectedRecords().length === 1) {\n this.parent.editModule.deleteRow(this.row);\n }\n else {\n this.parent.deleteRecord();\n }\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 var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.contextMenu.destroy();\n remove(this.element);\n this.removeEventListener();\n this.parent.element.classList.remove('e-noselect');\n };\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n ContextMenu.prototype.generateID = function (item) {\n return this.gridID + '_cmenu_' + item;\n };\n ContextMenu.prototype.getKeyFromId = function (id) {\n return id.replace(this.gridID + '_cmenu_', '');\n };\n ContextMenu.prototype.buildDefaultItems = function (item) {\n var menuItem;\n switch (item) {\n case 'AutoFitAll':\n case 'AutoFit':\n menuItem = { target: menuClass.header };\n break;\n case 'Group':\n menuItem = { target: menuClass.header, iconCss: menuClass.group };\n break;\n case 'Ungroup':\n menuItem = { target: menuClass.header, iconCss: menuClass.ungroup };\n break;\n case 'Edit':\n menuItem = { target: menuClass.content, iconCss: menuClass.editIcon };\n break;\n case 'Delete':\n menuItem = { target: menuClass.content, iconCss: menuClass.delete };\n break;\n case 'Save':\n menuItem = { target: menuClass.edit, iconCss: menuClass.save };\n break;\n case 'Cancel':\n menuItem = { target: menuClass.edit, iconCss: menuClass.cancel };\n break;\n case 'Copy':\n menuItem = { target: menuClass.content, iconCss: menuClass.copy };\n break;\n case 'export':\n menuItem = { target: menuClass.content };\n break;\n case 'PdfExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.pdf };\n break;\n case 'ExcelExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.excel };\n break;\n case 'CsvExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.csv };\n break;\n case 'SortAscending':\n menuItem = { target: menuClass.header, iconCss: menuClass.ascending };\n break;\n case 'SortDescending':\n menuItem = { target: menuClass.header, iconCss: menuClass.descending };\n break;\n case 'FirstPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.fPage };\n break;\n case 'PrevPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.pPage };\n break;\n case 'LastPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.lPage };\n break;\n case 'NextPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.nPage };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n target: menuItem.target, iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : ''\n };\n return this.defaultItems[item];\n };\n ContextMenu.prototype.getDefaultItems = function () {\n return ['AutoFitAll', 'AutoFit',\n 'Group', 'Ungroup', 'Edit', 'Delete', 'Save', 'Cancel', 'Copy', 'export',\n 'PdfExport', 'ExcelExport', 'CsvExport', 'SortAscending', 'SortDescending',\n 'FirstPage', 'PrevPage', 'LastPage', 'NextPage'];\n };\n ContextMenu.prototype.setLocaleKey = function () {\n return {\n 'AutoFitAll': 'autoFitAll',\n 'AutoFit': 'autoFit',\n 'Copy': 'Copy',\n 'Group': 'Group',\n 'Ungroup': 'Ungroup',\n 'Edit': 'EditRecord',\n 'Delete': 'DeleteRecord',\n 'Save': 'Save',\n 'Cancel': 'CancelButton',\n 'PdfExport': 'Pdfexport',\n 'ExcelExport': 'Excelexport',\n 'CsvExport': 'Csvexport',\n 'export': 'Export',\n 'SortAscending': 'SortAscending',\n 'SortDescending': 'SortDescending',\n 'FirstPage': 'FirstPage',\n 'LastPage': 'LastPage',\n 'PrevPage': 'PreviousPage',\n 'NextPage': 'NextPage'\n };\n };\n ContextMenu.prototype.getColumn = function (e) {\n var cell = closest(e.target, 'th.e-headercell');\n if (cell) {\n var uid = cell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n }\n return null;\n };\n ContextMenu.prototype.selectRow = function (e, isSelectable) {\n this.cell = e.target;\n this.row = closest(e.target, 'tr.e-row') || this.row;\n if (this.row && isSelectable && !parentsUntil(e.target, 'e-gridpager')) {\n this.parent.selectRow(parseInt(this.row.getAttribute('aria-rowindex'), 10));\n }\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { RowModelGenerator } from '../services/row-model-generator';\n/**\n * FreezeRowModelGenerator is used to generate grid data rows with freeze row and column.\n * @hidden\n */\nvar FreezeRowModelGenerator = /** @class */ (function () {\n function FreezeRowModelGenerator(parent) {\n this.isFrzLoad = 1;\n this.parent = parent;\n this.rowModelGenerator = new RowModelGenerator(this.parent);\n }\n FreezeRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var frzCols = this.parent.getFrozenColumns();\n var row = this.rowModelGenerator.generateRows(data, notifyArgs);\n for (var i = 0, len = row.length; i < len; i++) {\n if (this.isFrzLoad % 2 === 0) {\n row[i].cells = row[i].cells.slice(frzCols, row[i].cells.length);\n }\n else {\n row[i].cells = row[i].cells.slice(0, frzCols);\n }\n }\n this.isFrzLoad++;\n return row;\n };\n return FreezeRowModelGenerator;\n}());\nexport { FreezeRowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { remove, addClass } from '@syncfusion/ej2-base';\nimport { HeaderRender } from './header-renderer';\nimport { ContentRender } from './content-renderer';\nimport { FreezeRowModelGenerator } from '../services/freeze-row-model-generator';\nimport * as events from '../base/constant';\nimport { renderMovable, getScrollBarWidth } from '../base/util';\n/**\n * Freeze module is used to render grid content with frozen rows and columns\n * @hidden\n */\nvar FreezeContentRender = /** @class */ (function (_super) {\n __extends(FreezeContentRender, _super);\n function FreezeContentRender(parent, locator) {\n return _super.call(this, parent, locator) || this;\n }\n FreezeContentRender.prototype.renderPanel = function () {\n _super.prototype.renderPanel.call(this);\n var fDiv = this.parent.createElement('div', { className: 'e-frozencontent' });\n var mDiv = this.parent.createElement('div', { className: 'e-movablecontent' });\n this.getPanel().firstChild.appendChild(fDiv);\n this.getPanel().firstChild.appendChild(mDiv);\n this.setFrozenContent(fDiv);\n this.setMovableContent(mDiv);\n };\n FreezeContentRender.prototype.renderEmpty = function (tbody) {\n _super.prototype.renderEmpty.call(this, tbody);\n this.getMovableContent().querySelector('tbody').innerHTML = '';\n this.getFrozenContent().querySelector('.e-emptyrow').querySelector('td').colSpan = this.parent.getFrozenColumns();\n this.getFrozenContent().style.borderRightWidth = '0px';\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody').innerHTML = '';\n this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').innerHTML = '';\n }\n };\n FreezeContentRender.prototype.setFrozenContent = function (ele) {\n this.frozenContent = ele;\n };\n FreezeContentRender.prototype.setMovableContent = function (ele) {\n this.movableContent = ele;\n };\n FreezeContentRender.prototype.getFrozenContent = function () {\n return this.frozenContent;\n };\n FreezeContentRender.prototype.getMovableContent = function () {\n return this.movableContent;\n };\n FreezeContentRender.prototype.getModelGenerator = function () {\n return new FreezeRowModelGenerator(this.parent);\n };\n FreezeContentRender.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n this.getFrozenContent().appendChild(this.getTable());\n var mTbl = this.getTable().cloneNode(true);\n this.getMovableContent().appendChild(mTbl);\n remove(this.getMovableContent().querySelector('colgroup'));\n var colGroup = ((this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup')).cloneNode(true));\n mTbl.insertBefore(colGroup, mTbl.querySelector('tbody'));\n };\n return FreezeContentRender;\n}(ContentRender));\nexport { FreezeContentRender };\nvar FreezeRender = /** @class */ (function (_super) {\n __extends(FreezeRender, _super);\n function FreezeRender(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.addEventListener();\n return _this;\n }\n FreezeRender.prototype.addEventListener = function () {\n this.parent.on(events.freezeRender, this.refreshFreeze, this);\n this.parent.on(events.frozenHeight, this.setFrozenHeight, this);\n };\n FreezeRender.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.frozenHeight, this.setFrozenHeight);\n };\n FreezeRender.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n this.rfshMovable();\n this.updateColgroup();\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });\n };\n FreezeRender.prototype.renderPanel = function () {\n _super.prototype.renderPanel.call(this);\n var fDiv = this.parent.createElement('div', { className: 'e-frozenheader' });\n var mDiv = this.parent.createElement('div', { className: 'e-movableheader' });\n this.getPanel().firstChild.appendChild(fDiv);\n this.getPanel().firstChild.appendChild(mDiv);\n this.setFrozenHeader(fDiv);\n this.setMovableHeader(mDiv);\n };\n FreezeRender.prototype.refreshUI = function () {\n var tbody = this.getMovableHeader().querySelector('tbody');\n remove(this.getMovableHeader().querySelector('table'));\n _super.prototype.refreshUI.call(this);\n this.rfshMovable();\n this.getMovableHeader().querySelector('tbody').innerHTML = tbody.innerHTML;\n this.updateColgroup();\n this.parent.updateDefaultCursor();\n renderMovable(this.parent.getContentTable().querySelector('colgroup'), this.parent.getFrozenColumns());\n this.initializeHeaderDrag();\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });\n };\n FreezeRender.prototype.rfshMovable = function () {\n this.getFrozenHeader().appendChild(this.getTable());\n this.getMovableHeader().appendChild(this.createTable());\n this.refreshStackedHdrHgt();\n this.addMovableFirstCls();\n };\n FreezeRender.prototype.addMovableFirstCls = function () {\n if (this.parent.getVisibleFrozenColumns()) {\n var movablefirstcell = this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('.e-columnheader');\n var len = this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('.e-columnheader').length;\n for (var i = 0; i < len; i++) {\n var cells = 'cells';\n var element = movablefirstcell[i][cells][0];\n if (element) {\n addClass([element], ['e-movablefirst']);\n if (movablefirstcell[i][cells][0].rowSpan > 1) {\n i = i + (movablefirstcell[i][cells][0].rowSpan - 1);\n }\n }\n }\n }\n };\n FreezeRender.prototype.refreshFreeze = function (obj) {\n if (obj.case === 'filter') {\n var filterRow = this.getTable().querySelector('.e-filterbar');\n if (this.parent.allowFiltering && filterRow && this.getMovableHeader().querySelector('thead')) {\n this.getMovableHeader().querySelector('thead')\n .appendChild(renderMovable(filterRow, this.parent.getFrozenColumns()));\n }\n }\n else if (obj.case === 'textwrap') {\n var fRows = void 0;\n var mRows = void 0;\n var fHdr = this.getFrozenHeader();\n var mHdr = this.getMovableHeader();\n var cont = this.parent.getContent();\n var wrapMode = this.parent.textWrapSettings.wrapMode;\n var hdrClassList = this.parent.getHeaderContent().firstChild.classList;\n if (wrapMode !== 'Header' || obj.isModeChg) {\n fRows = cont.querySelector('.e-frozencontent').querySelectorAll('tr');\n mRows = cont.querySelector('.e-movablecontent').querySelectorAll('tr');\n this.setWrapHeight(fRows, mRows, obj.isModeChg, true);\n }\n if (wrapMode === 'Content' && this.parent.allowTextWrap) {\n hdrClassList.add('e-wrap');\n }\n else {\n hdrClassList.remove('e-wrap');\n }\n if (wrapMode === 'Both' || obj.isModeChg) {\n fRows = fHdr.querySelectorAll('tr');\n mRows = mHdr.querySelectorAll('tr');\n }\n else {\n fRows = fHdr.querySelector(wrapMode === 'Content' ? 'tbody' : 'thead').querySelectorAll('tr');\n mRows = mHdr.querySelector(wrapMode === 'Content' ? 'tbody' : 'thead').querySelectorAll('tr');\n }\n if (!this.parent.getHeaderContent().querySelectorAll('.e-stackedheadercell').length) {\n this.setWrapHeight(fRows, mRows, obj.isModeChg, false, this.colDepth > 1);\n }\n this.refreshStackedHdrHgt();\n }\n };\n FreezeRender.prototype.updateResizeHandler = function () {\n [].slice.call(this.parent.getHeaderContent().querySelectorAll('.e-rhandler')).forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n });\n };\n FreezeRender.prototype.setWrapHeight = function (fRows, mRows, isModeChg, isContReset, isStackedHdr) {\n var fRowHgt;\n var mRowHgt;\n var isWrap = this.parent.allowTextWrap;\n var wrapMode = this.parent.textWrapSettings.wrapMode;\n var tHead = this.parent.getHeaderContent().querySelector('thead');\n var tBody = this.parent.getHeaderContent().querySelector('tbody');\n var height = [];\n var width = [];\n for (var i = 0, len = fRows.length; i < len; i++) {\n height[i] = fRows[i].offsetHeight; //https://pagebuildersandwich.com/increased-plugins-performance-200/\n width[i] = mRows[i].offsetHeight;\n }\n for (var i = 0, len = fRows.length; i < len; i++) {\n if (isModeChg && ((wrapMode === 'Header' && isContReset) || ((wrapMode === 'Content' && tHead.contains(fRows[i]))\n || (wrapMode === 'Header' && tBody.contains(fRows[i])))) || isStackedHdr) {\n fRows[i].style.height = null;\n mRows[i].style.height = null;\n }\n fRowHgt = height[i];\n mRowHgt = width[i];\n if (fRows[i].childElementCount && ((isWrap && fRowHgt < mRowHgt) || (!isWrap && fRowHgt > mRowHgt) ||\n (this.parent.allowResizing && !this.parent.resizeModule.isFrozenColResized))) {\n fRows[i].style.height = mRowHgt + 'px';\n }\n if (mRows[i].childElementCount && ((isWrap && fRowHgt > mRowHgt) || (!isWrap && fRowHgt < mRowHgt) ||\n (this.parent.allowResizing && this.parent.resizeModule.isFrozenColResized))) {\n mRows[i].style.height = fRowHgt + 'px';\n }\n }\n if (isWrap) {\n this.setFrozenHeight();\n }\n };\n FreezeRender.prototype.setFrozenHeight = function () {\n var movableContentHeight = this.parent.element.querySelector('.e-movablecontent').getBoundingClientRect().height;\n var frozenContentHeight = this.parent.element.querySelector('.e-frozencontent').getBoundingClientRect().height;\n if (movableContentHeight > frozenContentHeight) {\n this.parent.element.querySelector('.e-frozencontent').style.height = movableContentHeight -\n getScrollBarWidth() + 'px';\n }\n };\n FreezeRender.prototype.refreshStackedHdrHgt = function () {\n var fRowSpan;\n var mRowSpan;\n var fTr = this.getFrozenHeader().querySelectorAll('.e-columnheader');\n var mTr = this.getMovableHeader().querySelectorAll('.e-columnheader');\n for (var i = 0, len = fTr.length; i < len; i++) {\n fRowSpan = this.getRowSpan(fTr[i]);\n mRowSpan = this.getRowSpan(mTr[i]);\n if (fRowSpan.min > 1) {\n this.updateStackedHdrRowHgt(i, fRowSpan.max, fTr[i], mTr);\n }\n else if (mRowSpan.min > 1) {\n this.updateStackedHdrRowHgt(i, mRowSpan.max, mTr[i], fTr);\n }\n }\n if (this.parent.allowResizing) {\n this.updateResizeHandler();\n }\n };\n FreezeRender.prototype.getRowSpan = function (row) {\n var rSpan;\n var minRowSpan;\n var maxRowSpan;\n for (var i = 0, len = row.childElementCount; i < len; i++) {\n if (i === 0) {\n minRowSpan = row.children[0].rowSpan;\n }\n rSpan = row.children[i].rowSpan;\n minRowSpan = Math.min(rSpan, minRowSpan);\n maxRowSpan = Math.max(rSpan, minRowSpan);\n }\n return { min: minRowSpan, max: maxRowSpan };\n };\n FreezeRender.prototype.updateStackedHdrRowHgt = function (idx, maxRowSpan, row, rows) {\n var height = 0;\n for (var i = 0; i < maxRowSpan; i++) {\n height += rows[idx + i].style.height ?\n parseInt(rows[idx + i].style.height, 10) : rows[idx + i].offsetHeight;\n }\n row.style.height = height + 'px';\n };\n FreezeRender.prototype.setFrozenHeader = function (ele) {\n this.frozenHeader = ele;\n };\n FreezeRender.prototype.setMovableHeader = function (ele) {\n this.movableHeader = ele;\n };\n FreezeRender.prototype.getFrozenHeader = function () {\n return this.frozenHeader;\n };\n FreezeRender.prototype.getMovableHeader = function () {\n return this.movableHeader;\n };\n FreezeRender.prototype.updateColgroup = function () {\n var mTable = this.getMovableHeader().querySelector('table');\n remove(this.getMovableHeader().querySelector('colgroup'));\n mTable.insertBefore(renderMovable(this.getFrozenHeader().querySelector('colgroup'), this.parent.getFrozenColumns()), mTable.querySelector('thead'));\n };\n return FreezeRender;\n}(HeaderRender));\nexport { FreezeRender };\n","import * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { parentsUntil } from '../base/util';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { FreezeRender, FreezeContentRender } from '../renderer/freeze-renderer';\n/**\n * `Freeze` module is used to handle Frozen rows and columns.\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n function Freeze(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n Freeze.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n Freeze.prototype.wireEvents = function () {\n if (this.parent.frozenRows) {\n EventHandler.add(this.parent.getHeaderContent(), 'dblclick', this.dblClickHandler, this);\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-grid').id !== this.parent.element.id) {\n return;\n }\n this.parent.notify(events.dblclick, e);\n };\n Freeze.prototype.instantiateRenderer = function () {\n var renderer = this.locator.getService('rendererFactory');\n if (this.parent.getFrozenColumns()) {\n renderer.addRenderer(RenderType.Header, new FreezeRender(this.parent, this.locator));\n renderer.addRenderer(RenderType.Content, new FreezeContentRender(this.parent, this.locator));\n }\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { EventHandler, closest, Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { parentsUntil } from '../base/util';\nimport * as events from '../base/constant';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { Group } from '../actions/group';\nimport { Sort } from '../actions/sort';\nimport { Filter } from '../actions/filter';\nimport { Resize } from '../actions/resize';\n/**\n * 'column menu module used to handle column menu actions'\n */\nvar ColumnMenu = /** @class */ (function () {\n function ColumnMenu(parent, serviceLocator) {\n this.defaultItems = {};\n this.localeText = this.setLocaleKey();\n this.disableItems = [];\n this.hiddenItems = [];\n this.isOpen = false;\n // default class names\n this.GROUP = 'e-icon-group';\n this.UNGROUP = 'e-icon-ungroup';\n this.ASCENDING = 'e-icon-ascending';\n this.DESCENDING = 'e-icon-descending';\n this.ROOT = 'e-columnmenu';\n this.FILTER = 'e-icon-filter';\n this.POP = 'e-filter-popup';\n this.WRAP = 'e-col-menu';\n this.CHOOSER = '_chooser_';\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n ColumnMenu.prototype.wireEvents = function () {\n var _this = this;\n this.getColumnMenuHandlers().forEach(function (ele) {\n EventHandler.add(ele, 'mousedown', _this.columnMenuHandlerDown, _this);\n });\n };\n ColumnMenu.prototype.unwireEvents = function () {\n var _this = this;\n this.getColumnMenuHandlers().forEach(function (ele) {\n EventHandler.remove(ele, 'mousedown', _this.columnMenuHandlerDown);\n });\n };\n /**\n * To destroy the resize\n * @return {void}\n * @hidden\n */\n ColumnMenu.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.columnMenu.destroy();\n this.removeEventListener();\n this.unwireFilterEvents();\n this.unwireEvents();\n remove(this.element);\n };\n ColumnMenu.prototype.columnMenuHandlerClick = function (e) {\n if (e.target.classList.contains('e-columnmenu')) {\n if ((this.isOpen && this.headerCell !== this.getHeaderCell(e)) || document.querySelector('.e-grid-menu .e-menu-parent.e-ul')) {\n this.columnMenu.close();\n this.openColumnMenu(e);\n }\n else if (!this.isOpen) {\n this.openColumnMenu(e);\n }\n else {\n this.columnMenu.close();\n }\n }\n };\n ColumnMenu.prototype.openColumnMenu = function (e) {\n var pos = { top: 0, left: 0 };\n this.element.style.cssText = 'display:block;visibility:hidden';\n var elePos = this.element.getBoundingClientRect();\n this.element.style.cssText = 'display:none;visibility:visible';\n this.headerCell = this.getHeaderCell(e);\n if (Browser.isDevice) {\n pos.top = ((window.innerHeight / 2) - (elePos.height / 2));\n pos.left = ((window.innerWidth / 2) - (elePos.width / 2));\n }\n else {\n if (this.parent.enableRtl) {\n pos = calculatePosition(this.headerCell, 'left', 'bottom');\n }\n else {\n pos = calculatePosition(this.headerCell, 'right', 'bottom');\n pos.left -= elePos.width;\n }\n }\n this.columnMenu.open(pos.top, pos.left);\n e.preventDefault();\n };\n ColumnMenu.prototype.columnMenuHandlerDown = function (e) {\n this.isOpen = !(this.element.style.display === 'none' || this.element.style.display === '');\n };\n ColumnMenu.prototype.getColumnMenuHandlers = function () {\n return [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + this.ROOT));\n };\n /**\n * @hidden\n */\n ColumnMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerRefreshed, this.wireEvents, this);\n this.parent.on(events.uiUpdate, this.enableAfterRenderMenu, this);\n this.parent.on(events.initialEnd, this.render, this);\n if (this.isFilterItemAdded()) {\n this.parent.on(events.filterDialogCreated, this.filterPosition, this);\n }\n this.parent.on(events.click, this.columnMenuHandlerClick, this);\n };\n /**\n * @hidden\n */\n ColumnMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.headerRefreshed, this.unwireEvents);\n this.parent.off(events.uiUpdate, this.enableAfterRenderMenu);\n this.parent.off(events.initialEnd, this.render);\n if (this.isFilterItemAdded()) {\n this.parent.off(events.filterDialogCreated, this.filterPosition);\n }\n this.parent.off(events.click, this.columnMenuHandlerClick);\n };\n ColumnMenu.prototype.enableAfterRenderMenu = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n if (this.columnMenu) {\n this.columnMenu.destroy();\n remove(this.element);\n }\n this.render();\n }\n };\n ColumnMenu.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.element = this.parent.createElement('ul', { id: this.gridID + '_columnmenu', className: 'e-colmenu' });\n this.parent.element.appendChild(this.element);\n this.columnMenu = new Menu({\n cssClass: 'e-grid-menu',\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n items: this.getItems(),\n select: this.columnMenuItemClick.bind(this),\n beforeOpen: this.columnMenuBeforeOpen.bind(this),\n onClose: this.columnMenuOnClose.bind(this),\n beforeItemRender: this.beforeMenuItemRender.bind(this),\n beforeClose: this.columnMenuBeforeClose.bind(this)\n });\n this.columnMenu.appendTo(this.element);\n this.wireFilterEvents();\n };\n ColumnMenu.prototype.wireFilterEvents = function () {\n if (!Browser.isDevice && this.isFilterItemAdded()) {\n EventHandler.add(this.element, 'mouseover', this.appendFilter, this);\n }\n };\n ColumnMenu.prototype.unwireFilterEvents = function () {\n if (!Browser.isDevice && this.isFilterItemAdded()) {\n EventHandler.remove(this.element, 'mouseover', this.appendFilter);\n }\n };\n ColumnMenu.prototype.beforeMenuItemRender = function (args) {\n if (this.isChooserItem(args.item)) {\n var field = this.getKeyFromId(args.item.id, this.CHOOSER);\n var column = this.parent.getColumnByField(field);\n var check = createCheckBox(this.parent.createElement, false, {\n label: args.item.text,\n checked: column.visible\n });\n if (this.parent.enableRtl) {\n check.classList.add('e-rtl');\n }\n args.element.innerHTML = '';\n args.element.appendChild(check);\n }\n else if (args.item.id && this.getKeyFromId(args.item.id) === 'Filter') {\n args.element.appendChild(this.parent.createElement('span', { className: 'e-icons e-caret' }));\n args.element.className += 'e-filter-item e-menu-caret-icon';\n }\n };\n ColumnMenu.prototype.columnMenuBeforeClose = function (args) {\n var colChooser = args.event ? closest(args.event.target, '.e-menu-item') : null;\n if (!isNullOrUndefined(args.parentItem) &&\n this.getKeyFromId(args.parentItem.id) === 'ColumnChooser' &&\n colChooser && this.isChooserItem(colChooser)) {\n args.cancel = true;\n }\n else if (args.event && (closest(args.event.target, '.' + this.POP)\n || (args.event.currentTarget && args.event.currentTarget.activeElement &&\n parentsUntil(args.event.currentTarget.activeElement, 'e-filter-popup'))\n || parentsUntil(args.event.target, 'e-popup') ||\n (parentsUntil(args.event.target, 'e-popup-wrapper'))) && !Browser.isDevice) {\n args.cancel = true;\n }\n };\n ColumnMenu.prototype.isChooserItem = function (item) {\n return item.id && item.id.indexOf('_colmenu_') >= 0 &&\n this.getKeyFromId(item.id, this.CHOOSER).indexOf('_colmenu_') === -1;\n };\n ColumnMenu.prototype.columnMenuBeforeOpen = function (args) {\n args.column = this.targetColumn = this.getColumn();\n this.parent.trigger(events.columnMenuOpen, args);\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (this.ensureDisabledStatus(key) && !dItem.hide) {\n this.disableItems.push(item.text);\n }\n else if (item.hide) {\n this.hiddenItems.push(item.text);\n }\n }\n }\n this.columnMenu.enableItems(this.disableItems, false);\n this.columnMenu.hideItems(this.hiddenItems);\n };\n ColumnMenu.prototype.ensureDisabledStatus = function (item) {\n var _this = this;\n var status = false;\n switch (item) {\n case 'Group':\n if (!this.parent.allowGrouping || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) >= 0)) {\n 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 && !fromData) ?\n e.records : e)).executeLocal(new Query().select(field));\n var filteredValue = DataUtil.distinct(e, field, false);\n field = fromData ? column.field : column.foreignKeyField;\n filteredValue.forEach(function (obj) {\n if (obj && obj.getDay) {\n predicates.push(getDatePredicate({ field: field, operator: 'equal', value: obj, matchCase: false }));\n }\n else {\n predicates.push(new Predicate(field, 'equal', obj, false));\n }\n });\n }\n if (needQuery) {\n return predicates.length ? query.where(Predicate.or(predicates)) : query;\n }\n predicate = (predicates.length ? Predicate.or(predicates) : { predicates: [] });\n return predicate;\n };\n ForeignKey.prototype.genarateColumnQuery = function (column) {\n var gObj = this.parent;\n var query = new Query();\n var predicate = [];\n var queryColumn = this.isFiltered(column);\n if (queryColumn.isTrue) {\n query = this.filterQuery(query, queryColumn.column, true);\n }\n if (gObj.searchSettings.key.length) {\n var sSettings = gObj.searchSettings;\n query.search(sSettings.key, column.foreignKeyValue, sSettings.operator, sSettings.ignoreCase);\n }\n return query;\n };\n ForeignKey.prototype.isFiltered = function (column) {\n var filterColumn = this.parent.filterSettings.columns.filter(function (fColumn) {\n return (fColumn.field === column.foreignKeyValue);\n });\n return {\n column: filterColumn, isTrue: !!filterColumn.length\n };\n };\n ForeignKey.prototype.getModuleName = function () {\n return 'foreignKey';\n };\n ForeignKey.prototype.destroy = function () {\n _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","/**\n * Specifies HeatMaps Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.heatMapTitleFont = {\n size: '15px',\n fontWeight: '500',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisTitleFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\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.legendLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI',\n textOverflow: 'None',\n };\n /** @private */\n Theme.rectLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI',\n textOverflow: 'None',\n };\n})(Theme || (Theme = {}));\n/** @private */\nexport function getThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n heatMapTitle: '#ffffff',\n axisTitle: '#ffffff',\n axisLabel: '#ffffff',\n cellBorder: '#EEEEEE',\n background: '#000000',\n cellTextColor: '#000000',\n emptyCellColor: '#EEEEEE',\n legendLabel: '#ffffff',\n palette: [{ 'color': '#BEE7EE' },\n { 'color': '#85c4cf' },\n { 'color': '#4CA1AF' }]\n };\n break;\n default:\n style = {\n heatMapTitle: '#424242',\n axisTitle: '#424242',\n axisLabel: '#686868',\n cellBorder: '#EEEEEE',\n cellTextColor: '#000000',\n background: '#FFFFFF',\n emptyCellColor: '#EEEEEE',\n legendLabel: '#353535',\n palette: [{ 'color': '#BEE7EE' },\n { 'color': '#85c4cf' },\n { 'color': '#4CA1AF' }]\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})();\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 fonts in heat map.\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('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 heat map 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 borders in the heat map.\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 __decorate([\n Property('')\n ], Border.prototype, \"radius\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the mapping name for size and color in SizeAndColor type.\n */\nvar BubbleData = /** @class */ (function (_super) {\n __extends(BubbleData, _super);\n function BubbleData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], BubbleData.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], BubbleData.prototype, \"color\", void 0);\n return BubbleData;\n}(ChildProperty));\nexport { BubbleData };\n/**\n * class used to maintain Title styles.\n */\nvar Title = /** @class */ (function (_super) {\n __extends(Title, _super);\n function Title() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Title.prototype, \"text\", void 0);\n __decorate([\n Complex({}, Font)\n ], Title.prototype, \"textStyle\", void 0);\n return Title;\n}(ChildProperty));\nexport { Title };\n/**\n * class used to maintain palette information.\n */\nvar PaletteCollection = /** @class */ (function (_super) {\n __extends(PaletteCollection, _super);\n function PaletteCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], PaletteCollection.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], PaletteCollection.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], PaletteCollection.prototype, \"label\", void 0);\n return PaletteCollection;\n}(ChildProperty));\nexport { PaletteCollection };\n/**\n * Internal class used to maintain colorcollection.\n */\nvar ColorCollection = /** @class */ (function () {\n function ColorCollection(value, color, label) {\n this.value = value;\n this.color = color;\n this.label = label;\n }\n return ColorCollection;\n}());\nexport { ColorCollection };\n/**\n * class used to maintain color and value collection.\n */\nvar BubbleTooltipData = /** @class */ (function () {\n function BubbleTooltipData(mappingName, bubbleData, valueType) {\n this.mappingName = mappingName;\n this.bubbleData = bubbleData;\n this.valueType = valueType;\n }\n return BubbleTooltipData;\n}());\nexport { BubbleTooltipData };\n/**\n * Internal class used to maintain legend colorcollection.\n */\nvar LegendColorCollection = /** @class */ (function () {\n function LegendColorCollection(value, color, label, isHidden) {\n this.value = value;\n this.color = color;\n this.label = label;\n this.isHidden = isHidden;\n }\n return LegendColorCollection;\n}());\nexport { LegendColorCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, extend, ChildProperty, Collection, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ColorCollection, LegendColorCollection, PaletteCollection } from '../model/base';\nimport { PaletterColor } from './helper';\n/**\n * Configures the color property in Heatmap.\n */\nvar PaletteSettings = /** @class */ (function (_super) {\n __extends(PaletteSettings, _super);\n function PaletteSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([{}], PaletteCollection)\n ], PaletteSettings.prototype, \"palette\", void 0);\n __decorate([\n Property('Gradient')\n ], PaletteSettings.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], PaletteSettings.prototype, \"emptyPointColor\", void 0);\n return PaletteSettings;\n}(ChildProperty));\nexport { PaletteSettings };\n/**\n * Helper class for colormapping\n */\nvar RgbColor = /** @class */ (function () {\n function RgbColor(r, g, b) {\n this.R = r;\n this.G = g;\n this.B = b;\n }\n return RgbColor;\n}());\nexport { RgbColor };\nvar CellColor = /** @class */ (function () {\n function CellColor(heatMap) {\n this.heatMap = heatMap;\n }\n /**\n * To convert hexa color to RGB.\n * @return {RGB}\n * @private\n */\n CellColor.prototype.convertToRGB = function (value, colorMapping) {\n var previousOffset = colorMapping[0].value;\n var nextOffset = 0;\n for (var i = 1; i < colorMapping.length; i++) {\n var offset = Number(colorMapping[i].value);\n if (value <= offset) {\n nextOffset = offset;\n break;\n }\n else {\n nextOffset = offset;\n previousOffset = offset;\n }\n }\n var percent = 0;\n var full = nextOffset - previousOffset;\n percent = (value - previousOffset) / full;\n var previousColor = this.getEqualColor(colorMapping, previousOffset);\n var nextColor = this.getEqualColor(colorMapping, nextOffset);\n return this.getPercentageColor(percent, previousColor, nextColor);\n };\n /**\n * To convert RGB to HEX.\n * @return {string}\n * @private\n */\n CellColor.prototype.rgbToHex = function (r, g, b) {\n return '#' + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);\n };\n /**\n * To convert Component to HEX.\n * @return {string}\n * @private\n */\n CellColor.prototype.componentToHex = function (c) {\n var hex = c.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n /**\n * To get similar color.\n * @return {string}\n * @private\n */\n CellColor.prototype.getEqualColor = function (list, offset) {\n for (var i = 0; i < list.length; i++) {\n if (Number(list[i].value) === offset) {\n var color = list[i].color;\n if (color.indexOf('rgb') !== -1) {\n color = this.convertToHex(color);\n }\n else if (color.indexOf('#') === -1) {\n color = '#FFFFFF';\n }\n return color;\n }\n }\n return '#00000';\n };\n /**\n * To convert RGB to HEX.\n * @return {string}\n * @private\n */\n CellColor.prototype.convertToHex = function (color) {\n var itemColor = color.substr(3);\n itemColor = itemColor.split('(')[1].split(')')[0];\n var colorSplit = itemColor.split(',');\n itemColor = this.rgbToHex(parseInt(colorSplit[0], 10), parseInt(colorSplit[1], 10), parseInt(colorSplit[2], 10));\n return itemColor;\n };\n /**\n * To get RGB for percentage value.\n * @return {RGB}\n * @private\n */\n CellColor.prototype.getPercentageColor = function (percent, previous, next) {\n var nextColor = next.split('#')[1];\n var prevColor = previous.split('#')[1];\n var r = this.getPercentage(percent, parseInt(prevColor.substr(0, 2), 16), parseInt(nextColor.substr(0, 2), 16));\n var g = this.getPercentage(percent, parseInt(prevColor.substr(2, 2), 16), parseInt(nextColor.substr(2, 2), 16));\n var b = this.getPercentage(percent, parseInt(prevColor.substr(4, 2), 16), parseInt(nextColor.substr(4, 2), 16));\n return new RgbColor(r, g, b);\n };\n /**\n * To convert numbet to percentage.\n * @return {RGB}\n * @private\n */\n CellColor.prototype.getPercentage = function (percent, previous, next) {\n var full = next - previous;\n return Math.round((previous + (full * percent)));\n };\n /**\n * To get complete color Collection.\n * @private\n */\n CellColor.prototype.getColorCollection = function () {\n var heatMap = this.heatMap;\n heatMap.colorCollection = [];\n heatMap.legendColorCollection = [];\n var range;\n var minValue = heatMap.bubbleSizeWithColor ? heatMap.minColorValue : heatMap.dataSourceMinValue;\n var maxValue = heatMap.bubbleSizeWithColor ? heatMap.maxColorValue : heatMap.dataSourceMaxValue;\n heatMap.emptyPointColor = heatMap.paletteSettings.emptyPointColor ? heatMap.paletteSettings.emptyPointColor :\n heatMap.themeStyle.emptyCellColor;\n var tempcolorMapping = this.orderbyOffset(heatMap.paletteSettings.palette && heatMap.paletteSettings.palette.length > 1 ?\n heatMap.paletteSettings.palette : heatMap.themeStyle.palette);\n if (!tempcolorMapping.isCompact) {\n if (heatMap.paletteSettings.type === 'Gradient') {\n range = (maxValue - minValue) / (tempcolorMapping.offsets.length - 1);\n }\n else {\n range = (maxValue - minValue) / (tempcolorMapping.offsets.length);\n }\n if (tempcolorMapping.offsets.length >= 2) {\n for (var index = 0; index < tempcolorMapping.offsets.length; index++) {\n heatMap.colorCollection.push(new ColorCollection(Math.round(((minValue) + (index * range)) * 100) / 100, tempcolorMapping.offsets[index].color, tempcolorMapping.offsets[index].label));\n heatMap.legendColorCollection.push(new LegendColorCollection(Math.round(((minValue) + (index * range)) * 100) / 100, tempcolorMapping.offsets[index].color, tempcolorMapping.offsets[index].label, false));\n }\n }\n }\n else {\n heatMap.colorCollection = tempcolorMapping.offsets;\n heatMap.legendColorCollection = extend([], tempcolorMapping.offsets, null, true);\n }\n this.updateLegendColorCollection(minValue, maxValue);\n };\n /**\n * To update legend color Collection.\n * @private\n */\n CellColor.prototype.updateLegendColorCollection = function (minValue, maxValue) {\n if (minValue < this.heatMap.legendColorCollection[0].value) {\n this.heatMap.legendColorCollection.unshift(new LegendColorCollection(minValue, this.heatMap.legendColorCollection[0].color, this.heatMap.legendColorCollection[0].label, true));\n }\n if (maxValue > this.heatMap.legendColorCollection[this.heatMap.legendColorCollection.length - 1].value) {\n this.heatMap.legendColorCollection.push(new LegendColorCollection(maxValue, this.heatMap.legendColorCollection[this.heatMap.legendColorCollection.length - 1].color, this.heatMap.legendColorCollection[this.heatMap.legendColorCollection.length - 1].label, true));\n }\n };\n /**\n * To get ordered palette color collection.\n * @private\n */\n CellColor.prototype.orderbyOffset = function (offsets) {\n var returnCollection = new PaletterColor();\n var key = 'value';\n returnCollection.isCompact = true;\n // tslint:disable-next-line:no-any \n returnCollection.offsets = offsets.sort(function (a, b) {\n if (!isNullOrUndefined(a[key]) && !isNullOrUndefined(b[key])) {\n return a[key] - b[key];\n }\n else {\n returnCollection.isCompact = false;\n return a;\n }\n });\n if (!returnCollection.isCompact) {\n returnCollection.offsets = this.heatMap.paletteSettings.palette && this.heatMap.paletteSettings.palette.length > 1 ?\n this.heatMap.paletteSettings.palette : this.heatMap.themeStyle.palette;\n }\n return returnCollection;\n };\n /**\n * To get color depends to value.\n * @private\n */\n CellColor.prototype.getColorByValue = function (text) {\n var color = '';\n var rbg;\n var compareValue = 0;\n if (text.toString() !== '') {\n if (this.heatMap.cellSettings.tileType === 'Bubble' &&\n (this.heatMap.cellSettings.bubbleType === 'Size' || this.heatMap.cellSettings.bubbleType === 'Sector')) {\n color = this.heatMap.colorCollection[0].color;\n }\n else if (this.heatMap.paletteSettings.type === 'Fixed') {\n for (var y = 0; y < this.heatMap.colorCollection.length; y++) {\n compareValue = this.heatMap.colorCollection[y + 1] ? this.heatMap.colorCollection[y + 1].value :\n this.heatMap.colorCollection[y].value;\n if (text < compareValue || (text >= compareValue && y === this.heatMap.colorCollection.length - 1)) {\n color = this.heatMap.colorCollection[y].color;\n break;\n }\n }\n }\n else {\n if (text < this.heatMap.colorCollection[0].value) {\n color = this.heatMap.colorCollection[0].color;\n }\n else if (text > this.heatMap.colorCollection[this.heatMap.colorCollection.length - 1].value) {\n color = this.heatMap.colorCollection[this.heatMap.colorCollection.length - 1].color;\n }\n else {\n rbg = this.convertToRGB(text, this.heatMap.colorCollection);\n color = this.rgbToHex(rbg.R, rbg.G, rbg.B);\n }\n }\n }\n else {\n color = this.heatMap.emptyPointColor;\n }\n return color;\n };\n return CellColor;\n}());\nexport { CellColor };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 * HeatMap Axis file\n */\nimport { Property, Complex, ChildProperty, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { Font, Title } from '../model/base';\nimport { Theme } from '../model/theme';\nimport { Rect, measureText, Size, rotateTextSize, increaseDateTimeInterval } from '../utils/helper';\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.rect = new Rect(undefined, undefined, 0, 0);\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n /** @private */\n _this.maxLabelSize = new Size(0, 0);\n /** @private */\n _this.titleSize = new Size(0, 0);\n /** @private */\n _this.axisLabels = [];\n /** @private */\n _this.tooltipLabels = [];\n /** @private */\n _this.labelValue = [];\n /** @private */\n _this.axisLabelSize = 0;\n /** @private */\n _this.axisLabelInterval = 0;\n /** @private */\n _this.dateTimeAxisLabelInterval = [];\n /** @private */\n _this.maxLength = 0;\n /** @private */\n _this.min = 0;\n /** @private */\n _this.max = 0;\n /** @private */\n _this.isIntersect = false;\n return _this;\n }\n /**\n * measure the axis title and label size\n * @param axis\n * @param heatmap\n * @private\n */\n Axis.prototype.computeSize = function (axis, heatmap) {\n var width = 0;\n var innerPadding = 10;\n this.titleSize = axis.getTitleSize(axis, innerPadding);\n this.maxLabelSize = axis.getMaxLabelSize(axis, heatmap);\n };\n Axis.prototype.getTitleSize = function (axis, innerPadding) {\n var titleSize = new Size(0, 0);\n if (this.title.text) {\n titleSize = measureText(this.title.text, this.title.textStyle);\n titleSize.height += innerPadding;\n }\n if (axis.opposedPosition) {\n this.farSizes.push(titleSize.height);\n }\n else {\n this.nearSizes.push(titleSize.height);\n }\n return titleSize;\n };\n Axis.prototype.getMaxLabelSize = function (axis, heatmap) {\n var labelSize = new Size(0, 0);\n var labels = this.axisLabels;\n axis.angle = axis.labelRotation;\n axis.isIntersect = false;\n if (axis.orientation === 'Horizontal' && (axis.labelIntersectAction === 'Rotate45' ||\n (axis.labelRotation % 180 === 0 && axis.labelIntersectAction === 'Trim'))) {\n var interval = heatmap.initialClipRect.width / axis.axisLabels.length;\n var startX = heatmap.initialClipRect.x + ((!axis.isInversed) ? 0 : heatmap.initialClipRect.width);\n var previousEnd = void 0;\n for (var i = 0, len = labels.length; i < len; i++) {\n var label = labels[i];\n var elementSize = measureText(label, axis.textStyle);\n var startPoint = startX + (!axis.isInversed ?\n ((interval - elementSize.width) / 2) : -((interval + elementSize.width) / 2));\n startPoint = startPoint < heatmap.initialClipRect.x ? heatmap.initialClipRect.x : startPoint;\n var endPoint = startPoint + elementSize.width;\n if (isNullOrUndefined(previousEnd)) {\n previousEnd = endPoint;\n }\n else {\n if (startPoint < previousEnd) {\n if (axis.labelIntersectAction === 'Rotate45') {\n axis.angle = 45;\n }\n else {\n axis.isIntersect = true;\n }\n break;\n }\n previousEnd = endPoint;\n }\n startX += axis.isInversed ? -interval : interval;\n }\n }\n for (var i = 0; i < labels.length; i++) {\n var size = (axis.angle % 180 === 0) ?\n measureText(labels[i], axis.textStyle) : rotateTextSize(axis.textStyle, labels[i], axis.angle);\n labelSize.width = (labelSize.width > size.width) ? labelSize.width : size.width;\n labelSize.height = (labelSize.height > size.height) ? labelSize.height : size.height;\n }\n if (axis.opposedPosition) {\n this.farSizes.push((axis.orientation === 'Horizontal') ? labelSize.height : labelSize.width);\n }\n else {\n this.nearSizes.push((axis.orientation === 'Horizontal') ? labelSize.height : labelSize.width);\n }\n return labelSize;\n };\n /**\n * Generate the axis lables for numeric axis\n * @param heatmap\n * @private\n */\n Axis.prototype.calculateNumericAxisLabels = function (heatmap) {\n //Axis Min\n var min = 0;\n var max = 0;\n var interval = this.interval ? this.interval : 1;\n var adaptorMin;\n var adaptorMax;\n if (heatmap.adaptorModule && heatmap.isCellData) {\n adaptorMin = this.orientation === 'Horizontal' ?\n heatmap.adaptorModule.adaptiveXMinMax.min : heatmap.adaptorModule.adaptiveYMinMax.min;\n adaptorMax = this.orientation === 'Horizontal' ?\n heatmap.adaptorModule.adaptiveXMinMax.max : heatmap.adaptorModule.adaptiveYMinMax.max;\n }\n min = !isNullOrUndefined(this.minimum) ? this.minimum : ((adaptorMin) ? adaptorMin : 0);\n max = !isNullOrUndefined(this.maximum) ? this.maximum :\n ((adaptorMax) ? adaptorMax : (this.maxLength * this.increment));\n var temp;\n if (this.minimum && this.maximum && min > max) {\n temp = min;\n min = max;\n max = temp;\n }\n max = !isNullOrUndefined(this.maximum) ? max : (adaptorMax ? adaptorMax : (max + min));\n var format = this.labelFormat;\n var isCustom = format.match('{value}') !== null;\n this.format = heatmap.intl.getNumberFormat({\n format: isCustom ? '' : format\n });\n for (var i = min; i <= max; i = i + (interval * this.increment)) {\n var value = this.formatValue(isCustom, format, i);\n this.axisLabels.push(value);\n }\n this.min = 0;\n this.axisLabelSize = Math.floor(((max - min) / this.increment) + 1);\n this.max = this.axisLabelSize - 1;\n this.axisLabelInterval = interval;\n for (var i = min; i <= max; i = i + this.increment) {\n var value = this.formatValue(isCustom, format, i);\n this.tooltipLabels.push(value);\n this.labelValue.push(i);\n }\n };\n /**\n * Generate the axis lables for category axis\n * @private\n */\n Axis.prototype.calculateCategoryAxisLabels = function () {\n var labels = this.labels ? this.labels : [];\n var min = !isNullOrUndefined(this.minimum) ? this.minimum : 0;\n var max = !isNullOrUndefined(this.maximum) ? this.maximum : this.maxLength;\n var interval = this.interval ? this.interval : 1;\n var temp;\n if (!isNullOrUndefined(this.minimum) && !isNullOrUndefined(this.maximum) && min > max) {\n temp = min;\n min = max;\n max = temp;\n }\n if (labels && labels.length > 0) {\n for (var i = min; i <= max; i = i + interval) {\n var value = labels[i] ? labels[i].toString() : i.toString();\n this.axisLabels.push(value);\n }\n }\n else {\n for (var i = min; i <= max; i = i + interval) {\n this.axisLabels.push(i.toString());\n }\n }\n for (var i = min; i <= max; i++) {\n this.tooltipLabels.push(labels[i] ? labels[i].toString() : i.toString());\n this.labelValue.push(labels[i] ? labels[i].toString() : i.toString());\n }\n this.min = min;\n this.max = max;\n this.axisLabelSize = max - min + 1;\n this.axisLabelInterval = interval;\n };\n /**\n * Generate the axis labels for date time axis.\n * @param heatmap\n * @private\n */\n Axis.prototype.calculateDateTimeAxisLabel = function (heatmap) {\n var interval = this.interval ? this.interval : 1;\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = heatmap.intl.getDateParser(option);\n var dateFormatter = heatmap.intl.getDateFormat(option);\n var min;\n var max;\n var adaptorMin = null;\n var adaptorMax = null;\n if (heatmap.adaptorModule && heatmap.isCellData) {\n adaptorMin = this.orientation === 'Horizontal' ? heatmap.adaptorModule.adaptiveXMinMax.min :\n heatmap.adaptorModule.adaptiveYMinMax.min;\n adaptorMax = this.orientation === 'Horizontal' ? heatmap.adaptorModule.adaptiveXMinMax.max :\n heatmap.adaptorModule.adaptiveYMinMax.max;\n }\n var minimum = this.minimum ? this.minimum : (adaptorMin ? adaptorMin : null);\n var maximum = this.maximum ? this.maximum : (adaptorMax ? adaptorMax : null);\n if (minimum === null && maximum === null) {\n min = 0;\n max = this.maxLength * this.increment;\n for (var i = min; i <= max; i = i + (interval * this.increment)) {\n this.axisLabels.push(i.toString());\n this.tooltipLabels.push(i.toString());\n this.labelValue.push(i.toString());\n }\n this.min = 0;\n this.max = this.maxLength;\n this.axisLabelSize = (max - min) / this.increment + 1;\n this.axisLabelInterval = interval;\n }\n else {\n if (minimum !== null && maximum === null) {\n min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: minimum }).val))));\n max = increaseDateTimeInterval(min, this.maxLength, this.intervalType, this.increment).getTime();\n }\n else if (minimum === null && maximum !== null) {\n max = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: maximum }).val))));\n min = increaseDateTimeInterval(max, -this.maxLength, this.intervalType, this.increment).getTime();\n }\n else {\n min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: minimum }).val))));\n max = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: maximum }).val))));\n }\n this.format = heatmap.intl.getDateFormat({\n format: this.labelFormat, skeleton: this.getSkeleton()\n });\n var tempInterval = min;\n while (tempInterval <= max) {\n var value = this.format(new Date(tempInterval));\n this.axisLabels.push(value);\n if (this.showLabelOn !== 'None') {\n interval = this.calculateLabelInterval(tempInterval);\n this.dateTimeAxisLabelInterval.push(interval);\n }\n tempInterval = increaseDateTimeInterval(tempInterval, interval, this.intervalType, this.increment).getTime();\n }\n this.min = 0;\n this.axisLabelInterval = interval;\n this.axisLabelSize = this.getTotalLabelLength(min, max); // this.tooltipLabels.length;\n this.max = this.axisLabelSize - 1;\n tempInterval = min;\n while (tempInterval <= max) {\n var value = this.format(new Date(tempInterval));\n this.tooltipLabels.push(value);\n this.labelValue.push(new Date(tempInterval));\n tempInterval = increaseDateTimeInterval(tempInterval, 1, this.intervalType, this.increment).getTime();\n }\n }\n };\n Axis.prototype.calculateLabelInterval = function (interval) {\n var year = new Date(interval).getFullYear();\n var month = new Date(interval).getMonth() + 1;\n var day = new Date(interval).getDate();\n var numberOfDays;\n var tempInterval;\n if (this.showLabelOn === 'Years' || this.showLabelOn === 'Months') {\n if (this.showLabelOn === 'Years' && this.intervalType === 'Months') {\n tempInterval = Math.ceil(12 / this.increment);\n }\n else {\n numberOfDays = this.showLabelOn === 'Years' ? year % 4 === 0 ? 366 : 365 : new Date(year, month, 0).getDate();\n numberOfDays += 1 - day;\n tempInterval = this.intervalType === 'Days' ? Math.ceil(numberOfDays / this.increment) : this.intervalType === 'Hours' ?\n Math.ceil((numberOfDays * 24) / this.increment) : this.intervalType === 'Minutes' ?\n Math.ceil((numberOfDays * 24 * 60) / this.increment) : 1;\n }\n }\n else if (this.showLabelOn === 'Days') {\n tempInterval = this.intervalType === 'Hours' ? Math.ceil(24 / this.increment) : this.intervalType === 'Minutes' ?\n Math.ceil((24 * 60) / this.increment) : 1;\n }\n else if (this.showLabelOn === 'Hours') {\n var minutes = new Date(interval).getMinutes();\n tempInterval = this.intervalType === 'Minutes' ? Math.ceil((60 - minutes) / this.increment) : 1;\n }\n else {\n tempInterval = 1;\n }\n return tempInterval;\n };\n /**\n * @private\n */\n Axis.prototype.getSkeleton = function () {\n var skeleton;\n if (this.intervalType === 'Years') {\n skeleton = 'yMMM';\n }\n else if (this.intervalType === 'Months') {\n skeleton = 'MMMd';\n }\n else if (this.intervalType === 'Days') {\n skeleton = 'yMd';\n }\n else if (this.intervalType === 'Hours') {\n skeleton = 'EHm';\n }\n else if (this.intervalType === 'Minutes') {\n skeleton = 'Hms';\n }\n else {\n skeleton = 'Hms';\n }\n return skeleton;\n };\n /**\n * Formatted the axis label.\n * @private\n */\n Axis.prototype.formatValue = function (isCustom, format, tempInterval) {\n return isCustom ? format.replace('{value}', this.format(tempInterval))\n : this.format(tempInterval);\n };\n /** @private */\n Axis.prototype.getTotalLabelLength = function (min, max) {\n var length = 0;\n var minimum = new Date(min);\n var maximum = new Date(max);\n var difference;\n var days;\n switch (this.intervalType) {\n case 'Years':\n var years = ((maximum.getFullYear() - minimum.getFullYear()) / this.increment) + 1;\n length = Math.floor(years);\n break;\n case 'Months':\n var months = (maximum.getFullYear() - minimum.getFullYear()) * 12;\n months -= minimum.getMonth();\n months += maximum.getMonth();\n length = months <= 0 ? 1 : Math.floor((months / this.increment) + 1);\n break;\n case 'Days':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n days = Math.floor(difference / (1000 * 3600 * 24));\n length = Math.floor((days / this.increment) + 1);\n break;\n case 'Hours':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n var hours = Math.floor(difference / (1000 * 3600));\n length = Math.floor(hours / this.increment) + 1;\n break;\n case 'Minutes':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n var minutes = Math.floor(difference / (1000 * 60));\n length = Math.floor(minutes / this.increment) + 1;\n break;\n }\n return length;\n };\n __decorate([\n Complex({ text: '', textStyle: Theme.axisTitleFont }, Title)\n ], Axis.prototype, \"title\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"labels\", void 0);\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Axis.prototype, \"textStyle\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"labelRotation\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property('Category')\n ], Axis.prototype, \"valueType\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"increment\", void 0);\n __decorate([\n Property('None')\n ], Axis.prototype, \"showLabelOn\", 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 Property('')\n ], Axis.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('Days')\n ], Axis.prototype, \"intervalType\", void 0);\n __decorate([\n Property('Trim')\n ], Axis.prototype, \"labelIntersectAction\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n","import { Rect, measureText, TextOption, rotateTextSize, textTrim, CanvasTooltip } from '../utils/helper';\nimport { sum, titlePositionX, LineOption, Line, DrawSvgCanvas, TextBasic, titlePositionY } from '../utils/helper';\nimport { extend, Browser } from '@syncfusion/ej2-base';\nvar AxisHelper = /** @class */ (function () {\n function AxisHelper(heatMap) {\n this.heatMap = heatMap;\n this.padding = 10;\n this.drawSvgCanvas = new DrawSvgCanvas(heatMap);\n }\n /**\n * To render the x and y axis.\n * @private\n */\n AxisHelper.prototype.renderAxes = function () {\n this.initialClipRect = this.heatMap.initialClipRect;\n var heatMap = this.heatMap;\n var axisElement;\n var element;\n if (!heatMap.enableCanvasRendering) {\n axisElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'AxisCollection' });\n }\n var axes = this.heatMap.axisCollections;\n for (var i = 0, len = axes.length; i < len; i++) {\n var axis = axes[i];\n var optionsLine = {};\n if (axis.orientation === 'Horizontal') {\n if (!heatMap.enableCanvasRendering) {\n element = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'XAxisGroup' });\n }\n this.drawXAxisLine(element, axis);\n this.drawXAxisTitle(axis, element, axis.rect);\n this.drawXAxisLabels(axis, element, axis.rect);\n }\n else {\n element = heatMap.renderer.createGroup({ id: heatMap.element.id + 'YAxisGroup' });\n this.drawYAxisLine(element, axis);\n this.drawYAxisTitle(axis, element, axis.rect);\n this.drawYAxisLabels(axis, element, axis.rect);\n }\n if (!heatMap.enableCanvasRendering) {\n axisElement.appendChild(element);\n }\n }\n if (!heatMap.enableCanvasRendering) {\n this.heatMap.svgObject.appendChild(axisElement);\n }\n };\n AxisHelper.prototype.drawXAxisLine = function (parent, axis) {\n var y = this.initialClipRect.y + (!axis.opposedPosition ? this.initialClipRect.height : 0);\n var line = new LineOption(this.heatMap.element.id + '_XAxisLine', new Line(this.initialClipRect.x, y, this.initialClipRect.x + this.initialClipRect.width, y), 'transparent', 0);\n this.drawSvgCanvas.drawLine(line, parent);\n };\n AxisHelper.prototype.drawYAxisLine = function (parent, axis) {\n var x = this.initialClipRect.x + ((!axis.opposedPosition) ? 0 : this.initialClipRect.width);\n var line = new LineOption(this.heatMap.element.id + '_YAxisLine', new Line(x, this.initialClipRect.y, x, this.initialClipRect.height + this.initialClipRect.y), 'transparent', 0);\n this.drawSvgCanvas.drawLine(line, parent);\n };\n AxisHelper.prototype.drawXAxisTitle = function (axis, parent, rect) {\n var y = rect.y + (!axis.opposedPosition ?\n (axis.maxLabelSize.height + this.padding) : -(axis.maxLabelSize.height + this.padding));\n if (axis.title.text) {\n var heatMap = this.heatMap;\n var title = axis.title;\n var elementSize = measureText(title.text, title.textStyle);\n var padding = this.padding;\n var anchor = title.textStyle.textAlignment === 'Near' ? 'start' :\n title.textStyle.textAlignment === 'Far' ? 'end' : 'middle';\n padding = axis.opposedPosition ? -(padding + elementSize.height / 4) : (padding + (3 * elementSize.height / 4));\n var options = new TextOption(heatMap.element.id + '_XAxisTitle', new TextBasic(rect.x + titlePositionX(rect.width, 0, 0, title.textStyle), y + padding, anchor, title.text), title.textStyle, title.textStyle.color || heatMap.themeStyle.axisTitle);\n this.drawSvgCanvas.createText(options, parent, title.text);\n }\n };\n AxisHelper.prototype.drawYAxisTitle = function (axis, parent, rect) {\n if (axis.title.text) {\n var title = axis.title;\n var heatMap = this.heatMap;\n var labelRotation = (axis.opposedPosition) ? 90 : -90;\n var elementSize = measureText(title.text, title.textStyle);\n var anchor = title.textStyle.textAlignment === 'Near' ? 'start' :\n title.textStyle.textAlignment === 'Far' ? 'end' : 'middle';\n var padding = 10;\n padding = axis.opposedPosition ? padding : -padding;\n var x = rect.x + padding + ((axis.opposedPosition) ? axis.maxLabelSize.width : -axis.maxLabelSize.width);\n var y = rect.y + titlePositionY(rect, 0, 0, title.textStyle) + (axis.opposedPosition ? this.padding : -this.padding);\n var options = new TextOption(heatMap.element.id + '_YAxisTitle', new TextBasic(x, y - this.padding, anchor, title.text, labelRotation, 'rotate(' + labelRotation + ',' + (x) + ',' + (y) + ')', 'auto'), title.textStyle, title.textStyle.color || heatMap.themeStyle.axisTitle);\n if (!this.heatMap.enableCanvasRendering) {\n this.drawSvgCanvas.createText(options, parent, title.text);\n }\n else {\n this.drawSvgCanvas.canvasDrawText(options, title.text, x, y);\n }\n }\n };\n /**\n * Get the visible labels for both x and y axis\n * @private\n */\n AxisHelper.prototype.calculateVisibleLabels = function () {\n var heatmap = this.heatMap;\n var axis;\n var axisCollection = heatmap.axisCollections;\n for (var i = 0, len = axisCollection.length; i < len; i++) {\n axis = axisCollection[i];\n axis.axisLabels = [];\n axis.tooltipLabels = [];\n axis.dateTimeAxisLabelInterval = [];\n axis.labelValue = [];\n if (axis.valueType === 'Numeric') {\n axis.calculateNumericAxisLabels(this.heatMap);\n }\n else if (axis.valueType === 'DateTime') {\n axis.calculateDateTimeAxisLabel(this.heatMap);\n }\n else {\n axis.calculateCategoryAxisLabels();\n }\n axis.tooltipLabels = axis.isInversed ? axis.tooltipLabels.reverse() : axis.tooltipLabels;\n }\n };\n /**\n * Measure the title and labels rendering position for both X and Y axis.\n * @param rect\n * @private\n */\n AxisHelper.prototype.measureAxis = function (rect) {\n var heatmap = this.heatMap;\n var axis;\n var axisCollection = heatmap.axisCollections;\n for (var i = axisCollection.length - 1; i >= 0; i--) {\n axis = axisCollection[i];\n axis.nearSizes = [];\n axis.farSizes = [];\n axis.computeSize(axis, heatmap);\n if (!axis.opposedPosition) {\n if (axis.orientation === 'Horizontal') {\n rect.height -= (sum(axis.nearSizes) + this.padding);\n }\n else {\n rect.x += sum(axis.nearSizes) + this.padding;\n rect.width -= sum(axis.nearSizes) + this.padding;\n }\n }\n else {\n if (axis.orientation === 'Horizontal') {\n rect.y += sum(axis.farSizes) + this.padding;\n rect.height -= sum(axis.farSizes) + this.padding;\n }\n else {\n rect.width -= sum(axis.farSizes) + this.padding;\n }\n }\n }\n };\n /**\n * Calculate the X and Y axis line position\n * @param rect\n * @private\n */\n AxisHelper.prototype.calculateAxisSize = function (rect) {\n var heatmap = this.heatMap;\n var axis;\n var axisCollection = heatmap.axisCollections;\n for (var i = 0, len = axisCollection.length; i < len; i++) {\n var axis_1 = axisCollection[i];\n axis_1.rect = extend({}, rect, null, true);\n if (axis_1.orientation === 'Horizontal' && !axis_1.opposedPosition) {\n axis_1.rect.y = rect.y + rect.height;\n axis_1.rect.height = 0;\n }\n if (axis_1.orientation === 'Vertical' && axis_1.opposedPosition) {\n axis_1.rect.x = rect.x + rect.width;\n axis_1.rect.width = 0;\n }\n }\n };\n AxisHelper.prototype.drawXAxisLabels = function (axis, parent, rect) {\n var heatMap = this.heatMap;\n var labels = axis.axisLabels;\n var interval = rect.width / axis.axisLabelSize;\n var compactInterval = 0;\n var axisInterval = axis.interval ? axis.interval : 1;\n var tempintervel = rect.width / (axis.axisLabelSize / axis.axisLabelInterval);\n var temp = axis.axisLabelInterval;\n while (tempintervel < parseInt(axis.textStyle.size, 10)) {\n temp = temp + 1;\n tempintervel = rect.width / (axis.axisLabelSize / temp);\n }\n if (axis.axisLabelInterval < temp) {\n compactInterval = temp;\n labels = axis.tooltipLabels;\n axisInterval = temp;\n }\n var padding = 10;\n var lableStrtX = rect.x + (!axis.isInversed ? 0 : rect.width);\n var labelPadding;\n var angle = axis.angle;\n padding = this.padding;\n var anglePadding = ((angle === 90 || angle === -90)) ? -2 : 0;\n var labelElement;\n if (!heatMap.enableCanvasRendering) {\n labelElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'XAxisLabels' });\n }\n for (var i = 0, len = labels.length; i < len; i++) {\n var lableRect = new Rect(lableStrtX, rect.y, interval, rect.height);\n var label = (axis.labelIntersectAction === 'Trim' && axis.isIntersect) ? axis.valueType !== 'DateTime' ||\n axis.showLabelOn === 'None' ? textTrim(interval * axisInterval, labels[i], axis.textStyle) :\n textTrim(axis.dateTimeAxisLabelInterval[i] * interval, labels[i], axis.textStyle) : labels[i];\n var elementSize = measureText(label, axis.textStyle);\n var transform = void 0;\n labelPadding = (axis.opposedPosition) ?\n -(padding)\n : padding + (3 * (elementSize.height / 4));\n var x = lableRect.x + ((!axis.isInversed) ?\n (lableRect.width / 2) - (elementSize.width / 2) : -((lableRect.width / 2) + (elementSize.width / 2)));\n if (axis.labelIntersectAction === 'Trim') {\n x = (!axis.isInversed) ? (x >= lableRect.x ? x : lableRect.x) : (x > (lableStrtX - interval) ? x : (lableStrtX - interval));\n }\n else if (angle % 180 === 0) {\n x = x < rect.x ? rect.x : x;\n x = ((x + elementSize.width) > (rect.x + rect.width)) ? (rect.x + rect.width - elementSize.width) : x;\n }\n var y = rect.y + labelPadding;\n if (angle % 360 !== 0) {\n angle = (angle > 360) ? angle % 360 : angle;\n var rotateSize = rotateTextSize(axis.textStyle, label, angle);\n var diffHeight = axis.maxLabelSize.height - Math.ceil(rotateSize.height - elementSize.height);\n var yLocation = axis.opposedPosition ? diffHeight / 2 : -diffHeight / 2;\n x = lableRect.x + (axis.isInversed ? -(lableRect.width / 2) : (lableRect.width / 2));\n y = y + (axis.opposedPosition ? -(rotateSize.height / 2) : ((rotateSize.height - elementSize.height) / 2));\n transform = 'rotate(' + angle + ',' + x + ','\n + y + ')';\n }\n var options = new TextOption(heatMap.element.id + '_XAxis_Label' + i, new TextBasic(x, y, (angle % 360 === 0) ? 'start' : 'middle', label, angle, transform), axis.textStyle, axis.textStyle.color || heatMap.themeStyle.axisLabel);\n if (angle !== 0 && this.heatMap.enableCanvasRendering) {\n this.drawSvgCanvas.canvasDrawText(options, label);\n }\n else {\n this.drawSvgCanvas.createText(options, labelElement, label);\n }\n if (compactInterval === 0) {\n var labelInterval = (axis.valueType === 'DateTime' && axis.showLabelOn !== 'None') ?\n axis.dateTimeAxisLabelInterval[i] : axis.axisLabelInterval;\n lableStrtX = lableStrtX + (!axis.isInversed ? (labelInterval * interval) :\n -(labelInterval * interval));\n }\n else {\n lableStrtX = lableStrtX + (!axis.isInversed ? (compactInterval * interval) : -(compactInterval * interval));\n }\n if (label.indexOf('...') !== -1 && this.heatMap.enableCanvasRendering) {\n this.heatMap.tooltipCollection.push(new CanvasTooltip(labels[i], new Rect(x, y - elementSize.height, elementSize.width, elementSize.height)));\n }\n if (compactInterval !== 0) {\n i = i + (compactInterval - 1);\n }\n }\n if (!heatMap.enableCanvasRendering) {\n parent.appendChild(labelElement);\n }\n };\n AxisHelper.prototype.drawYAxisLabels = function (axis, parent, rect) {\n var heatMap = this.heatMap;\n var labels = axis.axisLabels;\n var interval = rect.height / axis.axisLabelSize;\n var compactInterval = 0;\n var tempintervel = rect.height / (axis.axisLabelSize / axis.axisLabelInterval);\n var temp = axis.axisLabelInterval;\n while (tempintervel < parseInt(axis.textStyle.size, 10)) {\n temp = temp + 1;\n tempintervel = rect.height / (axis.axisLabelSize / temp);\n }\n if (axis.axisLabelInterval < temp) {\n compactInterval = temp;\n labels = axis.tooltipLabels;\n }\n var padding = 10;\n var lableStartY = rect.y + (axis.isInversed ? 0 : rect.height);\n var anchor = axis.opposedPosition ? 'start' : 'end';\n padding = axis.opposedPosition ? padding : -padding;\n var labelElement;\n if (!heatMap.enableCanvasRendering) {\n labelElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'YAxisLabels' });\n }\n for (var i = 0, len = labels.length; i < len; i++) {\n var labelRect = new Rect(rect.x, lableStartY, rect.width, interval);\n var position = labelRect.height / 2; //titlePositionY(lableRect, 0, 0, axis.textStyle);\n var x = labelRect.x + padding;\n var y = labelRect.y + (axis.isInversed ? position : -position);\n var options = new TextOption(heatMap.element.id + '_YAxis_Label' + i, new TextBasic(x, y, anchor, labels[i], 0, 'rotate(' + 0 + ',' + (x) + ',' + (y) + ')', 'middle'), axis.textStyle, axis.textStyle.color || heatMap.themeStyle.axisLabel);\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n options.dy = '1ex';\n }\n this.drawSvgCanvas.createText(options, labelElement, labels[i]);\n if (compactInterval === 0) {\n var labelInterval = (axis.valueType === 'DateTime' && axis.showLabelOn !== 'None') ?\n axis.dateTimeAxisLabelInterval[i] : axis.axisLabelInterval;\n lableStartY = lableStartY + (axis.isInversed ? (labelInterval * interval) :\n -(labelInterval * interval));\n }\n else {\n lableStartY = lableStartY + (axis.isInversed ? (compactInterval * interval) : -(compactInterval * interval));\n i = i + (compactInterval - 1);\n }\n }\n if (!heatMap.enableCanvasRendering) {\n parent.appendChild(labelElement);\n }\n };\n return AxisHelper;\n}());\nexport { AxisHelper };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, extend, merge, Complex, Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Rect, TextBasic, Path, PathAttributes, RectOption, CircleOption, TextOption, CurrentRect, DrawSvgCanvas } from '../utils/helper';\nimport { convertHexToColor, colorNameToHex } from '../utils/helper';\nimport { CellColor } from '../utils/colorMapping';\nimport { Border, Font, BubbleTooltipData } from '../model/base';\nimport { Theme } from '../model/theme';\n/**\n * Configures the CellSettings property in the Heatmap.\n */\nvar CellSettings = /** @class */ (function (_super) {\n __extends(CellSettings, _super);\n function CellSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], CellSettings.prototype, \"showLabel\", void 0);\n __decorate([\n Property('')\n ], CellSettings.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], CellSettings.prototype, \"enableCellHighlighting\", void 0);\n __decorate([\n Complex({}, Border)\n ], CellSettings.prototype, \"border\", void 0);\n __decorate([\n Complex(Theme.rectLabelFont, Font)\n ], CellSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Rect')\n ], CellSettings.prototype, \"tileType\", void 0);\n __decorate([\n Property('Color')\n ], CellSettings.prototype, \"bubbleType\", void 0);\n __decorate([\n Property(false)\n ], CellSettings.prototype, \"isInversedBubbleSize\", void 0);\n return CellSettings;\n}(ChildProperty));\nexport { CellSettings };\nvar Series = /** @class */ (function () {\n function Series(heatMap) {\n this.heatMap = heatMap;\n this.drawSvgCanvas = new DrawSvgCanvas(this.heatMap);\n this.cellColor = new CellColor(this.heatMap);\n }\n /**\n * To render rect series.\n * @return {void}\n * @private\n */\n Series.prototype.renderRectSeries = function () {\n this.createSeriesGroup();\n var heatMap = this.heatMap;\n heatMap.xLength = heatMap.axisCollections[0].axisLabelSize;\n heatMap.yLength = heatMap.axisCollections[1].axisLabelSize; // Series Part\n var tempX = Math.round(heatMap.initialClipRect.x * 100) / 100;\n var tempY = Math.round(heatMap.initialClipRect.y * 100) / 100;\n var dataXIndex = 0;\n var dataYIndex = 0;\n var cellSetting = heatMap.cellSettings;\n var tempWidth = Math.round(((heatMap.initialClipRect.width -\n (cellSetting.border.width / 2)) / heatMap.xLength) * 100) / 100;\n var tempHeight = Math.round(((heatMap.initialClipRect.height -\n (cellSetting.border.width / 2)) / heatMap.yLength) * 100) / 100;\n var tempVal = 0;\n var themeStyle = heatMap.themeStyle;\n var tempBorder;\n var tempRectPosition = [];\n var circleRadius;\n tempBorder = cellSetting.border;\n var borderColor;\n this.rectPositionCollection = [];\n this.color = '';\n this.bubbleColorValue = [];\n if (heatMap.yAxis.opposedPosition) {\n tempX = Math.round((heatMap.initialClipRect.x + (parseFloat(tempBorder.width.toString()) / 2)) * 100) / 100;\n }\n circleRadius = this.getBubbleRadius(tempWidth, tempHeight);\n for (var x = 0; x < (heatMap.xLength * heatMap.yLength); x++) {\n this.setTextAndColor(dataXIndex, dataYIndex);\n var rectPosition = new CurrentRect(0, 0, 0, 0, 0, '');\n borderColor = tempBorder.color;\n if ((heatMap.renderingMode === 'Canvas' && parseFloat(tempBorder.width.toString()) === 0) || (!borderColor &&\n cellSetting.tileType === 'Bubble' && cellSetting.bubbleType === 'Sector')) {\n borderColor = this.color;\n }\n if (this.heatMap.bubbleSizeWithColor) {\n this.updateRectDetails(rectPosition, tempX, tempY, tempWidth, tempHeight, extend('', this.bubbleColorValue, null, true), x);\n }\n else {\n this.updateRectDetails(rectPosition, tempX, tempY, tempWidth, tempHeight, this.text, x);\n }\n if (cellSetting.tileType === 'Rect') {\n this.renderTileCell(rectPosition, tempBorder, x, this.color, borderColor);\n this.updateLabelVisibleStatus(tempWidth, tempHeight);\n }\n else {\n if (cellSetting.bubbleType === 'Color') {\n this.renderBubbleCell(rectPosition, tempBorder, x, this.color, borderColor, circleRadius);\n this.updateLabelVisibleStatus((circleRadius * 2) - 12, (circleRadius * 2) - 6); // 6, 12 - circle padding\n }\n else if (!isNullOrUndefined(this.text) && (cellSetting.bubbleType === 'Size' || cellSetting.bubbleType === 'SizeAndColor')\n && this.text.toString() !== '') {\n var tempCircleRadius = this.getRadiusBypercentage(parseFloat(this.text.toString()), heatMap.dataSourceMinValue, heatMap.dataSourceMaxValue, circleRadius);\n this.renderBubbleCell(rectPosition, tempBorder, x, this.color, borderColor, tempCircleRadius);\n this.updateLabelVisibleStatus((tempCircleRadius * 2) - 12, (tempCircleRadius * 2) - 6);\n }\n else if (cellSetting.bubbleType === 'Sector' && !isNullOrUndefined(this.text) && this.text.toString() !== '') {\n this.renderSectorCell(rectPosition, tempBorder, x.toString(), this.color, borderColor, circleRadius, this.text);\n this.checkLabelXDisplay = false;\n this.checkLabelYDisplay = false;\n }\n }\n tempRectPosition.push(rectPosition);\n if (cellSetting.showLabel && this.checkLabelYDisplay && this.checkLabelXDisplay) {\n var displayText = this.getFormatedText(this.text, cellSetting.format);\n var themeCellTextStyle = cellSetting.textStyle;\n var options = new TextOption(heatMap.element.id + '_HeatMapRectLabels_' + x, new TextBasic(Math.round((tempX + tempWidth / 2) * 100) / 100, Math.round((tempY + tempHeight / 2) * 100) / 100, 'middle', displayText, null, null, 'middle'), themeCellTextStyle, themeCellTextStyle.color || this.getSaturatedColor(this.color));\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n options.dy = this.heatMap.cellSettings.tileType === 'Bubble' ? '0.5ex' : '1ex';\n }\n this.drawSvgCanvas.createText(options, this.containerTextObject, displayText);\n }\n if (tempVal === heatMap.xLength - 1) {\n tempY = Math.round((tempY + tempHeight) * 100) / 100;\n tempVal = 0;\n dataYIndex = 0;\n if (heatMap.yAxis.opposedPosition) {\n tempX = Math.round((heatMap.initialClipRect.x + (parseFloat(tempBorder.width.toString()) / 2)) * 100) / 100;\n }\n else {\n tempX = Math.round(heatMap.initialClipRect.x * 100) / 100;\n }\n this.rectPositionCollection.push(tempRectPosition);\n tempRectPosition = [];\n dataXIndex++;\n }\n else {\n tempX = Math.round((tempX + tempWidth) * 100) / 100;\n tempVal++;\n dataYIndex++;\n }\n }\n if (!heatMap.enableCanvasRendering) {\n heatMap.svgObject.appendChild(this.containerRectObject);\n if (cellSetting.showLabel && !(cellSetting.tileType === 'Bubble' && cellSetting.bubbleType === 'Sector')) {\n heatMap.svgObject.appendChild(this.containerTextObject);\n }\n }\n };\n /**\n * To set color and text details.\n * @private\n */\n Series.prototype.setTextAndColor = function (dataXIndex, dataYIndex) {\n var cellSetting = this.heatMap.cellSettings;\n this.bubbleColorValue = [];\n var adaptData = this.heatMap.dataSource;\n // tslint:disable-next-line:no-any\n var clonedDataSource = this.heatMap.clonedDataSource;\n if (this.heatMap.bubbleSizeWithColor) {\n this.text = !isNullOrUndefined(clonedDataSource[dataXIndex][dataYIndex][0]) &&\n clonedDataSource[dataXIndex][dataYIndex][0].toString() !== '' ? clonedDataSource[dataXIndex][dataYIndex][0] : '';\n this.color = !isNullOrUndefined(clonedDataSource[dataXIndex][dataYIndex][1]) &&\n clonedDataSource[dataXIndex][dataYIndex][1].toString() !== '' ?\n this.cellColor.getColorByValue(clonedDataSource[dataXIndex][dataYIndex][1])\n : this.heatMap.isColorValueExist ? this.heatMap.emptyPointColor : this.cellColor.getColorByValue(this.text);\n var tempBubbleCollection = new BubbleTooltipData(adaptData.isJsonData && adaptData.adaptorType === 'Cell' ? this.heatMap.dataSource.bubbleDataMapping.size : null, this.text, 'Size');\n this.bubbleColorValue.push(tempBubbleCollection);\n this.bubbleColorValue.push({\n mappingName: adaptData.isJsonData && adaptData.adaptorType === 'Cell' ?\n this.heatMap.dataSource.bubbleDataMapping.color : null,\n bubbleData: !isNullOrUndefined(clonedDataSource[dataXIndex][dataYIndex][1]) &&\n clonedDataSource[dataXIndex][dataYIndex][1].toString() !== '' ? clonedDataSource[dataXIndex][dataYIndex][1] : '',\n valueType: 'Color'\n });\n }\n else {\n this.text = clonedDataSource[dataXIndex][dataYIndex];\n this.color = this.cellColor.getColorByValue(this.text);\n }\n };\n /**\n * To update rect details.\n * @private\n */\n Series.prototype.createSeriesGroup = function () {\n if (!this.heatMap.enableCanvasRendering) {\n this.containerRectObject = this.heatMap.renderer.createGroup({\n id: this.heatMap.element.id + '_Container_RectGroup',\n x: this.heatMap.initialClipRect.x, y: this.heatMap.initialClipRect.y, transform: 'translate( 0, 0)'\n });\n if (this.heatMap.cellSettings.showLabel &&\n !(this.heatMap.cellSettings.tileType === 'Bubble' && this.heatMap.cellSettings.bubbleType === 'Sector')) {\n this.containerTextObject = this.heatMap.renderer.createGroup({ id: this.heatMap.element.id + '_Container_TextGroup', transform: 'translate( 0, 0)' });\n }\n }\n };\n /**\n * To update rect details.\n * @private\n */\n Series.prototype.updateRectDetails = function (rectPosition, tempX, tempY, tempWidth, tempHeight, text, x) {\n rectPosition.x = tempX;\n rectPosition.y = tempY;\n rectPosition.width = tempWidth;\n rectPosition.height = tempHeight;\n rectPosition.value = text;\n rectPosition.id = this.heatMap.element.id + '_HeatMapRect_' + x;\n };\n /**\n * To Render Tile Cell.\n * @private\n */\n Series.prototype.renderTileCell = function (rectPosition, tempBorder, x, color, borderColor) {\n var rect = new RectOption(this.heatMap.element.id + '_HeatMapRect_' + x, color, tempBorder, 1, new Rect(rectPosition.x, rectPosition.y, rectPosition.width, rectPosition.height), borderColor || this.heatMap.themeStyle.cellBorder, tempBorder.radius, tempBorder.radius);\n this.drawSvgCanvas.drawRectangle(rect, this.containerRectObject, true);\n };\n /**\n * To get bubble radius.\n * @private\n */\n Series.prototype.getBubbleRadius = function (width, height) {\n var radius = (width / 2) - 2;\n if (height / 2 < width / 2) {\n radius = (height / 2) - 2;\n }\n return radius < 0 ? 0 : radius;\n };\n /**\n * To Render Bubble Cell.\n * @private\n */\n Series.prototype.renderSectorCell = function (bubblePosition, tempBorder, x, color, borderColor, circleRadius, text) {\n var curve;\n var startAngle;\n var endAngle;\n var cX;\n var cY;\n var X1;\n var Y1;\n var tempcX;\n var tempcY;\n var pathBorderWidth;\n var centerX = Math.round((bubblePosition.x + (bubblePosition.width / 2)) * 100) / 100;\n var centerY = Math.round((bubblePosition.y + (bubblePosition.height / 2)) * 100) / 100;\n var tempColor = color;\n var sectorContibution = this.getRadiusBypercentage(text, this.heatMap.dataSourceMinValue, this.heatMap.dataSourceMaxValue, 360); // Circle total angle.\n for (var y = 0; y < 2; y++) {\n pathBorderWidth = parseFloat(tempBorder.width.toString());\n if (y === 0) {\n curve = sectorContibution >= 180 ? 1 : 0;\n startAngle = -90;\n if (sectorContibution === 0) {\n endAngle = 270; // (360 - 90) for zero position adjustment.\n }\n else {\n endAngle = (sectorContibution - 90);\n }\n cX = Math.round((centerX + circleRadius * Math.cos((sectorContibution - 90) * (Math.PI / 180))) * 100) / 100;\n cY = Math.round((centerY + circleRadius * Math.sin((sectorContibution - 90) * (Math.PI / 180))) * 100) / 100;\n X1 = Math.round(centerX * 100) / 100;\n Y1 = Math.round((centerY - circleRadius) * 100) / 100;\n if (sectorContibution === 0) {\n tempColor = this.heatMap.emptyPointColor;\n }\n }\n else {\n curve = sectorContibution >= 180 ? 0 : 1;\n startAngle = endAngle;\n endAngle = 270; // (360 - 90) for zero position adjustment.\n tempColor = this.heatMap.emptyPointColor;\n x = x + '_Unfilled';\n tempcX = cX;\n tempcY = cY;\n cX = X1;\n cY = Y1;\n X1 = tempcX;\n Y1 = tempcY;\n if (sectorContibution === 0) {\n pathBorderWidth = 1;\n borderColor = color;\n }\n }\n var path = new Path('', false, centerX, centerY, X1, Y1, cX, cY, startAngle, endAngle, circleRadius, true);\n var sector = new PathAttributes(this.heatMap.element.id + '_HeatMapRect_' + x, path, tempColor, tempBorder, pathBorderWidth, 1, borderColor);\n this.calculateShapes(sector, path, sectorContibution, curve);\n this.drawSvgCanvas.drawPath(sector, path, this.containerRectObject);\n if (sectorContibution === 360) {\n break;\n }\n }\n };\n /**\n * To Render sector Cell.\n * @private\n */\n Series.prototype.calculateShapes = function (options, path, sectorContibution, curve) {\n var pathString;\n var clockWise;\n switch (sectorContibution) {\n case 360:\n case 0:\n if (sectorContibution === 0 && path.start === path.end) {\n pathString = 'M' + ' ' + options.x + ' ' + options.y + ' ' + 'L' + ' ' + path.x + ' ' + (path.y - path.radius);\n }\n else {\n pathString = !this.heatMap.enableCanvasRendering ? 'M' + ' ' + options.x + ' ' + options.y + ' ' : '';\n pathString = pathString + 'm' + ' ' + (-path.radius) + ' ' + '0' + ' ' +\n 'a' + ' ' + path.radius + ' ' + path.radius + ' ' + '0' + ' ' + '1' + ' ' + '0' +\n ' ' + (path.radius * 2) + ' ' + '0' + ' ' + 'a' + ' ' + path.radius +\n ' ' + path.radius + ' ' + '0' + ' ' + '1' + ' ' + '0' +\n ' ' + (-(path.radius * 2)) + ' ' + '0' + ' ';\n }\n merge(options, { 'd': pathString });\n break;\n default:\n pathString = 'M' + ' ' + options.x + ' ' + options.y + ' ' + 'L' + ' ' + path.x1 + ' ' + path.y1 + ' ' +\n 'A' + ' ' + path.radius + ' ' + path.radius + ' ' + '0' + ' ' + curve + ' ' + '1' + ' ' +\n path.cx + ' ' + path.cy + ' ' + 'Z';\n merge(options, { 'd': pathString });\n break;\n }\n };\n /**\n * To Render Bubble Cell.\n * @private\n */\n Series.prototype.renderBubbleCell = function (bubblePosition, tempBorder, x, color, borderColor, circleRadius) {\n var circle = new CircleOption(this.heatMap.element.id + '_HeatMapRect_' + x, color, tempBorder, 1, borderColor || this.heatMap.themeStyle.cellBorder, Math.round((bubblePosition.x + (bubblePosition.width / 2)) * 100) / 100, Math.round((bubblePosition.y + (bubblePosition.height / 2)) * 100) / 100, circleRadius);\n this.drawSvgCanvas.drawCircle(circle, this.containerRectObject);\n };\n /**\n * To find whether the X,Y Label need to display or not.\n * @private\n */\n Series.prototype.updateLabelVisibleStatus = function (tempWidth, tempHeight) {\n var tempMaxString = this.getFormatedText(this.text, this.heatMap.cellSettings.format);\n this.checkLabelYDisplay = tempHeight > parseInt(this.heatMap.cellSettings.textStyle.size, 10) ? true : false;\n this.checkLabelXDisplay = tempWidth > (tempMaxString.length *\n (parseInt(this.heatMap.cellSettings.textStyle.size, 10) / 2)) ? true : false;\n };\n /**\n * To find percentage value.\n * @private\n */\n Series.prototype.getRadiusBypercentage = function (text, min, max, radius) {\n var valueInPrecentage = ((text - min) /\n (max - min)) * 100;\n radius = ((this.heatMap.bubbleSizeWithColor ||\n (this.heatMap.cellSettings.tileType === 'Bubble' && this.heatMap.cellSettings.bubbleType === 'Size'))\n && this.heatMap.cellSettings.isInversedBubbleSize) ? radius - (radius * (valueInPrecentage / 100))\n : radius * (valueInPrecentage / 100);\n return (Math.round(radius * 100) / 100) < 0 ? 0 : (Math.round(radius * 100) / 100);\n };\n /**\n * To find saturated color for datalabel.\n * @return {string}\n * @private\n */\n Series.prototype.getSaturatedColor = function (color) {\n var saturatedColor = color;\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 * To highlight the mouse hovered rect cell.\n * @return {void}\n * @private\n */\n Series.prototype.highlightSvgRect = function (tempID) {\n if (tempID.indexOf('Celltooltip') === -1) {\n if (tempID.indexOf('_HeatMapRect') !== -1) {\n if (tempID.indexOf('_HeatMapRectLabels_') !== -1) {\n var tempIndex = tempID.indexOf('_HeatMapRectLabels_') + 19;\n tempID = this.heatMap.element.id + '_HeatMapRect_' + tempID.slice(tempIndex);\n }\n var element = document.getElementById(tempID);\n if (this.heatMap.tempRectHoverClass !== tempID) {\n if (this.heatMap.cellSettings.enableCellHighlighting) {\n var oldElement = document.getElementById(this.heatMap.tempRectHoverClass);\n if (oldElement) {\n oldElement.style.opacity = '1';\n }\n if (element) {\n element.style.opacity = '0.65';\n }\n }\n this.heatMap.tempRectHoverClass = tempID;\n }\n }\n else {\n if (this.heatMap.cellSettings.enableCellHighlighting) {\n var oldElement = document.getElementById(this.heatMap.tempRectHoverClass);\n if (oldElement) {\n oldElement.style.opacity = '1';\n this.heatMap.tempRectHoverClass = '';\n }\n }\n }\n }\n };\n /**\n * To get the value depends to format.\n * @return {string}\n * @private\n */\n Series.prototype.getFormatedText = function (val, getFormat) {\n var format = getFormat;\n var isCustom = format.match('{value}') !== null;\n this.format = this.heatMap.intl.getNumberFormat({\n format: isCustom ? '' : format\n });\n var value = '';\n if (val.toString() !== '') {\n value = this.formatValue(isCustom, format, val);\n }\n return value;\n };\n /**\n * To get mouse hovered cell details.\n * @return {CurrentRect}\n * @private\n */\n Series.prototype.getCurrentRect = function (x, y) {\n var currentRect;\n var firstRectDetails = [];\n firstRectDetails.push(this.heatMap.heatMapSeries.rectPositionCollection[0][0]);\n var rectX = Math.ceil((x - firstRectDetails[0].x) / firstRectDetails[0].width) <\n this.heatMap.axisCollections[0].axisLabelSize ?\n Math.ceil((x - firstRectDetails[0].x) / firstRectDetails[0].width) :\n this.heatMap.axisCollections[0].axisLabelSize;\n var rectY = Math.floor(((y - firstRectDetails[0].y) / firstRectDetails[0].height)) <\n this.heatMap.axisCollections[1].axisLabelSize ?\n Math.floor(((y - firstRectDetails[0].y) / firstRectDetails[0].height)) :\n this.heatMap.axisCollections[1].axisLabelSize - 1;\n rectX = rectX === 0 ? 1 : rectX;\n currentRect = this.heatMap.heatMapSeries.rectPositionCollection[rectY][rectX - 1];\n this.hoverXAxisLabel = this.heatMap.axisCollections[0].tooltipLabels[rectX - 1];\n this.hoverXAxisValue = this.heatMap.axisCollections[0].labelValue[rectX - 1];\n this.hoverYAxisLabel = this.heatMap.axisCollections[1].tooltipLabels[(this.heatMap.axisCollections[1].tooltipLabels.length - 1) - rectY];\n this.hoverYAxisValue = this.heatMap.axisCollections[1].labelValue[(this.heatMap.axisCollections[1].labelValue.length - 1) - rectY];\n return currentRect;\n };\n /**\n * Format the cell label.\n * @private\n */\n Series.prototype.formatValue = function (isCustom, format, tempInterval) {\n return isCustom ? format.replace('{value}', this.format(tempInterval))\n : this.format(tempInterval);\n };\n return Series;\n}());\nexport { Series };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar TwoDimensional = /** @class */ (function () {\n function TwoDimensional(heatMap) {\n this.heatMap = heatMap;\n }\n /**\n * To reconstruct proper two dimensional dataSource depends on min and max values.\n * @private\n */\n TwoDimensional.prototype.processDataSource = function (dataSource) {\n // tslint:disable-next-line:no-any\n var tempCloneData = extend([], dataSource, null, true);\n this.heatMap.clonedDataSource = [];\n this.completeDataSource = [];\n var axis = this.heatMap.axisCollections;\n var dataLength = axis[0].maxLength + 1;\n var labelLength = axis[0].axisLabelSize + (axis[0].min > 0 ? axis[0].min : 0);\n var xLength = dataLength > labelLength ? dataLength : labelLength;\n var minVal;\n var maxVal;\n dataLength = axis[1].maxLength + 1;\n labelLength = axis[1].axisLabelSize + (axis[1].min > 0 ? axis[1].min : 0);\n var yLength = dataLength > labelLength ? dataLength : labelLength;\n // tslint:disable-next-line:no-any \n var tempVariable;\n var cloneDataIndex = 0;\n var minMaxDatasource = [];\n this.tempSizeArray = [];\n this.tempColorArray = [];\n this.heatMap.minColorValue = null;\n this.heatMap.maxColorValue = null;\n for (var z = axis[1].valueType === 'Category' ? axis[1].min : 0; z < yLength; z++) {\n var tempIndex = axis[0].valueType === 'Category' ? axis[0].min : 0;\n this.completeDataSource.push([]);\n while (tempIndex < xLength) {\n if (tempIndex >= axis[0].min && tempIndex <= axis[0].max) {\n this.processDataArray(tempCloneData, tempIndex, z, cloneDataIndex);\n }\n tempIndex++;\n }\n tempVariable = extend([], this.completeDataSource[cloneDataIndex], null, true);\n var minMaxVal = this.getMinMaxValue(minVal, maxVal, tempVariable);\n minVal = minMaxVal[0];\n maxVal = minMaxVal[1];\n if (this.heatMap.xAxis.isInversed) {\n this.completeDataSource[cloneDataIndex] = this.completeDataSource[cloneDataIndex].reverse();\n }\n if (z >= this.heatMap.axisCollections[1].min && z <= this.heatMap.axisCollections[1].max) {\n minMaxDatasource.push(this.completeDataSource[cloneDataIndex]);\n }\n cloneDataIndex++;\n }\n if (!this.heatMap.yAxis.isInversed) {\n this.completeDataSource.reverse();\n minMaxDatasource.reverse();\n }\n this.heatMap.clonedDataSource = minMaxDatasource;\n this.heatMap.dataSourceMinValue = isNullOrUndefined(minVal) ? 0 : parseFloat(minVal.toString());\n this.heatMap.dataSourceMaxValue = isNullOrUndefined(maxVal) ? 0 : parseFloat(maxVal.toString());\n this.heatMap.isColorValueExist = isNullOrUndefined(this.heatMap.minColorValue) ? false : true;\n this.heatMap.minColorValue = isNullOrUndefined(this.heatMap.minColorValue) ?\n this.heatMap.dataSourceMinValue : parseFloat(this.heatMap.minColorValue.toString());\n this.heatMap.maxColorValue = isNullOrUndefined(this.heatMap.maxColorValue) ?\n this.heatMap.dataSourceMaxValue : parseFloat(this.heatMap.maxColorValue.toString());\n };\n /**\n * To process and create a proper data array.\n * @private\n */\n // tslint:disable-next-line:no-any\n TwoDimensional.prototype.processDataArray = function (tempCloneData, tempIndex, z, cloneDataIndex) {\n if (this.heatMap.bubbleSizeWithColor) {\n if (tempCloneData[tempIndex] && !isNullOrUndefined(tempCloneData[tempIndex][z])\n && typeof (tempCloneData[tempIndex][z]) === 'object') {\n // tslint:disable-next-line:no-any \n var internalArray = tempCloneData[tempIndex][z];\n for (var tempx = 0; tempx < internalArray.length; tempx++) {\n if (isNullOrUndefined(internalArray[tempx])) {\n internalArray[tempx] = '';\n }\n if (tempx === 0) {\n this.tempSizeArray.push(internalArray[tempx]);\n }\n else if (tempx === 1) {\n this.tempColorArray.push(internalArray[tempx]);\n break;\n }\n }\n this.completeDataSource[cloneDataIndex].push(internalArray);\n }\n else {\n if (!isNullOrUndefined(tempCloneData[tempIndex]) && (tempCloneData[tempIndex][z] ||\n (tempCloneData[tempIndex][z] === 0 &&\n tempCloneData[tempIndex][z].toString() !== ''))) {\n this.completeDataSource[cloneDataIndex].push([tempCloneData[tempIndex][z]]);\n this.tempSizeArray.push(tempCloneData[tempIndex][z]);\n }\n else {\n this.completeDataSource[cloneDataIndex].push('');\n }\n }\n }\n else {\n if (tempCloneData[tempIndex] && (tempCloneData[tempIndex][z] ||\n (tempCloneData[tempIndex][z] === 0 &&\n tempCloneData[tempIndex][z].toString() !== ''))) {\n if (typeof (tempCloneData[tempIndex][z]) === 'object') {\n if (tempCloneData[tempIndex][z].length > 0 && !isNullOrUndefined(tempCloneData[tempIndex][z][0])) {\n this.completeDataSource[cloneDataIndex].push(tempCloneData[tempIndex][z][0]);\n }\n else {\n this.completeDataSource[cloneDataIndex].push('');\n }\n }\n else {\n this.completeDataSource[cloneDataIndex].push(tempCloneData[tempIndex][z]);\n }\n }\n else {\n this.completeDataSource[cloneDataIndex].push('');\n }\n }\n };\n /**\n * To get minimum and maximum value\n * @private\n */\n TwoDimensional.prototype.getMinMaxValue = function (minVal, maxVal, tempVariable) {\n var minMaxValue = [];\n if (this.heatMap.bubbleSizeWithColor) {\n minMaxValue.push(this.getMinValue(minVal, this.tempSizeArray));\n minMaxValue.push(this.getMaxValue(maxVal, this.tempSizeArray));\n this.heatMap.minColorValue = this.getMinValue(this.heatMap.minColorValue, this.tempColorArray);\n this.heatMap.maxColorValue = this.getMaxValue(this.heatMap.maxColorValue, this.tempColorArray);\n }\n else {\n minMaxValue.push(this.getMinValue(minVal, tempVariable));\n minMaxValue.push(this.getMaxValue(maxVal, tempVariable));\n }\n return minMaxValue;\n };\n /**\n * To get minimum value\n * @private\n */\n TwoDimensional.prototype.getMinValue = function (minVal, tempVariable) {\n if (isNullOrUndefined(minVal)) {\n minVal = this.performSort(tempVariable);\n }\n else if (this.performSort(tempVariable) < minVal) {\n minVal = this.performSort(tempVariable);\n }\n return !isNullOrUndefined(minVal) ? parseFloat(minVal.toString()) : minVal;\n };\n /**\n * To get maximum value\n * @private\n */\n TwoDimensional.prototype.getMaxValue = function (maxVal, tempVariable) {\n if (isNullOrUndefined(maxVal) && tempVariable.length > 0) {\n maxVal = Math.max.apply(Math, tempVariable);\n }\n else if (Math.max.apply(Math, tempVariable) > maxVal) {\n maxVal = Math.max.apply(Math, tempVariable);\n }\n return !isNullOrUndefined(maxVal) ? parseFloat(maxVal.toString()) : maxVal;\n };\n /**\n * To perform sort operation.\n * @private\n */\n // tslint:disable-next-line:no-any\n TwoDimensional.prototype.performSort = function (tempVariable) {\n return tempVariable.sort(function (a, b) { return a - b; }).filter(this.checkmin)[0];\n };\n /**\n * To get minimum value\n * @private\n */\n TwoDimensional.prototype.checkmin = function (val) {\n return !isNullOrUndefined(val) && val.toString() !== '';\n };\n return TwoDimensional;\n}());\nexport { TwoDimensional };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, Browser, createElement } from '@syncfusion/ej2-base';\nimport { DrawSvgCanvas, TextOption, TextBasic, PathOption, Line, LineOption, GradientPointer, CurrentLegendRect } from '../utils/helper';\nimport { Size, measureText, getTitle, getElement, CanvasTooltip } from '../utils/helper';\nimport { Font } from '../model/base';\nimport { Rect, RectOption, Gradient, GradientColor, showTooltip, stringToNumber } from '../utils/helper';\nimport { Theme } from '../model/theme';\nimport { Tooltip as tool } from '@syncfusion/ej2-svg-base';\n/**\n * Configures the Legend\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('')\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property('Right')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"showLabel\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"showGradientPointer\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"enableSmartLegend\", void 0);\n __decorate([\n Property('All')\n ], LegendSettings.prototype, \"labelDisplayType\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n *\n * The `Legend` module is used to render legend for the heatmap.\n */\nvar Legend = /** @class */ (function () {\n function Legend(heatMap) {\n this.maxLegendLabelSize = new Size(0, 0);\n this.gradientScaleSize = 10;\n this.segmentCollections = [];\n this.textWrapCollections = [];\n this.labelCollections = [];\n this.legendSize = 10;\n this.previousOptions = new GradientPointer(0, 0, 0, 0, 0, 0);\n this.listPerPage = 0;\n this.numberOfPages = 1;\n this.listWidth = 0;\n this.fillRect = new Rect(0, 0, 0, 0);\n this.legendRect = new Rect(0, 0, 0, 0);\n this.currentPage = 1;\n this.lastList = [];\n this.navigationCollections = [];\n this.pagingRect = new Rect(0, 0, 0, 0);\n this.listInterval = 10; // padding between two lists\n this.legendLabelTooltip = [];\n this.labelXCollections = [];\n this.labelYCollections = [];\n this.legendXCollections = [];\n this.legendYCollections = [];\n /** @private */\n this.legendRectPositionCollection = [];\n this.heatMap = heatMap;\n this.drawSvgCanvas = new DrawSvgCanvas(heatMap);\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 (heatMap) {\n /**\n * destory code\n */\n };\n ;\n /**\n * @private\n */\n Legend.prototype.renderLegendItems = function () {\n var heatMap = this.heatMap;\n var tempBorder = {\n color: 'transparent',\n width: 0,\n };\n this.legend = heatMap.renderer.createGroup({ id: heatMap.element.id + '_Heatmap_Legend' });\n var rectItems = new RectOption(heatMap.element.id + '_LegendBound', 'none', tempBorder, 1, this.legendGroup);\n this.drawSvgCanvas.drawRectangle(rectItems, this.legend);\n var legendBound = this.legendRectScale;\n var rectItemsSvg = new Rect(legendBound.x, legendBound.y, legendBound.width, legendBound.height);\n if (heatMap.paletteSettings.type === 'Gradient' || (heatMap.paletteSettings.type === 'Fixed' &&\n heatMap.legendSettings.enableSmartLegend === true)) {\n if (heatMap.paletteSettings.type === 'Gradient') {\n var fill = void 0;\n if (heatMap.enableCanvasRendering) {\n var grd = void 0;\n var ctx = heatMap.canvasRenderer.ctx;\n if (heatMap.horizontalGradient) {\n grd = ctx.createLinearGradient(legendBound.x, 0, legendBound.x + legendBound.width, 0);\n }\n else {\n grd = ctx.createLinearGradient(0, legendBound.y, 0, legendBound.y + legendBound.height);\n }\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n var value = ((heatMap.legendColorCollection[i].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue));\n value = isNaN(value) ? 0 : value;\n grd.addColorStop(value, heatMap.legendColorCollection[i].color);\n }\n ctx.fillStyle = grd;\n fill = grd.toString();\n }\n else {\n var gradientOptions = void 0;\n var gradientColor = void 0;\n var cgradientColors = [];\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n var gradientPercentage = ((heatMap.legendColorCollection[i].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n gradientPercentage = isNaN(gradientPercentage) ? 0 : gradientPercentage;\n gradientColor = new GradientColor(heatMap.legendColorCollection[i].color, gradientPercentage + '%');\n cgradientColors.push(gradientColor);\n }\n if (heatMap.horizontalGradient) {\n gradientOptions = new Gradient(heatMap.element.id + '_lineargradient', '0%', '100%', '0%', '0%');\n }\n else {\n gradientOptions = new Gradient(heatMap.element.id + '_lineargradient', '0%', '0%', '0%', '100%');\n }\n var linearGradient = heatMap.renderer.drawGradient('linearGradient', gradientOptions, cgradientColors);\n this.legend.appendChild(linearGradient);\n fill = 'url(#' + heatMap.element.id + '_lineargradient)';\n }\n var rectItem = new RectOption(heatMap.element.id + '_Gradient_Legend', fill, tempBorder, 1, rectItemsSvg);\n this.drawSvgCanvas.drawRectangle(rectItem, this.legend);\n this.renderColorAxisGrid(rectItemsSvg);\n }\n else {\n this.renderSmartLegend();\n }\n if (!heatMap.enableCanvasRendering) {\n heatMap.svgObject.appendChild(this.legend);\n }\n if (heatMap.legendSettings.showLabel && (heatMap.paletteSettings.type === 'Gradient' ||\n (heatMap.paletteSettings.type === 'Fixed' && heatMap.legendSettings.labelDisplayType !== 'None'))) {\n this.renderLegendLabel(rectItemsSvg);\n }\n }\n else {\n this.legendScale = heatMap.renderer.createGroup({ id: heatMap.element.id + 'Heatmap_GradientScale' });\n var listRect = new RectOption(heatMap.element.id + '_Gradient_Scale', 'none', tempBorder, 1, this.legendRectScale);\n this.drawSvgCanvas.drawRectangle(listRect, this.legendScale);\n if (!heatMap.enableCanvasRendering) {\n this.legend.appendChild(this.legendScale);\n }\n this.translategroup = heatMap.renderer.createGroup({ id: heatMap.element.id + '_translate' });\n this.calculateListPerPage(rectItemsSvg);\n if (this.numberOfPages > 1) {\n this.paginggroup = heatMap.renderer.createGroup({ id: heatMap.element.id + '_navigation' });\n }\n this.renderListLegendMode(rectItemsSvg);\n }\n };\n Legend.prototype.renderSmartLegend = function () {\n var heatMap = this.heatMap;\n var colorCollection = heatMap.colorCollection;\n var smartLegendRect;\n var tempBorder = {\n color: 'transparent',\n width: 0,\n };\n var legendBound = this.legendRectScale;\n var legendX;\n var legendY;\n var legendWidth;\n var legendHeight;\n var width = legendBound.width / colorCollection.length;\n var height = legendBound.height / colorCollection.length;\n this.legendRectPositionCollection = [];\n for (var i = 0; i < colorCollection.length; i++) {\n var rectPosition = new CurrentLegendRect(0, 0, 0, 0, '', '');\n if (heatMap.horizontalGradient) {\n legendX = legendBound.x + (i * width);\n legendY = legendBound.y;\n legendWidth = width;\n legendHeight = legendBound.height;\n this.segmentCollections.push((heatMap.legendSettings.labelDisplayType === 'Edge' &&\n i === colorCollection.length - 1) ? legendX + width : legendX);\n }\n else {\n legendX = legendBound.x;\n legendY = legendBound.y + (i * height);\n legendWidth = legendBound.width;\n legendHeight = height;\n this.segmentCollections.push((heatMap.legendSettings.labelDisplayType === 'Edge' &&\n i === colorCollection.length - 1) ? legendY + height : legendY);\n }\n smartLegendRect = new Rect(legendX, legendY, legendWidth, legendHeight);\n var rectItem = new RectOption(heatMap.element.id + '_Smart_Legend' + i, colorCollection[i].color, tempBorder, 1, smartLegendRect);\n this.drawSvgCanvas.drawRectangle(rectItem, this.legend);\n rectPosition.x = legendX;\n rectPosition.y = legendY;\n rectPosition.width = legendWidth;\n rectPosition.height = legendHeight;\n rectPosition.label = this.labelCollections[i];\n rectPosition.id = heatMap.element.id + '_Smart_Legend' + i;\n this.legendRectPositionCollection.push(rectPosition);\n var text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, this.textWrapCollections[i]);\n if (text.length !== 0 && heatMap.enableCanvasRendering) {\n var elementSize = measureText(this.labelCollections[i], heatMap.legendSettings.textStyle);\n this.legendLabelTooltip.push(new CanvasTooltip(this.labelCollections[i], new Rect(rectPosition.x, rectPosition.y, elementSize.width, elementSize.height)));\n }\n }\n };\n Legend.prototype.renderLegendLabel = function (rect) {\n var heatMap = this.heatMap;\n var anchor;\n var dominantBaseline;\n var legendLabel;\n var textWrapWidth = 0;\n var text;\n this.legendLabelTooltip = [];\n var colorCollection = heatMap.paletteSettings.type === 'Gradient' ?\n heatMap.legendColorCollection : heatMap.colorCollection;\n if (heatMap.enableCanvasRendering) {\n var ctx = heatMap.canvasRenderer.ctx;\n ctx.rect(this.legendGroup.x, this.legendGroup.y, this.legendGroup.width, this.legendGroup.height);\n ctx.clip();\n }\n else {\n legendLabel = heatMap.renderer.createGroup({ id: heatMap.element.id + '_Heatmap_LegendLabel' });\n }\n var labelX;\n var labelY;\n for (var i = 0; i < colorCollection.length; i++) {\n var value = ((colorCollection[i].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n if (heatMap.horizontalGradient) {\n labelX = this.segmentCollections[i];\n labelY = rect.y + rect.height + this.labelPadding;\n anchor = (value === 0) || (heatMap.paletteSettings.type === 'Fixed') ?\n (heatMap.legendSettings.labelDisplayType === 'Edge' &&\n i === colorCollection.length - 1) ? 'end' : 'start' : (i === colorCollection.length - 1) ? 'end' : 'middle';\n dominantBaseline = 'hanging';\n }\n else {\n labelX = rect.x + rect.width + this.labelPadding;\n labelY = this.segmentCollections[i];\n dominantBaseline = (value === 0) || (heatMap.paletteSettings.type === 'Fixed') ?\n (heatMap.legendSettings.labelDisplayType === 'Edge' &&\n i === colorCollection.length - 1) ? 'baseline' : 'hanging' :\n (i === colorCollection.length - 1) ? 'baseline' : 'middle';\n }\n textWrapWidth = heatMap.horizontalGradient ? this.textWrapCollections[i] : this.width - (this.legendRectScale.width +\n this.labelPadding + this.legendRectPadding);\n if (this.labelCollections[i] !== '') {\n text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, textWrapWidth);\n if (text.length !== 0 && text[0].indexOf('...') !== -1 && heatMap.enableCanvasRendering) {\n var elementSize = measureText(text[0], heatMap.legendSettings.textStyle);\n this.legendLabelTooltip.push(new CanvasTooltip(this.labelCollections[i], new Rect(labelX, labelY, elementSize.width, elementSize.height)));\n }\n var textBasic = new TextBasic(labelX, labelY, anchor, text, 0, 'translate(0,0)', dominantBaseline);\n var options = new TextOption(heatMap.element.id + '_Legend_Label' + i, textBasic, heatMap.legendSettings.textStyle, heatMap.legendSettings.textStyle.color || heatMap.themeStyle.legendLabel);\n if (text.length > 1) {\n this.drawSvgCanvas.createWrapText(options, heatMap.legendSettings.textStyle, legendLabel);\n }\n else {\n this.drawSvgCanvas.createText(options, legendLabel, text[0]);\n }\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n if (dominantBaseline === 'middle') {\n legendLabel.lastChild.setAttribute('dy', '0.6ex');\n }\n else if (dominantBaseline === 'hanging') {\n legendLabel.lastChild.setAttribute('dy', '1.5ex');\n }\n }\n }\n }\n if (!heatMap.enableCanvasRendering) {\n this.legend.appendChild(legendLabel);\n var clippath = heatMap.renderer.createClipPath({ id: heatMap.element.id + '_clipPath' });\n var clipRect = heatMap.renderer.drawRectangle(this.legendGroup);\n clippath.appendChild(clipRect);\n heatMap.svgObject.appendChild(clippath);\n this.legend.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n }\n };\n /**\n * @private\n */\n Legend.prototype.renderGradientPointer = function (e, pageX, pageY) {\n var heatMap = this.heatMap;\n var currentRect = heatMap.heatMapSeries.getCurrentRect(pageX, pageY);\n var cellValue = heatMap.bubbleSizeWithColor ? currentRect.value[0].bubbleData.toString() !== '' ?\n !this.heatMap.isColorValueExist ? currentRect.value[0].bubbleData.toString() :\n currentRect.value[1].bubbleData.toString() : '' : currentRect.value.toString();\n var rect = this.legendRectScale;\n var legendPart;\n var direction;\n var options;\n var legendPath;\n var pathX1;\n var pathY1;\n var pathX2;\n var pathY2;\n var pathX3;\n var pathY3;\n if (cellValue.toString() !== '') {\n if (!heatMap.horizontalGradient) {\n legendPart = rect.height / 100;\n legendPath = legendPart * ((Number(cellValue) - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n pathX1 = rect.x - 1;\n pathY1 = rect.y + legendPath;\n pathX2 = pathX3 = rect.x - 8;\n pathY2 = rect.y - 5 + legendPath;\n pathY3 = rect.y + 5 + legendPath;\n }\n else {\n legendPart = rect.width / 100;\n legendPath = legendPart * ((Number(cellValue) - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n pathX1 = rect.x + legendPath;\n pathY1 = rect.y + rect.height;\n pathX2 = rect.x - 5 + legendPath;\n pathY2 = pathY3 = rect.y + rect.height + 8;\n pathX3 = rect.x + 5 + legendPath;\n }\n direction = 'M' + ' ' + pathX1 + ' ' + pathY1 + ' ' +\n 'L' + ' ' + pathX2 + ' ' + pathY2 + ' ' + 'L' + ' ' + pathX3 + ' ' + pathY3 + ' ' + 'Z';\n options = new PathOption(heatMap.element.id + '_Gradient_Pointer', 'gray', 0.01, '#A0A0A0', 1, '0,0', direction);\n if (!heatMap.enableCanvasRendering) {\n this.gradientPointer = heatMap.renderer.drawPath(options);\n this.gradientPointer.style.visibility = 'visible';\n this.legend.appendChild(this.gradientPointer);\n }\n else {\n this.removeGradientPointer();\n var canvasTranslate = void 0;\n heatMap.canvasRenderer.drawPath(options, canvasTranslate);\n this.previousOptions.pathX1 = pathX1;\n this.previousOptions.pathY1 = pathY1;\n this.previousOptions.pathX2 = pathX2;\n this.previousOptions.pathY2 = pathY2;\n this.previousOptions.pathX3 = pathX3;\n this.previousOptions.pathY3 = pathY3;\n }\n }\n else {\n this.removeGradientPointer();\n }\n };\n /**\n * @private\n */\n Legend.prototype.removeGradientPointer = function () {\n var heatMap = this.heatMap;\n if (this.gradientPointer && !heatMap.enableCanvasRendering) {\n this.gradientPointer.style.visibility = 'hidden';\n }\n else if (heatMap.enableCanvasRendering) {\n if (Object.keys(this.previousOptions).length !== 0) {\n if (heatMap.horizontalGradient) {\n this.fillRect.x = this.previousOptions.pathX2 - 1;\n this.fillRect.y = this.previousOptions.pathY1;\n this.fillRect.width = this.previousOptions.pathX3 - this.previousOptions.pathX2 + 2;\n this.fillRect.height = this.previousOptions.pathY2 + 1 - this.previousOptions.pathY1;\n }\n else {\n this.fillRect.x = this.previousOptions.pathX2 - 1;\n this.fillRect.y = this.previousOptions.pathY2 - 1;\n this.fillRect.width = this.previousOptions.pathX1 - this.previousOptions.pathX2 + 1;\n this.fillRect.height = this.previousOptions.pathY3 - this.previousOptions.pathY2 + 2;\n }\n }\n heatMap.canvasRenderer.ctx.fillStyle = heatMap.themeStyle.background;\n heatMap.canvasRenderer.ctx.fillRect(this.fillRect.x, this.fillRect.y, this.fillRect.width, this.fillRect.height);\n }\n };\n /**\n * @private\n */\n Legend.prototype.calculateLegendBounds = function (rect) {\n var heatMap = this.heatMap;\n var legendSettings = heatMap.legendSettings;\n var colorCollection = heatMap.legendColorCollection;\n this.labelCollections = [];\n if (legendSettings.position !== 'Bottom' && legendSettings.position !== 'Top' &&\n legendSettings.position !== 'Right' && legendSettings.position !== 'Left') {\n legendSettings.position = 'Right';\n }\n heatMap.horizontalGradient = legendSettings.position === 'Bottom' || legendSettings.position === 'Top';\n this.legendRectPadding = heatMap.horizontalGradient ? 16 : 10; // padding between rect and legend\n this.labelPadding = legendSettings.showLabel ? this.heatMap.horizontalGradient ? 10 : 6 : 0; // padding between list and label\n this.legendHeight = legendSettings.height;\n this.legendWidth = legendSettings.width;\n if (heatMap.paletteSettings.type === 'Fixed') {\n var paletteCollection = heatMap.colorCollection;\n for (var i = 0; i < paletteCollection.length; i++) {\n var label = paletteCollection[i].label ? paletteCollection[i].label :\n paletteCollection[i].value.toString();\n if (heatMap.legendSettings.enableSmartLegend && heatMap.legendSettings.labelDisplayType === 'Edge'\n && i > 0 && i < paletteCollection.length - 1) {\n this.labelCollections.push('');\n }\n else {\n this.labelCollections.push(label);\n }\n }\n }\n else {\n for (var i = 0; i < colorCollection.length; i++) {\n var label = colorCollection[i].isHidden ? '' : colorCollection[i].label ?\n colorCollection[i].label : colorCollection[i].value.toString();\n this.labelCollections.push(label);\n }\n }\n if (heatMap.paletteSettings.type === 'Gradient' || (heatMap.paletteSettings.type === 'Fixed' &&\n heatMap.legendSettings.enableSmartLegend)) {\n this.maxLegendLabelSize = this.getMaxLabelSize();\n if (heatMap.horizontalGradient && legendSettings.height === '') {\n this.legendHeight = ((2 * this.legendRectPadding) + this.legendSize + this.maxLegendLabelSize.height).toString();\n }\n else if (!heatMap.horizontalGradient && legendSettings.width === '' && (legendSettings.textStyle.textOverflow === 'None' ||\n (heatMap.paletteSettings.type === 'Fixed' && heatMap.legendSettings.enableSmartLegend &&\n heatMap.legendSettings.labelDisplayType === 'None'))) {\n this.legendWidth = ((2 * this.legendRectPadding) + this.legendSize + this.maxLegendLabelSize.width).toString();\n }\n }\n else {\n this.calculateListLegendBounds(rect);\n }\n this.legendHeight = this.legendHeight ? this.legendHeight : heatMap.horizontalGradient ? '50' : '100%';\n this.legendWidth = this.legendWidth ? this.legendWidth : heatMap.horizontalGradient ?\n '100%' : heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend ? '70' : '50';\n this.height = stringToNumber(this.legendHeight, rect.height);\n this.width = stringToNumber(this.legendWidth, rect.width);\n if (heatMap.horizontalGradient) {\n this.height = heatMap.paletteSettings.type === 'Gradient' ? this.height < 50 ? 50 : this.height : this.height;\n if (legendSettings.position === 'Top') {\n rect.y += this.height;\n }\n rect.height -= this.height;\n }\n else {\n this.width = heatMap.paletteSettings.type === 'Gradient' ? this.width < 50 ? 50 : this.width : this.width;\n if (legendSettings.position === 'Left') {\n rect.x += this.width;\n }\n rect.width -= this.width;\n }\n };\n Legend.prototype.calculateListLegendBounds = function (rect) {\n var heatMap = this.heatMap;\n this.listWidth = 0;\n this.listHeight = 0;\n this.currentPage = 1;\n var padding = 10; // padding of paging elements\n if (heatMap.horizontalGradient) {\n for (var i = 0; i < heatMap.colorCollection.length; i++) {\n var size = 0;\n if (heatMap.legendSettings.showLabel) {\n var text = this.labelCollections[i];\n size = measureText(text, heatMap.legendSettings.textStyle).width;\n }\n var perListWidth = this.legendSize + this.labelPadding + size + this.listInterval;\n this.listWidth += perListWidth;\n }\n this.listWidth += this.listInterval + padding;\n if (this.legendWidth === '') {\n this.legendWidth = this.listWidth > rect.width ? rect.width.toString() : this.listWidth.toString();\n }\n if (this.legendHeight === '') {\n this.numberOfRows = Math.ceil(this.listWidth / stringToNumber(this.legendWidth, rect.width));\n this.numberOfRows = this.numberOfRows > 3 ? 3 : this.numberOfRows;\n this.legendHeight = (this.listWidth > rect.width || this.listWidth > stringToNumber(this.legendWidth, rect.width)) &&\n this.numberOfRows > 3 ? (((this.legendSize + this.listInterval) * this.numberOfRows) + this.legendRectPadding +\n parseInt(heatMap.legendSettings.textStyle.size, 10) + padding).toString() :\n (((this.legendSize + this.listInterval) * this.numberOfRows) + this.legendRectPadding).toString();\n }\n }\n else {\n this.listHeight = ((this.legendSize + this.listInterval) * heatMap.colorCollection.length) + this.listInterval;\n if (this.legendHeight === '') {\n this.legendHeight = this.listHeight > rect.height ? rect.height.toString() : this.listHeight.toString();\n }\n if (this.legendWidth === '' && heatMap.legendSettings.textStyle.textOverflow !== 'Trim') {\n this.maxLegendLabelSize = this.getMaxLabelSize();\n this.legendWidth = ((2 * this.legendRectPadding) + this.legendSize + this.labelPadding +\n this.maxLegendLabelSize.width).toString();\n }\n }\n if (stringToNumber(this.legendHeight, rect.height) < 50) {\n this.legendHeight = '50';\n }\n if (stringToNumber(this.legendWidth, rect.width) < 70) {\n this.legendWidth = '70';\n }\n };\n Legend.prototype.getMaxLabelSize = function () {\n var heatMap = this.heatMap;\n this.maxLegendLabelSize = new Size(0, 0);\n if (!heatMap.legendSettings.showLabel || (heatMap.horizontalGradient && heatMap.paletteSettings.type === 'Fixed' &&\n !heatMap.legendSettings.enableSmartLegend) || (heatMap.paletteSettings.type === 'Fixed' &&\n heatMap.legendSettings.labelDisplayType === 'None')) {\n return this.maxLegendLabelSize;\n }\n else {\n var labelSize = this.maxLegendLabelSize;\n for (var i = 0; i < heatMap.colorCollection.length; i++) {\n var size = measureText(this.labelCollections[i], heatMap.legendSettings.textStyle);\n labelSize.width = (labelSize.width > size.width) ? labelSize.width : size.width;\n labelSize.height = (labelSize.height > size.height) ? labelSize.height : size.height;\n }\n return labelSize;\n }\n };\n /**\n * @private\n */\n Legend.prototype.calculateLegendSize = function (rect, legendTop) {\n var heatMap = this.heatMap;\n var legendSettings = heatMap.legendSettings;\n var left;\n var top;\n var padding = 10; // inner padding for axis title and axil labels\n var alignment = legendSettings.alignment;\n var height = stringToNumber(this.legendHeight, rect.height);\n var width = stringToNumber(this.legendWidth, rect.width);\n var axis = heatMap.axisCollections;\n var axisTitlePadding = 0;\n if (heatMap.horizontalGradient) {\n width = width > rect.width ? rect.width : width;\n height = heatMap.paletteSettings.type === 'Gradient' ? height > 50 ? height : 50 : this.height;\n left = alignment === 'Near' ? rect.x : alignment === 'Far' ? rect.x + rect.width - width :\n rect.x + (rect.width / 2) - (width / 2);\n if (heatMap.xAxis.title.text !== '') {\n axisTitlePadding = measureText(heatMap.xAxis.title.text, heatMap.xAxis.textStyle).height + padding;\n }\n var axisHeight = axis[0].opposedPosition ? 0 : axis[0].maxLabelSize.height + axisTitlePadding + padding;\n top = legendSettings.position === 'Top' ? heatMap.titleSettings.text ? legendTop :\n heatMap.margin.top : rect.y + rect.height + axisHeight;\n }\n else {\n height = height > rect.height ? rect.height : height;\n width = heatMap.paletteSettings.type === 'Gradient' ? width > 50 ? width : 50 : width;\n top = alignment === 'Near' ? rect.y : alignment === 'Far' ? rect.y + rect.height - height :\n rect.y + (rect.height / 2) - (height / 2);\n if (heatMap.yAxis.title.text !== '') {\n axisTitlePadding = measureText(heatMap.yAxis.title.text, heatMap.yAxis.textStyle).height + padding;\n }\n var axisWidth = axis[1].opposedPosition ? axis[1].maxLabelSize.width + axisTitlePadding + padding : 0;\n left = legendSettings.position === 'Right' ? rect.x + rect.width + axisWidth : heatMap.margin.left;\n }\n this.legendGroup = new Rect(left, top, width, height);\n this.calculateGradientScale(this.legendGroup);\n };\n // calculating number of lists per page\n Legend.prototype.measureListLegendBound = function (rect) {\n var heatMap = this.heatMap;\n var padding = 15; // padding of paging element\n this.numberOfPages = 1;\n if (heatMap.horizontalGradient) {\n if (this.listWidth > this.width) {\n this.numberOfRows = Math.ceil(this.listWidth / this.width);\n this.listHeight = ((this.legendSize + this.listInterval) * this.numberOfRows);\n this.listPerPage = this.numberOfRows <= 3 ? this.numberOfRows : Math.ceil((this.height - padding -\n parseInt(heatMap.legendSettings.textStyle.size, 10) -\n this.legendRectPadding) / (this.legendSize + this.listInterval));\n this.numberOfPages = Math.ceil(this.numberOfRows / this.listPerPage);\n }\n else {\n this.listPerPage = 1;\n }\n }\n else {\n if (this.listHeight > rect.height || this.listHeight > this.height) {\n var maxHeight = stringToNumber(this.legendHeight, rect.height);\n maxHeight = maxHeight > rect.height ? rect.height : maxHeight;\n this.listPerPage = Math.floor(maxHeight / (this.legendSize + this.listInterval) - 1);\n this.numberOfPages = Math.max(1, Math.ceil(heatMap.colorCollection.length / this.listPerPage));\n }\n else {\n this.listPerPage = heatMap.colorCollection.length;\n this.legendHeight = this.listHeight.toString();\n }\n }\n };\n Legend.prototype.renderPagingElements = function () {\n var heatMap = this.heatMap;\n if (this.numberOfPages > 1) {\n this.navigationCollections = [];\n this.legend.appendChild(this.paginggroup);\n var iconSize = 10;\n var rightArrowX = this.legendGroup.x + this.legendGroup.width - iconSize;\n var rightArrowY = this.legendGroup.y + this.legendGroup.height - iconSize;\n var text = this.currentPage + '/' + this.numberOfPages;\n var textSize = measureText(text, heatMap.legendSettings.textStyle);\n var textX = rightArrowX - textSize.width - 15;\n var textBasic = new TextBasic(textX, rightArrowY, 'start', text, 0, 'translate(0,0)', 'middle');\n var options = new TextOption(heatMap.element.id + '_paging', textBasic, heatMap.legendSettings.textStyle, heatMap.legendSettings.textStyle.color || heatMap.themeStyle.legendLabel);\n this.drawSvgCanvas.createText(options, this.paginggroup, text);\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n this.paginggroup.lastChild.setAttribute('dy', '0.6ex');\n }\n this.pagingRect = new Rect(textX, rightArrowY - textSize.height / 2, textSize.width, textSize.height);\n var pagingTextRect = new RectOption(heatMap.element.id + '_pagingText', 'none', { color: 'transparent', width: 0 }, 1, this.pagingRect);\n this.drawSvgCanvas.drawRectangle(pagingTextRect, this.paginggroup);\n var rightArrowRect = new RectOption(heatMap.element.id + '_rightArrow', 'none', { color: 'transparent', width: 0 }, 1, new Rect(rightArrowX - iconSize, rightArrowY - iconSize / 2, iconSize, iconSize));\n this.drawSvgCanvas.drawRectangle(rightArrowRect, this.paginggroup);\n var rightArrow = 'M' + ' ' + (rightArrowX) + ' ' + rightArrowY + ' ' +\n 'L' + ' ' + (rightArrowX - iconSize) + ' ' + (rightArrowY - iconSize / 2) + ' ' + 'L' + ' ' +\n (rightArrowX - iconSize) + ' ' + (rightArrowY + (iconSize / 2)) + 'Z';\n var leftX = textX - 15;\n var leftArrow = 'M' + ' ' + leftX + ' ' + rightArrowY + ' ' +\n 'L' + ' ' + (leftX + iconSize) + ' ' + (rightArrowY - iconSize / 2) + ' ' + 'L' + ' ' +\n (leftX + iconSize) + ' ' + (rightArrowY + (iconSize / 2)) + 'Z';\n var leftArrowRect = new RectOption(heatMap.element.id + '_leftArrow', 'none', { color: 'transparent', width: 0 }, 1, new Rect(leftX, rightArrowY - iconSize / 2, iconSize, iconSize));\n this.drawSvgCanvas.drawRectangle(leftArrowRect, this.paginggroup);\n var leftOption = new PathOption(heatMap.element.id + '_Legend_leftarrow', 'gray', 0.01, '#A0A0A0', 1, '0,0', leftArrow);\n var rightOption = new PathOption(heatMap.element.id + '_Legend_rightarrow', 'gray', 0.01, '#A0A0A0', 1, '0,0', rightArrow);\n this.navigationCollections.push(rightArrowRect);\n this.navigationCollections.push(leftArrowRect);\n if (!heatMap.enableCanvasRendering) {\n var arrow = heatMap.renderer.drawPath(leftOption);\n var rightarrow = heatMap.renderer.drawPath(rightOption);\n this.paginggroup.appendChild(arrow);\n this.paginggroup.appendChild(rightarrow);\n }\n else {\n var canvasTranslate = void 0;\n heatMap.canvasRenderer.drawPath(leftOption, canvasTranslate);\n heatMap.canvasRenderer.drawPath(rightOption, canvasTranslate);\n }\n }\n };\n Legend.prototype.calculateGradientScale = function (scale) {\n var heatMap = this.heatMap;\n var padding = 10; // padding between legend bounds and gradient scale\n var left;\n var top;\n var height;\n var width;\n if (heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend) {\n this.measureListLegendBound(heatMap.initialClipRect);\n }\n if (heatMap.horizontalGradient) {\n left = scale.x + padding;\n top = scale.y + this.legendRectPadding;\n width = heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend ?\n scale.width - (2 * this.listInterval) : scale.width - 2 * padding;\n height = heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend ?\n (this.legendSize + this.listInterval) * this.listPerPage - this.listInterval : this.gradientScaleSize;\n }\n else {\n left = scale.x + this.legendRectPadding;\n top = scale.y + padding;\n width = (heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend) ?\n scale.width - padding : this.gradientScaleSize;\n height = heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend ?\n (this.legendSize + this.listInterval) * this.listPerPage - this.listInterval : scale.height - 2 * padding;\n }\n this.legendRectScale = new Rect(left, top, width, height);\n if (heatMap.paletteSettings.type === 'Gradient' || heatMap.paletteSettings.type === 'Fixed' &&\n heatMap.legendSettings.enableSmartLegend) {\n this.calculateColorAxisGrid(this.legendRectScale);\n }\n };\n Legend.prototype.calculateColorAxisGrid = function (legendRect) {\n var heatMap = this.heatMap;\n var rect = this.legendRectScale;\n var legendPart;\n var text;\n var maxTextWrapLength = 0;\n this.segmentCollections = [];\n this.textWrapCollections = [];\n var pathX1;\n var pathY1;\n var colorCollection = heatMap.paletteSettings.type === 'Gradient' ?\n heatMap.legendColorCollection : heatMap.colorCollection;\n var minValue = heatMap.bubbleSizeWithColor ? heatMap.minColorValue : heatMap.dataSourceMinValue;\n var maxValue = heatMap.bubbleSizeWithColor ? heatMap.maxColorValue : heatMap.dataSourceMaxValue;\n this.legendMinValue = colorCollection[0].value > minValue ? minValue : colorCollection[0].value;\n this.legendMaxValue = colorCollection[colorCollection.length - 1].value < maxValue ? maxValue :\n colorCollection[colorCollection.length - 1].value;\n if (heatMap.paletteSettings.type === 'Gradient') {\n for (var index = 0; index < colorCollection.length; index++) {\n var value = ((colorCollection[index].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n value = isNaN(value) ? 0 : value;\n if (!heatMap.horizontalGradient) {\n legendPart = rect.height / 100;\n pathY1 = legendRect.y + (legendPart * value);\n this.segmentCollections.push(pathY1);\n }\n else {\n legendPart = rect.width / 100;\n pathX1 = legendRect.x + (legendPart * value);\n this.segmentCollections.push(pathX1);\n }\n }\n }\n var textWrapWidth;\n if (heatMap.horizontalGradient) {\n for (var i = 0; i < colorCollection.length; i++) {\n if (heatMap.paletteSettings.type === 'Gradient') {\n var previousSegmentWidth = (this.segmentCollections[i] - this.segmentCollections[i - 1]) / 2;\n var nextSegmentWidth = (this.segmentCollections[i + 1] - this.segmentCollections[i]) / 2;\n if (i === colorCollection.length - 1) {\n textWrapWidth = previousSegmentWidth;\n }\n else if (i === 0) {\n textWrapWidth = nextSegmentWidth;\n }\n else {\n textWrapWidth = previousSegmentWidth < nextSegmentWidth ? previousSegmentWidth : nextSegmentWidth;\n }\n }\n else {\n textWrapWidth = this.legendRectScale.width / heatMap.colorCollection.length;\n }\n this.textWrapCollections.push(textWrapWidth);\n text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, textWrapWidth);\n maxTextWrapLength = text.length > maxTextWrapLength ? text.length : maxTextWrapLength;\n }\n if (heatMap.legendSettings.position === 'Bottom') {\n heatMap.initialClipRect.height -= (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n this.legendGroup.y -= (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n this.legendRectScale.y = this.legendGroup.y + this.legendRectPadding;\n this.legendGroup.height = parseInt(this.legendHeight, 10) + (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n }\n else {\n heatMap.initialClipRect.y += (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n heatMap.initialClipRect.height -= (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n this.legendRectScale.y = this.legendGroup.y + this.legendRectPadding;\n this.legendGroup.height = parseInt(this.legendHeight, 10) + (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n }\n }\n };\n Legend.prototype.renderColorAxisGrid = function (legendRect) {\n var heatMap = this.heatMap;\n var legendElement;\n var pathX1;\n var pathY1;\n var pathX2;\n var pathY2;\n if (!heatMap.enableCanvasRendering) {\n legendElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + '_ColorAxis_Grid' });\n }\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n if (!heatMap.horizontalGradient) {\n pathX1 = legendRect.x;\n pathY1 = pathY2 = this.segmentCollections[i];\n pathX2 = legendRect.x + legendRect.width;\n }\n else {\n pathX1 = pathX2 = this.segmentCollections[i];\n pathY1 = legendRect.y;\n pathY2 = legendRect.y + legendRect.height;\n }\n var direction = new Line(pathX1, pathY1, pathX2, pathY2);\n var line = new LineOption(this.heatMap.element.id + '_ColorAxis_Grid' + i, direction, '#EEEEEE', 1);\n this.drawSvgCanvas.drawLine(line, legendElement);\n if (!heatMap.enableCanvasRendering) {\n this.legend.appendChild(legendElement);\n }\n }\n };\n /**\n * @private\n */\n Legend.prototype.renderLegendLabelTooltip = function (e) {\n var x = this.heatMap.mouseX;\n var y = this.heatMap.mouseY;\n if (e.target.id.indexOf('_Legend_Label') !== -1 && event.target.textContent.indexOf('...') > -1) {\n var targetId = event.target.id.split(this.heatMap.element.id + '_Legend_Label');\n if (targetId.length === 2) {\n var index = void 0;\n if (targetId[1].length === 1 || this.heatMap.legendSettings.textStyle.textOverflow === 'Trim') {\n index = parseInt(targetId[1], 10);\n }\n else {\n index = parseInt(targetId[1].substring(0, targetId[1].length - 1), 10);\n }\n showTooltip(this.labelCollections[index], x, y, this.heatMap.element.offsetWidth, this.heatMap.element.id + '_LegendLabel_Tooltip', getElement(this.heatMap.element.id + '_Secondary_Element'));\n document.getElementById(this.heatMap.element.id + '_LegendLabel_Tooltip').style.visibility = 'visible';\n }\n }\n else {\n var element = document.getElementById(this.heatMap.element.id + '_LegendLabel_Tooltip');\n if (element) {\n element.style.visibility = 'hidden';\n }\n }\n };\n Legend.prototype.calculateListPerPage = function (rect) {\n var heatMap = this.heatMap;\n if (heatMap.horizontalGradient) {\n this.lastList = [];\n var legendX = rect.x;\n var legendY = rect.y;\n var size = 0;\n var division = 0;\n var labelX = 0;\n var labelY = 0;\n var interval = 20;\n var i = void 0;\n var legendSize = 10;\n var padding = 5;\n this.labelXCollections = [];\n this.labelYCollections = [];\n this.legendXCollections = [];\n this.legendYCollections = [];\n for (i = 0; i < heatMap.colorCollection.length; i++) {\n if (heatMap.legendSettings.showLabel) {\n var text = this.labelCollections[i];\n size = measureText(text, heatMap.legendSettings.textStyle).width;\n }\n labelX = legendX + legendSize + padding;\n labelY = legendY + padding;\n var maxWidth = heatMap.legendSettings.showLabel ? labelX + size : legendX + this.legendSize + this.listInterval;\n if (i !== 0 && maxWidth > this.legendGroup.width + this.legendGroup.x - this.listInterval) {\n division += 1;\n legendX = rect.x;\n legendY = rect.y + (division * interval);\n labelX = legendX + legendSize + padding;\n labelY = legendY + padding;\n if (division % (this.listPerPage) === 0) {\n this.lastList.push(i);\n legendY = rect.y;\n labelY = legendY + padding;\n division = 0;\n }\n }\n this.labelXCollections.push(labelX);\n this.labelYCollections.push(labelY);\n this.legendXCollections.push(legendX);\n this.legendYCollections.push(legendY);\n legendX = legendX + this.legendSize + this.labelPadding + size + this.listInterval;\n }\n this.lastList.push(i);\n this.numberOfPages = this.lastList.length;\n }\n };\n Legend.prototype.renderListLegendMode = function (rect) {\n var heatMap = this.heatMap;\n var legendSize = 10;\n var tempBorder = {\n color: 'transparent',\n width: 0,\n };\n var padding = 5; // padding for legend label from top\n this.legendLabelTooltip = [];\n var listRect;\n var size = new Size(0, 0);\n var division = 0;\n var labelX = 0;\n var labelY = 0;\n var legendX = rect.x;\n var legendY = rect.y;\n this.renderPagingElements();\n var x;\n var y;\n var textWrapWidth = this.legendGroup.width - (this.legendSize +\n this.legendRectPadding + this.labelPadding);\n if (!heatMap.horizontalGradient) {\n x = (this.currentPage * (this.listPerPage)) - (this.listPerPage);\n y = x + this.listPerPage;\n y = y < heatMap.colorCollection.length ? y : heatMap.colorCollection.length;\n }\n else {\n x = this.currentPage === 1 ? 0 : this.lastList[this.currentPage - 2];\n y = this.lastList[this.currentPage - 1];\n }\n for (var i = x; i < y; i++) {\n if (heatMap.legendSettings.showLabel) {\n var text = this.labelCollections[i];\n size = measureText(text, heatMap.legendSettings.textStyle);\n }\n if (heatMap.horizontalGradient) {\n legendX = this.legendXCollections[i];\n legendY = this.legendYCollections[i];\n labelX = this.labelXCollections[i];\n labelY = this.labelYCollections[i];\n }\n if (heatMap.legendSettings.showLabel) {\n labelX = legendX + this.legendSize + this.labelPadding;\n labelY = legendY + padding;\n var text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, textWrapWidth);\n if (text[0].indexOf('...') !== -1 && heatMap.enableCanvasRendering) {\n this.legendLabelTooltip.push(new CanvasTooltip(this.labelCollections[i], new Rect(labelX, labelY, size.width, size.height)));\n }\n var textBasic = new TextBasic(labelX, labelY, 'start', text, 0, 'translate(0,0)', 'middle');\n var options = new TextOption(heatMap.element.id + '_Legend_Label' + i, textBasic, heatMap.legendSettings.textStyle, heatMap.legendSettings.textStyle.color || heatMap.themeStyle.legendLabel);\n if (text.length > 1) {\n this.drawSvgCanvas.createWrapText(options, heatMap.legendSettings.textStyle, this.translategroup);\n }\n else {\n this.drawSvgCanvas.createText(options, this.translategroup, text[0]);\n }\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n this.translategroup.lastChild.setAttribute('dy', '0.6ex');\n }\n }\n listRect = new Rect(legendX, legendY, legendSize, legendSize);\n var rectItems = new RectOption(heatMap.element.id + '_legend_list' + i, heatMap.colorCollection[i].color, tempBorder, 1, listRect);\n this.drawSvgCanvas.drawRectangle(rectItems, this.translategroup);\n heatMap.horizontalGradient ? legendX = legendX + this.legendSize + this.labelPadding + size.width + this.listInterval :\n legendY += this.legendSize + this.listInterval;\n }\n if (!heatMap.enableCanvasRendering) {\n var clippath = heatMap.renderer.createClipPath({ id: heatMap.element.id + '_LegendScale_ClipPath' });\n var clipRect = heatMap.renderer.drawRectangle(this.legendGroup);\n clippath.appendChild(clipRect);\n this.translategroup.appendChild(clippath);\n this.translategroup.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n this.legendScale.appendChild(this.translategroup);\n heatMap.svgObject.appendChild(this.legend);\n }\n };\n /**\n * @private\n */\n Legend.prototype.translatePage = function (heatMap, page, isNext) {\n var padding = 5;\n if ((isNext && page >= 1 && page < this.numberOfPages) || (!isNext && page > 1 && page <= this.numberOfPages)) {\n if (isNext) {\n this.currentPage += 1;\n this.legendRect.y += this.legendRect.height;\n }\n else {\n this.currentPage -= 1;\n this.legendRect.y -= this.legendRect.height;\n }\n if (!heatMap.enableCanvasRendering) {\n this.paginggroup.removeChild(this.paginggroup.firstChild);\n while (this.translategroup.childNodes.length) {\n this.translategroup.removeChild(this.translategroup.firstChild);\n }\n }\n else {\n var ctx = heatMap.canvasRenderer.ctx;\n ctx.fillRect(this.legendRectScale.x - padding, this.legendRectScale.y - padding, this.legendRectScale.width +\n padding, this.legendRectScale.height + (2 * padding));\n ctx.fillRect(this.pagingRect.x, this.pagingRect.y, this.pagingRect.width, this.pagingRect.height);\n }\n this.renderListLegendMode(this.legendRectScale);\n }\n };\n /**\n * To create div container for tooltip which appears on hovering the smart legend.\n * @param heatmap\n * @private\n */\n Legend.prototype.createTooltipDiv = function (heatMap) {\n var element = createElement('div', {\n id: this.heatMap.element.id + 'legendLabelTooltipContainer',\n styles: 'position:absolute'\n });\n this.heatMap.element.appendChild(element);\n };\n /**\n * To render tooltip for smart legend.\n * @private\n */\n Legend.prototype.renderTooltip = function (currentLegendRect) {\n var heatMap = this.heatMap;\n var tempTooltipText = [currentLegendRect.label];\n var offset = null;\n offset = parseInt(heatMap.legendSettings.textStyle.size, 10) / 2;\n this.tooltipObject = new tool({\n offset: offset,\n theme: heatMap.theme,\n content: tempTooltipText,\n location: {\n x: currentLegendRect.x + (currentLegendRect.width / 2),\n y: currentLegendRect.y + (currentLegendRect.height / 2)\n },\n inverted: heatMap.horizontalGradient ? false : true,\n areaBounds: {\n height: this.legendGroup.height + this.legendGroup.y,\n width: this.legendGroup.width + this.legendGroup.x,\n x: heatMap.legendSettings.position === 'Right' ? 0 : this.legendGroup.x,\n y: heatMap.legendSettings.position === 'Top' ? heatMap.titleSettings.text === '' ? this.legendGroup.height -\n this.legendGroup.y : this.legendGroup.y : 0\n }\n }, '#' + this.heatMap.element.id + 'legendLabelTooltipContainer');\n this.tooltipObject.element.style.visibility = 'visible';\n };\n /**\n * To create tooltip for smart legend.\n * @private\n */\n Legend.prototype.createTooltip = function (pageX, pageY) {\n var currentLegendRect;\n for (var i = 0; i < this.heatMap.colorCollection.length; i++) {\n var position = this.legendRectPositionCollection[i];\n if (pageX > position.x && pageX < position.width + position.x &&\n pageY > position.y && pageY < position.height + position.y) {\n currentLegendRect = this.legendRectPositionCollection[i];\n break;\n }\n }\n var ele = document.getElementById(this.heatMap.element.id + 'legendLabelTooltipContainer');\n if (ele && ele.style.visibility === 'visible' && this.tooltipObject && !this.heatMap.isTouch) {\n this.tooltipObject.fadeOut();\n ele.style.visibility = 'hidden';\n }\n if (currentLegendRect) {\n this.renderTooltip(currentLegendRect);\n }\n };\n return Legend;\n}());\nexport { Legend };\n","/**\n * Heat Map Component\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})();\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, Complex } from '@syncfusion/ej2-base';\nimport { remove, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { SvgRenderer, CanvasRenderer, Browser } from '@syncfusion/ej2-base';\nimport { Size, stringToNumber, RectOption, Rect, TextBasic, measureText } from './utils/helper';\nimport { DrawSvgCanvas, TextOption, titlePositionX, getTitle, showTooltip, getElement } from './utils/helper';\nimport { removeElement, CanvasTooltip, getTooltipText } from './utils/helper';\nimport { Margin, Title } from './model/base';\nimport { Theme, getThemeColor } from './model/theme';\nimport { Axis } from './axis/axis';\nimport { AxisHelper } from './axis/axis-helpers';\nimport { Series, CellSettings } from './series/series';\nimport { PaletteSettings, CellColor } from './utils/colorMapping';\nimport { TwoDimensional } from './datasource/twodimensional';\nimport { LegendSettings } from '../heatmap/legend/legend';\nvar HeatMap = /** @class */ (function (_super) {\n __extends(HeatMap, _super);\n function HeatMap() {\n /**\n * The width of the heatmap as a string accepts input as both like '100px' or '100%'.\n * If specified as '100%, heatmap renders to the full width of its parent element.\n * @default null\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.enableCanvasRendering = false;\n /** @private */\n _this.horizontalGradient = _this.legendSettings.position === 'Bottom' || _this.legendSettings.position === 'Top';\n /**\n * @private\n */\n _this.tooltipCollection = [];\n /**\n * @private\n */\n _this.isCellData = false;\n return _this;\n }\n HeatMap.prototype.preRender = function () {\n this.initPrivateVariable();\n this.unWireEvents();\n this.wireEvents();\n };\n HeatMap.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.canvasRenderer = new CanvasRenderer(this.element.id);\n this.heatMapAxis = new AxisHelper(this);\n this.heatMapSeries = new Series(this);\n this.drawSvgCanvas = new DrawSvgCanvas(this);\n this.twoDimensional = new TwoDimensional(this);\n this.cellColor = new CellColor(this);\n this.tempRectHoverClass = '';\n this.tempTooltipRectId = '';\n this.setCulture();\n };\n /**\n * Method to set culture for heatmap\n */\n HeatMap.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n HeatMap.prototype.render = function () {\n this.updateBubbleHelperProperty();\n this.trigger('load', { heatmap: this });\n this.processInitData();\n this.setTheme();\n this.initAxis();\n this.calculateMaxLength();\n this.heatMapAxis.calculateVisibleLabels();\n this.twoDimensional.processDataSource(this.completeAdaptDataSource);\n this.createSvg();\n this.cellColor.getColorCollection();\n this.calculateBounds();\n this.renderElements();\n this.element.appendChild(this.svgObject);\n if (this.tooltipModule) {\n this.tooltipModule.showHideTooltip(false);\n }\n this.trigger('created', { heatmap: this });\n };\n /**\n * To re-calculate the datasource while changing datasource property dynamically.\n * @private\n */\n HeatMap.prototype.reRenderDatasource = function () {\n this.dataSourceMinValue = null;\n this.dataSourceMaxValue = null;\n this.processInitData();\n this.calculateMaxLength();\n this.heatMapAxis.calculateVisibleLabels();\n this.twoDimensional.processDataSource(this.completeAdaptDataSource);\n this.cellColor.getColorCollection();\n this.calculateBounds();\n };\n /**\n * To process datasource property.\n * @private\n */\n HeatMap.prototype.processInitData = function () {\n if (this.adaptorModule) {\n this.adaptorModule.constructDatasource(this.dataSource);\n }\n else {\n this.completeAdaptDataSource = this.dataSource;\n }\n };\n /**\n * To set render mode of heatmap as SVG or Canvas.\n * @private\n */\n HeatMap.prototype.setRenderMode = function () {\n if (this.renderingMode === 'Canvas') {\n this.enableCanvasRendering = true;\n }\n else if (this.renderingMode === 'Auto' &&\n (this.axisCollections[0].axisLabelSize * this.axisCollections[1].axisLabelSize) >= 10000) {\n this.enableCanvasRendering = true;\n }\n else {\n this.enableCanvasRendering = false;\n }\n };\n /**\n * To set bubble helper private property.\n * @private\n */\n HeatMap.prototype.updateBubbleHelperProperty = function () {\n if (this.cellSettings.tileType === 'Bubble' &&\n (this.cellSettings.bubbleType === 'Size' || this.cellSettings.bubbleType === 'Sector')) {\n this.legendVisibilityByCellType = false;\n }\n else if (this.legendModule && this.legendSettings.visible) {\n this.legendVisibilityByCellType = true;\n }\n if (this.cellSettings.tileType === 'Bubble' && this.cellSettings.bubbleType === 'SizeAndColor') {\n this.bubbleSizeWithColor = true;\n }\n else {\n this.bubbleSizeWithColor = false;\n }\n };\n HeatMap.prototype.renderElements = function () {\n this.renderSecondaryElement();\n this.renderBorder();\n this.renderTitle();\n this.heatMapAxis.renderAxes();\n if (this.tooltipModule && this.showTooltip) {\n this.tooltipModule.tooltipObject = null;\n this.tooltipModule.createTooltipDiv(this);\n }\n this.heatMapSeries.renderRectSeries();\n if (this.legendModule && this.legendSettings.visible\n && this.legendVisibilityByCellType) {\n this.legendModule.renderLegendItems();\n if (this.paletteSettings.type === 'Fixed' && this.legendSettings.enableSmartLegend &&\n this.legendSettings.labelDisplayType === 'None') {\n this.legendModule.createTooltipDiv(this);\n }\n }\n };\n /**\n * Get component name\n */\n HeatMap.prototype.getModuleName = function () {\n return 'heatmap';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n HeatMap.prototype.getPersistData = function () {\n return '';\n };\n HeatMap.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 'renderingMode':\n renderer = true;\n break;\n case 'cellSettings':\n this.updateBubbleHelperProperty();\n this.reRenderDatasource();\n refreshBounds = true;\n break;\n case 'showTooltip':\n refreshBounds = true;\n break;\n case 'dataSource':\n this.isCellData = false;\n this.updateBubbleHelperProperty();\n this.reRenderDatasource();\n renderer = true;\n break;\n case 'titleSettings':\n case 'width':\n case 'height':\n case 'margin':\n case 'legendSettings':\n refreshBounds = true;\n break;\n case 'yAxis':\n case 'xAxis':\n this.reRenderDatasource();\n refreshBounds = true;\n break;\n case 'paletteSettings':\n this.cellColor.getColorCollection();\n this.calculateBounds();\n renderer = true;\n break;\n case 'theme':\n this.setTheme();\n renderer = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.createSvg();\n this.renderElements();\n this.element.appendChild(this.svgObject);\n this.trigger('created', { heatmap: this });\n }\n else if (refreshBounds) {\n this.createSvg();\n this.refreshBound();\n this.element.appendChild(this.svgObject);\n this.trigger('created', { heatmap: this });\n }\n };\n HeatMap.prototype.createSvg = function () {\n this.removeSvg();\n this.setRenderMode();\n this.calculateSize();\n if (!this.enableCanvasRendering) {\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n if (this.cellSettings.border.width.toString() === '0' && this.cellSettings.tileType === 'Rect') {\n this.svgObject.setAttribute('shape-rendering', 'crispEdges');\n }\n }\n else {\n this.svgObject = this.canvasRenderer.createCanvas({\n id: this.element.id + '_canvas',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n }\n };\n /**\n * To Remove the SVG.\n */\n HeatMap.prototype.removeSvg = function () {\n if (document.getElementById(this.element.id + '_Secondary_Element')) {\n remove(document.getElementById(this.element.id + '_Secondary_Element'));\n }\n if (document.getElementById(this.element.id + 'Celltooltipcontainer')) {\n remove(document.getElementById(this.element.id + 'Celltooltipcontainer'));\n }\n if (document.getElementById(this.element.id + 'legendLabelTooltipContainer')) {\n remove(document.getElementById(this.element.id + 'legendLabelTooltipContainer'));\n }\n if (this.svgObject) {\n var svgElement = document.getElementById(this.svgObject.id);\n if (svgElement) {\n while (this.svgObject.childNodes.length) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n remove(this.svgObject);\n }\n }\n };\n HeatMap.prototype.renderSecondaryElement = function () {\n var tooltipDiv = this.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return{ModuleDeclaration[]}\n * @private\n */\n HeatMap.prototype.requiredModules = function () {\n var modules = [];\n if (this.showTooltip) {\n modules.push({\n member: 'Tooltip',\n args: [this]\n });\n }\n if (this.legendSettings) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.dataSource) {\n modules.push({\n member: 'Adaptor',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of Heatmap\n */\n HeatMap.prototype.destroy = function () {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n this.element.classList.remove('e-heatmap');\n };\n HeatMap.prototype.renderBorder = function () {\n this.border = {\n width: 0\n };\n var width = 0;\n var rect = new RectOption(this.element.id + '_HeatmapBorder', this.themeStyle.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.drawSvgCanvas.drawRectangle(rect, this.svgObject);\n };\n HeatMap.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 HeatMap.prototype.renderTitle = function () {\n if (this.titleSettings.text) {\n var titleStyle = this.titleSettings.textStyle;\n var anchor = titleStyle.textAlignment === 'Near' ? 'start' :\n titleStyle.textAlignment === 'Far' ? 'end' : 'middle';\n this.elementSize = measureText(this.titleCollection[0], titleStyle);\n var options = new TextOption(this.element.id + '_HeatmapTitle', new TextBasic(titlePositionX(this.availableSize.width - this.margin.left - this.margin.right, this.margin.left, this.margin.right, titleStyle), this.margin.top + ((this.elementSize.height) * 3 / 4), anchor, this.titleCollection), titleStyle, titleStyle.color || this.themeStyle.heatMapTitle);\n if (this.titleCollection.length > 1) {\n this.drawSvgCanvas.createWrapText(options, titleStyle, this.svgObject);\n }\n else {\n this.drawSvgCanvas.createText(options, this.svgObject, this.titleCollection[0]);\n if (this.titleCollection[0].indexOf('...') !== -1 && this.enableCanvasRendering) {\n this.tooltipCollection.push(new CanvasTooltip(this.titleSettings.text, new Rect(this.margin.left, this.margin.top, this.elementSize.width, this.elementSize.height)));\n }\n }\n }\n };\n HeatMap.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId === (this.element.id + '_HeatmapTitle')) && (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.titleSettings.text, x, y, this.element.offsetWidth, this.element.id + '_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_Title_Tooltip');\n }\n };\n HeatMap.prototype.axisTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId.indexOf(this.element.id + '_XAxis_Label') !== -1) && (event.target.textContent.indexOf('...') > -1)) {\n var index = parseInt(targetId.replace(this.element.id + '_XAxis_Label', ''), 10);\n showTooltip(this.axisCollections[0].axisLabels[index], x, y, this.element.offsetWidth, this.element.id + '_axis_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_axis_Tooltip');\n }\n };\n HeatMap.prototype.isHeatmapRect = function (x, y) {\n var firstRectDetails = [];\n var lastRectDetails = [];\n var isRect;\n firstRectDetails.push(this.heatMapSeries.rectPositionCollection[0][0]);\n lastRectDetails.push(this.heatMapSeries.rectPositionCollection[this.yLength - 1][this.xLength - 1]);\n isRect = (x >= firstRectDetails[0].x && y >= firstRectDetails[0].y &&\n x <= (lastRectDetails[0].x + lastRectDetails[0].width) &&\n y <= (lastRectDetails[0].y + lastRectDetails[0].height)) ? true : false;\n return isRect;\n };\n HeatMap.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getThemeColor(this.theme);\n };\n HeatMap.prototype.calculateBounds = function () {\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n var padding = (this.legendModule && this.legendSettings.position === 'Top'\n && this.legendVisibilityByCellType) ? 0 : 16; // title padding\n var left = margin.left;\n var width = this.availableSize.width - left - margin.right;\n if (this.titleSettings.text) {\n this.titleCollection = getTitle(this.titleSettings.text, this.titleSettings.textStyle, width);\n titleHeight = (measureText(this.titleSettings.text, this.titleSettings.textStyle).height * this.titleCollection.length) +\n padding;\n }\n var top = margin.top + titleHeight;\n var height = this.availableSize.height - top - margin.bottom;\n this.initialClipRect = new Rect(left, top, width, height);\n var legendTop = this.initialClipRect.y;\n if (this.legendModule && this.legendSettings.visible && this.legendVisibilityByCellType) {\n this.legendModule.calculateLegendBounds(this.initialClipRect);\n }\n this.heatMapAxis.measureAxis(this.initialClipRect);\n if (this.legendModule && this.legendSettings.visible && this.legendVisibilityByCellType) {\n this.legendModule.calculateLegendSize(this.initialClipRect, legendTop);\n }\n this.heatMapAxis.calculateAxisSize(this.initialClipRect);\n };\n HeatMap.prototype.refreshBound = function () {\n this.updateBubbleHelperProperty();\n this.calculateBounds();\n this.renderElements();\n };\n HeatMap.prototype.initAxis = function () {\n var axis;\n var axes = [this.xAxis, this.yAxis];\n this.axisCollections = [];\n for (var i = 0, len = axes.length; i < len; i++) {\n axis = axes[i];\n axis.orientation = (i === 0) ? 'Horizontal' : 'Vertical';\n this.axisCollections.push(axis);\n }\n };\n /**\n * Method to bind events for HeatMap\n */\n HeatMap.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 EventHandler.add(this.element, Browser.isDevice ? start : 'click', this.heatMapMouseClick, this);\n EventHandler.add(this.element, start, this.heatMapMouseMove, this);\n EventHandler.add(this.element, stop, this.heatMapMouseLeave, this);\n EventHandler.add(this.element, move, this.heatMapMouseMove, this);\n EventHandler.add(this.element, cancel, this.heatMapMouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.heatMapResize.bind(this));\n this.setStyle(this.element);\n };\n /**\n * Applying styles for heatmap element\n */\n HeatMap.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 element.style.display = 'block';\n };\n /**\n * Method to unbind events for HeatMap\n */\n HeatMap.prototype.unWireEvents = 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 EventHandler.remove(this.element, Browser.isDevice ? start : 'click', this.heatMapMouseClick);\n EventHandler.remove(this.element, start, this.heatMapMouseMove);\n EventHandler.remove(this.element, move, this.heatMapMouseLeave);\n EventHandler.remove(this.element, move, this.heatMapMouseMove);\n EventHandler.remove(this.element, cancel, this.heatMapMouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.heatMapResize);\n };\n /**\n * Handles the heatmap resize.\n * @return {boolean}\n * @private\n */\n HeatMap.prototype.heatMapResize = function (e) {\n var _this = this;\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer);\n }\n this.resizeTimer = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTimer);\n return;\n }\n _this.createSvg();\n _this.refreshBound();\n _this.element.appendChild(_this.svgObject);\n }, 500);\n return false;\n };\n /**\n * Get the maximum length of data source for both horizontal and vertical\n * @private\n */\n HeatMap.prototype.calculateMaxLength = function () {\n var dataSource = this.completeAdaptDataSource;\n if (dataSource && dataSource.length > 0) {\n var xAxisMax = dataSource.length - 1;\n var yAxisMax = 0;\n for (var i = 0; i <= xAxisMax; i++) {\n var length_1 = dataSource[i].length;\n yAxisMax = yAxisMax > length_1 ? yAxisMax : length_1;\n }\n this.axisCollections[0].maxLength = xAxisMax;\n this.axisCollections[1].maxLength = yAxisMax - 1;\n }\n else {\n this.axisCollections[0].maxLength = 0;\n this.axisCollections[1].maxLength = 0;\n }\n };\n /**\n * To find mouse x, y for aligned heatmap element svg position\n */\n HeatMap.prototype.setMouseXY = function (pageX, pageY) {\n var rect = this.element.getBoundingClientRect();\n var svgCanvasRect;\n if (this.enableCanvasRendering) {\n svgCanvasRect = document.getElementById(this.element.id + '_canvas').getBoundingClientRect();\n }\n else {\n svgCanvasRect = document.getElementById(this.element.id + '_svg').getBoundingClientRect();\n }\n this.mouseX = (pageX - rect.left) - Math.max(svgCanvasRect.left - rect.left, 0);\n this.mouseY = (pageY - rect.top) - Math.max(svgCanvasRect.top - rect.top, 0);\n };\n HeatMap.prototype.heatMapMouseClick = function (e) {\n var pageX;\n var pageY;\n var tooltipText;\n var touchArg;\n var elementRect = this.element.getBoundingClientRect();\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = false;\n pageY = e.clientY;\n pageX = e.clientX;\n }\n pageX -= elementRect.left;\n pageY -= elementRect.top;\n var isheatmapRect = this.isHeatmapRect(pageX, pageY);\n if (isheatmapRect) {\n var currentRect = this.heatMapSeries.getCurrentRect(pageX, pageY);\n this.trigger('cellClick', {\n heatmap: this,\n value: currentRect.value,\n x: currentRect.x,\n y: currentRect.y,\n xLabel: this.heatMapSeries.hoverXAxisLabel,\n yLabel: this.heatMapSeries.hoverYAxisLabel,\n xValue: this.heatMapSeries.hoverXAxisValue,\n yValue: this.heatMapSeries.hoverYAxisValue,\n cellElement: this.enableCanvasRendering ? null : document.getElementById(currentRect.id)\n });\n }\n this.notify('click', e);\n if (this.paletteSettings.type !== 'Gradient' && this.legendModule\n && this.legendSettings.visible && this.legendVisibilityByCellType) {\n var page = this.legendModule.navigationCollections;\n if (page.length && pageX > page[0].x && pageX < page[0].x + page[0].width &&\n pageY > page[0].y && pageY < page[0].y + page[0].height) {\n this.legendModule.translatePage(this, this.legendModule.currentPage, true);\n }\n else if (page.length && pageX > page[1].x && pageX < page[1].x + page[1].width &&\n pageY > page[1].y && pageY < page[1].y + page[1].height) {\n this.legendModule.translatePage(this, this.legendModule.currentPage, false);\n }\n }\n return false;\n };\n /**\n * Handles the mouse Move.\n * @return {boolean}\n * @private\n */\n HeatMap.prototype.heatMapMouseMove = function (e) {\n var _this = this;\n var pageX;\n var pageY;\n var tooltipText;\n var touchArg;\n var elementRect = this.element.getBoundingClientRect();\n if (e.type === 'touchmove' || e.type === 'touchstart') {\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 = false;\n pageX = e.clientX;\n pageY = e.clientY;\n }\n pageX -= elementRect.left;\n pageY -= elementRect.top;\n this.setMouseXY(pageX, pageY);\n if (e.target && e.target.id) {\n var isheatmapRect = this.isHeatmapRect(pageX, pageY);\n if (this.legendModule) {\n if (isheatmapRect) {\n if (this.paletteSettings.type === 'Gradient' &&\n this.legendSettings.showGradientPointer && this.legendSettings.visible && this.legendVisibilityByCellType) {\n this.legendModule.renderGradientPointer(e, pageX, pageY);\n }\n }\n else {\n this.legendModule.removeGradientPointer();\n }\n }\n var isshowTooltip = void 0;\n isshowTooltip = this.showTooltip && this.tooltipModule ? this.isHeatmapRect(pageX, pageY) : false;\n if (isshowTooltip) {\n var currentRect = void 0;\n currentRect = this.heatMapSeries.getCurrentRect(pageX, pageY);\n if (this.tempTooltipRectId !== currentRect.id) {\n if (this.showTooltip) {\n if ((this.cellSettings.enableCellHighlighting || (this.tooltipModule && this.showTooltip))\n && !this.enableCanvasRendering) {\n this.heatMapSeries.highlightSvgRect(currentRect.id);\n }\n this.tooltipModule.renderTooltip(currentRect);\n if (this.isTouch) {\n if (this.tooltipTimer) {\n window.clearTimeout(this.tooltipTimer);\n }\n this.tooltipTimer = setTimeout(function () {\n _this.tooltipModule.tooltipObject.fadeOut();\n _this.tooltipModule.isFadeout = true;\n }, 1500);\n if (e.type === 'touchmove') {\n e.preventDefault();\n }\n }\n }\n this.tempTooltipRectId = currentRect.id;\n }\n }\n else {\n if (e.target.id.indexOf('Celltooltip') === -1) {\n if ((this.cellSettings.enableCellHighlighting || this.showTooltip) && !this.enableCanvasRendering) {\n this.heatMapSeries.highlightSvgRect(e.target.id);\n }\n if (this.tooltipModule && this.showTooltip) {\n this.tooltipModule.showHideTooltip(false, true);\n }\n }\n this.tempTooltipRectId = '';\n }\n if (this.legendModule && this.legendSettings.visible && this.paletteSettings.type === 'Fixed' &&\n this.legendSettings.enableSmartLegend && this.legendSettings.labelDisplayType === 'None') {\n this.legendModule.createTooltip(pageX, pageY);\n }\n if (!this.enableCanvasRendering) {\n if (this.titleSettings.text && this.titleSettings.textStyle.textOverflow === 'Trim') {\n this.titleTooltip(e, pageX, pageY, this.isTouch);\n }\n this.axisTooltip(e, pageX, pageY, this.isTouch);\n if (this.legendModule && this.legendSettings.visible && this.legendSettings.showLabel && this.legendVisibilityByCellType) {\n this.legendModule.renderLegendLabelTooltip(e);\n }\n }\n else {\n elementRect = this.element.getBoundingClientRect();\n var tooltipRect = (this.paletteSettings.type === 'Fixed' && this.legendSettings.enableSmartLegend &&\n this.legendSettings.labelDisplayType === 'None') ? false : true;\n tooltipText = getTooltipText(this.tooltipCollection, pageX, pageY) ||\n (this.legendModule && tooltipRect && getTooltipText(this.legendModule.legendLabelTooltip, pageX, pageY));\n if (tooltipText) {\n showTooltip(tooltipText, this.mouseX, this.mouseY, this.element.offsetWidth, this.element.id + '_canvas_Tooltip', getElement(this.element.id + '_Secondary_Element'), this.isTouch);\n }\n else {\n removeElement(this.element.id + '_canvas_Tooltip');\n }\n }\n }\n return true;\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n HeatMap.prototype.heatMapMouseLeave = function (e) {\n var _this = this;\n if (e.target && e.target.id &&\n (this.cellSettings.enableCellHighlighting || (this.tooltipModule && this.showTooltip))\n && !this.enableCanvasRendering) {\n this.heatMapSeries.highlightSvgRect(this.tempTooltipRectId);\n }\n if (this.tooltipModule && this.showTooltip && e.type === 'mouseleave') {\n this.tooltipModule.showHideTooltip(false);\n }\n this.tempTooltipRectId = '';\n if (this.legendModule && this.legendSettings.visible && this.legendModule.tooltipObject &&\n this.legendModule.tooltipObject.element) {\n var tooltipElement_1 = this.legendModule.tooltipObject.element.firstChild;\n if (e.type === 'mouseleave') {\n tooltipElement_1.setAttribute('opacity', '0');\n }\n else {\n if (this.legendTooltipTimer) {\n window.clearTimeout(this.legendTooltipTimer);\n }\n this.legendTooltipTimer = setTimeout(function () {\n tooltipElement_1.setAttribute('opacity', '0');\n }, 1500);\n }\n }\n if (this.paletteSettings.type === 'Gradient' && this.legendModule && this.legendSettings.showGradientPointer &&\n this.legendSettings.visible && this.legendVisibilityByCellType) {\n if (e.type === 'mouseleave') {\n this.legendModule.removeGradientPointer();\n }\n else {\n if (this.gradientTimer) {\n window.clearTimeout(this.gradientTimer);\n }\n this.gradientTimer = setTimeout(function () { _this.legendModule.removeGradientPointer(); }, 1500);\n }\n }\n if (this.enableCanvasRendering) {\n var main = document.getElementById(this.element.id + '_hoverRect_canvas');\n if (main) {\n main.style.visibility = 'hidden';\n this.tempRectHoverClass = '';\n }\n }\n if (this.titleSettings.text && this.titleCollection[0].indexOf('...') !== -1) {\n if (!this.enableCanvasRendering) {\n removeElement(this.element.id + '_Title_Tooltip');\n }\n else {\n removeElement(this.element.id + '_canvas_Tooltip');\n }\n }\n return true;\n };\n __decorate([\n Property(null)\n ], HeatMap.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], HeatMap.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], HeatMap.prototype, \"showTooltip\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"tooltipRender\", void 0);\n __decorate([\n Property('SVG')\n ], HeatMap.prototype, \"renderingMode\", void 0);\n __decorate([\n Property(null)\n ], HeatMap.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Material')\n ], HeatMap.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, Margin)\n ], HeatMap.prototype, \"margin\", void 0);\n __decorate([\n Complex({ text: '', textStyle: Theme.heatMapTitleFont }, Title)\n ], HeatMap.prototype, \"titleSettings\", void 0);\n __decorate([\n Complex({}, Axis)\n ], HeatMap.prototype, \"xAxis\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], HeatMap.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, PaletteSettings)\n ], HeatMap.prototype, \"paletteSettings\", void 0);\n __decorate([\n Complex({}, Axis)\n ], HeatMap.prototype, \"yAxis\", void 0);\n __decorate([\n Complex({}, CellSettings)\n ], HeatMap.prototype, \"cellSettings\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"cellClick\", void 0);\n HeatMap = __decorate([\n NotifyPropertyChanges\n ], HeatMap);\n return HeatMap;\n}(Component));\nexport { HeatMap };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isNullOrUndefined, Complex } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { increaseDateTimeInterval } from '../utils/helper';\nimport { BubbleData } from '../model/base';\n/**\n * Configures the Adaptor Property in the Heatmap.\n */\nvar Data = /** @class */ (function (_super) {\n __extends(Data, _super);\n function Data() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Data.prototype, \"data\", void 0);\n __decorate([\n Property(false)\n ], Data.prototype, \"isJsonData\", void 0);\n __decorate([\n Property('cell')\n ], Data.prototype, \"adaptorType\", void 0);\n __decorate([\n Property('')\n ], Data.prototype, \"xDataMapping\", void 0);\n __decorate([\n Property('')\n ], Data.prototype, \"yDataMapping\", void 0);\n __decorate([\n Property('')\n ], Data.prototype, \"valueMapping\", void 0);\n __decorate([\n Complex({}, BubbleData)\n ], Data.prototype, \"bubbleDataMapping\", void 0);\n return Data;\n}(ChildProperty));\nexport { Data };\nvar AdaptiveMinMax = /** @class */ (function () {\n function AdaptiveMinMax() {\n }\n return AdaptiveMinMax;\n}());\nexport { AdaptiveMinMax };\n/**\n *\n * The `Adaptor` module is used to handle JSON and Table data.\n */\nvar Adaptor = /** @class */ (function () {\n function Adaptor(heatMap) {\n this.reconstructedXAxis = [];\n this.reconstructedYAxis = [];\n this.adaptiveXMinMax = new AdaptiveMinMax();\n this.adaptiveYMinMax = new AdaptiveMinMax();\n this.heatMap = heatMap;\n }\n /**\n * Method to construct Two Dimentional Datasource.\n * @return {void}\n * @private\n */\n Adaptor.prototype.constructDatasource = function (adaptData) {\n if (adaptData && adaptData.data === undefined) {\n this.heatMap.completeAdaptDataSource = adaptData;\n }\n else if (!adaptData.isJsonData && adaptData.adaptorType === 'Table' || adaptData.data === null) {\n this.heatMap.completeAdaptDataSource = adaptData.data;\n }\n else if (adaptData.isJsonData && adaptData.adaptorType === 'Table') {\n this.heatMap.completeAdaptDataSource = this.processJsonTableData(adaptData);\n }\n else if (adaptData.isJsonData && adaptData.adaptorType === 'Cell') {\n this.heatMap.completeAdaptDataSource = this.processJsonCellData(adaptData);\n }\n else if (!adaptData.isJsonData && adaptData.adaptorType === 'Cell') {\n var xAxis = this.heatMap.xAxis;\n var yAxis = this.heatMap.yAxis;\n this.adaptiveXMinMax.min = xAxis.minimum;\n this.adaptiveXMinMax.max = xAxis.maximum;\n this.adaptiveYMinMax.min = yAxis.minimum;\n this.adaptiveYMinMax.max = yAxis.maximum;\n if (((xAxis.valueType === 'Numeric' || xAxis.valueType === 'DateTime') &&\n (isNullOrUndefined(xAxis.minimum) || isNullOrUndefined(xAxis.maximum))) ||\n ((yAxis.valueType === 'Numeric' || yAxis.valueType === 'DateTime') &&\n (isNullOrUndefined(yAxis.minimum) || isNullOrUndefined(yAxis.maximum)))) {\n this.getMinMaxValue(adaptData.data, xAxis, yAxis);\n }\n this.constructAdaptiveAxis();\n this.heatMap.completeAdaptDataSource = this.processCellData(adaptData);\n this.heatMap.isCellData = true;\n }\n };\n /**\n * Method to construct Axis Collection.\n * @return {void}\n * @private\n */\n Adaptor.prototype.constructAdaptiveAxis = function () {\n var xAxis = this.heatMap.xAxis;\n var yAxis = this.heatMap.yAxis;\n var intervalType;\n if (xAxis.valueType === 'Numeric') {\n this.reconstructedXAxis = this.getNumericAxisCollection(this.adaptiveXMinMax.min, this.adaptiveXMinMax.max, xAxis.increment);\n }\n if (yAxis.valueType === 'Numeric') {\n this.reconstructedYAxis = this.getNumericAxisCollection(this.adaptiveYMinMax.min, this.adaptiveYMinMax.max, yAxis.increment);\n }\n if (xAxis.valueType === 'DateTime') {\n this.reconstructedXAxis = this.getDateAxisCollection(this.adaptiveXMinMax.min, this.adaptiveXMinMax.max, xAxis.intervalType, xAxis.increment);\n }\n if (yAxis.valueType === 'DateTime') {\n this.reconstructedYAxis = this.getDateAxisCollection(this.adaptiveYMinMax.min, this.adaptiveYMinMax.max, yAxis.intervalType, yAxis.increment);\n }\n };\n /**\n * Method to calculate Numeric Axis Collection.\n * @return {string[]}\n * @private\n */\n Adaptor.prototype.getNumericAxisCollection = function (min, max, increment) {\n var loopIndex = min;\n var tempAxisColl = [];\n while (loopIndex <= max) {\n tempAxisColl.push(loopIndex.toString());\n loopIndex = loopIndex + increment;\n }\n return tempAxisColl;\n };\n /**\n * Method to calculate DateTime Axis Collection.\n * @return {string[]}\n * @private\n */\n Adaptor.prototype.getDateAxisCollection = function (min, max, intervalType, increment) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.heatMap.intl.getDateParser(option);\n var dateFormatter = this.heatMap.intl.getDateFormat(option);\n min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: min }).val))));\n var tempInterval = min;\n var tempAxisColl = [];\n while (tempInterval <= max) {\n tempAxisColl.push(new Date(tempInterval).toString());\n tempInterval = increaseDateTimeInterval(tempInterval, 1, intervalType, increment).getTime();\n }\n return tempAxisColl;\n };\n /**\n * Method to calculate Maximum and Minimum Value from datasource.\n * @return {void}\n * @private\n */\n Adaptor.prototype.getMinMaxValue = function (data, xAxis, yAxis) {\n if (data.length > 0) {\n this.adaptiveXMinMax.min = !isNullOrUndefined(xAxis.minimum) ? xAxis.minimum : data[0][0];\n this.adaptiveYMinMax.min = !isNullOrUndefined(yAxis.minimum) ? yAxis.minimum : data[0][1];\n this.adaptiveXMinMax.max = !isNullOrUndefined(xAxis.maximum) ? xAxis.maximum : data[0][0];\n this.adaptiveYMinMax.max = !isNullOrUndefined(yAxis.maximum) ? yAxis.maximum : data[0][1];\n }\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n if (data[dataIndex][0] < this.adaptiveXMinMax.min && isNullOrUndefined(xAxis.minimum)) {\n this.adaptiveXMinMax.min = data[dataIndex][0];\n }\n if (data[dataIndex][0] > this.adaptiveXMinMax.max && isNullOrUndefined(xAxis.maximum)) {\n this.adaptiveXMinMax.max = data[dataIndex][0];\n }\n if (data[dataIndex][1] < this.adaptiveYMinMax.min && isNullOrUndefined(yAxis.minimum)) {\n this.adaptiveYMinMax.min = data[dataIndex][1];\n }\n if (data[dataIndex][1] > this.adaptiveYMinMax.max && isNullOrUndefined(yAxis.maximum)) {\n this.adaptiveYMinMax.max = data[dataIndex][1];\n }\n }\n };\n /**\n * Method to process Cell datasource.\n * @return {Object}\n * @private\n */\n Adaptor.prototype.processCellData = function (adaptordata) {\n // tslint:disable-next-line:no-any \n var tempDataCollection = adaptordata.data;\n var xLabels = this.reconstructedXAxis;\n var yLabels = this.reconstructedYAxis;\n var currentDataXIndex = 0;\n var currentDataYIndex = 0;\n if (tempDataCollection.length) {\n this.reconstructData = [];\n for (var xindex = 0; xindex < tempDataCollection.length; xindex++) {\n if (this.heatMap.xAxis.valueType === 'Category') {\n currentDataXIndex = tempDataCollection[xindex][0];\n }\n else {\n currentDataXIndex = xLabels.indexOf(tempDataCollection[xindex][0].toString());\n }\n if (currentDataXIndex > -1) {\n while (!this.reconstructData[currentDataXIndex]) {\n this.reconstructData.push([]);\n }\n if (this.heatMap.yAxis.valueType === 'Category') {\n currentDataYIndex = tempDataCollection[xindex][1];\n }\n else {\n currentDataYIndex = yLabels.indexOf(tempDataCollection[xindex][1].toString());\n }\n if (currentDataYIndex !== -1) {\n while (this.reconstructData[currentDataXIndex][currentDataYIndex] !== '') {\n this.reconstructData[currentDataXIndex].push('');\n }\n this.reconstructData[currentDataXIndex][currentDataYIndex] = isNullOrUndefined(tempDataCollection[xindex][2]) ?\n '' : tempDataCollection[xindex][2];\n }\n }\n }\n }\n return this.reconstructData;\n };\n /**\n * Method to process JSON Cell datasource.\n * @return {Object}\n * @private\n */\n Adaptor.prototype.processJsonCellData = function (adaptordata) {\n // tslint:disable-next-line:no-any \n var tempDataCollection = adaptordata.data;\n var xLabels = this.heatMap.xAxis.labels ? this.heatMap.xAxis.labels : [];\n var yLabels = this.heatMap.yAxis.labels ? this.heatMap.yAxis.labels : [];\n var currentDataXIndex = 0;\n var currentDataYIndex = 0;\n if (tempDataCollection.length) {\n this.reconstructData = [];\n for (var index = 0; index < tempDataCollection.length; index++) {\n currentDataXIndex = this.getSplitDataValue(tempDataCollection[index], adaptordata, xLabels, adaptordata.xDataMapping.split('.'));\n if (currentDataXIndex !== -1) {\n while (!this.reconstructData[currentDataXIndex]) {\n this.reconstructData.push([]);\n }\n currentDataYIndex = this.getSplitDataValue(tempDataCollection[index], adaptordata, yLabels, adaptordata.yDataMapping.split('.'));\n if (currentDataYIndex !== -1) {\n while (isNullOrUndefined(this.reconstructData[currentDataXIndex][currentDataYIndex])) {\n this.reconstructData[currentDataXIndex].push('');\n }\n if (this.heatMap.bubbleSizeWithColor) {\n this.reconstructData[currentDataXIndex][currentDataYIndex] = [\n this.getSplitDataValue(tempDataCollection[index], adaptordata, null, adaptordata.bubbleDataMapping.size.split('.')),\n this.getSplitDataValue(tempDataCollection[index], adaptordata, null, adaptordata.bubbleDataMapping.color.split('.'))\n ];\n }\n else {\n this.reconstructData[currentDataXIndex][currentDataYIndex] = this.getSplitDataValue(tempDataCollection[index], adaptordata, null, adaptordata.valueMapping.split('.'));\n }\n }\n }\n }\n }\n return this.reconstructData;\n };\n /**\n * Method to get data from complex mapping.\n * @return {number|string}\n * @private\n */\n Adaptor.prototype.getSplitDataValue = function (\n // tslint:disable-next-line:no-any \n tempSplitDataCollection, adaptordata, labels, tempSplitData) {\n var value = -1;\n this.tempSplitDataCollection = tempSplitDataCollection;\n for (var splitIndex = 0; splitIndex < tempSplitData.length; splitIndex++) {\n value = !isNullOrUndefined(labels) ? labels.indexOf(this.tempSplitDataCollection[tempSplitData[splitIndex]]) : null;\n if (!isNullOrUndefined(this.tempSplitDataCollection)) {\n this.tempSplitDataCollection = value !== -1 && !isNullOrUndefined(labels) ?\n this.tempSplitDataCollection : this.tempSplitDataCollection[tempSplitData[splitIndex]];\n }\n if (isNullOrUndefined(this.tempSplitDataCollection)) {\n break;\n }\n }\n value = !isNullOrUndefined(labels) ? value : isNullOrUndefined(this.tempSplitDataCollection) ||\n this.tempSplitDataCollection.toString() === '' ? '' : parseFloat(this.tempSplitDataCollection.toString());\n return value;\n };\n /**\n * Method to process JSON Table datasource.\n * @return {Object}\n * @private\n */\n Adaptor.prototype.processJsonTableData = function (adaptordata) {\n // tslint:disable-next-line:no-any \n var tempDataCollection = adaptordata.data;\n var currentDataXIndex = 0;\n var currentDataYIndex = 0;\n var xLabels = this.heatMap.xAxis.labels ? this.heatMap.xAxis.labels : [];\n var yLabels = this.heatMap.yAxis.labels ? this.heatMap.yAxis.labels : [];\n var key;\n if (tempDataCollection.length) {\n this.reconstructData = [];\n for (var xindex = 0; xindex < tempDataCollection.length; xindex++) {\n currentDataXIndex = this.getSplitDataValue(tempDataCollection[xindex], adaptordata, xLabels, adaptordata.xDataMapping.split('.'));\n if (currentDataXIndex !== -1) {\n while (!this.reconstructData[currentDataXIndex]) {\n this.reconstructData.push([]);\n }\n for (var index = 0; index < Object.keys(this.tempSplitDataCollection).length; index++) {\n key = Object.keys(this.tempSplitDataCollection)[index];\n currentDataYIndex = key !== adaptordata.xDataMapping ? yLabels.indexOf(key) : -1;\n if (currentDataYIndex !== -1) {\n while (isNullOrUndefined(this.reconstructData[currentDataXIndex][currentDataYIndex])) {\n this.reconstructData[currentDataXIndex].push('');\n }\n this.reconstructData[currentDataXIndex][currentDataYIndex] =\n isNullOrUndefined(this.tempSplitDataCollection[key]) ?\n '' : this.tempSplitDataCollection[key];\n }\n }\n }\n }\n }\n return this.reconstructData;\n };\n /**\n * To destroy the Adaptor.\n * @return {void}\n * @private\n */\n Adaptor.prototype.destroy = function (heatMap) {\n /**\n * No Lines\n */\n };\n ;\n /**\n * To get Module name\n */\n Adaptor.prototype.getModuleName = function () {\n return 'Adaptor';\n };\n return Adaptor;\n}());\nexport { Adaptor };\n","/**\n * HeatMap tool tip file\n */\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Tooltip as tool } from '@syncfusion/ej2-svg-base';\n/**\n *\n * The `Tooltip` module is used to render the tooltip for heatmap series.\n */\nvar Tooltip = /** @class */ (function () {\n function Tooltip(heatMap) {\n /* private */\n this.isFirst = true;\n /* private */\n this.isFadeout = false;\n this.heatMap = heatMap;\n }\n /**\n * Get module name\n */\n Tooltip.prototype.getModuleName = function () {\n return 'Tooltip';\n };\n /**\n * To show/hide Tooltip.\n * @private\n */\n Tooltip.prototype.showHideTooltip = function (isShow, isFadeout) {\n var ele = document.getElementById(this.heatMap.element.id + 'Celltooltipcontainer');\n if (!isShow) {\n if (ele && ele.style.visibility !== 'hidden') {\n if (this.tooltipObject && isFadeout) {\n this.tooltipObject.fadeOut();\n }\n else {\n if (this.tooltipObject && this.tooltipObject.element) {\n var tooltipElement = this.tooltipObject.element.firstChild;\n tooltipElement.setAttribute('opacity', '0');\n }\n }\n ele.style.visibility = 'hidden';\n }\n this.isFadeout = true;\n }\n else {\n ele.style.visibility = 'visible';\n }\n };\n /**\n * To destroy the Tooltip.\n * @return {void}\n * @private\n */\n Tooltip.prototype.destroy = function (heatMap) {\n /**\n * Destroy method performed here\n */\n };\n ;\n /**\n * To add Tooltip to the rect cell.\n * @return {void}\n * @private\n */\n Tooltip.prototype.createTooltip = function (x, y, tempTooltipText) {\n var offset = null;\n if (this.heatMap.cellSettings.showLabel && this.heatMap.heatMapSeries.checkLabelXDisplay &&\n this.heatMap.heatMapSeries.checkLabelYDisplay) {\n offset = parseInt(this.heatMap.cellSettings.textStyle.size, 10) / 2;\n }\n this.tooltipObject = new tool({\n enableAnimation: false,\n offset: offset,\n location: { x: x, y: y },\n theme: this.heatMap.theme,\n content: tempTooltipText,\n areaBounds: {\n height: this.heatMap.initialClipRect.height + this.heatMap.initialClipRect.y,\n width: this.heatMap.initialClipRect.width, x: this.heatMap.initialClipRect.x\n }\n }, '#' + this.heatMap.element.id + 'Celltooltipcontainer');\n };\n /**\n * To create div container for tooltip.\n * @return {void}\n * @private\n */\n Tooltip.prototype.createTooltipDiv = function (heatMap) {\n var element2 = createElement('div', {\n id: this.heatMap.element.id + 'Celltooltipcontainer',\n styles: 'position:absolute'\n });\n this.heatMap.element.appendChild(createElement('div', {\n id: this.heatMap.element.id + 'Celltooltipparent',\n styles: 'position:relative'\n })\n .appendChild(element2));\n };\n /**\n * To get default tooltip content.\n * @private\n */\n Tooltip.prototype.getTooltipContent = function (currentRect, hetmapSeries) {\n var value;\n var content;\n var heatMap = this.heatMap;\n var adaptData = this.heatMap.dataSource;\n if (heatMap.bubbleSizeWithColor) {\n var xAxis = heatMap.xAxis.title && heatMap.xAxis.title.text !== '' ? heatMap.xAxis.title.text : 'X-Axis';\n var yAxis = heatMap.yAxis.title && heatMap.yAxis.title.text !== '' ? heatMap.yAxis.title.text : 'Y-Axis';\n var value1 = adaptData.isJsonData && adaptData.adaptorType === 'Cell' ?\n heatMap.dataSource.bubbleDataMapping.size : 'Value 1';\n var value2 = adaptData.isJsonData && adaptData.adaptorType === 'Cell' ?\n heatMap.dataSource.bubbleDataMapping.color : 'Value 2';\n value = hetmapSeries.getFormatedText(currentRect.value[0].bubbleData, this.heatMap.cellSettings.format);\n content = [xAxis + ' : ' + hetmapSeries.hoverXAxisLabel + '
    '\n + yAxis + ' : ' + hetmapSeries.hoverYAxisLabel + '
    '\n + value1 + ' : ' + value + '
    '\n + value2 + ' : '\n + hetmapSeries.getFormatedText(currentRect.value[1].bubbleData, this.heatMap.cellSettings.format)];\n }\n else {\n value = currentRect.value;\n content = [hetmapSeries.hoverXAxisLabel + ' | ' + hetmapSeries.hoverYAxisLabel + ' : ' +\n hetmapSeries.getFormatedText(value, this.heatMap.cellSettings.format)];\n }\n return content;\n };\n /**\n * To render tooltip.\n * @private\n */\n Tooltip.prototype.renderTooltip = function (currentRect) {\n var hetmapSeries = this.heatMap.heatMapSeries;\n var tempTooltipText = [''];\n var showTooltip = this.heatMap.bubbleSizeWithColor ?\n !isNullOrUndefined(currentRect.value) && !isNullOrUndefined(currentRect.value[0].bubbleData)\n && currentRect.value[0].bubbleData.toString() !== '' ? true : false\n : isNullOrUndefined(currentRect.value) || (!isNullOrUndefined(currentRect.value) &&\n currentRect.value.toString() === '') ? false : true;\n if (!showTooltip) {\n this.showHideTooltip(false, false);\n }\n else {\n if (!isNullOrUndefined(this.heatMap.tooltipRender)) {\n // this.tooltipObject.header = '';\n // this.tooltipObject.content = this.getTemplateText(\n // currentRect, this.heatMap.tooltipTemplate, hetmapSeries.hoverXAxisLabel,\n // hetmapSeries.hoverYAxisLabel);\n var content = this.getTooltipContent(currentRect, hetmapSeries);\n var argData = {\n heatmap: this.heatMap,\n cancel: false,\n name: 'tooltipRender',\n value: currentRect.value,\n xValue: this.heatMap.heatMapSeries.hoverXAxisValue,\n yValue: this.heatMap.heatMapSeries.hoverYAxisValue,\n xLabel: this.heatMap.heatMapSeries.hoverXAxisLabel ?\n this.heatMap.heatMapSeries.hoverXAxisLabel.toString() : null,\n yLabel: this.heatMap.heatMapSeries.hoverYAxisLabel ?\n this.heatMap.heatMapSeries.hoverYAxisLabel.toString() : null,\n content: content\n };\n this.heatMap.trigger('tooltipRender', argData);\n if (!argData.cancel) {\n tempTooltipText = argData.content;\n }\n else {\n if (this.tooltipObject) {\n this.showHideTooltip(false);\n }\n return;\n }\n }\n else {\n // this.tooltipObject.header = hetmapSeries.hoverYAxisLabel.toString();\n tempTooltipText = this.getTooltipContent(currentRect, hetmapSeries);\n }\n if (!this.tooltipObject) {\n this.createTooltip(currentRect.x + (currentRect.width / 2), currentRect.y + (currentRect.height / 2), tempTooltipText);\n }\n else {\n this.tooltipObject.content = tempTooltipText;\n }\n this.showHideTooltip(true);\n this.tooltipObject.enableAnimation = (this.isFirst || this.isFadeout) ? false : true;\n this.isFirst = (this.isFirst) ? false : this.isFirst;\n this.isFadeout = (this.isFadeout) ? false : this.isFadeout;\n this.tooltipObject.location.x = currentRect.x + (currentRect.width / 2);\n this.tooltipObject.location.y = currentRect.y + (currentRect.height / 2);\n }\n };\n return Tooltip;\n}());\nexport { Tooltip };\n","import * as index from '@syncfusion/ej2-heatmap';\nindex.HeatMap.Inject( index.Legend,index.Tooltip,index.Adaptor);\nexport * from '@syncfusion/ej2-heatmap';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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('#000000')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#ffffff', 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({}, 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","/**\n * Specifies the linear 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 valueChange = 'valueChange';\n/** @private */\nexport var resized = 'resized';\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 var gaugeAxesG = this.gauge.svgObject.querySelector('#' + this.gauge.element.id + '_Axis_Collections');\n if (gaugeAxesG) {\n remove(gaugeAxesG);\n }\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, Browser } from '@syncfusion/ej2-base';\nimport { tooltipRender } from '../model/constant';\nimport { Tooltip } from '@syncfusion/ej2-svg-base';\nimport { getElement, GaugeLocation, Size, textFormatter, formatValue, Rect } from '../utils/helper';\nimport { getPointer } 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.tooltipId = this.gauge.element.id + '_LinearGauge_Tooltip';\n this.addEventListener();\n }\n /**\n * Internal use for tooltip rendering\n * @param pointerElement\n */\n /* tslint:disable:no-string-literal */\n GaugeTooltip.prototype.renderTooltip = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].pageX;\n pageY = touchArg.changedTouches[0].pageY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n var tooltipEle;\n var tooltipContent = [];\n if (target.id.indexOf('Pointer') > -1) {\n this.pointerElement = target;\n var areaRect = this.gauge.element.getBoundingClientRect();\n var current = getPointer(this.pointerElement, this.gauge);\n this.currentAxis = current.axis;\n this.axisIndex = current.axisIndex;\n this.currentPointer = current.pointer;\n tooltipContent = [textFormatter(this.tooltip.format, { value: this.currentPointer.currentValue }, this.gauge) ||\n formatValue(this.currentPointer.currentValue, this.gauge).toString()];\n if (document.getElementById(this.tooltipId)) {\n tooltipEle = document.getElementById(this.tooltipId);\n }\n else {\n tooltipEle = createElement('div', {\n id: this.tooltipId,\n className: 'EJ2-LinearGauge-Tooltip',\n styles: 'position: absolute;pointer-events:none;'\n });\n document.getElementById(this.gauge.element.id + '_Secondary_Element').appendChild(tooltipEle);\n }\n var location_1 = this.getTooltipLocation();\n var args = {\n name: tooltipRender, cancel: false, gauge: this.gauge, event: e, location: location_1, content: tooltipContent[0],\n tooltip: this.tooltip, axis: this.currentAxis, pointer: this.currentPointer\n };\n var tooltipPos = this.getTooltipPosition();\n location_1.y += (this.tooltip.template && tooltipPos === 'Top') ? 20 : 0;\n location_1.x += (this.tooltip.template && tooltipPos === 'Right') ? 20 : 0;\n this.gauge.trigger(tooltipRender, args);\n var template = args.tooltip.template;\n if (template !== null && Object.keys(template).length === 1) {\n template = template[Object.keys(template)[0]];\n }\n if (!args.cancel) {\n args['tooltip']['properties']['textStyle']['color'] = (this.gauge.theme === 'Highcontrast') ? '#00000' : '#FFFFFF';\n this.svgTooltip = new Tooltip({\n enable: true,\n header: '',\n data: { value: args.pointer.currentValue },\n template: template,\n content: [args.content],\n shapes: [],\n location: args.location,\n palette: [],\n inverted: !(args.gauge.orientation === 'Horizontal'),\n enableAnimation: args.tooltip.enableAnimation,\n fill: (this.gauge.theme === 'Highcontrast') ? '#FFFFFF' : args.tooltip.fill,\n areaBounds: new Rect(areaRect.left, tooltipPos === 'Bottom' ? location_1.y : areaRect.top, tooltipPos === 'Right' ? Math.abs(areaRect.left - location_1.x) : areaRect.width, areaRect.height),\n textStyle: args.tooltip.textStyle,\n border: args.tooltip.border,\n theme: args.gauge.theme\n });\n this.svgTooltip.appendTo(tooltipEle);\n }\n }\n else {\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeTooltip.bind(this), 2000);\n }\n };\n GaugeTooltip.prototype.getTooltipPosition = function () {\n var position;\n if (this.gauge.orientation === 'Vertical') {\n position = (!this.currentAxis.opposedPosition) ? 'Left' : 'Right';\n }\n else {\n position = (this.currentAxis.opposedPosition) ? 'Top' : 'Bottom';\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.removeTooltip = function () {\n if (document.getElementsByClassName('EJ2-LinearGauge-Tooltip').length > 0) {\n document.getElementsByClassName('EJ2-LinearGauge-Tooltip')[0].remove();\n }\n };\n GaugeTooltip.prototype.mouseUpHandler = function (e) {\n this.renderTooltip(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeTooltip.bind(this), 2000);\n };\n /**\n * To bind events for tooltip module\n */\n GaugeTooltip.prototype.addEventListener = function () {\n if (this.gauge.isDestroyed) {\n return;\n }\n this.gauge.on(Browser.touchMoveEvent, this.renderTooltip, this);\n this.gauge.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * To unbind events for tooltip module\n */\n GaugeTooltip.prototype.removeEventListener = function () {\n if (this.gauge.isDestroyed) {\n return;\n }\n this.gauge.off(Browser.touchMoveEvent, this.renderTooltip);\n this.gauge.off(Browser.touchEndEvent, this.mouseUpHandler);\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 this.removeEventListener();\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 current = this.moveOnPointer(args.target);\n if (!(isNullOrUndefined(current)) && current.pointer) {\n this.element.style.cursor = current.style;\n }\n }\n else {\n this.element.style.cursor = (this.pointerDrag) ? this.element.style.cursor : 'auto';\n }\n this.gaugeOnMouseMove(e);\n }\n this.notify(Browser.touchMoveEvent, e);\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 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 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 this.notify(Browser.touchEndEvent, e);\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(null)\n ], LinearGauge.prototype, \"format\", 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","import * as index from '@syncfusion/ej2-lineargauge';\nindex.LinearGauge.Inject( index.GaugeTooltip,index.Annotations);\nexport * from '@syncfusion/ej2-lineargauge';\n","import * as index from '@syncfusion/ej2-lists';\nindex.ListView.Inject( index.Virtualization);\nexport * from '@syncfusion/ej2-lists';\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 document\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(null)\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(null)\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, imageUrl, subDomains) {\n var quadKey = '';\n var subDomain;\n var maxZoom = Math.min(this.maps.tileZoomLevel, parseInt(this.maxZoom, 10));\n for (var i = maxZoom; 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 subDomain = subDomains[Math.min(parseInt(quadKey.substr(quadKey.length - 1, 1), 10), subDomains.length)];\n imageUrl = imageUrl.replace('{quadkey}', quadKey).replace('{subdomain}', subDomain);\n return imageUrl += '&mkt=' + language + '&ur=IN&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.renderTileLayer = function (panel, layer, layerIndex, bing) {\n var center = new Point(panel.mapObject.centerPosition.longitude, panel.mapObject.centerPosition.latitude);\n panel.currentFactor = panel.calculateFactor(layer);\n if (isNullOrUndefined(panel.mapObject.tileZoomLevel)) {\n panel.mapObject.tileZoomLevel = panel.mapObject.zoomSettings.zoomFactor;\n }\n panel.mapObject.tileTranslatePoint = panel.panTileMap(panel.mapObject.availableSize.width, panel.mapObject.availableSize.height, center);\n panel.generateTiles(panel.mapObject.tileZoomLevel, panel.mapObject.tileTranslatePoint, bing);\n if (panel.mapObject.markerModule) {\n panel.mapObject.markerModule.markerRender(panel.layerObject, layerIndex, panel.mapObject.tileZoomLevel);\n }\n if (panel.mapObject.navigationLineModule) {\n panel.layerObject.appendChild(panel.mapObject.navigationLineModule.renderNavigation(panel.currentLayer, panel.mapObject.tileZoomLevel, layerIndex));\n }\n panel.translateLayerElements(panel.layerObject, layerIndex);\n panel.layerGroup.appendChild(panel.layerObject);\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 if (layer.layerType !== 'Bing' || this.bing) {\n this.renderTileLayer(this, layer, layerIndex);\n }\n else if (layer.key && layer.key.length > 1) {\n var proxy_1 = this;\n var bing_1 = new BingMap(this.mapObject);\n var url = 'http://dev.virtualearth.net/REST/V1/Imagery/Metadata/' + layer.bingMapType;\n var ajax = new Ajax({\n url: url + '?output=json&include=ImageryProviders&key=' + layer.key\n });\n ajax.onSuccess = function (json) {\n var jsonObject = JSON.parse(json);\n var resource = jsonObject['resourceSets'][0]['resources'][0];\n var imageUrl = resource['imageUrl'];\n var subDomains = resource['imageUrlSubdomains'];\n var maxZoom = resource['zoomMax'];\n if (imageUrl !== null && imageUrl !== undefined && imageUrl !== bing_1.imageUrl) {\n bing_1.imageUrl = imageUrl;\n }\n if (subDomains !== null && subDomains !== undefined && subDomains !== bing_1.subDomains) {\n bing_1.subDomains = subDomains;\n }\n if (maxZoom !== null && maxZoom !== undefined && maxZoom !== bing_1.maxZoom) {\n bing_1.maxZoom = maxZoom;\n }\n proxy_1.mapObject['bingMap'] = bing_1;\n proxy_1.renderTileLayer(proxy_1, layer, layerIndex, bing_1);\n };\n ajax.send();\n }\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] &&\n this_1.currentLayer.dataSource.length === 0 && 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 j = 0; j < layerElement.childElementCount; j++) {\n childNode = layerElement.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 (!(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, bing) {\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 bing = bing || this.bing || this.mapObject['bingMap'];\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 var key = baseLayer.key;\n tile.src = bing.getBingMap(tile, key, baseLayer.bingMapType, userLang, bing.imageUrl, bing.subDomains);\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, bing.imageUrl, bing.subDomains);\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, Ajax } 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.initPrivateVariable();\n this.trigger(load, { maps: this });\n this.themeEffect();\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 this.setBackgroundValue(this.theme);\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 * Maps background and area background colors change as per theme.\n * @param theme based on theme background colors will change.\n */\n Maps.prototype.setBackgroundValue = function (theme) {\n var color = theme === 'Highcontrast' ? '#000000' : '#FFFFFF';\n this.background = this.background ? this.background : color;\n this.mapsArea.background = this.mapsArea.background ? this.mapsArea.background : color;\n color = theme !== 'Highcontrast' ? '#737373' : '#FFFFFF';\n this.zoomSettings.color = (this.zoomSettings.color) ? this.zoomSettings.color : color;\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 var queryModule;\n var localAjax;\n var ajaxModule;\n var dataModule;\n this.layersCollection.forEach(function (layer, layerIndex) {\n if (layer.shapeData instanceof DataManager) {\n _this.serverProcess['request']++;\n dataModule = layer.shapeData;\n 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, 'ShapeData');\n });\n }\n else if (layer.shapeData instanceof MapAjax) {\n _this.processAjaxRequest(layer, layer.shapeData, 'ShapeData');\n }\n if (layer.dataSource instanceof MapAjax) {\n _this.processAjaxRequest(layer, layer.dataSource, 'DataSource');\n }\n if (_this.serverProcess['request'] === _this.serverProcess['response'] && length === layerIndex) {\n _this.processResponseJsonData(null);\n }\n });\n };\n Maps.prototype.processAjaxRequest = function (layer, localAjax, type) {\n var _this = this;\n var ajaxModule;\n this.serverProcess['request']++;\n ajaxModule = new Ajax(localAjax.dataOptions, localAjax.type, localAjax.async, localAjax.contentType);\n ajaxModule.onSuccess = function (args) {\n _this.processResponseJsonData('Ajax', args, layer, type);\n };\n ajaxModule.send(localAjax.sendData);\n };\n /* tslint:disable:no-eval */\n Maps.prototype.processResponseJsonData = function (processType, data, layer, dataType) {\n this.serverProcess['response']++;\n if (processType) {\n if (dataType === 'ShapeData') {\n layer.shapeData = (processType === 'DataManager') ? !isNullOrUndefined(data['result']) ? data['result'] : data['actual'] :\n JSON.parse(data);\n }\n else {\n layer.dataSource = (processType === 'DataManager') ? !isNullOrUndefined(data['result']) ? data['result'] : data['actual'] :\n JSON.parse('[' + data + ']')[0];\n }\n }\n if (!isNullOrUndefined(processType) && 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(processType)) {\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 = document.getElementById(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 = 0;\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 var borderElement = this.svgObject.querySelector('#' + this.element.id + '_MapBorder');\n if ((width > 0 || this.background) && isNullOrUndefined(borderElement)) {\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 else {\n borderElement.setAttribute('fill', this.background);\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].pageX;\n pageY = touchArg.changedTouches[0].pageY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.pageX;\n pageY = e.pageY;\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('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: 'Zoom In',\n Zoom: 'Zoom',\n ZoomOut: 'Zoom Out',\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 } 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 style: 'pointer-events: auto;' });\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 for (var i = 0; i < markerElement.children.length; i++) {\n markerElement.children[i].style.pointerEvents = 'none';\n }\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.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 Module used to render the maps datalabel\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 /**\n * To render label for maps\n * @param layer\n * @param layerIndex\n * @param shape\n * @param layerData\n * @param group\n * @param labelTemplateElement\n * @param index\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 /**\n * To render navigation line for maps\n */\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 var xmlns = 'http://www.w3.org/2000/svg';\n var markerEle = document.createElementNS(xmlns, 'marker');\n markerEle.setAttribute('id', '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 is used to render legend for the maps\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 /**\n * To calculate legend bounds and draw the legend shape and text.\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 /**\n * To draw the legend shape and text.\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, Browser } 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 this.maps.on(click, this.mouseClick, this);\n this.maps.on(Browser.touchEndEvent, this.mouseClick, this);\n }\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 this.maps.off(Browser.touchEndEvent, this.mouseClick);\n };\n Selection.prototype.mouseClick = function (targetEle) {\n if (!isNullOrUndefined(targetEle['type']) && targetEle['type'].indexOf('touch') !== -1 && isNullOrUndefined(targetEle.id)) {\n targetEle = targetEle['target'];\n }\n if (!isNullOrUndefined(targetEle.id) && (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-svg-base';\nimport { createElement, Browser, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { checkShapeDataFields, getMousePosition, Internalize } from '../utils/helper';\n/**\n * Map Tooltip\n */\nvar MapsTooltip = /** @class */ (function () {\n function MapsTooltip(maps) {\n this.maps = maps;\n this.tooltipId = this.maps.element.id + '_mapsTooltip';\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\n //tslint:disable:max-func-body-length\n MapsTooltip.prototype.renderTooltip = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var tootipArgs;\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].pageX;\n pageY = touchArg.changedTouches[0].pageY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n var formatFunction;\n var value;\n var option;\n var currentData = '';\n var targetId = target.id;\n var item = {};\n var tooltipEle;\n var location;\n var toolTipData = {};\n var templateData = [];\n var index = parseFloat(targetId.split('_')[2]);\n var layer = this.maps.layersCollection[index];\n var tooltipContent = [];\n var markerFill;\n location = getMousePosition(pageX, pageY, this.maps.svgObject);\n var istooltipRender = (targetId.indexOf('_ShapeIndex_') > -1)\n || (targetId.indexOf('_MarkerIndex_') > -1) || (targetId.indexOf('_BubbleIndex_') > -1);\n if (istooltipRender) {\n if (targetId.indexOf('_ShapeIndex_') > -1) {\n option = layer.tooltipSettings;\n var shape = parseInt(targetId.split('_')[4], 10);\n if (isNullOrUndefined(layer.shapeData['features'])) {\n return;\n }\n var value_1 = layer.shapeData['features'][shape]['properties'];\n index = checkShapeDataFields(layer.dataSource, value_1, layer.shapeDataPath, layer.shapePropertyPath);\n templateData = layer.dataSource[index];\n if (option.visible && ((!isNullOrUndefined(index) && !isNaN(index)) || (!isNullOrUndefined(value_1)))) {\n if (layer.tooltipSettings.format) {\n currentData = this.formatter(layer.tooltipSettings.format, layer.dataSource[index]);\n }\n else {\n currentData = ((!isNullOrUndefined(layer.dataSource)) && ((!isNullOrUndefined(index)))) ?\n this.formatValue(layer.dataSource[index][option.valuePath], this.maps) : value_1[layer.shapePropertyPath];\n }\n }\n //location.y = this.template(option, location);\n }\n else if (targetId.indexOf('_MarkerIndex_') > -1) {\n var markerIdex = parseInt(targetId.split('_')[4], 10);\n var dataIndex = parseInt(targetId.split('_')[6], 10);\n var marker = layer.markerSettings[markerIdex];\n option = marker.tooltipSettings;\n templateData = marker.dataSource[dataIndex];\n if (option.visible && !isNaN(markerIdex)) {\n if (marker.tooltipSettings.format) {\n currentData = this.formatter(marker.tooltipSettings.format, marker.dataSource[dataIndex]);\n }\n else {\n currentData = this.formatValue(marker.dataSource[dataIndex][marker.tooltipSettings.valuePath], this.maps);\n }\n }\n //location.y = this.template(option, location);\n }\n else if (targetId.indexOf('_BubbleIndex_') > -1) {\n var bubbleIndex = parseInt(targetId.split('_')[4], 10);\n var dataIndex = parseInt(targetId.split('_')[6], 10);\n var bubble = layer.bubbleSettings[bubbleIndex];\n option = bubble.tooltipSettings;\n templateData = bubble.dataSource[dataIndex];\n if (option.visible && !isNaN(dataIndex)) {\n if (bubble.tooltipSettings.format) {\n currentData = this.formatter(bubble.tooltipSettings.format, bubble.dataSource[dataIndex]);\n }\n else {\n currentData = this.formatValue(bubble.dataSource[dataIndex][bubble.tooltipSettings.valuePath], this.maps);\n }\n }\n //location.y = this.template(option, location);\n }\n if (document.getElementById(this.tooltipId)) {\n tooltipEle = document.getElementById(this.tooltipId);\n }\n else {\n tooltipEle = createElement('div', {\n id: this.maps.element.id + '_mapsTooltip',\n className: 'EJ2-maps-Tooltip',\n styles: 'position: absolute;pointer-events:none;'\n });\n document.getElementById(this.maps.element.id + '_Secondary_Element').appendChild(tooltipEle);\n }\n var content = void 0;\n if (option.template !== null && Object.keys(option.template).length === 1) {\n option.template = option.template[Object.keys(option.template)[0]];\n }\n templateData = this.setTooltipContent(option, templateData);\n tootipArgs = {\n cancel: false, name: tooltipRender,\n options: {\n location: location, text: tooltipContent, data: templateData,\n textStyle: option.textStyle,\n template: option.template\n },\n maps: this.maps,\n element: target, eventArgs: e\n };\n this.maps.trigger(tooltipRender, tootipArgs);\n if (!tootipArgs.cancel && option.visible && !isNullOrUndefined(currentData)) {\n tootipArgs.options['textStyle']['color'] = (this.maps.theme === 'Highcontrast') ? '#00000' : '#FFFFFF';\n this.svgTooltip = new Tooltip({\n enable: true,\n header: '',\n data: tootipArgs.options['data'],\n template: tootipArgs.options['template'],\n content: [currentData.toString()],\n shapes: [],\n location: tootipArgs.options['location'],\n palette: [markerFill],\n areaBounds: this.maps.mapAreaRect,\n textStyle: tootipArgs.options['textStyle'],\n theme: this.maps.theme,\n fill: (this.maps.theme === 'Highcontrast') ? '#FFFFFF' : '#00000'\n });\n this.svgTooltip.appendTo(tooltipEle);\n }\n else {\n this.removeTooltip();\n }\n }\n else {\n this.removeTooltip();\n }\n };\n /**\n * To get content for the current toolitp\n */\n MapsTooltip.prototype.setTooltipContent = function (options, templateData) {\n var localData = extend({}, templateData, null, true);\n if (this.maps.format && !isNaN(Number(localData[options.valuePath]))) {\n localData[options.valuePath] = Internalize(this.maps, Number(localData[options.valuePath]));\n }\n else {\n localData = Object.keys(localData).length ? localData : undefined;\n }\n return localData;\n };\n MapsTooltip.prototype.formatValue = function (value, maps) {\n var formatValue;\n var formatFunction;\n if (maps.format && !isNaN(Number(value))) {\n formatFunction = maps.intl.getNumberFormat({ format: maps.format, useGrouping: maps.useGroupingSeparator });\n formatValue = formatFunction(Number(value));\n }\n else {\n formatValue = value;\n }\n return formatValue;\n };\n /*private template(tooltip: TooltipSettingsModel, location: MapLocation): number {\n location.y = (tooltip.template) ? location.y + 10 : location.y;\n return location.y;\n }*/\n MapsTooltip.prototype.formatter = function (format, data) {\n if (data === void 0) { data = {}; }\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(this.formatValue(data[key], this.maps));\n }\n return format;\n };\n MapsTooltip.prototype.mouseUpHandler = function (e) {\n this.renderTooltip(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeTooltip.bind(this), 2000);\n };\n MapsTooltip.prototype.removeTooltip = function () {\n if (document.getElementsByClassName('EJ2-maps-Tooltip').length > 0) {\n document.getElementsByClassName('EJ2-maps-Tooltip')[0].remove();\n }\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.renderTooltip, this);\n this.maps.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.maps.on(Browser.touchCancelEvent, this.removeTooltip, this);\n };\n MapsTooltip.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.renderTooltip);\n this.maps.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.maps.off(Browser.touchCancelEvent, this.removeTooltip);\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 };\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 used to process the zoom for maps\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 /**\n * To perform zooming for maps\n * @param position\n * @param newZoomFactor\n * @param type\n */\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 /**\n * To handle the click event for maps.\n * @param e\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","import * as index from '@syncfusion/ej2-maps';\nindex.Maps.Inject( index.Bubble,index.Legend,index.Marker,index.Highlight,index.Selection,index.MapsTooltip,index.Zoom,index.DataLabel,index.NavigationLine,index.Annotations);\nexport * from '@syncfusion/ej2-maps';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, Animation } from '@syncfusion/ej2-base';\nimport { Browser, isNullOrUndefined as isNOU, getUniqueID, formatUnit, EventHandler } from '@syncfusion/ej2-base';\nimport { Collection, Complex, setStyleAttribute, Event, detach } from '@syncfusion/ej2-base';\nimport { attributes, extend, closest, compile as templateCompiler, classList, isUndefined } from '@syncfusion/ej2-base';\nimport { Touch } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getZindexPartial } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-toast';\nvar CONTAINER = 'e-toast-container';\nvar TITLE = 'e-toast-title';\nvar WIDTHFULL = 'e-toast-full-width';\nvar CONTENT = 'e-toast-content';\nvar MESSAGE = 'e-toast-message';\nvar ICON = 'e-toast-icon';\nvar PROGRESS = 'e-toast-progress';\nvar ACTIOBUTTONS = 'e-toast-actions';\nvar CLOSEBTN = 'e-toast-close-icon';\nvar RTL = 'e-rtl';\n/**\n * An object that is used to configure the Toast X Y positions.\n */\nvar ToastPosition = /** @class */ (function (_super) {\n __extends(ToastPosition, _super);\n function ToastPosition() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Left')\n ], ToastPosition.prototype, \"X\", void 0);\n __decorate([\n Property('Top')\n ], ToastPosition.prototype, \"Y\", void 0);\n return ToastPosition;\n}(ChildProperty));\nexport { ToastPosition };\n/**\n * An object that is used to configure the action button model properties and event.\n */\nvar ButtonModelProps = /** @class */ (function (_super) {\n __extends(ButtonModelProps, _super);\n function ButtonModelProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ButtonModelProps.prototype, \"model\", void 0);\n __decorate([\n Property(null)\n ], ButtonModelProps.prototype, \"click\", void 0);\n return ButtonModelProps;\n}(ChildProperty));\nexport { ButtonModelProps };\n/**\n * An object that is used to configure the animation object of Toast.\n */\nvar ToastAnimations = /** @class */ (function (_super) {\n __extends(ToastAnimations, _super);\n function ToastAnimations() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('FadeIn')\n ], ToastAnimations.prototype, \"effect\", void 0);\n __decorate([\n Property(600)\n ], ToastAnimations.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], ToastAnimations.prototype, \"easing\", void 0);\n return ToastAnimations;\n}(ChildProperty));\nexport { ToastAnimations };\n/**\n * An object that is used to configure the show/hide animation settings of Toast.\n */\nvar ToastAnimationSettings = /** @class */ (function (_super) {\n __extends(ToastAnimationSettings, _super);\n function ToastAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'FadeIn', duration: 600, easing: 'ease' }, ToastAnimations)\n ], ToastAnimationSettings.prototype, \"show\", void 0);\n __decorate([\n Complex({ effect: 'FadeOut', duration: 600, easing: 'ease' }, ToastAnimations)\n ], ToastAnimationSettings.prototype, \"hide\", void 0);\n return ToastAnimationSettings;\n}(ChildProperty));\nexport { ToastAnimationSettings };\n/**\n * The Toast is a notification pop-up that showing on desired position which can provide an information to the user.\n * * ```html\n *
    \n * \n * ```\n */\nvar Toast = /** @class */ (function (_super) {\n __extends(Toast, _super);\n /**\n * Initializes a new instance of the Toast class.\n * @param options - Specifies Toast model properties as options.\n * @param element - Specifies the element that is rendered as a Toast.\n */\n function Toast(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Gets the Component module name.\n * @private\n */\n Toast.prototype.getModuleName = function () {\n return 'toast';\n };\n /**\n * Gets the persisted state properties of the Component.\n */\n Toast.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers, attributes and classes.\n */\n Toast.prototype.destroy = function () {\n this.hide('All');\n this.element.classList.remove(CONTAINER);\n setStyleAttribute(this.element, { 'position': '', 'z-index': '' });\n _super.prototype.destroy.call(this);\n };\n /**\n * Initialize the event handler\n * @private\n */\n Toast.prototype.preRender = function () {\n //There is no event handler\n this.isDevice = Browser.isDevice;\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n };\n /**\n * Initialize the component rendering\n * @private\n */\n Toast.prototype.render = function () {\n this.progressObj = [];\n this.intervalId = [];\n this.titleTemplate = null;\n this.contentTemplate = null;\n this.toastTemplate = null;\n if (this.isDevice && screen.width < 768) {\n new Touch(this.element, { swipe: this.swipeHandler.bind(this) });\n }\n };\n /**\n * To show Toast element on a document with the relative position.\n * @param {ToastModel} toastObj? - To show Toast element on screen.\n * @returns void\n */\n Toast.prototype.show = function (toastObj) {\n if (!isNOU(toastObj)) {\n this.templateChanges(toastObj);\n extend(this, this, toastObj);\n }\n if (isNOU(this.toastContainer)) {\n this.toastContainer = this.getContainer();\n var target = typeof (this.target) === 'string' ? document.querySelector(this.target) : this.target;\n if (isNOU(target)) {\n return;\n }\n if (target.tagName === 'BODY') {\n this.toastContainer.style.position = 'fixed';\n }\n else {\n this.toastContainer.style.position = 'absolute';\n target.style.position = 'relative';\n }\n this.setPositioning(this.position);\n target.appendChild(this.toastContainer);\n }\n this.toastEle = this.createElement('div', { className: ROOT, id: getUniqueID('toast') });\n this.setWidthHeight();\n this.setCSSClass(this.cssClass);\n (isNOU(this.template) || this.template === '') ? this.personalizeToast() : this.templateRendering();\n this.setProgress();\n this.setCloseButton();\n this.setAria();\n this.appendToTarget();\n };\n Toast.prototype.swipeHandler = function (e) {\n var toastEle = closest(e.originalEvent.target, '.' + ROOT + ':not(.' + CONTAINER + ')');\n var hideAnimation = this.animation.hide.effect;\n if (!isNOU(toastEle)) {\n if (e.swipeDirection === 'Right') {\n this.animation.hide.effect = 'SlideRightOut';\n this.hide(toastEle);\n }\n else if (e.swipeDirection === 'Left') {\n this.animation.hide.effect = 'SlideLeftOut';\n this.hide(toastEle);\n }\n this.animation.hide.effect = hideAnimation;\n }\n };\n Toast.prototype.templateChanges = function (toastObj) {\n if (!isUndefined(toastObj.content) && !isNOU(this.contentTemplate) && this.content !== toastObj.content) {\n this.clearContentTemplate();\n }\n if (!isUndefined(toastObj.title) && !isNOU(this.titleTemplate) && this.title !== toastObj.title) {\n this.clearTitleTemplate();\n }\n if (!isUndefined(toastObj.template) && !isNOU(this.toastTemplate) && this.template !== toastObj.template) {\n this.clearToastTemplate();\n }\n };\n Toast.prototype.setCSSClass = function (cssClass) {\n if (!isNOU(cssClass)) {\n var split = cssClass.indexOf(',') !== -1 ? ',' : ' ';\n classList(this.toastEle, cssClass.split(split), []);\n }\n };\n Toast.prototype.setWidthHeight = function () {\n if (this.width === '300px') {\n this.toastEle.style.width = formatUnit(this.width);\n }\n else if (this.width === '100%') {\n this.toastContainer.classList.add(WIDTHFULL);\n }\n else {\n this.toastEle.style.width = formatUnit(this.width);\n this.toastContainer.classList.remove(WIDTHFULL);\n }\n this.toastEle.style.height = formatUnit(this.height);\n };\n Toast.prototype.templateRendering = function () {\n this.fetchEle(this.toastEle, this.template, 'template');\n };\n /**\n * To Hide Toast element on a document.\n * To Hide all toast element when passing 'All'.\n * @param {HTMLElement| Element| string} element? - To Hide Toast element on screen.\n * @returns void\n */\n Toast.prototype.hide = function (element) {\n if (isNOU(this.toastContainer) || this.toastContainer.childElementCount === 0) {\n return;\n }\n if (typeof element === 'string' && element === 'All') {\n for (var i = 0; i < this.toastContainer.childElementCount; i++) {\n this.destroyToast(this.toastContainer.children[i]);\n }\n return;\n }\n if (isNOU(element)) {\n element = (this.newestOnTop ? this.toastContainer.lastElementChild : this.toastContainer.firstElementChild);\n }\n this.destroyToast(element);\n };\n Toast.prototype.fetchEle = function (ele, value, prob) {\n var templateFn;\n var tempVar;\n var tempArray;\n prob === 'title' ? tempVar = this.titleTemplate : prob === 'content' ? tempVar = this.contentTemplate : tempVar = this.toastTemplate;\n if (!isNOU(tempVar)) {\n ele.appendChild(tempVar.cloneNode(true));\n return ele;\n }\n try {\n if (document.querySelectorAll(value).length > 0) {\n var elem = document.querySelector(value);\n ele.appendChild(elem);\n elem.style.display = '';\n var clo = elem.cloneNode(true);\n prob === 'title' ? this.titleTemplate = clo : prob === 'content' ? this.contentTemplate = clo : this.toastTemplate = clo;\n }\n }\n catch (e) {\n templateFn = templateCompiler(value);\n }\n if (!isNOU(templateFn)) {\n tempArray = templateFn({}, this, prob);\n }\n if (!isNOU(tempArray) && tempArray.length > 0 && !(isNOU(tempArray[0].tagName) && tempArray.length === 1)) {\n [].slice.call(tempArray).forEach(function (el) {\n if (!isNOU(el.tagName)) {\n el.style.display = '';\n }\n ele.appendChild(el);\n });\n }\n else if (ele.childElementCount === 0) {\n ele.innerHTML = value;\n }\n return ele;\n };\n Toast.prototype.clearProgress = function (intervalId) {\n if (!isNOU(this.intervalId[intervalId])) {\n clearInterval(this.intervalId[intervalId]);\n delete this.intervalId[intervalId];\n }\n if (!isNOU(this.progressObj[intervalId])) {\n clearInterval(this.progressObj[intervalId].intervalId);\n delete this.progressObj[intervalId];\n }\n };\n Toast.prototype.clearContainerPos = function () {\n var _this = this;\n if (this.customPosition) {\n setStyleAttribute(this.toastContainer, { 'left': '', 'top': '' });\n this.toastContainer = null;\n this.customPosition = false;\n }\n else {\n [ROOT + '-top-left',\n ROOT + '-top-right',\n ROOT + '-bottom-left',\n ROOT + '-bottom-right',\n ROOT + '-bottom-center',\n ROOT + '-top-center',\n ROOT + '-full-width'].forEach(function (pos) {\n if (!isNOU(_this.toastContainer) && _this.toastContainer.classList.contains(pos)) {\n _this.toastContainer.classList.remove(pos);\n }\n });\n this.toastContainer = null;\n }\n if (!isNOU(this.titleTemplate)) {\n this.clearTitleTemplate();\n }\n if (!isNOU(this.contentTemplate)) {\n this.clearContentTemplate();\n }\n if (!isNOU(this.toastTemplate)) {\n this.clearToastTemplate();\n }\n };\n Toast.prototype.clearTitleTemplate = function () {\n this.titleTemplate.style.display = 'none';\n document.body.appendChild(this.titleTemplate);\n this.titleTemplate = null;\n };\n Toast.prototype.clearContentTemplate = function () {\n this.contentTemplate.style.display = 'none';\n document.body.appendChild(this.contentTemplate);\n this.contentTemplate = null;\n };\n Toast.prototype.clearToastTemplate = function () {\n this.toastTemplate.style.display = 'none';\n document.body.appendChild(this.toastTemplate);\n this.toastTemplate = null;\n };\n Toast.prototype.destroyToast = function (toastEle) {\n var _this = this;\n var hideAnimate = this.animation.hide;\n var animate = {\n duration: hideAnimate.duration, name: hideAnimate.effect, timingFunction: hideAnimate.easing\n };\n var intervalId = parseInt(toastEle.id.split('toast_')[1], 10);\n var toastClose = {\n toastContainer: this.toastContainer,\n toastObj: this,\n };\n if (!isNOU(this.progressObj[intervalId]) && !isNOU(toastEle.querySelector('.' + PROGRESS))) {\n this.progressObj[intervalId].progressEle.style.width = '0%';\n }\n animate.end = function () {\n _this.clearProgress(intervalId);\n detach(toastEle);\n _this.trigger('close', toastClose);\n if (_this.toastContainer.childElementCount === 0) {\n _this.clearContainerPos();\n }\n };\n new Animation({}).animate(toastEle, animate);\n };\n Toast.prototype.personalizeToast = function () {\n this.setIcon();\n this.setTitle();\n this.setContent();\n this.actionButtons();\n };\n Toast.prototype.setAria = function () {\n attributes(this.toastEle, { 'role': 'alert' });\n };\n Toast.prototype.setPositioning = function (pos) {\n if (typeof (pos.X) === 'number' || typeof (pos.Y) === 'number' || pos.X.indexOf('%') !== -1 || pos.Y.indexOf('%') !== -1) {\n setStyleAttribute(this.toastContainer, { 'left': formatUnit(pos.X), 'top': formatUnit(pos.Y) });\n this.customPosition = true;\n }\n else {\n this.toastContainer.classList.add(ROOT + '-' + pos.Y.toString().toLowerCase() + '-' + pos.X.toString().toLowerCase());\n }\n };\n Toast.prototype.setCloseButton = function () {\n if (!this.showCloseButton) {\n return;\n }\n var closeBtn = this.createElement('div', { className: CLOSEBTN + ' e-icons ' });\n this.toastEle.appendChild(closeBtn);\n };\n Toast.prototype.setProgress = function () {\n if (this.timeOut > 0) {\n var id = parseInt(this.toastEle.id.split('toast_')[1], 10);\n this.intervalId[id] = window.setTimeout(this.destroyToast.bind(this, this.toastEle), this.timeOut);\n this.progressObj[id] = { hideEta: null, intervalId: null, maxHideTime: null, element: null, timeOutId: null, progressEle: null };\n this.progressObj[id].maxHideTime = parseFloat(this.timeOut + '');\n this.progressObj[id].hideEta = new Date().getTime() + this.progressObj[id].maxHideTime;\n this.progressObj[id].element = this.toastEle;\n if (this.extendedTimeout > 0) {\n EventHandler.add(this.toastEle, 'mouseover', this.toastHoverAction.bind(this, id));\n EventHandler.add(this.toastEle, 'mouseleave', this.delayedToastProgress.bind(this, id));\n this.progressObj[id].timeOutId = this.intervalId[id];\n }\n if (this.showProgressBar) {\n this.progressBarEle = this.createElement('div', { className: PROGRESS });\n this.toastEle.insertBefore(this.progressBarEle, this.toastEle.children[0]);\n this.progressObj[id].intervalId = setInterval(this.updateProgressBar.bind(this, this.progressObj[id]), 10);\n this.progressObj[id].progressEle = this.progressBarEle;\n }\n }\n };\n Toast.prototype.toastHoverAction = function (id) {\n clearTimeout(this.progressObj[id].timeOutId);\n clearInterval(this.progressObj[id].intervalId);\n this.progressObj[id].hideEta = 0;\n var toastEle = this.progressObj[id].element;\n if (!isNOU(toastEle.querySelector('.' + PROGRESS))) {\n this.progressObj[id].progressEle.style.width = '0%';\n }\n };\n Toast.prototype.delayedToastProgress = function (id) {\n var progress = this.progressObj[id];\n var toastEle = progress.element;\n progress.timeOutId = window.setTimeout(this.destroyToast.bind(this, toastEle), this.extendedTimeout);\n progress.maxHideTime = parseFloat(this.extendedTimeout + '');\n progress.hideEta = new Date().getTime() + progress.maxHideTime;\n if (!isNOU(toastEle.querySelector('.' + PROGRESS))) {\n progress.intervalId = setInterval(this.updateProgressBar.bind(this, progress), 10);\n }\n };\n Toast.prototype.updateProgressBar = function (progressObj) {\n var percentage = ((progressObj.hideEta - (new Date().getTime())) / progressObj.maxHideTime) * 100;\n progressObj.progressEle.style.width = percentage + '%';\n };\n Toast.prototype.setIcon = function () {\n if (isNOU(this.icon) || this.icon.length === 0) {\n return;\n }\n var iconEle = this.createElement('div', { className: ICON + ' e-icons ' + this.icon });\n this.toastEle.appendChild(iconEle);\n };\n Toast.prototype.setTitle = function () {\n if (isNOU(this.title)) {\n return;\n }\n var titleEle = this.createElement('div', { className: TITLE });\n titleEle = this.fetchEle(titleEle, this.title, 'title');\n var msgContainer = this.createElement('div', { className: MESSAGE });\n msgContainer.appendChild(titleEle);\n this.toastEle.appendChild(msgContainer);\n };\n Toast.prototype.setContent = function () {\n var contentEle = this.createElement('div', { className: CONTENT });\n var ele = this.element;\n if (isNOU(this.content) || this.content === '') {\n var isContent = this.element.innerHTML.replace(/\\s/g, '') !== '';\n if ((ele.children.length > 0 || isContent) && !ele.firstElementChild.classList.contains(ROOT)) {\n this.innerEle = document.createDocumentFragment();\n var tempEle_1 = this.createElement('div');\n while (ele.childNodes.length !== 0) {\n this.innerEle.appendChild(this.element.childNodes[0]);\n }\n contentEle.appendChild(this.innerEle);\n [].slice.call(contentEle.children).forEach(function (ele) {\n tempEle_1.appendChild(ele.cloneNode(true));\n });\n this.content = tempEle_1;\n this.appendMessageContainer(contentEle);\n }\n }\n else {\n if (typeof (this.content) === 'object' && !isNOU(this.content.tagName)) {\n contentEle.appendChild(this.content);\n this.content = this.content.cloneNode(true);\n this.appendMessageContainer(contentEle);\n }\n else {\n contentEle = this.fetchEle(contentEle, this.content, 'content');\n this.appendMessageContainer(contentEle);\n }\n }\n };\n Toast.prototype.appendMessageContainer = function (element) {\n if (this.toastEle.querySelectorAll('.' + MESSAGE).length > 0) {\n this.toastEle.querySelector('.' + MESSAGE).appendChild(element);\n }\n else {\n var msgContainer = this.createElement('div', { className: MESSAGE });\n msgContainer.appendChild(element);\n this.toastEle.appendChild(msgContainer);\n }\n };\n Toast.prototype.actionButtons = function () {\n var _this = this;\n var actionBtnContainer = this.createElement('div', { className: ACTIOBUTTONS });\n [].slice.call(this.buttons).forEach(function (actionBtn) {\n if (isNOU(actionBtn.model)) {\n return;\n }\n var btnDom = _this.createElement('button');\n btnDom.setAttribute('type', 'button');\n if (isNOU(actionBtn.model.cssClass) || actionBtn.model.cssClass.length === 0) {\n actionBtn.model.cssClass = 'e-primary';\n }\n btnDom.classList.add('e-small');\n new Button(actionBtn.model, btnDom);\n if (!isNOU(actionBtn.click) && typeof (actionBtn.click) === 'function') {\n EventHandler.add(btnDom, 'click', actionBtn.click);\n }\n actionBtnContainer.appendChild(btnDom);\n });\n if (actionBtnContainer.childElementCount > 0) {\n this.appendMessageContainer(actionBtnContainer);\n }\n };\n Toast.prototype.appendToTarget = function () {\n var toastBeforeOpen = {\n toastObj: this,\n element: this.toastEle,\n cancel: false\n };\n this.trigger('beforeOpen', toastBeforeOpen);\n if (toastBeforeOpen.cancel) {\n return;\n }\n this.toastEle.style.display = 'none';\n if (this.newestOnTop && this.toastContainer.childElementCount !== 0) {\n this.toastContainer.insertBefore(this.toastEle, this.toastContainer.children[0]);\n }\n else {\n this.toastContainer.appendChild(this.toastEle);\n }\n EventHandler.add(this.toastEle, 'click', this.clickHandler, this);\n this.toastContainer.style.zIndex = getZindexPartial(this.toastContainer) + '';\n this.displayToast(this.toastEle);\n };\n Toast.prototype.clickHandler = function (e) {\n var target = e.target;\n var toastEle = closest(target, '.' + ROOT);\n var clickArgs = {\n element: toastEle, cancel: false, clickToClose: false, originalEvent: e, toastObj: this\n };\n var isCloseIcon = target.classList.contains(CLOSEBTN);\n this.trigger('click', clickArgs);\n if ((isCloseIcon && !clickArgs.cancel) || clickArgs.clickToClose) {\n this.destroyToast(toastEle);\n }\n };\n Toast.prototype.displayToast = function (toastEle) {\n var _this = this;\n var showAnimate = this.animation.show;\n var animate = {\n duration: showAnimate.duration, name: showAnimate.effect, timingFunction: showAnimate.easing\n };\n var toastOpen = {\n toastObj: this,\n element: this.toastEle,\n };\n animate.begin = function () {\n toastEle.style.display = '';\n };\n animate.end = function () {\n _this.trigger('open', toastOpen);\n };\n new Animation(animate).animate(toastEle);\n };\n Toast.prototype.getContainer = function () {\n this.element.classList.add(CONTAINER);\n return this.element;\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Toast.prototype.onPropertyChanged = function (newProp, oldProp) {\n var container = 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 'enableRtl':\n newProp.enableRtl ? container.classList.add(RTL) : container.classList.remove(RTL);\n break;\n }\n }\n };\n __decorate([\n Property((Browser.isDevice && screen.width < 768) ? '100%' : '300px')\n ], Toast.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Toast.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"title\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"content\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"icon\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Toast.prototype, \"newestOnTop\", void 0);\n __decorate([\n Property(false)\n ], Toast.prototype, \"showCloseButton\", void 0);\n __decorate([\n Property(false)\n ], Toast.prototype, \"showProgressBar\", void 0);\n __decorate([\n Property(5000)\n ], Toast.prototype, \"timeOut\", void 0);\n __decorate([\n Property(1000)\n ], Toast.prototype, \"extendedTimeout\", void 0);\n __decorate([\n Complex({}, ToastAnimationSettings)\n ], Toast.prototype, \"animation\", void 0);\n __decorate([\n Complex({}, ToastPosition)\n ], Toast.prototype, \"position\", void 0);\n __decorate([\n Collection([{}], ButtonModelProps)\n ], Toast.prototype, \"buttons\", void 0);\n __decorate([\n Property(document.body)\n ], Toast.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"click\", void 0);\n Toast = __decorate([\n NotifyPropertyChanges\n ], Toast);\n return Toast;\n}(Component));\nexport { Toast };\n","/**\n * This is a file to perform common utility for OLAP and Relational datasource\n * @hidden\n */\nvar PivotUtil = /** @class */ (function () {\n function PivotUtil() {\n }\n PivotUtil.getType = function (value) {\n var val;\n val = (value && value.getDay) ? (value.getHours() > 0 || value.getMinutes() > 0 ||\n value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n return val;\n };\n PivotUtil.resetTime = function (date) {\n date.setHours(0, 0, 0, 0);\n return date;\n };\n return PivotUtil;\n}());\nexport { PivotUtil };\n","import { extend, Internationalization } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { PivotUtil } from './util';\n/**\n * PivotEngine is used to manipulate the relational or Multi-Dimensional data as pivoting values.\n */\n/** @hidden */\nvar PivotEngine = /** @class */ (function () {\n /**\n * Constructor for PivotEngine class\n * @param {DataOptions} dataSource?\n * @param {string} mode?\n * @hidden\n */\n /* tslint:disable:align */\n function PivotEngine(dataSource, mode, savedFieldList, pageSettings, enableValueSoring) {\n /** @hidden */\n this.formatFields = {};\n /** @hidden */\n this.calculatedFields = {};\n /** @hidden */\n this.calculatedFormulas = {};\n /** @hidden */\n this.valueAxis = 0;\n /** @hidden */\n this.saveDataHeaders = {};\n /** @hidden */\n this.columnCount = 0;\n /** @hidden */\n this.rowCount = 0;\n /** @hidden */\n this.colFirstLvl = 0;\n /** @hidden */\n this.rowFirstLvl = 0;\n /** @hidden */\n this.rowStartPos = 0;\n /** @hidden */\n this.colStartPos = 0;\n /** @hidden */\n this.enableValueSorting = false;\n /** @hidden */\n this.headerCollection = { rowHeaders: [], columnHeaders: [], rowHeadersCount: 0, columnHeadersCount: 0 };\n this.valueMatrix = [];\n this.indexMatrix = [];\n this.rMembers = [];\n this.cMembers = [];\n this.memberCnt = -1;\n this.pageInLimit = false;\n this.endPos = 0;\n this.colHdrBufferCalculated = false;\n this.colValuesLength = 1;\n this.rowValuesLength = 1;\n this.slicedHeaders = [];\n /* tslint:enable:align */\n var fields;\n var val;\n var filterRw;\n this.globalize = new Internationalization();\n this.enableSort = dataSource.enableSorting;\n this.allowValueFilter = dataSource.allowValueFilter;\n this.isValueFilterEnabled = false;\n this.enableValueSorting = enableValueSoring;\n fields = dataSource.data[0];\n this.fields = Object.keys(fields);\n this.rows = dataSource.rows ? dataSource.rows : [];\n this.columns = dataSource.columns ? dataSource.columns : [];\n this.filters = dataSource.filters ? dataSource.filters : [];\n this.formats = dataSource.formatSettings ? dataSource.formatSettings : [];\n this.values = dataSource.values ? dataSource.values : [];\n this.calculatedFieldSettings = dataSource.calculatedFieldSettings ? dataSource.calculatedFieldSettings : [];\n this.enableSort = dataSource.enableSorting === undefined ? true : dataSource.enableSorting;\n this.validateFilters(dataSource);\n this.isExpandAll = (this.isValueFiltersAvail && dataSource.allowValueFilter) ? true : dataSource.expandAll;\n this.drilledMembers =\n dataSource.drilledMembers ? (this.isValueFiltersAvail && dataSource.allowValueFilter) ? [] : dataSource.drilledMembers : [];\n this.isMutiMeasures = this.values.length > 1 ? true : false;\n this.valueAxis = dataSource.valueAxis === 'row' ? 1 : 0;\n this.rowValuesLength = this.valueAxis === 1 ? this.values.length : 1;\n this.colValuesLength = this.valueAxis === 0 ? this.values.length : 1;\n this.valueSortSettings = dataSource.valueSortSettings ||\n { sortOrder: 'None', headerDelimiter: '.', headerText: '', columnIndex: undefined };\n this.valueSortData = [];\n this.savedFieldList = savedFieldList;\n this.getFieldList(fields, this.enableSort, dataSource.allowValueFilter);\n this.fillFieldMembers(dataSource.data, this.indexMatrix);\n this.updateSortSettings(dataSource.sortSettings, this.enableSort);\n this.pageSettings = pageSettings ? pageSettings : this.pageSettings;\n this.valueMatrix = this.generateValueMatrix(dataSource.data);\n this.filterMembers = [];\n this.updateFilterMembers(dataSource);\n this.generateGridData(dataSource);\n return this;\n }\n PivotEngine.prototype.getFormattedFields = function (fields) {\n var cnt = this.formats.length;\n while (cnt--) {\n this.formatFields[this.formats[cnt].name] = this.formats[cnt];\n // for (let len: number = 0, lnt: number = fields.length; len < lnt; len++) {\n // if (fields[len] && fields[len].name === this.formats[cnt].name) {\n // this.formatFields[fields[len].name] = this.formats[cnt];\n // }\n // }\n }\n };\n PivotEngine.prototype.getFieldList = function (fields, isSort, isValueFilteringEnabled) {\n var type;\n var keys = this.fields;\n var dataFields = extend([], this.rows, null, true);\n dataFields = dataFields.concat(this.columns, this.values, this.filters);\n this.getFormattedFields(dataFields);\n this.getCalculatedField(keys);\n var len = keys.length;\n if (this.savedFieldList) {\n this.fieldList = this.savedFieldList;\n while (len--) {\n var key = keys[len];\n if (this.fieldList[key]) {\n this.fieldList[key].isSelected = false;\n this.fieldList[key].index = len;\n this.fieldList[key].filter = [];\n this.fieldList[key].isExcelFilter = false;\n if (this.isValueFiltersAvail && isValueFilteringEnabled) {\n this.fieldList[key].dateMember = [];\n this.fieldList[key].formattedMembers = {};\n this.fieldList[key].members = {};\n }\n }\n else {\n this.fieldList[key] = {\n id: key,\n caption: key,\n type: (type === undefined || type === 'undefined') ? 'number' : type,\n index: len,\n filter: [],\n sort: isSort ? 'Ascending' : 'None',\n isSelected: false\n };\n }\n }\n }\n else {\n while (len--) {\n var key = keys[len];\n type = PivotUtil.getType(fields[key]);\n if (!this.fieldList) {\n this.fieldList = {};\n }\n this.fieldList[key] = {\n id: key,\n caption: key,\n type: (type === undefined || type === 'undefined') ? 'number' : type,\n index: len,\n filter: [],\n sort: isSort ? 'Ascending' : 'None',\n isSelected: false\n };\n }\n }\n this.updateTreeViewData(dataFields);\n };\n PivotEngine.prototype.updateFieldList = function (savedFieldList) {\n var keys = this.fields;\n var len = keys.length;\n while (len--) {\n this.fieldList[keys[len]].isExcelFilter = savedFieldList[keys[len]].isExcelFilter;\n }\n };\n PivotEngine.prototype.updateTreeViewData = function (fields) {\n var cnt = fields.length;\n var lnt = this.calculatedFieldSettings.length;\n while (cnt--) {\n if (this.fieldList[fields[cnt].name]) {\n this.fieldList[fields[cnt].name].caption = fields[cnt].caption ? fields[cnt].caption : fields[cnt].name;\n this.fieldList[fields[cnt].name].isSelected = true;\n this.fieldList[fields[cnt].name].aggregateType = fields[cnt].type;\n }\n }\n while (lnt--) {\n this.fieldList[this.calculatedFieldSettings[lnt].name].aggregateType = 'CalculatedField';\n this.fieldList[this.calculatedFieldSettings[lnt].name].formula = this.calculatedFieldSettings[lnt].formula;\n }\n };\n PivotEngine.prototype.getCalculatedField = function (keys) {\n for (var _i = 0, _a = this.calculatedFieldSettings; _i < _a.length; _i++) {\n var field = _a[_i];\n this.calculatedFields[field.name] = extend({}, field, null, true);\n this.calculatedFields[field.name].actualFormula = field.formula;\n }\n var fieldKeys = Object.keys(this.calculatedFields);\n for (var calc = 0, cnt = fieldKeys.length; calc < cnt; calc++) {\n var field = this.calculatedFields[fieldKeys[calc]];\n var calcProperties = field.properties;\n var actualFormula = (calcProperties ? calcProperties.formula : field.formula).replace(/ +/g, '');\n var formula = actualFormula.replace(/\"/g, '');\n field.formula = formula.indexOf('^') > -1 ? this.powerFunction(formula) : formula;\n field.name = calcProperties ? calcProperties.name : field.name;\n keys.push(field.name);\n var formulaType = actualFormula.split('\\\"');\n for (var len = 0, lmt = formulaType.length; len < lmt; len++) {\n var type = formulaType[len];\n var aggregateValue = type.split(/[ .:;?!~,`\"&|()<>{}\\[\\]\\r\\n/\\\\]+/);\n if (['Sum', 'Count', 'Min', 'Max', 'Avg'].indexOf(aggregateValue[0]) !== -1) {\n var index = keys.indexOf(aggregateValue[1]);\n if (!this.calculatedFormulas[field.name]) {\n this.calculatedFormulas[field.name] = [{\n index: index,\n type: aggregateValue[0],\n formula: type,\n }];\n }\n else {\n this.calculatedFormulas[field.name].push({\n index: index,\n type: aggregateValue[0],\n formula: type,\n });\n }\n }\n }\n }\n };\n PivotEngine.prototype.validateFilters = function (data) {\n this.isValueFiltersAvail = false;\n var filterElements = data.filterSettings ? data.filterSettings : [];\n var dataFields = extend([], this.rows, null, true);\n dataFields = dataFields.concat(this.columns);\n for (var _i = 0, filterElements_1 = filterElements; _i < filterElements_1.length; _i++) {\n var filter = filterElements_1[_i];\n for (var _a = 0, dataFields_1 = dataFields; _a < dataFields_1.length; _a++) {\n var field = dataFields_1[_a];\n if (filter.name === field.name && filter.type === 'Value') {\n this.isValueFiltersAvail = true;\n break;\n }\n }\n if (this.isValueFiltersAvail) {\n break;\n }\n }\n };\n PivotEngine.prototype.fillFieldMembers = function (data, indMat) {\n var keys = this.fields;\n var dlen = data.length;\n var fList = this.fieldList;\n var kLn = keys.length;\n for (var kl = 0; kl < kLn; kl++) {\n var key = keys[kl];\n if (!fList[key].members) {\n fList[key].members = {};\n }\n if (!fList[key].formattedMembers) {\n fList[key].formattedMembers = {};\n }\n if (!fList[key].dateMember) {\n fList[key].dateMember = [];\n }\n var members = fList[key].members;\n var isDataAvail = Object.keys(members).length > 0 ? true : false;\n var formattedMembers = fList[key].formattedMembers;\n var dateMember = fList[key].dateMember;\n var membersCnt = 0;\n var fmembersCnt = 0;\n //let sort: string[] = [];\n for (var dl = 0; dl < dlen; dl++) {\n var mkey = data[dl][key];\n if (!isDataAvail) {\n var fKey = mkey;\n var formattedValue = this.getFormattedValue(mkey, key);\n if (formattedValue.formattedText) {\n fKey = formattedValue.formattedText;\n }\n if (!members.hasOwnProperty(mkey)) {\n membersCnt++;\n members[mkey] = {\n index: [dl], ordinal: membersCnt,\n isDrilled: this.isExpandAll ? true : false\n };\n dateMember.push({ formattedText: formattedValue.formattedText, actualText: formattedValue.actualText });\n //sort.push(mkey);\n }\n else {\n members[mkey].index.push(dl);\n }\n if (!formattedMembers.hasOwnProperty(fKey)) {\n fmembersCnt++;\n formattedMembers[fKey] = {\n index: [dl], ordinal: fmembersCnt,\n isDrilled: this.isExpandAll ? true : false\n };\n }\n else {\n formattedMembers[fKey].index.push(dl);\n }\n }\n if (!(indMat[dl])) {\n indMat[dl] = [];\n indMat[dl][kl] = members[mkey].ordinal;\n }\n else {\n indMat[dl][kl] = members[mkey].ordinal;\n }\n }\n /*sort = Object.keys(members).sort();\n let sortedMembers: Members = {};\n for (let sln: number = 0, slt: number = sort.length; sln < slt; sln++) {\n sortedMembers[sort[sln]] = members[sort[sln]];\n }\n fList[key].members = sortedMembers; */\n }\n this.fillDrilledInfo();\n };\n PivotEngine.prototype.fillDrilledInfo = function () {\n for (var key = 0; key < this.drilledMembers.length; key++) {\n var fieldName = this.drilledMembers[key].name;\n for (var mem = 0; mem < this.drilledMembers[key].items.length; mem++) {\n var memberName = this.drilledMembers[key].items[mem];\n var field = this.fieldList[fieldName];\n if (field && field.members[memberName]) {\n field.members[memberName].isDrilled = this.isExpandAll ? false : true;\n }\n }\n }\n };\n PivotEngine.prototype.generateValueMatrix = function (data) {\n var keys = this.fields;\n var len = data.length;\n var vMat = [];\n var keyLen = keys.length;\n var flList = this.fieldList;\n while (len--) {\n var record = data[len];\n var tkln = keyLen;\n //if (isNullOrUndefined(vMat[len])) {\n vMat[len] = [];\n //}\n while (tkln--) {\n var key = keys[tkln];\n vMat[len][tkln] = (flList[key].type === 'number') ? data[len][key] : 1;\n }\n }\n return vMat;\n };\n PivotEngine.prototype.updateSortSettings = function (sortSettings, isSort) {\n for (var sln = 0, slt = sortSettings ? sortSettings.length : 0; sln < slt && isSort; sln++) {\n this.fieldList[sortSettings[sln].name].sort = sortSettings[sln].order;\n }\n };\n PivotEngine.prototype.updateFilterMembers = function (source) {\n var filterRw = this.filterMembers;\n var list = {};\n //let eList: {[key: string] : number} = {};\n var isInclude = this.getFilters(source, list);\n //this.getFilterExcludeList(source.rows, flist);\n //this.getFilterExcludeList(source.columns, flist);\n //this.getFilterExcludeList(source.filters, flist);\n // let filters: Iterator = isInclude ? iList : eList;\n var dln = this.indexMatrix.length;\n if (isInclude) {\n var keys = list.include.index;\n for (var ln = 0; ln < keys.length; ln++) {\n if (list.exclude === undefined || list.exclude.indexObject[keys[ln]] === undefined) {\n filterRw.push(keys[ln]);\n }\n }\n }\n else {\n for (var ln = 0; ln < dln; ln++) {\n if (list.exclude === undefined || list.exclude.indexObject[ln] === undefined) {\n filterRw.push(ln);\n }\n }\n }\n };\n PivotEngine.prototype.getFilters = function (source, ilist) {\n var filterElements = source.filterSettings ? source.filterSettings : [];\n var filters = this.filters;\n var isInclude = false;\n var filter = [];\n //let type: string;\n for (var rln = 0, rlt = filterElements.length; rln < rlt; rln++) {\n var filterElement = filterElements[rln].properties ?\n filterElements[rln].properties : filterElements[rln];\n if (this.fieldList[filterElement.name].isSelected && this.isValidFilterField(filterElement, source.allowLabelFilter)) {\n this.applyLabelFilter(filterElement);\n filter = filterElement ? filterElement.items : [];\n if (filterElement.type && filterElement.type === 'Include') {\n /* tslint:disable-next-line:max-line-length */\n this.frameFilterList(filter, filterElement.name, ilist, 'include', filterElement.showLabelFilter, isInclude);\n isInclude = true;\n }\n else {\n this.frameFilterList(filter, filterElement.name, ilist, 'exclude', filterElement.showLabelFilter);\n }\n if (filterElement.showLabelFilter) {\n filterElement.items = [];\n filterElement.type = filterElement.showDateFilter ? 'Date' : filterElement.showNumberFilter ? 'Number' : 'Label';\n }\n }\n }\n /* for (let cln: number = 0, clt: number = cols.length; cln < clt; cln ++) {\n filter = cols[cln].filter ? cols[cln].filter.items : [];\n if (filter.length && cols[cln].filter.type && cols[cln].filter.type === 'include') {\n //type = cols[cln].filter.type;\n this.frameFilterList(filter, cols[cln].name, ilist, 'include', isInclude);\n isInclude = true;\n } else {\n this.frameFilterList(filter, cols[cln].name, ilist, 'exclude');\n }\n }\n for (let vln: number = 0, vlt: number = filters.length; vln < vlt; vln ++) {\n filter = filters[vln].filter ? filters[vln].filter.items : [];\n if (filter.length && filters[vln].filter.type && filters[vln].filter.type === 'include') {\n this.frameFilterList(filter, filters[vln].name, ilist, 'include', isInclude);\n isInclude = true;\n } else {\n this.frameFilterList(filter, filters[vln].name, ilist, 'exclude');\n }\n } */\n return isInclude;\n };\n PivotEngine.prototype.isValidFilterField = function (filterElement, allowLabelFiltering) {\n var isValidFilterElement = false;\n var filterTypes = ['Include', 'Exclude'];\n var dataFields = extend([], this.rows, null, true);\n dataFields = dataFields.concat(this.columns);\n if (this.fieldList[filterElement.name].isSelected && filterTypes.indexOf(filterElement.type) >= 0) {\n isValidFilterElement = true;\n }\n else {\n for (var _i = 0, dataFields_2 = dataFields; _i < dataFields_2.length; _i++) {\n var field = dataFields_2[_i];\n if (filterElement.name === field.name && allowLabelFiltering &&\n (['Label', 'Date', 'Number'].indexOf(filterElement.type) >= 0)) {\n isValidFilterElement = true;\n break;\n }\n }\n }\n return isValidFilterElement;\n };\n PivotEngine.prototype.applyLabelFilter = function (filterElement) {\n if (['Label', 'Date', 'Number'].indexOf(filterElement.type) >= 0) {\n var members = Object.keys(this.fieldList[filterElement.name].members);\n filterElement.showLabelFilter = true;\n if (filterElement.type === 'Label') {\n /* tslint:disable-next-line:max-line-length */\n filterElement.items = this.getLabelFilterMembers(members, filterElement.condition, filterElement.value1, filterElement.value2);\n }\n else if (filterElement.type === 'Date') {\n filterElement.showDateFilter = true;\n /* tslint:disable-next-line:max-line-length */\n filterElement.items = this.getDateFilterMembers(members, filterElement.name, filterElement.condition, filterElement.value1, filterElement.value2);\n }\n else {\n filterElement.showNumberFilter = true;\n filterElement.items = [];\n for (var _i = 0, members_1 = members; _i < members_1.length; _i++) {\n var member = members_1[_i];\n var operand1 = this.getParsedValue(filterElement.name, filterElement.value1);\n var operand2 = this.getParsedValue(filterElement.name, filterElement.value2);\n /* tslint:disable-next-line:max-line-length */\n if (this.validateFilterValue(parseInt(member, 10), filterElement.condition, operand1, operand2)) {\n filterElement.items.push(member);\n }\n }\n }\n var excludeOperators = ['DoesNotBeginWith', 'DoesNotContains', 'DoesNotEndsWith', 'DoesNotEquals', 'NotBetween'];\n filterElement.type = (excludeOperators.indexOf(filterElement.condition) > -1 &&\n !filterElement.showNumberFilter) ? 'Exclude' : 'Include';\n }\n else {\n filterElement.showLabelFilter = false;\n }\n };\n PivotEngine.prototype.getLabelFilterMembers = function (members, operator, value1, value2) {\n var items = [];\n for (var _i = 0, members_2 = members; _i < members_2.length; _i++) {\n var member = members_2[_i];\n var filterValue = member.toLowerCase();\n if (value1.toString()) {\n switch (operator) {\n case 'Equals':\n case 'DoesNotEquals':\n if (filterValue === value1.toLowerCase()) {\n items.push(member);\n }\n break;\n case 'BeginWith':\n case 'DoesNotBeginWith':\n if (filterValue.indexOf(value1.toLowerCase()) === 0) {\n items.push(member);\n }\n break;\n case 'EndsWith':\n case 'DoesNotEndsWith':\n if (filterValue.match(value1.toLowerCase() + '$') != null) {\n items.push(member);\n }\n break;\n case 'Contains':\n case 'DoesNotContains':\n if (filterValue.indexOf(value1.toLowerCase()) > -1) {\n items.push(member);\n }\n break;\n case 'GreaterThan':\n if (filterValue > value1.toLowerCase()) {\n items.push(member);\n }\n break;\n case 'GreaterThanOrEqualTo':\n if (filterValue >= value1.toLowerCase()) {\n items.push(member);\n }\n break;\n case 'LessThan':\n if (filterValue < value1.toLowerCase()) {\n items.push(member);\n }\n break;\n case 'LessThanOrEqualTo':\n if (filterValue <= value1.toLowerCase()) {\n items.push(member);\n }\n break;\n case 'Between':\n case 'NotBetween':\n if ((filterValue >= value1.toLowerCase()) && (filterValue <= value2.toLowerCase())) {\n items.push(member);\n }\n break;\n }\n }\n }\n return items;\n };\n PivotEngine.prototype.getDateFilterMembers = function (members, name, operator, value1, value2) {\n var items = [];\n for (var _i = 0, members_3 = members; _i < members_3.length; _i++) {\n var member = members_3[_i];\n var filterValue = new Date(member);\n if (value1) {\n switch (operator) {\n case 'Equals':\n case 'DoesNotEquals':\n if ((PivotUtil.resetTime(filterValue)).getTime() === (PivotUtil.resetTime(value1)).getTime()) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n case 'After':\n if ((PivotUtil.resetTime(filterValue)).getTime() > (PivotUtil.resetTime(value1)).getTime()) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n case 'AfterOrEqualTo':\n if ((PivotUtil.resetTime(filterValue)).getTime() >= (PivotUtil.resetTime(value1)).getTime()) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n case 'Before':\n if ((PivotUtil.resetTime(filterValue)).getTime() < (PivotUtil.resetTime(value1)).getTime()) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n case 'BeforeOrEqualTo':\n if ((PivotUtil.resetTime(filterValue)).getTime() <= (PivotUtil.resetTime(value1)).getTime()) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n case 'Between':\n case 'NotBetween':\n if (((PivotUtil.resetTime(filterValue)).getTime() >= (PivotUtil.resetTime(value1)).getTime()) &&\n ((PivotUtil.resetTime(filterValue)).getTime() <= (PivotUtil.resetTime(value2)).getTime())) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n }\n }\n }\n return items;\n };\n PivotEngine.prototype.validateFilterValue = function (val, operator, value1, value2) {\n var isMemberInclude = false;\n if (typeof (value1) === 'number') {\n switch (operator) {\n case 'Equals':\n if (val === value1) {\n isMemberInclude = true;\n }\n break;\n case 'DoesNotEquals':\n if (val !== value1) {\n isMemberInclude = true;\n }\n break;\n case 'GreaterThan':\n if (val > value1) {\n isMemberInclude = true;\n }\n break;\n case 'GreaterThanOrEqualTo':\n if (val >= value1) {\n isMemberInclude = true;\n }\n break;\n case 'LessThan':\n if (val < value1) {\n isMemberInclude = true;\n }\n break;\n case 'LessThanOrEqualTo':\n if (val <= value1) {\n isMemberInclude = true;\n }\n break;\n case 'Between':\n if ((val >= value1) && (val <= value2)) {\n isMemberInclude = true;\n }\n break;\n case 'NotBetween':\n if (!((val >= value1) && (val <= value2))) {\n isMemberInclude = true;\n }\n break;\n }\n }\n return isMemberInclude;\n };\n /* tslint:disable-next-line:max-line-length */\n PivotEngine.prototype.frameFilterList = function (filter, name, list, type, isLabelFilter, isInclude) {\n var _this = this;\n var updateFilter = function () {\n var fln = 0;\n var field = _this.fieldList[name];\n field.filter = filter;\n field.type = type;\n field.isExcelFilter = isLabelFilter;\n var members = field.formattedMembers;\n var allowFil = isInclude;\n var final = {};\n final[type] = { indexObject: {}, index: [] };\n while (filter[fln]) {\n var indx = members[filter[fln]].index;\n if (type === 'include') {\n for (var iln = 0, ilt = indx.length; iln < ilt; iln++) {\n if (!allowFil || list[type].indexObject[indx[iln]] !== undefined) {\n final[type].indexObject[indx[iln]] = indx[iln];\n final[type].index.push(indx[iln]);\n }\n }\n }\n else {\n for (var iln = 0, ilt = indx.length; iln < ilt; iln++) {\n if (list[type].indexObject[indx[iln]] === undefined) {\n list[type].indexObject[indx[iln]] = indx[iln];\n list[type].index.push(indx[iln]);\n }\n }\n }\n fln++;\n }\n if (type === 'include') {\n list[type] = final[type];\n }\n };\n if (!list[type]) {\n list[type] = { indexObject: {}, index: [] };\n updateFilter();\n }\n else {\n updateFilter();\n }\n // }\n };\n /* tslint:disable-next-line:max-line-length */\n PivotEngine.prototype.applyValueFiltering = function (rowData, level, rows, columns, valueFilter, rowFilterData, type) {\n this.isValueFiltered = false;\n var allMember = extend({}, rows[rows.length - 1], null, true);\n this.getFilteredData(rows, columns, valueFilter, rowFilterData, level, rowData.name, allMember, type);\n if (this.isValueFiltered) {\n rowFilterData.push(allMember);\n rows = rowFilterData;\n }\n return rows;\n };\n /* tslint:disable-next-line:max-line-length */\n PivotEngine.prototype.getFilteredData = function (rows, columns, filterSettings, rowFilterData, level, fieldName, allMember, type) {\n var rLen = rows.length;\n for (var i = 0; i < rLen; i++) {\n if (filterSettings[fieldName]) {\n if (rows[i].level === level) {\n this.isValueFiltered = true;\n this.fieldList[fieldName].isExcelFilter = true;\n var value = 0;\n var measure = filterSettings[fieldName].measure;\n var mPos = this.fieldList[measure].index;\n var aggregate = this.fieldList[measure].aggregateType;\n value = (type === 'row' ? this.getAggregateValue(rows[i].index, columns.indexObject, mPos, aggregate) :\n this.getAggregateValue(columns.index, rows[i].indexObject, mPos, aggregate));\n var operand1 = this.getParsedValue(measure, filterSettings[fieldName].value1);\n var operand2 = this.getParsedValue(measure, filterSettings[fieldName].value2);\n /* tslint:disable-next-line:max-line-length */\n if (!this.validateFilterValue(value, filterSettings[fieldName].condition, operand1, operand2) && rows[i].type !== 'grand sum') {\n var data = this.removefilteredData(rows[i], this.valueFilteredData);\n var row = data ? data : rows[i];\n this.validateFilteredParentData(row, this.valueFilteredData, allMember, 0, level, type);\n }\n else if (rows[i].type !== 'grand sum') {\n rowFilterData.push(extend({}, rows[i], null, true));\n rowFilterData[rowFilterData.length - 1].isLevelFiltered = true;\n }\n }\n else if (rows[i].hasChild && rows[i].members.length > 0 && rows[i].type !== 'grand sum') {\n rowFilterData.push(extend({}, rows[i], null, true));\n rowFilterData[rowFilterData.length - 1].members = [];\n rowFilterData[rowFilterData.length - 1].isLevelFiltered = true;\n /* tslint:disable-next-line:max-line-length */\n this.getFilteredData(rows[i].members, columns, filterSettings, rowFilterData[rowFilterData.length - 1].members, level, fieldName, allMember, type);\n }\n }\n }\n };\n PivotEngine.prototype.getParsedValue = function (measure, value) {\n if (this.formatFields[measure] && value) {\n var formatSetting = extend({}, this.formatFields[measure], null, true);\n delete formatSetting.name;\n return this.globalize.parseNumber(value, formatSetting);\n }\n else {\n return parseInt(value, 10);\n }\n };\n PivotEngine.prototype.removefilteredData = function (row, rowFilterData) {\n var rows = extend([], rowFilterData, null, true);\n var filteredData;\n for (var i = 0; i < rows.length; i++) {\n if (row.isLevelFiltered && row.axis === rows[i].axis &&\n row.valueSort.levelName === rows[i].valueSort.levelName &&\n row.actualText === rows[i].actualText && row.axis === rows[i].axis &&\n row.level === rows[i].level && row.ordinal === rows[i].ordinal) {\n filteredData = rows[i];\n rowFilterData.splice(i, 1);\n break;\n }\n else if (rowFilterData[i].hasChild && rowFilterData[i].members.length > 0) {\n this.removefilteredData(row, rowFilterData[i].members);\n }\n }\n return filteredData;\n };\n /* tslint:disable-next-line:max-line-length */\n PivotEngine.prototype.validateFilteredParentData = function (row, rows, allMemberData, i, level, type) {\n if (rows.length > 0) {\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var rowFilteredData = rows_1[_i];\n if (rowFilteredData.level === i) {\n if (type === 'row') {\n var index = row.index;\n for (var _a = 0, index_1 = index; _a < index_1.length; _a++) {\n var key = index_1[_a];\n if (allMemberData.index.indexOf(key) >= 0) {\n allMemberData.index.splice(allMemberData.index.indexOf(key), 1);\n }\n if (((row.valueSort.levelName.toString()).indexOf(rowFilteredData.valueSort.levelName.toString()) >= 0) &&\n rowFilteredData.level !== level && rowFilteredData.index.indexOf(key) >= 0) {\n rowFilteredData.index.splice(rowFilteredData.index.indexOf(key), 1);\n }\n }\n }\n else {\n var index = row.indexObject;\n for (var _b = 0, _c = Object.keys(index); _b < _c.length; _b++) {\n var key = _c[_b];\n if (index.hasOwnProperty(key)) {\n delete allMemberData.indexObject[key];\n if (((row.valueSort.levelName.toString()).indexOf(rowFilteredData.valueSort.levelName.toString()) >= 0) &&\n rowFilteredData.level !== level) {\n delete rowFilteredData.indexObject[key];\n }\n }\n }\n }\n if (rowFilteredData && rowFilteredData.members.length > 0 &&\n rowFilteredData.members[0].level === i + 1 && rowFilteredData.members[0].level !== level) {\n this.validateFilteredParentData(row, rowFilteredData.members, allMemberData, i + 1, level, type);\n }\n }\n }\n }\n else {\n if (type === 'row') {\n var index = row.index;\n for (var _d = 0, index_2 = index; _d < index_2.length; _d++) {\n var key = index_2[_d];\n if (allMemberData.index.indexOf(key) >= 0) {\n allMemberData.index.splice(allMemberData.index.indexOf(key), 1);\n }\n }\n }\n else {\n var index = row.indexObject;\n for (var _e = 0, _f = Object.keys(index); _e < _f.length; _e++) {\n var key = _f[_e];\n if (index.hasOwnProperty(key)) {\n delete allMemberData.indexObject[key];\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:max-line-length */\n PivotEngine.prototype.updateFramedHeaders = function (framedHeaders, dataHeaders, filteredHeaders, headers, type) {\n for (var _i = 0, framedHeaders_1 = framedHeaders; _i < framedHeaders_1.length; _i++) {\n var dHeader = framedHeaders_1[_i];\n this.isHeaderAvail = false;\n if (this.validateFilteredHeaders(dHeader, filteredHeaders, type) || dHeader.type === 'grand sum') {\n if (type === 'row') {\n this.rowCount += this.rowValuesLength;\n }\n else {\n this.columnCount += this.colValuesLength;\n }\n headers.push(extend({}, dHeader, null, true));\n headers[headers.length - 1].members = [];\n if (dHeader.hasChild && dHeader.isDrilled && dHeader.members.length > 0) {\n this.updateFramedHeaders(dHeader.members, dataHeaders, filteredHeaders, headers[headers.length - 1].members, type);\n }\n }\n }\n return this.filterFramedHeaders;\n };\n PivotEngine.prototype.validateFilteredHeaders = function (dHeader, filteredHeaders, type) {\n for (var _i = 0, filteredHeaders_1 = filteredHeaders; _i < filteredHeaders_1.length; _i++) {\n var vHeader = filteredHeaders_1[_i];\n if (!this.isHeaderAvail) {\n if (dHeader.actualText === vHeader.actualText &&\n dHeader.level === vHeader.level &&\n dHeader.valueSort.levelName === vHeader.valueSort.levelName) {\n if (type === 'row') {\n if (vHeader.index.length > 0) {\n this.isHeaderAvail = true;\n dHeader.index = vHeader.index;\n return true;\n }\n else {\n this.isHeaderAvail = false;\n dHeader.index = vHeader.index;\n return false;\n }\n }\n else {\n if (Object.keys(vHeader.indexObject).length > 0) {\n this.isHeaderAvail = true;\n dHeader.indexObject = vHeader.indexObject;\n return true;\n }\n else {\n this.isHeaderAvail = false;\n dHeader.indexObject = vHeader.indexObject;\n return false;\n }\n }\n }\n else if (vHeader.hasChild && vHeader.members.length > 0 && vHeader.type !== 'grand sum') {\n this.validateFilteredHeaders(dHeader, vHeader.members, type);\n }\n }\n }\n return this.isHeaderAvail;\n };\n PivotEngine.prototype.isEmptyDataAvail = function (rowHeaders, columnHeaders) {\n this.isEmptyData = false;\n if (rowHeaders.length > 0 && rowHeaders[rowHeaders.length - 1].type === 'grand sum' &&\n rowHeaders[rowHeaders.length - 1].index.length === 0) {\n this.isEmptyData = true;\n }\n if (columnHeaders.length > 0 && columnHeaders[columnHeaders.length - 1].type === 'grand sum' &&\n Object.keys(columnHeaders[columnHeaders.length - 1].indexObject).length === 0) {\n this.isEmptyData = true;\n }\n };\n /* tslint:disable */\n PivotEngine.prototype.generateGridData = function (dataSource, headerCollection) {\n var keys = this.fields;\n var columns = dataSource.columns ? dataSource.columns : [];\n var data = dataSource.data;\n var rows = dataSource.rows ? dataSource.rows : [];\n var filterSettings = dataSource.filterSettings;\n var values = dataSource.values;\n var size = 1;\n this.isExpandAll = dataSource.expandAll;\n this.drilledMembers = dataSource.drilledMembers ? dataSource.drilledMembers : [];\n this.isEmptyData = false;\n //let childrens: Field = this.fieldList[rows[0].name + ''];\n this.valueSortSettings.columnIndex = undefined;\n var st1 = new Date().getTime();\n if (!this.isValueFilterEnabled) {\n if (!headerCollection || this.enableValueSorting) {\n this.columnCount = 0;\n this.rowCount = 0;\n this.cMembers = [];\n this.rMembers = [];\n if (rows.length !== 0) {\n this.rMembers = this.getIndexedHeaders(rows, data, 0, this.filterMembers, 'row', '');\n }\n if (columns.length !== 0) {\n this.cMembers = this.getIndexedHeaders(columns, data, 0, this.filterMembers, 'column', '');\n }\n this.insertAllMembersCommon();\n }\n this.saveDataHeaders = (this.isValueFiltersAvail && dataSource.allowValueFilter) ? {\n rowHeaders: extend([], this.rMembers, null, true),\n columnHeaders: extend([], this.cMembers, null, true)\n } : {};\n }\n this.pivotValues = [];\n var gridData = [];\n this.headerContent = [];\n this.valueContent = [];\n this.valueFilteredData = [];\n this.filterFramedHeaders = [];\n var rowheads = [];\n var colheads = [];\n var rowFilteredData = [];\n var columnFilteredData = [];\n var valuesCount = (this.values.length);\n if ((this.isValueFiltersAvail && dataSource.allowValueFilter)) {\n this.valueFilteredData = [];\n var rowHeaders = this.saveDataHeaders.rowHeaders;\n var columnHeaders = this.saveDataHeaders.columnHeaders;\n if (filterSettings.length > 0) {\n var valueFilters = {};\n var valueFields = {};\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n valueFields[value.name] = value;\n }\n for (var _a = 0, filterSettings_1 = filterSettings; _a < filterSettings_1.length; _a++) {\n var filter = filterSettings_1[_a];\n rowHeaders = (rowFilteredData.length > 0 ? rowFilteredData : rowHeaders);\n columnHeaders = (columnFilteredData.length > 0 ? columnFilteredData : columnHeaders);\n this.valueFilteredData = [];\n var filterElement = filter.properties ?\n filter.properties : filter;\n if (filterElement.type === 'Value' && this.fieldList[filter.name].isSelected) {\n valueFilters[filter.name] = filter;\n filterElement.items = [];\n var isAvail = false;\n var rLen = rows.length;\n var cLen = columns.length;\n for (var i = 0; i < rLen; i++) {\n if (filterElement.name === rows[i].name && valueFields[filterElement.measure] && !isAvail) {\n isAvail = true;\n /* tslint:disable-next-line:max-line-length */\n rowFilteredData = this.applyValueFiltering(rows[i], i, rowHeaders, columnHeaders[columnHeaders.length - 1], valueFilters, this.valueFilteredData, 'row');\n break;\n }\n }\n for (var j = 0; j < cLen; j++) {\n if (filterElement.name === columns[j].name && valueFields[filterElement.measure] && !isAvail) {\n isAvail = true;\n /* tslint:disable-next-line:max-line-length */\n columnFilteredData = this.applyValueFiltering(columns[j], j, columnHeaders, rowHeaders[rowHeaders.length - 1], valueFilters, this.valueFilteredData, 'column');\n break;\n }\n }\n }\n }\n }\n rowFilteredData = (rowFilteredData.length > 0 ? rowFilteredData : rowHeaders);\n columnFilteredData = (columnFilteredData.length > 0 ? columnFilteredData : columnHeaders);\n this.isEmptyDataAvail(rowFilteredData, columnFilteredData);\n var savedFieldList = extend({}, this.fieldList, null, true);\n this.indexMatrix = [];\n var fields = dataSource.data[0];\n this.getFieldList(fields, this.enableSort, dataSource.allowValueFilter);\n this.fillFieldMembers(dataSource.data, this.indexMatrix);\n this.updateSortSettings(dataSource.sortSettings, this.enableSort);\n this.valueMatrix = this.generateValueMatrix(dataSource.data);\n this.filterMembers = [];\n var pageSize = 1;\n this.updateFilterMembers(dataSource);\n this.rMembers = rows.length !== 0 ?\n this.getIndexedHeaders(rows, data, 0, this.filterMembers, 'row', '') : this.rMembers;\n this.cMembers = columns.length !== 0 ?\n this.getIndexedHeaders(columns, data, 0, this.filterMembers, 'column', '') : this.cMembers;\n this.insertAllMembersCommon();\n this.updateFieldList(savedFieldList);\n this.rowCount = 0;\n this.columnCount = 0;\n this.rMembers = this.updateFramedHeaders(this.rMembers, this.rMembers, rowFilteredData, this.filterFramedHeaders, 'row');\n this.filterFramedHeaders = [];\n this.cMembers = this.updateFramedHeaders(this.cMembers, this.cMembers, columnFilteredData, this.filterFramedHeaders, 'column');\n this.isValueFilterEnabled = true;\n }\n this.applyValueSorting();\n if (this.pageSettings) {\n if (!headerCollection || this.enableValueSorting) {\n this.headerCollection.rowHeaders = extend([], this.rMembers, null, true);\n this.headerCollection.columnHeaders = extend([], this.cMembers, null, true);\n this.headerCollection.rowHeadersCount = this.rowCount;\n this.headerCollection.columnHeadersCount = this.columnCount;\n }\n else {\n this.rMembers = headerCollection.rowHeaders;\n this.cMembers = headerCollection.columnHeaders;\n this.rowCount = headerCollection.rowHeadersCount;\n this.columnCount = headerCollection.columnHeadersCount;\n if (this.columns.length > 1 || this.rows.length > 1 || this.allowValueFilter) {\n this.headerCollection = extend({}, headerCollection, null, true);\n }\n }\n this.calculatePagingValues();\n if (!this.enableValueSorting || !this.allowValueFilter) {\n if (rows.length > 0) {\n this.insertPosition(rows, data, 0, this.filterMembers, 'row', '', this.rMembers);\n }\n if (columns.length > 0) {\n this.insertPosition(columns, data, 0, this.filterMembers, 'column', '', this.cMembers);\n }\n this.rMembers = this.insertTotalPosition(this.rMembers);\n this.cMembers = this.insertTotalPosition(this.cMembers);\n }\n }\n this.getHeaderData(this.cMembers, colheads, this.pivotValues, 0, this.valueAxis ? 1 : valuesCount);\n this.insertSubTotals();\n //this.getHeaderData(rmembers, rowheads, gridData, 0); \n this.getTableData(this.rMembers, rowheads, colheads, 0, this.pivotValues, valuesCount);\n if (this.pageSettings) {\n this.removeIndexProperties();\n }\n this.isEngineUpdated = true;\n var st2 = new Date().getTime();\n // console.log(st1 - st2);\n };\n /* tslint:enable */\n PivotEngine.prototype.applyValueSorting = function () {\n if (this.valueSortSettings.headerText && this.valueSortSettings.headerText !== '' && this.values.length > 0) {\n var textArray = this.valueSortSettings.headerText.split(this.valueSortSettings.headerDelimiter);\n var hText = '';\n var mIndex = void 0;\n var mType = void 0;\n var caption = void 0;\n for (var i = 0; i < this.values.length; i++) {\n if (this.values[i].caption === textArray[textArray.length - 1]) {\n caption = this.values[i].name;\n break;\n }\n else {\n caption = textArray[textArray.length - 1];\n }\n }\n if (this.values.length > 1 && caption && this.fieldList[caption]) {\n for (var i = 0; i < textArray.length - 1; i++) {\n hText = hText === '' ? textArray[i] : (hText + this.valueSortSettings.headerDelimiter + textArray[i]);\n }\n mIndex = this.fieldList[caption].index;\n mType = this.fieldList[caption].aggregateType;\n }\n else {\n hText = this.valueSortSettings.headerText;\n mIndex = this.fieldList[this.values[0].name].index;\n mType = this.fieldList[this.values[0].name].aggregateType;\n }\n var member = void 0;\n if (this.valueAxis === 0) {\n member = this.getMember(this.cMembers, hText);\n if (member) {\n this.sortByValueRow(this.rMembers, member, this.valueSortSettings.sortOrder, mIndex, mType);\n }\n }\n else {\n member = this.getMember(this.rMembers, hText);\n if (member) {\n this.sortByValueRow(this.cMembers, member, this.valueSortSettings.sortOrder, mIndex, mType);\n }\n }\n }\n };\n PivotEngine.prototype.getMember = function (cMembers, headerText) {\n var vlen = cMembers.length;\n var member;\n for (var j = 0; j < vlen; j++) {\n if (cMembers[j].valueSort.levelName === headerText) {\n member = cMembers[j];\n break;\n }\n else if (cMembers[j].members.length > 0) {\n member = this.getMember(cMembers[j].members, headerText);\n }\n if (member) {\n return member;\n }\n }\n return member;\n };\n PivotEngine.prototype.sortByValueRow = function (rMembers, member, sortOrder, mIndex, mType) {\n var sort = false;\n var vlen = rMembers.length;\n for (var j = 0; j < vlen; j++) {\n for (var k = j; k < vlen && rMembers[j].type !== 'grand sum' && rMembers[k].type !== 'grand sum'; k++) {\n if (sortOrder === 'Descending') {\n sort = this.getAggregateValue(rMembers[j].index, member.indexObject, mIndex, mType) <\n this.getAggregateValue(rMembers[k].index, member.indexObject, mIndex, mType);\n }\n else {\n sort = this.getAggregateValue(rMembers[j].index, member.indexObject, mIndex, mType) >\n this.getAggregateValue(rMembers[k].index, member.indexObject, mIndex, mType);\n }\n if (sort) {\n var temp = {};\n temp = rMembers[j];\n rMembers[j] = rMembers[k];\n rMembers[k] = temp;\n }\n }\n if (rMembers[j].members.length > 0) {\n this.sortByValueRow(rMembers[j].members, member, sortOrder, mIndex, mType);\n }\n }\n };\n PivotEngine.prototype.insertAllMembersCommon = function () {\n /* inserting the row grant-total members */\n this.insertAllMember(this.rMembers, this.filterMembers, '', 'row');\n /* inserting the column gran-total members */\n this.insertAllMember(this.cMembers, this.filterMembers, '', 'column');\n };\n PivotEngine.prototype.removeIndexProperties = function () {\n for (var rCnt = 0; rCnt < this.headerContent.length; rCnt++) {\n if (this.headerContent[rCnt]) {\n for (var cCnt = 0; cCnt < Object.keys(this.headerContent[rCnt]).length; cCnt++) {\n var key = Number(Object.keys(this.headerContent[rCnt])[cCnt]);\n this.headerContent[rCnt][key].index = [];\n this.headerContent[rCnt][key].indexObject = {};\n this.pivotValues[rCnt][key].index = [];\n this.pivotValues[rCnt][key].indexObject = {};\n }\n }\n }\n for (var rCnt = this.headerContent.length; rCnt < this.pivotValues.length; rCnt++) {\n if (this.headerContent[rCnt]) {\n this.valueContent[rCnt - this.headerContent.length][0].index = [];\n this.valueContent[rCnt - this.headerContent.length][0].indexObject = {};\n this.pivotValues[rCnt][0].index = [];\n this.pivotValues[rCnt][0].indexObject = {};\n }\n }\n };\n PivotEngine.prototype.insertSubTotals = function () {\n var rowLength = this.pivotValues.length;\n for (var rowCnt = 0; rowCnt < rowLength; rowCnt++) {\n var rowCells = this.pivotValues[rowCnt];\n if (rowCells) {\n var savedCell = void 0;\n var spanCnt = 1;\n var colLength = rowCells.length;\n var indexObj = void 0;\n for (var colCnt = colLength - 1; colCnt > 0; colCnt--) {\n var cell = rowCells[colCnt];\n if (cell) {\n if (savedCell) {\n savedCell.colSpan = spanCnt;\n savedCell.colIndex = savedCell.colIndex - (spanCnt - 1);\n }\n indexObj = { index: cell.index, indexObject: cell.indexObject };\n cell.index = [];\n cell.indexObject = {};\n savedCell = extend({}, cell, null, true);\n cell.index = indexObj.index;\n cell.indexObject = indexObj.indexObject;\n var rowPos = rowCnt + 1;\n while (this.pivotValues[rowPos] && !this.pivotValues[rowPos][colCnt]) {\n if (!this.pivotValues[rowCnt][colCnt].isDrilled) {\n this.pivotValues[rowCnt][colCnt].rowSpan = (rowPos - rowCnt) + 1;\n savedCell.rowSpan = (rowPos - rowCnt) + 1;\n }\n var cellType = (cell.type === 'sum' || cell.type === 'grand sum') ? cell.type : 'sum';\n this.pivotValues[rowPos][colCnt] = this.headerContent[rowPos][colCnt] = {\n type: cellType, formattedText: ((cell.type === 'sum' || cell.type === 'grand sum') ? cell.formattedText :\n (cell.formattedText + ' Total')),\n axis: 'column', level: -1, colIndex: colCnt, rowIndex: rowPos, valueSort: cell.valueSort\n };\n if (cell.valueSort && cell.valueSort[this.valueSortSettings.headerText]) {\n this.valueSortSettings.columnIndex = colCnt;\n }\n var isSpanned = false;\n if (cellType === 'grand sum') {\n this.pivotValues[rowCnt][colCnt].rowSpan = (rowPos - rowCnt) + 1;\n savedCell.rowSpan = (rowPos - rowCnt) + 1;\n }\n else if (this.pivotValues[rowCnt][colCnt].type !== 'sum' &&\n this.pivotValues[rowCnt][colCnt].isDrilled) {\n this.pivotValues[rowCnt + 1][colCnt].rowSpan = rowPos - rowCnt;\n isSpanned = true;\n }\n else {\n this.pivotValues[rowPos][colCnt].rowSpan = -1;\n }\n if (rowPos > (rowCnt + 1) && (this.pivotValues[rowCnt][colCnt].type === 'sum' ||\n isSpanned)) {\n this.pivotValues[rowPos][colCnt].rowSpan = -1;\n }\n rowPos++;\n }\n spanCnt = 1;\n }\n else {\n rowCells[colCnt] = this.headerContent[rowCnt][colCnt] = extend({}, savedCell, null, true);\n rowCells[colCnt].index = this.headerContent[rowCnt][colCnt].index = indexObj.index;\n rowCells[colCnt].indexObject = this.headerContent[rowCnt][colCnt].indexObject = indexObj.indexObject;\n spanCnt++;\n rowCells[colCnt].colSpan = spanCnt;\n rowCells[colCnt].colIndex = rowCells[colCnt].colIndex - (spanCnt - 1);\n }\n if (colCnt === 1 && savedCell) {\n savedCell.colSpan = spanCnt;\n savedCell.colIndex = savedCell.colIndex - (spanCnt - 1);\n }\n }\n }\n }\n };\n PivotEngine.prototype.getIndexedHeaders = function (keys, data, keyInd, position, axis, parentMember) {\n var hierarchy = [];\n var showPosition = this.enableValueSorting || this.allowValueFilter || !this.pageSettings;\n if (keys) {\n var rlen = keys.length;\n var decisionObj = {};\n var field = keys[keyInd].name;\n // let members: string[] = Object.keys(this.fieldList[field].members);\n var childrens = this.fieldList[field];\n var index = {};\n for (var pos = 0, lt = position.length; pos < lt; pos++) {\n var member = {};\n member.hasChild = keyInd < rlen - 1;\n member.level = keyInd;\n member.axis = axis;\n member.colSpan = 1;\n var memInd = this.indexMatrix[position[pos]][childrens.index];\n var headerValue = data[position[pos]][field];\n member.isDrilled = member.hasChild ? childrens.members[headerValue].isDrilled : false;\n var formattedValue = this.getFormattedValue(headerValue, field);\n member.actualText = formattedValue.actualText;\n member.formattedText = formattedValue.formattedText;\n //member.name = members[memInd];\n // member.type = member.hasChild ? 'All' : 'Single';\n var pindx = void 0;\n if (!(decisionObj && decisionObj[memInd])) {\n decisionObj[memInd] = { index: [], indexObject: {} };\n if (showPosition) {\n member.index = decisionObj[memInd].index = [position[pos]];\n decisionObj[memInd].indexObject[position[pos]] = position[pos];\n member.indexObject = decisionObj[memInd].indexObject;\n }\n else {\n index[memInd] = [position[pos]];\n }\n member.ordinal = memInd;\n member.valueSort = {};\n if (showPosition) {\n if (keyInd !== 0) {\n member.valueSort.levelName = parentMember + this.valueSortSettings.headerDelimiter + member.formattedText;\n member.valueSort[parentMember + this.valueSortSettings.headerDelimiter + member.formattedText] = 1;\n }\n else {\n member.valueSort[member.formattedText] = 1;\n member.valueSort.levelName = member.formattedText;\n }\n }\n //if (!member.members) {\n member.members = [];\n //}\n //let copyObj: AxisSet = Object.create(member);\n hierarchy.push(member);\n }\n else {\n if (showPosition) {\n decisionObj[memInd].index.push(position[pos]);\n decisionObj[memInd].indexObject[position[pos]] = position[pos];\n }\n else {\n index[memInd].push(position[pos]);\n }\n }\n }\n for (var iln = 0, ilt = hierarchy.length; iln < ilt; iln++) {\n if (axis === 'row') {\n this.rowCount += this.rowValuesLength;\n }\n else {\n this.columnCount += this.colValuesLength;\n }\n if (rlen - 1 > keyInd && hierarchy[iln].isDrilled) {\n if (showPosition) {\n var level = null;\n if (hierarchy[iln].valueSort && hierarchy[iln].valueSort.levelName) {\n level = hierarchy[iln].valueSort.levelName;\n }\n parentMember = (level || hierarchy[iln].formattedText);\n }\n var filterPosition = !showPosition ? index[hierarchy[iln].ordinal] : hierarchy[iln].index;\n hierarchy[iln].members = this.getIndexedHeaders(keys, data, keyInd + 1, filterPosition, axis, parentMember);\n }\n }\n if (this.enableSort) {\n return new DataManager(hierarchy).executeLocal(new Query().sortBy('actualText', childrens.sort.toLowerCase()));\n }\n else {\n return hierarchy;\n }\n }\n else {\n return hierarchy;\n }\n };\n PivotEngine.prototype.getOrderedIndex = function (headers) {\n var orderedIndex = {};\n for (var i = 0; i < headers.length; i++) {\n if (headers[i].type !== 'grand sum') {\n orderedIndex[headers[i].ordinal] = i;\n }\n }\n return orderedIndex;\n };\n PivotEngine.prototype.insertPosition = function (keys, data, keyInd, position, axis, parentMember, slicedHeaders) {\n var hierarchy = [];\n var orderedIndex = this.getOrderedIndex(slicedHeaders);\n if (keys) {\n var decisionObj = {};\n var field = keys[keyInd].name;\n var childrens = this.fieldList[field];\n for (var pos = 0, lt = position.length; pos < lt; pos++) {\n var member = {};\n var memInd = this.indexMatrix[position[pos]][childrens.index];\n var slicedHeader = slicedHeaders[orderedIndex[memInd]];\n var formattedValue = this.getFormattedValue(data[position[pos]][field], field);\n if (!(slicedHeader && slicedHeader.formattedText === formattedValue.formattedText)) {\n continue;\n }\n if (!(decisionObj && decisionObj[memInd])) {\n decisionObj[memInd] = { index: [], indexObject: {} };\n slicedHeader.index = decisionObj[memInd].index = [position[pos]];\n decisionObj[memInd].indexObject[position[pos]] = position[pos];\n slicedHeader.indexObject = decisionObj[memInd].indexObject;\n slicedHeader.valueSort = {};\n if (keyInd !== 0) {\n slicedHeader.valueSort.levelName = parentMember + this.valueSortSettings.headerDelimiter +\n slicedHeader.formattedText;\n slicedHeader.valueSort[parentMember + this.valueSortSettings.headerDelimiter +\n slicedHeader.formattedText] = 1;\n }\n else {\n slicedHeader.valueSort[slicedHeader.formattedText] = 1;\n slicedHeader.valueSort.levelName = slicedHeader.formattedText;\n }\n member.members = [];\n hierarchy.push(member);\n }\n else {\n decisionObj[memInd].index.push(position[pos]);\n decisionObj[memInd].indexObject[position[pos]] = position[pos];\n }\n }\n for (var iln = 0, ilt = hierarchy.length; iln < ilt; iln++) {\n if (slicedHeaders[iln].members.length > 0) {\n var level = null;\n if (slicedHeaders[iln].valueSort && slicedHeaders[iln].valueSort.levelName) {\n level = slicedHeaders[iln].valueSort.levelName;\n }\n parentMember = (level || slicedHeaders[iln].formattedText);\n /* tslint:disable:align */\n hierarchy[iln].members =\n this.insertPosition(keys, data, keyInd + 1, slicedHeaders[iln].index, axis, parentMember, slicedHeaders[iln].members);\n /* tslint:enable:align */\n }\n }\n return hierarchy;\n }\n else {\n return hierarchy;\n }\n };\n PivotEngine.prototype.insertTotalPosition = function (headers) {\n var summCell = headers[headers.length - 1];\n if (summCell && summCell.type === 'grand sum') {\n summCell.index = this.filterMembers;\n /* tslint:disable:typedef */\n var lt = void 0;\n for (var ln = 0, lt_1 = this.filterMembers.length; ln < lt_1; ln++) {\n summCell.indexObject[this.filterMembers[ln]] = this.filterMembers[ln];\n }\n /* tslint:enable:typedef */\n }\n return headers;\n };\n PivotEngine.prototype.calculatePagingValues = function () {\n var isValueSorting = ((this.valueSortSettings.sortOrder !== 'None' &&\n this.valueSortSettings.headerText !== '') || this.enableValueSorting) ? true : false;\n if (this.pageSettings) {\n if (this.valueAxis === 1) {\n this.rowValuesLength = this.values.length;\n }\n else {\n this.colValuesLength = this.values.length;\n }\n this.memberCnt = -this.rowValuesLength;\n this.rowStartPos = ((this.pageSettings.rowCurrentPage * this.pageSettings.rowSize) -\n (this.pageSettings.rowSize)) * this.rowValuesLength;\n var exactStartPos = (this.rowStartPos + (this.pageSettings.rowSize * 3 * this.rowValuesLength)) > this.rowCount ?\n (this.rowCount - (this.pageSettings.rowSize * 3 * this.rowValuesLength)) : this.rowStartPos;\n if (exactStartPos < 0) {\n exactStartPos = this.rowStartPos = 0;\n this.pageSettings.rowCurrentPage = 1;\n }\n this.rowFirstLvl = (this.rowStartPos - exactStartPos) % this.pageSettings.rowSize;\n this.rowStartPos = exactStartPos;\n this.endPos = this.rowStartPos + (this.pageSettings.rowSize * 3 * this.rowValuesLength);\n this.endPos = this.endPos > this.rowCount ? this.rowCount : this.endPos;\n this.rMembers = isValueSorting ? this.rMembers : this.performSlicing(this.rMembers, [], this.rowStartPos, 'row');\n this.memberCnt = -this.colValuesLength;\n this.pageInLimit = false;\n this.colHdrBufferCalculated = false;\n this.colStartPos = ((this.pageSettings.columnCurrentPage * this.pageSettings.columnSize) -\n (this.pageSettings.columnSize)) * this.colValuesLength;\n exactStartPos = (this.colStartPos + (this.pageSettings.columnSize * 3 * this.colValuesLength)) >\n this.columnCount ?\n (this.columnCount - (this.pageSettings.columnSize * 3 * this.colValuesLength)) : this.colStartPos;\n if (exactStartPos < 0) {\n exactStartPos = this.colStartPos = 0;\n this.pageSettings.columnCurrentPage = 1;\n }\n this.colFirstLvl = (this.colStartPos - exactStartPos) % this.pageSettings.columnSize;\n this.colStartPos = exactStartPos;\n if (!isValueSorting) {\n this.endPos = this.colStartPos + (this.pageSettings.columnSize * 3 * this.colValuesLength);\n this.endPos = this.endPos > this.columnCount ? this.columnCount : this.endPos;\n this.cMembers = this.performSlicing(this.cMembers, [], this.colStartPos, 'column');\n }\n this.memberCnt = -1;\n this.pageInLimit = false;\n }\n };\n PivotEngine.prototype.performSlicing = function (headers, slicedHeaders, startPos, axis) {\n var pos = 0;\n while (headers[pos]) {\n this.memberCnt += axis === 'column' ? this.colValuesLength : this.rowValuesLength;\n if (startPos <= this.memberCnt && this.endPos >= this.memberCnt && !this.pageInLimit) {\n if (axis === 'column') {\n this.colFirstLvl = this.colFirstLvl + headers[pos].level;\n }\n else {\n this.rowFirstLvl = this.rowFirstLvl + headers[pos].level;\n }\n this.pageInLimit = true;\n }\n if (this.pageInLimit) {\n if (this.endPos <= this.memberCnt) {\n if (axis === 'column') {\n if (headers[pos].members.length === 0) {\n if (this.colHdrBufferCalculated) {\n break;\n }\n this.colHdrBufferCalculated = true;\n this.endPos += (headers[pos].level * this.colValuesLength);\n }\n else if (this.colHdrBufferCalculated) {\n break;\n }\n }\n else {\n break;\n }\n }\n }\n var members = headers[pos].members;\n slicedHeaders.push(headers[pos]);\n if (headers[pos].members.length > 0) {\n slicedHeaders[slicedHeaders.length - 1].members = [];\n slicedHeaders[slicedHeaders.length - 1].members =\n this.performSlicing(members, [], startPos, axis);\n }\n if (!this.pageInLimit) {\n slicedHeaders.pop();\n }\n if (headers[pos].level === 0 && this.pageInLimit && this.endPos <= this.memberCnt) {\n break;\n }\n pos++;\n }\n return slicedHeaders;\n };\n PivotEngine.prototype.insertAllMember = function (set, filter, customText, axis) {\n var len = set.length;\n var showPosition = this.enableValueSorting || this.allowValueFilter || !this.pageSettings;\n customText = ' Total';\n set[len] = {\n hasChild: false,\n index: !showPosition ? [] : filter,\n level: 0,\n axis: axis,\n isDrilled: false,\n indexObject: {},\n members: [],\n formattedText: 'Grand' + customText,\n ordinal: len,\n type: 'grand sum',\n valueSort: {}\n };\n set[len].valueSort[set[len].formattedText] = 1;\n set[len].valueSort.levelName = set[len].formattedText;\n if (showPosition) {\n for (var ln = 0, lt = filter.length; ln < lt; ln++) {\n set[len].indexObject[filter[ln]] = filter[ln];\n }\n }\n if (axis === 'row') {\n this.rowCount += this.rowValuesLength;\n }\n else {\n this.columnCount += this.colValuesLength;\n }\n };\n PivotEngine.prototype.getTableData = function (rows, reformAxis, columns, tnum, data, vlt) {\n for (var rlt = rows.length, rln = 0; rln < rlt; rln++) {\n tnum = data.length;\n reformAxis[tnum] = rows[rln];\n var actCnt = tnum - Number(Object.keys(reformAxis)[0]);\n //let rplus: number = rln + 1;\n //let lvl: number = rows[rln].level;\n var isLeastNode = !reformAxis[tnum].members.length;\n rows[rln].colIndex = 0;\n rows[rln].rowIndex = tnum;\n if (!data[tnum]) {\n data[tnum] = [];\n this.valueContent[actCnt] = {};\n //data[tnum][0] = rows[rln].name;\n data[tnum][0] = this.valueContent[actCnt][0] = rows[rln];\n }\n else {\n // data[tnum][0] = rows[rln].name;\n data[tnum][0] = this.valueContent[actCnt][0] = rows[rln];\n }\n if (this.valueAxis && this.isMutiMeasures) {\n var hpos = tnum;\n var actpos = actCnt;\n for (var vln = 0; vln < vlt; vln++) {\n tnum++;\n actCnt++;\n var name_1 = this.values[vln].caption ? this.values[vln].caption : this.values[vln].name;\n var calObj = {\n axis: 'row',\n formattedText: name_1,\n level: 0,\n valueSort: {},\n colIndex: 0,\n rowIndex: tnum,\n type: 'value'\n };\n if (!data[tnum]) {\n data[tnum] = [];\n this.valueContent[actCnt] = {};\n data[tnum][0] = this.valueContent[actCnt][0] = calObj;\n }\n var vData = data[tnum][0].valueSort;\n vData[data[tnum - vln - 1][0].valueSort.levelName + this.valueSortSettings.headerDelimiter + name_1] = 1;\n vData.levelName = data[tnum - vln - 1][0].valueSort.levelName + this.valueSortSettings.headerDelimiter\n + name_1;\n for (var cln = 0, dln = 1, clt = columns.length; cln < clt; ++cln) {\n //for (let vln: number = 0; (!this.valueAxis && vln < vlt); vln++) {\n this.updateRowData(rows, columns, tnum, data, vln, rln, cln, dln, actCnt);\n dln = data[tnum].length;\n data[hpos][dln - 1] = this.valueContent[actpos][dln - 1] = {\n axis: 'value', actualText: '', colSpan: 1,\n colIndex: dln, formattedText: '', hasChild: false\n };\n // }\n }\n }\n this.recursiveRowData(rows, reformAxis, columns, tnum, data, vlt, isLeastNode, rln, vlt);\n }\n else {\n for (var cln = 0, dln = 1, clt = columns.length; cln < clt; ++cln) {\n for (var vln = 0; vln < vlt; vln++) {\n this.updateRowData(rows, columns, tnum, data, vln, rln, cln, dln, actCnt);\n dln = data[tnum].length;\n }\n }\n this.recursiveRowData(rows, reformAxis, columns, tnum, data, vlt, isLeastNode, rln, 0);\n }\n }\n /* for (let rlt: number = rows.length, rln: number = 0; rln < rlt; rln++) {\n if (!data[rln]) {\n data[rln] = [];\n data[rln][0] = rows[rln].name;\n } else {\n data[rln][0] = rows[rln].name;\n }\n for (let cln: number = 0, dln: number = 1, clt: number = columns.length; cln < clt; dln = ++cln) {\n data[rln][dln] = this.getAggregateValue(rows[rln].index, columns[cln].index, 11);\n }\n } */\n };\n PivotEngine.prototype.recursiveRowData = function (rows, reformAxis, columns, tnum, data, vlt, isLeastNode, rln, vln) {\n if (!isLeastNode) {\n this.getTableData(reformAxis[tnum - vln].members, reformAxis, columns, tnum, data, vlt);\n }\n reformAxis[tnum - vln].members = [];\n };\n PivotEngine.prototype.updateRowData = function (rows, columns, tnum, data, vln, rln, cln, dln, actCnt) {\n var mPos = this.fieldList[this.values[vln].name].index;\n var aggregate = this.fieldList[this.values[vln].name].aggregateType;\n var field = this.values[vln].name;\n var value = 0;\n // let isLeast: boolean = isLeastNode && (vln === vlt - 1);\n value = this.getAggregateValue(rows[rln].index, columns[cln].indexObject, mPos, aggregate);\n var isSum = rows[rln].hasChild || columns[cln].hasChild ||\n rows[rln].type === 'grand sum' || columns[cln].type === 'grand sum';\n var formattedText = this.getFormattedValue(value, field).formattedText;\n //dln = data[tnum].length;\n data[tnum][dln] = this.valueContent[actCnt][dln] = {\n axis: 'value', actualText: field,\n formattedText: formattedText, value: value, rowIndex: tnum, colIndex: dln, isSum: isSum\n };\n };\n PivotEngine.prototype.getHeaderData = function (axis, reformAxis, data, tnum, vcnt) {\n var rlt = axis.length;\n var colItmLn = this.columns.length;\n var sortText = this.valueSortSettings.headerText;\n //let valueLn: number = this.values.length;\n for (var rln = 0; rln < rlt; rln++) {\n if (axis[rln].members.length) {\n this.getHeaderData(axis[rln].members, reformAxis, data, tnum, vcnt);\n }\n tnum = reformAxis.length;\n reformAxis[tnum] = axis[rln];\n // let rplus: number = rln + 1;\n var lvl = axis[rln].level;\n axis[rln].rowIndex = lvl;\n axis[rln].colIndex = (tnum * vcnt) + vcnt;\n if (!data[lvl]) {\n data[lvl] = [];\n this.headerContent[lvl] = {};\n data[lvl][(tnum * vcnt) + vcnt] = this.headerContent[lvl][(tnum * vcnt) + vcnt] = axis[rln];\n }\n else {\n data[lvl][(tnum * vcnt) + vcnt] = this.headerContent[lvl][(tnum * vcnt) + vcnt] = axis[rln];\n }\n if (this.isMutiMeasures && !this.valueAxis) {\n for (var vln = 0; vln < vcnt; vln++) {\n var name_2 = this.values[vln].caption ? this.values[vln].caption : this.values[vln].name;\n var calObj = {\n axis: 'column',\n formattedText: name_2,\n level: 0,\n valueSort: {},\n colIndex: (tnum * vcnt) + 1 + vln,\n rowIndex: colItmLn\n };\n if (!data[colItmLn]) {\n data[colItmLn] = [];\n this.headerContent[colItmLn] = {};\n data[colItmLn][(tnum * vcnt) + 1 + vln] = this.headerContent[colItmLn][(tnum * vcnt) + 1 + vln] = calObj;\n }\n else {\n data[colItmLn][(tnum * vcnt) + 1 + vln] = this.headerContent[colItmLn][(tnum * vcnt) + 1 + vln] = calObj;\n }\n var vData = data[colItmLn][(tnum * vcnt) + 1 + vln].valueSort;\n vData[axis[rln].valueSort.levelName + this.valueSortSettings.headerDelimiter + name_2] = 1;\n vData.levelName = axis[rln].valueSort.levelName + this.valueSortSettings.headerDelimiter + name_2;\n if (vData && vData[sortText]) {\n this.valueSortSettings.columnIndex = (tnum * vcnt) + 1 + vln;\n }\n }\n }\n else if (axis[rln].valueSort && axis[rln].valueSort[sortText]) {\n this.valueSortSettings.columnIndex = (tnum * vcnt) + 1;\n }\n reformAxis[tnum].members = [];\n }\n };\n PivotEngine.prototype.getAggregateValue = function (rowIndex, columnIndex, value, type) {\n //rowIndex = rowIndex.sort();\n //columnIndex = columnIndex.sort();\n var rlt = rowIndex.length;\n //let clt: number = columnIndex.length;\n var mirror = {};\n var ri = 0;\n var ci = 0;\n var cellValue = 0;\n var avgCnt = 0;\n if (type && type.toLowerCase() === 'count') {\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n cellValue += 1;\n }\n ri++;\n }\n }\n else if (type && type.toLowerCase() === 'min') {\n var isFirst = true;\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n if (isFirst) {\n cellValue = this.valueMatrix[rowIndex[ri]][value];\n isFirst = false;\n }\n else {\n cellValue = this.valueMatrix[rowIndex[ri]][value] < cellValue ? this.valueMatrix[rowIndex[ri]][value] : cellValue;\n }\n }\n ri++;\n }\n }\n else if (type && type.toLowerCase() === 'max') {\n var isMaxFirst = true;\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n if (isMaxFirst) {\n cellValue = this.valueMatrix[rowIndex[ri]][value];\n isMaxFirst = false;\n }\n else {\n cellValue = this.valueMatrix[rowIndex[ri]][value] > cellValue ? this.valueMatrix[rowIndex[ri]][value] : cellValue;\n }\n }\n ri++;\n }\n }\n else if (type && type.toLowerCase() === 'calculatedfield') {\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n var calcField = this.calculatedFields[this.fields[value]];\n var actualFormula = calcField.formula;\n var aggregateField = {};\n if (this.calculatedFormulas[calcField.name]) {\n var calculatedFormulas = this.calculatedFormulas[calcField.name];\n for (var len = 0, lmt = calculatedFormulas.length; len < lmt; len++) {\n var aggregatedValue = calculatedFormulas[len];\n var value_1 = aggregateField[aggregatedValue.formula];\n if (value_1 === undefined) {\n var type_1 = aggregatedValue.type;\n value_1 = this.getAggregateValue(rowIndex, columnIndex, aggregatedValue.index, type_1);\n aggregateField[aggregatedValue.formula] = value_1;\n }\n actualFormula = (actualFormula).replace(aggregatedValue.formula, value_1.toString());\n }\n }\n cellValue = this.evaluate(actualFormula);\n JSON.parse(cellValue.toString());\n }\n ri++;\n }\n }\n else {\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n //let cIndx: number = isLeastLevel ? columnIndex.splice(columnIndex.indexOf(rowIndex[ri]), 1)[0] : rowIndex[ri];\n cellValue += this.valueMatrix[rowIndex[ri]][value];\n avgCnt++;\n }\n ri++;\n }\n }\n /* if (rlt > clt) {\n this.makeMirrorObject(rowIndex, mirror);\n while (columnIndex[ci] !== undefined) {\n if (mirror[columnIndex[ci]]) {\n let cIndx: number = isLeastLevel ? columnIndex.splice(ci, 1)[0] : columnIndex[ci];\n //rowIndex.splice\n sum += this.valueMatrix[cIndx][value];\n }\n ci++;\n }\n } else {\n this.makeMirrorObject(columnIndex, mirror);\n while (rowIndex[ri] !== undefined) {\n if (mirror[rowIndex[ri]]) {\n let cIndx: number = isLeastLevel ? columnIndex.splice(columnIndex.indexOf(rowIndex[ri]), 1)[0] : rowIndex[ri];\n sum += this.valueMatrix[rowIndex[ri]][value];\n }\n ri++;\n }\n } */\n return ((type && type.toLowerCase() === 'avg' && cellValue !== 0) ? (cellValue / avgCnt) : cellValue);\n };\n PivotEngine.prototype.getFormattedValue = function (value, fieldName) {\n var formattedValue = {\n formattedText: value !== undefined ? value === null ? 'null' : value.toString() : undefined,\n actualText: value !== undefined ? value === null ? 'null' : value : undefined\n };\n if (this.formatFields[fieldName] && value) {\n var formatSetting = extend({}, this.formatFields[fieldName], null, true);\n delete formatSetting.name;\n if (formatSetting.type) {\n formattedValue.formattedText = this.globalize.formatDate(new Date(value), formatSetting);\n }\n else {\n formattedValue.formattedText = this.globalize.formatNumber(value, formatSetting);\n }\n formattedValue.actualText = value;\n if (formatSetting.type && this.formatFields[fieldName].type === 'date') {\n formatSetting.format = 'yyyy/MM/dd/HH/mm/ss';\n formattedValue.actualText = this.globalize.formatDate(new Date(value), formatSetting);\n }\n }\n return formattedValue;\n };\n PivotEngine.prototype.powerFunction = function (formula) {\n if (formula.indexOf('^') > -1) {\n var items_1 = [];\n while (formula.indexOf('(') > -1) {\n formula = formula.replace(/(\\([^\\(\\)]*\\))/g, function (text, item) {\n items_1.push(item);\n return ('~' + (items_1.length - 1));\n });\n }\n items_1.push(formula);\n formula = '~' + (items_1.length - 1);\n while (formula.indexOf('~') > -1) {\n formula = formula.replace(new RegExp('~' + '(\\\\d+)', 'g'), function (text, index) {\n return items_1[index].replace(/(\\w*)\\^(\\w*)/g, 'Math.pow' + '($1,$2)');\n });\n }\n }\n return formula;\n };\n PivotEngine.prototype.evaluate = function (obj) {\n return Function('\"use strict\";return (' + obj + ')')();\n };\n ;\n return PivotEngine;\n}());\nexport { PivotEngine };\n","/**\n * Specifies pivot external events\n * @hidden\n */\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var enginePopulating = 'enginePopulating';\n/** @hidden */\nexport var enginePopulated = 'enginePopulated';\n/** @hidden */\nexport var beforePivotTableRender = 'beforePivotTableRender';\n/** @hidden */\nexport var afterPivotTableRender = 'afterPivotTableRender';\n/** @hidden */\nexport var beforeExport = 'beforeExport';\n/** @hidden */\nexport var excelHeaderQueryCellInfo = 'excelHeaderQueryCellInfo';\n/** @hidden */\nexport var pdfHeaderQueryCellInfo = 'pdfHeaderQueryCellInfo';\n/** @hidden */\nexport var excelQueryCellInfo = 'excelQueryCellInfo';\n/** @hidden */\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var headerCellInfo = 'headerCellInfo';\n/** @hidden */\nexport var resizing = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var cellClick = 'cellClick';\n/**\n * Specifies pivot internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var initSubComponent = 'init-groupingbar';\n/** @hidden */\nexport var treeViewUpdate = 'tree-view-update';\n/** @hidden */\nexport var pivotButtonUpdate = 'pivot-button-update';\n/** @hidden */\nexport var initCalculatedField = 'init-calculatedfield';\n/** @hidden */\nexport var click = 'click';\n","/**\n * CSS Constants\n * @hidden\n */\n/** @hidden */\nexport var ROOT = 'e-pivotfieldlist';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DEVICE = 'e-device';\n/** @hidden */\nexport var ICON = 'e-icons';\n/** @hidden */\nexport var ICON_DISABLE = 'e-disable';\n/** @hidden */\nexport var ICON_HIDDEN = 'e-hide';\n/** @hidden */\nexport var WRAPPER_CLASS = 'e-pivotfieldlist-wrapper';\n/** @hidden */\nexport var CONTAINER_CLASS = 'e-field-list-container';\n/** @hidden */\nexport var TOGGLE_FIELD_LIST_CLASS = 'e-toggle-field-list';\n/** @hidden */\nexport var STATIC_FIELD_LIST_CLASS = 'e-static';\n/** @hidden */\nexport var TOGGLE_SELECT_CLASS = 'e-select-table';\n/** @hidden */\nexport var FIELD_TABLE_CLASS = 'e-field-table';\n/** @hidden */\nexport var FIELD_LIST_CLASS = 'e-field-list';\n/** @hidden */\nexport var FIELD_LIST_TREE_CLASS = 'e-field-list-tree';\n/** @hidden */\nexport var FIELD_HEADER_CLASS = 'e-field-header';\n/** @hidden */\nexport var FIELD_LIST_TITLE_CLASS = 'e-field-list-title';\n/** @hidden */\nexport var FIELD_LIST_TITLE_CONTENT_CLASS = 'e-title-content';\n/** @hidden */\nexport var FIELD_LIST_FOOTER_CLASS = 'e-field-list-footer';\n/** @hidden */\nexport var CALCULATED_FIELD_CLASS = 'e-calculated-field';\n/** @hidden */\nexport var FLAT_CLASS = 'e-flat e-primary';\n/** @hidden */\nexport var OUTLINE_CLASS = 'e-outline';\n/** @hidden */\nexport var AXIS_TABLE_CLASS = 'e-axis-table';\n/** @hidden */\nexport var LEFT_AXIS_PANEL_CLASS = 'e-left-axis-fields';\n/** @hidden */\nexport var RIGHT_AXIS_PANEL_CLASS = 'e-right-axis-fields';\n/** @hidden */\nexport var AXIS_HEADER_CLASS = 'e-axis-header';\n/** @hidden */\nexport var AXIS_CONTENT_CLASS = 'e-axis-content';\n/** @hidden */\nexport var AXIS_PROMPT_CLASS = 'e-draggable-prompt';\n/** @hidden */\nexport var PIVOT_BUTTON_WRAPPER_CLASS = 'e-pvt-btn-div';\n/** @hidden */\nexport var PIVOT_BUTTON_CLASS = 'e-pivot-button';\n/** @hidden */\nexport var PIVOT_BUTTON_CONTENT_CLASS = 'e-content';\n/** @hidden */\nexport var DRAG_CLONE_CLASS = 'e-button-drag-clone';\n/** @hidden */\nexport var SORT_CLASS = 'e-sort';\n/** @hidden */\nexport var SORT_DESCEND_CLASS = 'e-descend';\n/** @hidden */\nexport var FILTER_COMMON_CLASS = 'e-btn-filter';\n/** @hidden */\nexport var FILTER_CLASS = 'e-pv-filter';\n/** @hidden */\nexport var FILTERED_CLASS = 'e-pv-filtered';\n/** @hidden */\nexport var REMOVE_CLASS = 'e-remove';\n/** @hidden */\nexport var DRAG_CLASS = 'e-drag';\n/** @hidden */\nexport var DROP_INDICATOR_CLASS = 'e-drop-indicator';\n/** @hidden */\nexport var INDICATOR_HOVER_CLASS = 'e-drop-hover';\n/** @hidden */\nexport var MEMBER_EDITOR_DIALOG_CLASS = 'e-member-editor-dialog';\n/** @hidden */\nexport var EDITOR_TREE_WRAPPER_CLASS = 'e-member-editor-wrapper';\n/** @hidden */\nexport var EDITOR_TREE_CONTAINER_CLASS = 'e-member-editor-container';\n/** @hidden */\nexport var CHECK_BOX_FRAME_CLASS = 'e-frame';\n/** @hidden */\nexport var NODE_CHECK_CLASS = 'e-check';\n/** @hidden */\nexport var NODE_STOP_CLASS = 'e-stop';\n/** @hidden */\nexport var OK_BUTTON_CLASS = 'e-ok-btn';\n/** @hidden */\nexport var CANCEL_BUTTON_CLASS = 'e-cancel-btn';\n/** @hidden */\nexport var ERROR_DIALOG_CLASS = 'e-pivot-error-dialog';\n/** @hidden */\nexport var DROPPABLE_CLASS = 'e-droppable';\n/** @hidden */\nexport var ROW_AXIS_CLASS = 'e-rows';\n/** @hidden */\nexport var COLUMN_AXIS_CLASS = 'e-columns';\n/** @hidden */\nexport var VALUE_AXIS_CLASS = 'e-values';\n/** @hidden */\nexport var FILTER_AXIS_CLASS = 'e-filters';\n/** @hidden */\nexport var GROUPING_BAR_CLASS = 'e-grouping-bar';\n/** @hidden */\nexport var VALUE_COLUMN_CLASS = 'e-value-column';\n/** @hidden */\nexport var GROUP_ROW_CLASS = 'e-group-rows';\n/** @hidden */\nexport var GROUP_COLUMN_CLASS = 'e-group-columns';\n/** @hidden */\nexport var GROUP_FLEX_CLASS = 'e-group-flex';\n/** @hidden */\nexport var GROUP_VALUE_CLASS = 'e-group-values';\n/** @hidden */\nexport var GROUP_FILTER_CLASS = 'e-group-filters';\n/** @hidden */\nexport var DIALOG_CLOSE_ICON_CLASS = 'e-icon-btn';\n/** @hidden */\nexport var NO_DRAG_CLASS = 'e-drag-restrict';\n/** @hidden */\nexport var SELECTED_NODE_CLASS = 'e-list-selected';\n/** @hidden */\nexport var TITLE_HEADER_CLASS = 'e-title-header';\n/** @hidden */\nexport var TITLE_CONTENT_CLASS = 'e-title-content';\n/** @hidden */\nexport var TEXT_CONTENT_CLASS = 'e-text-content';\n/** @hidden */\nexport var FOOTER_CONTENT_CLASS = 'e-footer-content';\n/** @hidden */\nexport var ADAPTIVE_CONTAINER_CLASS = 'e-adaptive-container';\n/** @hidden */\nexport var ADAPTIVE_FIELD_LIST_BUTTON_CLASS = 'e-field-list-btn';\n/** @hidden */\nexport var ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS = 'e-calculated-field-btn';\n/** @hidden */\nexport var BUTTON_SMALL_CLASS = 'e-small';\n/** @hidden */\nexport var BUTTON_ROUND_CLASS = 'e-round';\n/** @hidden */\nexport var ADD_ICON_CLASS = 'e-add-icon';\n/** @hidden */\nexport var BUTTON_FLAT_CLASS = 'e-flat';\n/** @hidden */\nexport var STATIC_CENTER_DIV_CLASS = 'e-center-div';\n/** @hidden */\nexport var STATIC_CENTER_HEADER_CLASS = 'e-center-title';\n/** @hidden */\nexport var ADAPTIVE_FIELD_LIST_DIALOG_CLASS = 'e-adaptive-field-list-dialog';\n/** @hidden */\nexport var LIST_TEXT_CLASS = 'e-list-text';\n/** @hidden */\nexport var LIST_SELECT_CLASS = 'e-selected-node';\n/** @hidden */\nexport var LIST_FRAME_CLASS = 'e-frame';\n/** @hidden */\nexport var EXCEL_FILTER_ICON_CLASS = 'e-excl-filter-icon';\n/** @hidden */\nexport var SELECTED_MENU_ICON_CLASS = 'e-selected-menu-icon';\n/** @hidden */\nexport var EMPTY_ICON_CLASS = 'e-emptyicon';\n/** @hidden */\nexport var SUB_MENU_CLASS = 'e-submenu';\n/** @hidden */\nexport var FOCUSED_CLASS = 'e-focused';\n/** @hidden */\nexport var SELECTED_CLASS = 'e-selected';\n/** @hidden */\nexport var MENU_ITEM_CLASS = 'e-menu-item';\n/** @hidden */\nexport var FILTER_MENU_OPTIONS_CLASS = 'e-filtermenu-options';\n/** @hidden */\nexport var SELECTED_OPTION_ICON_CLASS = 'e-selected-option-icon';\n/** @hidden */\nexport var FILTER_DIV_CONTENT_CLASS = 'e-filter-div-content';\n/** @hidden */\nexport var FILTER_TEXT_DIV_CLASS = 'e-filter-text-div';\n/** @hidden */\nexport var BETWEEN_TEXT_DIV_CLASS = 'e-between-text-div';\n/** @hidden */\nexport var SEPARATOR_DIV_CLASS = 'e-separator-div';\n/** @hidden */\nexport var FILTER_OPTION_WRAPPER_1_CLASS = 'e-filter-option-wrapper-1';\n/** @hidden */\nexport var FILTER_OPTION_WRAPPER_2_CLASS = 'e-filter-option-wrapper-2';\n/** @hidden */\nexport var FILTER_INPUT_DIV_1_CLASS = 'e-filter-input-div-1';\n/** @hidden */\nexport var FILTER_INPUT_DIV_2_CLASS = 'e-filter-input-div-2';\n/** @hidden */\nexport var VALUE_OPTIONS_CLASS = 'e-value-options';\n/** @hidden */\nexport var FILTER_OPERATOR_CLASS = 'e-filter-operator';\n/** @hidden */\nexport var COLLAPSE = 'e-collapse';\n/** @hidden */\nexport var EXPAND = 'e-expand';\n/** @hidden */\nexport var TABLE = 'e-table';\n/** @hidden */\nexport var BODY = 'e-body';\n/** @hidden */\nexport var PIVOTBODY = 'e-pivotbody';\n/** @hidden */\nexport var COLUMNSHEADER = 'e-columnsheader';\n/** @hidden */\nexport var ROWSHEADER = 'e-rowsheader';\n/** @hidden */\nexport var VALUESCONTENT = 'e-valuescontent';\n/** @hidden */\nexport var VALUECELL = 'e-valuecell';\n/** @hidden */\nexport var PIVOTHEADER = 'e-pivotheader';\n/** @hidden */\nexport var PGHEADERS = 'e-pgheaders';\n/** @hidden */\nexport var TOPHEADER = 'e-topheader';\n/** @hidden */\nexport var HEADERCELL = 'e-headercell';\n/** @hidden */\nexport var SUMMARY = 'e-summary';\n/** @hidden */\nexport var CELLVALUE = 'e-cellvalue';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var PIVOTTOOLTIP = 'e-pivottooltip';\n/** @hidden */\nexport var TOOLTIP_HEADER = 'e-tooltipheader';\n/** @hidden */\nexport var TOOLTIP_CONTENT = 'e-tooltipcontent';\n/** @hidden */\nexport var NEXTSPAN = 'e-nextspan';\n/** @hidden */\nexport var LASTSPAN = 'e-lastspan';\n/** @hidden */\nexport var EDITOR_SEARCH_WRAPPER_CLASS = 'e-editor-search-wrapper';\n/** @hidden */\nexport var EDITOR_SEARCH_CLASS = 'e-editor-search';\n/** @hidden */\nexport var SELECT_ALL_WRAPPER_CLASS = 'e-select-all-wrapper';\n/** @hidden */\nexport var SELECT_ALL_CLASS = 'e-select-all';\n/** @hidden */\nexport var PIVOTCALC = 'e-pivot-calc';\n/** @hidden */\nexport var CALCDIALOG = 'e-pivot-calc-dialog-div';\n/** @hidden */\nexport var CALCRADIO = 'e-pivot-calc-radio';\n/** @hidden */\nexport var CALCCHECK = 'e-pivot-calc-check';\n/** @hidden */\nexport var CALCINPUT = 'e-pivot-calc-input';\n/** @hidden */\nexport var CALCINPUTDIV = 'e-pivot-calc-input-div';\n/** @hidden */\nexport var CALCOUTERDIV = 'e-pivot-calc-outer-div';\n/** @hidden */\nexport var FLAT = 'e-flat';\n/** @hidden */\nexport var FORMAT = 'e-format';\n/** @hidden */\nexport var FORMULA = 'e-pivot-formula';\n/** @hidden */\nexport var TREEVIEW = 'e-pivot-treeview';\n/** @hidden */\nexport var TREEVIEWOUTER = 'e-pivot-treeview-outer';\n/** @hidden */\nexport var CALCCANCELBTN = 'e-pivot-cancel-button';\n/** @hidden */\nexport var CALCADDBTN = 'e-pivot-add-button';\n/** @hidden */\nexport var CALCOKBTN = 'e-pivot-ok-button';\n/** @hidden */\nexport var CALCACCORD = 'e-pivot-accord';\n/** @hidden */\nexport var CALCBUTTONDIV = 'e-pivot-button-div';\n/** @hidden */\nexport var AXIS_ICON_CLASS = 'e-axis';\n/** @hidden */\nexport var AXIS_ROW_CLASS = 'e-axis-row';\n/** @hidden */\nexport var AXIS_COLUMN_CLASS = 'e-axis-column';\n/** @hidden */\nexport var AXIS_VALUE_CLASS = 'e-axis-value';\n/** @hidden */\nexport var AXIS_FILTER_CLASS = 'e-axis-filter';\n/** @hidden */\nexport var AXIS_NAVIGATE_WRAPPER_CLASS = 'e-axis-nav-div';\n/** @hidden */\nexport var LEFT_NAVIGATE_WRAPPER_CLASS = 'e-left-nav-wrapper';\n/** @hidden */\nexport var RIGHT_NAVIGATE_WRAPPER_CLASS = 'e-right-nav-wrapper';\n/** @hidden */\nexport var LEFT_NAVIGATE_CLASS = 'e-left-nav-icon';\n/** @hidden */\nexport var RIGHT_NAVIGATE_CLASS = 'e-right-nav-icon';\n/** @hidden */\nexport var GRID_CLASS = 'e-grid';\n/** @hidden */\nexport var PIVOT_VIEW_CLASS = 'e-pivotview';\n/** @hidden */\nexport var PIVOT_ALL_FIELD_TITLE_CLASS = 'e-pivot-all-field-title';\n/** @hidden */\nexport var PIVOT_FORMULA_TITLE_CLASS = 'e-pivot-formula-title';\n/** @hidden */\nexport var PIVOT_CONTEXT_MENU_CLASS = 'e-pivot-context-menu';\n/** @hidden */\nexport var MENU_DISABLE = 'e-disabled';\n/** @hidden */\nexport var EMPTY_MEMBER_CLASS = 'e-member-prompt';\n/** @hidden */\nexport var CALC_EDIT = 'e-edit';\n/** @hidden */\nexport var CALC_EDITED = 'e-edited';\n/** @hidden */\nexport var EMPTY_FIELD = 'e-empty-field';\n/** @hidden */\nexport var FORMAT_DIALOG = 'e-pivot-formatting-dialog';\n/** @hidden */\nexport var FORMAT_CONDITION_BUTTON = 'e-format-condition-button';\n/** @hidden */\nexport var FORMAT_NEW = 'e-new-format';\n/** @hidden */\nexport var FORMAT_OUTER = 'e-format-outer-div';\n/** @hidden */\nexport var FORMAT_INNER = 'e-format-inner-div';\n/** @hidden */\nexport var FORMAT_TABLE = 'e-format-table';\n/** @hidden */\nexport var FORMAT_VALUE_LABEL = 'e-format-value-label';\n/** @hidden */\nexport var FORMAT_LABEL = 'e-format-label';\n/** @hidden */\nexport var INPUT = 'e-input';\n/** @hidden */\nexport var FORMAT_VALUE1 = 'e-format-value1';\n/** @hidden */\nexport var FORMAT_VALUE2 = 'e-format-value2';\n/** @hidden */\nexport var FORMAT_VALUE_SPAN = 'e-format-value-span';\n/** @hidden */\nexport var FORMAT_FONT_COLOR = 'e-format-font-color';\n/** @hidden */\nexport var FORMAT_BACK_COLOR = 'e-format-back-color';\n/** @hidden */\nexport var FORMAT_VALUE_PREVIEW = 'e-format-value-preview';\n/** @hidden */\nexport var FORMAT_COLOR_PICKER = 'e-format-color-picker';\n/** @hidden */\nexport var FORMAT_DELETE_ICON = 'e-format-delete-icon';\n/** @hidden */\nexport var FORMAT_DELETE_BUTTON = 'e-format-delete-button';\n/** @hidden */\nexport var SELECTED_COLOR = 'e-selected-color';\n/** @hidden */\nexport var DIALOG_HEADER = 'e-dlg-header';\n/** @hidden */\nexport var FORMAT_APPLY_BUTTON = 'e-format-apply-button';\n/** @hidden */\nexport var FORMAT_CANCEL_BUTTON = 'e-format-cancel-button';\n/** @hidden */\nexport var FORMAT_ROUND_BUTTON = 'e-small e-round';\n/** @hidden */\nexport var VIRTUALTRACK_DIV = 'e-virtualtrack';\n/** @hidden */\nexport var MOVABLECONTENT_DIV = 'e-movablecontent';\n/** @hidden */\nexport var FROZENCONTENT_DIV = 'e-frozencontent';\n/** @hidden */\nexport var MOVABLEHEADER_DIV = 'e-movableheader';\n/** @hidden */\nexport var FROZENHEADER_DIV = 'e-frozenheader';\n","import { Reorder, headerRefreshed } from '@syncfusion/ej2-grids';\nimport { Grid, Resize, ExcelExport, PdfExport, ContextMenu, Freeze } from '@syncfusion/ej2-grids';\nimport { Selection } from '@syncfusion/ej2-grids';\nimport { createElement, setStyleAttribute, remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\n/**\n * Module to render PivotGrid control\n */\n/** @hidden */\nvar Render = /** @class */ (function () {\n /** Constructor for render module */\n function Render(parent) {\n this.colPos = 0;\n this.lastSpan = 0;\n this.parent = parent;\n this.engine = parent.engineModule;\n this.gridSettings = parent.gridSettings;\n this.formatList = this.getFormatList();\n }\n /** @hidden */\n /* tslint:enable */\n Render.prototype.render = function () {\n var parent = this.parent;\n var engine = this.parent.engineModule;\n this.injectGridModules(parent);\n this.rowStartPos = this.getRowStartPos();\n if (this.parent.grid && this.parent.grid.element && this.parent.element.querySelector('.e-grid')) {\n if (!engine.isEngineUpdated) {\n engine.headerContent = this.frameDataSource('header');\n engine.valueContent = this.frameDataSource('value');\n }\n else {\n if (this.parent.enableValueSorting) {\n engine.valueContent = this.frameDataSource('value');\n }\n engine.isEngineUpdated = false;\n }\n /* tslint:disable */\n this.parent.grid.setProperties({\n columns: this.frameStackedHeaders(), dataSource: parent.dataSource.values.length > 0 && !this.engine.isEmptyData ? engine.valueContent :\n this.frameDataSource('value')\n }, true);\n /* tslint:enable */\n this.parent.grid.notify('datasource-modified', {});\n this.parent.grid.refreshColumns();\n var e = this.parent.element.querySelector('.e-movablecontent');\n e.querySelector('colGroup').innerHTML =\n this.parent.grid.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n this.parent.grid.width = this.calculateGridWidth();\n if (this.parent.height > (this.engine.valueContent.length * this.gridSettings.rowHeight)) {\n this.parent.grid.height = 'auto';\n }\n else {\n this.parent.grid.height = this.parent.height;\n }\n }\n else {\n this.parent.element.innerHTML = '';\n this.bindGrid(this.parent, (this.engine.isEmptyData ? true : false));\n this.parent.element.appendChild(createElement('div', { id: this.parent.element.id + '_grid' }));\n this.parent.grid.appendTo('#' + this.parent.element.id + '_grid');\n }\n /* tslint:disable */\n this.parent.grid.on(headerRefreshed, function () {\n if (this.parent.enableVirtualization) {\n var mHdr = this.parent.element.querySelector('.' + cls.MOVABLEHEADER_DIV);\n var mCont = this.parent.element.querySelector('.' + cls.MOVABLECONTENT_DIV);\n var vtr = mCont.querySelector('.' + cls.VIRTUALTRACK_DIV);\n this.parent.virtualHeaderDiv = mHdr.querySelector('.' + cls.VIRTUALTRACK_DIV);\n if (mHdr.querySelector('.' + cls.VIRTUALTRACK_DIV)) {\n remove(mHdr.querySelector('.' + cls.VIRTUALTRACK_DIV));\n }\n else {\n this.parent.virtualHeaderDiv = createElement('div', { className: cls.VIRTUALTRACK_DIV });\n }\n mHdr.appendChild(this.parent.virtualHeaderDiv);\n if (vtr) {\n setStyleAttribute(this.parent.virtualHeaderDiv, { height: 0, width: vtr.style.width });\n }\n setStyleAttribute(mHdr.querySelector('.e-table'), {\n transform: (mCont.querySelector('.e-table').style.transform).split(',')[0] + ',' + 0 + 'px)'\n });\n mHdr.scrollLeft = mCont.scrollLeft;\n }\n }, this);\n };\n /** @hidden */\n Render.prototype.bindGrid = function (parent, isEmpty) {\n var _this = this;\n this.injectGridModules(parent);\n this.parent.grid = new Grid({\n frozenColumns: 1,\n frozenRows: 0,\n dataSource: isEmpty ? this.frameEmptyData() : this.frameDataSource('value'),\n columns: isEmpty ? this.frameEmptyColumns() : this.frameStackedHeaders(),\n height: ((this.engine && (parent.height > (this.engine.valueContent.length * this.gridSettings.rowHeight)))\n || isEmpty) ? 'auto' : parent.height,\n width: isEmpty ? this.parent.width : this.calculateGridWidth(),\n locale: parent.locale,\n enableRtl: parent.enableRtl,\n allowExcelExport: parent.allowExcelExport,\n allowPdfExport: parent.allowPdfExport,\n allowResizing: this.gridSettings.allowResizing,\n allowTextWrap: this.gridSettings.allowTextWrap,\n allowReordering: this.gridSettings.allowReordering,\n allowSelection: this.gridSettings.allowSelection,\n contextMenuItems: this.gridSettings.contextMenuItems,\n selectedRowIndex: this.gridSettings.selectedRowIndex,\n selectionSettings: this.gridSettings.selectionSettings,\n printMode: this.gridSettings.printMode,\n rowHeight: this.gridSettings.rowHeight,\n gridLines: this.gridSettings.gridLines,\n contextMenuClick: this.gridSettings.contextMenuClick ? this.gridSettings.contextMenuClick.bind(this.parent) : undefined,\n contextMenuOpen: this.gridSettings.contextMenuOpen ? this.gridSettings.contextMenuOpen.bind(this.parent) : undefined,\n beforeCopy: this.gridSettings.beforeCopy ? this.gridSettings.beforeCopy.bind(this.parent) : undefined,\n beforePrint: this.gridSettings.beforePrint ? this.gridSettings.beforePrint.bind(this.parent) : undefined,\n printComplete: this.gridSettings.printComplete ? this.gridSettings.printComplete.bind(this.parent) : undefined,\n rowSelecting: this.gridSettings.rowSelecting ? this.gridSettings.rowSelecting.bind(this.parent) : undefined,\n rowSelected: this.gridSettings.rowSelected ? this.gridSettings.rowSelected.bind(this.parent) : undefined,\n rowDeselecting: this.gridSettings.rowDeselecting ? this.gridSettings.rowDeselecting.bind(this.parent) : undefined,\n rowDeselected: this.gridSettings.rowDeselected ? this.gridSettings.rowDeselected.bind(this.parent) : undefined,\n cellSelecting: this.gridSettings.cellSelecting ? this.gridSettings.cellSelecting.bind(this.parent) : undefined,\n cellSelected: this.gridSettings.cellSelected ? this.gridSettings.cellSelected.bind(this.parent) : undefined,\n cellDeselecting: this.gridSettings.cellDeselecting ? this.gridSettings.cellDeselecting.bind(this.parent) : undefined,\n cellDeselected: this.gridSettings.cellDeselected ? this.gridSettings.cellDeselected.bind(this.parent) : undefined,\n resizeStart: this.gridSettings.resizeStart ? this.gridSettings.resizeStart.bind(this.parent) : undefined,\n columnDragStart: this.gridSettings.columnDragStart ? this.gridSettings.columnDragStart.bind(this) : undefined,\n columnDrag: this.gridSettings.columnDrag ? this.gridSettings.columnDrag.bind(this) : undefined,\n columnDrop: this.gridSettings.columnDrop ? this.gridSettings.columnDrop.bind(this) : undefined,\n resizing: this.setGroupWidth.bind(this),\n resizeStop: this.onResizeStop.bind(this),\n queryCellInfo: function (args) {\n parent.renderModule.rowCellBoundEvent(args);\n },\n dataBound: function (args) {\n if (parent.element.querySelector('.e-firstcell')) {\n if (parent.enableRtl) {\n parent.element.querySelector('.e-firstcell').style.borderRight = 'none';\n }\n else {\n parent.element.querySelector('.e-firstcell').style.borderLeft = 'none';\n }\n }\n _this.parent.grid.widthService.setWidthToTable();\n parent.notify(events.contentReady, {});\n },\n headerCellInfo: function (args) {\n parent.renderModule.columnCellBoundEvent(args);\n },\n excelHeaderQueryCellInfo: function (args) {\n parent.renderModule.excelColumnEvent(args);\n },\n pdfHeaderQueryCellInfo: function (args) {\n parent.renderModule.pdfColumnEvent(args);\n },\n excelQueryCellInfo: function (args) {\n parent.renderModule.excelRowEvent(args);\n },\n pdfQueryCellInfo: function (args) {\n parent.renderModule.pdfRowEvent(args);\n }\n });\n };\n Render.prototype.injectGridModules = function (parent) {\n Grid.Inject(Freeze);\n if (parent.allowExcelExport) {\n Grid.Inject(ExcelExport);\n }\n if (parent.allowPdfExport) {\n Grid.Inject(PdfExport);\n }\n if (this.gridSettings.allowSelection) {\n Grid.Inject(Selection);\n }\n if (this.gridSettings.allowReordering) {\n Grid.Inject(Reorder);\n }\n if (this.gridSettings.allowResizing) {\n Grid.Inject(Resize);\n }\n if (this.gridSettings.contextMenuItems) {\n Grid.Inject(ContextMenu);\n }\n };\n /** @hidden */\n Render.prototype.updateGridSettings = function () {\n this.injectGridModules(this.parent);\n this.parent.grid.allowResizing = this.gridSettings.allowResizing;\n this.parent.grid.allowTextWrap = this.gridSettings.allowTextWrap;\n this.parent.grid.allowReordering = this.gridSettings.allowReordering;\n this.parent.grid.allowSelection = this.gridSettings.allowSelection;\n this.parent.grid.contextMenuItems = this.gridSettings.contextMenuItems;\n this.parent.grid.selectedRowIndex = this.gridSettings.selectedRowIndex;\n this.parent.grid.selectionSettings = this.gridSettings.selectionSettings;\n this.parent.grid.printMode = this.gridSettings.printMode;\n this.parent.grid.rowHeight = this.gridSettings.rowHeight;\n this.parent.grid.gridLines = this.gridSettings.gridLines;\n };\n Render.prototype.appendValueSortIcon = function (cell, tCell, rCnt, cCnt) {\n var vSort = this.parent.dataSource.valueSortSettings;\n var len = (cell.type === 'grand sum' && this.parent.dataSource.values.length === 1) ? 0 :\n this.parent.dataSource.values.length > 1 ? (this.parent.engineModule.headerContent.length - 1) :\n this.parent.dataSource.columns.length === 0 ? 0 : (this.parent.engineModule.headerContent.length - 1);\n var lock = (vSort && vSort.headerText) ? cell.valueSort.levelName === vSort.headerText : cCnt === vSort.columnIndex;\n if (vSort !== undefined && lock && rCnt === len && this.parent.dataSource.valueAxis === 'column') {\n if (tCell.querySelector('.e-sortfilterdiv')) {\n tCell.querySelector('.e-sortfilterdiv').classList.add(vSort.sortOrder === 'Descending' ? 'e-descending' : 'e-ascending');\n tCell.querySelector('.e-sortfilterdiv').classList.add(vSort.sortOrder === 'Descending' ?\n 'e-icon-descending' : 'e-icon-ascending');\n }\n else {\n tCell.appendChild(createElement('div', {\n className: (vSort.sortOrder === 'Descending' ?\n 'e-icon-descending e-icons e-descending e-sortfilterdiv' : 'e-icon-ascending e-icons e-ascending e-sortfilterdiv'),\n }));\n }\n if (!isNullOrUndefined(cell.hasChild) && cell.type !== 'grand sum' && tCell.querySelector('.e-expand') &&\n (tCell.querySelector('.e-icon-descending') || tCell.querySelector('.e-icon-ascending'))) {\n var element = (tCell.querySelector('.e-icon-descending') || tCell.querySelector('.e-icon-ascending'));\n setStyleAttribute(element, { 'padding-top': '12px' });\n }\n }\n return tCell;\n };\n Render.prototype.onResizeStop = function (args) {\n var column = args.column.field === '0.formattedText' ? '0.formattedText' :\n args.column.customAttributes.cell.valueSort.levelName;\n this.parent.resizeInfo[column] =\n Number(args.column.width.toString().split('px')[0]);\n this.parent.grid.headerModule.refreshUI();\n this.setGroupWidth(args);\n };\n Render.prototype.setGroupWidth = function (args) {\n if (this.parent.showGroupingBar && this.parent.groupingBarModule && this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {\n this.parent.groupingBarModule.refreshUI();\n if (this.parent.element.querySelector('.e-group-row').offsetWidth < 245) {\n args.cancel = true;\n var gridColumn = this.parent.grid.columns;\n if (gridColumn && gridColumn.length > 0) {\n gridColumn[0].width = 250;\n }\n this.parent.element.querySelector('.e-frozenheader').querySelector('col').style.width = '250px';\n this.parent.element.querySelector('.e-frozencontent').querySelector('col').style.width = '250px';\n }\n this.parent.element.querySelector('.e-group-values').style.width =\n this.parent.element.querySelector('.e-group-row').offsetWidth + 'px';\n this.parent.element.querySelector('.e-group-row').style.height =\n this.parent.element.querySelector('.e-headercontent').offsetHeight + 'px';\n }\n this.parent.trigger(args.e.type === 'touchend' || args.e.type === 'mouseup' ? events.resizeStop : events.resizing, args);\n };\n Render.prototype.rowCellBoundEvent = function (args) {\n var tCell = args.cell;\n if (tCell && this.engine) {\n tCell.setAttribute('index', (Number(tCell.getAttribute('index')) + this.engine.headerContent.length).toString());\n var cell = args.data[0];\n if (tCell.getAttribute('aria-colindex') === '0') {\n var isValueCell = cell.type && cell.type === 'value';\n tCell.innerText = '';\n var level = cell.level ? cell.level : (isValueCell ? (this.lastSpan + 1) : 0);\n do {\n if (level > 0) {\n tCell.appendChild(createElement('span', {\n className: level === 0 ? '' : cls.NEXTSPAN,\n }));\n }\n level--;\n } while (level > -1);\n level = cell.level ? cell.level : 0;\n this.lastSpan = !isValueCell ? level : this.lastSpan;\n if (!cell.hasChild && level > 0) {\n tCell.appendChild(createElement('span', {\n className: cls.LASTSPAN,\n }));\n }\n var fieldName = void 0;\n if ((this.parent.dataSource.rows.length > 0 &&\n (cell.valueSort ? Object.keys(cell.valueSort).length > 0 : true))) {\n fieldName = level > -1 ? this.parent.dataSource.rows[level].name : '';\n tCell.setAttribute('fieldname', fieldName);\n }\n var localizedText = cell.formattedText;\n if (cell.type) {\n if (cell.type === 'grand sum') {\n tCell.classList.add('e-gtot');\n localizedText = this.parent.localeObj.getConstant('grandTotal');\n }\n else {\n tCell.classList.add('e-stot');\n }\n }\n tCell.classList.add(cls.ROWSHEADER);\n if (cell.hasChild === true) {\n tCell.appendChild(createElement('div', {\n className: (cell.isDrilled === true ? cls.COLLAPSE : cls.EXPAND) + ' ' + cls.ICON,\n attrs: {\n 'title': cell.isDrilled === true ? this.parent.localeObj.getConstant('collapse') :\n this.parent.localeObj.getConstant('expand')\n }\n }));\n }\n tCell.appendChild(createElement('span', {\n className: cls.CELLVALUE,\n innerHTML: localizedText\n }));\n var vSort = this.parent.pivotView.dataSource.valueSortSettings;\n if (vSort && vSort.headerText && this.parent.dataSource.valueAxis === 'row'\n && this.parent.pivotValues[Number(tCell.getAttribute('index'))][0].valueSort.levelName) {\n if (this.parent.pivotValues[Number(tCell.getAttribute('index'))][0].valueSort.levelName\n === vSort.headerText) {\n var style = (tCell.querySelector('.e-expand') || tCell.querySelector('.e-collapse')) ? 'padding-top: 18px' :\n 'padding-top: 12px';\n tCell.appendChild(createElement('div', {\n className: (vSort.sortOrder === 'Descending' ?\n 'e-icon-descending e-icons e-descending e-sortfilterdiv' : 'e-icon-ascending e-icons e-ascending e-sortfilterdiv'),\n styles: style\n }));\n }\n }\n }\n else {\n var innerText = tCell.innerText.toString() === '0' ? '' : tCell.innerText;\n tCell.innerText = '';\n tCell.classList.add(cls.VALUESCONTENT);\n cell = args.data[Number(tCell.getAttribute('aria-colindex'))];\n if (cell.isSum) {\n tCell.classList.add(cls.SUMMARY);\n }\n if (cell.cssClass) {\n tCell.classList.add(cell.cssClass);\n }\n tCell.appendChild(createElement('span', {\n className: cls.CELLVALUE,\n innerHTML: innerText\n }));\n }\n }\n this.parent.trigger(events.queryCellInfo, args);\n };\n Render.prototype.columnCellBoundEvent = function (args) {\n if (args.cell.column && args.cell.column.customAttributes) {\n var cell = args.cell.column.customAttributes.cell;\n var tCell = args.node;\n if (cell) {\n var level = cell.level ? cell.level : 0;\n if ((cell.level === -1 && !cell.rowSpan && cell.rowIndex !== this.engine.headerContent.length - 1)\n || cell.rowSpan === -1) {\n args.node.style.display = 'none';\n }\n else if (cell.rowSpan > 1) {\n args.node.setAttribute('rowspan', cell.rowSpan.toString());\n args.node.setAttribute('aria-rowspan', cell.rowSpan.toString());\n if ((cell.rowIndex + cell.rowSpan) === this.engine.headerContent.length) {\n args.node.style.borderBottomWidth = '0px';\n }\n }\n args.node.setAttribute('aria-colindex', cell.colIndex.toString());\n args.node.setAttribute('index', cell.rowIndex.toString());\n var fieldName = void 0;\n if (!(this.parent.dataSource.values && this.parent.dataSource.valueAxis === 'column' && this.parent.dataSource.values.length > 1 &&\n (cell.rowIndex === this.engine.headerContent.length - 1)) && this.parent.dataSource.columns &&\n this.parent.dataSource.columns.length > 0) {\n fieldName = level > -1 ? this.parent.dataSource.columns[level].name : '';\n tCell.setAttribute('fieldname', fieldName);\n }\n if (cell.type) {\n tCell.classList.add(cell.type === 'grand sum' ? 'e-gtot' : 'e-stot');\n var localizedText = cell.type === 'grand sum' ? this.parent.localeObj.getConstant('grandTotal') :\n cell.formattedText.split('Total')[0] + this.parent.localeObj.getConstant('total');\n if (tCell.querySelector('.e-headertext') !== null) {\n tCell.querySelector('.e-headertext').innerText = localizedText;\n }\n else {\n tCell.querySelector('.e-stackedheadercelldiv').innerText = localizedText;\n }\n }\n tCell.classList.add(cls.COLUMNSHEADER);\n if (cell.hasChild === true) {\n var hdrdiv = tCell.querySelector('.e-headercelldiv');\n if (hdrdiv) {\n hdrdiv.style.height = 'auto';\n hdrdiv.style.lineHeight = 'normal';\n }\n var div = createElement('div', {\n className: (cell.isDrilled === true ? cls.COLLAPSE : cls.EXPAND) + ' ' + cls.ICON,\n attrs: {\n 'title': cell.isDrilled === true ? this.parent.localeObj.getConstant('collapse') :\n this.parent.localeObj.getConstant('expand')\n }\n });\n tCell.children[0].classList.add(cls.CELLVALUE);\n if (window.navigator.userAgent.indexOf('Edge') > -1 || window.navigator.userAgent.indexOf('Trident') > -1) {\n tCell.children[0].style.display = 'table';\n }\n else {\n tCell.children[0].style.display = 'block';\n }\n tCell.insertBefore(div, tCell.children[0]);\n }\n tCell = this.appendValueSortIcon(cell, tCell, cell.rowIndex, cell.colIndex);\n }\n }\n this.parent.trigger(events.headerCellInfo, args);\n };\n Render.prototype.getRowStartPos = function () {\n var pivotValues = this.parent.pivotValues;\n var rowPos;\n for (var rCnt = 0; rCnt < pivotValues.length; rCnt++) {\n if (pivotValues[rCnt] && pivotValues[rCnt][0] && pivotValues[rCnt][0].axis === 'row') {\n rowPos = rCnt;\n break;\n }\n }\n return rowPos;\n };\n Render.prototype.frameDataSource = function (type) {\n var dataContent = [];\n if (this.parent.dataSource.values.length > 0 && !this.engine.isEmptyData) {\n if ((this.parent.enableValueSorting) || !this.engine.isEngineUpdated) {\n var rowCnt = 0;\n var pivotValues = this.parent.pivotValues;\n var start = type === 'value' ? this.rowStartPos : 0;\n var end = type === 'value' ? pivotValues.length : this.rowStartPos;\n for (var rCnt = start; rCnt < end; rCnt++) {\n if (pivotValues[rCnt]) {\n rowCnt = type === 'header' ? rCnt : rowCnt;\n dataContent[rowCnt] = {};\n for (var cCnt = 0; cCnt < pivotValues[rCnt].length; cCnt++) {\n if (pivotValues[rCnt][cCnt]) {\n dataContent[rowCnt][cCnt] = pivotValues[rCnt][cCnt];\n }\n }\n rowCnt++;\n }\n }\n }\n else {\n dataContent = type === 'value' ? this.engine.valueContent : this.engine.headerContent;\n }\n }\n else {\n dataContent = this.frameEmptyData();\n }\n return dataContent;\n };\n Render.prototype.frameEmptyData = function () {\n var dataContent = [{\n 0: { formattedText: this.parent.localeObj.getConstant('grandTotal') },\n 1: { formattedText: this.parent.localeObj.getConstant('emptyData') }\n }];\n return dataContent;\n };\n Render.prototype.calculateColWidth = function (colCount) {\n var parWidth = isNaN(this.parent.width) ? (this.parent.width.toString().indexOf('%') > -1 ?\n ((parseFloat(this.parent.width.toString()) / 100) * this.parent.element.offsetWidth) : this.parent.element.offsetWidth) :\n Number(this.parent.width);\n if (this.parent.showGroupingBar && this.parent.groupingBarModule && this.parent.grid && this.parent.dataSource.rows.length > 0) {\n var gridColumn = this.parent.grid.columns;\n parWidth = parWidth - gridColumn[0].width;\n colCount = colCount - 1;\n }\n var colWidth = (colCount * this.gridSettings.columnWidth + 80) < parWidth ?\n (parWidth / colCount) : this.gridSettings.columnWidth;\n return colWidth;\n };\n Render.prototype.calculateGridWidth = function () {\n var colTotWidth = (this.engine.pivotValues[0].length * this.gridSettings.columnWidth + 80);\n var parWidth = this.parent.width;\n if (this.parent.width === 'auto' && this.parent.element.offsetWidth < colTotWidth) {\n parWidth = this.parent.element.offsetWidth;\n }\n return parWidth;\n };\n Render.prototype.frameStackedHeaders = function () {\n var integrateModel = [];\n if (this.parent.dataSource.values.length > 0 && !this.engine.isEmptyData) {\n var headerCnt = this.engine.headerContent.length;\n var headerSplit = [];\n var splitPos = [];\n var colWidth = this.calculateColWidth(this.engine.pivotValues[0].length);\n do {\n var columnModel = [];\n var actualCnt = 0;\n headerCnt--;\n var colField = this.engine.headerContent[headerCnt];\n if (colField) {\n for (var cCnt = 0; cCnt < Object.keys(colField).length + (colField[0] ? 0 : 1); cCnt++) {\n var colSpan = (colField[cCnt] && colField[cCnt].colSpan) ? colField[cCnt].colSpan : 1;\n var rowSpan = (colField[cCnt] && colField[cCnt].rowSpan) ? colField[cCnt].rowSpan : 1;\n var formattedText = colField[cCnt] ? (colField[cCnt].type === 'grand sum' ? this.parent.localeObj.getConstant('grandTotal') :\n (colField[cCnt].type === 'sum' ? colField[cCnt].formattedText.split('Total')[0] + this.parent.localeObj.getConstant('total') :\n colField[cCnt].formattedText)) : '';\n if (headerCnt === this.engine.headerContent.length - 1) {\n columnModel[actualCnt] = {\n field: (cCnt + '.formattedText'),\n headerText: formattedText,\n customAttributes: { 'cell': colField[cCnt] },\n width: colField[cCnt] ?\n this.setSavedWidth(colField[cCnt].valueSort.levelName, colWidth) : colWidth,\n minWidth: 30,\n format: cCnt === 0 ? '' : this.formatList[(cCnt - 1) % this.parent.dataSource.values.length]\n };\n }\n else if (headerSplit[cCnt]) {\n var tmpSpan = colSpan;\n var innerModel = [];\n var innerPos = cCnt;\n while (tmpSpan > 0) {\n if (columnModel[actualCnt]) {\n if (!integrateModel[splitPos[innerPos]]) {\n break;\n }\n innerModel.push(integrateModel[splitPos[innerPos]]);\n }\n else {\n columnModel[actualCnt] = {\n headerText: formattedText,\n customAttributes: { 'cell': colField[cCnt] },\n width: colField[cCnt] ?\n this.setSavedWidth(colField[cCnt].valueSort.levelName, colWidth) : colWidth,\n minWidth: 30\n };\n innerModel = [integrateModel[splitPos[innerPos]]];\n }\n tmpSpan = tmpSpan - headerSplit[innerPos];\n innerPos = innerPos + headerSplit[innerPos];\n }\n columnModel[actualCnt].columns = innerModel;\n }\n if (columnModel[actualCnt]) {\n columnModel[actualCnt].clipMode = this.gridSettings.clipMode;\n }\n headerSplit[cCnt] = colSpan;\n splitPos[cCnt] = actualCnt;\n actualCnt++;\n cCnt = cCnt + colSpan - 1;\n }\n }\n integrateModel = columnModel.length > 0 ? columnModel : integrateModel;\n } while (headerCnt > 0);\n integrateModel[0] = {\n field: (0 + '.formattedText'),\n width: this.setSavedWidth('0.formattedText', (this.parent.showGroupingBar && this.parent.groupingBarModule) ?\n colWidth < 250 ? 250 : colWidth : colWidth < 200 ? 200 : colWidth),\n minWidth: 30,\n headerText: '',\n allowReordering: false\n };\n }\n else {\n integrateModel = this.frameEmptyColumns();\n }\n return integrateModel;\n };\n Render.prototype.setSavedWidth = function (column, width) {\n width = this.parent.resizeInfo[column] ? this.parent.resizeInfo[column] : width;\n return width;\n };\n Render.prototype.frameEmptyColumns = function () {\n var columns = [];\n var colWidth = this.calculateColWidth(2);\n columns.push({ field: '0.formattedText', headerText: '', minWidth: 30, width: colWidth });\n columns.push({ field: '1.formattedText', headerText: this.parent.localeObj.getConstant('grandTotal'), minWidth: 30, width: colWidth });\n return columns;\n };\n /** @hidden */\n Render.prototype.getFormatList = function () {\n var formatArray = [];\n for (var vCnt = 0; vCnt < this.parent.dataSource.values.length; vCnt++) {\n var field = this.parent.dataSource.values[vCnt];\n if (this.parent.dataSource.formatSettings.length > 0) {\n var format = '';\n for (var fCnt = 0; fCnt < this.parent.dataSource.formatSettings.length; fCnt++) {\n var formatSettings = this.parent.dataSource.formatSettings[fCnt];\n if (field.name === formatSettings.name) {\n format = formatSettings.format;\n break;\n }\n else {\n continue;\n }\n }\n formatArray.push(format);\n }\n else {\n formatArray.push('N');\n }\n }\n return formatArray;\n };\n Render.prototype.excelColumnEvent = function (args) {\n args = this.exportHeaderEvent(args);\n this.parent.trigger(events.excelHeaderQueryCellInfo, args);\n };\n Render.prototype.pdfColumnEvent = function (args) {\n args = this.exportHeaderEvent(args);\n this.parent.trigger(events.pdfHeaderQueryCellInfo, args);\n };\n Render.prototype.excelRowEvent = function (args) {\n if (args.column.field === '0.formattedText') {\n this.colPos = 0;\n args.style = { hAlign: 'Left', indent: args.data[0].level * 2 };\n }\n else {\n this.colPos++;\n args.value = args.data[this.colPos].value || args.data[this.colPos].formattedText;\n }\n args = this.exportContentEvent(args);\n this.parent.trigger(events.excelQueryCellInfo, args);\n };\n /* tslint:disable:no-any */\n Render.prototype.pdfRowEvent = function (args) {\n args = this.exportContentEvent(args);\n if (args.column.field === '0.formattedText') {\n args.style = { paragraphIndent: args.data[0].level * 10 };\n }\n this.parent.trigger(events.pdfQueryCellInfo, args);\n };\n Render.prototype.exportHeaderEvent = function (args) {\n var rowSpan = 1;\n if (args.gridCell.column.customAttributes) {\n var cell = args.gridCell.column.customAttributes.cell;\n rowSpan = cell.rowSpan ? cell.rowSpan : 1;\n }\n else {\n rowSpan = Object.keys(this.engine.headerContent).length;\n }\n if (args.cell.rowSpan && args.cell.rowSpan !== rowSpan) {\n args.cell.rowSpan = rowSpan;\n }\n return args;\n };\n Render.prototype.exportContentEvent = function (args) {\n if (args.value === '0') {\n args.value = '';\n }\n args.value = args.data[Number(args.column.field.split('.formattedText')[0])].type === 'grand sum' ?\n this.parent.localeObj.getConstant('grandTotal') : args.value;\n return args;\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, Complex, Collection, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the fields in dataSource.\n */\nvar FieldOptions = /** @class */ (function (_super) {\n __extends(FieldOptions, _super);\n function FieldOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldOptions.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"caption\", void 0);\n __decorate([\n Property('Sum')\n ], FieldOptions.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"axis\", void 0);\n return FieldOptions;\n}(ChildProperty));\nexport { FieldOptions };\nvar FieldListFieldOptions = /** @class */ (function (_super) {\n __extends(FieldListFieldOptions, _super);\n function FieldListFieldOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return FieldListFieldOptions;\n}(FieldOptions));\nexport { FieldListFieldOptions };\n/**\n * Configures the style settings.\n */\nvar Style = /** @class */ (function (_super) {\n __extends(Style, _super);\n function Style() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Style.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property()\n ], Style.prototype, \"color\", void 0);\n __decorate([\n Property()\n ], Style.prototype, \"fontFamily\", void 0);\n __decorate([\n Property()\n ], Style.prototype, \"fontSize\", void 0);\n return Style;\n}(ChildProperty));\nexport { Style };\n/**\n * Configures the filter settings.\n */\nvar Filter = /** @class */ (function (_super) {\n __extends(Filter, _super);\n function Filter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Filter.prototype, \"name\", void 0);\n __decorate([\n Property('Include')\n ], Filter.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Filter.prototype, \"items\", void 0);\n __decorate([\n Property('DoesNotEquals')\n ], Filter.prototype, \"condition\", void 0);\n __decorate([\n Property()\n ], Filter.prototype, \"value1\", void 0);\n __decorate([\n Property()\n ], Filter.prototype, \"value2\", void 0);\n __decorate([\n Property()\n ], Filter.prototype, \"measure\", void 0);\n return Filter;\n}(ChildProperty));\nexport { Filter };\n/**\n * Configures the conditional format settings.\n */\nvar ConditionalFormatSettings = /** @class */ (function (_super) {\n __extends(ConditionalFormatSettings, _super);\n function ConditionalFormatSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"measure\", void 0);\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"label\", void 0);\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"conditions\", void 0);\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"value1\", void 0);\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"value2\", void 0);\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"style\", void 0);\n return ConditionalFormatSettings;\n}(ChildProperty));\nexport { ConditionalFormatSettings };\n/**\n * Configures the sort settings.\n */\nvar Sort = /** @class */ (function (_super) {\n __extends(Sort, _super);\n function Sort() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Sort.prototype, \"name\", void 0);\n __decorate([\n Property('Ascending')\n ], Sort.prototype, \"order\", void 0);\n return Sort;\n}(ChildProperty));\nexport { Sort };\n/**\n * Configures the format settings of value fields.\n */\nvar FormatSettings = /** @class */ (function (_super) {\n __extends(FormatSettings, _super);\n function FormatSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FormatSettings.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"minimumFractionDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"maximumFractionDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"minimumSignificantDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"maximumSignificantDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"useGrouping\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"skeleton\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"currency\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"minimumIntegerDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"format\", void 0);\n return FormatSettings;\n}(ChildProperty));\nexport { FormatSettings };\n/**\n * Configures the calculatedfields settings.\n */\nvar CalculatedFieldSettings = /** @class */ (function (_super) {\n __extends(CalculatedFieldSettings, _super);\n function CalculatedFieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], CalculatedFieldSettings.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], CalculatedFieldSettings.prototype, \"formula\", void 0);\n return CalculatedFieldSettings;\n}(ChildProperty));\nexport { CalculatedFieldSettings };\n/**\n * Configures drilled state of field members.\n */\nvar DrillOptions = /** @class */ (function (_super) {\n __extends(DrillOptions, _super);\n function DrillOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], DrillOptions.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], DrillOptions.prototype, \"items\", void 0);\n return DrillOptions;\n}(ChildProperty));\nexport { DrillOptions };\n/**\n * Configures value sort settings.\n */\nvar ValueSortSettings = /** @class */ (function (_super) {\n __extends(ValueSortSettings, _super);\n function ValueSortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ValueSortSettings.prototype, \"headerText\", void 0);\n __decorate([\n Property('.')\n ], ValueSortSettings.prototype, \"headerDelimiter\", void 0);\n __decorate([\n Property('None')\n ], ValueSortSettings.prototype, \"sortOrder\", void 0);\n return ValueSortSettings;\n}(ChildProperty));\nexport { ValueSortSettings };\n/**\n * Configures the settings of dataSource.\n */\nvar DataSource = /** @class */ (function (_super) {\n __extends(DataSource, _super);\n function DataSource() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], DataSource.prototype, \"data\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"rows\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"columns\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"values\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"filters\", void 0);\n __decorate([\n Property(false)\n ], DataSource.prototype, \"expandAll\", void 0);\n __decorate([\n Property('column')\n ], DataSource.prototype, \"valueAxis\", void 0);\n __decorate([\n Collection([], Filter)\n ], DataSource.prototype, \"filterSettings\", void 0);\n __decorate([\n Collection([], Sort)\n ], DataSource.prototype, \"sortSettings\", void 0);\n __decorate([\n Property(true)\n ], DataSource.prototype, \"enableSorting\", void 0);\n __decorate([\n Property(false)\n ], DataSource.prototype, \"allowLabelFilter\", void 0);\n __decorate([\n Property(false)\n ], DataSource.prototype, \"allowValueFilter\", void 0);\n __decorate([\n Property([])\n ], DataSource.prototype, \"formatSettings\", void 0);\n __decorate([\n Collection([], DrillOptions)\n ], DataSource.prototype, \"drilledMembers\", void 0);\n __decorate([\n Complex({}, ValueSortSettings)\n ], DataSource.prototype, \"valueSortSettings\", void 0);\n __decorate([\n Collection([], CalculatedFieldSettings)\n ], DataSource.prototype, \"calculatedFieldSettings\", void 0);\n __decorate([\n Collection([], ConditionalFormatSettings)\n ], DataSource.prototype, \"conditionalFormatSettings\", void 0);\n return DataSource;\n}(ChildProperty));\nexport { DataSource };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, Event } from '@syncfusion/ej2-base';\n/**\n * Represents Pivot widget model class.\n */\nvar GridSettings = /** @class */ (function (_super) {\n __extends(GridSettings, _super);\n function GridSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], GridSettings.prototype, \"gridLines\", void 0);\n __decorate([\n Property(false)\n ], GridSettings.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Property(false)\n ], GridSettings.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(true)\n ], GridSettings.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], GridSettings.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(110)\n ], GridSettings.prototype, \"columnWidth\", void 0);\n __decorate([\n Property('Ellipsis')\n ], GridSettings.prototype, \"clipMode\", void 0);\n __decorate([\n Property(false)\n ], GridSettings.prototype, \"allowSelection\", void 0);\n __decorate([\n Property(-1)\n ], GridSettings.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Property({ mode: 'Row', cellSelectionMode: 'Flow', type: 'Single' })\n ], GridSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property('AllPages')\n ], GridSettings.prototype, \"printMode\", void 0);\n __decorate([\n Property()\n ], GridSettings.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"columnDrop\", void 0);\n return GridSettings;\n}(ChildProperty));\nexport { GridSettings };\n","import { Workbook } from '@syncfusion/ej2-excel-export';\nimport * as events from '../../common/base/constant';\n/**\n * @hidden\n * `ExcelExport` module is used to handle the Excel export action.\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for the PivotGrid Excel Export module.\n * @hidden\n */\n function ExcelExport(parent) {\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'excelExport';\n };\n /**\n * Method to perform excel export.\n * @hidden\n */\n ExcelExport.prototype.exportToExcel = function (type) {\n /** Event trigerring */\n if (this.parent.enableVirtualization) {\n var pageSettings = this.parent.engineModule.pageSettings;\n this.parent.engineModule.pageSettings = null;\n this.parent.engineModule.generateGridData(this.parent.dataSource);\n this.parent.engineModule.pageSettings = pageSettings;\n }\n var args = {\n fileName: 'default', header: '', footer: '', dataCollections: [this.parent.engineModule.pivotValues]\n };\n this.parent.trigger(events.beforeExport, args);\n var fileName = args.fileName;\n var header = args.header;\n var footer = args.footer;\n var dataCollections = args.dataCollections;\n /** Fill data and export */\n /* tslint:disable-next-line:no-any */\n var workSheets = [];\n for (var dataColl = 0; dataColl < dataCollections.length; dataColl++) {\n var pivotValues = dataCollections[dataColl];\n var colLen = 0;\n var rowLen = pivotValues.length;\n var actualrCnt = 0;\n var formatList = this.parent.renderModule.getFormatList();\n var rows = [];\n var maxLevel = 0;\n for (var rCnt = 0; rCnt < rowLen; rCnt++) {\n if (pivotValues[rCnt]) {\n actualrCnt++;\n colLen = pivotValues[rCnt].length;\n var cells = [];\n for (var cCnt = 0; cCnt < colLen; cCnt++) {\n if (pivotValues[rCnt][cCnt]) {\n var pivotCell = pivotValues[rCnt][cCnt];\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n var cellValue = pivotCell.axis === 'value' ? pivotCell.value : pivotCell.formattedText;\n if (pivotCell.type === 'grand sum') {\n cellValue = this.parent.localeObj.getConstant('grandTotal');\n }\n else if (pivotCell.type === 'sum') {\n cellValue = cellValue.toString().replace('Total', this.parent.localeObj.getConstant('total'));\n }\n else {\n cellValue = cellValue === '0' ? '' : cellValue;\n }\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n cells.push({\n index: cCnt + 1, value: cellValue,\n colSpan: pivotCell.colSpan, rowSpan: pivotCell.rowSpan,\n });\n if (pivotCell.axis === 'value') {\n cells[cells.length - 1].style = {\n numberFormat: formatList[(cCnt - 1) % this.parent.dataSource.values.length],\n bold: false,\n wrapText: true\n };\n if (pivotCell.style) {\n cells[cells.length - 1].style.backColor = pivotCell.style.backgroundColor;\n cells[cells.length - 1].style.fontColor = pivotCell.style.color;\n cells[cells.length - 1].style.fontName = pivotCell.style.fontFamily;\n cells[cells.length - 1].style.fontSize = Number(pivotCell.style.fontSize.split('px')[0]);\n }\n }\n else {\n cells[cells.length - 1].style = {\n bold: true,\n vAlign: 'Center',\n wrapText: true,\n indent: cCnt === 1 ? pivotCell.level * 10 : 0\n };\n if (pivotCell.axis === 'row' && cCnt === 0) {\n cells[cells.length - 1].style.hAlign = 'Left';\n cells[cells.length - 1].style.indent = pivotCell.level * 2;\n maxLevel = pivotCell.level > maxLevel ? pivotCell.level : maxLevel;\n }\n }\n cells[cells.length - 1].style.borders = { color: '#000000', lineStyle: 'Thin' };\n }\n }\n cCnt = cCnt + (pivotCell.colSpan ? (pivotCell.colSpan - 1) : 0);\n }\n else {\n cells.push({\n index: cCnt + 1, value: '', colSpan: 1, rowSpan: 1,\n });\n }\n }\n rows.push({ index: actualrCnt, cells: cells });\n }\n }\n var columns = [];\n for (var cCnt = 0; cCnt < colLen; cCnt++) {\n columns.push({ index: cCnt + 1, width: 100 });\n }\n if (maxLevel > 0) {\n columns[0].width = 100 + (maxLevel * 20);\n }\n workSheets.push({ columns: columns, rows: rows });\n }\n var book = new Workbook({ worksheets: workSheets }, type === 'Excel' ? 'xlsx' : 'csv');\n book.save(fileName + (type === 'Excel' ? '.xlsx' : '.csv'));\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { PdfGrid, PdfPen, PointF, PdfDocument, PdfStandardFont, PdfFontFamily, PdfSolidBrush, PdfColor, PdfStringFormat, PdfVerticalAlignment, PdfTextAlignment, PdfFontStyle, PdfPageTemplateElement, RectangleF, PdfLayoutFormat } from '@syncfusion/ej2-pdf-export';\nimport * as events from '../../common/base/constant';\n/**\n * @hidden\n * `PDFExport` module is used to handle the PDF export action.\n */\nvar PDFExport = /** @class */ (function () {\n /**\n * Constructor for the PivotGrid PDF Export module.\n * @hidden\n */\n function PDFExport(parent) {\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n PDFExport.prototype.getModuleName = function () {\n return 'pdfExport';\n };\n /**\n * Method to perform pdf export.\n * @hidden\n */\n PDFExport.prototype.exportToPDF = function () {\n var eventParams = this.applyEvent();\n /** Fill data and export */\n var dataCollIndex = 0;\n var gridResult;\n var pivotValues = eventParams.args.dataCollections[dataCollIndex];\n var colLength = pivotValues && pivotValues.length > 0 ? pivotValues[0].length : 0;\n var integratedCnt = 0;\n do {\n var pdfGrid = new PdfGrid();\n if (pivotValues && pivotValues.length > 0) {\n pdfGrid.columns.add(pivotValues[0].length - integratedCnt >= 6 ? 6 : pivotValues[0].length - integratedCnt);\n var rowLen = pivotValues.length;\n var actualrCnt = 0;\n var maxLevel = 0;\n for (var rCnt = 0; rCnt < rowLen; rCnt++) {\n if (pivotValues[rCnt]) {\n var isColHeader = !(pivotValues[rCnt][0] && pivotValues[rCnt][0].axis === 'row');\n var colLen = pivotValues[rCnt].length > (integratedCnt + 6) ? (integratedCnt + 6) :\n pivotValues[rCnt].length;\n if (isColHeader) {\n pdfGrid.headers.add(1);\n }\n var pdfGridRow = !isColHeader ? pdfGrid.rows.addRow() : pdfGrid.headers.getHeader(actualrCnt);\n var localCnt = 0;\n var isEmptyRow = true;\n for (var cCnt = integratedCnt; cCnt < colLen; cCnt++) {\n var isValueCell = false;\n if (pivotValues[rCnt][cCnt]) {\n var pivotCell = pivotValues[rCnt][cCnt];\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n var cellValue = pivotCell.formattedText;\n cellValue = pivotCell.type === 'grand sum' ? this.parent.localeObj.getConstant('grandTotal') :\n (pivotCell.type === 'sum' ?\n cellValue.toString().replace('Total', this.parent.localeObj.getConstant('total')) :\n (cellValue === '0' ? '' : cellValue));\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n pdfGridRow.cells.getCell(localCnt).columnSpan = pivotCell.colSpan ?\n (6 - localCnt < pivotCell.colSpan ? 6 - localCnt : pivotCell.colSpan) : 1;\n if (isColHeader && pivotCell.rowSpan && pivotCell.rowSpan > 1) {\n pdfGridRow.cells.getCell(localCnt).rowSpan = pivotCell.rowSpan ? pivotCell.rowSpan : 1;\n }\n pdfGridRow.cells.getCell(localCnt).value = cellValue.toString();\n }\n if (cellValue !== '') {\n isEmptyRow = false;\n }\n }\n maxLevel = pivotCell.level > maxLevel && cCnt === 0 ? pivotCell.level : maxLevel;\n isValueCell = pivotCell.axis === 'value';\n cCnt = cCnt + (pdfGridRow.cells.getCell(localCnt).columnSpan ?\n (pdfGridRow.cells.getCell(localCnt).columnSpan - 1) : 0);\n localCnt = localCnt + (pdfGridRow.cells.getCell(localCnt).columnSpan ?\n (pdfGridRow.cells.getCell(localCnt).columnSpan - 1) : 0);\n if (pivotCell.style) {\n pdfGridRow = this.applyStyle(pdfGridRow, pivotCell, localCnt);\n }\n }\n else {\n pdfGridRow.cells.getCell(localCnt).value = '';\n if (cCnt === 0 && isColHeader && this.parent.dataSource.columns &&\n this.parent.dataSource.columns.length > 0) {\n pdfGrid.headers.getHeader(0).cells.getCell(0).rowSpan++;\n }\n }\n var stringFormat = new PdfStringFormat();\n stringFormat.paragraphIndent = (!isColHeader && cCnt === 0 && pivotValues[rCnt][cCnt]) ?\n pivotValues[rCnt][cCnt].level * 15 : 0;\n stringFormat.alignment = isValueCell ? PdfTextAlignment.Right : PdfTextAlignment.Left;\n stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n pdfGridRow.cells.getCell(localCnt).style.stringFormat = stringFormat;\n localCnt++;\n }\n if (isEmptyRow) {\n pdfGridRow.height = 16;\n }\n actualrCnt++;\n }\n }\n if (integratedCnt === 0) {\n pdfGrid.columns.getColumn(0).width = 100 + (maxLevel * 20);\n }\n }\n var layout = new PdfLayoutFormat();\n layout.paginateBounds = new RectangleF(0, 0, 0, 0);\n if (integratedCnt === 0 && this.parent.dataSource.columns && this.parent.dataSource.columns.length > 0) {\n pdfGrid.headers.getHeader(0).cells.getCell(0).rowSpan--;\n }\n if (gridResult) {\n gridResult = pdfGrid.draw(gridResult.page, new PointF(10, gridResult.bounds.y + gridResult.bounds.height + 10), layout);\n }\n else {\n gridResult = pdfGrid.draw(eventParams.page, new PointF(10, 20), layout);\n }\n integratedCnt = integratedCnt + 6;\n if (integratedCnt >= colLength && eventParams.args.dataCollections.length > (dataCollIndex + 1)) {\n dataCollIndex++;\n pivotValues = eventParams.args.dataCollections[dataCollIndex];\n colLength = pivotValues && pivotValues.length > 0 ? pivotValues[0].length : 0;\n integratedCnt = 0;\n }\n } while (integratedCnt < colLength);\n eventParams.document.save(eventParams.args.fileName + '.pdf');\n eventParams.document.destroy();\n };\n PDFExport.prototype.applyStyle = function (pdfGridRow, pivotCell, localCnt) {\n var color = this.parent.conditionalFormattingModule.hexToRgb(pivotCell.style.backgroundColor);\n var brush = new PdfSolidBrush(new PdfColor(color.r, color.g, color.b));\n pdfGridRow.cells.getCell(localCnt).style.backgroundBrush = brush;\n var size = Number(pivotCell.style.fontSize.split('px')[0]);\n var font = new PdfStandardFont(PdfFontFamily.TimesRoman, size, PdfFontStyle.Regular);\n pdfGridRow.cells.getCell(localCnt).style.font = font;\n color = this.parent.conditionalFormattingModule.hexToRgb(pivotCell.style.color);\n brush = new PdfSolidBrush(new PdfColor(color.r, color.g, color.b));\n pdfGridRow.cells.getCell(localCnt).style.textBrush = brush;\n return pdfGridRow;\n };\n PDFExport.prototype.applyEvent = function () {\n /** Event trigerring */\n if (this.parent.enableVirtualization) {\n var pageSettings = this.parent.engineModule.pageSettings;\n this.parent.engineModule.pageSettings = null;\n this.parent.engineModule.generateGridData(this.parent.dataSource);\n this.parent.engineModule.pageSettings = pageSettings;\n }\n var args = {\n fileName: 'default', header: '', footer: '', dataCollections: [this.parent.engineModule.pivotValues]\n };\n this.parent.trigger(events.beforeExport, args);\n var fileName = args.fileName;\n var header = args.header;\n var footer = args.footer;\n var dataCollections = args.dataCollections;\n var document = new PdfDocument();\n var page = document.pages.add();\n /** Header and Footer to be set */\n var font = new PdfStandardFont(PdfFontFamily.TimesRoman, 15, PdfFontStyle.Regular);\n var brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n var pen = new PdfPen(new PdfColor(0, 0, 0), .5);\n var headerTemplate = new PdfPageTemplateElement(new RectangleF(0, 0, page.graphics.clientSize.width, 20));\n headerTemplate.graphics.drawString(header, font, pen, brush, 0, 0, new PdfStringFormat(PdfTextAlignment.Center));\n document.template.top = headerTemplate;\n var footerTemplate = new PdfPageTemplateElement(new RectangleF(0, 0, page.graphics.clientSize.width, 20));\n footerTemplate.graphics.drawString(footer, font, pen, brush, 0, 0, new PdfStringFormat(PdfTextAlignment.Center));\n document.template.bottom = footerTemplate;\n return { document: document, page: page, args: args };\n };\n return PDFExport;\n}());\nexport { PDFExport };\n","import { KeyboardEvents, closest, addClass } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\n/**\n * PivotView Keyboard interaction\n */\n/** @hidden */\nvar KeyboardInteraction = /** @class */ (function () {\n /**\n * Constructor\n */\n function KeyboardInteraction(parent) {\n this.keyConfigs = {\n tab: 'tab',\n enter: 'enter',\n };\n this.parent = parent;\n this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;\n this.pivotViewKeyboardModule = new KeyboardEvents(this.parent.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n }\n KeyboardInteraction.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'tab':\n this.processTab(e);\n break;\n case 'enter':\n this.processEnter(e);\n break;\n }\n };\n KeyboardInteraction.prototype.getNextButton = function (target) {\n var allPivotButtons = [].slice.call(this.parent.element.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var nextElement = target;\n if (this.parent.grid.element.querySelector('.' + cls.PIVOT_BUTTON_CLASS)) {\n var len = allPivotButtons.length;\n for (var i = 0; i < len; i++) {\n if (allPivotButtons[i].getAttribute('data-uid') === target.getAttribute('data-uid')) {\n nextElement = allPivotButtons[i + 1] ? allPivotButtons[i + 1] : nextElement;\n break;\n }\n }\n }\n return nextElement;\n };\n KeyboardInteraction.prototype.processTab = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS)) {\n var gridFocus = this.parent.grid.serviceLocator.getService('focus');\n var nextButton = this.getNextButton(target);\n if (nextButton.getAttribute('data-uid') !== target.getAttribute('data-uid')) {\n gridFocus.currentInfo.skipAction = true;\n nextButton.focus();\n }\n else {\n gridFocus.focus();\n var element = gridFocus.getFocusedElement();\n addClass([element], ['e-focused', 'e-focus']);\n element.setAttribute('tabindex', '0');\n }\n e.preventDefault();\n return;\n }\n else if (!this.parent.showGroupingBar && this.parent.showFieldList) {\n if (target && closest(target, '.' + cls.TOGGLE_FIELD_LIST_CLASS)) {\n var gridFocus = this.parent.grid.serviceLocator.getService('focus');\n gridFocus.focus();\n var element = gridFocus.getFocusedElement();\n addClass([element], ['e-focused', 'e-focus']);\n element.setAttribute('tabindex', '0');\n }\n }\n else if (!this.parent.showGroupingBar && !this.parent.showFieldList) {\n if (target && closest(target, '.' + cls.PIVOT_VIEW_CLASS)) {\n var gridElement = closest(target, '.' + cls.PIVOT_VIEW_CLASS);\n var gridFocus = this.parent.grid.serviceLocator.getService('focus');\n var rows = [].slice.call(gridElement.getElementsByTagName('tr'));\n if (target.innerHTML === (rows[rows.length - 1]).lastChild.innerHTML) {\n gridFocus.currentInfo.skipAction = true;\n }\n else {\n gridFocus.focus();\n var element = gridFocus.getFocusedElement();\n addClass([element], ['e-focused', 'e-focus']);\n element.setAttribute('tabindex', '0');\n }\n }\n }\n };\n KeyboardInteraction.prototype.processEnter = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.GRID_CLASS) && target.querySelector('.' + cls.ICON)) {\n target.querySelector('.' + cls.ICON).click();\n e.preventDefault();\n return;\n }\n };\n /**\n * To destroy the keyboard module.\n * @return {void}\n * @private\n */\n KeyboardInteraction.prototype.destroy = function () {\n if (this.pivotViewKeyboardModule) {\n this.pivotViewKeyboardModule.destroy();\n }\n else {\n return;\n }\n };\n return KeyboardInteraction;\n}());\nexport { KeyboardInteraction };\n","import { createElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\n/**\n * Module to render Pivot button\n */\n/** @hidden */\nvar PivotContextMenu = /** @class */ (function () {\n /** Constructor for render module */\n function PivotContextMenu(parent) {\n this.parent = parent;\n this.parent.contextMenuModule = this;\n }\n /**\n * Initialize the pivot table rendering\n * @returns void\n * @private\n */\n PivotContextMenu.prototype.render = function () {\n this.renderContextMenu();\n };\n PivotContextMenu.prototype.renderContextMenu = function () {\n var menuItems = [\n { text: this.parent.localeObj.getConstant('addToFilter'), id: 'Context_Filters' },\n { text: this.parent.localeObj.getConstant('addToRow'), id: 'Context_Rows' },\n { text: this.parent.localeObj.getConstant('addToColumn'), id: 'Context_Columns' },\n { text: this.parent.localeObj.getConstant('addToValue'), id: 'Context_Values' }\n ];\n var menuOptions = {\n cssClass: cls.PIVOT_CONTEXT_MENU_CLASS,\n items: menuItems,\n enableRtl: this.parent.enableRtl,\n beforeOpen: this.onBeforeMenuOpen.bind(this),\n select: this.onSelectContextMenu.bind(this)\n };\n this.parent.element.appendChild(createElement('ul', {\n id: this.parent.element.id + '_PivotContextMenu'\n }));\n this.menuObj = new ContextMenu(menuOptions);\n this.menuObj.appendTo('#' + this.parent.element.id + '_PivotContextMenu');\n };\n PivotContextMenu.prototype.onBeforeMenuOpen = function (args) {\n var items = [].slice.call(args.element.querySelectorAll('li'));\n var fieldType = this.fieldElement.querySelector('.' + cls.PIVOT_BUTTON_CONTENT_CLASS).getAttribute('data-type');\n removeClass(items, cls.MENU_DISABLE);\n if (fieldType === 'CalculatedField') {\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n if (item.textContent !== this.parent.localeObj.getConstant('addToValue')) {\n addClass([item], cls.MENU_DISABLE);\n }\n }\n }\n };\n PivotContextMenu.prototype.onSelectContextMenu = function (menu) {\n if (menu.element.textContent !== null) {\n var fieldName = this.fieldElement.getAttribute('data-uid');\n var dropClass = menu.item.id.replace('Context_', '').toLowerCase();\n this.parent.pivotCommon.dataSourceUpdate.updateDataSource(fieldName, dropClass, -1);\n this.parent.updateDataSource(true);\n this.fieldElement = undefined;\n }\n };\n /**\n * To destroy the pivot button event listener\n * @return {void}\n * @hidden\n */\n PivotContextMenu.prototype.destroy = function () {\n if (!this.parent.isDestroyed) {\n return;\n }\n if (this.menuObj && !this.menuObj.isDestroyed) {\n this.menuObj.destroy();\n }\n else {\n return;\n }\n };\n return PivotContextMenu;\n}());\nexport { PivotContextMenu };\n","import { EventHandler, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { contentReady } from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/**\n * `VirtualScroll` module is used to handle scrolling behavior.\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for PivotView scrolling.\n * @hidden\n */\n function VirtualScroll(parent) {\n this.previousValues = { top: 0, left: 0 };\n this.parent = parent;\n this.addInternalEvents();\n }\n /**\n * It returns the Module name.\n * @returns string\n * @hidden\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualscroll';\n };\n VirtualScroll.prototype.addInternalEvents = function () {\n this.parent.on(contentReady, this.wireEvents, this);\n };\n VirtualScroll.prototype.wireEvents = function () {\n var mCont = this.parent.element.querySelector('.' + cls.MOVABLECONTENT_DIV);\n var fCont = this.parent.element.querySelector('.' + cls.FROZENCONTENT_DIV);\n var mHdr = this.parent.element.querySelector('.' + cls.MOVABLEHEADER_DIV);\n EventHandler.clearEvents(mCont);\n EventHandler.clearEvents(fCont);\n if (this.parent.engineModule) {\n EventHandler.add(mCont, 'scroll touchmove pointermove', this.onHorizondalScroll(mHdr, mCont, fCont), this);\n EventHandler.add(mCont, 'scroll wheel touchmove pointermove', this.onVerticalScroll(fCont, mCont), this);\n EventHandler.add(mCont, 'mouseup touchend', this.common(mHdr, mCont, fCont), this);\n }\n this.parent.grid.isPreventScrollEvent = true;\n };\n VirtualScroll.prototype.update = function (mHdr, mCont, top, left, e) {\n if (this.direction === 'vertical') {\n var rowValues = this.parent.dataSource.valueAxis === 'row' ? this.parent.dataSource.values.length : 1;\n var exactSize = (this.parent.pageSettings.rowSize * rowValues * this.parent.gridSettings.rowHeight);\n var section = Math.ceil(top / exactSize);\n if (this.parent.scrollPosObject.vertical === section) {\n hideSpinner(this.parent.element);\n return;\n }\n showSpinner(this.parent.element);\n this.parent.scrollPosObject.vertical = section;\n this.parent.engineModule.pageSettings.rowCurrentPage = section > 1 ? section : 1;\n this.parent.engineModule.generateGridData(this.parent.dataSource, this.parent.engineModule.headerCollection);\n this.parent.pivotValues = this.parent.engineModule.pivotValues;\n var exactPage = Math.ceil(this.parent.engineModule.rowStartPos / (this.parent.pageSettings.rowSize * rowValues));\n var pos = exactSize * exactPage -\n (this.parent.engineModule.rowFirstLvl * rowValues * this.parent.gridSettings.rowHeight);\n this.parent.scrollPosObject.verticalSection = pos;\n }\n else {\n var colValues = this.parent.dataSource.valueAxis === 'column' ? this.parent.dataSource.values.length : 1;\n var exactSize = (this.parent.pageSettings.columnSize *\n colValues * this.parent.gridSettings.columnWidth);\n var section = Math.ceil(left / exactSize);\n if (this.parent.scrollPosObject.horizontal === section) {\n hideSpinner(this.parent.element);\n return;\n }\n showSpinner(this.parent.element);\n this.parent.scrollPosObject.horizontal = section;\n this.parent.engineModule.pageSettings.columnCurrentPage = section > 1 ? section : 1;\n this.parent.engineModule.generateGridData(this.parent.dataSource, this.parent.engineModule.headerCollection);\n // let isLastPage: boolean =\n // (this.parent.engineModule.pivotValues[0] as IAxisSet[])[this.parent.engineModule.pivotValues[0].length - 1].type\n // === 'grand sum' && section > 0;\n this.parent.pivotValues = this.parent.engineModule.pivotValues;\n var exactPage = Math.ceil(this.parent.engineModule.colStartPos / (this.parent.pageSettings.columnSize * colValues));\n // let pos: number = isLastPage ?\n // ((left + mHdr.clientWidth) - ((mHdr.querySelector('.' + cls.TABLE) as HTMLElement).offsetWidth)) :\n // exactSize * exactPage - (this.parent.engineModule.colFirstLvl *\n // colValues * this.parent.gridSettings.columnWidth);\n var pos = exactSize * exactPage - (this.parent.engineModule.colFirstLvl *\n colValues * this.parent.gridSettings.columnWidth);\n this.parent.scrollPosObject.horizontalSection = pos;\n }\n };\n VirtualScroll.prototype.common = function (mHdr, mCont, fCont) {\n var _this = this;\n return function (e) {\n _this.update(mHdr, mCont, mCont.scrollTop, mCont.scrollLeft, e);\n };\n };\n VirtualScroll.prototype.onHorizondalScroll = function (mHdr, mCont, fCont) {\n var _this = this;\n /* tslint:disable-next-line */\n var timeOutObj;\n return function (e) {\n var left = mCont.scrollLeft;\n if (e.type === 'wheel' || e.type === 'touchmove') {\n clearTimeout(timeOutObj);\n /* tslint:disable */\n timeOutObj = setTimeout(function () {\n left = e.type === 'touchmove' ? mCont.scrollLeft : left;\n _this.update(mHdr, mCont, mCont.scrollTop, left, e);\n }, 300);\n }\n if (_this.previousValues.left === left) {\n fCont.scrollTop = mCont.scrollTop;\n return;\n }\n _this.direction = 'horizondal';\n var excessMove = _this.parent.scrollPosObject.horizontalSection > left ?\n -(_this.parent.scrollPosObject.horizontalSection - left) : ((left + mHdr.offsetWidth) -\n (_this.parent.scrollPosObject.horizontalSection + mCont.querySelector('.e-table').offsetWidth));\n if (_this.parent.scrollPosObject.horizontalSection > left ? true : excessMove > 1) {\n // showSpinner(this.parent.element);\n if (left > mHdr.clientWidth) {\n if (_this.parent.scrollPosObject.left < 1) {\n _this.parent.scrollPosObject.left = mHdr.clientWidth;\n }\n _this.parent.scrollPosObject.left = _this.parent.scrollPosObject.left - 50;\n excessMove = _this.parent.scrollPosObject.horizontalSection > left ?\n (excessMove - _this.parent.scrollPosObject.left) : (excessMove + _this.parent.scrollPosObject.left);\n }\n else {\n excessMove = -_this.parent.scrollPosObject.horizontalSection;\n }\n setStyleAttribute(mCont.querySelector('.e-table'), {\n transform: 'translate(' + (_this.parent.scrollPosObject.horizontalSection + excessMove) + 'px,' +\n _this.parent.scrollPosObject.verticalSection + 'px)'\n });\n setStyleAttribute(mHdr.querySelector('.e-table'), {\n transform: 'translate(' + (_this.parent.scrollPosObject.horizontalSection + excessMove) + 'px,' + 0 + 'px)'\n });\n _this.parent.scrollPosObject.horizontalSection = _this.parent.scrollPosObject.horizontalSection + excessMove;\n }\n _this.previousValues.left = left;\n mHdr.scrollLeft = mCont.scrollLeft;\n };\n };\n VirtualScroll.prototype.onVerticalScroll = function (fCont, mCont) {\n var _this = this;\n /* tslint:disable-next-line */\n var timeOutObj;\n return function (e) {\n var top = mCont.scrollTop;\n if (e.type === 'wheel' || e.type === 'touchmove') {\n clearTimeout(timeOutObj);\n /* tslint:disable */\n timeOutObj = setTimeout(function () {\n _this.update(null, mCont, mCont.scrollTop, mCont.scrollLeft, e);\n }, 300);\n }\n if (_this.previousValues.top === top) {\n return;\n }\n _this.direction = 'vertical';\n var excessMove = _this.parent.scrollPosObject.verticalSection > top ?\n -(_this.parent.scrollPosObject.verticalSection - top) : ((top + fCont.clientHeight) -\n (_this.parent.scrollPosObject.verticalSection + fCont.querySelector('.e-table').offsetHeight));\n if (_this.parent.scrollPosObject.verticalSection > top ? true : excessMove > 1) {\n // showSpinner(this.parent.element);\n if (top > fCont.clientHeight) {\n if (_this.parent.scrollPosObject.top < 1) {\n _this.parent.scrollPosObject.top = fCont.clientHeight;\n }\n _this.parent.scrollPosObject.top = _this.parent.scrollPosObject.top - 50;\n excessMove = _this.parent.scrollPosObject.verticalSection > top ?\n (excessMove - _this.parent.scrollPosObject.top) : (excessMove + _this.parent.scrollPosObject.top);\n }\n else {\n excessMove = -_this.parent.scrollPosObject.verticalSection;\n }\n setStyleAttribute(fCont.querySelector('.e-table'), {\n transform: 'translate(' + 0 + 'px,' + (_this.parent.scrollPosObject.verticalSection + excessMove) + 'px)'\n });\n setStyleAttribute(mCont.querySelector('.e-table'), {\n transform: 'translate(' + _this.parent.scrollPosObject.horizontalSection + 'px,' +\n (_this.parent.scrollPosObject.verticalSection + excessMove) + 'px)'\n });\n _this.parent.scrollPosObject.verticalSection = _this.parent.scrollPosObject.verticalSection + excessMove;\n }\n _this.previousValues.top = top;\n fCont.scrollTop = mCont.scrollTop;\n mCont.scrollTop = fCont.scrollTop;\n };\n };\n /**\n * @hidden\n */\n VirtualScroll.prototype.removeInternalEvents = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(contentReady, this.wireEvents);\n };\n /**\n * To destroy the virtualscrolling event listener\n * @return {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeInternalEvents();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, Browser, Event, Component, createElement, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { EventHandler, Complex, extend, ChildProperty } from '@syncfusion/ej2-base';\nimport { Internationalization, L10n, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { removeClass, addClass } from '@syncfusion/ej2-base';\nimport { PivotEngine } from '../../base/engine';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { Render } from '../renderer/render';\nimport { DataSource } from '../model/dataSource';\nimport { GridSettings } from '../model/gridsettings';\nimport { ExcelExport } from '../actions/excel-export';\nimport { PDFExport } from '../actions/pdf-export';\nimport { KeyboardInteraction } from '../actions/keyboard';\nimport { PivotContextMenu } from '../../common/popups/context-menu';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { VirtualScroll } from '../actions/virtualscroll';\n/**\n * It holds the settings of Grouping Bar.\n */\nvar GroupingBarSettings = /** @class */ (function (_super) {\n __extends(GroupingBarSettings, _super);\n function GroupingBarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], GroupingBarSettings.prototype, \"showFilterIcon\", void 0);\n __decorate([\n Property(true)\n ], GroupingBarSettings.prototype, \"showSortIcon\", void 0);\n __decorate([\n Property(true)\n ], GroupingBarSettings.prototype, \"showRemoveIcon\", void 0);\n return GroupingBarSettings;\n}(ChildProperty));\nexport { GroupingBarSettings };\n/**\n * Represents the PivotView component.\n * ```html\n *
    \n * \n * ```\n */\nvar PivotView = /** @class */ (function (_super) {\n __extends(PivotView, _super);\n /**\n * Constructor for creating the widget\n * @param {PivotViewModel} options?\n * @param {string|HTMLElement} element?\n */\n function PivotView(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @hidden */\n _this.resizeInfo = {};\n /** @hidden */\n _this.scrollPosObject = {\n vertical: 0, horizontal: 0, verticalSection: 0,\n horizontalSection: 0, top: 0, left: 0, scrollDirection: { direction: '', position: 0 }\n };\n _this.needsID = true;\n _this.pivotView = _this;\n return _this;\n }\n PivotView_1 = PivotView;\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n PivotView.prototype.requiredModules = function () {\n var modules = [];\n var isCommonRequire;\n if (this.allowConditionalFormatting) {\n modules.push({ args: [this], member: 'conditionalformatting' });\n }\n if (this.allowCalculatedField) {\n isCommonRequire = true;\n modules.push({ args: [this], member: 'calculatedfield' });\n }\n if (this.showGroupingBar) {\n isCommonRequire = true;\n modules.push({ args: [this], member: 'grouping' });\n }\n if (this.showFieldList) {\n isCommonRequire = true;\n modules.push({ args: [this], member: 'fieldlist' });\n }\n if (this.allowExcelExport) {\n modules.push({ args: [this], member: 'excelExport' });\n }\n if (this.allowPdfExport) {\n modules.push({ args: [this], member: 'pdfExport' });\n }\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'virtualscroll' });\n }\n if (isCommonRequire) {\n modules.push({ args: [this], member: 'common' });\n }\n return modules;\n };\n /**\n * For internal use only - Initializing internal properties;\n * @private\n */\n PivotView.prototype.preRender = function () {\n this.initProperties();\n this.isAdaptive = Browser.isDevice;\n this.toolTip = new Tooltip({\n target: 'td.e-valuescontent',\n showTipPointer: false,\n enableRtl: this.enableRtl,\n beforeRender: this.setToolTip.bind(this),\n beforeOpen: this.onBeforeTooltipOpen\n });\n this.keyboardModule = new KeyboardInteraction(this);\n this.contextMenuModule = new PivotContextMenu(this);\n this.toolTip.appendTo(this.element);\n this.globalize = new Internationalization(this.locale);\n this.defaultLocale = {\n grandTotal: 'Grand Total',\n total: 'Total',\n value: 'Value',\n noValue: 'No value',\n row: 'Row',\n column: 'Column',\n collapse: 'Collapse',\n expand: 'Expand',\n rowAxisPrompt: 'Drop row here',\n columnAxisPrompt: 'Drop column here',\n valueAxisPrompt: 'Drop value here',\n filterAxisPrompt: 'Drop filter here',\n filter: 'Filter',\n filtered: 'Filtered',\n sort: 'Sort',\n filters: 'Filters',\n rows: 'Rows',\n columns: 'Columns',\n values: 'Values',\n close: 'Close',\n cancel: 'Cancel',\n delete: 'Delete',\n calculatedField: 'Calculated Field',\n createCalculatedField: 'Create Calculated Field',\n fieldName: 'Enter the field name',\n error: 'Error',\n invalidFormula: 'Invalid formula.',\n dropText: 'Example: (\"Sum(Order_Count)\" + \"Sum(In_Stock)\") * 250',\n dropTextMobile: 'Add fields and edit formula here.',\n dropAction: 'Calculated field cannot be place in any other region except value axis.',\n alert: 'Alert',\n warning: 'Warning',\n ok: 'OK',\n search: 'Search',\n drag: 'Drag',\n remove: 'Remove',\n sum: 'Sum',\n average: 'Average',\n count: 'Count',\n min: 'Min',\n max: 'Max',\n allFields: 'All Fields',\n formula: 'Formula',\n addToRow: 'Add to Row',\n addToColumn: 'Add to Column',\n addToValue: 'Add to Value',\n addToFilter: 'Add to Filter',\n emptyData: 'No records to display',\n fieldExist: 'A field already exists in this name. Please enter a different name.',\n confirmText: 'A calculation field already exists in this name. Do you want to replace it?',\n noMatches: 'No matches',\n format: 'Summaries values by',\n edit: 'Edit',\n clear: 'Clear',\n formulaField: 'Drag and drop fields to formula',\n dragField: 'Drag field to formula',\n clearFilter: 'Clear',\n by: 'by',\n /* tslint:disable */\n member: 'Member',\n label: 'Label',\n date: 'Date',\n enterValue: 'Enter value',\n chooseDate: 'Enter date',\n Before: 'Before',\n BeforeOrEqualTo: 'Before Or Equal To',\n After: 'After',\n AfterOrEqualTo: 'After Or Equal To',\n labelTextContent: 'Show the items for which the label',\n dateTextContent: 'Show the items for which the date',\n valueTextContent: 'Show the items for which',\n Equals: 'Equals',\n DoesNotEquals: 'Does Not Equal',\n BeginWith: 'Begins With',\n DoesNotBeginWith: 'Does Not Begin With',\n EndsWith: 'Ends With',\n DoesNotEndsWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContains: 'Does Not Contain',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqualTo: 'Greater Than Or Equal To',\n LessThan: 'Less Than',\n LessThanOrEqualTo: 'Less Than Or Equal To',\n Between: 'Between',\n NotBetween: 'Not Between',\n And: 'and',\n /* tslint:enable */\n NotEquals: 'Not Equals',\n AllValues: 'All Values',\n conditionalFormating: 'Conditional Formatting',\n apply: 'APPLY',\n condition: 'Add Condition',\n formatLabel: 'Format'\n };\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.isDragging = false;\n this.addInternalEvents();\n };\n PivotView.prototype.onBeforeTooltipOpen = function (args) {\n args.element.classList.add('e-pivottooltipwrap');\n };\n PivotView.prototype.initProperties = function () {\n this.setProperties({ pivotValues: [] }, true);\n this.queryCellInfo = this.gridSettings.queryCellInfo ? this.gridSettings.queryCellInfo.bind(this) : undefined;\n this.headerCellInfo = this.gridSettings.headerCellInfo ? this.gridSettings.headerCellInfo.bind(this) : undefined;\n this.resizing = this.gridSettings.resizing ? this.gridSettings.resizing.bind(this) : undefined;\n this.resizeStop = this.gridSettings.resizeStop ? this.gridSettings.resizeStop.bind(this) : undefined;\n this.pdfHeaderQueryCellInfo = this.gridSettings.pdfHeaderQueryCellInfo ?\n this.gridSettings.pdfHeaderQueryCellInfo.bind(this) : undefined;\n this.pdfQueryCellInfo = this.gridSettings.pdfQueryCellInfo ? this.gridSettings.pdfQueryCellInfo.bind(this) : undefined;\n this.excelHeaderQueryCellInfo = this.gridSettings.excelHeaderQueryCellInfo ?\n this.gridSettings.excelHeaderQueryCellInfo.bind(this) : undefined;\n this.excelQueryCellInfo = this.gridSettings.excelQueryCellInfo ?\n this.gridSettings.excelQueryCellInfo.bind(this) : undefined;\n this.columnDragStart = this.gridSettings.columnDragStart ? this.gridSettings.columnDragStart.bind(this) : undefined;\n this.columnDrag = this.gridSettings.columnDrag ? this.gridSettings.columnDrag.bind(this) : undefined;\n this.columnDrop = this.gridSettings.columnDrop ? this.gridSettings.columnDrop.bind(this) : undefined;\n if (this.gridSettings.rowHeight === null) {\n this.setProperties({ gridSettings: { rowHeight: this.isAdaptive ? 48 : 36 } }, true);\n }\n if (this.enableVirtualization) {\n this.height = (typeof this.height === 'string' && this.height.indexOf('%') === -1) ?\n Number(this.height.split('px')[0]) : this.height;\n this.width = (typeof this.width === 'string' && this.width.indexOf('%') === -1) ?\n Number(this.width.split('px')[0]) : this.width;\n this.height = typeof this.height === 'number' ? this.height : 300;\n this.width = typeof this.width === 'number' ? this.width : 800;\n }\n if (this.enableVirtualization) {\n var colValues = 1;\n var rowValues = 1;\n if (this.dataSource.valueAxis === 'row') {\n rowValues = this.dataSource.values.length;\n }\n else {\n colValues = this.dataSource.values.length;\n }\n this.pageSettings = {\n columnCurrentPage: 1, rowCurrentPage: 1,\n columnSize: Math.ceil((Math.floor(this.width /\n this.gridSettings.columnWidth) - 1) / colValues),\n rowSize: Math.ceil(Math.floor(this.height / this.gridSettings.rowHeight) / rowValues)\n };\n if (this.allowExcelExport) {\n PivotView_1.Inject(ExcelExport);\n }\n if (this.allowPdfExport) {\n PivotView_1.Inject(PDFExport);\n }\n }\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @hidden\n */\n PivotView.prototype.render = function () {\n createSpinner({ target: this.element }, this.createElement);\n this.trigger(events.load, { 'dataSource': this.dataSource });\n this.updateClass();\n this.notify(events.initSubComponent, {});\n this.notify(events.initialLoad, {});\n if (this.isAdaptive) {\n this.contextMenuModule.render();\n }\n };\n /**\n * Register the internal events.\n * @returns void\n * @hidden\n */\n PivotView.prototype.addInternalEvents = function () {\n this.on(events.initialLoad, this.generateData, this);\n this.on(events.dataReady, this.renderPivotGrid, this);\n this.on(events.contentReady, this.onContentReady, this);\n };\n /**\n * De-Register the internal events.\n * @returns void\n * @hidden\n */\n PivotView.prototype.removeInternalEvents = function () {\n this.off(events.initialLoad, this.generateData);\n this.off(events.dataReady, this.renderPivotGrid);\n this.off(events.contentReady, this.onContentReady);\n };\n /**\n * Get the Pivot widget properties to be maintained in the persisted state.\n * @returns {string}\n * @hidden\n */\n PivotView.prototype.getPersistData = function () {\n var keyEntity = ['dataSource', 'pivotValues', 'gridSettings'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * It returns the Module name.\n * @returns string\n * @hidden\n */\n PivotView.prototype.getModuleName = function () {\n return 'pivotview';\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 * @returns {void}\n * @hidden\n */\n PivotView.prototype.copy = function (withHeader) {\n this.grid.copy(withHeader);\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-pivotgrid.html#printmode-string).\n * @returns {void}\n * @hidden\n */\n // public print(): void {\n // this.grid.print();\n // }\n /**\n * Called internally if any of the property value changed.\n * @returns void\n * @hidden\n */\n PivotView.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 'dataSource':\n this.notify(events.initialLoad, {});\n break;\n case 'pivotValues':\n this.notify(events.dataReady, {});\n break;\n case 'gridSettings':\n this.renderModule.updateGridSettings();\n break;\n case 'locale':\n case 'currencyCode':\n this.toolTip.destroy();\n _super.prototype.refresh.call(this);\n break;\n case 'enableRtl':\n this.notify(events.dataReady, {});\n this.updateClass();\n break;\n case 'groupingBarSettings':\n this.axisFieldModule.render();\n break;\n }\n }\n };\n /**\n * Render the UI section of PivotView.\n * @returns void\n * @hidden\n */\n PivotView.prototype.renderPivotGrid = function () {\n if (this.enableVirtualization) {\n this.virtualscrollModule = new VirtualScroll(this);\n }\n this.renderModule = new Render(this);\n this.renderModule.render();\n if (this.showFieldList || this.showGroupingBar) {\n this.notify(events.uiUpdate, this);\n }\n this.trigger(events.dataBound);\n if (this.allowConditionalFormatting) {\n this.applyFormatting();\n }\n };\n /**\n * Updates the PivotEngine using dataSource from Pivot View component.\n * @method updateDataSource\n * @return {void}\n * @hidden\n */\n PivotView.prototype.updateDataSource = function (isRefreshGrid) {\n showSpinner(this.element);\n this.engineModule = new PivotEngine(this.dataSource, '', this.engineModule.fieldList, this.pageSettings, this.enableValueSorting);\n var eventArgs = {\n dataSource: this.dataSource,\n pivotValues: this.engineModule.pivotValues\n };\n this.trigger(events.enginePopulated, eventArgs);\n this.pivotCommon.engineModule = this.engineModule;\n this.pivotCommon.dataSource = this.dataSource;\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.renderPivotGrid();\n };\n /**\n * To destroy the PivotView elements.\n * @returns void\n */\n PivotView.prototype.destroy = function () {\n this.removeInternalEvents();\n if (this.showGroupingBar && this.groupingBarModule) {\n this.groupingBarModule.destroy();\n }\n if (this.enableVirtualization && this.virtualscrollModule) {\n this.virtualscrollModule.destroy();\n }\n if (this.allowConditionalFormatting && this.conditionalFormattingModule) {\n this.conditionalFormattingModule.destroy();\n }\n if (this.isAdaptive && this.contextMenuModule) {\n this.contextMenuModule.destroy();\n }\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n this.unwireEvents();\n removeClass([this.element], cls.ROOT);\n removeClass([this.element], cls.RTL);\n removeClass([this.element], cls.DEVICE);\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n /**\n * Export Pivot widget 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 * @returns void\n */\n /* tslint:disable-next-line:no-any */\n PivotView.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n if (this.enableVirtualization) {\n this.excelExportModule.exportToExcel('Excel');\n }\n else {\n this.grid.excelExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n }\n };\n /**\n * Export PivotGrid 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 * @returns void\n */\n /* tslint:disable-next-line:no-any */\n PivotView.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n if (this.enableVirtualization) {\n this.excelExportModule.exportToExcel('CSV');\n }\n else {\n this.grid.csvExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n }\n };\n /**\n * Export Pivot widget 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 * @returns void\n */\n PivotView.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n if (this.enableVirtualization) {\n this.pdfExportModule.exportToPDF();\n }\n else {\n this.grid.pdfExport(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n }\n };\n PivotView.prototype.onDrill = function (target) {\n var fieldName = target.parentElement.getAttribute('fieldname');\n var memberName = this.engineModule.pivotValues[Number(target.parentElement.getAttribute('index'))][Number(target.parentElement.getAttribute('aria-colindex'))].actualText;\n this.engineModule.fieldList[fieldName].members[memberName].isDrilled =\n target.classList.contains(cls.COLLAPSE) ? false : true;\n var dataSource = extend({}, this.dataSource, null, true);\n var fieldAvail = false;\n var prop = dataSource.properties;\n if (!prop.drilledMembers || prop.drilledMembers.length === 0) {\n prop.drilledMembers = [{ name: fieldName, items: [memberName] }];\n }\n else {\n for (var fCnt = 0; fCnt < prop.drilledMembers.length; fCnt++) {\n var field = prop.drilledMembers[fCnt];\n if (field.name === fieldName) {\n fieldAvail = true;\n var memIndex = field.items.indexOf(memberName);\n if (memIndex > -1) {\n field.items.splice(memIndex, 1);\n }\n else {\n field.items.push(memberName);\n }\n }\n else {\n continue;\n }\n }\n if (!fieldAvail) {\n prop.drilledMembers.push({ name: fieldName, items: [memberName] });\n }\n }\n this.setProperties({ dataSource: { drilledMembers: prop.drilledMembers } }, true);\n showSpinner(this.element);\n this.engineModule.generateGridData(this.dataSource);\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.renderPivotGrid();\n };\n PivotView.prototype.onContentReady = function () {\n if (this.showFieldList) {\n hideSpinner(this.pivotFieldListModule.fieldListSpinnerElement);\n }\n else if (this.fieldListSpinnerElement) {\n hideSpinner(this.fieldListSpinnerElement);\n }\n if (!this.isEmptyGrid) {\n hideSpinner(this.element);\n }\n else {\n this.isEmptyGrid = false;\n }\n if (this.enableVirtualization && this.engineModule) {\n if (this.element.querySelector('.' + cls.MOVABLECONTENT_DIV) &&\n !this.element.querySelector('.' + cls.MOVABLECONTENT_DIV).querySelector('.' + cls.VIRTUALTRACK_DIV)) {\n this.virtualDiv = createElement('div', { className: cls.VIRTUALTRACK_DIV });\n this.element.querySelector('.' + cls.MOVABLECONTENT_DIV).appendChild(this.virtualDiv);\n }\n if (this.element.querySelector('.' + cls.MOVABLEHEADER_DIV) &&\n !this.element.querySelector('.' + cls.MOVABLEHEADER_DIV).querySelector('.' + cls.VIRTUALTRACK_DIV)) {\n this.virtualHeaderDiv = createElement('div', { className: cls.VIRTUALTRACK_DIV });\n this.element.querySelector('.' + cls.MOVABLEHEADER_DIV).appendChild(this.virtualHeaderDiv);\n }\n else {\n this.virtualHeaderDiv =\n this.element.querySelector('.' + cls.MOVABLEHEADER_DIV).querySelector('.' + cls.VIRTUALTRACK_DIV);\n }\n var movableTable = this.element.querySelector('.' + cls.MOVABLECONTENT_DIV).querySelector('.e-table');\n var vHeight = (this.gridSettings.rowHeight * this.engineModule.rowCount + 0.1 - movableTable.clientHeight);\n var vWidth = (this.gridSettings.columnWidth * this.engineModule.columnCount\n - this.grid.columns[0].width);\n setStyleAttribute(this.virtualDiv, {\n height: (vHeight > 0.1 ? vHeight : 0.1) + 'px',\n width: (vWidth > 0.1 ? vWidth : 0.1) + 'px'\n });\n setStyleAttribute(this.virtualHeaderDiv, {\n height: 0, width: (vWidth > 0.1 ? vWidth : 0.1) + 'px'\n });\n var mCnt = this.element.querySelector('.' + cls.MOVABLECONTENT_DIV);\n var fCnt = this.element.querySelector('.' + cls.FROZENCONTENT_DIV);\n var mHdr = this.element.querySelector('.' + cls.MOVABLEHEADER_DIV);\n setStyleAttribute(fCnt.querySelector('.e-table'), {\n transform: 'translate(' + 0 + 'px,' + this.scrollPosObject.verticalSection + 'px)'\n });\n setStyleAttribute(mCnt.querySelector('.e-table'), {\n transform: 'translate(' + this.scrollPosObject.horizontalSection + 'px,' + this.scrollPosObject.verticalSection + 'px)'\n });\n setStyleAttribute(mHdr.querySelector('.e-table'), {\n transform: 'translate(' + this.scrollPosObject.horizontalSection + 'px,' + 0 + 'px)'\n });\n }\n this.element.style.minWidth = '500px';\n this.grid.element.style.minWidth = '500px';\n this.unwireEvents();\n this.wireEvents();\n };\n PivotView.prototype.setToolTip = function (args) {\n var colIndex = Number(args.target.getAttribute('aria-colindex'));\n var rowIndex = Number(args.target.getAttribute('index'));\n var cell = this.pivotValues[rowIndex][colIndex];\n this.toolTip.content = '';\n if (cell) {\n this.toolTip.content = '

    ' +\n this.localeObj.getConstant('row') + ':

    ' +\n this.getRowText(rowIndex, 0) +\n '


    ' +\n this.localeObj.getConstant('column') + ':

    ' +\n this.getColText(0, colIndex, rowIndex) + '


    ' + '

    ' +\n this.localeObj.getConstant('value') + ':

    ' +\n ((cell.formattedText === '0' ? this.localeObj.getConstant('noValue') : cell.formattedText)) + '

    ';\n }\n else {\n args.cancel = true;\n }\n };\n PivotView.prototype.getRowText = function (rowIndex, colIndex) {\n var cell = this.pivotValues[rowIndex][colIndex];\n var level = cell.level;\n var rowText = cell.type === 'grand sum' ? this.localeObj.getConstant('grandTotal') : cell.formattedText;\n while (level > 0) {\n rowIndex--;\n cell = this.pivotValues[rowIndex][colIndex];\n if (level > cell.level) {\n rowText = rowText + ' - ' + (cell.type === 'grand sum' ? this.localeObj.getConstant('grandTotal') :\n cell.formattedText);\n level = cell.level;\n }\n }\n return rowText.split(' - ').reverse().join(' - ');\n };\n PivotView.prototype.getColText = function (rowIndex, colIndex, limit) {\n var cell = this.pivotValues[0][colIndex];\n var axis = cell.axis;\n var colText = cell.type === 'grand sum' ? this.localeObj.getConstant('grandTotal') : cell.formattedText;\n while (axis !== 'value' && limit > rowIndex) {\n rowIndex++;\n if (this.pivotValues[rowIndex]) {\n cell = this.pivotValues[rowIndex][colIndex];\n axis = cell.axis;\n if (cell.type !== 'sum' && cell.type !== 'grand sum' && axis !== 'value') {\n colText = colText + ' - ' + cell.formattedText;\n }\n }\n }\n return colText;\n };\n PivotView.prototype.updateClass = function () {\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 };\n PivotView.prototype.wireEvents = function () {\n EventHandler.add(this.element, this.isAdaptive ? 'touchend' : 'click', this.mouseClickHandler, this);\n window.addEventListener('resize', this.onWindowResize.bind(this), true);\n };\n PivotView.prototype.mouseClickHandler = function (e) {\n var target = e.target;\n if ((target.classList.contains('e-headercell') ||\n target.classList.contains('e-headercelldiv') ||\n target.classList.contains('e-rowsheader') ||\n target.classList.contains('e-rowcell') ||\n target.classList.contains('e-stackedheadercelldiv') ||\n target.classList.contains('e-headertext') ||\n target.classList.contains('e-ascending') ||\n target.classList.contains('e-descending')) && this.enableValueSorting) {\n var ele = null;\n if (target.classList.contains('e-headercell') || target.classList.contains('e-rowsheader')\n || target.classList.contains('e-rowcell')) {\n ele = target;\n }\n else if (target.classList.contains('e-stackedheadercelldiv') || target.classList.contains('e-headercelldiv') ||\n target.classList.contains('e-ascending') || target.classList.contains('e-descending')) {\n ele = target.parentElement;\n }\n else if (target.classList.contains('e-headertext')) {\n ele = target.parentElement.parentElement;\n }\n this.CellClicked(target);\n if ((ele.parentElement.parentElement.parentElement.parentElement.classList.contains('e-movableheader')\n && this.dataSource.valueAxis === 'column') || (ele.parentElement.classList.contains('e-row') &&\n this.dataSource.valueAxis === 'row')) {\n /* tslint:disable */\n var colIndex = Number(ele.getAttribute('aria-colindex'));\n var rowIndex = Number(ele.getAttribute('index'));\n if (this.dataSource.valueAxis === 'row' && this.dataSource.values.length > 1) {\n rowIndex = this.pivotValues[rowIndex][colIndex].type === 'value' ? rowIndex : (rowIndex + 1);\n }\n else if (this.dataSource.valueAxis === 'column' && this.dataSource.values.length > 1) {\n colIndex = (Number(ele.getAttribute('aria-colindex')) + Number(ele.getAttribute('aria-colspan')) - 1);\n rowIndex = this.engineModule.headerContent.length - 1;\n }\n this.setProperties({\n dataSource: {\n valueSortSettings: {\n columnIndex: (Number(ele.getAttribute('aria-colindex')) +\n Number(ele.getAttribute('aria-colspan')) - 1),\n sortOrder: this.dataSource.valueSortSettings.sortOrder === 'Descending' ? 'Ascending' : 'Descending',\n headerText: this.pivotValues[rowIndex][colIndex].valueSort.levelName,\n headerDelimiter: this.dataSource.valueSortSettings.headerDelimiter ?\n this.dataSource.valueSortSettings.headerDelimiter : '.'\n }\n }\n }, true);\n /* tslint:enable */\n showSpinner(this.element);\n this.engineModule.enableValueSorting = true;\n this.engineModule.generateGridData(this.dataSource, this.engineModule.headerCollection);\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.renderPivotGrid();\n }\n }\n else if (target.classList.contains(cls.COLLAPSE) || target.classList.contains(cls.EXPAND)) {\n this.onDrill(target);\n }\n else {\n this.CellClicked(target);\n return;\n }\n };\n /** @hidden */\n PivotView.prototype.onWindowResize = function () {\n var _this = this;\n /* tslint:disable */\n clearTimeout(this.timeOutObj);\n this.timeOutObj = setTimeout(function () {\n if (_this.element && _this.element.classList.contains('e-pivotview') && _this.engineModule) {\n var colWidth = _this.renderModule.calculateColWidth(_this.dataSource.values.length > 0 ?\n _this.engineModule.pivotValues[0].length : 2);\n _this.grid.width = _this.renderModule.calculateGridWidth();\n for (var cCnt = 0; cCnt < _this.grid.columns.length; cCnt++) {\n if (cCnt === 0 && colWidth < (_this.showGroupingBar && _this.groupingBarModule ? 250 : 200)) {\n _this.grid.columns[cCnt].width = (_this.showGroupingBar && _this.groupingBarModule ? 250 : 200);\n }\n else {\n _this.grid.columns[cCnt].width = colWidth;\n }\n }\n _this.grid.headerModule.refreshUI();\n if (_this.showGroupingBar && _this.groupingBarModule && _this.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {\n _this.groupingBarModule.setGridRowWidth();\n }\n }\n }, 500);\n /* tslint:enable */\n };\n PivotView.prototype.CellClicked = function (target) {\n var ele = null;\n if (target.classList.contains('e-headercell') || target.classList.contains('e-rowcell')) {\n ele = target;\n }\n else if (target.classList.contains('e-stackedheadercelldiv') || target.classList.contains('e-cellvalue') ||\n target.classList.contains('e-headercelldiv')) {\n ele = target.parentElement;\n }\n else if (target.classList.contains('e-headertext')) {\n ele = target.parentElement.parentElement;\n }\n if (ele) {\n if (this.cellClick) {\n this.trigger(events.cellClick, {\n currentCell: ele,\n data: this.pivotValues[Number(ele.getAttribute('index'))][Number(ele.getAttribute('aria-colindex'))]\n });\n }\n }\n };\n PivotView.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, this.isAdaptive ? 'touchend' : 'click', this.mouseClickHandler);\n window.removeEventListener('resize', this.onWindowResize.bind(this), true);\n };\n PivotView.prototype.renderEmptyGrid = function () {\n this.isEmptyGrid = true;\n this.element.innerHTML = '';\n this.renderModule = new Render(this);\n this.renderModule.bindGrid(this, true);\n /* tslint:disable:no-empty */\n this.grid.showSpinner = function () { };\n this.grid.hideSpinner = function () { };\n /* tslint:enable:no-empty */\n this.element.appendChild(createElement('div', { id: this.element.id + '_grid' }));\n this.grid.appendTo('#' + this.element.id + '_grid');\n };\n PivotView.prototype.initEngine = function () {\n this.trigger(events.enginePopulating, { 'dataSource': this.dataSource });\n this.engineModule = new PivotEngine(this.dataSource, '', undefined, this.pageSettings, this.enableValueSorting);\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.trigger(events.enginePopulated, { 'pivotValues': this.pivotValues });\n this.notify(events.dataReady, {});\n this.isEmptyGrid = false;\n };\n PivotView.prototype.generateData = function () {\n var _this = this;\n this.renderEmptyGrid();\n showSpinner(this.element);\n /* tslint:disable */\n if (this.dataSource && this.dataSource.data) {\n if (this.dataSource.data instanceof DataManager) {\n setTimeout(function () {\n _this.dataSource.data.executeQuery(new Query()).then(function (e) {\n if (!_this.element.querySelector('.e-spinner-pane')) {\n showSpinner(_this.element);\n }\n _this.setProperties({ dataSource: { data: e.result } }, true);\n _this.initEngine();\n });\n }, 100);\n }\n else if (this.dataSource.data.length > 0) {\n this.initEngine();\n }\n else {\n hideSpinner(this.element);\n }\n }\n else {\n hideSpinner(this.element);\n }\n /* tslint:enable */\n };\n PivotView.prototype.applyFormatting = function () {\n if (this.pivotValues) {\n for (var i = 0; i < this.pivotValues.length; i++) {\n for (var j = 1; (this.pivotValues[i] && j < this.pivotValues[i].length); j++) {\n if (this.pivotValues[i][j].axis === 'value') {\n this.pivotValues[i][j].style = undefined;\n this.pivotValues[i][j].cssClass = undefined;\n var format_1 = this.dataSource.conditionalFormatSettings;\n for (var k = 0; k < format_1.length; k++) {\n if (this.checkCondition(this.pivotValues[i][j].value, format_1[k].conditions, format_1[k].value1, format_1[k].value2)) {\n var len = this.dataSource.values.length > 1 ? this.dataSource.columns.length :\n this.dataSource.columns.length === 0 ? 0 : this.dataSource.columns.length - 1;\n if ((!format_1[k].measure || this.dataSource.values.length === 1 ||\n (this.pivotValues[len][j].\n valueSort.levelName.indexOf(format_1[k].measure) > -1)) && (!format_1[k].label ||\n ((this.pivotValues[this.dataSource.values.length > 1 ? (len - 1) : len][j].\n valueSort[format_1[k].label]) || (this.pivotValues[i][0]\n .valueSort[format_1[k].label])))) {\n if (format_1[k].style && format_1[k].style.backgroundColor) {\n format_1[k].style.backgroundColor = this.conditionalFormattingModule\n .isHex(format_1[k].style.backgroundColor.substr(1)) ? format_1[k].style.backgroundColor :\n this.conditionalFormattingModule.colourNameToHex(format_1[k].style.backgroundColor);\n }\n if (format_1[k].style && format_1[k].style.color) {\n format_1[k].style.color = this.conditionalFormattingModule\n .isHex(format_1[k].style.color.substr(1)) ? format_1[k].style.color :\n this.conditionalFormattingModule.colourNameToHex(format_1[k].style.color);\n }\n this.pivotValues[i][j].style = format_1[k].style;\n this.pivotValues[i][j].cssClass = 'format' + this.element.id + k;\n }\n }\n }\n }\n }\n }\n var format = this.dataSource.conditionalFormatSettings;\n for (var k = 0; k < format.length; k++) {\n var sheet = (function () {\n var style = document.createElement('style');\n style.appendChild(document.createTextNode(''));\n document.head.appendChild(style);\n return style.sheet;\n })();\n var str = 'color: ' + format[k].style.color + '!important;background-color: ' + format[k].style.backgroundColor +\n '!important;font-size: ' + format[k].style.fontSize + '!important;font-family: ' + format[k].style.fontFamily +\n ' !important;';\n sheet.insertRule('.format' + this.element.id + k + '{' + str + '}', 0);\n }\n }\n };\n PivotView.prototype.checkCondition = function (cellValue, conditions, conditionalValue1, conditionalValue2) {\n switch (conditions) {\n case 'LessThan':\n return cellValue < conditionalValue1;\n case 'LessThanOrEqualTo':\n return cellValue <= conditionalValue1;\n case 'GreaterThan':\n return cellValue > conditionalValue1;\n case 'GreaterThanOrEqualTo':\n return cellValue >= conditionalValue1;\n case 'Equals':\n return cellValue === conditionalValue1;\n case 'NotEquals':\n return cellValue !== conditionalValue1;\n case 'Between':\n return (conditionalValue1 < conditionalValue2 && cellValue >= conditionalValue1 && cellValue <= conditionalValue2) ||\n (conditionalValue1 > conditionalValue2 && cellValue <= conditionalValue1 && cellValue >= conditionalValue2);\n case 'NotBetween':\n return !((conditionalValue1 < conditionalValue2 && cellValue >= conditionalValue1 && cellValue <= conditionalValue2) ||\n (conditionalValue1 > conditionalValue2 && cellValue <= conditionalValue1 && cellValue >= conditionalValue2));\n default:\n return false;\n }\n };\n __decorate([\n Property('USD')\n ], PivotView.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"showFieldList\", void 0);\n __decorate([\n Complex({}, GridSettings)\n ], PivotView.prototype, \"gridSettings\", void 0);\n __decorate([\n Complex({}, GroupingBarSettings)\n ], PivotView.prototype, \"groupingBarSettings\", void 0);\n __decorate([\n Complex({}, DataSource)\n ], PivotView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], PivotView.prototype, \"pivotValues\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"showGroupingBar\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"showValuesButton\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"allowCalculatedField\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"enableValueSorting\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"allowConditionalFormatting\", void 0);\n __decorate([\n Property('auto')\n ], PivotView.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], PivotView.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"enginePopulating\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"enginePopulated\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"beforeExport\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"cellClick\", void 0);\n PivotView = PivotView_1 = __decorate([\n NotifyPropertyChanges\n ], PivotView);\n return PivotView;\n var PivotView_1;\n}(Component));\nexport { PivotView };\n","import { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\n/**\n * Keyboard interaction\n */\n/** @hidden */\nvar CommonKeyboardInteraction = /** @class */ (function () {\n /**\n * Constructor\n */\n function CommonKeyboardInteraction(parent) {\n this.keyConfigs = {\n shiftF: 'shift+F',\n shiftS: 'shift+S',\n delete: 'delete'\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 }\n CommonKeyboardInteraction.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'shiftF':\n this.processFilter(e);\n break;\n case 'shiftS':\n this.processSort(e);\n break;\n case 'delete':\n this.processDelete(e);\n break;\n }\n };\n CommonKeyboardInteraction.prototype.processSort = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS) &&\n !closest(target, '.' + cls.VALUE_AXIS_CLASS) && !closest(target, '.' + cls.AXIS_FILTER_CLASS)) {\n target.querySelector('.' + cls.SORT_CLASS).click();\n e.preventDefault();\n return;\n }\n };\n CommonKeyboardInteraction.prototype.processFilter = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS) && !closest(target, '.' + cls.VALUE_AXIS_CLASS)) {\n target.querySelector('.' + cls.FILTER_COMMON_CLASS).click();\n e.preventDefault();\n return;\n }\n };\n CommonKeyboardInteraction.prototype.processDelete = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS)) {\n target.querySelector('.' + cls.REMOVE_CLASS).click();\n e.preventDefault();\n return;\n }\n };\n /**\n * To destroy the keyboard module.\n * @return {void}\n * @private\n */\n CommonKeyboardInteraction.prototype.destroy = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n else {\n return;\n }\n };\n return CommonKeyboardInteraction;\n}());\nexport { CommonKeyboardInteraction };\n","import { isNullOrUndefined, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as cls from '../base/css-constant';\n/**\n * `EventBase` for active fields action.\n */\n/** @hidden */\nvar EventBase = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function EventBase(parent) {\n this.parent = parent;\n }\n /**\n * Updates sorting order for the selected field.\n * @method updateSorting\n * @param {Event} args - Contains clicked element information to update dataSource.\n * @return {void}\n * @hidden\n */\n EventBase.prototype.updateSorting = function (args) {\n if (this.parent.filterDialog.dialogPopUp) {\n this.parent.filterDialog.dialogPopUp.close();\n }\n var target = args.target;\n var fieldName = target.parentElement.id;\n var isDescending = target.classList.contains(cls.SORT_DESCEND_CLASS);\n var sortObj = this.getSortItemByName(fieldName);\n if (!isNullOrUndefined(sortObj)) {\n sortObj = sortObj.properties ?\n sortObj.properties : sortObj;\n sortObj.order = isDescending ? 'Ascending' : 'Descending';\n }\n else {\n var newSortObj = { name: fieldName, order: isDescending ? 'Ascending' : 'Descending' };\n this.parent.dataSource.sortSettings.push(newSortObj);\n }\n isDescending ? removeClass([target], cls.SORT_DESCEND_CLASS) : addClass([target], cls.SORT_DESCEND_CLASS);\n };\n /**\n * Updates sorting order for the selected field.\n * @method updateFiltering\n * @param {Event} args - Contains clicked element information to update dataSource.\n * @return {void}\n * @hidden\n */\n EventBase.prototype.updateFiltering = function (args) {\n var target = args.target;\n var fieldName = target.parentElement.id;\n var fieldCaption = target.parentElement.textContent;\n var isInclude = false;\n var filterItems = [];\n this.parent.engineModule.fieldList[fieldName].dateMember = new DataManager(this.parent.engineModule.\n fieldList[fieldName].dateMember).executeLocal(new Query().\n sortBy('actualText', this.parent.engineModule.fieldList[fieldName].sort.toLowerCase()));\n var filterObj = this.getFilterItemByName(fieldName);\n if (!isNullOrUndefined(filterObj)) {\n isInclude = filterObj.type === 'Include' ? true : false;\n filterItems = filterObj.items;\n }\n var treeData = this.getTreeData(isInclude, this.parent.engineModule.fieldList[fieldName].dateMember, filterItems);\n if (this.parent.filterDialog.dialogPopUp) {\n this.parent.filterDialog.dialogPopUp.close();\n }\n var popupTarget;\n popupTarget = this.parent.moduleName !== 'pivotfieldlist' ?\n popupTarget = this.parent.element : popupTarget = document.getElementById(this.parent.parentID + '_Wrapper');\n this.parent.filterDialog.createFilterDialog(treeData, fieldName, fieldCaption, popupTarget);\n };\n /**\n * Gets sort object for the given field name from the dataSource.\n * @method getSortItemByName\n * @param {string} fieldName - Gets sort settings for the given field name.\n * @return {Sort}\n * @hidden\n */\n EventBase.prototype.getSortItemByName = function (fieldName) {\n var sortObjects = this.parent.dataSource.sortSettings;\n return new DataManager({ json: sortObjects }).executeLocal(new Query().where('name', 'equal', fieldName))[0];\n };\n /**\n * Gets filter object for the given field name from the dataSource.\n * @method getFilterItemByName\n * @param {string} fieldName - Gets filter settings for the given field name.\n * @return {Sort}\n * @hidden\n */\n EventBase.prototype.getFilterItemByName = function (fieldName) {\n var filterObjects = this.parent.dataSource.filterSettings;\n return new DataManager({ json: filterObjects }).executeLocal(new Query().where('name', 'equal', fieldName))[0];\n };\n /**\n * Gets format object for the given field name from the dataSource.\n * @method getFilterItemByName\n * @param {string} fieldName - Gets format settings for the given field name.\n * @return {IFormatSettings}\n * @hidden\n */\n EventBase.prototype.getFormatItemByName = function (fieldName) {\n var formatObjects = this.parent.dataSource.formatSettings;\n return new DataManager({ json: formatObjects }).executeLocal(new Query().where('name', 'equal', fieldName))[0];\n };\n /**\n * show tree nodes using search text.\n * @hidden\n */\n EventBase.prototype.searchTreeNodes = function (args, treeObj) {\n var searchList = [];\n var nonSearchList = [];\n var list = [].slice.call(treeObj.element.querySelectorAll('li'));\n for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {\n var element = list_1[_i];\n if ((element.querySelector('.e-list-text').textContent.toLowerCase()).indexOf(args.value.toLowerCase()) > -1) {\n searchList.push(element);\n }\n else {\n nonSearchList.push(element);\n }\n }\n treeObj.enableNodes(searchList);\n treeObj.disableNodes(nonSearchList);\n };\n EventBase.prototype.getTreeData = function (isInclude, members, filterItems) {\n var list = [];\n for (var _i = 0, members_1 = members; _i < members_1.length; _i++) {\n var member = members_1[_i];\n var obj = {\n id: member.formattedText,\n name: member.formattedText,\n checkedStatus: isInclude ? false : true\n };\n if (filterItems && filterItems.indexOf(member.formattedText) >= 0) {\n obj.checkedStatus = isInclude ? true : false;\n }\n list.push(obj);\n }\n return list;\n };\n return EventBase;\n}());\nexport { EventBase };\n","import { isNullOrUndefined, closest } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\n/**\n * `DialogAction` module is used to handle field list dialog related behaviour.\n */\n/** @hidden */\nvar NodeStateModified = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function NodeStateModified(parent) {\n this.parent = parent;\n }\n /**\n * Updates the dataSource by drag and drop the selected field from either field list or axis table with dropped target position.\n * @method onStateModified\n * @param {DragEventArgs & DragAndDropEventArgs} args - Contains both pivot button and field list drag and drop information.\n * @param {string} fieldName - Defines dropped field name to update dataSource.\n * @return {void}\n * @hidden\n */\n NodeStateModified.prototype.onStateModified = function (args, fieldName) {\n var droppedClass = '';\n var nodeDropped = true;\n var target = closest(args.target, '.' + cls.DROPPABLE_CLASS);\n var droppedPosition = -1;\n this.parent.dataSourceUpdate.btnElement = args.element ? args.element.parentElement : undefined;\n if (target) {\n droppedClass = target.classList[1] === cls.ROW_AXIS_CLASS ?\n 'rows' : target.classList[1] === cls.COLUMN_AXIS_CLASS ? 'columns' : target.classList[1] === cls.VALUE_AXIS_CLASS ?\n 'values' : target.classList[1] === cls.FILTER_AXIS_CLASS ? 'filters' : '';\n }\n if ((args.cancel && droppedClass === '') ||\n (this.parent.dataSourceUpdate.btnElement && this.parent.dataSourceUpdate.btnElement.getAttribute('isValue') === 'true' &&\n ((droppedClass === 'filters' || droppedClass === 'values') ||\n droppedClass.indexOf(this.parent.dataSource.valueAxis) > -1))) {\n nodeDropped = false;\n return nodeDropped;\n }\n if (droppedClass !== '') {\n if (this.parent.engineModule.fieldList[fieldName] &&\n this.parent.engineModule.fieldList[fieldName].aggregateType === 'CalculatedField' && droppedClass !== 'values') {\n var title = this.parent.localeObj.getConstant('warning');\n var description = this.parent.localeObj.getConstant('dropAction');\n this.parent.errorDialog.createErrorDialog(title, description);\n nodeDropped = false;\n return nodeDropped;\n }\n droppedPosition = this.getButtonPosition(args.target, droppedClass);\n }\n this.parent.dataSourceUpdate.updateDataSource(fieldName, droppedClass, droppedPosition);\n return nodeDropped;\n };\n NodeStateModified.prototype.getButtonPosition = function (target, droppedClass) {\n var droppedPosition = -1;\n var targetBtn = closest(target, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n if (!isNullOrUndefined(targetBtn)) {\n targetBtn = targetBtn.querySelector('.' + cls.PIVOT_BUTTON_CLASS);\n var axisPanel = this.parent.element.querySelector('.e-' + droppedClass);\n var pivotButtons = [].slice.call(axisPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === targetBtn.id) {\n droppedPosition = i;\n break;\n }\n }\n }\n return droppedPosition;\n };\n return NodeStateModified;\n}());\nexport { NodeStateModified };\n","/**\n * `DataSourceUpdate` module is used to update the dataSource.\n */\n/** @hidden */\nvar DataSourceUpdate = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function DataSourceUpdate(parent) {\n this.parent = parent;\n }\n /**\n * Updates the dataSource by adding the given field along with field dropped position to the dataSource.\n * @param {string} fieldName - Defines dropped field name to update dataSource.\n * @param {string} droppedClass - Defines dropped field axis name to update dataSource.\n * @param {number} fieldCaption - Defines dropped position to the axis based on field position.\n * @method updateDataSource\n * @return {void}\n * @hidden\n */\n DataSourceUpdate.prototype.updateDataSource = function (fieldName, droppedClass, droppedPosition) {\n var dataSourceItem;\n if (this.control && this.btnElement && this.btnElement.getAttribute('isvalue') === 'true') {\n switch (droppedClass) {\n case '':\n this.control.setProperties({ dataSource: { values: [] } }, true);\n break;\n case 'rows':\n this.control.setProperties({ dataSource: { valueAxis: 'row' } }, true);\n break;\n case 'columns':\n this.control.setProperties({ dataSource: { valueAxis: 'column' } }, true);\n break;\n }\n }\n else {\n dataSourceItem = this.removeFieldFromReport(fieldName.toString());\n dataSourceItem = dataSourceItem ? dataSourceItem : this.getNewField(fieldName.toString());\n if (dataSourceItem.type === 'CalculatedField' && droppedClass !== '') {\n droppedClass = 'values';\n }\n }\n if (dataSourceItem) {\n switch (droppedClass) {\n case 'filters':\n droppedPosition !== -1 ?\n this.parent.dataSource.filters.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.filters.push(dataSourceItem);\n break;\n case 'rows':\n droppedPosition !== -1 ?\n this.parent.dataSource.rows.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.rows.push(dataSourceItem);\n break;\n case 'columns':\n droppedPosition !== -1 ?\n this.parent.dataSource.columns.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.columns.push(dataSourceItem);\n break;\n case 'values':\n droppedPosition !== -1 ?\n this.parent.dataSource.values.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.values.push(dataSourceItem);\n break;\n }\n }\n };\n /**\n * Updates the dataSource by removing the given field from the dataSource.\n * @param {string} fieldName - Defines dropped field name to remove dataSource.\n * @method removeFieldFromReport\n * @return {void}\n * @hidden\n */\n DataSourceUpdate.prototype.removeFieldFromReport = function (fieldName) {\n var dataSourceItem;\n var isDataSource = false;\n var rows = this.parent.dataSource.rows;\n var columns = this.parent.dataSource.columns;\n var values = this.parent.dataSource.values;\n var filters = this.parent.dataSource.filters;\n var fields = [rows, columns, values, filters];\n for (var len = 0, lnt = fields.length; len < lnt; len++) {\n if (!isDataSource && fields[len]) {\n for (var i = 0, n = fields[len].length; i < n; i++) {\n if (fields[len][i].name === fieldName) {\n dataSourceItem = fields[len][i];\n fields[len].splice(i, 1);\n isDataSource = true;\n break;\n }\n }\n }\n }\n return dataSourceItem;\n };\n /**\n * Creates new field object given field name from the field list data.\n * @param {string} fieldName - Defines dropped field name to add dataSource.\n * @method getNewField\n * @return {void}\n * @hidden\n */\n DataSourceUpdate.prototype.getNewField = function (fieldName) {\n var field = this.parent.engineModule.fieldList[fieldName];\n var newField = {\n name: fieldName,\n caption: field.caption,\n type: field.aggregateType\n };\n return newField;\n };\n return DataSourceUpdate;\n}());\nexport { DataSourceUpdate };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport { Dialog } from '@syncfusion/ej2-popups';\n/**\n * `ErrorDialog` module to create error dialog.\n */\n/** @hidden */\nvar ErrorDialog = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function ErrorDialog(parent) {\n this.parent = parent;\n }\n /**\n * Creates the error dialog for the unexpected action done.\n * @method createErrorDialog\n * @return {void}\n * @hidden\n */\n ErrorDialog.prototype.createErrorDialog = function (title, description) {\n var errorDialog = createElement('div', {\n id: this.parent.parentID + '_ErrorDialog',\n className: cls.ERROR_DIALOG_CLASS\n });\n this.parent.element.appendChild(errorDialog);\n this.errorPopUp = new Dialog({\n animationSettings: { effect: 'Fade' },\n allowDragging: false,\n header: title,\n content: description,\n isModal: true,\n visible: true,\n showCloseIcon: true,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: 'auto',\n position: { X: 'center', Y: 'center' },\n buttons: [\n {\n click: this.closeErrorDialog.bind(this),\n buttonModel: { cssClass: cls.OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true }\n }\n ],\n closeOnEscape: true,\n target: document.body,\n close: this.removeErrorDialog.bind(this)\n });\n this.errorPopUp.appendTo(errorDialog);\n };\n ErrorDialog.prototype.closeErrorDialog = function () {\n this.errorPopUp.hide();\n };\n ErrorDialog.prototype.removeErrorDialog = function () {\n remove(document.getElementById(this.parent.parentID + '_ErrorDialog').parentElement);\n };\n return ErrorDialog;\n}());\nexport { ErrorDialog };\n","import { createElement, removeClass, addClass, remove, isNullOrUndefined, setStyleAttribute } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport { TreeView, Tab } from '@syncfusion/ej2-navigations';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { MaskedTextBox } from '@syncfusion/ej2-inputs';\nimport { setStyleAndAttributes } from '@syncfusion/ej2-grids';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\n/**\n * `FilterDialog` module to create filter dialog.\n */\n/** @hidden */\nvar FilterDialog = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function FilterDialog(parent) {\n this.parent = parent;\n }\n /**\n * Creates the member filter dialog for the selected field.\n * @method createFilterDialog\n * @return {void}\n * @hidden\n */\n FilterDialog.prototype.createFilterDialog = function (treeData, fieldName, fieldCaption, target) {\n var editorDialog = createElement('div', {\n id: this.parent.parentID + '_EditorTreeView',\n className: cls.MEMBER_EDITOR_DIALOG_CLASS,\n attrs: { 'data-fieldName': fieldName, 'aria-label': fieldCaption },\n styles: 'visibility:hidden;'\n });\n var headerTemplate = this.parent.localeObj.getConstant('filter') + ' ' +\n '\"' + fieldCaption + '\"' + ' ' + this.parent.localeObj.getConstant('by');\n this.filterObject = this.getFilterObject(fieldName);\n this.allowExcelLikeFilter = this.isExcelFilter(fieldName);\n this.parent.element.appendChild(editorDialog);\n this.dialogPopUp = new Dialog({\n animationSettings: { effect: (this.allowExcelLikeFilter ? 'None' : 'Fade') },\n allowDragging: false,\n header: (this.allowExcelLikeFilter ? headerTemplate : fieldCaption),\n content: (this.allowExcelLikeFilter ? '' : this.createTreeView(treeData, fieldCaption, fieldName)),\n isModal: this.parent.renderMode === 'Popup' ? true : this.parent.isAdaptive ? true : false,\n visible: true,\n showCloseIcon: this.allowExcelLikeFilter ? true : false,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: (this.allowExcelLikeFilter ? '400px' : '350px'),\n position: { X: 'center', Y: 'center' },\n buttons: [\n {\n buttonModel: {\n cssClass: cls.OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true\n }\n },\n {\n buttonModel: {\n cssClass: 'e-clear-filter-button' + (this.allowExcelLikeFilter ? '' : ' ' + cls.ICON_DISABLE),\n iconCss: 'e-icons e-clear-filter-icon', enableRtl: this.parent.enableRtl,\n content: this.parent.localeObj.getConstant('clearFilter'), disabled: (this.filterObject ? false : true)\n }\n },\n {\n click: this.closeFilterDialog.bind(this),\n buttonModel: { cssClass: cls.CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel') }\n }\n ],\n closeOnEscape: true,\n target: target,\n close: this.removeFilterDialog.bind(this)\n });\n this.dialogPopUp.appendTo(editorDialog);\n if (this.allowExcelLikeFilter) {\n this.createTabMenu(treeData, fieldCaption, fieldName);\n addClass([this.dialogPopUp.element], 'e-excel-filter');\n this.updateCheckedState(fieldCaption);\n }\n else {\n this.updateCheckedState(fieldCaption);\n }\n setStyleAttribute(this.dialogPopUp.element, { 'visibility': 'visible' });\n if (this.allowExcelLikeFilter) {\n this.dialogPopUp.element.querySelector('.e-dlg-closeicon-btn').focus();\n }\n else {\n return;\n }\n };\n FilterDialog.prototype.createTreeView = function (treeData, fieldCaption, fieldName) {\n var _this = this;\n var editorTreeWrapper = createElement('div', {\n id: this.parent.parentID + 'EditorDiv',\n className: cls.EDITOR_TREE_WRAPPER_CLASS + (this.allowExcelLikeFilter ? ' e-excelfilter' : '')\n });\n var searchWrapper = createElement('div', {\n id: this.parent.parentID + '_SearchDiv', attrs: { 'tabindex': '-1' },\n className: cls.EDITOR_SEARCH_WRAPPER_CLASS\n });\n var editorSearch = createElement('input', { attrs: { 'type': 'text' } });\n searchWrapper.appendChild(editorSearch);\n var selectAllWrapper = createElement('div', {\n id: this.parent.parentID + '_AllDiv', attrs: { 'tabindex': '-1' },\n className: cls.SELECT_ALL_WRAPPER_CLASS\n });\n var selectAllContainer = createElement('div', { className: cls.SELECT_ALL_CLASS });\n var treeViewContainer = createElement('div', { className: cls.EDITOR_TREE_CONTAINER_CLASS });\n var promptDiv = createElement('div', {\n className: cls.EMPTY_MEMBER_CLASS + ' ' + cls.ICON_DISABLE,\n innerHTML: this.parent.localeObj.getConstant('noMatches')\n });\n selectAllWrapper.appendChild(selectAllContainer);\n editorTreeWrapper.appendChild(searchWrapper);\n editorTreeWrapper.appendChild(selectAllWrapper);\n editorTreeWrapper.appendChild(promptDiv);\n this.editorSearch = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('search') + ' ' + '\"' + fieldCaption + '\"',\n enableRtl: this.parent.enableRtl,\n cssClass: cls.EDITOR_SEARCH_CLASS,\n change: function (e) {\n _this.parent.eventBase.searchTreeNodes(e, _this.memberTreeView);\n var filterDialog = _this.dialogPopUp.element;\n var liList = [].slice.call(_this.memberTreeView.element.querySelectorAll('li'));\n var disabledList = [].slice.call(_this.memberTreeView.element.querySelectorAll('.' + cls.ICON_DISABLE));\n if (liList.length === disabledList.length) {\n _this.allMemberSelect.disableNodes([_this.allMemberSelect.element.querySelector('li')]);\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).setAttribute('disabled', 'disabled');\n removeClass([promptDiv], cls.ICON_DISABLE);\n }\n else {\n _this.allMemberSelect.enableNodes([_this.allMemberSelect.element.querySelector('li')]);\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).removeAttribute('disabled');\n addClass([promptDiv], cls.ICON_DISABLE);\n }\n _this.updateCheckedState(fieldCaption);\n }\n });\n this.editorSearch.appendTo(editorSearch);\n var data = [{ id: 'all', name: 'All', checkedStatus: true }];\n this.allMemberSelect = new TreeView({\n fields: { dataSource: data, id: 'id', text: 'name', isChecked: 'checkedStatus', },\n showCheckBox: true,\n enableRtl: this.parent.enableRtl,\n });\n this.allMemberSelect.appendTo(selectAllContainer);\n editorTreeWrapper.appendChild(treeViewContainer);\n this.memberTreeView = new TreeView({\n fields: { dataSource: treeData, id: 'id', text: 'name', isChecked: 'checkedStatus' },\n showCheckBox: true,\n enableRtl: this.parent.enableRtl,\n nodeChecking: this.validateTreeNode.bind(this),\n });\n this.memberTreeView.appendTo(treeViewContainer);\n return editorTreeWrapper;\n };\n FilterDialog.prototype.createTabMenu = function (treeData, fieldCaption, fieldName) {\n var wrapper = createElement('div', {\n className: 'e-filter-tab-wrapper'\n });\n this.dialogPopUp.content = wrapper;\n this.dialogPopUp.dataBind();\n var types = ['Label', 'Value', 'Include', 'Exclude'];\n var regx = '((-|\\\\+)?[0-9]+(\\\\.[0-9]+)?)+';\n var member = Object.keys(this.parent.engineModule.fieldList[fieldName].members)[0];\n var formatObj = this.parent.eventBase.getFormatItemByName(fieldName);\n var items = [\n {\n header: {\n text: this.parent.localeObj.getConstant('member'),\n iconCss: (this.filterObject && types.indexOf(this.filterObject.type) > 1 ? cls.SELECTED_OPTION_ICON_CLASS : '')\n },\n content: this.createTreeView(treeData, fieldCaption, fieldName)\n }\n ];\n for (var _i = 0, types_1 = types; _i < types_1.length; _i++) {\n var type = types_1[_i];\n if (((type === 'Label') && this.parent.dataSource.allowLabelFilter) ||\n (type === 'Value' && this.parent.dataSource.allowValueFilter)) {\n var filterType = (type === 'Label' && ((member).match(regx) &&\n (member).match(regx)[0].length === (member).length)) ? 'Number' :\n (type === 'Label' && (new Date(member).toString() !== 'Invalid Date') &&\n ((formatObj && formatObj.type) || (this.filterObject && this.filterObject.type === 'Date'))) ? 'Date' : type;\n var item = {\n header: {\n text: (filterType === 'Number' ? this.parent.localeObj.getConstant('label') :\n this.parent.localeObj.getConstant(filterType.toLowerCase())),\n iconCss: (this.filterObject && this.filterObject.type === filterType ? cls.SELECTED_OPTION_ICON_CLASS : '')\n },\n /* tslint:disable-next-line:max-line-length */\n content: this.createCustomFilter(fieldName, (this.filterObject && this.filterObject.type === filterType ? this.filterObject : undefined), filterType.toLowerCase())\n };\n items.push(item);\n }\n }\n var selectedIndex = (this.filterObject ? (['Label', 'Date', 'Number'].indexOf(this.filterObject.type) >= 0) ?\n 1 : this.filterObject.type === 'Value' ?\n (this.parent.dataSource.allowLabelFilter && this.parent.dataSource.allowValueFilter) ? 2 : 1 : 0 : 0);\n this.tabObj = new Tab({\n heightAdjustMode: 'Auto',\n items: items,\n height: '100%',\n selectedItem: selectedIndex,\n enableRtl: this.parent.enableRtl\n });\n this.tabObj.appendTo(wrapper);\n if (selectedIndex > 0) {\n /* tslint:disable-next-line:max-line-length */\n addClass([this.dialogPopUp.element.querySelector('.e-filter-div-content' + '.' + (selectedIndex === 1 && this.parent.dataSource.allowLabelFilter ? 'e-label-filter' : 'e-value-filter'))], 'e-selected-tab');\n }\n };\n FilterDialog.prototype.createCustomFilter = function (fieldName, filterObject, type) {\n var dataSource = [];\n var valueOptions = [];\n var measures = this.parent.dataSource.values;\n var selectedOption = 'DoesNotEquals';\n var selectedValueIndex = 0;\n var options = {\n label: ['Equals', 'DoesNotEquals', 'BeginWith', 'DoesNotBeginWith', 'EndsWith',\n 'DoesNotEndsWith', 'Contains', 'DoesNotContains', 'GreaterThan',\n 'GreaterThanOrEqualTo', 'LessThan', 'LessThanOrEqualTo', 'Between', 'NotBetween'],\n date: ['Equals', 'DoesNotEquals', 'Before', 'BeforeOrEqualTo', 'After', 'AfterOrEqualTo',\n 'Between', 'NotBetween'],\n value: ['Equals', 'DoesNotEquals', 'GreaterThan', 'GreaterThanOrEqualTo', 'LessThan',\n 'LessThanOrEqualTo', 'Between', 'NotBetween']\n };\n var betweenOperators = ['Between', 'NotBetween'];\n var operatorCollection = (type === 'label' ? options.label : type === 'date' ? options.date : options.value);\n for (var _i = 0, operatorCollection_1 = operatorCollection; _i < operatorCollection_1.length; _i++) {\n var operator = operatorCollection_1[_i];\n selectedOption = ((filterObject && operator === filterObject.condition) ?\n operatorCollection.indexOf(filterObject.condition) >= 0 ?\n filterObject.condition : operatorCollection[0] : selectedOption);\n dataSource.push({ value: operator, text: this.parent.localeObj.getConstant(operator) });\n }\n var len = measures.length;\n while (len--) {\n valueOptions.unshift({ value: measures[len].name, text: (measures[len].caption ? measures[len].caption : measures[len].name) });\n selectedValueIndex = filterObject && filterObject.type === 'Value' &&\n filterObject.measure === measures[len].name &&\n filterObject.condition === selectedOption ? len : selectedValueIndex;\n }\n var mainDiv = createElement('div', {\n className: cls.FILTER_DIV_CONTENT_CLASS + ' e-' + ((['date', 'number']).indexOf(type) >= 0 ? 'label' : type) + '-filter',\n id: this.parent.parentID + '_' + type + '_filter_div_content',\n attrs: {\n 'data-type': type, 'data-fieldName': fieldName, 'data-operator': selectedOption,\n 'data-measure': (this.parent.dataSource.values.length > 0 ? this.parent.dataSource.values[selectedValueIndex].name : ''),\n 'data-value1': (filterObject && selectedOption === filterObject.condition ? filterObject.value1.toString() : ''),\n 'data-value2': (filterObject && selectedOption === filterObject.condition ? filterObject.value1.toString() : '')\n }\n });\n var textContentdiv = createElement('div', {\n className: cls.FILTER_TEXT_DIV_CLASS,\n innerHTML: this.parent.localeObj.getConstant(type + 'TextContent')\n });\n var betweenTextContentdiv = createElement('div', {\n className: cls.BETWEEN_TEXT_DIV_CLASS + ' ' +\n (betweenOperators.indexOf(selectedOption) === -1 ? cls.ICON_DISABLE : ''),\n innerHTML: this.parent.localeObj.getConstant('And')\n });\n var separatordiv = createElement('div', { className: cls.SEPARATOR_DIV_CLASS });\n var filterWrapperDiv1 = createElement('div', { className: cls.FILTER_OPTION_WRAPPER_1_CLASS });\n var optionWrapperDiv1 = createElement('div', {\n className: 'e-measure-option-wrapper' + ' ' + (((['label', 'date', 'number']).indexOf(type) >= 0) ? cls.ICON_DISABLE : ''),\n });\n var optionWrapperDiv2 = createElement('div', { className: 'e-condition-option-wrapper' });\n var filterWrapperDiv2 = createElement('div', { className: cls.FILTER_OPTION_WRAPPER_2_CLASS });\n var dropOptionDiv1 = createElement('div', { id: this.parent.parentID + '_' + type + '_measure_option_wrapper' });\n var dropOptionDiv2 = createElement('div', { id: this.parent.parentID + '_' + type + '_contition_option_wrapper' });\n var inputDiv1 = createElement('div', { className: cls.FILTER_INPUT_DIV_1_CLASS });\n var inputDiv2 = createElement('div', {\n className: cls.FILTER_INPUT_DIV_2_CLASS + ' ' +\n (betweenOperators.indexOf(selectedOption) === -1 ? cls.ICON_DISABLE : '')\n });\n var inputField1 = createElement('input', {\n id: this.parent.parentID + '_' + type + '_input_option_1', attrs: { 'type': 'text' }\n });\n var inputField2 = createElement('input', {\n id: this.parent.parentID + '_' + type + '_input_option_2', attrs: { 'type': 'text' }\n });\n inputDiv1.appendChild(inputField1);\n inputDiv2.appendChild(inputField2);\n optionWrapperDiv1.appendChild(dropOptionDiv1);\n optionWrapperDiv1.appendChild(separatordiv);\n optionWrapperDiv2.appendChild(dropOptionDiv2);\n filterWrapperDiv1.appendChild(optionWrapperDiv1);\n filterWrapperDiv1.appendChild(optionWrapperDiv2);\n filterWrapperDiv2.appendChild(inputDiv1);\n filterWrapperDiv2.appendChild(betweenTextContentdiv);\n filterWrapperDiv2.appendChild(inputDiv2);\n /* tslint:disable-next-line:max-line-length */\n this.createElements(filterObject, betweenOperators, dropOptionDiv1, dropOptionDiv2, inputField1, inputField2, valueOptions, dataSource, selectedValueIndex, selectedOption, type);\n mainDiv.appendChild(textContentdiv);\n mainDiv.appendChild(filterWrapperDiv1);\n mainDiv.appendChild(filterWrapperDiv2);\n return mainDiv;\n };\n /* tslint:disable-next-line:max-line-length */\n FilterDialog.prototype.createElements = function (filterObj, operators, optionDiv1, optionDiv2, inputDiv1, inputDiv2, vDataSource, oDataSource, valueIndex, option, type) {\n var popupInstance = this;\n var optionWrapper1 = new DropDownList({\n dataSource: vDataSource, enableRtl: this.parent.enableRtl,\n fields: { value: 'value', text: 'text' }, index: valueIndex,\n cssClass: cls.VALUE_OPTIONS_CLASS, width: '100%',\n change: function (args) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n popupInstance.updateInputValues(element, type, inputDiv1, inputDiv2);\n setStyleAndAttributes(element, { 'data-measure': args.value });\n }\n });\n optionWrapper1.appendTo(optionDiv1);\n var optionWrapper = new DropDownList({\n dataSource: oDataSource, enableRtl: this.parent.enableRtl,\n fields: { value: 'value', text: 'text' }, value: option,\n cssClass: cls.FILTER_OPERATOR_CLASS, width: '100%',\n change: function (args) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n popupInstance.updateInputValues(element, type, inputDiv1, inputDiv2);\n var disabledClasses = [cls.BETWEEN_TEXT_DIV_CLASS, cls.FILTER_INPUT_DIV_2_CLASS];\n for (var _i = 0, disabledClasses_1 = disabledClasses; _i < disabledClasses_1.length; _i++) {\n var className = disabledClasses_1[_i];\n if (operators.indexOf(args.value) >= 0) {\n removeClass([element.querySelector('.' + className)], cls.ICON_DISABLE);\n }\n else {\n addClass([element.querySelector('.' + className)], cls.ICON_DISABLE);\n }\n }\n setStyleAndAttributes(element, { 'data-operator': args.value });\n }\n });\n optionWrapper.appendTo(optionDiv2);\n if (type === 'date') {\n var inputObj1_1 = new DatePicker({\n placeholder: this.parent.localeObj.getConstant('chooseDate'),\n enableRtl: this.parent.enableRtl,\n format: 'dd/MM/yyyy',\n value: (filterObj && option === filterObj.condition ? filterObj.value1 : null),\n change: function (e) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n setStyleAndAttributes(element, { 'data-value1': e.value, 'data-value2': inputObj2_1.value });\n },\n width: '100%',\n });\n var inputObj2_1 = new DatePicker({\n placeholder: this.parent.localeObj.getConstant('chooseDate'),\n enableRtl: this.parent.enableRtl,\n format: 'dd/MM/yyyy',\n value: (filterObj && option === filterObj.condition ? filterObj.value2 : null),\n change: function (e) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n setStyleAndAttributes(element, { 'data-value1': inputObj1_1.value, 'data-value2': e.value });\n },\n width: '100%',\n });\n inputObj1_1.appendTo(inputDiv1);\n inputObj2_1.appendTo(inputDiv2);\n }\n else {\n var inputObj1_2 = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('enterValue'),\n enableRtl: this.parent.enableRtl,\n value: (filterObj && option === filterObj.condition ? filterObj.value1 : ''),\n change: function (e) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n setStyleAndAttributes(element, { 'data-value1': e.value, 'data-value2': inputObj2_2.value });\n }, width: '100%'\n });\n var inputObj2_2 = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('enterValue'),\n enableRtl: this.parent.enableRtl,\n value: (filterObj && option === filterObj.condition ? filterObj.value2 : ''),\n change: function (e) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n setStyleAndAttributes(element, { 'data-value1': inputObj1_2.value, 'data-value2': e.value });\n }, width: '100%'\n });\n inputObj1_2.appendTo(inputDiv1);\n inputObj2_2.appendTo(inputDiv2);\n }\n };\n FilterDialog.prototype.updateInputValues = function (element, type, inputDiv1, inputDiv2) {\n var value1;\n var value2;\n if (type === 'date') {\n var inputObj1 = inputDiv1.ej2_instances[0];\n var inputObj2 = inputDiv2.ej2_instances[0];\n value1 = !isNullOrUndefined(inputObj1.value) ? inputObj1.value.toString() : '';\n value2 = !isNullOrUndefined(inputObj2.value) ? inputObj2.value.toString() : '';\n }\n else {\n var inputObj1 = inputDiv1.ej2_instances[0];\n var inputObj2 = inputDiv2.ej2_instances[0];\n value1 = inputObj1.value;\n value2 = inputObj2.value;\n }\n setStyleAndAttributes(element, { 'data-value1': value1, 'data-value2': value2 });\n };\n FilterDialog.prototype.validateTreeNode = function (e) {\n if (e.node.classList.contains(cls.ICON_DISABLE)) {\n e.cancel = true;\n }\n else {\n return;\n }\n };\n /**\n * Update filter state while Member check/uncheck.\n * @hidden\n */\n FilterDialog.prototype.updateCheckedState = function (fieldCaption) {\n var filterDialog = this.dialogPopUp.element;\n setStyleAndAttributes(filterDialog, { 'role': 'menu', 'aria-haspopup': 'true' });\n var list = [].slice.call(this.memberTreeView.element.querySelectorAll('li'));\n var visibleNodes = list.filter(function (node) {\n return (!node.classList.contains(cls.ICON_DISABLE));\n });\n var uncheckedNodes = this.getUnCheckedNodes(visibleNodes);\n var checkedNodes = this.getCheckedNodes(visibleNodes);\n var firstNode = this.allMemberSelect.element.querySelector('li').querySelector('span.' + cls.CHECK_BOX_FRAME_CLASS);\n if (checkedNodes.length > 0) {\n if (uncheckedNodes.length > 0) {\n removeClass([firstNode], cls.NODE_CHECK_CLASS);\n addClass([firstNode], cls.NODE_STOP_CLASS);\n }\n else if (uncheckedNodes.length === 0) {\n removeClass([firstNode], cls.NODE_STOP_CLASS);\n addClass([firstNode], cls.NODE_CHECK_CLASS);\n }\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).removeAttribute('disabled');\n }\n else if (uncheckedNodes.length > 0 && checkedNodes.length === 0) {\n removeClass([firstNode], [cls.NODE_CHECK_CLASS, cls.NODE_STOP_CLASS]);\n if (this.getCheckedNodes(list).length === checkedNodes.length) {\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).setAttribute('disabled', 'disabled');\n }\n }\n };\n FilterDialog.prototype.getCheckedNodes = function (treeNodes) {\n var checkeNodes = treeNodes.filter(function (node) {\n return (node.querySelector('.' + cls.CHECK_BOX_FRAME_CLASS).classList.contains(cls.NODE_CHECK_CLASS));\n });\n return checkeNodes;\n };\n FilterDialog.prototype.getUnCheckedNodes = function (treeNodes) {\n var unCheckeNodes = treeNodes.filter(function (node) {\n return (!node.querySelector('.' + cls.CHECK_BOX_FRAME_CLASS).classList.contains(cls.NODE_CHECK_CLASS));\n });\n return unCheckeNodes;\n };\n FilterDialog.prototype.isExcelFilter = function (fieldName) {\n var isFilterField = false;\n for (var _i = 0, _a = this.parent.dataSource.filters; _i < _a.length; _i++) {\n var field = _a[_i];\n if (field.name === fieldName) {\n isFilterField = true;\n break;\n }\n }\n if (!isFilterField && (this.parent.dataSource.allowLabelFilter || this.parent.dataSource.allowValueFilter)) {\n return true;\n }\n else {\n return false;\n }\n };\n FilterDialog.prototype.getFilterObject = function (fieldName) {\n var filterObj = this.parent.eventBase.getFilterItemByName(fieldName);\n if (filterObj && (((['Label', 'Date', 'Number'].indexOf(filterObj.type) >= 0) &&\n this.parent.dataSource.allowLabelFilter) || (filterObj.type === 'Value' && this.parent.dataSource.allowValueFilter) ||\n (['Include', 'Exclude'].indexOf(filterObj.type) >= 0))) {\n return filterObj;\n }\n return undefined;\n };\n FilterDialog.prototype.closeFilterDialog = function () {\n if (this.allowExcelLikeFilter) {\n if (this.tabObj && !this.tabObj.isDestroyed) {\n this.tabObj.destroy();\n }\n }\n this.dialogPopUp.hide();\n };\n FilterDialog.prototype.removeFilterDialog = function () {\n if (this.dialogPopUp && !this.dialogPopUp.isDestroyed) {\n this.dialogPopUp.destroy();\n }\n if (document.getElementById(this.parent.parentID + '_EditorTreeView')) {\n remove(document.getElementById(this.parent.parentID + '_EditorTreeView'));\n }\n };\n return FilterDialog;\n}());\nexport { FilterDialog };\n","import { CommonKeyboardInteraction } from '../actions/keyboard';\nimport { EventBase } from '../actions/event-base';\nimport { NodeStateModified } from '../actions/node-state-modified';\nimport { DataSourceUpdate } from '../actions/dataSource-update';\nimport { ErrorDialog } from '../popups/error-dialog';\nimport { FilterDialog } from '../popups/filter-dialog';\n/**\n * PivotCommon is used to manipulate the relational or Multi-Dimensional public methods by using their dataSource\n * @hidden\n */\n/** @hidden */\nvar PivotCommon = /** @class */ (function () {\n /**\n * Constructor for PivotEngine class\n * @param {PivotEngine} pivotEngine?\n * @param {DataOptions} dataSource?\n * @param {string} element?\n * @hidden\n */\n function PivotCommon(control) {\n this.element = control.element;\n this.moduleName = control.moduleName;\n this.dataSource = control.dataSource;\n this.engineModule = control.pivotEngine;\n this.enableRtl = control.enableRtl;\n this.isAdaptive = control.isAdaptive;\n this.renderMode = control.renderMode;\n this.parentID = control.id;\n this.localeObj = control.localeObj;\n this.nodeStateModified = new NodeStateModified(this);\n this.dataSourceUpdate = new DataSourceUpdate(this);\n this.eventBase = new EventBase(this);\n this.filterDialog = new FilterDialog(this);\n this.errorDialog = new ErrorDialog(this);\n this.keyboardModule = new CommonKeyboardInteraction(this);\n return this;\n }\n /**\n * To destroy the groupingbar\n * @return {void}\n * @hidden\n */\n PivotCommon.prototype.destroy = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n };\n return PivotCommon;\n}());\nexport { PivotCommon };\n","import { createElement, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { EventHandler, setStyleAttribute } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport * as events from '../../common/base/constant';\n/**\n * Module to render Pivot Field List Dialog\n */\n/** @hidden */\nvar DialogRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function DialogRenderer(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the field list layout rendering\n * @returns void\n * @private\n */\n DialogRenderer.prototype.render = function () {\n var fieldListWrappper = createElement('div', {\n id: this.parent.element.id + '_Wrapper',\n className: cls.WRAPPER_CLASS,\n styles: 'width:' + this.parent.element.style.width\n });\n if (this.parent.isAdaptive) {\n addClass([fieldListWrappper], cls.DEVICE);\n }\n else {\n removeClass([fieldListWrappper], cls.DEVICE);\n }\n if (this.parent.enableRtl) {\n addClass([fieldListWrappper], cls.RTL);\n }\n else {\n removeClass([fieldListWrappper], cls.RTL);\n }\n if (this.parent.cssClass) {\n addClass([fieldListWrappper], this.parent.cssClass);\n }\n this.parentElement = createElement('div', { className: cls.CONTAINER_CLASS });\n this.parent.element.appendChild(fieldListWrappper);\n if (this.parent.isAdaptive) {\n fieldListWrappper.removeAttribute('style');\n this.parentElement = createElement('div', { className: cls.ADAPTIVE_CONTAINER_CLASS });\n this.renderAdaptiveLayout(fieldListWrappper);\n }\n if (this.parent.renderMode === 'Popup') {\n this.renderFieldListDialog(fieldListWrappper);\n this.unWireDialogEvent(this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS));\n this.wireDialogEvent(this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS));\n }\n else {\n this.renderStaticLayout(fieldListWrappper);\n }\n };\n DialogRenderer.prototype.renderStaticLayout = function (fieldListWrappper) {\n if (!this.parent.isAdaptive) {\n var layoutHeader = createElement('div', {\n className: cls.FIELD_LIST_TITLE_CLASS\n });\n var headerContent = createElement('div', {\n className: cls.FIELD_LIST_TITLE_CONTENT_CLASS,\n innerHTML: this.parent.localeObj.getConstant('staticFieldList')\n });\n layoutHeader.appendChild(headerContent);\n layoutHeader.appendChild(this.createCalculatedButton());\n addClass([fieldListWrappper], cls.STATIC_FIELD_LIST_CLASS);\n fieldListWrappper.appendChild(layoutHeader);\n fieldListWrappper.appendChild(this.parentElement);\n }\n };\n DialogRenderer.prototype.renderFieldListDialog = function (fieldListWrappper) {\n var toggleFieldList = createElement('div', {\n className: cls.TOGGLE_FIELD_LIST_CLASS + ' ' + cls.ICON + ' ' + cls.TOGGLE_SELECT_CLASS,\n attrs: {\n 'tabindex': '0',\n title: this.parent.localeObj.getConstant('fieldList'),\n 'aria-disabled': 'false',\n 'aria-label': this.parent.localeObj.getConstant('fieldList')\n }\n });\n this.parent.element.appendChild(toggleFieldList);\n if (this.parent.isAdaptive) {\n this.fieldListDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n content: this.parentElement,\n isModal: true,\n showCloseIcon: false,\n visible: false,\n allowDragging: false,\n closeOnEscape: false,\n enableRtl: this.parent.enableRtl,\n width: '100%',\n height: '100%',\n position: { X: 'center', Y: 'center' },\n buttons: [{\n click: this.showFieldListDialog.bind(this),\n buttonModel: {\n cssClass: cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n isPrimary: true\n }\n }, {\n click: this.showCalculatedField.bind(this),\n buttonModel: {\n cssClass: cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS +\n ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + ' ' + cls.ICON_DISABLE,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n isPrimary: true\n }\n }, {\n click: this.onCloseFieldList.bind(this),\n buttonModel: {\n content: this.parent.localeObj.getConstant('close'),\n cssClass: cls.CANCEL_BUTTON_CLASS,\n }\n }],\n target: document.body,\n close: this.removeFieldListIcon.bind(this)\n });\n this.fieldListDialog.appendTo(fieldListWrappper);\n setStyleAttribute(fieldListWrappper.querySelector('#' + fieldListWrappper.id + '_dialog-content'), {\n 'padding': '0'\n });\n var footer = fieldListWrappper.querySelector('.' + cls.FOOTER_CONTENT_CLASS);\n addClass([footer], cls.FIELD_LIST_FOOTER_CLASS);\n removeClass([footer.querySelector('.' + cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS)], cls.BUTTON_FLAT_CLASS);\n removeClass([footer.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)], cls.BUTTON_FLAT_CLASS);\n }\n else {\n var headerTemplate = '
    ' + this.parent.localeObj.getConstant('fieldList') + '
    ';\n this.fieldListDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n header: headerTemplate,\n content: this.parentElement,\n isModal: false,\n showCloseIcon: false,\n visible: false,\n allowDragging: true,\n enableRtl: this.parent.enableRtl,\n width: this.parent.element.style.width,\n position: { X: 'center', Y: this.parent.element.offsetTop },\n buttons: [{\n click: this.onCloseFieldList.bind(this),\n buttonModel: {\n content: this.parent.localeObj.getConstant('close'), cssClass: cls.CANCEL_BUTTON_CLASS,\n isPrimary: true\n },\n }],\n closeOnEscape: true,\n target: !isNullOrUndefined(this.parent.target) ? ((typeof this.parent.target) === 'string') ?\n document.querySelector(this.parent.target) : this.parent.target : document.body,\n close: this.removeFieldListIcon.bind(this)\n });\n this.fieldListDialog.appendTo(fieldListWrappper);\n setStyleAttribute(fieldListWrappper.querySelector('#' + fieldListWrappper.id + '_title'), { 'width': '100%' });\n fieldListWrappper.querySelector('.' + cls.TITLE_HEADER_CLASS).appendChild(this.createCalculatedButton());\n }\n };\n /**\n * Called internally if any of the field added to axis.\n * @hidden\n */\n DialogRenderer.prototype.updateDataSource = function (selectedNodes) {\n var axis = ['filters', 'columns', 'rows', 'values'];\n for (var _i = 0, selectedNodes_1 = selectedNodes; _i < selectedNodes_1.length; _i++) {\n var field = selectedNodes_1[_i];\n var fieldName = field;\n var droppedClass = axis[this.adaptiveElement.selectedItem];\n this.parent.pivotCommon.dataSourceUpdate.updateDataSource(fieldName, droppedClass, -1);\n }\n this.parent.axisFieldModule.render();\n this.parent.updateDataSource(true);\n };\n DialogRenderer.prototype.renderAdaptiveLayout = function (fieldListWrappper) {\n var _this = this;\n var layoutFooter = createElement('div', {\n className: cls.FIELD_LIST_FOOTER_CLASS\n });\n fieldListWrappper.appendChild(this.parentElement);\n var items = [\n {\n header: { 'text': this.parent.localeObj.getConstant('filters') },\n content: this.createAxisTable('filters')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('columns') },\n content: this.createAxisTable('columns')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('rows') },\n content: this.createAxisTable('rows')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('values') },\n content: this.createAxisTable('values')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('createCalculatedField') },\n content: 'Calculated Field Related UI'\n }\n ];\n if (!this.parent.allowCalculatedField) {\n items.pop();\n }\n this.adaptiveElement = new Tab({\n heightAdjustMode: 'Auto',\n items: items,\n height: '100%',\n enableRtl: this.parent.enableRtl,\n selected: function (e) {\n if (fieldListWrappper.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)) {\n if (e.selectedIndex !== 4) {\n addClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS)], cls.ICON_DISABLE);\n removeClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)], cls.ICON_DISABLE);\n }\n else {\n removeClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS)], cls.ICON_DISABLE);\n addClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)], cls.ICON_DISABLE);\n }\n }\n if (e.selectedIndex === 4) {\n _this.adaptiveElement.items[4].content = '';\n _this.adaptiveElement.dataBind();\n _this.parent.notify(events.initCalculatedField, {});\n }\n else {\n _this.parent.axisFieldModule.render();\n }\n }\n });\n if (this.parent.renderMode === 'Fixed') {\n layoutFooter.appendChild(this.createAddButton());\n addClass([fieldListWrappper], cls.STATIC_FIELD_LIST_CLASS);\n this.adaptiveElement.appendTo(this.parentElement);\n this.parentElement.appendChild(layoutFooter);\n }\n else {\n this.adaptiveElement.appendTo(this.parentElement);\n }\n };\n DialogRenderer.prototype.createCalculatedButton = function () {\n var calculatedButton = createElement('div', {\n id: this.parent.element.id + '_CalculatedField'\n });\n var calculateField = new Button({\n cssClass: cls.CALCULATED_FIELD_CLASS + ' ' + cls.ICON_DISABLE,\n content: this.parent.localeObj.getConstant('calculatedField'),\n enableRtl: this.parent.enableRtl\n });\n calculateField.appendTo(calculatedButton);\n if (this.parent.calculatedFieldModule) {\n removeClass([calculatedButton], cls.ICON_DISABLE);\n }\n calculateField.element.onclick = this.showCalculatedField.bind(this);\n return calculatedButton;\n };\n DialogRenderer.prototype.createAddButton = function () {\n var footerContainer = createElement('div', {\n className: cls.FIELD_LIST_FOOTER_CLASS + '-content'\n });\n var fieldListButton = createElement('div', {});\n var calculatedButton = createElement('div', {});\n var calculateField = new Button({\n cssClass: cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS +\n ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + ' ' + cls.ICON_DISABLE,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n enableRtl: this.parent.enableRtl\n });\n var fieldList = new Button({\n cssClass: cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n enableRtl: this.parent.enableRtl\n });\n fieldList.appendTo(fieldListButton);\n calculateField.appendTo(calculatedButton);\n footerContainer.appendChild(fieldListButton);\n footerContainer.appendChild(calculatedButton);\n calculateField.element.onclick = this.showCalculatedField.bind(this);\n fieldList.element.onclick = this.showFieldListDialog.bind(this);\n return footerContainer;\n };\n DialogRenderer.prototype.createAxisTable = function (axis) {\n var axisWrapper = createElement('div', {\n className: cls.FIELD_LIST_CLASS + '-' + axis\n });\n var axisContent = createElement('div', { className: cls.AXIS_CONTENT_CLASS + ' ' + 'e-' + axis });\n var axisPrompt = createElement('span', {\n className: cls.AXIS_PROMPT_CLASS,\n innerHTML: this.parent.localeObj.getConstant('addPrompt')\n });\n axisWrapper.appendChild(axisContent);\n axisWrapper.appendChild(axisPrompt);\n return axisWrapper;\n };\n DialogRenderer.prototype.showCalculatedField = function (event) {\n if (!this.parent.isAdaptive) {\n if (this.parent.dialogRenderer.fieldListDialog) {\n this.parent.dialogRenderer.fieldListDialog.hide();\n addClass([this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n }\n }\n this.parent.notify(events.initCalculatedField, {});\n };\n DialogRenderer.prototype.showFieldListDialog = function (event) {\n var activeindex = this.adaptiveElement.selectedItem;\n this.parent.treeViewModule.render(activeindex);\n };\n DialogRenderer.prototype.onShowFieldList = function () {\n addClass([this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n this.parent.dialogRenderer.fieldListDialog.show();\n this.parent.dialogRenderer.fieldListDialog.element.style.top =\n parseInt(this.parent.dialogRenderer.fieldListDialog.element.style.top, 10) < 0 ?\n '0px' : this.parent.dialogRenderer.fieldListDialog.element.style.top;\n };\n DialogRenderer.prototype.onCloseFieldList = function () {\n this.parent.dialogRenderer.fieldListDialog.hide();\n };\n DialogRenderer.prototype.removeFieldListIcon = function () {\n if (!document.getElementById(this.parent.element.id + 'calculateddialog')) {\n removeClass([this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n }\n };\n DialogRenderer.prototype.keyPress = function (e) {\n var target = e.target;\n if (e.keyCode === 13 && e.target) {\n e.target.click();\n e.preventDefault();\n return;\n }\n };\n DialogRenderer.prototype.wireDialogEvent = function (element) {\n EventHandler.add(element, 'keydown', this.keyPress, this);\n EventHandler.add(element, 'click', this.onShowFieldList, this);\n };\n DialogRenderer.prototype.unWireDialogEvent = function (element) {\n EventHandler.remove(element, 'keydown', this.keyPress);\n EventHandler.remove(element, 'click', this.onShowFieldList);\n };\n return DialogRenderer;\n}());\nexport { DialogRenderer };\n","import { createElement, addClass, removeClass, prepend, remove } from '@syncfusion/ej2-base';\nimport { closest, extend } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { MaskedTextBox } from '@syncfusion/ej2-inputs';\n/**\n * Module to render Field List\n */\n/** @hidden */\nvar TreeViewRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function TreeViewRenderer(parent) {\n this.selectedNodes = [];\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * Initialize the field list tree rendering\n * @returns void\n * @private\n */\n TreeViewRenderer.prototype.render = function (axis) {\n this.parentElement = this.parent.dialogRenderer.parentElement;\n if (!this.parent.isAdaptive) {\n var fieldTable = createElement('div', { className: cls.FIELD_TABLE_CLASS });\n var treeHeader = createElement('div', {\n className: cls.FIELD_HEADER_CLASS,\n innerHTML: this.parent.localeObj.getConstant('allFields')\n });\n this.treeViewElement = createElement('div', {\n id: this.parent.element.id + '_TreeView',\n className: cls.FIELD_LIST_CLASS\n });\n fieldTable.appendChild(treeHeader);\n fieldTable.appendChild(this.treeViewElement);\n this.parentElement.appendChild(fieldTable);\n if (this.parent.renderMode === 'Fixed') {\n var centerDiv = createElement('div', { className: cls.STATIC_CENTER_DIV_CLASS });\n var axisHeader = createElement('div', {\n className: cls.STATIC_CENTER_HEADER_CLASS,\n innerHTML: this.parent.localeObj.getConstant('centerHeader')\n });\n this.parentElement.appendChild(centerDiv);\n this.parentElement.appendChild(axisHeader);\n }\n this.renderTreeView();\n }\n else {\n this.renderTreeDialog(axis);\n }\n };\n TreeViewRenderer.prototype.renderTreeView = function () {\n this.fieldTable = new TreeView({\n fields: { dataSource: this.getTreeData(), id: 'id', text: 'caption', isChecked: 'isSelected' },\n nodeChecked: this.nodeStateChange.bind(this),\n cssClass: cls.FIELD_LIST_TREE_CLASS,\n showCheckBox: true,\n allowDragAndDrop: true,\n sortOrder: 'Ascending',\n enableRtl: this.parent.enableRtl,\n nodeDragStart: this.dragStart.bind(this),\n nodeDragStop: this.dragStop.bind(this)\n });\n this.treeViewElement.innerHTML = '';\n this.fieldTable.appendTo(this.treeViewElement);\n this.getTreeUpdate();\n };\n TreeViewRenderer.prototype.renderTreeDialog = function (axis) {\n var _this = this;\n var fieldListDialog = createElement('div', {\n id: this.parent.element.id + '_FieldListTreeView',\n className: cls.ADAPTIVE_FIELD_LIST_DIALOG_CLASS\n });\n this.parentElement.appendChild(fieldListDialog);\n this.fieldDialog = new Dialog({\n animationSettings: { effect: 'Fade' },\n allowDragging: false,\n header: this.parent.localeObj.getConstant('adaptiveFieldHeader'),\n content: this.createTreeView(this.getTreeData(axis)),\n isModal: true,\n visible: true,\n showCloseIcon: false,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: '350px',\n position: { X: 'center', Y: 'center' },\n buttons: [{\n click: this.closeTreeDialog.bind(this),\n buttonModel: {\n cssClass: cls.CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel')\n }\n }, {\n click: this.onFieldAdd.bind(this),\n buttonModel: {\n cssClass: cls.OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('add'),\n isPrimary: true\n }\n }],\n closeOnEscape: true,\n target: this.parentElement.parentElement,\n close: function () {\n if (document.getElementById(_this.parent.element.id + '_FieldListTreeView')) {\n remove(document.getElementById(_this.parent.element.id + '_FieldListTreeView'));\n }\n }\n });\n this.fieldDialog.appendTo(fieldListDialog);\n };\n TreeViewRenderer.prototype.createTreeView = function (treeData) {\n var _this = this;\n var editorTreeWrapper = createElement('div', {\n id: this.parent.element.id + 'EditorDiv',\n className: cls.EDITOR_TREE_WRAPPER_CLASS\n });\n var searchWrapper = createElement('div', {\n id: this.parent.element.id + '_SearchDiv', attrs: { 'tabindex': '-1' },\n className: cls.EDITOR_SEARCH_WRAPPER_CLASS\n });\n var editorSearch = createElement('input', { attrs: { 'type': 'text' } });\n searchWrapper.appendChild(editorSearch);\n var treeViewContainer = createElement('div', { className: cls.EDITOR_TREE_CONTAINER_CLASS });\n editorTreeWrapper.appendChild(searchWrapper);\n this.editorSearch = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('search'),\n enableRtl: this.parent.enableRtl,\n cssClass: cls.EDITOR_SEARCH_CLASS,\n change: function (e) {\n _this.parent.pivotCommon.eventBase.searchTreeNodes(e, _this.fieldTable);\n }\n });\n this.editorSearch.appendTo(editorSearch);\n editorTreeWrapper.appendChild(treeViewContainer);\n this.fieldTable = new TreeView({\n fields: { dataSource: treeData, id: 'id', text: 'caption', isChecked: 'isSelected' },\n showCheckBox: true,\n sortOrder: 'Ascending',\n enableRtl: this.parent.enableRtl,\n nodeChecked: this.addNode.bind(this),\n });\n this.fieldTable.appendTo(treeViewContainer);\n return editorTreeWrapper;\n };\n TreeViewRenderer.prototype.dragStart = function (args) {\n if (args.event.target.classList.contains(cls.DRAG_CLASS)) {\n this.parent.isDragging = true;\n addClass([args.draggedNode.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.SELECTED_NODE_CLASS);\n var data = this.parent.engineModule.fieldList[args.draggedNode.getAttribute('data-uid')];\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n if (data && data.aggregateType === 'CalculatedField') {\n for (var _i = 0, axis_1 = axis; _i < axis_1.length; _i++) {\n var axisContent = axis_1[_i];\n addClass([this.parentElement.querySelector('.' + axisContent)], cls.NO_DRAG_CLASS);\n }\n }\n }\n else {\n args.cancel = true;\n }\n };\n TreeViewRenderer.prototype.dragStop = function (args) {\n args.cancel = true;\n this.parent.isDragging = false;\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n for (var _i = 0, axis_2 = axis; _i < axis_2.length; _i++) {\n var axisElement = axis_2[_i];\n removeClass([this.parentElement.querySelector('.' + axisElement)], cls.NO_DRAG_CLASS);\n }\n removeClass([args.draggedNode.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.SELECTED_NODE_CLASS);\n if (this.parent.pivotCommon.filterDialog.dialogPopUp) {\n this.parent.pivotCommon.filterDialog.dialogPopUp.close();\n }\n var fieldName = args.draggedNodeData.id.toString();\n if (!this.isNodeDropped(args, fieldName)) {\n return;\n }\n if (this.parent.pivotCommon.nodeStateModified.onStateModified(args, fieldName)) {\n this.parent.updateDataSource();\n this.parent.axisFieldModule.render();\n }\n };\n TreeViewRenderer.prototype.isNodeDropped = function (args, targetID) {\n var isDropped = true;\n if (args.draggedNodeData.isChecked === 'true') {\n var target = this.getButton(targetID);\n var axisPanel = closest(target, '.' + cls.DROPPABLE_CLASS);\n var droppableElement = closest(args.target, '.' + cls.DROPPABLE_CLASS);\n if (target && axisPanel === droppableElement) {\n var pivotButtons = [].slice.call(axisPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var dropTarget = closest(args.target, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n var sourcePosition = void 0;\n var dropPosition = -1;\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === target.id) {\n sourcePosition = i;\n }\n if (dropTarget) {\n var droppableButton = dropTarget.querySelector('.' + cls.PIVOT_BUTTON_CLASS);\n if (pivotButtons[i].id === droppableButton.id) {\n dropPosition = i;\n }\n }\n }\n if (sourcePosition === dropPosition || (sourcePosition === (pivotButtons.length - 1) && dropPosition === -1)) {\n var parentElement = document.getElementById(this.parent.element.id + '_Wrapper');\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n isDropped = false;\n }\n }\n }\n return isDropped;\n };\n TreeViewRenderer.prototype.getButton = function (fieldName) {\n var wrapperElement = document.getElementById(this.parent.element.id + '_Wrapper');\n var pivotButtons = [].slice.call(wrapperElement.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var buttonElement;\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === fieldName) {\n buttonElement = pivotButtons[i];\n break;\n }\n }\n return buttonElement;\n };\n TreeViewRenderer.prototype.nodeStateChange = function (args) {\n if (this.parent.pivotCommon.filterDialog.dialogPopUp) {\n this.parent.pivotCommon.filterDialog.dialogPopUp.close();\n }\n var node = closest(args.node, '.' + cls.TEXT_CONTENT_CLASS);\n var list = this.parent.pivotFieldList;\n var selectedNode = list[args.data[0].id.toString()];\n if (args.action === 'check') {\n addClass([node.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.LIST_SELECT_CLASS);\n var addNode = this.parent.pivotCommon.dataSourceUpdate.getNewField(args.data[0].id.toString());\n selectedNode.type === 'number' ?\n this.parent.dataSource.values.push(addNode) : this.parent.dataSource.rows.push(addNode);\n }\n else {\n removeClass([node.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.LIST_SELECT_CLASS);\n this.parent.pivotCommon.dataSourceUpdate.removeFieldFromReport(args.data[0].id.toString());\n }\n this.parent.updateDataSource(true);\n this.parent.axisFieldModule.render();\n };\n TreeViewRenderer.prototype.addNode = function (args) {\n var fieldList = this.parent.pivotFieldList;\n var selectedNode = fieldList[args.data[0].id.toString()];\n if (args.action === 'check') {\n this.selectedNodes.push(selectedNode.id.toString());\n }\n else {\n var count = this.selectedNodes.length;\n while (count--) {\n if (this.selectedNodes[count] === selectedNode.id.toString()) {\n this.selectedNodes.splice(count, 1);\n break;\n }\n }\n }\n };\n TreeViewRenderer.prototype.getTreeUpdate = function () {\n var liElements = [].slice.call(this.treeViewElement.querySelectorAll('.' + cls.TEXT_CONTENT_CLASS));\n for (var _i = 0, liElements_1 = liElements; _i < liElements_1.length; _i++) {\n var liElement = liElements_1[_i];\n var dragElement = createElement('span', {\n attrs: {\n 'tabindex': '-1',\n title: this.parent.localeObj.getConstant('drag'),\n 'aria-disabled': 'false'\n },\n className: cls.ICON + ' ' + cls.DRAG_CLASS\n });\n prepend([dragElement], liElement);\n if (liElement.querySelector('.' + cls.NODE_CHECK_CLASS)) {\n addClass([liElement.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.LIST_SELECT_CLASS);\n }\n }\n };\n TreeViewRenderer.prototype.refreshTreeView = function () {\n this.fieldTable.fields = { dataSource: this.getTreeData(), id: 'id', text: 'caption', isChecked: 'isSelected' };\n this.fieldTable.dataBind();\n this.getTreeUpdate();\n };\n TreeViewRenderer.prototype.getTreeData = function (axis) {\n var data = [];\n var keys = Object.keys(this.parent.pivotFieldList);\n var fieldList = extend({}, this.parent.pivotFieldList, null, true);\n if (this.parent.isAdaptive) {\n var fields = [this.parent.dataSource.filters, this.parent.dataSource.columns, this.parent.dataSource.rows,\n this.parent.dataSource.values];\n var currentFieldSet = fields[axis];\n var len = keys.length;\n while (len--) {\n fieldList[keys[len]].isSelected = false;\n }\n for (var _i = 0, currentFieldSet_1 = currentFieldSet; _i < currentFieldSet_1.length; _i++) {\n var item = currentFieldSet_1[_i];\n fieldList[item.name].isSelected = true;\n }\n }\n var list = fieldList;\n for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) {\n var member = keys_1[_a];\n var obj = list[member];\n data.push(obj);\n }\n return data;\n };\n TreeViewRenderer.prototype.onFieldAdd = function (e) {\n this.parent.dialogRenderer.updateDataSource(this.selectedNodes);\n this.closeTreeDialog();\n };\n TreeViewRenderer.prototype.closeTreeDialog = function () {\n this.selectedNodes = [];\n this.fieldDialog.hide();\n };\n /**\n * @hidden\n */\n TreeViewRenderer.prototype.addEventListener = function () {\n this.parent.on(events.treeViewUpdate, this.refreshTreeView, this);\n };\n /**\n * @hidden\n */\n TreeViewRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.treeViewUpdate, this.refreshTreeView);\n };\n /**\n * To destroy the tree view event listener\n * @return {void}\n * @hidden\n */\n TreeViewRenderer.prototype.destroy = function () {\n this.removeEventListener();\n };\n return TreeViewRenderer;\n}());\nexport { TreeViewRenderer };\n","import { createElement, Droppable, EventHandler, removeClass, addClass } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\n/**\n * Module to render Axis Field Table\n */\n/** @hidden */\nvar AxisTableRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function AxisTableRenderer(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the axis table rendering\n * @returns void\n * @private\n */\n AxisTableRenderer.prototype.render = function () {\n if (!this.parent.isAdaptive) {\n var axisTable = createElement('div', { className: cls.AXIS_TABLE_CLASS });\n this.leftAxisPanel = createElement('div', { className: cls.LEFT_AXIS_PANEL_CLASS });\n this.rightAxisPanel = createElement('div', { className: cls.RIGHT_AXIS_PANEL_CLASS });\n this.parent.dialogRenderer.parentElement.appendChild(axisTable);\n axisTable.appendChild(this.leftAxisPanel);\n axisTable.appendChild(this.rightAxisPanel);\n this.axisTable = axisTable;\n this.renderAxisTable();\n }\n this.parent.axisFieldModule.render();\n };\n AxisTableRenderer.prototype.renderAxisTable = function () {\n var fieldLabels = ['filters', 'rows', 'columns', 'values'];\n for (var len = 0, lnt = fieldLabels.length; len < lnt; len++) {\n var axis = createElement('div', {\n className: cls.FIELD_LIST_CLASS + '-' + fieldLabels[len]\n });\n var axisTitleWrapper = createElement('div', {\n className: cls.AXIS_ICON_CLASS + '-wrapper'\n });\n var axisTitle = createElement('div', {\n className: cls.AXIS_HEADER_CLASS,\n innerHTML: this.parent.localeObj.getConstant(fieldLabels[len])\n });\n axisTitleWrapper.appendChild(this.getIconupdate(fieldLabels[len]));\n axisTitleWrapper.appendChild(axisTitle);\n var axisContent = createElement('div', { className: cls.AXIS_CONTENT_CLASS + ' ' + 'e-' + fieldLabels[len] });\n var localePrompt = void 0;\n if (fieldLabels[len] === 'rows') {\n localePrompt = this.parent.localeObj.getConstant('dropRowPrompt');\n }\n else if (fieldLabels[len] === 'columns') {\n localePrompt = this.parent.localeObj.getConstant('dropColPrompt');\n }\n else if (fieldLabels[len] === 'values') {\n localePrompt = this.parent.localeObj.getConstant('dropValPrompt');\n }\n else {\n localePrompt = this.parent.localeObj.getConstant('dropFilterPrompt');\n }\n var axisPrompt = createElement('span', {\n className: cls.AXIS_PROMPT_CLASS,\n innerHTML: localePrompt\n });\n var droppable = new Droppable(axisContent, {});\n axis.appendChild(axisTitleWrapper);\n axis.appendChild(axisContent);\n axis.appendChild(axisPrompt);\n if (len <= 1) {\n this.leftAxisPanel.appendChild(axis);\n }\n else {\n this.rightAxisPanel.appendChild(axis);\n }\n this.unWireEvent(axisContent);\n this.wireEvent(axisContent);\n }\n };\n AxisTableRenderer.prototype.getIconupdate = function (axis) {\n var axisWrapper = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.AXIS_ICON_CLASS + '-icon-wrapper'\n });\n var axisElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false'\n },\n className: cls.ICON + ' ' + cls.AXIS_ICON_CLASS + '-' + axis\n });\n axisWrapper.appendChild(axisElement);\n return axisWrapper;\n };\n AxisTableRenderer.prototype.wireEvent = function (element) {\n EventHandler.add(element, 'mouseover', this.updateDropIndicator, this);\n EventHandler.add(element, 'mouseleave', this.updateDropIndicator, this);\n };\n AxisTableRenderer.prototype.unWireEvent = function (element) {\n EventHandler.remove(element, 'mouseover', this.updateDropIndicator);\n EventHandler.remove(element, 'mouseleave', this.updateDropIndicator);\n };\n AxisTableRenderer.prototype.updateDropIndicator = function (e) {\n var parentElement = this.parent.dialogRenderer.parentElement;\n if (this.parent.isDragging && e.target.classList.contains(cls.AXIS_CONTENT_CLASS) && e.type === 'mouseover') {\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n var element = [].slice.call(e.target.querySelectorAll('.' + cls.PIVOT_BUTTON_WRAPPER_CLASS));\n if (element.length > 0) {\n addClass([element[element.length - 1].querySelector('.' + cls.DROP_INDICATOR_CLASS + '-last')], cls.INDICATOR_HOVER_CLASS);\n }\n }\n else if (e.type === 'mouseleave') {\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n }\n };\n return AxisTableRenderer;\n}());\nexport { AxisTableRenderer };\n","import { createElement, Draggable, remove, extend } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, closest, Browser } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\n/**\n * Module to render Pivot button\n */\n/** @hidden */\nvar PivotButton = /** @class */ (function () {\n /** Constructor for render module */\n function PivotButton(parent) {\n this.parent = parent;\n this.parent.pivotButtonModule = this;\n this.addEventListener();\n }\n /* tslint:disable */\n PivotButton.prototype.renderPivotButton = function (args) {\n var field = extend([], args.field, null, true);\n var axis = args.axis;\n var axisElement;\n var valuePos = -1;\n var showValuesButton = (this.parent.getModuleName() == \"pivotfieldlist\" &&\n this.parent.pivotGridModule) ?\n this.parent.pivotGridModule.showValuesButton : this.parent.showValuesButton;\n if (((this.parent.dataSource.valueAxis === 'row' && args.axis === 'rows') ||\n (this.parent.dataSource.valueAxis === 'column' && args.axis === 'columns')) && showValuesButton && this.parent.dataSource.values.length > 1) {\n valuePos = field.length;\n field.push({\n name: this.parent.localeObj.getConstant('values'), caption: this.parent.localeObj.getConstant('values'),\n axis: args.axis\n });\n }\n this.parentElement = this.parent.getModuleName() === 'pivotview' ? this.parent.element :\n document.getElementById(this.parent.element.id + '_Wrapper');\n if (this.parent.getModuleName() === 'pivotfieldlist') {\n this.parentElement = document.getElementById(this.parent.element.id + '_Wrapper');\n if (this.parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-' + axis)) {\n var axisPrompt = this.parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-' + axis)\n .querySelector('.' + cls.AXIS_PROMPT_CLASS);\n if (field.length === 0) {\n removeClass([axisPrompt], cls.ICON_DISABLE);\n }\n else {\n addClass([axisPrompt], cls.ICON_DISABLE);\n }\n axisElement =\n this.parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-' + axis).querySelector('.' + cls.AXIS_CONTENT_CLASS);\n }\n else {\n return;\n }\n }\n else {\n this.parentElement = this.parent.element;\n axisElement = this.parentElement.querySelector('.e-group-' + axis);\n }\n if (axisElement) {\n if (this.parent.getModuleName() === 'pivotview' && field.length === 0) {\n var axisPrompt = createElement('span', {\n className: cls.AXIS_PROMPT_CLASS,\n innerHTML: axis === 'rows' ? this.parent.localeObj.getConstant('rowAxisPrompt') :\n axis === 'columns' ? this.parent.localeObj.getConstant('columnAxisPrompt') :\n axis === 'values' ? this.parent.localeObj.getConstant('valueAxisPrompt') :\n this.parent.localeObj.getConstant('filterAxisPrompt')\n });\n axisElement.appendChild(axisPrompt);\n }\n else {\n for (var i = 0, cnt = field.length; i < cnt; i++) {\n var buttonWrapper = createElement('div', {\n className: cls.PIVOT_BUTTON_WRAPPER_CLASS + (i === 0 ? ' e-first-btn' : ''),\n attrs: { 'data-tag': axis + ':' + field[i].name }\n });\n var buttonElement = createElement('div', {\n id: field[i].name, className: cls.PIVOT_BUTTON_CLASS,\n attrs: {\n 'data-uid': field[i].name, 'tabindex': '0', 'isvalue': i === valuePos ? 'true' : 'false',\n 'aria-disabled': 'false', 'aria-label': field[i].caption ? field[i].caption : field[i].name\n }\n });\n var dropIndicatorElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.DROP_INDICATOR_CLASS\n });\n var dropLastIndicatorElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.DROP_INDICATOR_CLASS + '-last'\n });\n var dragWrapper = this.createButtonDragIcon(buttonElement);\n var contentElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false', 'oncontextmenu': 'return false;',\n 'data-type': valuePos === i ? '' : this.parent.engineModule.fieldList[field[i].name].aggregateType\n },\n className: cls.PIVOT_BUTTON_CONTENT_CLASS,\n innerHTML: field[i].caption ? field[i].caption : field[i].name\n });\n buttonElement.appendChild(contentElement);\n if (['filters', 'values'].indexOf(axis) === -1 && valuePos !== i) {\n this.createSortOption(buttonElement, field[i].name);\n }\n if (axis !== 'values' && valuePos !== i) {\n this.createFilterOption(buttonElement, field[i].name);\n }\n var removeElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.ICON + ' ' + cls.REMOVE_CLASS\n });\n if (this.parent.getModuleName() === 'pivotview') {\n if (this.parent.groupingBarSettings.showRemoveIcon) {\n removeClass([removeElement], cls.ICON_DISABLE);\n }\n else {\n addClass([removeElement], cls.ICON_DISABLE);\n }\n }\n buttonElement.appendChild(removeElement);\n buttonWrapper.appendChild(dropIndicatorElement);\n buttonWrapper.appendChild(buttonElement);\n buttonWrapper.appendChild(dropLastIndicatorElement);\n axisElement.appendChild(buttonWrapper);\n var pivotButton = new Button({ enableRtl: this.parent.enableRtl });\n pivotButton.appendTo(buttonElement);\n this.unWireEvent(buttonWrapper, i === valuePos ? 'values' : axis);\n this.wireEvent(buttonWrapper, i === valuePos ? 'values' : axis);\n if ((this.parent.getModuleName() === 'pivotview' && !this.parent.isAdaptive) ||\n this.parent.getModuleName() === 'pivotfieldlist') {\n this.createDraggable(this.parent.getModuleName() === 'pivotview' ? contentElement : dragWrapper);\n }\n }\n }\n }\n else {\n return;\n }\n };\n PivotButton.prototype.createDraggable = function (target) {\n this.draggable = new Draggable(target, {\n clone: true,\n enableTailMode: true,\n enableAutoScroll: true,\n helper: this.createDragClone.bind(this),\n dragStart: this.onDragStart.bind(this),\n drag: this.onDragging.bind(this),\n dragStop: this.onDragStop.bind(this)\n });\n };\n PivotButton.prototype.createButtonDragIcon = function (pivotButton) {\n var dragWrapper = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' }\n });\n var dragElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false'\n },\n className: cls.ICON + ' ' + cls.DRAG_CLASS\n });\n dragWrapper.appendChild(dragElement);\n pivotButton.appendChild(dragWrapper);\n return dragWrapper;\n };\n PivotButton.prototype.createSortOption = function (pivotButton, fieldName) {\n var sortCLass = this.parent.engineModule.fieldList[fieldName].sort === 'Descending' ? cls.SORT_DESCEND_CLASS : '';\n var spanElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.ICON + ' ' + cls.SORT_CLASS + ' ' + sortCLass\n });\n if (this.parent.dataSource.enableSorting) {\n removeClass([spanElement], cls.ICON_DISABLE);\n }\n else {\n addClass([spanElement], cls.ICON_DISABLE);\n }\n if (this.parent.getModuleName() === 'pivotview') {\n if (this.parent.groupingBarSettings.showSortIcon) {\n removeClass([spanElement], cls.ICON_DISABLE);\n }\n else {\n addClass([spanElement], cls.ICON_DISABLE);\n }\n }\n pivotButton.appendChild(spanElement);\n return spanElement;\n };\n PivotButton.prototype.createFilterOption = function (pivotButton, fieldName) {\n var filterCLass = this.parent.engineModule.fieldList[fieldName].filter.length === 0 ?\n !this.parent.engineModule.fieldList[fieldName].isExcelFilter ? cls.FILTER_CLASS : cls.FILTERED_CLASS : cls.FILTERED_CLASS;\n var spanElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false'\n },\n className: cls.FILTER_COMMON_CLASS + ' ' + cls.ICON + ' ' + filterCLass\n });\n if (this.parent.getModuleName() === 'pivotview') {\n if (this.parent.groupingBarSettings.showFilterIcon) {\n removeClass([spanElement], cls.ICON_DISABLE);\n }\n else {\n addClass([spanElement], cls.ICON_DISABLE);\n }\n }\n pivotButton.appendChild(spanElement);\n return spanElement;\n };\n PivotButton.prototype.createDragClone = function (args) {\n var element = closest(args.element, '.' + cls.PIVOT_BUTTON_CLASS);\n var cloneElement = createElement('div', {\n id: this.parent.element.id + '_DragClone',\n className: cls.DRAG_CLONE_CLASS\n });\n var contentElement = createElement('span', {\n className: cls.TEXT_CONTENT_CLASS,\n innerHTML: element.textContent\n });\n cloneElement.appendChild(contentElement);\n document.body.appendChild(cloneElement);\n return cloneElement;\n };\n PivotButton.prototype.onDragStart = function (e) {\n this.parent.isDragging = true;\n var element = closest(e.element, '.' + cls.PIVOT_BUTTON_CLASS);\n var data = this.parent.engineModule.fieldList[element.getAttribute('data-uid')];\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n addClass([element], cls.SELECTED_NODE_CLASS);\n if (data && data.aggregateType === 'CalculatedField') {\n for (var _i = 0, axis_1 = axis; _i < axis_1.length; _i++) {\n var axisContent = axis_1[_i];\n addClass([this.parentElement.querySelector('.' + axisContent)], cls.NO_DRAG_CLASS);\n }\n }\n };\n PivotButton.prototype.onDragging = function (e) {\n this.draggable.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20, } });\n // if (closest(e.event.srcElement, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS)) {\n // let droppableElement: HTMLElement = closest(e.event.srcElement, '.' + cls.DROPPABLE_CLASS) as HTMLElement;\n // let buttonElement: HTMLElement = closest(e.event.srcElement, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS) as HTMLElement;\n // if (droppableElement.offsetHeight < droppableElement.scrollHeight) {\n // let scrollPosition: number = (droppableElement.scrollHeight - buttonElement.offsetTop);\n // if (buttonElement.offsetTop >= droppableElement.offsetTop && scrollPosition > droppableElement.scrollTop) {\n // droppableElement.scrollTop += Math.abs(buttonElement.offsetHeight);\n // } else if (buttonElement.offsetTop <= droppableElement.offsetTop) {\n // droppableElement.scrollTop -= Math.abs(buttonElement.offsetHeight);\n // }\n // }\n // }\n };\n PivotButton.prototype.onDragStop = function (args) {\n this.parent.isDragging = false;\n var element = closest(args.element, '.' + cls.PIVOT_BUTTON_CLASS);\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS)), cls.SELECTED_NODE_CLASS);\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n for (var _i = 0, axis_2 = axis; _i < axis_2.length; _i++) {\n var axisContent = axis_2[_i];\n removeClass([this.parentElement.querySelector('.' + axisContent)], cls.NO_DRAG_CLASS);\n }\n if (this.parent.pivotCommon.filterDialog.dialogPopUp) {\n this.parent.pivotCommon.filterDialog.dialogPopUp.close();\n }\n if (document.getElementById(this.parent.element.id + '_DragClone')) {\n remove(document.getElementById(this.parent.element.id + '_DragClone'));\n }\n if (!this.isButtonDropped(args.target, element)) {\n return;\n }\n this.parent.pivotCommon.dataSourceUpdate.control = this.parent.getModuleName() === 'pivotview' ? this.parent :\n (this.parent.pivotGridModule ? this.parent.pivotGridModule : this.parent);\n if (this.parent.pivotCommon.nodeStateModified.onStateModified(args, element.id)) {\n this.parent.updateDataSource();\n this.parent.axisFieldModule.render();\n }\n };\n PivotButton.prototype.isButtonDropped = function (dropTarget, target) {\n var axisPanel = closest(target, '.' + cls.DROPPABLE_CLASS);\n var droppableElement = closest(dropTarget, '.' + cls.DROPPABLE_CLASS);\n var isDropped = true;\n if (axisPanel === droppableElement) {\n var pivotButtons = [].slice.call(axisPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var droppableTarget = closest(dropTarget, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n var sourcePosition = void 0;\n var droppedPosition = -1;\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === target.id) {\n sourcePosition = i;\n }\n if (droppableTarget) {\n var droppableButton = droppableTarget.querySelector('.' + cls.PIVOT_BUTTON_CLASS);\n if (pivotButtons[i].id === droppableButton.id) {\n droppedPosition = i;\n }\n }\n }\n if (sourcePosition === droppedPosition || (sourcePosition === (pivotButtons.length - 1) && droppedPosition === -1)) {\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n isDropped = false;\n }\n }\n return isDropped;\n };\n PivotButton.prototype.updateSorting = function (args) {\n if (((this.parent.getModuleName() === 'pivotview' && this.parent.enableValueSorting) ||\n (this.parent.getModuleName() === 'pivotfieldlist' && this.parent.pivotGridModule !== undefined &&\n this.parent.pivotGridModule.enableValueSorting)) &&\n args.target.parentElement.parentElement.getAttribute('data-tag').split(':')[0] === 'rows') {\n this.parent.dataSource.valueSortSettings.headerText = '';\n }\n this.parent.pivotCommon.eventBase.updateSorting(args);\n this.parent.updateDataSource(true);\n };\n PivotButton.prototype.updateFiltering = function (args) {\n this.parent.pivotCommon.eventBase.updateFiltering(args);\n var target = args.target;\n var fieldName = target.parentElement.id;\n this.dialogPopUp = this.parent.pivotCommon.filterDialog.dialogPopUp;\n this.memberTreeView = this.parent.pivotCommon.filterDialog.memberTreeView;\n this.parent.pivotCommon.filterDialog.memberTreeView.nodeChecked = this.nodeStateModified.bind(this);\n this.parent.pivotCommon.filterDialog.allMemberSelect.nodeChecked = this.nodeStateModified.bind(this);\n this.bindDialogEvents(fieldName);\n };\n PivotButton.prototype.bindDialogEvents = function (fieldName) {\n var _this = this;\n if (this.parent.pivotCommon.filterDialog.allowExcelLikeFilter && this.parent.pivotCommon.filterDialog.tabObj) {\n this.updateDialogButtonEvents(this.parent.pivotCommon.filterDialog.tabObj.selectedItem, fieldName);\n this.dialogPopUp.buttons[1].click = this.ClearFilter.bind(this);\n this.parent.pivotCommon.filterDialog.tabObj.selected = function (e) {\n _this.updateDialogButtonEvents(e.selectedIndex, fieldName);\n removeClass([].slice.call(_this.dialogPopUp.element.querySelectorAll('.e-selected-tab')), 'e-selected-tab');\n if (e.selectedIndex > 0) {\n /* tslint:disable-next-line:max-line-length */\n addClass([_this.dialogPopUp.element.querySelector('.e-filter-div-content' + '.' + (e.selectedIndex === 1 && _this.parent.dataSource.allowLabelFilter ? 'e-label-filter' : 'e-value-filter'))], 'e-selected-tab');\n }\n };\n }\n else {\n this.updateDialogButtonEvents(0, fieldName);\n }\n };\n PivotButton.prototype.updateDialogButtonEvents = function (index, fieldName) {\n this.dialogPopUp.buttons[0].click = (index === 0 ?\n this.updateFilterState.bind(this, fieldName) : this.updateCustomFilter.bind(this));\n };\n PivotButton.prototype.updateCustomFilter = function (args) {\n var dialogElement = this.dialogPopUp.element.querySelector('.e-selected-tab');\n var fieldName = dialogElement.getAttribute('data-fieldname');\n var filterType = dialogElement.getAttribute('data-type');\n var measure = dialogElement.getAttribute('data-measure');\n var operator = dialogElement.getAttribute('data-operator');\n var operand1 = dialogElement.getAttribute('data-value1');\n var operand2 = dialogElement.getAttribute('data-value2');\n var type = ((filterType === 'value') ? 'Value' : (filterType === 'date') ? 'Date' :\n (filterType === 'number') ? 'Number' : 'Label');\n var filterItem = {\n name: fieldName,\n type: type,\n measure: measure,\n condition: operator,\n value1: filterType === 'date' ? new Date(operand1) : operand1,\n value2: filterType === 'date' ? new Date(operand2) : operand2\n };\n var filterObject = this.parent.pivotCommon.eventBase.getFilterItemByName(fieldName);\n if (filterObject) {\n // this.removeDataSourceSettings(fieldName);\n filterObject = filterObject.properties ?\n filterObject.properties : filterObject;\n filterObject.type = type;\n filterObject.measure = measure;\n filterObject.condition = operator;\n filterObject.value1 = filterType === 'date' ? new Date(operand1) : operand1;\n filterObject.value2 = filterType === 'date' ? new Date(operand2) : operand2;\n }\n else {\n this.parent.dataSource.filterSettings.push(filterItem);\n }\n this.dialogPopUp.hide();\n this.refreshPivotButtonState(fieldName, true);\n this.parent.updateDataSource(true);\n };\n PivotButton.prototype.ClearFilter = function (e) {\n var dialogElement = this.dialogPopUp.element;\n var fieldName = dialogElement.getAttribute('data-fieldname');\n this.dialogPopUp.hide();\n this.removeDataSourceSettings(fieldName);\n this.refreshPivotButtonState(fieldName, false);\n this.parent.updateDataSource(true);\n };\n PivotButton.prototype.removeButton = function (args) {\n var target = args.target;\n var fieldName = target.parentElement.id;\n if (target.parentElement.getAttribute('isvalue') === 'true') {\n this.parent.setProperties({ dataSource: { values: [] } }, true);\n }\n else {\n this.parent.pivotCommon.dataSourceUpdate.removeFieldFromReport(fieldName);\n }\n if (this.parent.getModuleName() === 'pivotfieldlist') {\n this.parent.axisFieldModule.render();\n }\n this.parent.updateDataSource();\n };\n PivotButton.prototype.nodeStateModified = function (args) {\n var target = args.node.parentElement.parentElement;\n if (target.getAttribute('data-uid') === 'all') {\n this.memberTreeView.nodeChecked = null;\n if (args.action === 'check') {\n this.memberTreeView.checkAll();\n }\n else {\n this.memberTreeView.uncheckAll();\n }\n this.memberTreeView.nodeChecked = this.nodeStateModified.bind(this);\n }\n this.parent.pivotCommon.filterDialog.updateCheckedState();\n };\n PivotButton.prototype.updateFilterState = function (fieldName, args) {\n var list = [].slice.call(this.memberTreeView.element.querySelectorAll('li'));\n var unCheckedNodeCount = 0;\n var filterItem = { items: [], name: fieldName, type: 'Include' };\n for (var i = 0, cnt = list.length; i < cnt; i++) {\n if (list[i].querySelector('.' + cls.CHECK_BOX_FRAME_CLASS).classList.contains(cls.NODE_CHECK_CLASS)) {\n filterItem.items.push(list[i].getAttribute('data-uid'));\n }\n else {\n unCheckedNodeCount = unCheckedNodeCount + 1;\n }\n }\n var filterObject = this.parent.pivotCommon.eventBase.getFilterItemByName(fieldName);\n if (filterObject) {\n filterObject = filterObject.properties ?\n filterObject.properties : filterObject;\n filterObject.items = filterItem.items;\n filterObject.type = filterItem.type;\n }\n else {\n this.parent.dataSource.filterSettings.push(filterItem);\n }\n this.dialogPopUp.hide();\n this.refreshPivotButtonState(fieldName, (unCheckedNodeCount > 0) ? true : false);\n if (unCheckedNodeCount === 0) {\n this.removeDataSourceSettings(fieldName);\n }\n this.parent.updateDataSource(true);\n };\n PivotButton.prototype.refreshPivotButtonState = function (fieldName, isFiltered) {\n var pivotButtons = [].slice.call(this.parentElement.querySelectorAll('.e-pivot-button'));\n var selectedButton;\n for (var _i = 0, pivotButtons_1 = pivotButtons; _i < pivotButtons_1.length; _i++) {\n var item = pivotButtons_1[_i];\n if (item.getAttribute('data-uid') === fieldName) {\n selectedButton = item.querySelector('.' + cls.FILTER_COMMON_CLASS);\n break;\n }\n }\n if (isFiltered) {\n removeClass([selectedButton], cls.FILTER_CLASS);\n addClass([selectedButton], cls.FILTERED_CLASS);\n }\n else {\n removeClass([selectedButton], cls.FILTERED_CLASS);\n addClass([selectedButton], cls.FILTER_CLASS);\n }\n };\n PivotButton.prototype.removeDataSourceSettings = function (fieldName) {\n var filterSettings = this.parent.dataSource.filterSettings;\n for (var len = 0, lnt = filterSettings.length; len < lnt; len++) {\n if (filterSettings[len].name === fieldName) {\n filterSettings.splice(len, 1);\n break;\n }\n }\n };\n PivotButton.prototype.updateDropIndicator = function (e) {\n if (this.parent.isDragging) {\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n var element = closest(e.target, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n addClass([element.querySelector('.' + cls.DROP_INDICATOR_CLASS)], cls.INDICATOR_HOVER_CLASS);\n }\n };\n PivotButton.prototype.wireEvent = function (element, axis) {\n EventHandler.add(element, 'mouseover', this.updateDropIndicator, this);\n if (['filters', 'values'].indexOf(axis) === -1) {\n EventHandler.add(element.querySelector('.' + cls.SORT_CLASS), 'click', this.updateSorting, this);\n }\n if (axis !== 'values') {\n EventHandler.add(element.querySelector('.' + cls.FILTER_COMMON_CLASS), 'click', this.updateFiltering, this);\n }\n EventHandler.add(element.querySelector('.' + cls.REMOVE_CLASS), 'click', this.removeButton, this);\n };\n PivotButton.prototype.unWireEvent = function (element, axis) {\n EventHandler.remove(element, 'mouseover', this.updateDropIndicator);\n if (['filters', 'values'].indexOf(axis) === -1) {\n EventHandler.remove(element.querySelector('.' + cls.SORT_CLASS), 'click', this.updateSorting);\n }\n if (axis !== 'values') {\n EventHandler.remove(element.querySelector('.' + cls.FILTER_COMMON_CLASS), 'click', this.updateFiltering);\n }\n EventHandler.remove(element.querySelector('.' + cls.REMOVE_CLASS), 'click', this.removeButton);\n };\n /**\n * @hidden\n */\n PivotButton.prototype.addEventListener = function () {\n this.handlers = {\n load: this.renderPivotButton\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.pivotButtonUpdate, this.handlers.load, this);\n };\n /**\n * @hidden\n */\n PivotButton.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pivotButtonUpdate, this.handlers.load);\n };\n /**\n * To destroy the pivot button event listener\n * @return {void}\n * @hidden\n */\n PivotButton.prototype.destroy = function () {\n this.removeEventListener();\n };\n return PivotButton;\n}());\nexport { PivotButton };\n","import * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\nimport { PivotButton } from '../../common/actions/pivot-button';\n/**\n * Module to render Axis Fields\n */\n/** @hidden */\nvar AxisFieldRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function AxisFieldRenderer(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the pivot button rendering\n * @returns void\n * @private\n */\n AxisFieldRenderer.prototype.render = function () {\n this.pivotButton = new PivotButton(this.parent);\n this.createPivotButtons();\n };\n AxisFieldRenderer.prototype.createPivotButtons = function () {\n var rows = this.parent.dataSource.rows;\n var columns = this.parent.dataSource.columns;\n var values = this.parent.dataSource.values;\n var filters = this.parent.dataSource.filters;\n var fields = [rows, columns, values, filters];\n var parentElement = this.parent.dialogRenderer.parentElement;\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-filters')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-filters').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-rows')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-rows').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-columns')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-columns').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-values')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-values').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n var axis = ['rows', 'columns', 'values', 'filters'];\n for (var len = 0, lnt = fields.length; len < lnt; len++) {\n if (fields[len]) {\n var args = {\n field: fields[len],\n axis: axis[len].toString()\n };\n this.parent.notify(events.pivotButtonUpdate, args);\n }\n }\n };\n return AxisFieldRenderer;\n}());\nexport { AxisFieldRenderer };\n","import { DialogRenderer } from '../renderer/dialog-renderer';\nimport { TreeViewRenderer } from '../renderer/tree-renderer';\nimport { AxisTableRenderer } from '../renderer/axis-table-renderer';\nimport { AxisFieldRenderer } from './axis-field-renderer';\n/**\n * Module to render Pivot Table component\n */\n/** @hidden */\nvar Render = /** @class */ (function () {\n /** Constructor for render module */\n function Render(parent) {\n this.parent = parent;\n this.parent.dialogRenderer = new DialogRenderer(this.parent);\n this.parent.treeViewModule = new TreeViewRenderer(this.parent);\n this.parent.axisTableModule = new AxisTableRenderer(this.parent);\n this.parent.axisFieldModule = new AxisFieldRenderer(this.parent);\n }\n /**\n * Initialize the pivot table rendering\n * @returns void\n * @private\n */\n Render.prototype.render = function () {\n this.parent.dialogRenderer.render();\n if (!this.parent.isAdaptive) {\n this.parent.treeViewModule.render();\n }\n this.parent.axisTableModule.render();\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, Event, Component, Internationalization, extend } from '@syncfusion/ej2-base';\nimport { L10n, remove, addClass, Browser, Complex } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, removeClass } from '@syncfusion/ej2-base';\nimport { PivotEngine } from '../../base/engine';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { PivotCommon } from '../../common/base/pivot-common';\nimport { Render } from '../renderer/renderer';\nimport { DataSource } from '../../pivotview/model/dataSource';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/**\n * Represents the PivotFieldList component.\n * ```html\n *
    \n * \n * ```\n */\nvar PivotFieldList = /** @class */ (function (_super) {\n __extends(PivotFieldList, _super);\n /**\n * Constructor for creating the widget\n * @param {PivotFieldListModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function PivotFieldList(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n PivotFieldList.prototype.requiredModules = function () {\n var modules = [];\n if (this.allowCalculatedField) {\n modules.push({ args: [this], member: 'calculatedfield' });\n }\n return modules;\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n PivotFieldList.prototype.preRender = function () {\n this.isAdaptive = Browser.isDevice;\n this.globalize = new Internationalization(this.locale);\n this.renderModule = new Render(this);\n this.defaultLocale = {\n staticFieldList: 'Pivot Field List',\n fieldList: 'Field List',\n dropFilterPrompt: 'Drop filter here',\n dropColPrompt: 'Drop column here',\n dropRowPrompt: 'Drop row here',\n dropValPrompt: 'Drop value here',\n addPrompt: 'Add field here',\n adaptiveFieldHeader: 'Choose field',\n centerHeader: 'Drag fields between axes below:',\n add: 'add',\n drag: 'Drag',\n filter: 'Filter',\n filtered: 'Filtered',\n sort: 'Sort',\n remove: 'Remove',\n filters: 'Filters',\n rows: 'Rows',\n columns: 'Columns',\n values: 'Values',\n calculatedField: 'Calculated Field',\n createCalculatedField: 'Create Calculated Field',\n fieldName: 'Enter the field name',\n error: 'Error',\n invalidFormula: 'Invalid formula.',\n dropText: 'Example: (\"Sum(Order_Count)\" + \"Sum(In_Stock)\") * 250',\n dropTextMobile: 'Add fields and edit formula here.',\n dropAction: 'Calculated field cannot be place in any other region except value axis.',\n search: 'Search',\n close: 'Close',\n cancel: 'Cancel',\n delete: 'Delete',\n alert: 'Alert',\n warning: 'Warning',\n ok: 'OK',\n sum: 'Sum',\n average: 'Average',\n count: 'Count',\n min: 'Min',\n max: 'Max',\n allFields: 'All Fields',\n formula: 'Formula',\n fieldExist: 'A field already exists in this name. Please enter a different name.',\n confirmText: 'A calculation field already exists in this name. Do you want to replace it?',\n noMatches: 'No matches',\n format: 'Summaries values by',\n edit: 'Edit',\n clear: 'Clear',\n formulaField: 'Drag and drop fields to formula',\n dragField: 'Drag field to formula',\n clearFilter: 'Clear',\n by: 'by',\n enterValue: 'Enter value',\n chooseDate: 'Enter date',\n /* tslint:disable */\n Equals: 'Equals',\n DoesNotEquals: 'Does Not Equal',\n BeginWith: 'Begins With',\n DoesNotBeginWith: 'Does Not Begin With',\n EndsWith: 'Ends With',\n DoesNotEndsWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContains: 'Does Not Contain',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqualTo: 'Greater Than Or Equal To',\n LessThan: 'Less Than',\n LessThanOrEqualTo: 'Less Than Or Equal To',\n Between: 'Between',\n NotBetween: 'Not Between',\n Before: 'Before',\n BeforeOrEqualTo: 'Before Or Equal To',\n After: 'After',\n AfterOrEqualTo: 'After Or Equal To',\n member: 'Member',\n label: 'Label',\n date: 'Date',\n value: 'Value',\n labelTextContent: 'Show the items for which the label',\n dateTextContent: 'Show the items for which the date',\n valueTextContent: 'Show the items for which',\n And: 'and',\n /* tslint:enable */\n apply: 'APPLY'\n };\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.isDragging = false;\n this.captionData = [];\n this.wireEvent();\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n PivotFieldList.prototype.render = function () {\n this.trigger(events.load, { 'dataSource': this.dataSource });\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.notify(events.initialLoad, {});\n };\n /**\n * Binding events to the Pivot Field List element.\n * @hidden\n */\n PivotFieldList.prototype.wireEvent = function () {\n this.on(events.initialLoad, this.generateData, this);\n this.on(events.dataReady, this.fieldListRender, this);\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n PivotFieldList.prototype.unWireEvent = function () {\n if (this.pivotGridModule && this.pivotGridModule.isDestroyed) {\n return;\n }\n this.off(events.initialLoad, this.generateData);\n this.off(events.dataReady, this.fieldListRender);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n * @hidden\n */\n PivotFieldList.prototype.getPersistData = function () {\n var keyEntity = ['dataSource'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n PivotFieldList.prototype.getModuleName = function () {\n return 'pivotfieldlist';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n PivotFieldList.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 'locale':\n this.refresh();\n break;\n case 'enableRtl':\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 }\n if (requireRefresh) {\n this.fieldListRender();\n }\n }\n };\n PivotFieldList.prototype.generateData = function () {\n this.pivotFieldList = {};\n if (this.dataSource && this.dataSource.data) {\n this.trigger(events.enginePopulating, { 'dataSource': this.dataSource });\n var pageSettings = this.pivotGridModule ? this.pivotGridModule.pageSettings : undefined;\n var enableValueSorting = this.pivotGridModule ? this.pivotGridModule.enableValueSorting : undefined;\n this.engineModule = new PivotEngine(this.dataSource, '', undefined, pageSettings, enableValueSorting);\n this.pivotFieldList = this.engineModule.fieldList;\n var eventArgs = {\n pivotFieldList: this.pivotFieldList,\n pivotValues: this.engineModule.pivotValues\n };\n this.trigger(events.enginePopulated, eventArgs);\n }\n this.notify(events.dataReady, {});\n this.trigger(events.dataBound);\n };\n PivotFieldList.prototype.fieldListRender = function () {\n this.element.innerHTML = '';\n if (this.renderMode === 'Popup' && this.dialogRenderer.fieldListDialog && !this.dialogRenderer.fieldListDialog.isDestroyed) {\n this.dialogRenderer.fieldListDialog.destroy();\n remove(document.getElementById(this.element.id + '_Wrapper'));\n }\n this.renderModule.render();\n this.fieldListSpinnerElement = this.renderMode === 'Popup' ?\n this.dialogRenderer.fieldListDialog.element : this.element.querySelector('.e-pivotfieldlist-wrapper');\n createSpinner({ target: this.fieldListSpinnerElement }, this.createElement);\n var args = {\n pivotEngine: this.engineModule,\n dataSource: this.dataSource,\n id: this.element.id,\n element: document.getElementById(this.element.id + '_Wrapper'),\n moduleName: this.getModuleName(),\n enableRtl: this.enableRtl,\n isAdaptive: this.isAdaptive,\n renderMode: this.renderMode,\n localeObj: this.localeObj\n };\n this.pivotCommon = new PivotCommon(args);\n };\n PivotFieldList.prototype.getFieldCaption = function (dataSource) {\n this.getFields(dataSource);\n if (this.captionData.length > 0) {\n var lnt = this.captionData.length;\n while (lnt--) {\n if (this.captionData[lnt]) {\n for (var _i = 0, _a = this.captionData[lnt]; _i < _a.length; _i++) {\n var item = _a[_i];\n var obj = item.properties;\n if (obj) {\n if (this.engineModule.fieldList[obj.name] && obj.caption) {\n this.engineModule.fieldList[obj.name].caption = obj.caption;\n }\n else {\n this.engineModule.fieldList[obj.name].caption = obj.name;\n }\n }\n }\n }\n }\n }\n else {\n return;\n }\n };\n PivotFieldList.prototype.getFields = function (dataSource) {\n var fieldSets = extend({}, dataSource, null, true);\n var obj = fieldSets.properties;\n this.captionData = [obj.rows, obj.columns, obj.values, obj.filters];\n };\n /**\n * Updates the PivotEngine using dataSource from Pivot Field List component.\n * @method updateDataSource\n * @return {void}\n * @hidden\n */\n PivotFieldList.prototype.updateDataSource = function (isTreeViewRefresh) {\n if (this.pivotGridModule) {\n showSpinner(this.pivotGridModule.element);\n }\n showSpinner(this.fieldListSpinnerElement);\n var pageSettings = this.pivotGridModule ? this.pivotGridModule.pageSettings : undefined;\n var enableValueSorting = this.pivotGridModule ? this.pivotGridModule.enableValueSorting : undefined;\n this.engineModule = new PivotEngine(this.dataSource, '', this.pivotFieldList, pageSettings, enableValueSorting);\n this.getFieldCaption(this.dataSource);\n var eventArgs = {\n dataSource: this.dataSource,\n pivotFieldList: this.pivotFieldList,\n pivotValues: this.engineModule.pivotValues\n };\n this.trigger(events.enginePopulated, eventArgs);\n this.pivotCommon.engineModule = this.engineModule;\n this.pivotCommon.dataSource = this.dataSource;\n this.pivotFieldList = this.engineModule.fieldList;\n if (!isTreeViewRefresh && this.treeViewModule.fieldTable && !this.isAdaptive) {\n this.notify(events.treeViewUpdate, {});\n }\n this.updateView(this.pivotGridModule);\n if (!this.pivotGridModule) {\n hideSpinner(this.fieldListSpinnerElement);\n }\n else {\n this.pivotGridModule.fieldListSpinnerElement = this.fieldListSpinnerElement;\n }\n };\n /**\n * Updates the Pivot Field List component using dataSource from PivotView component.\n * @method updateControl\n * @return {void}\n * @hidden\n */\n PivotFieldList.prototype.update = function (control) {\n if (control) {\n this.setProperties({ dataSource: control.dataSource }, true);\n this.engineModule = control.engineModule;\n this.pivotFieldList = control.engineModule.fieldList;\n this.pivotGridModule = control;\n this.getFieldCaption(control.dataSource);\n this.pivotCommon.engineModule = this.engineModule;\n this.pivotCommon.dataSource = this.dataSource;\n if (this.treeViewModule.fieldTable && !this.isAdaptive) {\n this.notify(events.treeViewUpdate, {});\n }\n this.axisFieldModule.render();\n }\n };\n /**\n * Updates the PivotView component using dataSource from Pivot Field List component.\n * @method refreshTargetControl\n * @return {void}\n * @hidden\n */\n PivotFieldList.prototype.updateView = function (control) {\n if (control) {\n control.setProperties({ dataSource: this.dataSource }, true);\n control.engineModule = this.engineModule;\n control.pivotValues = this.engineModule.pivotValues;\n control.dataBind();\n }\n };\n /**\n * Destroys the Field Table component.\n * @method destroy\n * @return {void}\n */\n PivotFieldList.prototype.destroy = function () {\n this.unWireEvent();\n if (this.treeViewModule) {\n this.treeViewModule.destroy();\n }\n if (this.pivotButtonModule) {\n this.pivotButtonModule.destroy();\n }\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n removeClass([this.element], cls.ROOT);\n removeClass([this.element], cls.RTL);\n removeClass([this.element], cls.DEVICE);\n if (this.renderMode === 'Popup') {\n if (this.dialogRenderer.fieldListDialog && !this.dialogRenderer.fieldListDialog.isDestroyed) {\n this.dialogRenderer.fieldListDialog.destroy();\n }\n if (document.getElementById(this.element.id + '_Wrapper')) {\n remove(document.getElementById(this.element.id + '_Wrapper'));\n }\n }\n };\n __decorate([\n Complex({}, DataSource)\n ], PivotFieldList.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Popup')\n ], PivotFieldList.prototype, \"renderMode\", void 0);\n __decorate([\n Property()\n ], PivotFieldList.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], PivotFieldList.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], PivotFieldList.prototype, \"allowCalculatedField\", void 0);\n __decorate([\n Property(false)\n ], PivotFieldList.prototype, \"showValuesButton\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"enginePopulating\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"enginePopulated\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"destroyed\", void 0);\n PivotFieldList = __decorate([\n NotifyPropertyChanges\n ], PivotFieldList);\n return PivotFieldList;\n}(Component));\nexport { PivotFieldList };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { Droppable, createElement, extend, remove, addClass, closest } from '@syncfusion/ej2-base';\nimport { prepend, append, KeyboardEvents, removeClass } from '@syncfusion/ej2-base';\nimport { Button, RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { MaskedTextBox } from '@syncfusion/ej2-inputs';\nimport * as cls from '../../common/base/css-constant';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport * as events from '../../common/base/constant';\nimport { Accordion } from '@syncfusion/ej2-navigations';\n/**\n * Module to render Calculated Field Dialog\n */\nvar COUNT = 'Count';\nvar AVG = 'Avg';\nvar MIN = 'Min';\nvar MAX = 'Max';\nvar SUM = 'Sum';\nvar CALC = 'CalculatedField';\nvar AGRTYPE = 'AggregateType';\n/** @hidden */\nvar CalculatedField = /** @class */ (function () {\n /** Constructor for calculatedfield module */\n function CalculatedField(parent) {\n this.parent = parent;\n this.existingReport = null;\n this.parent.calculatedFieldModule = this;\n this.removeEventListener();\n this.addEventListener();\n this.parentID = this.parent.element.id;\n this.dialog = null;\n this.inputObj = null;\n this.treeObj = null;\n this.droppable = null;\n this.menuObj = null;\n this.newFields = null;\n this.isFieldExist = true;\n this.formulaText = null;\n this.fieldText = null;\n this.isEdit = false;\n this.currentFieldName = null;\n this.confirmPopUp = null;\n }\n /**\n * To get module name.\n * @returns string\n */\n CalculatedField.prototype.getModuleName = function () {\n return 'calculatedfield';\n };\n CalculatedField.prototype.keyActionHandler = function (e) {\n var node = e.currentTarget.querySelector('.e-hover.e-node-focus');\n if (node) {\n switch (e.action) {\n case 'moveRight':\n this.displayMenu(node.previousSibling);\n break;\n case 'enter':\n var field = node.getAttribute('data-field');\n var type = node.getAttribute('data-type');\n var dropField = this.dialog.element.querySelector('#' + this.parentID + 'droppable');\n if (dropField.value === '') {\n if (type === CALC) {\n dropField.value = node.getAttribute('data-uid');\n }\n else {\n dropField.value = '\"' + type + '(' + field + ')' + '\"';\n }\n }\n else if (dropField.value !== '') {\n if (type === CALC) {\n dropField.value = dropField.value + node.getAttribute('data-uid');\n }\n else {\n dropField.value = dropField.value + '\"' + type + '(' + field + ')' + '\"';\n }\n }\n break;\n }\n }\n };\n /**\n * Trigger while click treeview icon.\n * @param {MouseEvent} e\n * @returns void\n */\n CalculatedField.prototype.fieldClickHandler = function (e) {\n var node = e.event.target.parentElement;\n if (e.event.target.classList.contains(cls.FORMAT) ||\n e.event.target.classList.contains(cls.CALC_EDIT) ||\n e.event.target.classList.contains(cls.CALC_EDITED)) {\n this.displayMenu(node.parentElement);\n }\n };\n /**\n * To display context menu.\n * @param {HTMLElement} node\n * @returns void\n */\n CalculatedField.prototype.displayMenu = function (node) {\n if (document.querySelector('.' + this.parentID + 'calculatedmenu') !== null &&\n node.querySelector('.e-list-icon').classList.contains(cls.ICON) &&\n !node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDITED) &&\n !node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDIT) && node.tagName === 'LI') {\n this.menuObj.close();\n this.curMenu = node.querySelector('.' + cls.LIST_TEXT_CLASS);\n this.openContextMenu();\n }\n else if (node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDIT) && node.tagName === 'LI') {\n addClass([node.querySelector('.e-list-icon')], cls.CALC_EDITED);\n removeClass([node.querySelector('.e-list-icon')], cls.CALC_EDIT);\n node.querySelector('.' + cls.CALC_EDITED).setAttribute('title', this.parent.localeObj.getConstant('clear'));\n this.isEdit = true;\n this.currentFieldName = node.getAttribute('data-field');\n this.inputObj.value = node.getAttribute('data-caption');\n this.dialog.element.querySelector('.' + cls.CALCINPUT).value = node.getAttribute('data-caption');\n document.querySelector('#' + this.parentID + 'droppable').value = node.getAttribute('data-uid');\n }\n else if (node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDITED) && node.tagName === 'LI') {\n addClass([node.querySelector('.e-list-icon')], cls.CALC_EDIT);\n removeClass([node.querySelector('.e-list-icon')], cls.CALC_EDITED);\n node.querySelector('.' + cls.CALC_EDIT).setAttribute('title', this.parent.localeObj.getConstant('edit'));\n this.isEdit = false;\n this.inputObj.value = '';\n this.dialog.element.querySelector('.' + cls.CALCINPUT).value = '';\n document.querySelector('#' + this.parentID + 'droppable').value = '';\n }\n };\n /**\n * To set position for context menu.\n * @returns void\n */\n CalculatedField.prototype.openContextMenu = function () {\n var pos = this.curMenu.getBoundingClientRect();\n if (this.parent.enableRtl) {\n this.menuObj.open(pos.top + 30, pos.left - 100);\n }\n else {\n this.menuObj.open(pos.top + 30, pos.left + 150);\n }\n };\n /**\n * Triggers while select menu.\n * @param {MenuEventArgs} menu\n * @returns void\n */\n CalculatedField.prototype.selectContextMenu = function (menu) {\n if (menu.element.textContent !== null) {\n var field = closest(this.curMenu, '.e-list-item').getAttribute('data-caption');\n closest(this.curMenu, '.e-list-item').setAttribute('data-type', menu.element.textContent);\n this.curMenu.textContent = field + ' (' + menu.element.textContent + ')';\n addClass([this.curMenu.parentElement.parentElement], ['e-node-focus', 'e-hover']);\n this.curMenu.parentElement.parentElement.setAttribute('tabindex', '-1');\n this.curMenu.parentElement.parentElement.focus();\n }\n };\n /**\n * To create context menu.\n * @returns void\n */\n CalculatedField.prototype.createMenu = function () {\n var menuItems = [\n {\n text: COUNT,\n },\n {\n text: AVG\n },\n {\n text: MIN\n },\n {\n text: MAX\n },\n {\n text: SUM\n }\n ];\n var menuOptions = {\n cssClass: this.parentID + 'calculatedmenu',\n items: menuItems,\n enableRtl: this.parent.enableRtl,\n beforeOpen: this.beforeMenuOpen.bind(this),\n select: this.selectContextMenu.bind(this)\n };\n this.parent.element.appendChild(createElement('ul', {\n id: this.parentID + 'contextmenu'\n }));\n this.menuObj = new Menu(menuOptions);\n this.menuObj.appendTo('#' + this.parentID + 'contextmenu');\n };\n /**\n * Triggers while click OK button.\n * @returns void\n */\n CalculatedField.prototype.applyFormula = function () {\n var currentObj = this;\n var isExist = false;\n removeClass([document.getElementById(this.parentID + 'ddlelement')], cls.EMPTY_FIELD);\n Object.keys(currentObj.parent.engineModule.fieldList).forEach(function (key, index) {\n if (currentObj.inputObj.value && currentObj.inputObj.value === key &&\n currentObj.parent.engineModule.fieldList[key].aggregateType !== 'CalculatedField') {\n isExist = true;\n }\n });\n if (isExist) {\n currentObj.parent.pivotCommon.errorDialog.createErrorDialog(currentObj.parent.localeObj.getConstant('error'), currentObj.parent.localeObj.getConstant('fieldExist'));\n return;\n }\n this.newFields = extend([], this.parent.dataSource.calculatedFieldSettings, null, true);\n this.existingReport = extend({}, this.parent.dataSource, null, true);\n var report = this.parent.dataSource;\n var dropField = document.querySelector('#' + this.parentID + 'droppable');\n if (this.inputObj.value !== null && this.inputObj.value !== '' && dropField.value !== '') {\n var field = {\n name: this.inputObj.value,\n type: 'CalculatedField'\n };\n var cField = {\n name: this.inputObj.value,\n formula: dropField.value\n };\n this.isFieldExist = true;\n if (!this.isEdit) {\n for (var i = 0; i < report.values.length; i++) {\n if (report.values[i].type === CALC && report.values[i].name === field.name) {\n for (var j = 0; j < report.calculatedFieldSettings.length; j++) {\n if (report.calculatedFieldSettings[j].name === field.name) {\n this.createConfirmDialog(currentObj.parent.localeObj.getConstant('alert'), currentObj.parent.localeObj.getConstant('confirmText'));\n return;\n }\n }\n this.isFieldExist = false;\n }\n }\n }\n else {\n for (var i = 0; i < report.values.length; i++) {\n if (report.values[i].type === CALC && this.currentFieldName !== null &&\n report.values[i].name === this.currentFieldName && this.isEdit) {\n for (var j = 0; j < report.calculatedFieldSettings.length; j++) {\n if (report.calculatedFieldSettings[j].name === this.currentFieldName) {\n report.values[i].caption = this.inputObj.value;\n report.calculatedFieldSettings[j].formula = dropField.value;\n this.parent.engineModule.fieldList[this.currentFieldName].caption = this.inputObj.value;\n this.isFieldExist = false;\n }\n }\n }\n }\n }\n if (this.isFieldExist) {\n report.values.push(field);\n report.calculatedFieldSettings.push(cField);\n }\n this.addFormula(report, field.name);\n }\n else {\n if (this.inputObj.value === null || this.inputObj.value === '') {\n addClass([document.getElementById(this.parentID + 'ddlelement')], cls.EMPTY_FIELD);\n document.getElementById(this.parentID + 'ddlelement').focus();\n }\n else {\n this.parent.pivotCommon.errorDialog.createErrorDialog(this.parent.localeObj.getConstant('error'), this.parent.localeObj.getConstant('invalidFormula'));\n }\n }\n };\n CalculatedField.prototype.addFormula = function (report, field) {\n try {\n this.parent.setProperties({ dataSource: report }, true);\n this.parent.updateDataSource(false);\n this.isEdit = false;\n if (this.dialog) {\n this.dialog.close();\n }\n else {\n this.inputObj.value = '';\n this.formulaText = null;\n this.fieldText = null;\n this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.CALCINPUT).value = '';\n this.parent.\n dialogRenderer.parentElement.querySelector('#' + this.parentID + 'droppable').value = '';\n }\n }\n catch (exception) {\n if (this.parent.engineModule.fieldList[field]) {\n delete this.parent.engineModule.fieldList[field];\n }\n this.parent.pivotCommon.errorDialog.createErrorDialog(this.parent.localeObj.getConstant('error'), this.parent.localeObj.getConstant('invalidFormula'));\n this.parent.setProperties({ dataSource: this.existingReport }, true);\n this.parent.updateDataSource(false);\n }\n };\n /**\n * To get treeview data\n * @param {PivotGrid|PivotFieldList} parent\n * @returns Object\n */\n CalculatedField.prototype.getFieldListData = function (parent) {\n var fields = [];\n Object.keys(parent.engineModule.fieldList).forEach(function (key) {\n var type = null;\n if (parent.engineModule.fieldList[key].type === 'string' || parent.engineModule.fieldList[key].type === 'include' ||\n parent.engineModule.fieldList[key].type === 'exclude') {\n type = COUNT;\n }\n else {\n type = parent.engineModule.fieldList[key].aggregateType !== undefined ?\n parent.engineModule.fieldList[key].aggregateType : SUM;\n }\n fields.push({\n index: parent.engineModule.fieldList[key].index,\n name: parent.engineModule.fieldList[key].caption + ' (' + type + ')',\n type: type,\n icon: cls.FORMAT + ' ' + cls.ICON,\n formula: parent.engineModule.fieldList[key].formula,\n field: key,\n caption: parent.engineModule.fieldList[key].caption ? parent.engineModule.fieldList[key].caption : key\n });\n });\n return fields;\n };\n /**\n * Triggers before menu opens.\n * @param {BeforeOpenCloseMenuEventArgs} args\n * @returns void\n */\n CalculatedField.prototype.beforeMenuOpen = function (args) {\n args.element.style.zIndex = (this.dialog.zIndex + 1).toString();\n args.element.style.display = 'inline';\n };\n /**\n * Trigger while drop node in formula field.\n * @param {DragAndDropEventArgs} args\n * @returns void\n */\n CalculatedField.prototype.fieldDropped = function (args) {\n args.cancel = true;\n var field = args.draggedNode.getAttribute('data-field');\n var type = args.draggedNode.getAttribute('data-type');\n var dropField = this.dialog.element.querySelector('#' + this.parentID + 'droppable');\n if (args.target.id === this.parentID + 'droppable' && dropField.value === '') {\n if (type === CALC) {\n dropField.value = args.draggedNodeData.id.toString();\n }\n else {\n dropField.value = '\"' + type + '(' + field + ')' + '\"';\n }\n dropField.focus();\n }\n else if (args.target.id === (this.parentID + 'droppable') && dropField.value !== '') {\n var textCovered = void 0;\n var cursorPos = dropField.selectionStart;\n var currentValue = dropField.value;\n var textBeforeText = currentValue.substring(0, cursorPos);\n var textAfterText = currentValue.substring(cursorPos, currentValue.length);\n if (type === CALC) {\n textCovered = textBeforeText + args.draggedNodeData.id.toString();\n dropField.value = textBeforeText + args.draggedNodeData.id.toString() + textAfterText;\n }\n else {\n textCovered = textBeforeText + '\"' + type + '(' + field + ')' + '\"';\n dropField.value = textBeforeText + '\"' + type + '(' + field + ')' + '\"' + textAfterText;\n }\n dropField.focus();\n dropField.setSelectionRange(textCovered.length, textCovered.length);\n }\n else {\n args.cancel = true;\n }\n };\n /**\n * To create dialog.\n * @returns void\n */\n CalculatedField.prototype.createDialog = function () {\n var _this = this;\n if (document.querySelector('#' + this.parentID + 'calculateddialog') !== null) {\n remove(document.querySelector('#' + this.parentID + 'calculateddialog'));\n }\n this.parent.element.appendChild(createElement('div', {\n id: this.parentID + 'calculateddialog',\n className: cls.CALCDIALOG\n }));\n this.dialog = new Dialog({\n allowDragging: true,\n position: { X: 'center', Y: 'center' },\n buttons: [\n {\n 'click': function () { return _this.applyFormula(); },\n buttonModel: {\n content: this.parent.localeObj.getConstant('ok'),\n isPrimary: true\n }\n },\n {\n 'click': function () {\n _this.dialog.close();\n _this.isEdit = false;\n },\n buttonModel: {\n content: this.parent.localeObj.getConstant('cancel')\n }\n }\n ],\n close: function (args) {\n if (_this.parent.getModuleName() === 'pivotfieldlist') {\n _this.parent.axisFieldModule.render();\n if (_this.parent.renderMode !== 'Fixed') {\n addClass([_this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n _this.parent.dialogRenderer.fieldListDialog.show();\n }\n }\n _this.treeObj.destroy();\n _this.dialog.destroy();\n _this.newFields = null;\n remove(document.getElementById(_this.parentID + 'calculateddialog'));\n remove(document.querySelector('.' + _this.parentID + 'calculatedmenu'));\n },\n beforeOpen: function (args) {\n _this.dialog.element.querySelector('.e-dlg-header').\n setAttribute('title', _this.parent.localeObj.getConstant('createCalculatedField'));\n },\n animationSettings: { effect: 'Zoom' },\n width: '25%',\n isModal: false,\n closeOnEscape: true,\n enableRtl: this.parent.enableRtl,\n showCloseIcon: true,\n header: this.parent.localeObj.getConstant('createCalculatedField'),\n target: document.body\n });\n this.dialog.appendTo('#' + this.parentID + 'calculateddialog');\n };\n /**\n * To render dialog elements.\n * @returns void\n */\n CalculatedField.prototype.renderDialogElements = function () {\n var outerDiv = createElement('div', { id: this.parentID + 'outerDiv', className: cls.CALCOUTERDIV });\n if (this.parent.getModuleName() === 'pivotfieldlist' && this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.FORMULA) !== null && this.parent.isAdaptive) {\n var accordDiv = createElement('div', { id: this.parentID + 'accordDiv', className: cls.CALCACCORD });\n outerDiv.appendChild(accordDiv);\n var buttonDiv = createElement('div', { id: this.parentID + 'buttonDiv', className: cls.CALCBUTTONDIV });\n var addBtn = createElement('button', {\n id: this.parentID + 'addBtn', innerHTML: 'ADD',\n className: cls.CALCADDBTN\n });\n var cancelBtn = createElement('button', {\n id: this.parentID + 'cancelBtn', innerHTML: 'CANCEL',\n className: cls.CALCCANCELBTN\n });\n buttonDiv.appendChild(cancelBtn);\n buttonDiv.appendChild(addBtn);\n outerDiv.appendChild(buttonDiv);\n }\n else {\n var inputDiv = createElement('div', { id: this.parentID + 'outerDiv', className: cls.CALCINPUTDIV });\n var inputObj = createElement('input', {\n id: this.parentID + 'ddlelement',\n attrs: { 'type': 'text', 'tabindex': '1' },\n className: cls.CALCINPUT\n });\n inputDiv.appendChild(inputObj);\n outerDiv.appendChild(inputDiv);\n if (!this.parent.isAdaptive) {\n var fieldTitle = createElement('div', {\n className: cls.PIVOT_ALL_FIELD_TITLE_CLASS,\n innerHTML: this.parent.localeObj.getConstant('formulaField')\n });\n outerDiv.appendChild(fieldTitle);\n }\n var wrapDiv = createElement('div', { id: this.parentID + 'control_wrapper', className: cls.TREEVIEWOUTER });\n wrapDiv.appendChild(createElement('div', { id: this.parentID + 'tree', className: cls.TREEVIEW }));\n outerDiv.appendChild(wrapDiv);\n if (!this.parent.isAdaptive) {\n var formulaTitle = createElement('div', {\n className: cls.PIVOT_FORMULA_TITLE_CLASS,\n innerHTML: this.parent.localeObj.getConstant('formula')\n });\n outerDiv.appendChild(formulaTitle);\n }\n var dropDiv = createElement('textarea', {\n id: this.parentID + 'droppable',\n className: cls.FORMULA,\n attrs: {\n 'placeholder': this.parent.isAdaptive ? this.parent.localeObj.getConstant('dropTextMobile') :\n this.parent.localeObj.getConstant('dropText')\n }\n });\n outerDiv.appendChild(dropDiv);\n if (this.parent.isAdaptive) {\n var buttonDiv = createElement('div', { id: this.parentID + 'buttonDiv', className: cls.CALCBUTTONDIV });\n var okBtn = createElement('button', {\n id: this.parentID + 'okBtn', innerHTML: this.parent.localeObj.getConstant('apply'),\n className: cls.CALCOKBTN\n });\n buttonDiv.appendChild(okBtn);\n outerDiv.appendChild(buttonDiv);\n }\n }\n return outerDiv;\n };\n /**\n * To create calculated field adaptive layout.\n * @returns void\n */\n CalculatedField.prototype.renderAdaptiveLayout = function () {\n if (document.querySelector('#' + this.parentID + 'droppable')) {\n this.formulaText = document.querySelector('#' + this.parentID + 'droppable').value;\n this.fieldText = this.inputObj.value;\n }\n this.renderMobileLayout(this.parent.dialogRenderer.adaptiveElement);\n };\n /**\n * To create treeview.\n * @returns void\n */\n CalculatedField.prototype.createTreeView = function () {\n var _this = this;\n this.treeObj = new TreeView({\n fields: { dataSource: this.getFieldListData(this.parent), id: 'formula', text: 'name', iconCss: 'icon' },\n allowDragAndDrop: true,\n enableRtl: this.parent.enableRtl,\n nodeCollapsing: function (args) {\n args.cancel = true;\n },\n nodeDragStart: function (args) {\n if (args.event.target.classList.contains(cls.DRAG_CLASS)) {\n var dragItem = document.querySelector('.e-drag-item.e-treeview');\n addClass([dragItem], cls.PIVOTCALC);\n dragItem.style.zIndex = (_this.dialog.zIndex + 1).toString();\n dragItem.style.display = 'inline';\n }\n else {\n args.cancel = true;\n }\n },\n nodeClicked: this.fieldClickHandler.bind(this),\n nodeDragStop: this.fieldDropped.bind(this),\n drawNode: this.drawTreeNode.bind(this),\n sortOrder: 'Ascending'\n });\n this.treeObj.appendTo('#' + this.parentID + 'tree');\n };\n /**\n * Trigger before treeview text append.\n * @param {DrawNodeEventArgs} args\n * @returns void\n */\n CalculatedField.prototype.drawTreeNode = function (args) {\n var field = args.nodeData.field;\n args.node.setAttribute('data-field', field);\n args.node.setAttribute('data-caption', args.nodeData.caption);\n args.node.setAttribute('data-type', args.nodeData.type);\n var dragElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false', 'title': this.parent.localeObj.getConstant('dragField') },\n className: cls.ICON + ' e-drag'\n });\n prepend([dragElement], args.node.querySelector('.' + cls.TEXT_CONTENT_CLASS));\n append([args.node.querySelector('.' + cls.FORMAT)], args.node.querySelector('.' + cls.TEXT_CONTENT_CLASS));\n if (this.parent.engineModule.fieldList[field].type !== 'number' &&\n this.parent.engineModule.fieldList[field].aggregateType !== CALC) {\n removeClass([args.node.querySelector('.' + cls.FORMAT)], cls.ICON);\n }\n else {\n args.node.querySelector('.' + cls.FORMAT).setAttribute('title', this.parent.localeObj.getConstant('format'));\n }\n if (this.parent.engineModule.fieldList[field].aggregateType === CALC) {\n args.node.querySelector('.' + cls.FORMAT).setAttribute('title', this.parent.localeObj.getConstant('edit'));\n addClass([args.node.querySelector('.' + cls.FORMAT)], cls.CALC_EDIT);\n removeClass([args.node.querySelector('.' + cls.FORMAT)], cls.FORMAT);\n }\n };\n /**\n * To create radio buttons.\n * @param {string} key\n * @returns HTMLElement\n */\n CalculatedField.prototype.createTypeContainer = function (key) {\n var wrapDiv = createElement('div', { id: this.parentID + 'control_wrapper', className: cls.TREEVIEWOUTER });\n var type = [SUM, COUNT, AVG, MIN, MAX];\n for (var i = 0; i < 5; i++) {\n var input = createElement('input', {\n id: this.parentID + 'radio' + key + type[i],\n attrs: { 'type': 'radio', 'data-ftxt': key },\n className: cls.CALCRADIO\n });\n wrapDiv.appendChild(input);\n }\n return wrapDiv;\n };\n /**\n * To get Accordion Data.\n * @param {PivotView | PivotFieldList} parent\n * @returns AccordionItemModel\n */\n CalculatedField.prototype.getAccordionData = function (parent) {\n var _this = this;\n var data = [];\n Object.keys(parent.engineModule.fieldList).forEach(function (key, index) {\n data.push({\n header: '',\n content: parent.engineModule.fieldList[key].aggregateType === CALC ||\n _this.parent.engineModule.fieldList[key].type !== 'number' ? '' : _this.createTypeContainer(key).outerHTML\n });\n });\n return data;\n };\n /**\n * To render mobile layout.\n * @param {Tab} tabObj\n * @returns void\n */\n CalculatedField.prototype.renderMobileLayout = function (tabObj) {\n var _this = this;\n tabObj.items[4].content = this.renderDialogElements().outerHTML;\n tabObj.dataBind();\n var cancelBtn = new Button({ cssClass: cls.FLAT, isPrimary: true });\n cancelBtn.appendTo('#' + this.parentID + 'cancelBtn');\n if (cancelBtn.element) {\n cancelBtn.element.onclick = this.cancelBtnClick.bind(this);\n }\n if (this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.FORMULA) !== null && this.parent.isAdaptive) {\n var okBtn = new Button({ cssClass: cls.FLAT + ' ' + cls.OUTLINE_CLASS, isPrimary: true });\n okBtn.appendTo('#' + this.parentID + 'okBtn');\n this.inputObj = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('fieldName')\n });\n this.inputObj.appendTo('#' + this.parentID + 'ddlelement');\n if (this.formulaText !== null && this.parent.\n dialogRenderer.parentElement.querySelector('#' + this.parentID + 'droppable') !== null) {\n var drop = this.parent.\n dialogRenderer.parentElement.querySelector('#' + this.parentID + 'droppable');\n drop.value = this.formulaText;\n }\n if (this.fieldText !== null && this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.CALCINPUT) !== null) {\n this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.CALCINPUT).value = this.fieldText;\n this.inputObj.value = this.fieldText;\n }\n if (okBtn.element) {\n okBtn.element.onclick = this.applyFormula.bind(this);\n }\n }\n else if (this.parent.isAdaptive) {\n var accordion = new Accordion({\n items: this.getAccordionData(this.parent),\n enableRtl: this.parent.enableRtl,\n expanding: function (args) {\n if (args.element.querySelectorAll('.e-radio-wrapper').length === 0) {\n Object.keys(_this.parent.engineModule.fieldList).forEach(function (key) {\n var type = [SUM, COUNT, AVG, MIN, MAX];\n var radiobutton;\n if (key === args.element.querySelector('[data-field').getAttribute('data-field')) {\n for (var i = 0; i < 5; i++) {\n radiobutton = new RadioButton({\n label: type[i],\n name: AGRTYPE + key,\n change: function (args) {\n var type = args.event.target.parentElement.querySelector('.e-label').\n innerText;\n var field = args.event.target.closest('.e-acrdn-item').\n querySelector('[data-field').getAttribute('data-caption');\n args.event.target.\n closest('.e-acrdn-item').querySelector('.e-label').\n innerText = field + ' (' + type + ')';\n args.event.target.closest('.e-acrdn-item').\n querySelector('[data-type').setAttribute('data-type', type);\n },\n });\n radiobutton.appendTo('#' + _this.parentID + 'radio' + key + type[i]);\n }\n }\n });\n }\n },\n });\n var addBtn = new Button({ cssClass: cls.FLAT, isPrimary: true });\n addBtn.appendTo('#' + this.parentID + 'addBtn');\n accordion.appendTo('#' + this.parentID + 'accordDiv');\n Object.keys(this.parent.engineModule.fieldList).forEach(function (key, index) {\n var type = null;\n if (_this.parent.engineModule.fieldList[key].type === 'string' ||\n _this.parent.engineModule.fieldList[key].type === 'include' ||\n _this.parent.engineModule.fieldList[key].type === 'exclude') {\n type = COUNT;\n }\n else {\n type = _this.parent.engineModule.fieldList[key].aggregateType !== undefined ?\n _this.parent.engineModule.fieldList[key].aggregateType : SUM;\n }\n var checkbox = new CheckBox({\n label: _this.parent.engineModule.fieldList[key].caption + ' (' + type + ')'\n });\n checkbox.appendTo('#' + _this.parentID + '_' + index);\n document.querySelector('#' + _this.parentID + '_' + index).setAttribute('data-field', key);\n document.querySelector('#' + _this.parentID + '_' + index).setAttribute('data-type', type);\n });\n if (addBtn.element) {\n addBtn.element.onclick = this.addBtnClick.bind(this);\n }\n }\n };\n /**\n * Trigger while click cancel button.\n * @returns void\n */\n CalculatedField.prototype.cancelBtnClick = function () {\n this.renderMobileLayout(this.parent.dialogRenderer.adaptiveElement);\n };\n /**\n * Trigger while click add button.\n * @returns void\n */\n CalculatedField.prototype.addBtnClick = function () {\n var node = document.querySelectorAll('.e-accordion .e-check');\n var fieldText = '';\n var field = null;\n var type = null;\n for (var i = 0; i < node.length; i++) {\n field = node[i].parentElement.querySelector('[data-field]').getAttribute('data-field');\n type = node[i].parentElement.querySelector('[data-field]').getAttribute('data-type');\n if (type.indexOf(CALC) === -1) {\n fieldText = fieldText + ('\"' + type + '(' + field + ')' + '\"');\n }\n else {\n for (var j = 0; j < this.parent.dataSource.calculatedFieldSettings.length; j++) {\n if (this.parent.dataSource.calculatedFieldSettings[j].name === field) {\n fieldText = fieldText + this.parent.dataSource.calculatedFieldSettings[j].formula;\n break;\n }\n }\n }\n }\n this.formulaText = this.formulaText !== null ? (this.formulaText + fieldText) : fieldText;\n this.renderMobileLayout(this.parent.dialogRenderer.adaptiveElement);\n };\n /**\n * To create calculated field dialog elements.\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.createCalculatedFieldDialog = function () {\n if (this.parent.isAdaptive && this.parent.getModuleName() === 'pivotfieldlist') {\n this.renderAdaptiveLayout();\n }\n else if (!this.parent.isAdaptive) {\n this.renderDialogLayout();\n this.dialog.element.style.top = parseInt(this.dialog.element.style.top, 10) < 0 ? '0px' : this.dialog.element.style.top;\n }\n };\n /**\n * To create calculated field desktop layout.\n * @returns void\n */\n CalculatedField.prototype.renderDialogLayout = function () {\n this.newFields = extend([], this.parent.dataSource.calculatedFieldSettings, null, true);\n this.createDialog();\n this.dialog.content = this.renderDialogElements();\n this.dialog.refresh();\n this.inputObj = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('fieldName')\n });\n this.inputObj.appendTo('#' + this.parentID + 'ddlelement');\n this.createTreeView();\n this.createMenu();\n this.droppable = new Droppable(this.dialog.element.querySelector('#' + this.parentID + 'droppable'));\n this.keyboardEvents = new KeyboardEvents(this.parent.calculatedFieldModule.dialog.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: { moveRight: 'rightarrow', enter: 'enter' },\n eventName: 'keydown'\n });\n };\n /**\n * Creates the error dialog for the unexpected action done.\n * @method createConfirmDialog\n * @return {void}\n * @hidden\n */\n CalculatedField.prototype.createConfirmDialog = function (title, description) {\n var errorDialog = createElement('div', {\n id: this.parentID + '_ErrorDialog',\n className: cls.ERROR_DIALOG_CLASS\n });\n this.parent.element.appendChild(errorDialog);\n this.confirmPopUp = new Dialog({\n animationSettings: { effect: 'Fade' },\n allowDragging: false,\n showCloseIcon: true,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: 'auto',\n position: { X: 'center', Y: 'center' },\n buttons: [\n {\n click: this.replaceFormula.bind(this),\n buttonModel: {\n cssClass: cls.OK_BUTTON_CLASS + ' ' + cls.OUTLINE_CLASS,\n content: this.parent.localeObj.getConstant('ok'), isPrimary: true\n }\n },\n {\n click: this.removeErrorDialog.bind(this),\n buttonModel: {\n cssClass: cls.CANCEL_BUTTON_CLASS,\n content: this.parent.localeObj.getConstant('cancel'), isPrimary: true\n }\n }\n ],\n header: title,\n content: description,\n isModal: true,\n visible: true,\n closeOnEscape: true,\n target: document.body,\n close: this.removeErrorDialog.bind(this)\n });\n this.confirmPopUp.appendTo(errorDialog);\n };\n CalculatedField.prototype.replaceFormula = function () {\n var report = this.parent.dataSource;\n var dropField = document.querySelector('#' + this.parentID + 'droppable');\n for (var i = 0; i < report.values.length; i++) {\n if (report.values[i].type === CALC && report.values[i].name === this.inputObj.value) {\n for (var j = 0; j < report.calculatedFieldSettings.length; j++) {\n if (report.calculatedFieldSettings[j].name === this.inputObj.value) {\n report.calculatedFieldSettings[j].formula = dropField.value;\n }\n }\n }\n }\n this.addFormula(report, this.inputObj.value);\n this.removeErrorDialog();\n };\n CalculatedField.prototype.removeErrorDialog = function () {\n if (document.getElementById(this.parentID + '_ErrorDialog')) {\n remove(document.getElementById(this.parentID + '_ErrorDialog').parentElement);\n }\n };\n /**\n * To add event listener.\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initCalculatedField, this.createCalculatedFieldDialog, this);\n };\n /**\n * To remove event listener.\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initCalculatedField, this.createCalculatedFieldDialog);\n };\n /**\n * To destroy the calculated field dialog\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.destroy = function () {\n this.removeEventListener();\n };\n return CalculatedField;\n}());\nexport { CalculatedField };\n","import * as events from '../../common/base/constant';\nimport * as cls from '../base/css-constant';\nimport { PivotFieldList } from '../../field-list/base/field-list';\nimport { createElement, setStyleAttribute, formatUnit, prepend, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { CalculatedField } from '../../common/calculatedfield/calculated-field';\nPivotFieldList.Inject(CalculatedField);\n/**\n * Module for Field List rendering\n */\n/** @hidden */\nvar FieldList = /** @class */ (function () {\n /** Constructor for Field List module */\n function FieldList(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n FieldList.prototype.getModuleName = function () {\n return 'fieldlist';\n };\n FieldList.prototype.initiateModule = function () {\n this.element = createElement('div', {\n id: this.parent.element.id + '_PivotFieldList',\n styles: 'position:' + (this.parent.enableRtl ? 'static' : 'absolute') + ';height:0;width:' + this.parent.element.style.width\n });\n this.parent.element.parentElement.setAttribute('id', 'ContainerWrapper');\n this.parent.element.parentElement.appendChild(this.element);\n this.parent.element.parentElement.appendChild(this.parent.element);\n this.parent.pivotFieldListModule = new PivotFieldList({\n dataSource: {\n rows: [],\n columns: [],\n values: [],\n filters: []\n },\n renderMode: 'Popup',\n allowCalculatedField: this.parent.allowCalculatedField,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: this.parent.element.parentElement\n });\n this.parent.pivotFieldListModule.appendTo('#' + this.element.id);\n };\n FieldList.prototype.updateControl = function () {\n var _this = this;\n if (this.element) {\n prepend([this.element], this.parent.element);\n if (this.parent.grid && this.parent.showGroupingBar && this.parent.groupingBarModule) {\n clearTimeout(this.timeOutObj);\n this.timeOutObj = setTimeout(function () {\n if (_this.parent.grid && _this.parent.grid.element) {\n setStyleAttribute(_this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS), {\n left: formatUnit(_this.parent.enableRtl ?\n -Math.abs((_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n _this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth) :\n (_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n _this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth)\n });\n if (_this.parent.enableRtl) {\n addClass([_this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n else {\n removeClass([_this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n }\n });\n }\n else {\n if (this.parent.enableRtl) {\n removeClass([this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n else {\n addClass([this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n }\n setStyleAttribute(this.element, {\n width: formatUnit(this.parent.element.offsetWidth)\n });\n }\n this.parent.pivotFieldListModule.update(this.parent);\n };\n /**\n * @hidden\n */\n FieldList.prototype.addEventListener = function () {\n this.handlers = {\n load: this.initiateModule,\n update: this.updateControl\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initSubComponent, this.handlers.load, this);\n this.parent.on(events.uiUpdate, this.handlers.update, this);\n };\n /**\n * @hidden\n */\n FieldList.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initSubComponent, this.handlers.load);\n this.parent.off(events.uiUpdate, this.handlers.update);\n };\n /**\n * To destroy the Field List\n * @return {void}\n * @hidden\n */\n FieldList.prototype.destroy = function () {\n this.removeEventListener();\n if (this.parent.pivotFieldListModule) {\n this.parent.pivotFieldListModule.destroy();\n }\n else {\n return;\n }\n };\n return FieldList;\n}());\nexport { FieldList };\n","import * as events from '../../common/base/constant';\nimport { PivotCommon } from '../../common/base/pivot-common';\nimport { Browser } from '@syncfusion/ej2-base';\n/**\n * Module for PivotCommon rendering\n */\n/** @hidden */\nvar Common = /** @class */ (function () {\n /** Constructor for Common module */\n function Common(parent) {\n this.parent = parent;\n this.parent.commonModule = this;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Common.prototype.getModuleName = function () {\n return 'common';\n };\n Common.prototype.initiateCommonModule = function () {\n if (!this.parent.pivotCommon) {\n var args = {\n pivotEngine: this.parent.engineModule,\n dataSource: this.parent.dataSource.properties ?\n this.parent.dataSource.properties : this.parent.dataSource,\n id: this.parent.element.id,\n element: this.parent.element,\n moduleName: this.parent.getModuleName(),\n enableRtl: this.parent.enableRtl,\n isAdaptive: Browser.isDevice,\n renderMode: 'Popup',\n localeObj: this.parent.localeObj\n };\n this.parent.pivotCommon = new PivotCommon(args);\n }\n else {\n this.parent.pivotCommon.element = this.parent.element;\n this.parent.pivotCommon.engineModule = this.parent.engineModule;\n this.parent.pivotCommon.parentID = this.parent.element.id;\n this.parent.pivotCommon.dataSource = this.parent.dataSource.properties ?\n this.parent.dataSource.properties : this.parent.dataSource;\n this.parent.pivotCommon.moduleName = this.parent.getModuleName();\n this.parent.pivotCommon.enableRtl = this.parent.enableRtl;\n this.parent.pivotCommon.isAdaptive = Browser.isDevice;\n this.parent.pivotCommon.renderMode = 'Popup';\n this.parent.pivotCommon.localeObj = this.parent.localeObj;\n }\n };\n /**\n * @hidden\n */\n Common.prototype.addEventListener = function () {\n this.handlers = {\n load: this.initiateCommonModule\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.handlers.load, this);\n };\n /**\n * @hidden\n */\n Common.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.uiUpdate, this.handlers.load);\n };\n /**\n * To destroy the groupingbar\n * @return {void}\n * @hidden\n */\n Common.prototype.destroy = function () {\n this.removeEventListener();\n if (this.parent.pivotCommon) {\n this.parent.pivotCommon.destroy();\n }\n };\n return Common;\n}());\nexport { Common };\n","import { PivotButton } from '../actions/pivot-button';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { createElement, prepend } from '@syncfusion/ej2-base';\n/**\n * Module to render Axis Fields\n */\n/** @hidden */\nvar AxisFields = /** @class */ (function () {\n /** Constructor for render module */\n function AxisFields(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the pivot button rendering\n * @returns void\n * @private\n */\n AxisFields.prototype.render = function () {\n this.pivotButton = new PivotButton(this.parent);\n this.createPivotButtons();\n var pivotButtons = [].slice.call(this.parent.element.querySelector('.' + cls.GROUP_ROW_CLASS)\n .querySelectorAll('.' + cls.PIVOT_BUTTON_WRAPPER_CLASS));\n var vlen = pivotButtons.length;\n for (var j = 0; j < vlen; j++) {\n var indentWidth = 24;\n var indentDiv = createElement('span', {\n className: 'e-indent-div',\n styles: 'width:' + j * indentWidth + 'px'\n });\n prepend([indentDiv], pivotButtons[j]);\n }\n };\n AxisFields.prototype.createPivotButtons = function () {\n var fields = [this.parent.dataSource.rows, this.parent.dataSource.columns, this.parent.dataSource.values, this.parent.dataSource.filters];\n this.parent.element.querySelector('.' + cls.GROUP_ROW_CLASS).innerHTML = '';\n this.parent.element.querySelector('.' + cls.GROUP_COLUMN_CLASS).innerHTML = '';\n this.parent.element.querySelector('.' + cls.GROUP_VALUE_CLASS).innerHTML = '';\n this.parent.element.querySelector('.' + cls.GROUP_FILTER_CLASS).innerHTML = '';\n var axis = ['rows', 'columns', 'values', 'filters'];\n var count = axis.length;\n for (var i = 0, lnt = fields.length; i < lnt; i++) {\n if (fields[i]) {\n var args = {\n field: fields[i],\n axis: axis[i].toString()\n };\n this.parent.notify(events.pivotButtonUpdate, args);\n }\n }\n };\n return AxisFields;\n}());\nexport { AxisFields };\n","import { createElement, prepend, remove, Droppable, setStyleAttribute, removeClass } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, formatUnit } from '@syncfusion/ej2-base';\nimport { PivotView } from '../../pivotview/base/pivotview';\nimport { Common } from '../actions/common';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { AxisFields } from './axis-field-renderer';\nPivotView.Inject(Common);\n/**\n * Module for GroupingBar rendering\n */\n/** @hidden */\nvar GroupingBar = /** @class */ (function () {\n /** Constructor for GroupingBar module */\n function GroupingBar(parent) {\n this.parent = parent;\n this.parent.groupingBarModule = this;\n this.addEventListener();\n this.parent.axisFieldModule = new AxisFields(this.parent);\n this.touchObj = new Touch(this.parent.element, {\n tapHold: this.tapHoldHandler.bind(this)\n });\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n GroupingBar.prototype.getModuleName = function () {\n return 'grouping';\n };\n GroupingBar.prototype.renderLayout = function () {\n this.groupingTable = createElement('div', { className: cls.GROUPING_BAR_CLASS });\n this.leftAxisPanel = createElement('div', { className: cls.LEFT_AXIS_PANEL_CLASS });\n this.rightAxisPanel = createElement('div', { className: cls.RIGHT_AXIS_PANEL_CLASS });\n var rowAxisPanel = createElement('div', { className: cls.AXIS_ROW_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper' });\n var columnAxisPanel = createElement('div', {\n className: cls.AXIS_COLUMN_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper'\n });\n var valueAxisPanel = createElement('div', {\n className: cls.AXIS_VALUE_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper'\n });\n var filterAxisPanel = createElement('div', {\n className: cls.AXIS_FILTER_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper'\n });\n this.rowPanel = createElement('div', { className: cls.GROUP_ROW_CLASS + ' ' + cls.ROW_AXIS_CLASS });\n this.columnPanel = createElement('div', { className: cls.GROUP_COLUMN_CLASS + ' ' + cls.COLUMN_AXIS_CLASS });\n this.valuePanel = createElement('div', { className: cls.GROUP_VALUE_CLASS + ' ' + cls.VALUE_AXIS_CLASS });\n this.filterPanel = createElement('div', { className: cls.GROUP_FILTER_CLASS + ' ' + cls.FILTER_AXIS_CLASS });\n rowAxisPanel.appendChild(this.rowPanel);\n columnAxisPanel.appendChild(this.columnPanel);\n valueAxisPanel.appendChild(this.valuePanel);\n filterAxisPanel.appendChild(this.filterPanel);\n this.rowAxisPanel = rowAxisPanel;\n this.columnAxisPanel = columnAxisPanel;\n this.valueAxisPanel = valueAxisPanel;\n this.filterAxisPanel = filterAxisPanel;\n this.leftAxisPanel.appendChild(valueAxisPanel);\n this.leftAxisPanel.appendChild(rowAxisPanel);\n this.rightAxisPanel.appendChild(filterAxisPanel);\n this.rightAxisPanel.appendChild(columnAxisPanel);\n this.groupingTable.appendChild(this.leftAxisPanel);\n this.groupingTable.appendChild(this.rightAxisPanel);\n var axisPanels = [this.rowPanel, this.columnPanel, this.valuePanel, this.filterPanel];\n for (var _i = 0, axisPanels_1 = axisPanels; _i < axisPanels_1.length; _i++) {\n var element = axisPanels_1[_i];\n new Droppable(element, {});\n this.unWireEvent(element);\n this.wireEvent(element);\n }\n };\n GroupingBar.prototype.appendToElement = function () {\n if (this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {\n remove(this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS));\n }\n var colGroupElement = this.parent.element.querySelector('.e-frozenheader').querySelector('colgroup').children[0];\n this.filterPanel.removeAttribute('style');\n this.columnPanel.removeAttribute('style');\n this.rowPanel.removeAttribute('style');\n this.filterPanel.removeAttribute('style');\n var emptyRowCount = Object.keys(this.parent.engineModule.headerContent).length;\n if (emptyRowCount) {\n var emptyHeader = this.parent.element.querySelector('.e-frozenheader').querySelector('.e-columnheader');\n addClass([emptyHeader], 'e-row');\n emptyHeader.removeAttribute('style');\n addClass([emptyHeader.querySelector('.e-headercell')], 'e-group-row');\n emptyHeader.querySelector('.e-group-row').appendChild(this.rowAxisPanel);\n emptyHeader.querySelector('.e-group-row').querySelector('.e-headercelldiv').style.display = 'none';\n emptyHeader.querySelector('.e-group-row').querySelector('.e-sortfilterdiv').style.display = 'none';\n }\n prepend([this.groupingTable], this.parent.element);\n setStyleAttribute(this.groupingTable, { width: formatUnit(this.parent.isAdaptive ? 500 : this.parent.grid.width) });\n this.parent.axisFieldModule.render();\n this.setGridRowWidth();\n var rightAxisPanelWidth = formatUnit(this.groupingTable.offsetWidth - parseInt(colGroupElement.style.width, 10));\n setStyleAttribute(this.valuePanel, { width: colGroupElement.style.width });\n setStyleAttribute(this.rightAxisPanel, { width: rightAxisPanelWidth });\n var rightPanelHeight = (this.valuePanel.offsetHeight / 2);\n if (rightPanelHeight > this.columnPanel.offsetHeight) {\n setStyleAttribute(this.filterPanel, { height: formatUnit(rightPanelHeight) });\n setStyleAttribute(this.columnPanel, { height: formatUnit(rightPanelHeight + 1) });\n }\n var topLeftHeight = this.parent.element.querySelector('.e-headercontent').offsetHeight;\n setStyleAttribute(this.rowPanel, {\n height: topLeftHeight + 'px'\n });\n this.parent.element.querySelector('.e-frozenheader').querySelector('.e-rhandler').style.height =\n topLeftHeight + 'px';\n var colRows = [].slice.call(this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('tr'));\n var columnRows = colRows.filter(function (trCell) {\n return (trCell.childNodes.length > 0);\n });\n var colHeight = topLeftHeight / columnRows.length;\n for (var _i = 0, columnRows_1 = columnRows; _i < columnRows_1.length; _i++) {\n var element = columnRows_1[_i];\n setStyleAttribute(element, { 'height': colHeight + 'px' });\n var rowHeader = [].slice.call(element.querySelectorAll('.e-rhandler'));\n for (var _a = 0, rowHeader_1 = rowHeader; _a < rowHeader_1.length; _a++) {\n var rhElement = rowHeader_1[_a];\n setStyleAttribute(rhElement, { 'height': colHeight + 'px' });\n }\n }\n };\n /**\n * @hidden\n */\n GroupingBar.prototype.refreshUI = function () {\n var _this = this;\n setStyleAttribute(this.groupingTable, { width: formatUnit(this.parent.isAdaptive ? 500 : this.parent.grid.width) });\n var colGroupElement = this.parent.element.querySelector('.e-frozenheader').querySelector('colgroup').children[0];\n var rightAxisWidth = formatUnit(this.groupingTable.offsetWidth - parseInt(colGroupElement.style.width, 10));\n setStyleAttribute(this.valuePanel, { width: colGroupElement.style.width });\n setStyleAttribute(this.rightAxisPanel, { width: rightAxisWidth });\n if (this.parent.showFieldList && this.parent.pivotFieldListModule && this.parent.pivotFieldListModule.element) {\n var element_1 = this.parent.pivotFieldListModule.element;\n clearTimeout(this.timeOutObj);\n this.timeOutObj = setTimeout(function () {\n setStyleAttribute(element_1.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS), {\n left: formatUnit(_this.parent.enableRtl ?\n -Math.abs((_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n element_1.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth) :\n (_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n element_1.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth)\n });\n });\n }\n if (!this.parent.grid.element.querySelector('.e-group-row')) {\n var emptyRowHeader = this.parent.element.querySelector('.e-frozenheader').querySelector('.e-columnheader');\n addClass([emptyRowHeader], 'e-row');\n addClass([emptyRowHeader.querySelector('.e-headercell')], 'e-group-row');\n emptyRowHeader.querySelector('.e-group-row').appendChild(this.rowAxisPanel);\n setStyleAttribute(emptyRowHeader.querySelector('.e-group-row').querySelector('.e-headercelldiv'), {\n display: 'none'\n });\n setStyleAttribute(emptyRowHeader.querySelector('.e-group-row').querySelector('.e-sortfilterdiv'), {\n display: 'none'\n });\n var groupHeight = this.parent.element.querySelector('.e-headercontent').offsetHeight;\n setStyleAttribute(this.rowPanel, {\n height: groupHeight + 'px'\n });\n this.parent.element.querySelector('.e-frozenheader').querySelector('.e-rhandler').style.height =\n groupHeight + 'px';\n var colRowElements = [].slice.call(this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('tr'));\n var columnRows = colRowElements.filter(function (trCell) {\n return (trCell.childNodes.length > 0);\n });\n var colHeight = groupHeight / columnRows.length;\n for (var _i = 0, columnRows_2 = columnRows; _i < columnRows_2.length; _i++) {\n var element = columnRows_2[_i];\n setStyleAttribute(element, { 'height': colHeight + 'px' });\n var rowHeader = [].slice.call(element.querySelectorAll('.e-rhandler'));\n for (var _a = 0, rowHeader_2 = rowHeader; _a < rowHeader_2.length; _a++) {\n var handlerElement = rowHeader_2[_a];\n setStyleAttribute(handlerElement, { 'height': colHeight + 'px' });\n }\n }\n }\n };\n /**\n * @hidden\n */\n GroupingBar.prototype.setGridRowWidth = function () {\n var colGroupElement = this.parent.element.querySelector('.e-frozenheader').querySelector('colgroup').children[0];\n if (this.rowPanel.querySelector('.' + cls.PIVOT_BUTTON_CLASS) && !this.parent.isAdaptive) {\n var pivotButtons = [].slice.call(this.rowPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_WRAPPER_CLASS));\n var lastButton = pivotButtons[pivotButtons.length - 1];\n var lastButtonWidth = (lastButton.querySelector('.' + cls.PIVOT_BUTTON_CLASS).offsetWidth +\n lastButton.querySelector('.e-indent-div').offsetWidth + 20);\n var buttonWidth = formatUnit(lastButtonWidth < 250 ? 250 : lastButtonWidth);\n var rowHeaderTable = this.parent.element.querySelector('.e-frozenheader').querySelector('table');\n var rowContentTable = this.parent.element.querySelector('.e-frozencontent').querySelector('table');\n var rowContent = this.parent.element.querySelector('.e-frozencontent').querySelector('colgroup').children[0];\n var colwidth = parseInt(buttonWidth, 10);\n var gridColumn = this.parent.grid.columns;\n if (gridColumn && gridColumn.length > 0) {\n gridColumn[0].width = (gridColumn[0].width >= 250 ? (colwidth > 250 ? colwidth : 250) : (colwidth > 250 ? colwidth : 250));\n }\n var valueColWidth = this.parent.renderModule.calculateColWidth(this.parent.dataSource.values.length > 0 ?\n this.parent.engineModule.pivotValues[0].length : 2);\n for (var cCnt = 0; cCnt < gridColumn.length; cCnt++) {\n if (cCnt !== 0) {\n if (gridColumn[cCnt].columns) {\n this.setColWidth(gridColumn[cCnt].columns, valueColWidth);\n }\n else {\n gridColumn[cCnt].width = valueColWidth;\n }\n }\n }\n this.parent.grid.headerModule.refreshUI();\n colGroupElement.style.width = buttonWidth;\n rowContent.style.width = buttonWidth;\n rowHeaderTable.style.width = buttonWidth;\n rowContentTable.style.width = buttonWidth;\n setStyleAttribute(rowHeaderTable, { 'width': buttonWidth });\n setStyleAttribute(rowContentTable, { 'width': buttonWidth });\n }\n this.refreshUI();\n };\n GroupingBar.prototype.setColWidth = function (columns, width) {\n for (var cCnt = 0; cCnt < columns.length; cCnt++) {\n if (columns[cCnt].columns) {\n this.setColWidth(columns[cCnt].columns, width);\n }\n else {\n columns[cCnt].width = width;\n }\n }\n };\n GroupingBar.prototype.wireEvent = function (element) {\n EventHandler.add(element, 'mouseover', this.dropIndicatorUpdate, this);\n EventHandler.add(element, 'mouseleave', this.dropIndicatorUpdate, this);\n };\n GroupingBar.prototype.unWireEvent = function (element) {\n EventHandler.remove(element, 'mouseover', this.dropIndicatorUpdate);\n EventHandler.remove(element, 'mouseleave', this.dropIndicatorUpdate);\n };\n GroupingBar.prototype.dropIndicatorUpdate = function (e) {\n if ((this.parent.isDragging && e.target.classList.contains(cls.DROPPABLE_CLASS) && e.type === 'mouseover') ||\n e.type === 'mouseleave') {\n removeClass([].slice.call(this.parent.element.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(this.parent.element.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n }\n };\n GroupingBar.prototype.tapHoldHandler = function (e) {\n var target = closest(e.originalEvent.target, '.' + cls.PIVOT_BUTTON_CLASS);\n if (!isNullOrUndefined(target) && this.parent.isAdaptive) {\n var pos = target.getBoundingClientRect();\n this.parent.contextMenuModule.fieldElement = target;\n this.parent.contextMenuModule.menuObj.open(pos.top, pos.left);\n return;\n }\n };\n /**\n * @hidden\n */\n GroupingBar.prototype.addEventListener = function () {\n this.handlers = {\n load: this.renderLayout,\n end: this.appendToElement,\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initSubComponent, this.handlers.load, this); //For initial rendering\n this.parent.on(events.uiUpdate, this.handlers.end, this);\n };\n /**\n * @hidden\n */\n GroupingBar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initSubComponent, this.handlers.end);\n this.parent.off(events.uiUpdate, this.handlers.load);\n };\n /**\n * To destroy the groupingbar\n * @return {void}\n * @hidden\n */\n GroupingBar.prototype.destroy = function () {\n this.removeEventListener();\n if (this.parent.pivotButtonModule) {\n this.parent.pivotButtonModule.destroy();\n if (this.touchObj && !this.touchObj.isDestroyed) {\n this.touchObj.destroy();\n }\n }\n else {\n return;\n }\n };\n return GroupingBar;\n}());\nexport { GroupingBar };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { isNullOrUndefined as isNaN, createElement, extend, remove, addClass } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport * as cls from '../../common/base/css-constant';\n/**\n * Module to render Conditional Formatting Dialog\n */\n/** @hidden */\nvar ConditionalFormatting = /** @class */ (function () {\n /** Constructor for conditionalformatting module */\n function ConditionalFormatting(parent) {\n this.parent = parent;\n this.parent.conditionalFormattingModule = this;\n this.parentID = this.parent.element.id;\n this.dialog = null;\n this.fieldsDropDown = [];\n this.conditionsDropDown = [];\n this.fontNameDropDown = [];\n this.fontSizeDropDown = [];\n this.fontColor = [];\n this.backgroundColor = [];\n this.newFormat = [];\n }\n /**\n * To get module name.\n * @returns string\n */\n ConditionalFormatting.prototype.getModuleName = function () {\n return 'conditionalformatting';\n };\n ConditionalFormatting.prototype.createDialog = function () {\n var _this = this;\n if (document.querySelector('#' + this.parentID + 'conditionalformatting') !== null) {\n remove(document.querySelector('#' + this.parentID + 'conditionalformatting'));\n }\n this.parent.element.appendChild(createElement('div', {\n id: this.parentID + 'conditionalformatting',\n }));\n var buttonModel = [\n {\n 'click': function () {\n var format = {\n conditions: 'LessThan',\n value1: 0,\n style: {\n backgroundColor: 'white',\n color: 'black',\n fontFamily: 'Arial',\n fontSize: '12px'\n }\n };\n _this.refreshConditionValues();\n _this.newFormat.push(format);\n _this.addFormat();\n },\n buttonModel: {\n cssClass: this.parent.isAdaptive ? (cls.FORMAT_ROUND_BUTTON + ' ' + cls.FORMAT_CONDITION_BUTTON) :\n cls.FORMAT_CONDITION_BUTTON,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n content: this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('condition'),\n }\n },\n {\n 'click': function () {\n _this.refreshConditionValues();\n _this.parent.setProperties({ dataSource: { conditionalFormatSettings: _this.newFormat } }, true);\n _this.parent.renderPivotGrid();\n _this.destroy();\n },\n buttonModel: {\n cssClass: cls.FLAT_CLASS + ' ' + cls.FORMAT_APPLY_BUTTON,\n content: this.parent.localeObj.getConstant('apply')\n }\n },\n {\n 'click': function () {\n _this.destroy();\n _this.newFormat = [];\n },\n buttonModel: {\n cssClass: cls.FLAT_CLASS + ' ' + cls.FORMAT_CANCEL_BUTTON,\n content: this.parent.localeObj.getConstant('cancel')\n }\n }\n ];\n if (this.parent.isAdaptive) {\n this.dialog = new Dialog({\n animationSettings: { effect: 'Zoom' }, isModal: true, width: '100%', height: '100%',\n showCloseIcon: false, closeOnEscape: false, enableRtl: this.parent.enableRtl,\n position: { X: 'center', Y: 'center' }, allowDragging: true, buttons: buttonModel,\n beforeOpen: function (args) {\n _this.dialog.element.querySelector('.' + cls.DIALOG_HEADER).\n setAttribute('title', _this.parent.localeObj.getConstant('conditionalFormating'));\n },\n cssClass: cls.FORMAT_DIALOG, header: this.parent.localeObj.getConstant('conditionalFormating'), target: document.body\n });\n }\n else {\n this.dialog = new Dialog({\n allowDragging: true, position: { X: 'center', Y: this.parent.element.offsetTop }, buttons: buttonModel,\n beforeOpen: function (args) {\n _this.dialog.element.querySelector('.' + cls.DIALOG_HEADER).\n setAttribute('title', _this.parent.localeObj.getConstant('conditionalFormating'));\n },\n cssClass: cls.FORMAT_DIALOG, isModal: false, closeOnEscape: true, enableRtl: this.parent.enableRtl,\n showCloseIcon: true, header: this.parent.localeObj.getConstant('conditionalFormating'), target: this.parent.element\n });\n }\n this.dialog.appendTo('#' + this.parentID + 'conditionalformatting');\n };\n ConditionalFormatting.prototype.refreshConditionValues = function () {\n for (var i = 0; i < this.newFormat.length; i++) {\n this.newFormat[i].value1 =\n Number(document.querySelector('#' + this.parentID + 'conditionvalue1' + i).value);\n this.newFormat[i].value2 =\n Number(document.querySelector('#' + this.parentID + 'conditionvalue2' + i).value);\n }\n };\n ConditionalFormatting.prototype.addFormat = function () {\n var format = createElement('div', { id: this.parentID + 'formatDiv', className: cls.FORMAT_NEW });\n for (var i = 0; i < this.newFormat.length; i++) {\n format.appendChild(this.createDialogElements(i));\n }\n this.dialog.setProperties({ 'content': format }, false);\n for (var i = 0; i < this.newFormat.length; i++) {\n this.renderDropDowns(i);\n this.renderColorPicker(i);\n }\n };\n ConditionalFormatting.prototype.createDialogElements = function (i) {\n var format = this.newFormat[i];\n var outerDiv = createElement('div', {\n id: this.parentID + 'outerDiv' + i, className: cls.FORMAT_OUTER\n });\n var button = createElement('button', {\n id: this.parentID + 'removeButton' + i, className: cls.FORMAT_DELETE_BUTTON,\n attrs: { 'title': this.parent.localeObj.getConstant('delete') }\n });\n outerDiv.appendChild(button);\n var innerDiv = createElement('div', { id: this.parentID + 'innerDiv', className: cls.FORMAT_INNER });\n var table = createElement('table', { id: this.parentID + 'cftable', className: cls.FORMAT_TABLE });\n var tRow = createElement('tr');\n var td = createElement('td');\n var valuelabel = createElement('span', {\n id: this.parentID + 'valuelabel' + i, className: cls.FORMAT_VALUE_LABEL,\n innerHTML: this.parent.localeObj.getConstant('value')\n });\n td.appendChild(valuelabel);\n tRow.appendChild(td);\n table.appendChild(tRow);\n tRow = createElement('tr');\n td = createElement('td');\n var measureDropdown = createElement('div', { id: this.parentID + 'measure' + i });\n var measureInput = createElement('input', {\n id: this.parentID + 'measureinput' + i,\n attrs: { 'type': 'text', 'tabindex': '1' }\n });\n measureDropdown.appendChild(measureInput);\n td.appendChild(measureDropdown);\n tRow.appendChild(td);\n td = createElement('td');\n var conditionDropdown = createElement('div', { id: this.parentID + 'condition' });\n var conditionInput = createElement('input', {\n id: this.parentID + 'conditioninput' + i,\n attrs: { 'type': 'text', 'tabindex': '1' }\n });\n conditionDropdown.appendChild(conditionInput);\n td.appendChild(conditionDropdown);\n tRow.appendChild(td);\n td = createElement('td');\n var style = !(format.conditions === 'Between' || format.conditions === 'NotBetween') ? 'display:none; width:10px' : '';\n var value1 = createElement('input', {\n id: this.parentID + 'conditionvalue1' + i,\n attrs: { 'type': 'text', 'tabindex': '1', 'value': !isNaN(format.value1) ? format.value1.toString() : '0' },\n styles: this.parent.isAdaptive ? style === '' ? 'width: 28%' : 'width: 100%' : style === '' ? 'width: 45px' : 'width: 120px',\n className: cls.INPUT + ' ' + cls.FORMAT_VALUE1\n });\n td.appendChild(value1);\n var valuespan = createElement('span', {\n id: this.parentID + 'valuespan' + i, className: cls.FORMAT_VALUE_SPAN,\n innerHTML: '&', styles: style\n });\n td.appendChild(valuespan);\n var value2 = createElement('input', {\n id: this.parentID + 'conditionvalue2' + i,\n attrs: { 'type': 'text', 'tabindex': '1', 'value': !isNaN(format.value2) ? format.value2.toString() : '0' },\n styles: (this.parent.isAdaptive && style === '') ? 'width: 28%' : style === '' ? 'width: 45px' : style,\n className: cls.INPUT + ' ' + cls.FORMAT_VALUE2\n });\n td.appendChild(value2);\n tRow.appendChild(td);\n table.appendChild(tRow);\n if (this.parent.isAdaptive) {\n innerDiv.appendChild(table);\n table = createElement('table', { id: this.parentID + 'cftable', className: cls.FORMAT_TABLE });\n }\n tRow = createElement('tr');\n td = createElement('td');\n var formatlabel = createElement('span', {\n id: this.parentID + 'formatlabel' + i, className: cls.FORMAT_LABEL, innerHTML: this.parent.localeObj.getConstant('formatLabel')\n });\n td.appendChild(formatlabel);\n tRow.appendChild(td);\n table.appendChild(tRow);\n tRow = createElement('tr');\n td = createElement('td');\n var fontNameDropdown = createElement('div', { id: this.parentID + 'fontname' });\n var fontNameInput = createElement('input', {\n id: this.parentID + 'fontnameinput' + i, attrs: { 'type': 'text', 'tabindex': '1' }\n });\n fontNameDropdown.appendChild(fontNameInput);\n td.appendChild(fontNameDropdown);\n tRow.appendChild(td);\n td = createElement('td');\n var fontSizeDropdown = createElement('div', { id: this.parentID + 'fontsize' });\n var fontSizeInput = createElement('input', {\n id: this.parentID + 'fontsizeinput' + i, attrs: { 'type': 'text', 'tabindex': '1' }\n });\n fontSizeDropdown.appendChild(fontSizeInput);\n td.appendChild(fontSizeDropdown);\n tRow.appendChild(td);\n if (this.parent.isAdaptive) {\n table.appendChild(tRow);\n tRow = createElement('tr');\n table.appendChild(tRow);\n tRow = createElement('tr');\n }\n td = createElement('td');\n var colorPicker1 = createElement('input', {\n id: this.parentID + 'fontcolor' + i, attrs: { 'type': 'color', 'tabindex': '1' }, className: cls.FORMAT_FONT_COLOR\n });\n td.appendChild(colorPicker1);\n var colorPicker2 = createElement('input', {\n id: this.parentID + 'backgroundcolor' + i, attrs: { 'type': 'color', 'tabindex': '1' }, className: cls.FORMAT_BACK_COLOR\n });\n td.appendChild(colorPicker2);\n tRow.appendChild(td);\n td = createElement('td');\n var valuePreview = createElement('div', {\n id: this.parentID + 'valuepreview' + i, className: cls.INPUT + ' ' + cls.FORMAT_VALUE_PREVIEW,\n innerHTML: '123.45',\n });\n td.appendChild(valuePreview);\n tRow.appendChild(td);\n table.appendChild(tRow);\n innerDiv.appendChild(table);\n outerDiv.appendChild(innerDiv);\n return outerDiv;\n };\n ConditionalFormatting.prototype.renderDropDowns = function (i) {\n var _this = this;\n var format = this.newFormat[i];\n var fields = [];\n fields.push({\n index: 0, name: this.parent.localeObj.getConstant('AllValues'),\n field: this.parent.localeObj.getConstant('AllValues')\n });\n for (var i_1 = 0; i_1 < this.parent.dataSource.values.length; i_1++) {\n fields.push({\n index: i_1 + 1,\n name: this.parent.dataSource.values[i_1].caption || this.parent.dataSource.values[i_1].name,\n field: this.parent.dataSource.values[i_1].name\n });\n }\n var value = isNaN(format.measure) ? this.parent.localeObj.getConstant('AllValues') : format.measure;\n this.fieldsDropDown[i] = new DropDownList({\n dataSource: fields, fields: { text: 'name' },\n value: value, width: this.parent.isAdaptive ? '100%' : '120px',\n popupHeight: '200px',\n change: function (args) {\n _this.newFormat[i].measure = args.value.toString() === _this.parent.localeObj.getConstant('AllValues') ?\n undefined : args.value.toString();\n }\n });\n this.fieldsDropDown[i].appendTo('#' + this.parentID + 'measureinput' + i);\n var conditions = [\n { value: 'LessThan', name: this.parent.localeObj.getConstant('LessThan') },\n { value: 'LessThanOrEqualTo', name: this.parent.localeObj.getConstant('LessThanOrEqualTo') },\n { value: 'GreaterThan', name: this.parent.localeObj.getConstant('GreaterThan') },\n { value: 'GreaterThanOrEqualTo', name: this.parent.localeObj.getConstant('GreaterThanOrEqualTo') },\n { value: 'Equals', name: this.parent.localeObj.getConstant('Equals') },\n { value: 'NotEquals', name: this.parent.localeObj.getConstant('NotEquals') },\n { value: 'Between', name: this.parent.localeObj.getConstant('Between') },\n { value: 'NotBetween', name: this.parent.localeObj.getConstant('NotBetween') }\n ];\n value = isNaN(format.conditions) ? 'LessThan' : format.conditions;\n this.conditionsDropDown[i] = new DropDownList({\n dataSource: conditions, fields: { value: 'value', text: 'name' },\n value: value, width: this.parent.isAdaptive ? '100%' : '120px',\n popupHeight: '200px', popupWidth: '200px',\n change: function (args) {\n _this.newFormat[i].conditions = args.value;\n if (args.value === 'Between' || args.value === 'NotBetween') {\n document.querySelector('#' + _this.parentID + 'valuespan' + i).style.display = 'inline-block';\n document.querySelector('#' + _this.parentID + 'valuespan' + i).style.width =\n _this.parent.isAdaptive ? '10%' : '10px';\n document.querySelector('#' + _this.parentID + 'conditionvalue2' + i).style.display = 'inline-block';\n document.querySelector('#' + _this.parentID + 'conditionvalue2' + i).style.width =\n _this.parent.isAdaptive ? '28%' : '45px';\n document.querySelector('#' + _this.parentID + 'conditionvalue1' + i).style.width =\n _this.parent.isAdaptive ? '28%' : '45px';\n }\n else {\n document.querySelector('#' + _this.parentID + 'valuespan' + i).style.display = 'none';\n document.querySelector('#' + _this.parentID + 'conditionvalue2' + i).style.display = 'none';\n document.querySelector('#' + _this.parentID + 'conditionvalue1' + i).style.width =\n _this.parent.isAdaptive ? '100%' : '120px';\n }\n }\n });\n this.conditionsDropDown[i].appendTo('#' + this.parentID + 'conditioninput' + i);\n var fontNames = [\n { index: 0, name: 'Arial' }, { index: 1, name: 'San Serif' }, { index: 2, name: 'Impact' },\n { index: 3, name: 'Trebuchet MS' }, { index: 4, name: 'Serif' }, { index: 5, name: 'Verdana' },\n { index: 6, name: 'Courier New' }, { index: 7, name: 'Times New Roman' }, { index: 8, name: 'Tahoma' },\n { index: 9, name: 'Gerogia' }\n ];\n value = isNaN(format.style.fontFamily) ? 'Arial' : format.style.fontFamily;\n this.fontNameDropDown[i] = new DropDownList({\n dataSource: fontNames, fields: { text: 'name' },\n value: value, width: this.parent.isAdaptive ? '100%' : '120px',\n popupWidth: '150px', popupHeight: '200px',\n change: function (args) {\n _this.newFormat[i].style.fontFamily = args.value.toString();\n document.querySelector('#' + _this.parentID + 'valuepreview' + i).style.fontFamily = args.value;\n }\n });\n this.fontNameDropDown[i].appendTo('#' + this.parentID + 'fontnameinput' + i);\n var fontSize = [\n { index: 0, name: '9px' }, { index: 1, name: '10px' }, { index: 2, name: '11px' }, { index: 3, name: '12px' },\n { index: 4, name: '13px' }, { index: 5, name: '14px' }, { index: 6, name: '15px' }, { index: 6, name: '16px' }\n ];\n value = isNaN(format.style.fontSize) ? '12px' : format.style.fontSize;\n this.fontSizeDropDown[i] = new DropDownList({\n dataSource: fontSize, fields: { text: 'name' }, popupHeight: '200px',\n value: value, width: this.parent.isAdaptive ? '100%' : '120px',\n change: function (args) {\n _this.newFormat[i].style.fontSize = args.value.toString();\n document.querySelector('#' + _this.parentID + 'valuepreview' + i).style.fontSize = args.value;\n }\n });\n this.fontSizeDropDown[i].appendTo('#' + this.parentID + 'fontsizeinput' + i);\n };\n ConditionalFormatting.prototype.renderColorPicker = function (i) {\n var _this = this;\n var format = this.newFormat[i];\n var value = isNaN(format.style.color) ? 'black' : format.style.color;\n var color = this.isHex(value.substr(1)) ? value : this.colourNameToHex(value);\n document.querySelector('#' + this.parentID + 'valuepreview' + i).style.color = color;\n this.fontColor[i] = new ColorPicker({\n cssClass: cls.FORMAT_COLOR_PICKER, value: color, mode: 'Palette',\n change: function (args) {\n _this.newFormat[i].style.color = args.currentValue.hex;\n document.querySelector('#' + _this.parentID + 'valuepreview' + i).style.color =\n args.currentValue.hex;\n }\n });\n this.fontColor[i].appendTo('#' + this.parentID + 'fontcolor' + i);\n addClass([this.fontColor[i].element.nextElementSibling.querySelector('.' + cls.SELECTED_COLOR)], cls.ICON);\n value = isNaN(format.style.backgroundColor) ? 'white' : format.style.backgroundColor;\n color = this.isHex(value.substr(1)) ? value : this.colourNameToHex(value);\n document.querySelector('#' + this.parentID + 'valuepreview' + i).style.backgroundColor = color;\n document.querySelector('#' + this.parentID + 'valuepreview' + i).style.fontFamily = format.style.fontFamily;\n document.querySelector('#' + this.parentID + 'valuepreview' + i).style.fontSize = format.style.fontSize;\n this.backgroundColor[i] = new ColorPicker({\n cssClass: cls.FORMAT_COLOR_PICKER, value: color, mode: 'Palette',\n change: function (args) {\n _this.newFormat[i].style.backgroundColor = args.currentValue.hex;\n document.querySelector('#' + _this.parentID + 'valuepreview' + i).style.backgroundColor =\n args.currentValue.hex;\n }\n });\n this.backgroundColor[i].appendTo('#' + this.parentID + 'backgroundcolor' + i);\n addClass([this.backgroundColor[i].element.nextElementSibling.querySelector('.e-selected-color')], cls.ICON);\n var toggleBtn = new Button({\n iconCss: cls.ICON + ' ' + cls.FORMAT_DELETE_ICON,\n cssClass: cls.FLAT\n });\n toggleBtn.appendTo('#' + this.parentID + 'removeButton' + i);\n toggleBtn.element.onclick = function () {\n _this.newFormat.splice(i, 1);\n _this.addFormat();\n };\n };\n ConditionalFormatting.prototype.isHex = function (h) {\n var a = parseInt(h, 16);\n while (h.charAt(0) === '0') {\n h = h.substr(1);\n }\n return (a.toString(16) === h.toLowerCase() || (a === 0 && h === ''));\n };\n ConditionalFormatting.prototype.hexToRgb = function (hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n };\n ConditionalFormatting.prototype.colourNameToHex = function (colour) {\n var colours = {\n 'aliceblue': '#f0f8ff', 'antiquewhite': '#faebd7', 'aqua': '#00ffff', 'aquamarine': '#7fffd4',\n 'azure': '#f0ffff', 'beige': '#f5f5dc', 'bisque': '#ffe4c4', 'black': '#000000',\n 'blanchedalmond': '#ffebcd', 'blue': '#0000ff',\n 'blueviolet': '#8a2be2', 'brown': '#a52a2a', 'burlywood': '#deb887', 'cadetblue': '#5f9ea0',\n 'chartreuse': '#7fff00', 'chocolate': '#d2691e',\n 'coral': '#ff7f50', 'cornflowerblue': '#6495ed', 'cornsilk': '#fff8dc', 'crimson': '#dc143c', 'cyan': '#00ffff',\n 'darkblue': '#00008b', 'darkcyan': '#008b8b', 'darkgoldenrod': '#b8860b', 'darkgray': '#a9a9a9', 'darkgreen': '#006400',\n 'darkkhaki': '#bdb76b', 'darkmagenta': '#8b008b', 'darkolivegreen': '#556b2f',\n 'darkorange': '#ff8c00', 'darkorchid': '#9932cc', 'darkred': '#8b0000', 'darksalmon': '#e9967a', 'darkseagreen': '#8fbc8f',\n 'darkslateblue': '#483d8b', 'darkslategray': '#2f4f4f', 'darkturquoise': '#00ced1',\n 'darkviolet': '#9400d3', 'deeppink': '#ff1493', 'deepskyblue': '#00bfff', 'dimgray': '#696969', 'dodgerblue': '#1e90ff',\n 'firebrick': '#b22222', 'floralwhite': '#fffaf0', 'forestgreen': '#228b22', 'fuchsia': '#ff00ff',\n 'gainsboro': '#dcdcdc', 'ghostwhite': '#f8f8ff', 'gold': '#ffd700', 'goldenrod': '#daa520',\n 'gray': '#808080', 'green': '#008000',\n 'greenyellow': '#adff2f', 'honeydew': '#f0fff0', 'hotpink': '#ff69b4', 'indianred ': '#cd5c5c',\n 'indigo': '#4b0082', 'ivory': '#fffff0',\n 'khaki': '#f0e68c', 'lavender': '#e6e6fa', 'lavenderblush': '#fff0f5', 'lawngreen': '#7cfc00', 'lemonchiffon': '#fffacd',\n 'lightblue': '#add8e6', 'lightcoral': '#f08080', 'lightcyan': '#e0ffff', 'lightgoldenrodyellow': '#fafad2',\n 'lightgrey': '#d3d3d3', 'lightgreen': '#90ee90', 'lightpink': '#ffb6c1', 'lightsalmon': '#ffa07a', 'lightseagreen': '#20b2aa',\n 'lightskyblue': '#87cefa', 'lightslategray': '#778899', 'lightsteelblue': '#b0c4de',\n 'lightyellow': '#ffffe0', 'lime': '#00ff00', 'limegreen': '#32cd32', 'linen': '#faf0e6',\n 'magenta': '#ff00ff', 'maroon': '#800000', 'mediumaquamarine': '#66cdaa', 'mediumblue': '#0000cd', 'mediumorchid': '#ba55d3',\n 'mediumpurple': '#9370d8', 'mediumseagreen': '#3cb371', 'mediumslateblue': '#7b68ee',\n 'mediumspringgreen': '#00fa9a', 'mediumturquoise': '#48d1cc', 'mediumvioletred': '#c71585', 'midnightblue': '#191970',\n 'mintcream': '#f5fffa', 'mistyrose': '#ffe4e1', 'moccasin': '#ffe4b5', 'navajowhite': '#ffdead', 'navy': '#000080',\n 'oldlace': '#fdf5e6', 'olive': '#808000', 'olivedrab': '#6b8e23', 'orange': '#ffa500', 'orangered': '#ff4500',\n 'orchid': '#da70d6',\n 'palegoldenrod': '#eee8aa', 'palegreen': '#98fb98', 'paleturquoise': '#afeeee', 'palevioletred': '#d87093',\n 'papayawhip': '#ffefd5',\n 'peachpuff': '#ffdab9', 'peru': '#cd853f', 'pink': '#ffc0cb', 'plum': '#dda0dd', 'powderblue': '#b0e0e6', 'purple': '#800080',\n 'rebeccapurple': '#663399', 'red': '#ff0000', 'rosybrown': '#bc8f8f', 'royalblue': '#4169e1',\n 'saddlebrown': '#8b4513', 'salmon': '#fa8072', 'sandybrown': '#f4a460', 'seagreen': '#2e8b57',\n 'seashell': '#fff5ee', 'sienna': '#a0522d',\n 'silver': '#c0c0c0', 'skyblue': '#87ceeb', 'slateblue': '#6a5acd', 'slategray': '#708090', 'snow': '#fffafa',\n 'springgreen': '#00ff7f',\n 'steelblue': '#4682b4', 'tan': '#d2b48c', 'teal': '#008080', 'thistle': '#d8bfd8', 'tomato': '#ff6347', 'turquoise': '#40e0d0',\n 'violet': '#ee82ee', 'wheat': '#f5deb3', 'white': '#ffffff', 'whitesmoke': '#f5f5f5', 'yellow': '#ffff00',\n 'yellowgreen': '#9acd32'\n };\n if (typeof colours[colour.toLowerCase()] !== 'undefined') {\n return colours[colour.toLowerCase()];\n }\n return '#d5d5d5';\n };\n /**\n * To create Conditional Formatting dialog.\n * @returns void\n * @hidden\n */\n ConditionalFormatting.prototype.showConditionalFormattingDialog = function () {\n this.newFormat = [];\n for (var i = 0; i < this.parent.dataSource.conditionalFormatSettings.length; i++) {\n this.newFormat.push(extend({}, this.parent.dataSource.conditionalFormatSettings[i].properties, null, true));\n }\n this.createDialog();\n this.dialog.refresh();\n this.addFormat();\n };\n /**\n * To destroy the Conditional Formatting dialog\n * @returns void\n * @hidden\n */\n ConditionalFormatting.prototype.destroy = function () {\n if (this.dialog && !this.dialog.isDestroyed) {\n this.dialog.hide();\n for (var i = 0; i < this.newFormat.length; i++) {\n if (this.fontColor[i] && !this.fontColor[i].isDestroyed) {\n this.fontColor[i].destroy();\n }\n if (this.backgroundColor[i] && !this.backgroundColor[i].isDestroyed) {\n this.backgroundColor[i].destroy();\n }\n }\n this.dialog.destroy();\n }\n else {\n return;\n }\n };\n return ConditionalFormatting;\n}());\nexport { ConditionalFormatting };\n","import * as index from '@syncfusion/ej2-pivotview';\nindex.PivotView.Inject( index.GroupingBar,index.FieldList,index.CalculatedField,index.ConditionalFormatting,index.VirtualScroll);\nexport * from '@syncfusion/ej2-pivotview';\n","/**\n * Defines types of Render\n * @hidden\n */\nexport var RenderType;\n(function (RenderType) {\n /** Defines RenderType as Toolbar */\n RenderType[RenderType[\"Toolbar\"] = 0] = \"Toolbar\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Popup\"] = 2] = \"Popup\";\n /** Defines RenderType as LinkToolbar */\n RenderType[RenderType[\"LinkToolbar\"] = 3] = \"LinkToolbar\";\n /** Defines RenderType as TextToolbar */\n RenderType[RenderType[\"TextToolbar\"] = 4] = \"TextToolbar\";\n /** Defines RenderType as ImageToolbar */\n RenderType[RenderType[\"ImageToolbar\"] = 5] = \"ImageToolbar\";\n /** Defines RenderType as ImageToolbar */\n RenderType[RenderType[\"InlineToolbar\"] = 6] = \"InlineToolbar\";\n RenderType[RenderType[\"TableToolbar\"] = 7] = \"TableToolbar\";\n})(RenderType || (RenderType = {}));\nexport var ToolbarType;\n(function (ToolbarType) {\n /** Defines ToolbarType as Standard */\n ToolbarType[\"Expand\"] = \"Expand\";\n /** Defines ToolbarType as MultiRow */\n ToolbarType[\"MultiRow\"] = \"MultiRow\";\n})(ToolbarType || (ToolbarType = {}));\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/**\n * Specifies RichTextEditor internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var iframeMouseDown = 'iframe-click';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\nexport var refreshBegin = 'refresh-begin';\n/** @hidden */\nexport var toolbarUpdated = 'toolbar-updated';\n/** @hidden */\nexport var bindOnEnd = 'bind-on-end';\n/** @hidden */\nexport var renderColorPicker = 'render-color-picker';\n/** @hidden */\nexport var htmlToolbarClick = 'html-toolbar-click';\n/** @hidden */\nexport var markdownToolbarClick = 'markdown-toolbar-click';\n/** @hidden */\nexport var destroyColorPicker = 'destroy-color-picker';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var keyUp = 'keyUp';\n/** @hidden */\nexport var keyDown = 'keyDown';\n/** @hidden */\nexport var mouseUp = 'mouseUp';\n/** @hidden */\nexport var toolbarCreated = 'toolbarCreated';\n/** @hidden */\nexport var toolbarRenderComplete = 'toolbarRenderComplete';\n/** @hidden */\nexport var enableFullScreen = 'enableFullScreen';\n/** @hidden */\nexport var disableFullScreen = 'disableFullScreen';\n/** @hidden */\nexport var dropDownSelect = 'dropDownSelect';\n/** @hidden */\nexport var beforeDropDownItemRender = 'beforeDropDownItemRender';\n/** @hidden */\nexport var execCommandCallBack = 'execCommandCallBack';\n/** @hidden */\nexport var imageToolbarAction = 'image-toolbar-action';\n/** @hidden */\nexport var linkToolbarAction = 'link-toolbar-action';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var onResize = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var undo = 'undo';\n/** @hidden */\nexport var redo = 'redo';\n/** @hidden */\nexport var insertLink = 'insertLink';\n/** @hidden */\nexport var unLink = 'unLink';\n/** @hidden */\nexport var editLink = 'editLink';\n/** @hidden */\nexport var openLink = 'openLink';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionSuccess = 'actionSuccess';\n/** @hidden */\nexport var popupOpen = 'popupOpen';\n/** @hidden */\nexport var updateToolbarItem = 'updateToolbarItem';\n/** @hidden */\nexport var insertImage = 'insertImage';\n/** @hidden */\nexport var insertCompleted = 'insertCompleted';\n/** @hidden */\nexport var imageLeft = 'justifyLeft';\n/** @hidden */\nexport var imageRight = 'justifyRight';\n/** @hidden */\nexport var imageCenter = 'justifyCenter';\n/** @hidden */\nexport var imageBreak = 'break';\n/** @hidden */\nexport var imageInline = 'inline';\n/** @hidden */\nexport var imageLink = 'insertImgLink';\n/** @hidden */\nexport var imageAlt = 'imgAltText';\n/** @hidden */\nexport var imageDelete = 'delete';\n/** @hidden */\nexport var imageCaption = 'caption';\n/** @hidden */\nexport var imageSize = 'imageSize';\n/** @hidden */\nexport var sourceCode = 'sourceCode';\n/** @hidden */\nexport var updateSource = 'updateSource';\n/** @hidden */\nexport var toolbarOpen = 'toolbarOpen';\n/** @hidden */\nexport var beforeDropDownOpen = 'beforeDropDownOpen';\n/** @hidden */\nexport var selectionSave = 'selection-save';\n/** @hidden */\nexport var selectionRestore = 'selection-restore';\n/** @hidden */\nexport var expandPopupClick = 'expandPopupClick';\n/** @hidden */\nexport var count = 'count';\n/** @hidden */\nexport var contentFocus = 'contentFocus';\n/** @hidden */\nexport var contentBlur = 'contentBlur';\n/** @hidden */\nexport var mouseDown = 'mouseDown';\n/** @hidden */\nexport var sourceCodeMouseDown = 'sourceCodeMouseDown';\n/** @hidden */\nexport var editAreaClick = 'editAreaClick';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var colorPickerChanged = 'colorPickerChanged';\n/** @hidden */\nexport var tableColorPickerChanged = 'tableColorPickerChanged';\n/** @hidden */\nexport var focusChange = 'focusChange';\n/** @hidden */\nexport var selectAll = 'selectAll';\n/** @hidden */\nexport var selectRange = 'selectRange';\n/** @hidden */\nexport var getSelectedHtml = 'getSelectedHtml';\n/** @hidden */\nexport var renderInlineToolbar = 'renderInlineToolbar';\n/** @hidden */\nexport var paste = 'pasteImage';\n/** @hidden */\nexport var imgModule = 'imageModule';\n/** @hidden */\nexport var rtlMode = 'rtl-mode';\n/** @hidden */\nexport var createTable = 'createTable';\n/** @hidden */\nexport var docClick = 'docClick';\n/** @hidden */\nexport var tableToolbarAction = 'table-toolbar-action';\n/** @hidden */\nexport var checkUndo = 'checkUndoStack';\n","/**\n * RichTextEditor classes defined here.\n */\n/** @hidden */\nexport var CLS_RTE = 'e-richtexteditor';\n/** @hidden */\nexport var CLS_RTL = 'e-rtl';\n/** @hidden */\nexport var CLS_CONTENT = 'e-content';\n/** @hidden */\nexport var CLS_DISABLED = 'e-disabled';\n/** @hidden */\nexport var CLS_SCRIPT_SHEET = 'rte-iframe-script-sheet';\n/** @hidden */\nexport var CLS_STYLE_SHEET = 'rte-iframe-style-sheet';\n/** @hidden */\nexport var CLS_TOOLBAR = 'e-rte-toolbar';\n/** @hidden */\nexport var CLS_TB_FIXED = 'e-rte-tb-fixed';\n/** @hidden */\nexport var CLS_TB_FLOAT = 'e-rte-tb-float';\n/** @hidden */\nexport var CLS_TB_ABS_FLOAT = 'e-rte-tb-abs-float';\n/** @hidden */\nexport var CLS_INLINE = 'e-rte-inline';\n/** @hidden */\nexport var CLS_TB_INLINE = 'e-rte-tb-inline';\n/** @hidden */\nexport var CLS_RTE_EXPAND_TB = 'e-rte-tb-expand';\n/** @hidden */\nexport var CLS_FULL_SCREEN = 'e-rte-full-screen';\n/** @hidden */\nexport var CLS_QUICK_TB = 'e-rte-quick-toolbar';\n/** @hidden */\nexport var CLS_POP = 'e-rte-pop';\n/** @hidden */\nexport var CLS_QUICK_POP = 'e-rte-quick-popup';\n/** @hidden */\nexport var CLS_QUICK_DROPDOWN = 'e-quick-dropdown';\n/** @hidden */\nexport var CLS_IMAGE_POP = 'e-rte-image-popup';\n/** @hidden */\nexport var CLS_INLINE_POP = 'e-rte-inline-popup';\n/** @hidden */\nexport var CLS_INLINE_DROPDOWN = 'e-rte-inline-dropdown';\n/** @hidden */\nexport var CLS_DROPDOWN_POPUP = 'e-rte-dropdown-popup';\n/** @hidden */\nexport var CLS_DROPDOWN_ICONS = 'e-rte-dropdown-icons';\n/** @hidden */\nexport var CLS_DROPDOWN_ITEMS = 'e-rte-dropdown-items';\n/** @hidden */\nexport var CLS_DROPDOWN_BTN = 'e-rte-dropdown-btn';\n/** @hidden */\nexport var CLS_RTE_CONTENT = 'e-rte-content';\n/** @hidden */\nexport var CLS_TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var CLS_TB_EXTENDED = 'e-toolbar-extended';\n/** @hidden */\nexport var CLS_TB_WRAP = 'e-toolbar-wrapper';\n/** @hidden */\nexport var CLS_POPUP = 'e-popup';\n/** @hidden */\nexport var CLS_SEPARATOR = 'e-separator';\n/** @hidden */\nexport var CLS_MINIMIZE = 'e-minimize';\n/** @hidden */\nexport var CLS_MAXIMIZE = 'e-maximize';\n/** @hidden */\nexport var CLS_BACK = 'e-back';\n/** @hidden */\nexport var CLS_SHOW = 'e-show';\n/** @hidden */\nexport var CLS_HIDE = 'e-hide';\n/** @hidden */\nexport var CLS_VISIBLE = 'e-visible';\n/** @hidden */\nexport var CLS_FOCUS = 'e-focused';\n/** @hidden */\nexport var CLS_RM_WHITE_SPACE = 'e-remove-white-space';\n/** @hidden */\nexport var CLS_IMGRIGHT = 'e-imgright';\n/** @hidden */\nexport var CLS_IMGLEFT = 'e-imgleft';\n/** @hidden */\nexport var CLS_IMGCENTER = 'e-imgcenter';\n/** @hidden */\nexport var CLS_IMGBREAK = 'e-imgbreak';\n/** @hidden */\nexport var CLS_CAPTION = 'e-img-caption';\n/** @hidden */\nexport var CLS_CAPINLINE = 'e-caption-inline';\n/** @hidden */\nexport var CLS_IMGINLINE = 'e-imginline';\n/** @hidden */\nexport var CLS_COUNT = 'e-rte-character-count';\n/** @hidden */\nexport var CLS_WARNING = 'e-warning';\n/** @hidden */\nexport var CLS_ERROR = 'e-error';\n/** @hidden */\nexport var CLS_ICONS = 'e-icons';\n/** @hidden */\nexport var CLS_ACTIVE = 'e-active';\n/** @hidden */\nexport var CLS_EXPAND_OPEN = 'e-expand-open';\n/** @hidden */\nexport var CLS_RTE_ELEMENTS = 'e-rte-elements';\n/** @hidden */\nexport var CLS_TB_BTN = 'e-tbar-btn';\n/** @hidden */\nexport var CLS_HR_SEPARATOR = 'e-rte-horizontal-separator';\n/** @hidden */\nexport var CLS_TB_IOS_FIX = 'e-tbar-ios-fixed';\n/** @hidden */\nexport var CLS_TB_STATIC = 'e-tb-static';\n/** @hidden */\nexport var CLS_FORMATS_TB_BTN = 'e-formats-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_NAME_TB_BTN = 'e-font-name-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_SIZE_TB_BTN = 'e-font-size-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_COLOR_TARGET = 'e-rte-fontcolor-element';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_TARGET = 'e-rte-backgroundcolor-element';\n/** @hidden */\nexport var CLS_COLOR_CONTENT = 'e-rte-color-content';\n/** @hidden */\nexport var CLS_FONT_COLOR_DROPDOWN = 'e-rte-fontcolor-dropdown';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_DROPDOWN = 'e-rte-backgroundcolor-dropdown';\n/** @hidden */\nexport var CLS_COLOR_PALETTE = 'e-rte-square-palette';\n/** @hidden */\nexport var CLS_FONT_COLOR_PICKER = 'e-rte-fontcolor-colorpicker';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_PICKER = 'e-rte-backgroundcolor-colorpicker';\n/** @hidden */\nexport var CLS_RTE_READONLY = 'e-rte-readonly';\n/** @hidden */\nexport var CLS_TABLE_SEL = 'e-cell-select';\n/** @hidden */\nexport var CLS_TB_DASH_BOR = 'e-dashed-border';\n/** @hidden */\nexport var CLS_TB_ALT_BOR = 'e-alternate-border';\n/** @hidden */\nexport var CLS_TB_COL_RES = 'e-column-resize';\n/** @hidden */\nexport var CLS_TB_ROW_RES = 'e-row-resize';\n/** @hidden */\nexport var CLS_TB_BOX_RES = 'e-table-box';\n","// tslint:disable\n/**\n * Export items model\n */\nexport var templateItems = ['alignments', 'formats', 'fontname', 'fontsize', 'fontcolor', 'backgroundcolor', 'align', 'display', 'tablerows', 'tablecolumns', 'tablecellhorizontalalign', 'tablecellverticalalign', 'styles'];\nexport var tools = {\n 'alignments': {\n 'id': 'Alignments',\n 'icon': 'e-alignments',\n 'tooltip': 'Alignments',\n 'command': 'Alignments',\n 'subCommand': 'Alignments'\n },\n 'justifyleft': {\n 'id': 'JustifyLeft',\n 'icon': 'e-justify-left',\n 'tooltip': 'JustifyLeft',\n 'command': 'Alignments',\n 'subCommand': 'JustifyLeft'\n },\n 'justifycenter': {\n 'id': 'JustifyCenter',\n 'icon': 'e-justify-center',\n 'tooltip': 'JustifyCenter',\n 'command': 'Alignments',\n 'subCommand': 'JustifyCenter'\n },\n 'justifyright': {\n 'id': 'JustifyRight',\n 'icon': 'e-justify-right',\n 'tooltip': 'JustifyRight',\n 'command': 'Alignments',\n 'subCommand': 'JustifyRight'\n },\n 'justifyfull': {\n 'id': 'JustifyFull',\n 'icon': 'e-justify-full',\n 'tooltip': 'JustifyFull',\n 'command': 'Alignments',\n 'subCommand': 'JustifyFull'\n },\n 'fontname': {\n 'id': 'FontName',\n 'icon': 'e-font-name',\n 'tooltip': 'Font Name',\n 'command': 'Font',\n 'subCommand': 'FontName'\n },\n 'fontsize': {\n 'id': 'FontSize',\n 'icon': 'e-font-size',\n 'tooltip': 'Font Size',\n 'command': 'Font',\n 'subCommand': 'FontSize'\n },\n 'fontcolor': {\n 'id': 'FontColor',\n 'icon': 'e-font-color',\n 'tooltip': 'Font Color',\n 'command': 'Font',\n 'subCommand': 'FontColor',\n 'value': '#ff0000ff'\n },\n 'backgroundcolor': {\n 'id': 'BackgroundColor',\n 'icon': 'e-background-color',\n 'tooltip': 'Background Color',\n 'command': 'Font',\n 'subCommand': 'BackgroundColor',\n 'value': '#ffff00ff'\n },\n 'bold': {\n 'id': 'Bold',\n 'icon': 'e-bold',\n 'tooltip': 'Bold',\n 'command': 'Style',\n 'subCommand': 'Bold'\n },\n 'italic': {\n 'id': 'Italic',\n 'icon': 'e-italic',\n 'tooltip': 'Italic',\n 'command': 'Style',\n 'subCommand': 'Italic'\n },\n 'underline': {\n 'id': 'Underline',\n 'icon': 'e-underline',\n 'tooltip': 'Underline',\n 'command': 'Style',\n 'subCommand': 'Underline'\n },\n 'strikethrough': {\n 'id': 'StrikeThrough',\n 'icon': 'e-strike-through',\n 'tooltip': 'StrikeThrough',\n 'command': 'Style',\n 'subCommand': 'StrikeThrough'\n },\n 'clearformat': {\n 'id': 'ClearFormat',\n 'icon': 'e-clear-format',\n 'tooltip': 'Clear Format',\n 'command': 'Clear',\n 'subCommand': 'ClearFormat'\n },\n 'clearall': {\n 'id': 'ClearAll',\n 'icon': 'e-clear-all',\n 'tooltip': 'Clear All',\n 'command': 'Clear',\n 'subCommand': 'ClearAll'\n },\n 'cut': {\n 'id': 'Cut',\n 'icon': 'e-cut',\n 'tooltip': 'Cut',\n 'command': 'ClipBoard',\n 'subCommand': 'Cut'\n },\n 'copy': {\n 'id': 'Copy',\n 'icon': 'e-copy',\n 'tooltip': 'Copy',\n 'command': 'ClipBoard',\n 'subCommand': 'Copy'\n },\n 'paste': {\n 'id': 'Paste',\n 'icon': 'e-paste',\n 'tooltip': 'Paste',\n 'command': 'ClipBoard',\n 'subCommand': 'Paste'\n },\n 'unorderedlist': {\n 'id': 'UnorderedList',\n 'icon': 'e-unorder-list',\n 'tooltip': 'Bulleted List',\n 'command': 'Lists',\n 'subCommand': 'UL'\n },\n 'orderedlist': {\n 'id': 'OrderedList',\n 'icon': 'e-order-list',\n 'tooltip': 'Numbered List',\n 'command': 'Lists',\n 'subCommand': 'OL'\n },\n 'indent': {\n 'id': 'Indent',\n 'icon': 'e-indent',\n 'tooltip': 'Increase Indent',\n 'command': 'Indents',\n 'subCommand': 'Indent'\n },\n 'outdent': {\n 'id': 'Outdent',\n 'icon': 'e-outdent',\n 'tooltip': 'Decrease Indent',\n 'command': 'Indents',\n 'subCommand': 'Outdent'\n },\n 'undo': {\n 'id': 'Undo',\n 'icon': 'e-undo',\n 'tooltip': 'Undo',\n 'command': 'Actions',\n 'subCommand': 'Undo'\n },\n 'redo': {\n 'id': 'Redo',\n 'icon': 'e-redo',\n 'tooltip': 'Redo',\n 'command': 'Actions',\n 'subCommand': 'Redo'\n },\n 'superscript': {\n 'id': 'SuperScript',\n 'icon': 'e-super-script',\n 'tooltip': 'Superscript',\n 'command': 'Effects',\n 'subCommand': 'SuperScript'\n },\n 'subscript': {\n 'id': 'SubScript',\n 'icon': 'e-sub-script',\n 'tooltip': 'Subscript',\n 'command': 'Effects',\n 'subCommand': 'SubScript'\n },\n 'createlink': {\n 'id': 'CreateLink',\n 'icon': 'e-create-link',\n 'tooltip': 'Insert Hyperlink',\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n },\n 'openlink': {\n 'id': 'OpenLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Links',\n 'subCommand': 'OpenLink'\n },\n 'editlink': {\n 'id': 'EditLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Links',\n 'subCommand': 'EditLink'\n },\n 'removelink': {\n 'id': 'RemoveLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Links',\n 'subCommand': 'RemoveLink'\n },\n 'image': {\n 'id': 'Image',\n 'icon': 'e-image',\n 'tooltip': 'Insert Image',\n 'command': 'Images',\n 'subCommand': 'Image'\n },\n 'createtable': {\n 'id': 'CreateTable',\n 'icon': 'e-create-table',\n 'tooltip': 'Create Table',\n 'command': 'Table',\n 'subCommand': 'CreateTable'\n },\n 'removetable': {\n 'id': 'removeTable',\n 'icon': 'e-remove-table',\n 'tooltip': 'Remove Table',\n 'command': 'removeTable',\n 'subCommand': 'removeTable'\n },\n 'replace': {\n 'id': 'Replace',\n 'icon': 'e-replace',\n 'tooltip': 'Replace',\n 'command': 'Images',\n 'subCommand': 'Replace'\n },\n 'align': {\n 'id': 'Align',\n 'icon': 'e-align',\n 'tooltip': 'Align',\n 'command': 'Images',\n 'subCommand': 'Align'\n },\n 'caption': {\n 'id': 'Caption',\n 'icon': 'e-caption',\n 'tooltip': 'Image Caption',\n 'command': 'Images',\n 'subCommand': 'Caption'\n },\n 'remove': {\n 'id': 'Remove',\n 'icon': 'e-remove',\n 'tooltip': 'Remove',\n 'command': 'Images',\n 'subCommand': 'Remove'\n },\n 'openimagelink': {\n 'id': 'OpenImageLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Images',\n 'subCommand': 'OpenImageLink'\n },\n 'editimagelink': {\n 'id': 'EditIamgeLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Images',\n 'subCommand': 'EditImageLink'\n },\n 'removeimagelink': {\n 'id': 'RemoveImageLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Images',\n 'subCommand': 'RemoveImageLink'\n },\n 'insertlink': {\n 'id': 'InsertLink',\n 'icon': 'e-insert-link',\n 'tooltip': 'Insert Link',\n 'command': 'Images',\n 'subCommand': 'InsertLink'\n },\n 'display': {\n 'id': 'Display',\n 'icon': 'e-display',\n 'tooltip': 'Display',\n 'command': 'Images',\n 'subCommand': 'Display'\n },\n 'alttext': {\n 'id': 'AltText',\n 'icon': 'e-alt-text',\n 'tooltip': 'Alternative Text',\n 'command': 'Images',\n 'subCommand': 'AltText'\n },\n 'dimension': {\n 'id': 'Dimension',\n 'icon': 'e-dimension',\n 'tooltip': 'Change Size',\n 'command': 'Images',\n 'subCommand': 'Dimension'\n },\n 'fullscreen': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'View',\n 'subCommand': 'Maximize'\n },\n 'maximize': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'FullScreen',\n 'subCommand': 'Maximize'\n },\n 'minimize': {\n 'id': 'Minimize',\n 'icon': 'e-minimize',\n 'tooltip': 'Minimize',\n 'command': 'FullScreen',\n 'subCommand': 'Minimize'\n },\n 'lowercase': {\n 'id': 'LowerCase',\n 'icon': 'e-lower-case',\n 'tooltip': 'Lower Case',\n 'command': 'Casing',\n 'subCommand': 'LowerCase'\n },\n 'uppercase': {\n 'id': 'UpperCase',\n 'icon': 'e-upper-case',\n 'tooltip': 'Upper Case',\n 'command': 'Casing',\n 'subCommand': 'UpperCase'\n },\n 'print': {\n 'id': 'Print',\n 'icon': 'e-print',\n 'tooltip': 'Print',\n 'command': 'Print',\n 'subCommand': 'Print'\n },\n 'formats': {\n 'id': 'Formats',\n 'icon': 'e-formats',\n 'tooltip': 'Formats',\n 'command': 'Formats',\n 'subCommand': 'Formats'\n },\n 'sourcecode': {\n 'id': 'SourceCode',\n 'icon': 'e-source-code',\n 'tooltip': 'Source Code',\n 'command': 'SourceCode',\n 'subCommand': 'SourceCode'\n },\n 'preview': {\n 'id': 'Preview',\n 'icon': 'e-preview',\n 'tooltip': 'Preview',\n 'command': 'Preview',\n 'subCommand': 'Preview'\n },\n 'viewside': {\n 'id': 'ViewSide',\n 'icon': 'e-view-side',\n 'tooltip': 'ViewSide',\n 'command': 'ViewSide',\n 'subCommand': 'ViewSide'\n },\n 'insertcode': {\n 'id': 'InsertCode',\n 'icon': 'e-insert-code',\n 'tooltip': 'Insert Code',\n 'command': 'InsertCode',\n 'subCommand': 'InsertCode'\n },\n 'tableheader': {\n 'id': 'TableHeader',\n 'icon': 'e-table-header',\n 'tooltip': 'Table Header',\n 'command': 'Table',\n 'subCommand': 'TableHeader'\n },\n 'tableremove': {\n 'id': 'TableRemove',\n 'icon': 'e-table-remove',\n 'tooltip': 'Table Remove',\n 'command': 'Table',\n 'subCommand': 'TableRemove'\n },\n 'tablerows': {\n 'id': 'TableRows',\n 'icon': 'e-table-rows',\n 'tooltip': 'Table Rows',\n 'command': 'Table',\n 'subCommand': 'TableRows'\n },\n 'tablecolumns': {\n 'id': 'TableColumns',\n 'icon': 'e-table-columns',\n 'tooltip': 'Table Columns',\n 'command': 'Table',\n 'subCommand': 'TableColumns'\n },\n 'tablecellbackground': {\n 'id': 'TableCellBackground',\n 'icon': 'e-table-cell-background',\n 'tooltip': 'Table Cell Background',\n 'command': 'Table',\n 'subCommand': 'TableCellBackground'\n },\n 'tablecellhorizontalalign': {\n 'id': 'TableCellHorizontalAlign',\n 'icon': 'e-table-cell-horizontalAlign',\n 'tooltip': 'Table Cell HorizontalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellHorizontalAlign'\n },\n 'tablecellverticalalign': {\n 'id': 'TableCellVerticalAlign',\n 'icon': 'e-table-cell-verticalAlign',\n 'tooltip': 'Table Cell VerticalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellVerticalAlign'\n },\n 'tableeditproperties': {\n 'id': 'TableEditProperties',\n 'icon': 'e-table-edit-properties',\n 'tooltip': 'Table Edit Properties',\n 'command': 'Table',\n 'subCommand': 'TableEditProperties'\n },\n 'styles': {\n 'id': 'Styles',\n 'icon': 'e-table-styles',\n 'tooltip': 'Styles',\n 'command': 'Table',\n 'subCommand': 'Styles'\n }\n};\nexport var alignmentItems = [\n { iconCss: 'e-icons e-justify-left', text: 'Align Left', command: 'Alignments', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', text: 'Align Center', command: 'Alignments', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', text: 'Align Right', command: 'Alignments', subCommand: 'JustifyRight' },\n { iconCss: 'e-icons e-justify-full', text: 'Align Justify', command: 'Alignments', subCommand: 'JustifyFull' }\n];\nexport var imageAlignItems = [\n { iconCss: 'e-icons e-justify-left', command: 'Images', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', command: 'Images', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', command: 'Images', subCommand: 'JustifyRight' },\n];\nexport var imageDisplayItems = [\n { text: 'Inline', class: 'e-inline', command: 'Images', subCommand: 'Inline' },\n { text: 'Break', class: 'e-break', command: 'Images', subCommand: 'Break' },\n];\nexport var tableRowsItems = [\n { iconCss: 'e-icons e-insert-row-before', text: 'Insert row before', command: 'Table', subCommand: 'InsertRowBefore' },\n { iconCss: 'e-icons e-insert-row-after', text: 'Insert row after', command: 'Table', subCommand: 'InsertRowAfter' },\n { iconCss: 'e-icons e-delete-row', text: 'Delete row', command: 'Table', subCommand: 'DeleteRow' },\n];\nexport var tableColumnsItems = [\n { iconCss: 'e-icons e-insert-column-left', text: 'Insert column left', command: 'Table', subCommand: 'InsertColumnLeft' },\n { iconCss: 'e-icons e-insert-column-right', text: 'Insert column right', command: 'Table', subCommand: 'InsertColumnRight' },\n { iconCss: 'e-icons e-delete-column', text: 'Delete column', command: 'Table', subCommand: 'DeleteColumn' },\n];\nexport var TableCellVerticalAlignItems = [\n { iconCss: 'e-icons e-align-top', text: 'Align Top', command: 'Table', subCommand: 'AlignTop' },\n { iconCss: 'e-icons e-align-middle', text: 'Align Middle', command: 'Table', subCommand: 'AlignMiddle' },\n { iconCss: 'e-icons e-align-bottom', text: 'Align Bottom', command: 'Table', subCommand: 'AlignBottom' },\n];\nexport var TableStyleItems = [\n { text: 'Dashed Borders', class: 'e-dashed-borders', command: 'Table', subCommand: 'Dashed' },\n { text: 'Alternate Rows', class: 'e-alternate-rows', command: 'Table', subCommand: 'Alternate' }\n];\n","// tslint:disable\n/**\n * Export default locale\n */\nexport var defaultLocale = {\n 'alignments': 'Alignments',\n 'justifyLeft': 'Align Left',\n 'justifyCenter': 'Align Center',\n 'justifyRight': 'Align Right',\n 'justifyFull': 'Align Justify',\n 'fontName': 'Font Name',\n 'fontSize': 'Font Size',\n 'fontColor': 'Font Color',\n 'backgroundColor': 'Background Color',\n 'bold': 'Bold',\n 'italic': 'Italic',\n 'underline': 'Underline',\n 'strikethrough': 'Strikethrough',\n 'clearFormat': 'Clear Format',\n 'clearAll': 'Clear All',\n 'cut': 'Cut',\n 'copy': 'Copy',\n 'paste': 'Paste',\n 'unorderedList': 'Bulleted List',\n 'orderedList': 'Numbered List',\n 'indent': 'Increase Indent',\n 'outdent': 'Decrease Indent',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'superscript': 'Superscript',\n 'subscript': 'Subscript',\n 'createLink': 'Insert Hyperlink',\n 'openLink': 'Open Link',\n 'editLink': 'Edit Link',\n 'removeLink': 'Remove Link',\n 'image': 'Insert Image',\n 'replace': 'Replace',\n 'align': 'Align',\n 'caption': 'Image Caption',\n 'remove': 'Remove',\n 'insertLink': 'Insert Link',\n 'display': 'Display',\n 'altText': 'Alternative Text',\n 'dimension': 'Change Size',\n 'fullscreen': 'Maximize',\n 'maximize': 'Maximize',\n 'minimize': 'Minimize',\n 'lowerCase': 'Lower Case',\n 'upperCase': 'Upper Case',\n 'print': 'Print',\n 'formats': 'Formats',\n 'sourcecode': 'Code View',\n 'preview': 'Preview',\n 'viewside': 'ViewSide',\n 'insertCode': 'Insert Code',\n 'linkText': 'Display Text',\n 'linkTooltipLabel': 'Title',\n 'linkWebUrl': 'Web Address',\n 'linkTitle': 'Enter a title',\n 'linkurl': 'http://example.com',\n 'linkOpenInNewWindow': 'Open Link in New Window',\n 'linkHeader': 'Insert Link',\n 'dialogInsert': 'Insert',\n 'dialogCancel': 'Cancel',\n 'dialogUpdate': 'Update',\n 'imageHeader': 'Insert Image',\n 'imageLinkHeader': 'You can also provide a link from the web',\n 'mdimageLink': 'Please provide a URL for your image',\n 'imageUploadMessage': 'Drop image here or browse to upload',\n 'imageDeviceUploadMessage': 'Click here to upload',\n 'imageAlternateText': 'Alternate Text',\n 'alternateHeader': 'Alternative Text',\n 'browse': 'Browse',\n 'imageUrl': 'http://example.com/image.png',\n 'imageCaption': 'Caption',\n 'imageSizeHeader': 'Image Size',\n 'imageHeight': 'Height',\n 'imageWidth': 'Width',\n 'textPlaceholder': 'Enter Text',\n 'tblhead': '1X1',\n 'inserttablebtn': 'Insert Table',\n 'tabledialogHeader': 'Insert Table',\n 'tableWidth': 'Width',\n 'cellpadding': 'Cell Padding',\n 'cellspacing': 'Cell Spacing',\n 'columns': 'Number of columns',\n 'rows': 'Number of rows',\n 'tableRows': 'Table Rows',\n 'tableColumns': 'Table Columns',\n 'tableCellHorizontalAlign': 'Table Cell Horizontal Align',\n 'tableCellVerticalAlign': 'Table Cell Vertical Align',\n 'createTable': 'Create Table',\n 'removeTable': 'Remove Table',\n 'tableHeader': 'Table Header',\n 'tableRemove': 'Table Remove',\n 'tableCellBackground': 'Table Cell Background',\n 'tableEditProperties': 'Table Edit Properties',\n 'styles': 'Styles',\n 'insertColumnLeft': 'Insert Column Left',\n 'insertColumnRight': 'Insert Column Right',\n 'deleteColumn': 'Delete Column',\n 'insertRowBefore': 'Insert Row Before',\n 'insertRowAfter': 'Insert Row After',\n 'deleteRow': 'Delete Row'\n};\nexport var toolsLocale = {\n 'alignments': 'alignments',\n 'justifyleft': 'justifyLeft',\n 'justifycenter': 'justifyCenter',\n 'justifyright': 'justifyRight',\n 'justifyfull': 'justifyFull',\n 'fontname': 'fontName',\n 'fontsize': 'fontSize',\n 'fontcolor': 'fontColor',\n 'backgroundcolor': 'backgroundColor',\n 'bold': 'bold',\n 'italic': 'italic',\n 'underline': 'underline',\n 'strikethrough': 'strikethrough',\n 'clearformat': 'clearFormat',\n 'clearall': 'clearAll',\n 'cut': 'cut',\n 'copy': 'copy',\n 'paste': 'paste',\n 'unorderedlist': 'unorderedList',\n 'orderedlist': 'orderedList',\n 'indent': 'indent',\n 'outdent': 'outdent',\n 'undo': 'undo',\n 'redo': 'redo',\n 'superscript': 'superscript',\n 'subscript': 'subscript',\n 'createlink': 'createLink',\n 'openlink': 'openLink',\n 'editlink': 'editLink',\n 'removelink': 'removeLink',\n 'openimagelink': 'openLink',\n 'editimagelink': 'editLink',\n 'removeimagelink': 'removeLink',\n 'image': 'image',\n 'replace': 'replace',\n 'align': 'align',\n 'caption': 'caption',\n 'remove': 'remove',\n 'insertlink': 'insertLink',\n 'display': 'display',\n 'alttext': 'altText',\n 'dimension': 'dimension',\n 'fullscreen': 'fullscreen',\n 'maximize': 'maximize',\n 'minimize': 'minimize',\n 'lowercase': 'lowerCase',\n 'uppercase': 'upperCase',\n 'print': 'print',\n 'formats': 'formats',\n 'sourcecode': 'sourcecode',\n 'preview': 'preview',\n 'viewside': 'viewside',\n 'insertcode': 'insertCode',\n 'tablerows': 'tableRows',\n 'tablecolumns': 'tableColumns',\n 'tablecellhorizontalalign': 'tableCellHorizontalAlign',\n 'tablecellverticalalign': 'tableCellVerticalAlign',\n 'createtable': 'createTable',\n 'removetable': 'removeTable',\n 'tableheader': 'tableHeader',\n 'tableremove': 'tableRemove',\n 'tablecellbackground': 'tableCellBackground',\n 'tableeditproperties': 'tableEditProperties',\n 'styles': 'styles',\n 'insertcolumnleft': 'insertColumnLeft',\n 'insertcolumnright': 'insertColumnRight',\n 'deletecolumn': 'deleteColumn',\n 'aligntop': 'AlignTop',\n 'alignmiddle': 'AlignMiddle',\n 'alignbottom': 'AlignBottom',\n 'insertrowbefore': 'insertRowBefore',\n 'insertrowafter': 'insertRowAfter',\n 'deleterow': 'deleteRow'\n};\n","import { addClass, Browser, removeClass, EventHandler } from '@syncfusion/ej2-base';\nimport { getInstance, closest, selectAll } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport * as classes from '../base/classes';\nimport * as events from '../base/constant';\nimport { CLS_TOOLBAR, CLS_DROPDOWN_BTN, CLS_RTE_ELEMENTS, CLS_TB_BTN, CLS_INLINE_DROPDOWN, CLS_COLOR_CONTENT, CLS_FONT_COLOR_DROPDOWN, CLS_BACKGROUND_COLOR_DROPDOWN, CLS_COLOR_PALETTE, CLS_FONT_COLOR_PICKER, CLS_BACKGROUND_COLOR_PICKER } from '../base/classes';\nimport { isIDevice } from '../base/util';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * `Toolbar renderer` module is used to render toolbar in RichTextEditor.\n * @hidden\n */\nvar ToolbarRenderer = /** @class */ (function () {\n /**\n * Constructor for toolbar renderer module\n */\n function ToolbarRenderer(parent) {\n this.parent = parent;\n this.wireEvent();\n }\n ToolbarRenderer.prototype.wireEvent = function () {\n this.parent.on(events.destroy, this.unWireEvent, this);\n };\n ToolbarRenderer.prototype.unWireEvent = function () {\n this.parent.off(events.destroy, this.unWireEvent);\n if (this.popupOverlay) {\n EventHandler.remove(this.popupOverlay, 'click touchmove', this.onPopupOverlay);\n }\n };\n ToolbarRenderer.prototype.toolbarBeforeCreate = function (e) {\n if (this.mode === 'Extended') {\n e.enableCollision = false;\n }\n };\n ToolbarRenderer.prototype.toolbarCreated = function () {\n this.parent.notify(events.toolbarCreated, this);\n };\n ToolbarRenderer.prototype.toolbarClicked = function (args) {\n if (this.parent.readonly || !this.parent.enabled) {\n return;\n }\n this.parent.notify(events.toolbarClick, args);\n this.parent.trigger('toolbarClick', args);\n };\n ToolbarRenderer.prototype.dropDownSelected = function (args) {\n this.parent.notify(events.dropDownSelect, args);\n };\n ToolbarRenderer.prototype.beforeDropDownItemRender = function (args) {\n if (this.parent.readonly || !this.parent.enabled) {\n return;\n }\n this.parent.notify(events.beforeDropDownItemRender, args);\n };\n ToolbarRenderer.prototype.dropDownOpen = function (args) {\n this.parent.notify(events.selectionSave, args);\n };\n ToolbarRenderer.prototype.dropDownClose = function (args) {\n this.parent.notify(events.selectionRestore, args);\n };\n ToolbarRenderer.prototype.renderToolbar = function (args) {\n this.setPanel(args.target);\n this.renderPanel();\n this.mode = args.overflowMode;\n args.rteToolbarObj.toolbarObj = new Toolbar({\n items: args.items,\n width: '100%',\n overflowMode: args.overflowMode,\n beforeCreate: this.toolbarBeforeCreate.bind(this),\n created: this.toolbarCreated.bind(this),\n clicked: this.toolbarClicked.bind(this),\n enablePersistence: args.enablePersistence,\n enableRtl: args.enableRtl\n });\n args.rteToolbarObj.toolbarObj.createElement = this.parent.createElement;\n args.rteToolbarObj.toolbarObj.appendTo(args.target);\n };\n ToolbarRenderer.prototype.renderDropDownButton = function (args) {\n var _this = this;\n var css;\n args.element.classList.add(CLS_DROPDOWN_BTN);\n css = args.cssClass + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN;\n if (this.parent.inlineMode.enable && Browser.isDevice) {\n css = css + ' ' + CLS_INLINE_DROPDOWN;\n }\n var proxy = this;\n var dropDown = new DropDownButton({\n items: args.items,\n iconCss: args.iconCss,\n cssClass: css,\n content: args.content,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n select: this.dropDownSelected.bind(this),\n beforeOpen: function (args) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n args.cancel = true;\n return;\n }\n for (var index = 0; index < args.element.childNodes.length; index++) {\n var divNode = _this.parent.createElement('div');\n divNode.innerHTML = dropDown.content.trim();\n if (divNode.textContent.trim() !== ''\n && args.element.childNodes[index].textContent.trim() === divNode.textContent.trim()) {\n if (!args.element.childNodes[index].classList.contains('e-active')) {\n addClass([args.element.childNodes[index]], 'e-active');\n }\n }\n else {\n removeClass([args.element.childNodes[index]], 'e-active');\n }\n }\n proxy.parent.notify(events.beforeDropDownOpen, args);\n if (Browser.isDevice && !args.element.parentElement.classList.contains(classes.CLS_QUICK_DROPDOWN)) {\n var popupInst = getInstance(args.element.parentElement, Popup);\n popupInst.relateTo = document.body;\n popupInst.position = { X: 0, Y: 0 };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'none', Y: 'none' };\n popupInst.offsetY = 4;\n _this.setIsModel(args.element.parentElement);\n }\n },\n close: this.dropDownClose.bind(this),\n open: this.dropDownOpen.bind(this),\n beforeItemRender: this.beforeDropDownItemRender.bind(this)\n });\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n args.element.tabIndex = -1;\n return dropDown;\n };\n ToolbarRenderer.prototype.onPopupOverlay = function (args) {\n closest(this.popupOverlay, '.e-popup-container').style.display = 'none';\n this.popupOverlay.style.display = 'none';\n removeClass([this.popupOverlay], 'e-popup-overlay');\n };\n ToolbarRenderer.prototype.setIsModel = function (element) {\n if (!closest(element, '.e-popup-container')) {\n var popupContainer = this.parent.createElement('div', {\n className: 'e-rte-modal-popup e-popup-container e-center'\n });\n element.parentNode.insertBefore(popupContainer, element);\n popupContainer.appendChild(element);\n popupContainer.style.zIndex = element.style.zIndex;\n popupContainer.style.display = 'flex';\n element.style.position = 'relative';\n addClass([element], 'e-popup-modal');\n this.popupOverlay = this.parent.createElement('div', { className: 'e-popup-overlay' });\n this.popupOverlay.style.zIndex = (parseInt(element.style.zIndex, null) - 1).toString();\n this.popupOverlay.style.display = 'block';\n popupContainer.appendChild(this.popupOverlay);\n EventHandler.add(this.popupOverlay, 'click touchmove', this.onPopupOverlay, this);\n }\n else {\n element.parentElement.style.display = 'flex';\n element.nextElementSibling.style.display = 'block';\n addClass([element.nextElementSibling], 'e-popup-overlay');\n }\n };\n ToolbarRenderer.prototype.paletteSelection = function (dropDownArgs, currentElement) {\n var _this = this;\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var colorbox = [].slice.call(selectAll('.e-tile', ele.parentElement));\n removeClass(colorbox, 'e-selected');\n var style = currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n (colorbox.filter(function (colorbox) {\n if (colorbox.getAttribute('aria-label') === _this.colorPicker.getValue(style, 'hex')) {\n addClass([colorbox], 'e-selected');\n }\n }));\n };\n ToolbarRenderer.prototype.renderColorPickerDropDown = function (args, item, colorPicker) {\n var _this = this;\n var proxy = this;\n var css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');\n css += (' ' + ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_DROPDOWN : CLS_FONT_COLOR_DROPDOWN));\n var content = proxy.parent.createElement('span', { className: CLS_COLOR_CONTENT });\n var inlineEle = proxy.parent.createElement('span', { className: args.cssClass });\n var range;\n inlineEle.style.borderBottomColor = (item === 'backgroundcolor') ?\n proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n content.appendChild(inlineEle);\n var dropDown = new DropDownButton({\n target: colorPicker.element.parentElement,\n cssClass: css,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n beforeOpen: function (dropDownArgs) {\n proxy.parent.notify(events.selectionRestore, {});\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n dropDownArgs.cancel = true;\n return;\n }\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n proxy.currentElement = dropDown.element;\n proxy.currentDropdown = dropDown;\n proxy.paletteSelection(dropDownArgs, proxy.currentElement);\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n dropDownArgs.cancel = true;\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || closest(range.startContainer.parentNode, 'td')) && range.collapsed) {\n proxy.parent.notify(events.tableColorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n else {\n if (Browser.isDevice) {\n var popupInst = getInstance(dropDownArgs.element.parentElement, Popup);\n popupInst.relateTo = document.body;\n popupInst.position = { X: 0, Y: 0 };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n _this.setIsModel(dropDownArgs.element.parentElement);\n }\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var inst = getInstance(ele, ColorPicker);\n inst.showButtons = (dropDownArgs.element.querySelector('.e-color-palette')) ? false : true;\n }\n dropDownArgs.element.onclick = function (args) {\n if (args.target.classList.contains('e-cancel')) {\n dropDown.toggle();\n }\n };\n },\n open: function (dropDownArgs) {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var focusEle;\n if (dropDownArgs.element.querySelector('.e-color-palette')) {\n focusEle = ele.parentElement.querySelector('.e-palette');\n }\n else {\n focusEle = ele.parentElement.querySelector('e-handler');\n }\n if (focusEle) {\n focusEle.focus();\n }\n },\n beforeClose: function (dropDownArgs) {\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n /* tslint:enable */\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || closest(range.startContainer.parentNode, 'td')) && range.collapsed) {\n proxy.parent.notify(events.tableColorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n },\n close: function (dropDownArgs) {\n proxy.parent.notify(events.selectionRestore, {});\n var dropElement = closest(dropDownArgs.element.parentElement, '.e-popup-container');\n if (dropElement) {\n dropElement.style.display = 'none';\n dropElement.lastElementChild.style.display = 'none';\n removeClass([dropElement.lastElementChild], 'e-popup-overlay');\n }\n }\n });\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n dropDown.element.insertBefore(content, dropDown.element.querySelector('.e-caret'));\n args.element.tabIndex = -1;\n dropDown.element.onmousedown = function () {\n proxy.parent.notify(events.selectionSave, {});\n };\n return dropDown;\n };\n ToolbarRenderer.prototype.renderColorPicker = function (args, item) {\n var _this = this;\n var proxy = this;\n this.colorPicker = new ColorPicker({\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n value: (!this.parent.inlineMode.enable && !this.parent.quickToolbarSettings.enable) ?\n ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default) : null,\n inline: true,\n mode: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.mode : proxy.parent.fontColor.mode),\n modeSwitcher: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.modeSwitcher : proxy.parent.fontColor.modeSwitcher),\n beforeTileRender: function (args) {\n args.element.classList.add(CLS_COLOR_PALETTE);\n },\n change: function (colorPickerArgs) {\n /* tslint:disable */\n var colorpickerValue = Browser.info.name === 'msie' || Browser.info.name === 'edge' || isIDevice() ? colorPickerArgs.currentValue.rgba : colorPickerArgs.currentValue.hex;\n /* tslint:enable */\n colorPickerArgs.item = {\n command: args.command,\n subCommand: args.subCommand,\n value: colorpickerValue\n };\n proxy.currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor = colorpickerValue;\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || closest(range.startContainer.parentNode, 'td')) && range.collapsed) {\n proxy.parent.notify(events.tableColorPickerChanged, colorPickerArgs);\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, colorPickerArgs);\n }\n proxy.currentDropdown.toggle();\n },\n beforeModeSwitch: function (args) {\n _this.colorPicker.showButtons = args.mode === 'Palette' ? false : true;\n }\n });\n this.colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;\n this.colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :\n this.parent.fontColor.colorCode;\n this.colorPicker.cssClass = (item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER;\n this.colorPicker.createElement = this.parent.createElement;\n this.colorPicker.appendTo(document.body.querySelector(args.target));\n return this.colorPicker;\n };\n /**\n * The function is used to render RichTextEditor toolbar\n */\n ToolbarRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_TOOLBAR);\n };\n /**\n * Get the toolbar element of RichTextEditor\n * @return {Element}\n */\n ToolbarRenderer.prototype.getPanel = function () {\n return this.toolbarPanel;\n };\n /**\n * Set the toolbar element of RichTextEditor\n * @param {Element} panel\n */\n ToolbarRenderer.prototype.setPanel = function (panel) {\n this.toolbarPanel = panel;\n };\n return ToolbarRenderer;\n}());\nexport { ToolbarRenderer };\n","import { RenderType } from '../base/enum';\nimport { CLS_HR_SEPARATOR } from '../base/classes';\nimport * as events from '../base/constant';\nimport { getTooltipText } from '../base/util';\nimport { tools, templateItems } from '../models/items';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar BaseToolbar = /** @class */ (function () {\n function BaseToolbar(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n BaseToolbar.prototype.addEventListener = function () {\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n BaseToolbar.prototype.removeEventListener = function () {\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n BaseToolbar.prototype.setRtl = function (args) {\n if (!isNullOrUndefined(this.toolbarObj)) {\n this.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n BaseToolbar.prototype.getTemplateObject = function (itemStr, container) {\n var tagName;\n switch (itemStr) {\n case 'fontcolor':\n case 'backgroundcolor':\n tagName = 'span';\n break;\n default:\n tagName = 'button';\n break;\n }\n return {\n command: tools[itemStr].command,\n subCommand: tools[itemStr].subCommand,\n template: this.parent.createElement(tagName, { id: this.parent.getID() + '_' + container + '_' + tools[itemStr].id }).outerHTML,\n tooltipText: getTooltipText(itemStr, this.locator)\n };\n };\n BaseToolbar.prototype.getObject = function (item, container) {\n var itemStr = item.toLowerCase();\n if (templateItems.indexOf(itemStr) !== -1) {\n return this.getTemplateObject(itemStr, container);\n }\n else {\n switch (itemStr) {\n case '|':\n return { type: 'Separator' };\n case '-':\n return { type: 'Separator', cssClass: CLS_HR_SEPARATOR };\n default:\n return {\n id: this.parent.getID() + '_' + container + '_' + tools[itemStr].id,\n prefixIcon: tools[itemStr].icon,\n tooltipText: getTooltipText(itemStr, this.locator),\n command: tools[itemStr].command,\n subCommand: tools[itemStr].subCommand\n };\n }\n }\n };\n /**\n * @hidden\n */\n BaseToolbar.prototype.getItems = function (tbItems, container) {\n if (this.parent.toolbarSettings.items.length < 1) {\n return [];\n }\n var items = [];\n for (var _i = 0, tbItems_1 = tbItems; _i < tbItems_1.length; _i++) {\n var item = tbItems_1[_i];\n switch (typeof item) {\n case 'string':\n items.push(this.getObject(item, container));\n break;\n default:\n items.push(item);\n }\n }\n return items;\n };\n BaseToolbar.prototype.getToolbarOptions = function (args) {\n return {\n target: args.target,\n rteToolbarObj: this,\n items: this.getItems(args.items, args.container),\n overflowMode: args.mode,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl\n };\n };\n BaseToolbar.prototype.render = function (args) {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.toolbarRenderer.renderToolbar(this.getToolbarOptions(args));\n };\n return BaseToolbar;\n}());\nexport { BaseToolbar };\n","import { addClass, removeClass, select } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport { getIndex } from '../base/util';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getDropDownValue, getFormattedFontSize, getTooltipText } from '../base/util';\nimport * as model from '../models/items';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar DropDownButtons = /** @class */ (function () {\n function DropDownButtons(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n DropDownButtons.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n DropDownButtons.prototype.beforeRender = function (args) {\n var item = args.item;\n if (item.class) {\n addClass([args.element], item.class);\n }\n if (item.command === 'Alignments' || item.subCommand === 'JustifyLeft'\n || item.subCommand === 'JustifyRight' || item.subCommand === 'JustifyCenter') {\n args.element.setAttribute('title', getTooltipText(item.subCommand.toLocaleLowerCase(), this.locator));\n }\n };\n DropDownButtons.prototype.dropdownContent = function (width, type, content) {\n return ('' +\n '' + content + '');\n };\n DropDownButtons.prototype.renderDropDowns = function (args) {\n var _this = this;\n this.initializeInstance();\n var type = args.containerType;\n var tbElement = args.container;\n model.templateItems.forEach(function (item) {\n var targetElement = undefined;\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'formats':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Formats', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatItem = _this.parent.format.types.slice();\n formatItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Formats', enumerable: true }, subCommand: { value: item.value, enumerable: true }\n });\n });\n _this.formatDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-formats e-icons' : ''),\n content: _this.dropdownContent(_this.parent.format.width, type, ((type === 'quick') ? '' : getDropDownValue(formatItem, _this.parent.format.default, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FORMATS_TB_BTN,\n itemName: 'Formats',\n items: formatItem,\n element: targetElement\n });\n break;\n case 'fontname':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontName', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontItem = _this.parent.fontFamily.items.slice();\n fontItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontName', enumerable: true }\n });\n });\n _this.fontNameDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-font-name e-icons' : ''),\n content: _this.dropdownContent(_this.parent.fontFamily.width, type, ((type === 'quick') ? '' : getDropDownValue(fontItem, _this.parent.fontFamily.default, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_NAME_TB_BTN,\n itemName: 'FontName',\n items: fontItem,\n element: targetElement\n });\n break;\n case 'fontsize':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontSize', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontsize = _this.parent.fontSize.items.slice();\n fontsize.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontSize', enumerable: true }\n });\n });\n _this.fontSizeDropDown = _this.toolbarRenderer.renderDropDownButton({\n content: _this.dropdownContent(_this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, _this.parent.fontSize.default, 'text', 'value'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_SIZE_TB_BTN,\n itemName: 'FontSize',\n items: fontsize,\n element: targetElement\n });\n break;\n case 'alignments':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Alignments', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n _this.alignDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS,\n itemName: 'Alignments',\n items: model.alignmentItems,\n element: targetElement\n });\n break;\n case 'align':\n _this.imageAlignmentDropDown(type, tbElement, targetElement);\n break;\n case 'display':\n _this.imageDisplayDropDown(type, tbElement, targetElement);\n break;\n case 'tablerows':\n _this.rowDropDown(type, tbElement, targetElement);\n break;\n case 'tablecolumns':\n _this.columnDropDown(type, tbElement, targetElement);\n break;\n case 'tablecellverticalalign':\n _this.verticalAlignDropDown(type, tbElement, targetElement);\n break;\n case 'styles':\n _this.tableStylesDropDown(type, tbElement, targetElement);\n break;\n }\n }\n });\n };\n DropDownButtons.prototype.rowDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableRows', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableRowsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-rows e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableRows',\n items: model.tableRowsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.columnDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableColumns', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableColumnsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-columns e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableColumns',\n items: model.tableColumnsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.verticalAlignDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableCellVerticalAlign', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableCellVerticalAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-cell-ver-align e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableCellVerticalAlign',\n items: model.TableCellVerticalAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.imageDisplayDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Display', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.displayDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-display e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Display',\n items: model.imageDisplayItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.imageAlignmentDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Align', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Align',\n items: model.imageAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.tableStylesDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Styles', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-style e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Styles',\n items: this.parent.tableSettings.styles,\n element: targetElement\n });\n };\n DropDownButtons.prototype.removeDropDownClasses = function (target) {\n removeClass([target], [\n classes.CLS_DROPDOWN_BTN,\n classes.CLS_DROPDOWN_POPUP,\n classes.CLS_DROPDOWN_ICONS,\n classes.CLS_DROPDOWN_ITEMS\n ]);\n };\n DropDownButtons.prototype.destroyDropDowns = function () {\n if (this.formatDropDown) {\n this.removeDropDownClasses(this.formatDropDown.element);\n this.formatDropDown.destroy();\n }\n if (this.fontNameDropDown) {\n this.removeDropDownClasses(this.fontNameDropDown.element);\n this.fontNameDropDown.destroy();\n }\n if (this.fontSizeDropDown) {\n this.removeDropDownClasses(this.fontSizeDropDown.element);\n this.fontSizeDropDown.destroy();\n }\n if (this.alignDropDown) {\n this.removeDropDownClasses(this.alignDropDown.element);\n this.alignDropDown.destroy();\n }\n if (this.imageAlignDropDown) {\n this.removeDropDownClasses(this.imageAlignDropDown.element);\n this.imageAlignDropDown.destroy();\n }\n if (this.displayDropDown) {\n this.removeDropDownClasses(this.displayDropDown.element);\n this.displayDropDown.destroy();\n }\n if (this.tableRowsDropDown) {\n this.removeDropDownClasses(this.tableRowsDropDown.element);\n this.tableRowsDropDown.destroy();\n }\n if (this.tableColumnsDropDown) {\n this.removeDropDownClasses(this.tableColumnsDropDown.element);\n this.tableColumnsDropDown.destroy();\n }\n if (this.tableCellVerticalAlignDropDown) {\n this.removeDropDownClasses(this.tableCellVerticalAlignDropDown.element);\n this.tableCellVerticalAlignDropDown.destroy();\n }\n };\n DropDownButtons.prototype.setRtl = function (args) {\n if (this.formatDropDown) {\n this.formatDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontNameDropDown) {\n this.fontNameDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontSizeDropDown) {\n this.fontSizeDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.alignDropDown) {\n this.alignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageAlignDropDown) {\n this.imageAlignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.displayDropDown) {\n this.displayDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n DropDownButtons.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.beforeDropDownItemRender, this.beforeRender, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n DropDownButtons.prototype.onIframeMouseDown = function () {\n dispatchEvent(document, 'mousedown');\n };\n DropDownButtons.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.beforeDropDownItemRender, this.beforeRender);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return DropDownButtons;\n}());\nexport { DropDownButtons };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[name])) {\n this.services[name] = type;\n }\n };\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[name])) {\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n * @hidden\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n this.rendererMap[rName] = type;\n }\n };\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","import { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\n/**\n * `ToolbarAction` module is used to toolbar click action\n */\nvar ToolbarAction = /** @class */ (function () {\n function ToolbarAction(parent) {\n this.parent = parent;\n this.addEventListener();\n this.serviceLocator = new ServiceLocator;\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n }\n ToolbarAction.prototype.addEventListener = function () {\n this.parent.on(events.toolbarClick, this.toolbarClick, this);\n this.parent.on(events.dropDownSelect, this.dropDownSelect, this);\n this.parent.on(events.colorPickerChanged, this.renderSelection, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ToolbarAction.prototype.toolbarClick = function (args) {\n if (isNOU(args.item)) {\n return;\n }\n if (!isNOU(args.item.controlParent)) {\n var activeEle = args.item.controlParent\n .activeEle;\n if (activeEle) {\n activeEle.tabIndex = -1;\n }\n }\n this.parent.notify(events.htmlToolbarClick, args);\n this.parent.notify(events.markdownToolbarClick, args);\n };\n ToolbarAction.prototype.dropDownSelect = function (e) {\n this.parent.notify(events.selectionRestore, {});\n if (!(document.body.contains(document.body.querySelector('.e-rte-quick-toolbar'))\n && e.item && (e.item.command === 'Images' || e.item.command === 'Display' || e.item.command === 'Table'))) {\n this.parent.formatter.process(this.parent, e, e.originalEvent, null);\n }\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.renderSelection = function (args) {\n this.parent.notify(events.selectionRestore, {});\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarClick, this.toolbarClick);\n this.parent.off(events.dropDownSelect, this.dropDownSelect);\n this.parent.off(events.colorPickerChanged, this.renderSelection);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ToolbarAction;\n}());\nexport { ToolbarAction };\n","import { addClass, Browser, EventHandler, detach, removeClass, select, selectAll, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\nimport { setStyleAttribute } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType, ToolbarType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus, getTBarItemsIndex, getCollection } from '../base/util';\nimport * as model from '../models/items';\nimport { ToolbarRenderer } from '../renderer/toolbar-renderer';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ToolbarAction } from './toolbar-action';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.parent = parent;\n this.isToolbar = false;\n this.locator = serviceLocator;\n this.isTransformChild = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.renderFactory.addRenderer(RenderType.Toolbar, new ToolbarRenderer(this.parent));\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.baseToolbar = new BaseToolbar(this.parent, this.locator);\n this.addEventListener();\n }\n Toolbar.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editableElement = this.contentRenderer.getEditPanel();\n this.editPanel = this.contentRenderer.getPanel();\n };\n Toolbar.prototype.toolbarBindEvent = function () {\n this.keyBoardModule = new KeyboardEvents(this.getToolbarElement(), {\n keyAction: this.toolBarKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n };\n Toolbar.prototype.toolBarKeyDown = function (e) {\n switch (e.action) {\n case 'escape':\n this.parent.contentModule.getEditPanel().focus();\n break;\n }\n };\n Toolbar.prototype.createToolbarElement = function () {\n this.tbElement = this.parent.createElement('div', { id: this.parent.getID() + '_toolbar' });\n if (!Browser.isDevice && this.parent.inlineMode.enable) {\n return;\n }\n else {\n if (this.parent.toolbarSettings.enableFloating && !this.parent.inlineMode.enable) {\n this.tbWrapper = this.parent.createElement('div', {\n id: this.parent.getID() + '_toolbar_wrapper',\n innerHTML: this.tbElement.outerHTML,\n className: classes.CLS_TB_WRAP\n });\n this.tbElement = this.tbWrapper.firstElementChild;\n this.parent.element.insertBefore(this.tbWrapper, this.editPanel);\n }\n else {\n this.parent.element.insertBefore(this.tbElement, this.editPanel);\n }\n }\n };\n Toolbar.prototype.getToolbarMode = function () {\n var tbMode;\n switch (this.parent.toolbarSettings.type) {\n case ToolbarType.Expand:\n tbMode = 'Extended';\n break;\n default:\n tbMode = 'MultiRow';\n }\n return tbMode;\n };\n Toolbar.prototype.checkToolbarResponsive = function (ele) {\n if (!Browser.isDevice) {\n return false;\n }\n this.baseToolbar.render({\n container: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items,\n mode: 'MultiRow',\n target: ele\n });\n addClass([ele], ['e-rte-tb-mobile']);\n if (this.parent.inlineMode.enable) {\n this.addFixedTBarClass();\n }\n else {\n addClass([ele], [classes.CLS_TB_STATIC]);\n }\n this.wireEvents();\n this.dropDownModule.renderDropDowns({\n container: ele,\n containerType: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n return true;\n };\n Toolbar.prototype.checkIsTransformChild = function () {\n this.isTransformChild = false;\n var transformElements = selectAll('[style*=\"transform\"]', document);\n for (var i = 0; i < transformElements.length; i++) {\n if (transformElements[i].contains(this.parent.element)) {\n this.isTransformChild = true;\n break;\n }\n }\n };\n Toolbar.prototype.toggleFloatClass = function (e) {\n var topValue;\n var isBody = false;\n var isFloat = false;\n var scrollParent;\n var floatOffset = this.parent.floatingToolbarOffset;\n if (e && e.target !== document) {\n scrollParent = e.target;\n }\n else {\n isBody = true;\n scrollParent = document.body;\n }\n var tbHeight = this.getToolbarHeight() + this.getExpandTBarPopHeight();\n if (this.isTransformChild) {\n topValue = 0;\n var scrollParentRelativeTop = 0;\n var trgHeight = this.parent.element.offsetHeight;\n if (isBody) {\n var bodyStyle = window.getComputedStyle(scrollParent);\n scrollParentRelativeTop = parseFloat(bodyStyle.marginTop.split('px')[0]) + parseFloat(bodyStyle.paddingTop.split('px')[0]);\n }\n var targetTop = this.parent.element.getBoundingClientRect().top;\n var scrollParentYOffset = (Browser.isMSPointer && isBody) ? window.pageYOffset : scrollParent.parentElement.scrollTop;\n var scrollParentRect = scrollParent.getBoundingClientRect();\n var scrollParentTop = (!isBody) ? scrollParentRect.top : (scrollParentRect.top + scrollParentYOffset);\n var outOfRange = ((targetTop - ((!isBody) ? scrollParentTop : 0)) + trgHeight > tbHeight + floatOffset) ? false : true;\n if (targetTop > (scrollParentTop + floatOffset) || targetTop < -trgHeight || ((targetTop < 0) ? outOfRange : false)) {\n isFloat = false;\n removeClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n }\n else if (targetTop < (scrollParentTop + floatOffset)) {\n if (targetTop < 0) {\n topValue = (-targetTop) + scrollParentTop;\n }\n else {\n topValue = scrollParentTop - targetTop;\n }\n topValue = (isBody) ? topValue - scrollParentRelativeTop : topValue;\n addClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n isFloat = true;\n }\n }\n else {\n var parent_1 = this.parent.element.getBoundingClientRect();\n if (window.innerHeight < parent_1.top) {\n return;\n }\n topValue = (e && e.target !== document) ? scrollParent.getBoundingClientRect().top : 0;\n if ((parent_1.bottom < (floatOffset + tbHeight + topValue)) || parent_1.bottom < 0 || parent_1.top > floatOffset + topValue) {\n isFloat = false;\n }\n else if (parent_1.top < floatOffset) {\n isFloat = true;\n }\n }\n if (!isFloat) {\n removeClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { top: 0 + 'px', width: '100%' });\n }\n else {\n addClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { width: this.parent.element.offsetWidth + 'px', top: (floatOffset + topValue) + 'px' });\n }\n };\n Toolbar.prototype.renderToolbar = function () {\n this.initializeInstance();\n this.createToolbarElement();\n if (this.checkToolbarResponsive(this.tbElement)) {\n return;\n }\n if (this.parent.inlineMode.enable) {\n this.parent.notify(events.renderInlineToolbar, {});\n }\n else {\n this.baseToolbar.render({\n container: 'toolbar',\n items: this.parent.toolbarSettings.items,\n mode: this.getToolbarMode(),\n target: this.tbElement\n });\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.checkIsTransformChild();\n this.toggleFloatClass();\n }\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n addClass([this.parent.element], [classes.CLS_RTE_EXPAND_TB]);\n }\n }\n }\n this.wireEvents();\n if (this.parent.inlineMode.enable) {\n this.addFixedTBarClass();\n }\n if (!this.parent.inlineMode.enable) {\n this.dropDownModule.renderDropDowns({\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.refreshToolbarOverflow();\n }\n };\n Toolbar.prototype.addFixedTBarClass = function () {\n addClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n Toolbar.prototype.removeFixedTBarClass = function () {\n removeClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n Toolbar.prototype.showFixedTBar = function () {\n addClass([this.tbElement], [classes.CLS_SHOW]);\n if (Browser.isIos) {\n addClass([this.tbElement], [classes.CLS_TB_IOS_FIX]);\n }\n };\n Toolbar.prototype.hideFixedTBar = function () {\n (!this.isToolbar) ? removeClass([this.tbElement], [classes.CLS_SHOW, classes.CLS_TB_IOS_FIX]) : this.isToolbar = false;\n };\n Toolbar.prototype.updateItem = function (args) {\n var item = model.tools[args.updateItem.toLocaleLowerCase()];\n var trgItem = model.tools[args.targetItem.toLocaleLowerCase()];\n var index = getTBarItemsIndex(getCollection(trgItem.subCommand), args.baseToolbar.toolbarObj.items)[0];\n if (!isNOU(index)) {\n args.baseToolbar.toolbarObj.items[index].id = this.parent.getID() + '_' + item.id;\n args.baseToolbar.toolbarObj.items[index].prefixIcon = item.icon;\n args.baseToolbar.toolbarObj.items[index].tooltipText = item.tooltip;\n args.baseToolbar.toolbarObj.items[index].subCommand = item.subCommand;\n args.baseToolbar.toolbarObj.dataBind();\n }\n else {\n this.addTBarItem(args, 0);\n }\n };\n Toolbar.prototype.updateToolbarStatus = function (args) {\n var options = {\n args: args,\n dropDownModule: this.dropDownModule,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.tbElement),\n tbItems: this.baseToolbar.toolbarObj.items\n };\n if (this.parent.inlineMode.enable) {\n setToolbarStatus(options, true);\n }\n else {\n setToolbarStatus(options, false);\n }\n };\n Toolbar.prototype.fullScreen = function (e) {\n this.parent.fullScreenModule.showFullScreen(e);\n };\n Toolbar.prototype.hideScreen = function (e) {\n this.parent.fullScreenModule.hideFullScreen(e);\n };\n Toolbar.prototype.getBaseToolbar = function () {\n return this.baseToolbar;\n };\n Toolbar.prototype.addTBarItem = function (args, index) {\n args.baseToolbar.toolbarObj.addItems([args.baseToolbar.getObject(args.updateItem, 'toolbar')], index);\n };\n Toolbar.prototype.enableTBarItems = function (baseToolbar, items, isEnable) {\n var trgItems = getTBarItemsIndex(getCollection(items), baseToolbar.toolbarObj.items);\n this.tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n for (var i = 0; i < trgItems.length; i++) {\n var item = this.tbItems[trgItems[i]];\n if (item) {\n baseToolbar.toolbarObj.enableItems(item, isEnable);\n }\n }\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n Toolbar.prototype.removeTBarItems = function (items) {\n var trgItems = getTBarItemsIndex(getCollection(items), this.baseToolbar.toolbarObj.items);\n this.tbItems = selectAll('.' + classes.CLS_TB_ITEM, this.parent.element);\n for (var i = 0; i < trgItems.length; i++) {\n this.baseToolbar.toolbarObj.removeItems(this.tbItems[trgItems[i]]);\n }\n };\n Toolbar.prototype.getExpandTBarPopHeight = function () {\n var popHeight = 0;\n if (this.parent.toolbarSettings.type === ToolbarType.Expand && this.tbElement.classList.contains('e-extended-toolbar')) {\n var expandPopup = select('.e-toolbar-extended', this.tbElement);\n if (expandPopup && this.tbElement.classList.contains('e-expand-open')\n || expandPopup && expandPopup.classList.contains('e-popup-open')) {\n addClass([expandPopup], [classes.CLS_VISIBLE]);\n popHeight = popHeight + expandPopup.offsetHeight;\n removeClass([expandPopup], [classes.CLS_VISIBLE]);\n }\n else {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n }\n return popHeight;\n };\n Toolbar.prototype.getToolbarHeight = function () {\n return this.tbElement.offsetHeight;\n };\n Toolbar.prototype.getToolbarElement = function () {\n return select('.' + classes.CLS_TOOLBAR, this.parent.element);\n };\n Toolbar.prototype.refreshToolbarOverflow = function () {\n this.baseToolbar.toolbarObj.refreshOverflow();\n };\n Toolbar.prototype.isToolbarDestroyed = function () {\n return this.baseToolbar.toolbarObj && !this.baseToolbar.toolbarObj.isDestroyed;\n };\n Toolbar.prototype.destroyToolbar = function () {\n if (this.isToolbarDestroyed()) {\n this.parent.unWireScrollElementsEvents();\n this.unWireEvents();\n this.parent.notify(events.destroyColorPicker, {});\n this.dropDownModule.destroyDropDowns();\n this.baseToolbar.toolbarObj.destroy();\n this.removeEventListener();\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Toolbar.prototype.destroy = function () {\n if (this.isToolbarDestroyed()) {\n this.destroyToolbar();\n if (this.keyBoardModule) {\n this.keyBoardModule.destroy();\n }\n }\n };\n Toolbar.prototype.scrollHandler = function (e) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.toggleFloatClass(e.args);\n }\n };\n Toolbar.prototype.mouseDownHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.showFixedTBar();\n }\n };\n Toolbar.prototype.focusChangeHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.isToolbar = false;\n this.hideFixedTBar();\n }\n };\n Toolbar.prototype.dropDownBeforeOpenHandler = function () {\n this.isToolbar = true;\n };\n Toolbar.prototype.toolbarMouseDownHandler = function (e) {\n var trg = closest(e.target, '.e-hor-nav');\n if (trg && this.parent.toolbarSettings.type === ToolbarType.Expand && !isNOU(trg)) {\n if (!trg.classList.contains('e-nav-active')) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', false);\n }\n else {\n addClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', true);\n }\n }\n else if (Browser.isDevice || this.parent.inlineMode.enable) {\n this.isToolbar = true;\n }\n if (isNOU(trg) && this.parent.toolbarSettings.type === ToolbarType.Expand) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n EventHandler.add(this.tbElement, 'click mousedown', this.toolbarMouseDownHandler, this);\n };\n Toolbar.prototype.unWireEvents = function () {\n EventHandler.remove(this.tbElement, 'click mousedown', this.toolbarMouseDownHandler);\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.dropDownModule = new DropDownButtons(this.parent, this.locator);\n this.toolbarActionModule = new ToolbarAction(this.parent);\n this.parent.on(events.initialEnd, this.renderToolbar, this);\n if (!this.parent.inlineMode.enable) {\n this.parent.on(events.scroll, this.scrollHandler, this);\n this.parent.on(events.bindOnEnd, this.toolbarBindEvent, this);\n this.parent.on(events.toolbarUpdated, this.updateToolbarStatus, this);\n }\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.refreshBegin, this.onRefresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.enableFullScreen, this.fullScreen, this);\n this.parent.on(events.disableFullScreen, this.hideScreen, this);\n this.parent.on(events.updateToolbarItem, this.updateItem, this);\n this.parent.on(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler, this);\n this.parent.on(events.expandPopupClick, this.parent.setContentHeight, this.parent);\n this.parent.on(events.focusChange, this.focusChangeHandler, this);\n this.parent.on(events.mouseDown, this.mouseDownHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseDownHandler, this);\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderToolbar);\n if (!this.parent.inlineMode.enable) {\n this.parent.off(events.scroll, this.scrollHandler);\n this.parent.off(events.bindOnEnd, this.toolbarBindEvent);\n this.parent.off(events.toolbarUpdated, this.updateToolbarStatus);\n }\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.enableFullScreen, this.parent.fullScreenModule.showFullScreen);\n this.parent.off(events.disableFullScreen, this.parent.fullScreenModule.hideFullScreen);\n this.parent.off(events.updateToolbarItem, this.updateItem);\n this.parent.off(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler);\n this.parent.off(events.expandPopupClick, this.parent.setContentHeight);\n this.parent.off(events.focusChange, this.focusChangeHandler);\n this.parent.off(events.mouseDown, this.mouseDownHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseDownHandler);\n };\n Toolbar.prototype.onRefresh = function () {\n this.refreshToolbarOverflow();\n this.parent.setContentHeight();\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var tbWrapper = select('.' + classes.CLS_TB_WRAP, this.parent.element);\n var tbElement = select('.' + classes.CLS_TOOLBAR, this.parent.element);\n if (tbElement) {\n this.destroyToolbar();\n detach(tbElement);\n if (tbWrapper) {\n detach(tbWrapper);\n }\n this.addEventListener();\n this.renderToolbar();\n this.parent.wireScrollElementsEvents();\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from '@syncfusion/ej2-base';\nimport { Base } from '@syncfusion/ej2-base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222,\n ']': 221,\n '[': 219,\n '=': 187\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
    ;\n * \n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n }\n }\n }\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string \n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n 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 { select, detach } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getIndex } from '../base/util';\nimport { templateItems, tools } from '../models/items';\n/**\n * `Color Picker` module is used to handle ColorPicker actions.\n */\nvar ColorPickerInput = /** @class */ (function () {\n function ColorPickerInput(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n ColorPickerInput.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n ColorPickerInput.prototype.renderColorPickerInput = function (args) {\n var _this = this;\n this.initializeInstance();\n var suffixID = args.containerType;\n var tbElement = args.container;\n templateItems.forEach(function (item) {\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'fontcolor':\n var targetID = _this.parent.getID() + '_' + suffixID + '_FontColor_Target';\n var fontNode = _this.parent.createElement('input');\n fontNode.id = targetID;\n fontNode.classList.add(classes.CLS_FONT_COLOR_TARGET);\n document.body.appendChild(fontNode);\n var args_1 = {\n cssClass: tools[item].icon + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: tools[item].value,\n command: tools[item].command,\n subCommand: tools[item].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_FontColor', tbElement),\n target: ('#' + targetID)\n };\n _this.fontColorPicker = _this.toolbarRenderer.renderColorPicker(args_1, 'fontcolor');\n _this.fontColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(args_1, 'fontcolor', _this.fontColorPicker);\n break;\n case 'backgroundcolor':\n targetID = _this.parent.getID() + '_' + suffixID + '_BackgroundColor_Target';\n var backNode = _this.parent.createElement('input');\n backNode.id = targetID;\n backNode.classList.add(classes.CLS_BACKGROUND_COLOR_TARGET);\n document.body.appendChild(backNode);\n args_1 = {\n cssClass: tools[item].icon + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: tools[item].value,\n command: tools[item].command,\n subCommand: tools[item].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_BackgroundColor', tbElement),\n target: ('#' + targetID)\n };\n _this.backgroundColorPicker = _this.toolbarRenderer.renderColorPicker(args_1, 'backgroundcolor');\n _this.backgroundColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(args_1, 'backgroundcolor', _this.backgroundColorPicker);\n break;\n }\n }\n });\n };\n ColorPickerInput.prototype.destroy = function () {\n this.removeEventListener();\n this.destroyColorPicker();\n };\n ColorPickerInput.prototype.destroyColorPicker = function () {\n if (this.fontColorPicker && !this.fontColorPicker.isDestroyed) {\n this.fontColorPicker.destroy();\n }\n if (this.backgroundColorPicker && !this.backgroundColorPicker.isDestroyed) {\n this.backgroundColorPicker.destroy();\n }\n if (this.fontColorDropDown && !this.fontColorDropDown.isDestroyed) {\n var innerEle = this.fontColorDropDown.element.querySelector('.e-rte-color-content');\n if (innerEle) {\n detach(innerEle);\n }\n this.fontColorDropDown.destroy();\n }\n if (this.backgroundColorDropDown && !this.backgroundColorDropDown.isDestroyed) {\n var innerEle = this.backgroundColorDropDown.element.querySelector('.e-rte-color-content');\n if (innerEle) {\n detach(innerEle);\n }\n this.backgroundColorDropDown.destroy();\n }\n };\n ColorPickerInput.prototype.setRtl = function (args) {\n if (this.fontColorPicker) {\n this.fontColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.fontColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.backgroundColorPicker) {\n this.backgroundColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.backgroundColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n ColorPickerInput.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRenderComplete, this.renderColorPickerInput, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.destroyColorPicker, this.destroyColorPicker, this);\n };\n ColorPickerInput.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRenderComplete, this.renderColorPickerInput);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroyColorPicker, this.destroyColorPicker);\n };\n return ColorPickerInput;\n}());\nexport { ColorPickerInput };\n","import { detach, getUniqueID, append, closest, selectAll, select, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, Browser, isNullOrUndefined, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isCollide } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus } from '../base/util';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ColorPickerInput } from './color-picker';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar BaseQuickToolbar = /** @class */ (function () {\n function BaseQuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.isDOMElement = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.popupRenderer = this.renderFactory.getRenderer(RenderType.Popup);\n this.dropDownButtons = new DropDownButtons(this.parent, this.locator);\n this.colorPickerObj = new ColorPickerInput(this.parent, this.locator);\n }\n BaseQuickToolbar.prototype.appendPopupContent = function () {\n this.toolbarElement = this.parent.createElement('div', { className: classes.CLS_QUICK_TB });\n this.element.appendChild(this.toolbarElement);\n };\n BaseQuickToolbar.prototype.render = function (args) {\n var className;\n if (args.popupType === 'Image') {\n className = classes.CLS_IMAGE_POP;\n }\n else if (args.popupType === 'Inline') {\n className = classes.CLS_INLINE_POP;\n }\n else {\n className = '';\n }\n var popupId = getUniqueID(args.popupType + '_Quick_Popup');\n this.stringItems = args.toolbarItems;\n this.element = this.parent.createElement('div', { id: popupId, className: className + ' ' + classes.CLS_RTE_ELEMENTS });\n this.appendPopupContent();\n this.createToolbar(args.toolbarItems, args.mode);\n this.popupRenderer.renderPopup(this);\n this.addEventListener();\n };\n BaseQuickToolbar.prototype.createToolbar = function (items, mode) {\n this.quickTBarObj = new BaseToolbar(this.parent, this.locator);\n this.quickTBarObj.render({\n container: 'quick',\n target: this.toolbarElement,\n items: items,\n mode: mode\n });\n this.quickTBarObj.toolbarObj.refresh();\n };\n BaseQuickToolbar.prototype.setPosition = function (e) {\n var x;\n var y;\n var imgWrapper = closest(e.target, '.e-img-caption');\n var target = !isNOU(imgWrapper) ? imgWrapper : e.target;\n addClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n var targetOffsetTop = target.offsetTop;\n var parentOffsetTop = window.pageYOffset + e.parentData.top;\n if ((targetOffsetTop - e.editTop) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) - e.popHeight - 5;\n }\n else if (((e.editTop + e.editHeight) - (targetOffsetTop + target.offsetHeight)) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) + target.offsetHeight + 5;\n }\n else {\n y = e.y;\n }\n if (target.offsetWidth > e.popWidth) {\n x = (target.offsetWidth / 2) - (e.popWidth / 2) + e.parentData.left + target.offsetLeft;\n }\n else {\n x = e.parentData.left + target.offsetLeft;\n }\n this.popupObj.position.X = ((x + e.popWidth) > e.parentData.right) ? e.parentData.right - e.popWidth : x;\n this.popupObj.position.Y = y;\n this.popupObj.dataBind();\n removeClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n };\n BaseQuickToolbar.prototype.checkCollision = function (e, viewPort, type) {\n var x;\n var y;\n var parentTop = e.parentData.top;\n var contentTop = e.windowY + parentTop + e.tBarElementHeight;\n var collision = [];\n if (viewPort === 'document') {\n collision = isCollide(e.popup);\n }\n else {\n collision = isCollide(e.popup, e.parentElement);\n }\n for (var i = 0; i < collision.length; i++) {\n switch (collision[i]) {\n case 'top':\n if (viewPort === 'document') {\n y = e.windowY;\n }\n else {\n y = (window.pageYOffset + parentTop) + e.tBarElementHeight;\n }\n break;\n case 'bottom':\n var posY = void 0;\n if (viewPort === 'document') {\n if (type === 'inline') {\n posY = (e.y - e.popHeight - 10);\n }\n else {\n if ((e.windowHeight - (parentTop + e.tBarElementHeight)) > e.popHeight) {\n if ((contentTop - e.windowHeight) > e.popHeight) {\n posY = (contentTop + (e.windowHeight - parentTop)) - e.popHeight;\n }\n else {\n posY = contentTop;\n }\n }\n else {\n posY = e.windowY + (parentTop + e.tBarElementHeight);\n }\n }\n }\n else {\n if (e.target.tagName !== 'IMG') {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 10;\n }\n else {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 5;\n }\n }\n y = posY;\n break;\n case 'right':\n if (type === 'inline') {\n x = e.windowWidth - (e.popWidth + e.bodyRightSpace + 10);\n }\n else {\n x = e.x - (e.popWidth + e.parentData.left);\n }\n break;\n case 'left':\n if (type === 'inline') {\n x = 0;\n }\n else {\n x = e.parentData.left;\n }\n break;\n }\n }\n this.popupObj.position.X = (x) ? x : this.popupObj.position.X;\n this.popupObj.position.Y = (y) ? y : this.popupObj.position.Y;\n this.popupObj.dataBind();\n };\n BaseQuickToolbar.prototype.showPopup = function (x, y, target) {\n var editPanelTop;\n var editPanelHeight;\n var bodyStyle = window.getComputedStyle(document.body);\n var bodyRight = parseFloat(bodyStyle.marginRight.split('px')[0]) + parseFloat(bodyStyle.paddingRight.split('px')[0]);\n var windowHeight = window.innerHeight;\n var windowWidth = window.innerWidth;\n var parent = this.parent.element;\n var toolbarAvail = !isNullOrUndefined(this.parent.getToolbar());\n var tbHeight = toolbarAvail && this.parent.toolbarModule.getToolbarHeight();\n var expTBHeight = toolbarAvail && this.parent.toolbarModule.getExpandTBarPopHeight();\n var tBarHeight = (toolbarAvail) ? (tbHeight + expTBHeight) : 0;\n addClass([this.element], [classes.CLS_HIDE]);\n if (Browser.isDevice) {\n addClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (this.parent.iframeSettings.enable) {\n var cntEle = this.contentRenderer.getPanel().contentWindow;\n editPanelTop = cntEle.pageYOffset;\n editPanelHeight = cntEle.innerHeight;\n }\n else {\n var cntEle = closest(target, '.' + classes.CLS_RTE_CONTENT);\n editPanelTop = (cntEle) ? cntEle.scrollTop : 0;\n editPanelHeight = (cntEle) ? cntEle.offsetHeight : 0;\n }\n if (!this.parent.inlineMode.enable && !closest(target, 'table')) {\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n this.parent.enableToolbarItem(['Undo', 'Redo']);\n }\n append([this.element], document.body);\n this.popupObj.position.X = x + 20;\n this.popupObj.position.Y = y + ((this.parent.iframeSettings.enable) ? 35 : 20);\n this.popupObj.dataBind();\n this.popupObj.show();\n this.dropDownButtons.renderDropDowns({\n container: this.toolbarElement,\n containerType: 'quick',\n items: this.stringItems\n });\n this.colorPickerObj.renderColorPickerInput({\n container: this.toolbarElement,\n containerType: 'quick',\n items: this.stringItems\n });\n var showPopupData = {\n x: x, y: y,\n target: target,\n editTop: editPanelTop,\n editHeight: editPanelHeight,\n popup: this.popupObj.element,\n popHeight: this.popupObj.element.offsetHeight,\n popWidth: this.popupObj.element.offsetWidth,\n parentElement: parent,\n bodyRightSpace: bodyRight,\n windowY: window.pageYOffset,\n windowHeight: windowHeight,\n windowWidth: windowWidth,\n parentData: parent.getBoundingClientRect(),\n tBarElementHeight: tBarHeight\n };\n if (target.tagName === 'IMG') {\n this.setPosition(showPopupData);\n }\n if (!this.parent.inlineMode.enable) {\n this.checkCollision(showPopupData, 'parent', '');\n }\n this.checkCollision(showPopupData, 'document', ((this.parent.inlineMode.enable) ? 'inline' : ''));\n this.popupObj.hide();\n removeClass([this.element], [classes.CLS_HIDE]);\n this.popupObj.show({ name: 'ZoomIn', duration: 400 });\n setStyleAttribute(this.element, {\n maxWidth: this.parent.element.offsetWidth + 'px'\n });\n addClass([this.element], [classes.CLS_POP]);\n this.isDOMElement = true;\n };\n BaseQuickToolbar.prototype.hidePopup = function () {\n var viewSourcePanel = this.parent.sourceCodeModule.getViewPanel();\n if (Browser.isDevice) {\n removeClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (!isNullOrUndefined(this.parent.getToolbar()) && !this.parent.inlineMode.enable) {\n if (isNullOrUndefined(viewSourcePanel) || viewSourcePanel.style.display === 'none') {\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n }\n }\n this.removeEleFromDOM();\n this.isDOMElement = false;\n };\n /**\n * @hidden\n */\n BaseQuickToolbar.prototype.addQTBarItem = function (item, index) {\n this.quickTBarObj.toolbarObj.addItems(this.quickTBarObj.getItems(item, 'toolbar'), index);\n };\n /**\n * @hidden\n */\n BaseQuickToolbar.prototype.removeQTBarItem = function (index) {\n this.quickTBarObj.toolbarObj.removeItems(index);\n };\n BaseQuickToolbar.prototype.removeEleFromDOM = function () {\n var element = this.popupObj.element;\n if (this.isDOMElement) {\n this.dropDownButtons.destroyDropDowns();\n this.colorPickerObj.destroyColorPicker();\n removeClass([this.element], [classes.CLS_POP]);\n detach(element);\n }\n };\n BaseQuickToolbar.prototype.updateStatus = function (args) {\n var options = {\n args: args,\n dropDownModule: this.dropDownButtons,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.element),\n tbItems: this.quickTBarObj.toolbarObj.items\n };\n setToolbarStatus(options, true);\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.parent.getBaseToolbarObject(), this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n /**\n * Destroys the Quick toolbar.\n * @method destroy\n * @return {void}\n */\n BaseQuickToolbar.prototype.destroy = function () {\n if (this.popupObj && !this.popupObj.isDestroyed) {\n this.popupObj.destroy();\n this.removeEleFromDOM();\n }\n this.removeEventListener();\n };\n BaseQuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.destroy, this.destroy, this);\n if (this.parent.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n };\n BaseQuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.destroy, this.destroy);\n if (this.parent.inlineMode.enable) {\n this.parent.off(events.toolbarUpdated, this.updateStatus);\n }\n };\n return BaseQuickToolbar;\n}());\nexport { BaseQuickToolbar };\n","import { Popup } from '@syncfusion/ej2-popups';\nimport { CLS_QUICK_POP } from '../base/classes';\nimport { popupOpen } from '../base/constant';\n/**\n * `Popup renderer` module is used to render popup in RichTextEditor.\n * @hidden\n */\nvar PopupRenderer = /** @class */ (function () {\n /**\n * Constructor for popup renderer module\n */\n function PopupRenderer(parent) {\n this.parent = parent;\n }\n PopupRenderer.prototype.popupOpen = function () {\n this.parent.notify(popupOpen, this);\n };\n PopupRenderer.prototype.renderPopup = function (args) {\n this.setPanel(args.element);\n this.renderPanel();\n args.popupObj = new Popup(args.element, {\n targetType: 'relative',\n relateTo: this.parent.element,\n open: this.popupOpen.bind(this)\n });\n this.popupObj = args.popupObj;\n args.popupObj.hide();\n };\n /**\n * The function is used to add popup class in Quick Toolbar\n */\n PopupRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_QUICK_POP);\n };\n /**\n * Get the popup element of RichTextEditor\n * @return {Element}\n */\n PopupRenderer.prototype.getPanel = function () {\n return this.popupPanel;\n };\n /**\n * Set the popup element of RichTextEditor\n * @param {Element} panel\n */\n PopupRenderer.prototype.setPanel = function (panel) {\n this.popupPanel = panel;\n };\n return PopupRenderer;\n}());\nexport { PopupRenderer };\n","import { select, isNullOrUndefined, Browser, addClass, removeClass, EventHandler, closest } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport { pageYOffset, hasClass } from '../base/util';\nimport { BaseQuickToolbar } from './base-quick-toolbar';\nimport { PopupRenderer } from '../renderer/popup-renderer';\nimport { CLS_INLINE_POP, CLS_INLINE } from '../base/classes';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar QuickToolbar = /** @class */ (function () {\n function QuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.renderFactory.addRenderer(RenderType.Popup, new PopupRenderer(this.parent));\n this.addEventListener();\n }\n QuickToolbar.prototype.formatItems = function (items) {\n var formattedItems = [];\n items.forEach(function (item) {\n if (typeof item === 'string') {\n switch (item.toLocaleLowerCase()) {\n case 'open':\n formattedItems.push('openLink');\n break;\n case 'edit':\n formattedItems.push('editLink');\n break;\n case 'unlink':\n formattedItems.push('removeLink');\n break;\n default:\n formattedItems.push(item);\n break;\n }\n }\n else {\n formattedItems.push(item);\n }\n });\n return formattedItems;\n };\n QuickToolbar.prototype.getQTBarOptions = function (popType, mode, items, type) {\n return {\n popupType: popType,\n toolbarItems: items,\n mode: mode,\n renderType: type\n };\n };\n QuickToolbar.prototype.createQTBar = function (popupType, mode, items, type) {\n if (items.length < 1) {\n return null;\n }\n var qTBar = new BaseQuickToolbar(this.parent, this.locator);\n qTBar.render(this.getQTBarOptions(popupType, mode, this.formatItems(items), type));\n return qTBar;\n };\n QuickToolbar.prototype.initializeQuickToolbars = function () {\n this.parent.quickToolbarModule = this;\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n };\n QuickToolbar.prototype.onMouseDown = function (e) {\n this.parent.isBlur = false;\n this.parent.isRTE = true;\n };\n QuickToolbar.prototype.renderQuickToolbars = function () {\n if (this.linkQTBar || this.imageQTBar || this.textQTBar || this.tableQTBar) {\n return;\n }\n this.linkQTBar = this.createQTBar('Link', 'Scrollable', this.parent.quickToolbarSettings.link, RenderType.LinkToolbar);\n this.renderFactory.addRenderer(RenderType.LinkToolbar, this.linkQTBar);\n this.textQTBar = this.createQTBar('Text', 'Scrollable', this.parent.quickToolbarSettings.text, RenderType.TextToolbar);\n this.renderFactory.addRenderer(RenderType.TextToolbar, this.textQTBar);\n this.imageQTBar = this.createQTBar('Image', 'MultiRow', this.parent.quickToolbarSettings.image, RenderType.ImageToolbar);\n this.renderFactory.addRenderer(RenderType.ImageToolbar, this.imageQTBar);\n this.tableQTBar = this.createQTBar('Table', 'MultiRow', this.parent.quickToolbarSettings.table, RenderType.TableToolbar);\n this.renderFactory.addRenderer(RenderType.TableToolbar, this.tableQTBar);\n if (this.linkQTBar) {\n EventHandler.add(this.linkQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.imageQTBar) {\n EventHandler.add(this.imageQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.textQTBar) {\n EventHandler.add(this.textQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.tableQTBar) {\n EventHandler.add(this.tableQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n };\n QuickToolbar.prototype.renderInlineQuickToolbar = function () {\n addClass([this.parent.element], [CLS_INLINE]);\n this.inlineQTBar = this.createQTBar('Inline', 'MultiRow', this.parent.toolbarSettings.items, RenderType.InlineToolbar);\n this.renderFactory.addRenderer(RenderType.InlineToolbar, this.inlineQTBar);\n EventHandler.add(this.inlineQTBar.element, 'mousedown', this.onMouseDown, this);\n };\n QuickToolbar.prototype.showInlineQTBar = function (x, y, target) {\n this.inlineQTBar.showPopup(x, y, target);\n };\n QuickToolbar.prototype.hideInlineQTBar = function () {\n if (this.inlineQTBar && !hasClass(this.inlineQTBar.element, 'e-popup-close')) {\n this.inlineQTBar.hidePopup();\n }\n };\n QuickToolbar.prototype.hideQuickToolbars = function () {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close')) {\n this.linkQTBar.hidePopup();\n }\n if (this.textQTBar && !hasClass(this.textQTBar.element, 'e-popup-close')) {\n this.textQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close')) {\n this.tableQTBar.hidePopup();\n }\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.deBounce = function (x, y, target) {\n var _this = this;\n clearTimeout(this.deBouncer);\n this.deBouncer = window.setTimeout(function () { _this.showInlineQTBar(x, y, target); }, 1000);\n };\n QuickToolbar.prototype.mouseUpHandler = function (e) {\n var args = e.args;\n var range = this.parent.getRange();\n var target = args.target;\n if (isNullOrUndefined(select('.' + CLS_INLINE_POP, document.body))) {\n this.hideInlineQTBar();\n this.offsetX = args.pageX;\n this.offsetY = pageYOffset(args, this.parent.element, this.parent.iframeSettings.enable);\n if (target.nodeName === 'TEXTAREA') {\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n else {\n if (target.tagName !== 'IMG' && target.tagName !== 'A' && (!closest(target, 'td,th') || !range.collapsed)) {\n if (this.parent.inlineMode.onSelection && range.collapsed) {\n return;\n }\n this.target = target;\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n }\n }\n };\n QuickToolbar.prototype.keyDownHandler = function () {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.inlineQTBarMouseDownHandler = function () {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.keyUpHandler = function (e) {\n if (this.parent.inlineMode.onSelection) {\n return;\n }\n var args = e.args;\n this.deBounce(this.offsetX, this.offsetY, args.target);\n };\n QuickToolbar.prototype.getInlineBaseToolbar = function () {\n return this.inlineQTBar && this.inlineQTBar.quickTBarObj;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n QuickToolbar.prototype.destroy = function () {\n if (this.linkQTBar) {\n EventHandler.remove(this.linkQTBar.element, 'mousedown', this.onMouseDown);\n this.linkQTBar.destroy();\n }\n if (this.textQTBar) {\n EventHandler.remove(this.textQTBar.element, 'mousedown', this.onMouseDown);\n this.textQTBar.destroy();\n }\n if (this.imageQTBar) {\n EventHandler.remove(this.imageQTBar.element, 'mousedown', this.onMouseDown);\n this.imageQTBar.destroy();\n }\n if (this.tableQTBar) {\n EventHandler.remove(this.tableQTBar.element, 'mousedown', this.onMouseDown);\n this.tableQTBar.destroy();\n }\n if (this.inlineQTBar) {\n EventHandler.remove(this.inlineQTBar.element, 'mousedown', this.onMouseDown);\n this.inlineQTBar.destroy();\n }\n this.removeEventListener();\n };\n QuickToolbar.prototype.wireInlineQTBarEvents = function () {\n this.parent.on(events.mouseUp, this.mouseUpHandler, this);\n this.parent.on(events.mouseDown, this.inlineQTBarMouseDownHandler, this);\n this.parent.on(events.keyDown, this.keyDownHandler, this);\n this.parent.on(events.keyUp, this.keyUpHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseUpHandler, this);\n this.parent.on(events.renderInlineToolbar, this.renderInlineQuickToolbar, this);\n };\n QuickToolbar.prototype.unWireInlineQTBarEvents = function () {\n this.parent.off(events.mouseUp, this.mouseUpHandler);\n this.parent.off(events.mouseDown, this.inlineQTBarMouseDownHandler);\n this.parent.off(events.keyDown, this.keyDownHandler);\n this.parent.off(events.keyUp, this.keyUpHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseUpHandler);\n this.parent.off(events.renderInlineToolbar, this.renderInlineQuickToolbar);\n };\n QuickToolbar.prototype.toolbarUpdated = function (args) {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close')) {\n this.linkQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close')) {\n this.tableQTBar.hidePopup();\n }\n };\n QuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeQuickToolbars, this);\n this.parent.on(events.mouseDown, this.renderQuickToolbars, this);\n this.parent.on(events.toolbarUpdated, this.toolbarUpdated, this);\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n this.wireInlineQTBarEvents();\n }\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.on(events.scroll, this.hideQuickToolbars, this);\n }\n this.parent.on(events.focusChange, this.hideQuickToolbars, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n };\n QuickToolbar.prototype.onKeyDown = function (e) {\n var args = e.args;\n if (args.which === 8 || args.which === 46) {\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n }\n };\n QuickToolbar.prototype.onIframeMouseDown = function () {\n this.hideQuickToolbars();\n this.hideInlineQTBar();\n };\n QuickToolbar.prototype.setRtl = function (args) {\n if (this.inlineQTBar) {\n this.inlineQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.linkQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n QuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeQuickToolbars);\n this.parent.off(events.mouseDown, this.renderQuickToolbars);\n this.parent.off(events.toolbarUpdated, this.toolbarUpdated);\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n this.unWireInlineQTBarEvents();\n }\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.off(events.scroll, this.hideQuickToolbars);\n }\n this.parent.off(events.focusChange, this.hideQuickToolbars);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.rtlMode, this.setRtl);\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n QuickToolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.inlineQTBar) {\n removeClass([this.parent.element], [CLS_INLINE]);\n this.unWireInlineQTBarEvents();\n this.hideInlineQTBar();\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n addClass([this.parent.element], [CLS_INLINE]);\n this.wireInlineQTBarEvents();\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n QuickToolbar.prototype.getModuleName = function () {\n return 'quickToolbar';\n };\n return QuickToolbar;\n}());\nexport { QuickToolbar };\n","import { detach, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { CLS_COUNT, CLS_WARNING, CLS_ERROR } from '../base/classes';\n/**\n * `Count` module is used to handle Count actions.\n */\nvar Count = /** @class */ (function () {\n function Count(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n Count.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editPanel = this.contentRenderer.getEditPanel();\n };\n Count.prototype.renderCount = function () {\n this.initializeInstance();\n this.element = this.parent.createElement('span', { className: CLS_COUNT });\n this.contentRenderer.getPanel().parentElement.appendChild(this.element);\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n };\n Count.prototype.appendCount = function () {\n var htmlText = this.editPanel.textContent.trim();\n this.htmlLength = htmlText.length;\n var string = this.parent.maxLength === -1 ? this.htmlLength : this.htmlLength + ' / ' + this.parent.maxLength;\n this.element.innerHTML = string;\n };\n Count.prototype.charCountBackground = function (htmlLength) {\n var percentage = (htmlLength / this.parent.maxLength) * 100;\n if (percentage < 85) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.remove(CLS_ERROR);\n }\n else if (percentage > 85 && percentage <= 90) {\n this.element.classList.remove(CLS_ERROR);\n this.element.classList.add(CLS_WARNING);\n }\n else if (percentage > 90) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.add(CLS_ERROR);\n }\n };\n /**\n * @hidden\n */\n Count.prototype.refresh = function () {\n if (!isNullOrUndefined(this.editPanel)) {\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n }\n };\n Count.prototype.restrict = function (e) {\n if (this.parent.showCharCount) {\n var element = e.args.currentTarget.textContent.trim();\n var array = [8, 16, 17, 37, 38, 39, 40, 65];\n var arrayKey = void 0;\n for (var i = 0; i <= array.length - 1; i++) {\n if (e.args.which === array[i]) {\n if (e.args.ctrlKey && e.args.which === 65) {\n return;\n }\n else if (e.args.which !== 65) {\n arrayKey = array[i];\n return;\n }\n }\n }\n if ((element.length >= this.parent.maxLength && this.parent.maxLength !== -1) && e.args.which !== arrayKey) {\n e.args.preventDefault();\n }\n }\n };\n /**\n * Destroys the Count.\n * @method destroy\n * @return {void}\n */\n Count.prototype.destroy = function () {\n this.removeEventListener();\n };\n Count.prototype.toggle = function (e) {\n this.element.style.display = (e.member === 'viewSource') ? 'none' : 'block';\n };\n Count.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.parent.showCharCount) {\n this.parent.on(events.initialEnd, this.renderCount, this);\n this.parent.on(events.keyUp, this.refresh, this);\n this.parent.on(events.keyDown, this.restrict, this);\n this.parent.on(events.count, this.refresh, this);\n this.parent.on(events.refreshBegin, this.refresh, this);\n this.parent.on(events.mouseDown, this.refresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sourceCode, this.toggle, this);\n this.parent.on(events.updateSource, this.toggle, this);\n }\n };\n Count.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n detach(this.element);\n this.parent.off(events.initialEnd, this.renderCount);\n this.parent.off(events.keyUp, this.refresh);\n this.parent.off(events.refreshBegin, this.refresh);\n this.parent.off(events.keyDown, this.restrict);\n this.parent.off(events.count, this.refresh);\n this.parent.off(events.mouseDown, this.refresh);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sourceCode, this.toggle);\n this.parent.off(events.updateSource, this.toggle);\n };\n /**\n * For internal use only - Get the module name.\n */\n Count.prototype.getModuleName = function () {\n return 'count';\n };\n return Count;\n}());\nexport { Count };\n","/**\n * MarkdownSelection internal module\n * @hidden\n */\nvar MarkdownSelection = /** @class */ (function () {\n function MarkdownSelection() {\n }\n MarkdownSelection.prototype.getLineNumber = function (textarea, point) {\n return textarea.value.substr(0, point).split('\\n').length;\n };\n MarkdownSelection.prototype.getSelectedText = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n return textarea.value.substring(start, end);\n };\n MarkdownSelection.prototype.getAllParents = function (value) {\n return value.split('\\n');\n };\n MarkdownSelection.prototype.getSelectedLine = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var index = this.getLineNumber(textarea, textarea.selectionStart);\n return lines[index - 1];\n };\n MarkdownSelection.prototype.getLine = function (textarea, index) {\n var lines = this.getAllParents(textarea.value);\n return lines[index];\n };\n MarkdownSelection.prototype.getSelectedParentPoints = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var start = this.getLineNumber(textarea, textarea.selectionStart);\n var end = this.getLineNumber(textarea, textarea.selectionEnd);\n var parents = this.getSelectedText(textarea).split('\\n');\n var selectedPoints = [];\n var selectedLine = lines[start - 1];\n var startLength = lines.slice(0, start - 1).join('').length;\n var firstPoint = {};\n firstPoint.line = start - 1;\n firstPoint.start = startLength + firstPoint.line;\n firstPoint.end = selectedLine !== '' ? firstPoint.start +\n selectedLine.length + 1 : firstPoint.start + selectedLine.length;\n firstPoint.text = selectedLine;\n selectedPoints.push(firstPoint);\n if (parents.length > 1) {\n for (var i = 1; i < parents.length - 1; i++) {\n var points = {};\n points.line = selectedPoints[i - 1].line + 1;\n points.start = parents[i] !== '' ? selectedPoints[i - 1].end : selectedPoints[i - 1].end;\n points.end = points.start + parents[i].length + 1;\n points.text = parents[i];\n selectedPoints.push(points);\n }\n var lastPoint = {};\n lastPoint.line = selectedPoints[selectedPoints.length - 1].line + 1;\n lastPoint.start = selectedPoints[selectedPoints.length - 1].end;\n lastPoint.end = lastPoint.start + lines[end - 1].length + 1;\n lastPoint.text = lines[end - 1];\n selectedPoints.push(lastPoint);\n }\n return selectedPoints;\n };\n MarkdownSelection.prototype.setSelection = function (textarea, start, end) {\n textarea.setSelectionRange(start, end);\n textarea.focus();\n };\n MarkdownSelection.prototype.save = function (start, end) {\n this.selectionStart = start;\n this.selectionEnd = end;\n };\n MarkdownSelection.prototype.restore = function (textArea) {\n this.setSelection(textArea, this.selectionStart, this.selectionEnd);\n };\n MarkdownSelection.prototype.isStartWith = function (line, command) {\n var isStart = false;\n if (line) {\n var reg = line.trim() === command.trim() ?\n new RegExp('^(' + this.replaceSpecialChar(command.trim()) + ')', 'gim') :\n new RegExp('^(' + this.replaceSpecialChar(command) + ')', 'gim');\n isStart = reg.test(line.trim());\n }\n return isStart;\n };\n MarkdownSelection.prototype.replaceSpecialChar = function (value) {\n return value.replace(/[`~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/g, '\\\\$&');\n };\n MarkdownSelection.prototype.isClear = function (parents, regex) {\n var isClear = false;\n for (var i = 0; i < parents.length; i++) {\n if (new RegExp(regex, 'gim').test(parents[i].text)) {\n return true;\n }\n }\n return isClear;\n };\n MarkdownSelection.prototype.getRegex = function (syntax) {\n syntax = this.replaceSpecialChar(syntax);\n var regex = '^(' + syntax + ')|^(' + syntax.trim() + ')';\n return new RegExp(regex);\n };\n MarkdownSelection.prototype.getSelectedInlinePoints = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n var selection = this.getSelectedText(textarea);\n return { start: start, end: end, text: selection };\n };\n return MarkdownSelection;\n}());\nexport { MarkdownSelection };\n","import { MarkdownSelection } from '../../markdown-parser/plugin/markdown-selection';\nimport * as events from '../base/constant';\n/**\n * MarkdownToolbarStatus module for refresh the toolbar status\n */\nvar MarkdownToolbarStatus = /** @class */ (function () {\n function MarkdownToolbarStatus(parent) {\n this.toolbarStatus = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n uppercase: false,\n inlinecode: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null\n };\n this.selection = new MarkdownSelection();\n this.parent = parent;\n this.element = this.parent.contentModule.getEditPanel();\n this.addEventListener();\n }\n MarkdownToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n MarkdownToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n this.parent.off(events.destroy, this.onRefreshHandler);\n };\n MarkdownToolbarStatus.prototype.onRefreshHandler = function (args) {\n var parentsLines = this.selection.getSelectedParentPoints(this.element);\n this.toolbarStatus = {\n orderedlist: args.documentNode ? false : this.isListsApplied(parentsLines, 'OL'),\n unorderedlist: args.documentNode ? false : this.isListsApplied(parentsLines, 'UL'),\n formats: this.currentFormat(parentsLines, args.documentNode),\n bold: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Bold'),\n italic: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Italic'),\n inlinecode: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('InlineCode'),\n strikethrough: args.documentNode ? false :\n this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('StrikeThrough'),\n subscript: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SubScript'),\n superscript: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SuperScript'),\n uppercase: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('UpperCase')\n };\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n MarkdownToolbarStatus.prototype.isListsApplied = function (lines, type) {\n var isApply = true;\n for (var i = 0; i < lines.length; i++) {\n if (!this.selection.isStartWith(lines[i].text, this.parent.formatter.listTags[type])) {\n isApply = false;\n break;\n }\n }\n return isApply;\n };\n MarkdownToolbarStatus.prototype.currentFormat = function (lines, documentNode) {\n var format = 'p';\n var keys = Object.keys(this.parent.formatter.formatTags);\n var direction = this.element.selectionDirection;\n var checkLine = direction === 'backward' ? lines[0].text : lines[lines.length - 1].text;\n for (var i = 0; !documentNode && i < keys.length; i++) {\n if (keys[i] !== 'pre' && this.selection.isStartWith(checkLine, this.parent.formatter.formatTags[keys[i]])) {\n format = keys[i];\n break;\n }\n else if (keys[i] === 'pre') {\n var parentLines = this.selection.getAllParents(this.element.value);\n var firstPrevText = parentLines[lines[0].line - 1];\n var lastNextText = parentLines[lines.length + 1];\n if (this.selection.isStartWith(firstPrevText, this.parent.formatter.formatTags[keys[i]].split('\\n')[0]) &&\n this.selection.isStartWith(lastNextText, this.parent.formatter.formatTags[keys[i]].split('\\n')[0])) {\n format = keys[i];\n break;\n }\n }\n }\n return format;\n };\n return MarkdownToolbarStatus;\n}());\nexport { MarkdownToolbarStatus };\n","import * as events from '../base/constant';\n/**\n * `ExecCommandCallBack` module is used to run the editor manager command\n */\nvar ExecCommandCallBack = /** @class */ (function () {\n function ExecCommandCallBack(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ExecCommandCallBack.prototype.addEventListener = function () {\n this.parent.on(events.execCommandCallBack, this.commandCallBack, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ExecCommandCallBack.prototype.commandCallBack = function (args) {\n if (args.requestType !== 'Undo' && args.requestType !== 'Redo') {\n this.parent.formatter.saveData();\n }\n this.parent.notify(events.toolbarRefresh, { args: args });\n this.parent.notify(events.count, {});\n };\n ExecCommandCallBack.prototype.removeEventListener = function () {\n this.parent.off(events.execCommandCallBack, this.commandCallBack);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ExecCommandCallBack;\n}());\nexport { ExecCommandCallBack };\n","/**\n * Constant values for Common\n */\n/* Keydown event trigger\n * @hidden\n */\nexport var KEY_DOWN = 'keydown';\n/* Undo and Redo action HTML plugin events\n * @hidden\n */\nexport var ACTION = 'action';\n/* Formats plugin events\n * @hidden\n */\nexport var FORMAT_TYPE = 'format-type';\n/* Keydown handler event trigger\n * @hidden\n */\nexport var KEY_DOWN_HANDLER = 'keydown-handler';\n/* List plugin events\n * @hidden\n */\nexport var LIST_TYPE = 'list-type';\n/* Keyup handler event trigger\n * @hidden\n */\nexport var KEY_UP_HANDLER = 'keyup-handler';\n/* Keyup event trigger\n * @hidden\n */\nexport var KEY_UP = 'keyup';\n","import { extend, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport * as CONSTANT from '../base/constant';\nimport { updateUndoRedoStatus } from '../base/util';\nimport { KEY_DOWN, KEY_UP } from './../../common/constant';\n/**\n * Formatter\n * @hidden\n */\nvar Formatter = /** @class */ (function () {\n function Formatter() {\n }\n /**\n * To execute the command\n * @param {IRichTextEditor} self\n * @param {ActionBeginEventArgs} args\n * @param {MouseEvent|KeyboardEvent} event\n * @param {NotifyArgs} value\n */\n Formatter.prototype.process = function (self, args, event, value) {\n var selection = self.contentModule.getDocument().getSelection();\n var range = (selection.rangeCount > 0) ? selection.getRangeAt(selection.rangeCount - 1) : null;\n if (!isNullOrUndefined(args)\n && args.item.command\n && args.item.command !== 'Table'\n && args.item.command !== 'Actions'\n && args.item.command !== 'Links'\n && args.item.command !== 'Images'\n && range\n && !(self.contentModule.getEditPanel().contains(this.getAncestorNode(range.commonAncestorContainer))\n || self.contentModule.getEditPanel() === range.commonAncestorContainer\n || self.contentModule.getPanel() === range.commonAncestorContainer)) {\n return;\n }\n if (isNullOrUndefined(args)) {\n var action = event.action;\n if (action !== 'tab' && action !== 'enter' && action !== 'space' && action !== 'escape') {\n args = {};\n var items = {\n originalEvent: event, cancel: false,\n requestType: action || (event.key + 'Key'),\n itemCollection: value\n };\n extend(args, args, items, true);\n self.trigger(CONSTANT.actionBegin, args);\n if (args.cancel) {\n if (action === 'paste' || action === 'cut' || action === 'copy') {\n event.preventDefault();\n }\n return;\n }\n }\n this.editorManager.observer.notify((event.type === 'keydown' ? KEY_DOWN : KEY_UP), {\n event: event,\n callBack: this.onSuccess.bind(this, self),\n value: value\n });\n }\n else if (!isNullOrUndefined(args) && args.item.command && args.item.subCommand && ((args.item.command !== args.item.subCommand\n && args.item.command !== 'Font')\n || ((args.item.subCommand === 'FontName' || args.item.subCommand === 'FontSize') && args.name === 'dropDownSelect')\n || ((args.item.subCommand === 'BackgroundColor' || args.item.subCommand === 'FontColor')\n && args.name === 'colorPickerChanged'))) {\n extend(args, args, { requestType: args.item.subCommand, cancel: false, itemCollection: value }, true);\n self.trigger(CONSTANT.actionBegin, args);\n if (args.cancel) {\n return;\n }\n if (this.getUndoRedoStack().length === 0 && args.item.command !== 'Links' && args.item.command !== 'Images') {\n this.saveData();\n }\n self.isBlur = false;\n self.contentModule.getEditPanel().focus();\n var command = args.item.subCommand.toLocaleLowerCase();\n if (command === 'paste' || command === 'cut' || command === 'copy') {\n self.clipboardAction(command, event);\n }\n else {\n this.editorManager.observer.notify(CONSTANT.checkUndo, { subCommand: args.item.subCommand });\n this.editorManager.execCommand(args.item.command, args.item.subCommand, event, this.onSuccess.bind(this, self), args.item.value, value);\n }\n }\n this.enableUndo(self);\n };\n Formatter.prototype.getAncestorNode = function (node) {\n node = node.nodeType === 3 ? node.parentNode : node;\n return node;\n };\n Formatter.prototype.onKeyHandler = function (self, e) {\n var _this = this;\n this.editorManager.observer.notify(KEY_UP, {\n event: e, callBack: function () {\n _this.enableUndo(self);\n }\n });\n };\n Formatter.prototype.onSuccess = function (self, events) {\n this.enableUndo(self);\n self.notify(CONSTANT.execCommandCallBack, events);\n self.trigger(CONSTANT.actionComplete, events);\n if (events.requestType === 'Images' || events.requestType === 'Links' && self.editorMode === 'HTML') {\n var args = events;\n if (events.requestType === 'Links' && events.event &&\n events.event.type === 'keydown' &&\n events.event.keyCode === 32) {\n return;\n }\n self.notify(CONSTANT.insertCompleted, {\n args: args.event, type: events.requestType, isNotify: true,\n elements: args.elements\n });\n }\n };\n /**\n * Save the data for undo and redo action.\n */\n Formatter.prototype.saveData = function (e) {\n this.editorManager.undoRedoManager.saveData(e);\n };\n Formatter.prototype.getUndoStatus = function () {\n return this.editorManager.undoRedoManager.getUndoStatus();\n };\n Formatter.prototype.getUndoRedoStack = function () {\n return this.editorManager.undoRedoManager.undoRedoStack;\n };\n Formatter.prototype.enableUndo = function (self) {\n var status = this.getUndoStatus();\n if (self.inlineMode.enable && !Browser.isDevice) {\n updateUndoRedoStatus(self.quickToolbarModule.inlineQTBar.quickTBarObj, status);\n }\n else {\n if (self.toolbarModule) {\n updateUndoRedoStatus(self.toolbarModule.baseToolbar, status);\n }\n }\n };\n return Formatter;\n}());\nexport { Formatter };\n","/**\n * Constant values for Markdown Parser\n */\n/* List plugin events\n * @hidden\n */\nexport var LISTS_COMMAND = 'lists-commands';\n/* selectioncommand plugin events\n * @hidden\n */\nexport var selectionCommand = 'command-type';\n/* Link plugin events\n * @hidden\n */\nexport var LINK_COMMAND = 'link-commands';\n/* Clear plugin events\n * @hidden\n */\nexport var CLEAR_COMMAND = 'clear-commands';\n","import * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * Lists internal component\n * @hidden\n */\nvar MDLists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\n */\n function MDLists(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLists.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LISTS_COMMAND, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, this.keyUpHandler, this);\n };\n MDLists.prototype.keyDownHandler = function (event) {\n switch (event.event.which) {\n case 9:\n this.tabKey(event);\n break;\n }\n switch (event.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n }\n };\n MDLists.prototype.keyUpHandler = function (event) {\n switch (event.event.which) {\n case 13:\n this.enterKey(event);\n break;\n }\n };\n MDLists.prototype.tabKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var addedLength = 0;\n var isNotFirst = this.isNotFirstLine(textArea, parents[0]);\n if (!isNotFirst && !event.event.shiftKey) {\n this.restore(textArea, start, end + addedLength, event);\n return;\n }\n var regex = this.getListRegex();\n this.currentAction = this.getAction(parents[0].text);\n for (var i = 0; i < parents.length; i++) {\n var prevIndex = event.event.shiftKey ? parents[i].line : parents[i].line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n if (prevLine && (!event.event.shiftKey && isNotFirst || (event.event.shiftKey && /^(\\t)/.test(prevLine)))) {\n prevLine = prevLine.trim();\n if (regex.test(prevLine)) {\n event.event.preventDefault();\n var tabSpace = '\\t';\n var tabSpaceLength = event.event.shiftKey ? -tabSpace.length : tabSpace.length;\n var splitTab = parents[i].text.split('\\t');\n parents[i].text = event.event.shiftKey ? splitTab.splice(1, splitTab.length).join('\\t') : tabSpace + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? start + tabSpaceLength : start;\n addedLength += tabSpaceLength;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? parents[j].start + tabSpaceLength : parents[j].start;\n parents[j].end = parents[j].end + tabSpaceLength;\n }\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, event);\n };\n MDLists.prototype.getTabSpace = function (line) {\n var split = line.split('\\t');\n var tabs = '';\n for (var i = 0; i < split.length; i++) {\n if (split[i] === '') {\n tabs += '\\t';\n }\n else {\n break;\n }\n }\n return tabs;\n };\n MDLists.prototype.isNotFirstLine = function (textArea, points) {\n var currentLine = points.text;\n var prevIndex = points.line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n var regex = this.getListRegex();\n var isNotFirst = false;\n if (prevLine && regex.test(prevLine.trim())) {\n var curTabSpace = this.getTabSpace(currentLine);\n var prevTabSpace = this.getTabSpace(prevLine);\n isNotFirst = curTabSpace === prevTabSpace ? true : isNotFirst;\n for (; prevTabSpace.length > curTabSpace.length; null) {\n prevIndex = prevIndex - 1;\n prevLine = this.selection.getLine(textArea, prevIndex);\n if (regex.test(prevLine.trim())) {\n prevTabSpace = this.getTabSpace(prevLine);\n if (prevTabSpace.length <= curTabSpace.length) {\n isNotFirst = true;\n break;\n }\n }\n }\n }\n return isNotFirst;\n };\n MDLists.prototype.getAction = function (line) {\n var ol = line.trim().split(new RegExp('^(' + this.selection.replaceSpecialChar(this.syntax.OL) + ')'))[1];\n var ul = line.trim().split(new RegExp('^(' + this.selection.replaceSpecialChar(this.syntax.UL) + ')'))[1];\n return (ol ? 'OL' : 'UL');\n };\n MDLists.prototype.enterKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prevLine = this.selection.getLine(textArea, parents[0].line - 1);\n var regex = this.getListRegex();\n if (regex.test(prevLine.trim()) && prevLine.trim().replace(regex, '') !== '') {\n var addedLength = 0;\n var tabSpace = this.getTabSpace(prevLine);\n this.currentAction = this.getAction(prevLine);\n var prefix = this.syntax[this.currentAction];\n parents[0].text = tabSpace + prefix + parents[0].text;\n textArea.value = textArea.value.substr(0, parents[0].start) + parents[0].text +\n textArea.value.substr(parents[0].end, textArea.value.length);\n start = start + prefix.length + tabSpace.length;\n addedLength += prefix.length + tabSpace.length;\n this.restore(textArea, start, end + addedLength, event);\n }\n };\n MDLists.prototype.applyListsHandler = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n this.currentAction = e.subCommand;\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prefix = '';\n var regex = this.syntax[this.currentAction];\n for (var i = 0; i < parents.length; i++) {\n if (!this.selection.isStartWith(parents[i].text, regex)) {\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n var replace = this.appliedLine(parents[i].text);\n prefix = replace.line ? prefix : this.syntax[this.currentAction];\n parents[i].text = replace.line ? replace.line : prefix + parents[i].text;\n replace.space = replace.space ? replace.space : 0;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start + prefix.length + replace.space) > 0 ?\n start + prefix.length + replace.space : 0 : start;\n addedLength += prefix.length + replace.space;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? prefix.length +\n parents[j].start + replace.space : parents[j].start;\n parents[j].end = prefix.length + parents[j].end + replace.space;\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, e);\n };\n MDLists.prototype.appliedLine = function (line) {\n var points = {};\n var regex = this.getListRegex();\n var isExist = regex.test(line.trim()) || line.trim() === this.syntax.OL.trim()\n || line.trim() === this.syntax.UL.trim();\n if (isExist) {\n var replace = void 0;\n var pattern = void 0;\n var space = 0;\n if (this.selection.getRegex(this.syntax.OL).test(line.trim())) {\n pattern = this.selection.getRegex(this.syntax.OL);\n replace = this.syntax.UL;\n points.space = this.syntax.UL.length - this.syntax.OL.length;\n }\n else {\n pattern = this.selection.getRegex(this.syntax.UL);\n replace = this.syntax.OL;\n points.space = this.syntax.OL.length - this.syntax.UL.length;\n }\n points.line = this.getTabSpace(line) + line.trim().replace(pattern, replace);\n }\n return points;\n };\n MDLists.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n MDLists.prototype.getListRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length; j++) {\n var syntax = this.selection.replaceSpecialChar(this.syntax[configKey[j]]);\n regex += regex === '' ? '^(' + syntax + ')|^(' + syntax.trim() + ')' :\n '|^(' + syntax + ')|^(' + syntax.trim() + ')';\n }\n return new RegExp(regex);\n };\n return MDLists;\n}());\nexport { MDLists };\n","import { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport * as CONSTANT from './../../markdown-parser/base/constant';\n/**\n * MDFormats internal plugin\n * @hidden\n */\nvar MDFormats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function MDFormats(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDFormats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n };\n MDFormats.prototype.applyFormats = function (e) {\n e.subCommand = e.subCommand.toLowerCase();\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n if (e.subCommand === 'p') {\n this.cleanFormat(textArea);\n this.restore(textArea, textArea.selectionStart, textArea.selectionEnd, e);\n return;\n }\n else {\n this.cleanFormat(textArea, e.subCommand);\n }\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var parents = this.selection.getSelectedParentPoints(textArea);\n if (e.subCommand === 'pre') {\n if (parents.length > 1) {\n this.applyCodeBlock(textArea, e, parents);\n }\n else {\n extend(e, e, { subCommand: 'InlineCode' }, true);\n this.parent.observer.notify(CONSTANT.selectionCommand, e);\n }\n return;\n }\n for (var i = 0; i < parents.length; i++) {\n if (parents[i].text !== '' && !this.selection.isStartWith(parents[i].text, '\\\\' + this.syntax[e.subCommand])) {\n parents[i].text = this.syntax[e.subCommand] + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? start + this.syntax[e.subCommand].length : start;\n addedLength += this.syntax[e.subCommand].length;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ?\n this.syntax[e.subCommand].length + parents[j].start : parents[j].start;\n parents[j].end = this.syntax[e.subCommand].length + parents[j].end;\n }\n }\n }\n else if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, e);\n };\n MDFormats.prototype.clearRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length && configKey[j] !== 'pre' && configKey[j] !== 'p'; j++) {\n regex += regex === '' ? '^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')' :\n '|^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')';\n }\n return regex;\n };\n MDFormats.prototype.cleanFormat = function (textArea, command) {\n var parents = this.selection.getSelectedParentPoints(textArea);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var removeLength = 0;\n if (this.selection.isClear(parents, this.clearRegex())) {\n for (var i = 0; i < parents.length; i++) {\n var configKey = Object.keys(this.syntax);\n for (var j = 0; parents[i].text !== '' && j < configKey.length; j++) {\n var removeText = this.syntax[configKey[j]];\n if (configKey[j] === command) {\n continue;\n }\n var regex = new RegExp('^(' + this.selection.replaceSpecialChar(removeText) + ')', 'gim');\n if (regex.test(parents[i].text)) {\n parents[i].text = parents[i].text.replace(regex, '');\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start - (removeText.length)) > 0 ? start - (removeText.length) : 0 : start;\n removeLength += removeText.length;\n if (parents.length !== 1) {\n for (var k = 0; k < parents.length; k++) {\n parents[k].start = k !== 0 ?\n parents[k].start - removeText.length : parents[k].start;\n parents[k].end = parents[k].end - removeText.length;\n }\n }\n break;\n }\n }\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end - removeLength);\n }\n };\n MDFormats.prototype.applyCodeBlock = function (textArea, event, parents) {\n var command = event.subCommand;\n var start = parents[0].start;\n var end = parents[parents.length - 1].end;\n var parentLines = this.selection.getAllParents(textArea.value);\n var firstPrevText = parentLines[parents[0].line - 1];\n var lastNextText = parentLines[(parents.length + 1) + 1];\n var addedLength = 0;\n if (!this.selection.isStartWith(firstPrevText, this.syntax.pre.split('\\n')[0]) &&\n !this.selection.isStartWith(lastNextText, this.syntax.pre.split('\\n')[0])) {\n var lines = textArea.value.substring(start, end).split('\\n');\n var lastLine = lines[lines.length - 1] === '' ? '' : '\\n';\n textArea.value = textArea.value.substr(0, start) + this.syntax[command] + textArea.value.substring(start, end) +\n lastLine + this.syntax[command] +\n textArea.value.substr(end, textArea.value.length);\n start += this.syntax[command].length;\n end += this.syntax[command].length - 1;\n }\n else {\n start = textArea.selectionStart;\n end = textArea.selectionEnd;\n }\n this.restore(textArea, start, end, event);\n };\n MDFormats.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDFormats;\n}());\nexport { MDFormats };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * SelectionCommands internal component\n * @hidden\n */\nvar MDSelectionFormats = /** @class */ (function () {\n function MDSelectionFormats(parent) {\n extend(this, this, parent, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDSelectionFormats.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.selectionCommand, this.applyCommands, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n MDSelectionFormats.prototype.keyDownHandler = function (e) {\n switch (e.event.action) {\n case 'bold':\n this.applyCommands({ subCommand: 'Bold', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'italic':\n this.applyCommands({ subCommand: 'Italic', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'strikethrough':\n this.applyCommands({ subCommand: 'StrikeThrough', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'uppercase':\n this.applyCommands({ subCommand: 'UpperCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'lowercase':\n this.applyCommands({ subCommand: 'LowerCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'superscript':\n this.applyCommands({ subCommand: 'SuperScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'subscript':\n this.applyCommands({ subCommand: 'SubScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n MDSelectionFormats.prototype.isBold = function (text, cmd) {\n return text.search('\\\\' + cmd + '\\\\' + cmd + '') !== -1;\n };\n MDSelectionFormats.prototype.isItalic = function (text, cmd) {\n return text.search('\\\\' + cmd) !== -1;\n };\n MDSelectionFormats.prototype.isMatch = function (text, cmd) {\n var matchText = [''];\n switch (cmd) {\n case this.syntax.Italic:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.InlineCode:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.StrikeThrough:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n }\n return matchText;\n };\n MDSelectionFormats.prototype.multiCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + '\\\\' + cmd + ')', 'g');\n };\n MDSelectionFormats.prototype.singleCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + ')', 'g');\n };\n MDSelectionFormats.prototype.isAppliedCommand = function (cmd) {\n var selectCmd = '';\n var isFormat = false;\n var textArea = this.parent.element;\n var start = textArea.selectionStart;\n var splitAt = function (index) { return function (x) { return [x.slice(0, index), x.slice(index)]; }; };\n var splitText = splitAt(start)(textArea.value);\n var cmdB = this.syntax.Bold.substr(0, 1);\n var cmdI = this.syntax.Italic;\n var beforeText = textArea.value.substr(splitText[0].length - 1, 1);\n var afterText = splitText[1].substr(0, 1);\n if ((beforeText !== '' && afterText !== '' && beforeText.match(/[a-z]/i)) &&\n beforeText === beforeText.toUpperCase() && afterText === afterText.toUpperCase() && cmd === 'UpperCase') {\n return true;\n }\n if (!(this.isBold(splitText[0], cmdB)) && !(this.isItalic(splitText[0], cmdI)) && !(this.isBold(splitText[1], cmdB)) &&\n !(this.isItalic(splitText[1], cmdI))) {\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 &&\n splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) &&\n cmd === 'SuperScript') {\n isFormat = true;\n }\n }\n if ((this.isBold(splitText[0], cmdB) && this.isBold(splitText[1], cmdB)) &&\n (splitText[0].match(this.multiCharRegx(cmdB)).length % 2 === 1 &&\n splitText[1].match(this.multiCharRegx(cmdB)).length % 2 === 1) && cmd === 'Bold') {\n isFormat = true;\n }\n splitText[0] = this.isBold(splitText[0], cmdB) ? splitText[0].replace(this.multiCharRegx(cmdB), '$%@') : splitText[0];\n splitText[1] = this.isBold(splitText[1], cmdB) ? splitText[1].replace(this.multiCharRegx(cmdB), '$%@') : splitText[1];\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.Italic)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.Italic))) &&\n (this.isMatch(splitText[0], this.syntax.Italic).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.Italic).length % 2 === 1) && cmd === 'Italic') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) && cmd === 'SuperScript') {\n isFormat = true;\n }\n return isFormat;\n };\n MDSelectionFormats.prototype.applyCommands = function (e) {\n this.currentAction = e.subCommand;\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var selection = this.parent.markdownSelection.getSelectedInlinePoints(textArea);\n if (selection.text !== '' && !this.isApplied(selection, e.subCommand)) {\n addedLength = (e.subCommand === 'UpperCase' || e.subCommand === 'LowerCase') ? 0 :\n this.syntax[e.subCommand].length;\n var repStart = textArea.value.substr(selection.start - this.syntax[e.subCommand].length, this.syntax[e.subCommand].length);\n var repEnd = void 0;\n if ((repStart === e.subCommand) || ((selection.start - this.syntax[e.subCommand].length ===\n textArea.value.indexOf(this.syntax[e.subCommand])) && (selection.end === textArea.value.lastIndexOf(this.syntax[e.subCommand]) || selection.end === textArea.value.lastIndexOf('/g, '').replace(/<\\/sub>/g, '');\n break;\n case 'SuperScript':\n text = text.replace(//g, '').replace(/<\\/sup>/g, '');\n break;\n }\n return text;\n };\n MDSelectionFormats.prototype.isApplied = function (line, command) {\n var regx = this.singleCharRegx(this.syntax[command]);\n switch (command) {\n case 'SubScript':\n case 'SuperScript':\n regx = this.singleCharRegx(this.syntax[command]);\n return regx.test(line.text);\n case 'Bold':\n case 'StrikeThrough':\n regx = this.multiCharRegx(this.syntax[command].substr(0, 1));\n return regx.test(line.text);\n case 'UpperCase':\n case 'LowerCase':\n regx = new RegExp('^[' + this.syntax[command] + ']*$', 'g');\n return regx.test(line.text);\n case 'Italic':\n var regTest = void 0;\n var regxB = this.multiCharRegx(this.syntax[command].substr(0, 1));\n if (regxB.test(line.text)) {\n var repText = line.text;\n repText = repText.replace(regxB, '$%#');\n regTest = regx.test(repText);\n }\n else {\n regTest = regx.test(line.text);\n }\n return regTest;\n case 'InlineCode':\n return regx.test(line.text);\n }\n };\n return MDSelectionFormats;\n}());\nexport { MDSelectionFormats };\n","/**\n * Default Markdown formats config for adapter\n */\nexport var markdownFormatTags = {\n 'h6': '###### ',\n 'h5': '##### ',\n 'h4': '#### ',\n 'h3': '### ',\n 'h2': '## ',\n 'h1': '# ',\n 'blockquote': '> ',\n 'pre': '```\\n',\n 'p': ''\n};\n/**\n * Default selection formats config for adapter\n */\nexport var markdownSelectionTags = {\n 'Bold': '**',\n 'Italic': '*',\n 'StrikeThrough': '~~',\n 'InlineCode': '`',\n 'SubScript': '',\n 'SuperScript': '',\n 'UpperCase': 'A-Z',\n 'LowerCase': 'a-z'\n};\n/**\n * Default Markdown lists config for adapter\n */\nexport var markdownListsTags = {\n 'OL': '1. ',\n 'UL': '- ',\n};\n/**\n * Default html key config for adapter\n */\nexport var htmlKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'underline': 'ctrl+u',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'indents': 'ctrl+]',\n 'outdents': 'ctrl+[',\n 'html-source': 'ctrl+shift+h',\n 'full-screen': 'ctrl+shift+f',\n 'decrease-fontsize': 'ctrl+shift+<',\n 'increase-fontsize': 'ctrl+shift+>',\n 'justify-center': 'ctrl+e',\n 'justify-full': 'ctrl+j',\n 'justify-left': 'ctrl+l',\n 'justify-right': 'ctrl+r',\n 'clear-format': 'ctrl+shift+r',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o',\n 'space': '32',\n 'enter': '13',\n 'tab': '9'\n};\n/**\n * Default markdown key config for adapter\n */\nexport var markdownKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'full-screen': 'ctrl+shift+f',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o'\n};\n","import { debounce, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoCommands = /** @class */ (function () {\n function UndoRedoCommands(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n UndoRedoCommands.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n };\n UndoRedoCommands.prototype.removeEventListener = function () {\n var debounceListener = debounce(this.keyUp, 300);\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, debounceListener);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n UndoRedoCommands.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoCommands.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n UndoRedoCommands.prototype.keyDown = function (e) {\n var event = e.event;\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoCommands.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * MD collection stored string format.\n * @method saveData\n * @return {void}\n */\n UndoRedoCommands.prototype.saveData = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var textValue = this.parent.element.value;\n var changEle = { text: textValue, start: start, end: end };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].start === start) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].end === end)) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.undoRedoStack.length > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n * @method undo\n * @return {void}\n */\n UndoRedoCommands.prototype.undo = function (e) {\n if (this.steps > 0) {\n this.currentAction = 'Undo';\n var start = this.undoRedoStack[this.steps - 1].start;\n var end = this.undoRedoStack[this.steps - 1].end;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.element.value = removedContent;\n this.parent.element.focus();\n this.steps--;\n this.restore(this.parent.element, start, end, e);\n }\n };\n /**\n * Redo the editable text.\n * @method redo\n * @return {void}\n */\n UndoRedoCommands.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n this.currentAction = 'Redo';\n var start = this.undoRedoStack[this.steps + 1].start;\n var end = this.undoRedoStack[this.steps + 1].end;\n this.parent.element.value = this.undoRedoStack[this.steps + 1].text;\n this.parent.element.focus();\n this.steps++;\n this.restore(this.parent.element, start, end, e);\n }\n };\n UndoRedoCommands.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n UndoRedoCommands.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoCommands;\n}());\nexport { UndoRedoCommands };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n */\nvar MDLink = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function MDLink(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLink.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK_COMMAND, this.createLink, this);\n };\n MDLink.prototype.createLink = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = (e.subCommand === 'Image') ? this.selection.getSelectedText(textArea) : e.item.text;\n var startOffset = (e.subCommand === 'Image') ? (start + 2) : (start + 1);\n var endOffset = (e.subCommand === 'Image') ? (end + 2) : (end + 1);\n text = (e.subCommand === 'Image') ? '![' + text + '](' + e.item.url + ')' : '[' + text + '](' + e.item.url + ')';\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, startOffset, endOffset);\n this.restore(textArea, startOffset, endOffset, e);\n };\n MDLink.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDLink;\n}());\nexport { MDLink };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n */\nvar ClearFormat = /** @class */ (function () {\n /**\n * Constructor for creating the clear format plugin\n * @hidden\n */\n function ClearFormat(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n ClearFormat.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_COMMAND, this.clear, this);\n };\n ClearFormat.prototype.replaceRegex = function (data) {\n return data.replace(/\\*/ig, '\\\\*').replace(/\\&/ig, '\\\\&')\n .replace(/\\-/ig, '\\\\-').replace(/\\^/ig, '\\\\^')\n .replace(/\\$/ig, '\\\\$').replace(/\\./ig, '\\\\.')\n .replace(/\\|/ig, '\\\\|').replace(/\\?/ig, '\\\\?')\n .replace(/\\+/ig, '\\\\+').replace(/\\-/ig, '\\\\-')\n .replace(/\\&/ig, '\\\\&');\n };\n ClearFormat.prototype.clearSelectionTags = function (text) {\n var data = this.parent.selectionTags;\n var keys = Object.keys(data);\n for (var num = 0; num < keys.length; num++) {\n var key = keys[num];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n var expString = this.replaceRegex(data[key]);\n var regExp = void 0;\n var startExp = void 0;\n var endExp = void 0;\n if (data[key] === '') {\n regExp = new RegExp('(.*?)<\\/sup>', 'ig');\n }\n else if (data[key] === '') {\n regExp = new RegExp('(.*?)<\\/sub>', 'ig');\n }\n else {\n regExp = new RegExp(expString + '(.*?)' + expString, 'ig');\n }\n startExp = data[key].length;\n endExp = (data[key] === '' || data[key] === '') ? data[key].length + 1 : data[key].length;\n var val = text.match(regExp);\n for (var index = 0; val && index < val.length && val[index] !== ''; index++) {\n text = text.replace(val[index], val[index].substr(startExp, val[index].length - endExp - startExp));\n }\n }\n }\n return text;\n };\n ClearFormat.prototype.clearFormatTags = function (text) {\n var lines = text.split('\\n');\n var tags = [this.parent.formatTags, this.parent.listTags];\n var str = '';\n for (var len = 0; len < lines.length; len++) {\n for (var num = 0; num < tags.length; num++) {\n var data = tags[num];\n var keys = Object.keys(data);\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n if (lines[len].indexOf(data[key]) === 0) {\n lines[len] = lines[len].replace(data[key], '');\n }\n }\n }\n }\n str = str + lines[len] + ((len !== lines.length - 1) ? '\\n' : '');\n }\n return str;\n };\n ClearFormat.prototype.clear = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = this.selection.getSelectedText(textArea);\n text = this.clearSelectionTags(text);\n text = this.clearFormatTags(text);\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, start, start + text.length);\n this.restore(textArea, start, start + text.length, e);\n };\n ClearFormat.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { MDLists } from './../plugin/lists';\nimport { MDFormats } from './../plugin/formats';\nimport { MDSelectionFormats } from './../plugin/md-selection-formats';\nimport { MarkdownSelection } from './../plugin/markdown-selection';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownFormatTags, markdownListsTags, markdownSelectionTags } from './../../common/config';\nimport { UndoRedoCommands } from './../plugin/undo';\nimport { MDLink } from './../plugin/link';\nimport * as EVENTS from './../../common/constant';\nimport { ClearFormat } from './../plugin/clearformat';\n/**\n * MarkdownParser internal component\n * @hidden\n */\nvar MarkdownParser = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n */\n function MarkdownParser(options) {\n this.initialize();\n extend(this, this, options, true);\n this.observer = new Observer(this);\n this.markdownSelection = new MarkdownSelection();\n this.listObj = new MDLists({ parent: this, syntax: this.listTags });\n this.formatObj = new MDFormats({ parent: this, syntax: this.formatTags });\n this.undoRedoManager = new UndoRedoCommands(this, options.options);\n this.mdSelectionFormats = new MDSelectionFormats({ parent: this, syntax: this.selectionTags });\n this.linkObj = new MDLink(this);\n this.clearObj = new ClearFormat(this);\n this.wireEvents();\n }\n MarkdownParser.prototype.initialize = function () {\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n MarkdownParser.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n };\n MarkdownParser.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n MarkdownParser.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n MarkdownParser.prototype.execCommand = function (command, value, event, callBack, text, exeValue) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(CONSTANT.LISTS_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.selectionCommand, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'links':\n case 'images':\n this.observer.notify(CONSTANT.LINK_COMMAND, { subCommand: value, event: event, callBack: callBack, item: exeValue });\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n }\n };\n return MarkdownParser;\n}());\nexport { MarkdownParser };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Formatter } from './formatter';\nimport { MarkdownParser } from './../../markdown-parser/base/markdown-parser';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownKeyConfig, markdownListsTags, markdownFormatTags, markdownSelectionTags } from './../../common/config';\n/**\n * Markdown adapter\n * @hidden\n */\nvar MarkdownFormatter = /** @class */ (function (_super) {\n __extends(MarkdownFormatter, _super);\n function MarkdownFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (options && _this.element) {\n _this.updateFormatter(_this.element, document, options.options);\n }\n return _this;\n }\n MarkdownFormatter.prototype.initialize = function () {\n this.keyConfig = markdownKeyConfig;\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n */\n MarkdownFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement) {\n this.editorManager = new MarkdownParser({\n element: editElement,\n formatTags: this.formatTags,\n listTags: this.listTags,\n selectionTags: this.selectionTags,\n options: options\n });\n }\n };\n return MarkdownFormatter;\n}(Formatter));\nexport { MarkdownFormatter };\n","/**\n * Markdown module is used to render RichTextEditor as Markdown editor content\n * @hidden\n */\nvar MarkdownRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function MarkdownRender(parent) {\n this.parent = parent;\n this.rteID = this.parent.element.id;\n }\n /**\n * The function is used to render RichTextEditor content div\n */\n MarkdownRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = this.parent.createElement('div', { id: this.rteID + '_view', className: 'e-rte-content' });\n this.editableElement = this.parent.createElement('textarea', {\n className: 'e-content',\n id: this.rteID + '_editable-content'\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n * @return {Element}\n */\n MarkdownRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n */\n MarkdownRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n MarkdownRender.prototype.getText = function () {\n return this.getEditPanel().value;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n */\n MarkdownRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n */\n MarkdownRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return MarkdownRender;\n}());\nexport { MarkdownRender };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { MarkdownFormatter } from '../formatter/markdown-formatter';\nimport { RenderType } from '../base/enum';\nimport { MarkdownToolbarStatus } from './markdown-toolbar-status';\nimport { MarkdownRender } from '../renderer/markdown-renderer';\nimport { MarkdownSelection } from './../../markdown-parser/plugin/markdown-selection';\n/**\n * `MarkdownEditor` module is used to markdown editor\n */\nvar MarkdownEditor = /** @class */ (function () {\n function MarkdownEditor(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n */\n MarkdownEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n MarkdownEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.saveSelection = new MarkdownSelection();\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.markdownToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n };\n MarkdownEditor.prototype.onSelectionSave = function () {\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.save(textArea.selectionStart, textArea.selectionEnd);\n };\n MarkdownEditor.prototype.onSelectionRestore = function (e) {\n this.contentRenderer.getEditPanel().focus();\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.restore(textArea);\n };\n MarkdownEditor.prototype.onToolbarClick = function (args) {\n var text;\n var startOffset;\n var endOffset;\n var item = args.item;\n if (this.parent.editorMode === 'Markdown') {\n var textArea = this.parent.contentModule.getEditPanel();\n textArea.focus();\n startOffset = textArea.selectionStart;\n endOffset = textArea.selectionEnd;\n text = textArea.value.substring(startOffset, endOffset);\n }\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, { member: 'link', args: args, text: text, module: 'Markdown' });\n break;\n case 'Image':\n this.parent.notify(events.insertImage, { member: 'image', args: args, text: text, module: 'Markdown' });\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n };\n MarkdownEditor.prototype.instantiateRenderer = function () {\n this.renderFactory.addRenderer(RenderType.Content, new MarkdownRender(this.parent));\n };\n MarkdownEditor.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.markdownToolbarClick, this.onToolbarClick);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\n this.parent.off(events.getSelectedHtml, this.getSelectedHtml);\n this.parent.off(events.selectionSave, this.onSelectionSave);\n this.parent.off(events.selectionRestore, this.onSelectionRestore);\n };\n MarkdownEditor.prototype.render = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n if (isNullOrUndefined(this.parent.formatter)) {\n this.parent.formatter = new MarkdownFormatter({\n element: editElement,\n options: option\n });\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new MarkdownToolbarStatus(this.parent);\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n MarkdownEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n };\n /**\n * For internal use only - Get the module name.\n */\n MarkdownEditor.prototype.getModuleName = function () {\n return 'markdownEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n MarkdownEditor.prototype.selectAll = function () {\n this.parent.formatter.editorManager.markdownSelection.setSelection(this.parent.contentModule.getEditPanel(), 0, this.parent.contentModule.getEditPanel().value.length);\n };\n /**\n * For get a selected text in RTE\n * @private\n */\n MarkdownEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()));\n };\n return MarkdownEditor;\n}());\nexport { MarkdownEditor };\n","/**\n * Constant values for EditorManager\n */\n/* Image plugin events\n * @hidden\n */\nexport var IMAGE = 'INSERT-IMAGE';\nexport var TABLE = 'INSERT-TABLE';\nexport var LINK = 'INSERT-LINK';\nexport var INSERT_ROW = 'INSERT-ROW';\nexport var INSERT_COLUMN = 'INSERT-COLUMN';\nexport var DELETEROW = 'DELETE-ROW';\nexport var DELETECOLUMN = 'DELETE-COLUMN';\nexport var REMOVETABLE = 'REMOVE-TABLE';\nexport var TABLEHEADER = 'TABLE-HEADER';\nexport var TABLE_VERTICAL_ALIGN = 'TABLE_VERTICAL_ALIGN';\n/* Alignments plugin events\n * @hidden\n */\nexport var ALIGNMENT_TYPE = 'alignment-type';\n/* Indents plugin events\n * @hidden\n */\nexport var INDENT_TYPE = 'indent-type';\n/* Constant tag names\n */\n/** @hidden */\nexport var DEFAULT_TAG = 'p';\n/** @hidden */\nexport var BLOCK_TAGS = ['address', 'article', 'aside', 'audio', 'blockquote',\n 'canvas', 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'main', 'nav',\n 'noscript', 'ol', 'output', 'p', 'pre', 'section', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul', 'video'];\n/** @hidden */\nexport var IGNORE_BLOCK_TAGS = ['td', 'th'];\n/** @hidden */\nexport var TABLE_BLOCK_TAGS = ['table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr'];\n/* Selection plugin events\n * @hidden\n */\nexport var SELECTION_TYPE = 'selection-type';\n/* Insert HTML plugin events\n * @hidden\n */\nexport var INSERTHTML_TYPE = 'inserthtml-type';\n/* Clear Format HTML plugin events\n * @hidden\n */\nexport var CLEAR_TYPE = 'clear-type';\n","/**\n * `Selection` module is used to handle RTE Selections.\n */\nvar NodeSelection = /** @class */ (function () {\n function NodeSelection() {\n this.startNodeName = [];\n this.endNodeName = [];\n }\n NodeSelection.prototype.saveInstance = function (range, body) {\n this.range = range.cloneRange();\n this.rootNode = this.documentFromRange(range);\n this.body = body;\n this.startContainer = this.getNodeArray(range.startContainer, true);\n this.endContainer = this.getNodeArray(range.endContainer, false);\n this.startOffset = range.startOffset;\n this.endOffset = range.endOffset;\n this.html = this.body.innerHTML;\n return this;\n };\n NodeSelection.prototype.documentFromRange = function (range) {\n return (9 === range.startContainer.nodeType) ? range.startContainer : range.startContainer.ownerDocument;\n };\n NodeSelection.prototype.getRange = function (docElement) {\n var select = this.get(docElement);\n var range = select && select.rangeCount > 0 ? select.getRangeAt(select.rangeCount - 1) : docElement.createRange();\n return (range.startContainer !== docElement || range.endContainer !== docElement\n || range.startOffset || range.endOffset || (range.setStart(docElement.body, 0),\n range.collapse(!0)),\n range);\n };\n NodeSelection.prototype.get = function (docElement) {\n return docElement.defaultView.getSelection();\n };\n NodeSelection.prototype.save = function (range, docElement) {\n range = (range) ? range.cloneRange() : this.getRange(docElement);\n return this.saveInstance(range, docElement.body);\n };\n NodeSelection.prototype.getIndex = function (node) {\n var index;\n var num = 0;\n node = !node.previousSibling && node.tagName === 'BR' ? node : node.previousSibling;\n if (node) {\n for (var type = node.nodeType; node; null) {\n index = node.nodeType;\n num++;\n type = index;\n node = node.previousSibling;\n }\n }\n return num;\n };\n NodeSelection.prototype.isChildNode = function (nodeCollection, parentNode) {\n for (var index = 0; index < parentNode.childNodes.length; index++) {\n if (nodeCollection.indexOf(parentNode.childNodes[index]) > -1) {\n return true;\n }\n }\n return false;\n };\n NodeSelection.prototype.getNode = function (startNode, endNode, nodeCollection) {\n if (endNode === startNode &&\n (startNode.nodeType === 3 || !startNode.firstChild || nodeCollection.indexOf(startNode.firstChild) !== -1\n || this.isChildNode(nodeCollection, startNode))) {\n return null;\n }\n if (nodeCollection.indexOf(startNode.firstChild) === -1 && startNode.firstChild && !this.isChildNode(nodeCollection, startNode)) {\n return startNode.firstChild;\n }\n if (startNode.nextSibling) {\n return startNode.nextSibling;\n }\n if (!startNode.parentNode) {\n return null;\n }\n else {\n return startNode.parentNode;\n }\n };\n NodeSelection.prototype.getNodeCollection = function (range) {\n var startNode = range.startContainer.childNodes[range.startOffset]\n || range.startContainer;\n var endNode = range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer;\n if (startNode === endNode && startNode.childNodes.length === 0) {\n return [startNode];\n }\n var nodeCollection = [];\n do {\n if (nodeCollection.indexOf(startNode) === -1) {\n nodeCollection.push(startNode);\n }\n startNode = this.getNode(startNode, endNode, nodeCollection);\n } while (startNode);\n return nodeCollection;\n };\n NodeSelection.prototype.getParentNodeCollection = function (range) {\n return this.getParentNodes(this.getNodeCollection(range), range);\n };\n NodeSelection.prototype.getParentNodes = function (nodeCollection, range) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection.indexOf(nodeCollection[index].parentNode) !== -1)\n || (nodeCollection[index].nodeType === 3 &&\n range.startContainer !== range.endContainer)) {\n nodeCollection.splice(index, 1);\n index--;\n }\n else if (nodeCollection[index].nodeType === 3) {\n nodeCollection[index] = nodeCollection[index].parentNode;\n }\n }\n return nodeCollection;\n };\n NodeSelection.prototype.getSelectionNodeCollection = function (range) {\n return this.getSelectionNodes(this.getNodeCollection(range));\n };\n NodeSelection.prototype.getSelectionNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeType !== 3 || nodeCollection[index].textContent.trim() === '') {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n NodeSelection.prototype.getInsertNodeCollection = function (range) {\n return this.getInsertNodes(this.getNodeCollection(range));\n };\n NodeSelection.prototype.getInsertNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection[index].childNodes.length !== 0 &&\n nodeCollection[index].nodeType !== 3) ||\n (nodeCollection[index].nodeType === 3 &&\n nodeCollection[index].textContent === '')) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n NodeSelection.prototype.getNodeArray = function (node, isStart, root) {\n var array = [];\n ((isStart) ? (this.startNodeName = []) : (this.endNodeName = []));\n for (; node !== (root ? root : this.rootNode); null) {\n (isStart) ? this.startNodeName.push(node.nodeName.toLowerCase()) : this.endNodeName.push(node.nodeName.toLowerCase());\n array.push(this.getIndex(node));\n node = node.parentNode;\n }\n return array;\n };\n NodeSelection.prototype.setRangePoint = function (range, isvalid, num, size) {\n var node = this.rootNode;\n var index = num.length;\n var constant = size;\n for (; index--; null) {\n node = node.childNodes[num[index]];\n }\n if (node && constant >= 0) {\n range[isvalid ? 'setStart' : 'setEnd'](node, constant);\n }\n return range;\n };\n NodeSelection.prototype.restore = function () {\n var range = this.range.cloneRange();\n range = this.setRangePoint(range, true, this.startContainer, this.startOffset);\n range = this.setRangePoint(range, false, this.endContainer, this.endOffset);\n this.selectRange(this.rootNode, range);\n return range;\n };\n NodeSelection.prototype.selectRange = function (docElement, range) {\n this.setRange(docElement, range);\n this.save(range, docElement);\n };\n NodeSelection.prototype.setRange = function (docElement, range) {\n var selection = this.get(docElement);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n NodeSelection.prototype.setSelectionText = function (docElement, startNode, endNode, startIndex, endIndex) {\n var range = docElement.createRange();\n range.setStart(startNode, startIndex);\n range.setEnd(endNode, endIndex);\n this.setRange(docElement, range);\n };\n NodeSelection.prototype.setSelectionContents = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNode(element);\n this.setRange(docElement, range);\n };\n NodeSelection.prototype.setSelectionNode = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNodeContents(element);\n this.setRange(docElement, range);\n };\n NodeSelection.prototype.getSelectedNodes = function (docElement) {\n return this.getNodeCollection(this.getRange(docElement));\n };\n NodeSelection.prototype.Clear = function (docElement) {\n this.get(docElement).removeAllRanges();\n };\n NodeSelection.prototype.insertParentNode = function (docElement, newNode, range) {\n range.surroundContents(newNode);\n this.selectRange(docElement, range);\n };\n NodeSelection.prototype.setCursorPoint = function (docElement, element, point) {\n var range = docElement.createRange();\n var selection = docElement.defaultView.getSelection();\n range.setStart(element, point);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n return NodeSelection;\n}());\nexport { NodeSelection };\n","import * as CONSTANT from './../base/constant';\nimport { append, detach } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/index';\nexport var markerClassName = {\n startSelection: 'e-editor-select-start',\n endSelection: 'e-editor-select-end'\n};\n/**\n * DOMNode internal plugin\n * @hidden\n */\nvar DOMNode = /** @class */ (function () {\n /**\n * Constructor for creating the DOMNode plugin\n * @hidden\n */\n function DOMNode(parent, currentDocument) {\n this.parent = parent;\n this.nodeSelection = new NodeSelection();\n this.currentDocument = currentDocument;\n }\n DOMNode.prototype.contents = function (element) {\n return (element && 'IFRAME' !== element.tagName ? Array.prototype.slice.call(element.childNodes || []) : []);\n };\n DOMNode.prototype.isBlockNode = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && CONSTANT.BLOCK_TAGS.indexOf(element.tagName.toLowerCase()) >= 0));\n };\n DOMNode.prototype.isLink = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && 'a' === element.tagName.toLowerCase()));\n };\n DOMNode.prototype.blockParentNode = function (element) {\n for (; element && element.parentNode !== this.parent && ((!element.parentNode ||\n !this.hasClass(element.parentNode, 'e-node-inner'))); null) {\n element = element.parentNode;\n if (this.isBlockNode(element)) {\n return element;\n }\n }\n return element;\n };\n DOMNode.prototype.rawAttributes = function (element) {\n var rawAttr = {};\n var attributes = element.attributes;\n if (attributes.length > 0) {\n for (var d = 0; d < attributes.length; d++) {\n var e = attributes[d];\n rawAttr[e.nodeName] = e.value;\n }\n }\n return rawAttr;\n };\n DOMNode.prototype.attributes = function (element) {\n if (!element) {\n return '';\n }\n var attr = '';\n var rawAttr = this.rawAttributes(element);\n var orderRawAttr = Object.keys(rawAttr).sort();\n for (var e = 0; e < orderRawAttr.length; e++) {\n var attrKey = orderRawAttr[e];\n var attrValue = rawAttr[attrKey];\n /* tslint:disable */\n if (attrValue.indexOf(\"'\") < 0 && attrValue.indexOf('\"') >= 0) {\n attr += ' ' + attrKey + \"='\" + attrValue + \"'\";\n }\n else if (attrValue.indexOf('\"') >= 0 && attrValue.indexOf(\"'\") >= 0) {\n /* tslint:enable */\n attrValue = attrValue.replace(/\"/g, '"');\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n else {\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n }\n return attr;\n };\n DOMNode.prototype.clearAttributes = function (element) {\n for (var attr = element.attributes, c = attr.length - 1; c >= 0; c--) {\n var key = attr[c];\n element.removeAttribute(key.nodeName);\n }\n };\n DOMNode.prototype.openTagString = function (element) {\n return '<' + element.tagName.toLowerCase() + this.attributes(element) + '>';\n };\n DOMNode.prototype.closeTagString = function (element) {\n return '';\n };\n DOMNode.prototype.createTagString = function (tagName, relativeElement, innerHTML) {\n return '<' + tagName.toLowerCase() + this.attributes(relativeElement) + '>' + innerHTML + '';\n };\n DOMNode.prototype.isList = function (element) {\n return !!element && ['UL', 'OL'].indexOf(element.tagName) >= 0;\n };\n DOMNode.prototype.isElement = function (element) {\n return element === this.parent;\n };\n DOMNode.prototype.isEditable = function (element) {\n return ((!element.getAttribute || element.getAttribute('contenteditable') === 'true')\n && ['STYLE', 'SCRIPT'].indexOf(element.tagName) < 0);\n };\n DOMNode.prototype.hasClass = function (element, className) {\n return element && element.classList && element.classList.contains(className);\n };\n DOMNode.prototype.replaceWith = function (element, value) {\n var parentNode = element.parentNode;\n parentNode.insertBefore(this.parseHTMLFragment(value), element);\n detach(element);\n };\n DOMNode.prototype.parseHTMLFragment = function (value) {\n /* tslint:disable */\n return document.createRange().createContextualFragment(value);\n /* tslint:enable */\n };\n DOMNode.prototype.wrap = function (element, wrapper) {\n element.parentNode.insertBefore(wrapper, element);\n wrapper = element.previousSibling;\n wrapper.appendChild(element);\n return wrapper;\n };\n DOMNode.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n DOMNode.prototype.wrapInner = function (parent, wrapper) {\n parent.appendChild(wrapper);\n wrapper = parent.querySelector('.e-rte-wrap-inner');\n wrapper.classList.remove('e-rte-wrap-inner');\n if (wrapper.classList.length === 0) {\n wrapper.removeAttribute('class');\n }\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n return wrapper;\n };\n DOMNode.prototype.unWrap = function (element) {\n var parent = element.parentNode;\n var unWrapNode = [];\n while (element.firstChild) {\n unWrapNode.push(element.firstChild);\n parent.insertBefore(element.firstChild, element);\n }\n unWrapNode = unWrapNode.length > 0 ? unWrapNode : [element.parentNode];\n parent.removeChild(element);\n return unWrapNode;\n };\n DOMNode.prototype.getSelectedNode = function (element, index) {\n if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 &&\n element.childNodes[index - 1] && element.childNodes[index - 1].nodeType === Node.ELEMENT_NODE &&\n (element.childNodes[index - 1].classList.contains(markerClassName.startSelection) ||\n element.childNodes[index - 1].classList.contains(markerClassName.endSelection))) {\n element = element.childNodes[index - 1];\n }\n else if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 && element.childNodes[index]) {\n element = element.childNodes[index];\n }\n if (element.nodeType === Node.TEXT_NODE) {\n element = element.parentNode;\n }\n return element;\n };\n DOMNode.prototype.nodeFinds = function (element, elements) {\n var existNodes = [];\n for (var i = 0; i < elements.length; i++) {\n if (element.contains(elements[i]) && element !== elements[i]) {\n existNodes.push(elements[i]);\n }\n }\n return existNodes;\n };\n DOMNode.prototype.isEditorArea = function () {\n var range = this.getRangePoint(0);\n var element;\n for (element = range.commonAncestorContainer; element && !this.isElement(element); null) {\n element = element.parentNode;\n }\n return !!this.isElement(element);\n };\n DOMNode.prototype.getRangePoint = function (point) {\n var selection = this.getSelection();\n var ranges = [];\n if (selection && selection.getRangeAt && selection.rangeCount) {\n ranges = [];\n for (var f = 0; f < selection.rangeCount; f++) {\n ranges.push(selection.getRangeAt(f));\n }\n }\n else {\n ranges = [this.currentDocument.createRange()];\n }\n return 'undefined' !== typeof point ? ranges[point] : ranges;\n };\n DOMNode.prototype.getSelection = function () {\n return this.nodeSelection.get(this.currentDocument);\n };\n DOMNode.prototype.getPreviousNode = function (element) {\n element = element.previousSibling;\n for (; element && element.textContent === '\\n'; null) {\n element = element.previousSibling;\n }\n return element;\n };\n DOMNode.prototype.encode = function (value) {\n var divNode = document.createElement('div');\n divNode.innerText = value;\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n DOMNode.prototype.saveMarker = function (save) {\n var start = this.parent.querySelector('.' + markerClassName.startSelection);\n var startTextNode;\n if (this.hasClass(start, markerClassName.startSelection) && start.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, start, this.encode(start.textContent));\n this.replaceWith(start, replace);\n start = this.parent.querySelector('.' + markerClassName.startSelection);\n start.classList.remove(markerClassName.startSelection);\n startTextNode = start.childNodes[0];\n }\n else {\n startTextNode = this.unWrap(start)[0];\n }\n var endTextNode;\n var end = this.parent.querySelector('.' + markerClassName.endSelection);\n if (this.hasClass(end, markerClassName.endSelection) && end.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, end, this.encode(end.textContent));\n this.replaceWith(end, replace);\n end = this.parent.querySelector('.' + markerClassName.endSelection);\n end.classList.remove(markerClassName.endSelection);\n endTextNode = end.childNodes[0];\n }\n else {\n endTextNode = end ? this.unWrap(end)[0] : startTextNode;\n }\n save.startContainer = save.getNodeArray(startTextNode, true);\n save.endContainer = save.getNodeArray(endTextNode, false);\n return save;\n };\n DOMNode.prototype.marker = function (className, textContent) {\n return '' + textContent + '';\n };\n DOMNode.prototype.setMarker = function (save) {\n var range = save.range;\n var start = (range.startContainer.childNodes[range.startOffset]\n || range.startContainer);\n var end = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer);\n if ((start.nodeType === Node.ELEMENT_NODE && end.nodeType === Node.ELEMENT_NODE) && (start.contains(end) || end.contains(start))) {\n var existNode = start.contains(end) ? start : end;\n var isElement = existNode.nodeType !== Node.TEXT_NODE;\n if (isElement) {\n var nodes = [];\n var textNodes = [];\n for (var node = existNode; existNode.contains(node); null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (textNodes.indexOf(node) < 0 && (node.nodeType === Node.TEXT_NODE ||\n (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0\n && node.tagName === 'BR'))) {\n textNodes.push(node);\n }\n }\n if (textNodes.length) {\n start = start.contains(end) ? textNodes[0] : start;\n end = textNodes[textNodes.length - 1];\n }\n }\n }\n if (start !== end) {\n if (start.nodeType !== Node.TEXT_NODE && start.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(start.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n var markerStart = range.startContainer.querySelector('.' + markerClassName.startSelection);\n markerStart.appendChild(start);\n }\n else {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n }\n if (end.nodeType !== Node.TEXT_NODE && end.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(end.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n this.replaceWith(end, this.marker(markerClassName.endSelection, this.encode(end.textContent)));\n var markerEnd = range.endContainer.querySelector('.' + markerClassName.endSelection);\n markerEnd.appendChild(end);\n }\n else {\n this.replaceWith(end, this.marker(markerClassName.endSelection, this.encode(end.textContent)));\n }\n }\n else {\n if (start.nodeType === 3) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n }\n else {\n start = start.tagName === 'BR' ? start.parentNode : start;\n var marker = this.marker(markerClassName.startSelection, '');\n append([this.parseHTMLFragment(marker)], start);\n }\n }\n };\n DOMNode.prototype.createTempNode = function (element) {\n var textContent = element.textContent;\n if (element.tagName === 'BR') {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + '>';\n var node = element.parentNode;\n if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.tagName.toLocaleLowerCase()) >= 0) {\n element = this.wrap(element, this.parseHTMLFragment(wrapper));\n }\n }\n else if (((element.nodeType !== Node.TEXT_NODE &&\n (element.classList.contains(markerClassName.startSelection) ||\n element.classList.contains(markerClassName.endSelection))) ||\n textContent.replace(/\\n/g, '').replace(/(^ *)|( *$)/g, '').length > 0 ||\n textContent.length && textContent.indexOf('\\n') < 0)) {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + '>';\n var target = element;\n element = this.wrap(element, this.parseHTMLFragment(wrapper));\n var ignoreBr = target.nodeType === Node.ELEMENT_NODE && target.firstChild && target.firstChild.nodeName === 'BR'\n && (target.classList.contains(markerClassName.startSelection) ||\n target.classList.contains(markerClassName.endSelection));\n if (!ignoreBr && element.nextElementSibling && element.nextElementSibling.tagName === 'BR') {\n element.appendChild(element.nextElementSibling);\n }\n }\n return element;\n };\n DOMNode.prototype.blockNodes = function () {\n var collectionNodes = [];\n var selection = this.getSelection();\n if (this.isEditorArea() && selection.rangeCount) {\n var ranges = this.getRangePoint();\n for (var j = 0; j < ranges.length; j++) {\n var parentNode = void 0;\n var range = ranges[j];\n var startNode = this.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.getSelectedNode(range.endContainer, range.endOffset);\n if (this.isBlockNode(startNode) && collectionNodes.indexOf(startNode) < 0) {\n collectionNodes.push(startNode);\n }\n parentNode = this.blockParentNode(startNode);\n if (parentNode && collectionNodes.indexOf(parentNode) < 0) {\n if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(parentNode.tagName.toLocaleLowerCase()) >= 0 && (startNode.tagName === 'BR' ||\n startNode.nodeType === Node.TEXT_NODE ||\n startNode.classList.contains(markerClassName.startSelection) ||\n startNode.classList.contains(markerClassName.endSelection))) {\n var tempNode = startNode.previousSibling &&\n startNode.previousSibling.nodeType === Node.TEXT_NODE ?\n startNode.previousSibling : startNode;\n collectionNodes.push(this.createTempNode(tempNode));\n }\n else {\n collectionNodes.push(parentNode);\n }\n }\n var nodes = [];\n for (var node = startNode; node !== endNode && node !== this.parent; null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node && (node.tagName === 'BR' || node.nodeType === Node.TEXT_NODE ||\n node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection)) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node);\n }\n else if (node.nextSibling && (node.nextSibling.tagName === 'BR' ||\n node.nextSibling.nodeType === Node.TEXT_NODE ||\n node.nextSibling.classList.contains(markerClassName.startSelection) ||\n node.nextSibling.classList.contains(markerClassName.endSelection)) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.nextSibling.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node.nextSibling);\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (collectionNodes.indexOf(node) < 0 && node.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0 &&\n (node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection))) {\n collectionNodes.push(this.createTempNode(node));\n }\n if (this.isBlockNode(node) && this.ignoreTableTag(node) && nodes.indexOf(node) < 0 &&\n collectionNodes.indexOf(node) < 0 && (node !== endNode || range.endOffset > 0)) {\n collectionNodes.push(node);\n }\n }\n parentNode = this.blockParentNode(endNode);\n if (parentNode && this.ignoreTableTag(parentNode) && collectionNodes.indexOf(parentNode) < 0) {\n collectionNodes.push(parentNode);\n }\n }\n }\n for (var i = collectionNodes.length - 1; i > 0; i--) {\n var nodes = this.nodeFinds(collectionNodes[i], collectionNodes);\n if (nodes.length) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (collectionNodes[i].tagName === 'LI' && listNodes.length > 0) {\n continue;\n }\n else {\n collectionNodes.splice(i, 1);\n }\n }\n }\n return collectionNodes;\n };\n DOMNode.prototype.ignoreTableTag = function (element) {\n return !(CONSTANT.TABLE_BLOCK_TAGS.indexOf(element.tagName.toLocaleLowerCase()) >= 0);\n };\n return DOMNode;\n}());\nexport { DOMNode };\n","import * as CONSTANT from './../base/constant';\nimport { createElement, detach, prepend, append, attributes } from '@syncfusion/ej2-base';\nimport { markerClassName } from './dom-node';\nimport * as EVENTS from './../../common/constant';\n/**\n * Lists internal component\n * @hidden\n */\nvar Lists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\n */\n function Lists(parent) {\n this.parent = parent;\n this.domNode = this.parent.domNode;\n this.addEventListener();\n }\n Lists.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.LIST_TYPE, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n Lists.prototype.keyDownHandler = function (e) {\n if (e.event.which === 9) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n var blockNodes = void 0;\n var startOffset = range.startOffset;\n var endOffset = range.endOffset;\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n if ((startNode === endNode && (startNode.nodeName === 'BR' || startNode.nodeName === '#text') &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(startNode.parentNode.tagName.toLocaleLowerCase()) >= 0)) {\n return;\n }\n else {\n blockNodes = this.domNode.blockNodes();\n }\n var nodes = [];\n var isNested = true;\n for (var i = 0; i < blockNodes.length; i++) {\n if (blockNodes[i].tagName === 'LI') {\n nodes.push(blockNodes[i]);\n }\n else if (blockNodes[i].parentNode.tagName === 'LI') {\n nodes.push(blockNodes[i].parentNode);\n }\n }\n if (nodes.length > 1 || nodes.length && ((startOffset === 0 && endOffset === 0) || e.ignoreDefault)) {\n e.event.preventDefault();\n e.event.stopPropagation();\n if (!(e.event.action && e.event.action === 'indent')) {\n this.domNode.setMarker(this.saveSelection);\n }\n this.currentAction = this.getAction(nodes[0]);\n if (e.event.shiftKey) {\n this.revertList(nodes);\n this.revertClean();\n }\n else {\n isNested = this.nestedList(nodes);\n }\n if (isNested) {\n this.cleanNode();\n this.parent.editableElement.focus();\n }\n if (!(e.event.action && e.event.action === 'indent')) {\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes(),\n event: e.event\n });\n }\n }\n }\n }\n else {\n switch (e.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n }\n };\n Lists.prototype.getAction = function (element) {\n var parentNode = element.parentNode;\n return (parentNode.nodeName === 'OL' ? 'OL' : 'UL');\n };\n Lists.prototype.revertClean = function () {\n var collectionNodes = this.parent.editableElement.querySelectorAll('ul, ol');\n for (var i = 0; i < collectionNodes.length; i++) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (listNodes.length > 0) {\n for (var j = 0; j < listNodes.length; j++) {\n var prevSibling = listNodes[j].previousSibling;\n if (prevSibling && prevSibling.tagName === 'LI') {\n prevSibling.appendChild(listNodes[j]);\n }\n }\n }\n }\n };\n Lists.prototype.nestedList = function (elements) {\n var isNested = false;\n for (var i = 0; i < elements.length; i++) {\n var prevSibling = this.domNode.getPreviousNode(elements[i]);\n if (prevSibling) {\n isNested = true;\n var siblingList = elements[i].querySelectorAll('ul, ol');\n var firstNode = siblingList[0];\n if (firstNode) {\n var nestedElement = createElement('li');\n prepend([nestedElement], firstNode);\n for (var h = this.domNode.contents(elements[i])[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n nestedElement.appendChild(h);\n h = nextSibling;\n }\n append([firstNode], prevSibling);\n detach(elements[i]);\n }\n else {\n siblingList = prevSibling.querySelectorAll('ul, ol');\n firstNode = siblingList[0];\n if (firstNode) {\n append([elements[i]], firstNode);\n }\n else {\n var nestedElement = createElement(elements[i].parentNode.tagName);\n append([nestedElement], prevSibling);\n append([elements[i]], nestedElement);\n }\n }\n }\n }\n return isNested;\n };\n Lists.prototype.applyListsHandler = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.currentAction = e.subCommand;\n this.domNode.setMarker(this.saveSelection);\n var listsNodes = this.domNode.blockNodes();\n for (var i = 0; i < listsNodes.length; i++) {\n if (listsNodes[i].tagName !== 'LI' && 'LI' === listsNodes[i].parentNode.tagName) {\n listsNodes[i] = listsNodes[i].parentNode;\n }\n }\n this.applyLists(listsNodes, this.currentAction);\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Lists.prototype.applyLists = function (elements, type) {\n var isReverse = true;\n if (this.isRevert(elements, type)) {\n this.revertList(elements);\n }\n else {\n this.checkLists(elements, type);\n for (var i = 0; i < elements.length; i++) {\n if ('LI' !== elements[i].tagName) {\n isReverse = false;\n var openTag = '<' + type + this.domNode.attributes(elements[i]) + '>';\n var closeTag = '';\n var newTag = 'li class=\"e-rte-replace-tag\"';\n var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ? elements[i].innerHTML :\n elements[i].outerHTML);\n var innerHTML = this.domNode.createTagString(newTag, null, replaceHTML);\n var collectionString = openTag + innerHTML + closeTag;\n this.domNode.replaceWith(elements[i], collectionString);\n var element = this.parent.editableElement.querySelector('.e-rte-replace-tag');\n element.removeAttribute('class');\n }\n }\n }\n this.cleanNode();\n this.parent.editableElement.focus();\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n };\n Lists.prototype.isRevert = function (nodes, tagName) {\n var isRevert = true;\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].tagName !== 'LI') {\n return false;\n }\n if (nodes[i].parentNode.tagName !== tagName) {\n isRevert = false;\n }\n }\n return isRevert;\n };\n Lists.prototype.checkLists = function (nodes, tagName) {\n var nodesTemp = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i].parentNode;\n if (nodes[i].tagName === 'LI' && node.tagName !== tagName && nodesTemp.indexOf(node) < 0) {\n nodesTemp.push(node);\n }\n }\n for (var j = nodesTemp.length - 1; j >= 0; j--) {\n var h = nodesTemp[j];\n var replace = '<' + tagName.toLowerCase() + ' '\n + this.domNode.attributes(h) + '>' + h.innerHTML + '';\n this.domNode.replaceWith(nodesTemp[j], replace);\n }\n };\n Lists.prototype.cleanNode = function () {\n var liParents = this.parent.editableElement.querySelectorAll('ol + ol, ul + ul');\n for (var c = 0; c < liParents.length; c++) {\n var node = liParents[c];\n if (this.domNode.isList(node.previousSibling) &&\n this.domNode.openTagString(node) === this.domNode.openTagString(node.previousSibling)) {\n var contentNodes = this.domNode.contents(node);\n for (var f = 0; f < contentNodes.length; f++) {\n node.previousSibling.appendChild(contentNodes[f]);\n }\n node.parentNode.removeChild(node);\n }\n }\n };\n Lists.prototype.revertList = function (elements) {\n for (var i = elements.length - 1; i >= 0; i--) {\n for (var j = i - 1; j >= 0; j--) {\n if (elements[j].contains((elements[i])) || elements[j] === elements[i]) {\n elements.splice(i, 1);\n break;\n }\n }\n }\n var viewNode = [];\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var parentNode = elements[i].parentNode;\n var className = element.getAttribute('class');\n if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element),\n 'LI' === parentNode.parentNode.tagName) {\n element.parentNode.insertBefore(this.closeTag('LI'), element);\n this.domNode.insertAfter(this.openTag('LI'), element);\n }\n else {\n var classAttr = '';\n if (className) {\n classAttr += ' class=\"' + className + '\"';\n }\n if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + classAttr + ' class=\"e-rte-wrap-inner\"' +\n this.domNode.attributes(parentNode) + '>';\n this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));\n }\n else if (this.domNode.contents(element)[0].nodeType === 3) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||\n this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else {\n var childNode = element.firstChild;\n className = childNode.getAttribute('class');\n attributes(childNode, this.domNode.rawAttributes(parentNode));\n if (className && childNode.getAttribute('class')) {\n attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });\n }\n }\n append([this.openTag('LI')], element);\n prepend([this.closeTag('LI')], element);\n }\n this.domNode.insertAfter(this.openTag(parentNode.tagName), element);\n if (parentNode.parentNode.tagName === 'LI') {\n parentNode = parentNode.parentNode.parentNode;\n }\n if (viewNode.indexOf(parentNode) < 0) {\n viewNode.push(parentNode);\n }\n }\n for (var i = 0; i < viewNode.length; i++) {\n var node = viewNode[i];\n var nodeInnerHtml = node.innerHTML;\n var closeTag = /<\\/span>/g;\n var openTag = /<\\/span>/g;\n nodeInnerHtml = nodeInnerHtml.replace(closeTag, '');\n nodeInnerHtml = nodeInnerHtml.replace(openTag, '<$1 ' + this.domNode.attributes(node) + '>');\n this.domNode.replaceWith(node, this.domNode.openTagString(node) + nodeInnerHtml.trim() + this.domNode.closeTagString(node));\n }\n var emptyLi = this.parent.editableElement.querySelectorAll('li:empty');\n for (var i = 0; i < emptyLi.length; i++) {\n detach(emptyLi[i]);\n }\n var emptyUl = this.parent.editableElement.querySelectorAll('ul:empty, ol:empty');\n for (var i = 0; i < emptyUl.length; i++) {\n detach(emptyUl[i]);\n }\n };\n Lists.prototype.openTag = function (type) {\n return this.domNode.parseHTMLFragment('');\n };\n Lists.prototype.closeTag = function (type) {\n return this.domNode.parseHTMLFragment('');\n };\n return Lists;\n}());\nexport { Lists };\n","import * as EVENTS from './../../common/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Formats internal component\n * @hidden\n */\nvar Formats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function Formats(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n Formats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n };\n Formats.prototype.getParentNode = function (node) {\n for (; node.parentNode && node.parentNode !== this.parent.editableElement; null) {\n node = node.parentNode;\n }\n return node;\n };\n Formats.prototype.applyFormats = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var formatsNodes = this.parent.domNode.blockNodes();\n for (var i = 0; i < formatsNodes.length; i++) {\n var parentNode = void 0;\n var replaceHTML = void 0;\n if (e.subCommand.toLowerCase() === 'blockquote') {\n parentNode = this.getParentNode(formatsNodes[i]);\n replaceHTML = this.parent.domNode.isList(parentNode) ? parentNode.outerHTML : parentNode.innerHTML;\n }\n else {\n parentNode = formatsNodes[i];\n replaceHTML = parentNode.innerHTML;\n }\n if (e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() ||\n isNullOrUndefined(parentNode.parentNode) || parentNode.tagName === 'LI') {\n continue;\n }\n this.cleanFormats(parentNode, e.subCommand);\n var replaceTag = this.parent.domNode.createTagString(e.subCommand, parentNode, replaceHTML.replace(/>\\s+<'));\n this.parent.domNode.replaceWith(parentNode, replaceTag);\n }\n this.parent.editableElement.focus();\n save = this.parent.domNode.saveMarker(save);\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Formats.prototype.cleanFormats = function (element, tagName) {\n var ignoreAttr = ['display', 'font-size', 'margin-top', 'margin-bottom', 'margin-left', 'margin-right', 'font-weight'];\n tagName = tagName.toLowerCase();\n for (var i = 0; i < ignoreAttr.length && (tagName !== 'p' && tagName !== 'blockquote' && tagName !== 'pre'); i++) {\n element.style.removeProperty(ignoreAttr[i]);\n }\n };\n return Formats;\n}());\nexport { Formats };\n","/**\n * Node appending methods.\n * @hidden\n */\nvar InsertMethods = /** @class */ (function () {\n function InsertMethods() {\n }\n InsertMethods.WrapBefore = function (textNode, parentNode, isAfter) {\n parentNode.innerText = textNode.textContent;\n (!isAfter) ? this.AppendBefore(parentNode, textNode) : this.AppendBefore(parentNode, textNode, true);\n if (textNode.parentNode) {\n textNode.parentNode.removeChild(textNode);\n }\n return parentNode.childNodes[0];\n };\n InsertMethods.Wrap = function (childNode, parentNode) {\n this.AppendBefore(parentNode, childNode);\n parentNode.appendChild(childNode);\n return childNode;\n };\n InsertMethods.unwrap = function (node) {\n var parent = node.parentNode;\n var child = [];\n for (; node.firstChild; null) {\n child.push(parent.insertBefore(node.firstChild, node));\n }\n parent.removeChild(node);\n return child;\n };\n InsertMethods.AppendBefore = function (textNode, parentNode, isAfter) {\n return (parentNode.parentNode) ? ((!isAfter) ? parentNode.parentNode.insertBefore(textNode, parentNode)\n : parentNode.parentNode.insertBefore(textNode, parentNode.nextSibling)) :\n parentNode;\n };\n return InsertMethods;\n}());\nexport { InsertMethods };\n","import { NodeSelection } from './../../selection/index';\nimport { InsertMethods } from './insert-methods';\n/**\n * Split the Node based on selection\n * @hidden\n */\nvar NodeCutter = /** @class */ (function () {\n function NodeCutter() {\n this.position = -1;\n this.nodeSelection = new NodeSelection();\n }\n // Split Selection Node\n NodeCutter.prototype.GetSpliceNode = function (range, node) {\n node = this.SplitNode(range, node, true);\n node = this.SplitNode(range, node, false);\n return node;\n };\n NodeCutter.prototype.SplitNode = function (range, node, isCollapsed) {\n if (node) {\n var clone = range.cloneRange();\n var parent_1 = node.parentNode;\n var index = this.nodeSelection.getIndex(node);\n clone.collapse(isCollapsed);\n (isCollapsed) ? clone.setStartBefore(node) : clone.setEndAfter(node);\n var fragment = clone.extractContents();\n if (isCollapsed) {\n node = parent_1.childNodes[index];\n fragment = this.spliceEmptyNode(fragment, false);\n if (fragment && fragment.textContent !== '') {\n if (node) {\n InsertMethods.AppendBefore(fragment, node);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n node = divNode.firstChild;\n parent_1.appendChild(node);\n }\n }\n }\n else {\n node = parent_1.childNodes.length > 1 ? parent_1.childNodes[index] :\n parent_1.childNodes[0];\n fragment = this.spliceEmptyNode(fragment, true);\n if (fragment && fragment.textContent !== '') {\n if (node) {\n InsertMethods.AppendBefore(fragment, node, true);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n parent_1.insertBefore(divNode.firstChild, parent_1.firstChild);\n node = parent_1.firstChild;\n }\n }\n }\n return node;\n }\n else {\n return null;\n }\n };\n NodeCutter.prototype.spliceEmptyNode = function (fragment, isStart) {\n var len = fragment.childNodes.length - 1;\n if (len > -1 && !isStart) {\n this.spliceEmptyNode(fragment.childNodes[len], isStart);\n }\n else if (len > -1) {\n this.spliceEmptyNode(fragment.childNodes[0], isStart);\n }\n else if (fragment.nodeType !== 3 && fragment.nodeType !== 11) {\n fragment.parentNode.removeChild(fragment);\n }\n return fragment;\n };\n // Cursor Position split\n NodeCutter.prototype.GetCursorStart = function (indexes, index, isStart) {\n indexes = (isStart) ? indexes : indexes.reverse();\n var position = indexes[0];\n for (var num = 0; num < indexes.length && ((isStart) ? (indexes[num] < index) : (indexes[num] >= index)); num++) {\n position = indexes[num];\n }\n return position;\n };\n NodeCutter.prototype.GetCursorRange = function (docElement, range, node) {\n var cursorRange = docElement.createRange();\n var indexes = [];\n indexes.push(0);\n var str = this.TrimLineBreak(node.data);\n var index = str.indexOf(' ', 0);\n while (index !== -1) {\n if (indexes.indexOf(index) < 0) {\n indexes.push(index);\n }\n if (new RegExp('\\\\s').test(str[index - 1]) && (indexes.indexOf(index - 1) < 0)) {\n indexes.push(index - 1);\n }\n if (new RegExp('\\\\s').test(str[index + 1])) {\n indexes.push(index + 1);\n }\n index = str.indexOf(' ', (index + 1));\n }\n indexes.push(str.length);\n if ((indexes.indexOf(range.startOffset) >= 0)\n || ((indexes.indexOf(range.startOffset - 1) >= 0) && (range.startOffset !== 1\n || (range.startOffset === 1 && new RegExp('\\\\s').test(str[0])))\n || ((indexes[indexes.length - 1] - 1) === range.startOffset))) {\n cursorRange = range;\n this.position = 1;\n }\n else {\n var startOffset = this.GetCursorStart(indexes, range.startOffset, true);\n this.position = range.startOffset - startOffset;\n cursorRange.setStart(range.startContainer, startOffset);\n cursorRange.setEnd(range.startContainer, this.GetCursorStart(indexes, range.startOffset, false));\n }\n return cursorRange;\n };\n NodeCutter.prototype.GetCursorNode = function (docElement, range, node) {\n return this.GetSpliceNode(this.GetCursorRange(docElement, range, node), node);\n };\n NodeCutter.prototype.TrimLineBreak = function (line) {\n return line.replace(/(\\r\\n\\t|\\n|\\r\\t)/gm, ' ');\n };\n return NodeCutter;\n}());\nexport { NodeCutter };\n","import { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\n/**\n * Insert a HTML Node or Text\n * @hidden\n */\nvar InsertHtml = /** @class */ (function () {\n function InsertHtml() {\n }\n InsertHtml.Insert = function (docElement, insertNode) {\n var node;\n if (typeof insertNode === 'string') {\n var divNode = document.createElement('div');\n divNode.innerHTML = insertNode;\n node = divNode.firstChild;\n }\n else {\n node = insertNode;\n }\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var closestPrantNode = (node.nodeName.toLowerCase() === 'table') ? this.closestEle(nodes[0].parentNode, 'p') : nodes[0];\n if (!isCollapsed || (node.nodeName.toLowerCase() === 'table' && closestPrantNode)) {\n var preNode = nodeCutter.GetSpliceNode(range, closestPrantNode);\n var sibNode = preNode.previousSibling;\n var parentNode = preNode.parentNode;\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1]);\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n range.extractContents();\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3 && nodes[index].parentNode != null) {\n nodes[index].parentNode.removeChild(nodes[index]);\n }\n }\n if (sibNode) {\n InsertMethods.AppendBefore(node, sibNode, true);\n }\n else {\n if (parentNode.firstChild) {\n InsertMethods.AppendBefore(node, parentNode.firstChild, false);\n }\n else {\n parentNode.appendChild(node);\n }\n }\n if (node.nodeType !== 3) {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.childNodes.length);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.textContent.length);\n }\n }\n else {\n range.insertNode(node);\n if (node.nodeType !== 3 && node.childNodes.length > 0) {\n nodeSelection.setSelectionText(docElement, node, node, 1, 1);\n }\n else if (node.nodeType !== 3) {\n nodeSelection.setSelectionContents(docElement, node);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, node.textContent.length, node.textContent.length);\n }\n }\n };\n InsertHtml.closestEle = function (element, selector) {\n var el = element;\n while (el && el.nodeType === 1) {\n if (this.searchEle(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n };\n InsertHtml.searchEle = function (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 return InsertHtml;\n}());\nexport { InsertHtml };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n */\nvar LinkCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function LinkCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n LinkCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK, this.createLink, this);\n };\n LinkCommand.prototype.createLink = function (e) {\n if (!isNullOrUndefined(e.item.selectParent) && e.item.selectParent.length > 0 &&\n e.item.selectParent[0].tagName === 'A') {\n var anchorEle = e.item.selectParent[0];\n anchorEle.setAttribute('href', e.item.url);\n anchorEle.setAttribute('title', e.item.title);\n anchorEle.innerHTML = e.item.text;\n anchorEle.setAttribute('target', e.item.target);\n e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle, anchorEle, 1, 1);\n }\n else {\n var anchor = createElement('a', {\n className: 'e-rte-anchor', attrs: {\n href: e.item.url,\n target: e.item.target,\n title: e.item.title === '' ? e.item.url : e.item.title\n }\n });\n anchor.innerText = e.item.text === '' ? e.item.url : e.item.text;\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, anchor);\n if (e.event && e.event.type === 'keydown' && e.event.keyCode === 32) {\n var startContainer = e.item.selection.range.startContainer;\n startContainer.textContent = this.removeText(startContainer.textContent, e.item.url);\n }\n else {\n e.item.selection.setSelectionText(this.parent.currentDocument, anchor.childNodes[0], anchor.childNodes[0], 0, anchor.childNodes[0].textContent.length);\n }\n }\n if (e.callBack) {\n e.callBack({\n requestType: 'Links',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n LinkCommand.prototype.removeText = function (text, val) {\n var arr = text.split(' ');\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === val) {\n arr.splice(i, 1);\n i--;\n }\n }\n return arr.join(' ');\n };\n return LinkCommand;\n}());\nexport { LinkCommand };\n","import * as CONSTANT from './../base/constant';\nimport { setStyleAttribute } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * Formats internal component\n * @hidden\n */\nvar Alignments = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function Alignments(parent) {\n this.alignments = {\n 'JustifyLeft': 'left',\n 'JustifyCenter': 'center',\n 'JustifyRight': 'right',\n 'JustifyFull': 'justify'\n };\n this.parent = parent;\n this.addEventListener();\n }\n Alignments.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.ALIGNMENT_TYPE, this.applyAlignment, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Alignments.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'justify-center':\n this.applyAlignment({ subCommand: 'JustifyCenter', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-full':\n this.applyAlignment({ subCommand: 'JustifyFull', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-left':\n this.applyAlignment({ subCommand: 'JustifyLeft', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-right':\n this.applyAlignment({ subCommand: 'JustifyRight', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Alignments.prototype.applyAlignment = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var alignmentNodes = this.parent.domNode.blockNodes();\n for (var i = 0; i < alignmentNodes.length; i++) {\n var parentNode = alignmentNodes[i];\n setStyleAttribute(parentNode, { 'text-align': this.alignments[e.subCommand] });\n }\n this.parent.editableElement.focus();\n save = this.parent.domNode.saveMarker(save);\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n return Alignments;\n}());\nexport { Alignments };\n","import * as CONSTANT from './../base/constant';\nimport * as EVENTS from './../../common/constant';\n/**\n * Indents internal component\n * @hidden\n */\nvar Indents = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function Indents(parent) {\n this.indentValue = 20;\n this.parent = parent;\n this.addEventListener();\n }\n Indents.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INDENT_TYPE, this.applyIndents, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Indents.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'indents':\n this.applyIndents({ subCommand: 'Indent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'outdents':\n this.applyIndents({ subCommand: 'Outdent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Indents.prototype.applyIndents = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var indentsNodes = this.parent.domNode.blockNodes();\n var parentNodes = indentsNodes.slice();\n var listsNodes = [];\n for (var i = 0; i < parentNodes.length; i++) {\n if (parentNodes[i].tagName !== 'LI' && 'LI' === parentNodes[i].parentNode.tagName) {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i].parentNode);\n }\n else if (parentNodes[i].tagName === 'LI') {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i]);\n }\n }\n if (listsNodes.length > 0) {\n this.parent.observer.notify(EVENTS.KEY_DOWN_HANDLER, {\n event: {\n preventDefault: function () { return; },\n stopPropagation: function () { return; },\n shiftKey: (e.subCommand === 'Indent' ? false : true),\n which: 9,\n action: 'indent'\n },\n ignoreDefault: true\n });\n }\n for (var i = 0; i < indentsNodes.length; i++) {\n var parentNode = indentsNodes[i];\n var marginLeft = parentNode.style.marginLeft;\n var indentsValue = void 0;\n if (e.subCommand === 'Indent') {\n indentsValue = marginLeft === '' ? this.indentValue + 'px' : parseInt(marginLeft, null) + this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n else {\n indentsValue = (marginLeft === '' || marginLeft === '0px') ? '' : parseInt(marginLeft, null) - this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n }\n this.parent.editableElement.focus();\n save = this.parent.domNode.saveMarker(save);\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n return Indents;\n}());\nexport { Indents };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n */\nvar ImageCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function ImageCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ImageCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.IMAGE, this.createImage, this);\n };\n ImageCommand.prototype.createImage = function (e) {\n if (!isNullOrUndefined(e.item.selectParent) && e.item.selectParent[0].tagName === 'IMG') {\n var imgEle = e.item.selectParent[0];\n imgEle.setAttribute('src', e.item.url);\n imgEle.setAttribute('alt', e.item.altText);\n }\n else {\n var imgElement = createElement('img', {\n className: 'e-rte-image ' + e.item.cssClass, attrs: {\n width: (isNullOrUndefined(e.item.width) || isNullOrUndefined(e.item.width.width)) ? 'auto' :\n e.item.width.width,\n height: (isNullOrUndefined(e.item.height) || isNullOrUndefined(e.item.height.height)) ? 'auto' :\n e.item.height.height,\n alt: (e.item.altText !== '') ? e.item.altText : ''\n }\n });\n imgElement.setAttribute('src', isNullOrUndefined(e.item.url) ? '' : e.item.url);\n imgElement.style.minWidth = (isNullOrUndefined(e.item.width) || isNullOrUndefined(e.item.width.minWidth)) ? 0 + 'px' :\n e.item.width.minWidth + 'px';\n imgElement.style.maxWidth = (isNullOrUndefined(e.item.width) || isNullOrUndefined(e.item.width.maxWidth)) ? null :\n e.item.width.maxWidth + 'px';\n imgElement.style.minHeight = (isNullOrUndefined(e.item.height) || isNullOrUndefined(e.item.height.minHeight)) ? 0 + 'px' :\n e.item.height.minHeight + 'px';\n imgElement.style.maxHeight = (isNullOrUndefined(e.item.height) || isNullOrUndefined(e.item.height.maxHeight)) ? null :\n e.item.height.maxHeight + 'px';\n if (!isNullOrUndefined(e.item.selection)) {\n e.item.selection.restore();\n }\n InsertHtml.Insert(this.parent.currentDocument, imgElement);\n }\n if (e.callBack) {\n e.callBack({\n requestType: 'Image',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return ImageCommand;\n}());\nexport { ImageCommand };\n","import { createElement, closest, detach } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n */\nvar TableCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function TableCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n TableCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.TABLE, this.createTable, this);\n this.parent.observer.on(CONSTANT.INSERT_ROW, this.insertRow, this);\n this.parent.observer.on(CONSTANT.INSERT_COLUMN, this.insertColumn, this);\n this.parent.observer.on(CONSTANT.DELETEROW, this.deleteRow, this);\n this.parent.observer.on(CONSTANT.DELETECOLUMN, this.deleteColumn, this);\n this.parent.observer.on(CONSTANT.REMOVETABLE, this.removeTable, this);\n this.parent.observer.on(CONSTANT.TABLEHEADER, this.tableHeader, this);\n this.parent.observer.on(CONSTANT.TABLE_VERTICAL_ALIGN, this.tableVerticalAlign, this);\n };\n TableCommand.prototype.createTable = function (e) {\n var table = createElement('table', { className: 'e-rte-table' });\n var tblBody = createElement('tbody');\n table.style.width = e.item.width.width;\n var tdWid = parseInt(e.item.width.width, 10) / e.item.columns;\n for (var i = 0; i < e.item.row; i++) {\n var row = createElement('tr');\n for (var j = 0; j < e.item.columns; j++) {\n var cell = createElement('td');\n cell.appendChild(createElement('br'));\n cell.style.width = tdWid + '%';\n row.appendChild(cell);\n }\n tblBody.appendChild(row);\n }\n table.appendChild(tblBody);\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, table);\n e.item.selection.setSelectionText(this.parent.currentDocument, table.querySelector('td'), table.querySelector('td'), 0, 0);\n table.querySelector('td').classList.add('e-cell-select');\n if (e.callBack) {\n e.callBack({\n requestType: 'Table',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n return table;\n };\n TableCommand.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n TableCommand.prototype.insertRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n if (selectedCell.nodeName.toLowerCase() === 'th') {\n return;\n }\n var curRow = closest(selectedCell, 'tr');\n var newRow = closest(selectedCell, 'tr').cloneNode(true);\n var tabCell = Array.prototype.slice.call(newRow.querySelectorAll('td'));\n Array.prototype.forEach.call(tabCell, function (cell) {\n cell.innerHTML = '';\n cell.appendChild(createElement('br'));\n cell.removeAttribute('class');\n });\n (e.item.subCommand === 'InsertRowBefore') ?\n curRow.parentElement.insertBefore(newRow, curRow) : this.insertAfter(newRow, curRow);\n e.item.selection.setSelectionText(this.parent.currentDocument, e.item.selection.range.startContainer, e.item.selection.range.startContainer, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.insertColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n selectedCell = (selectedCell.nodeName !== 'TD') ? closest(selectedCell, 'td,th') : selectedCell;\n var curRow = closest(selectedCell, 'tr');\n var curCell;\n var allRows = closest(curRow, 'table').rows;\n var colIndex = Array.prototype.slice.call(curRow.querySelectorAll('th,td')).indexOf(selectedCell);\n var width = parseInt(e.item.width, 10) / (curRow.querySelectorAll('td,th').length + 1);\n for (var j = 0; j < closest(curRow, 'table').querySelectorAll('th,td').length; j++) {\n closest(curRow, 'table').querySelectorAll('th,td')[j].style.width = width + '%';\n }\n for (var i = 0; i < allRows.length; i++) {\n curCell = allRows[i].querySelectorAll('th,td')[colIndex];\n var colTemplate = curCell.cloneNode(true);\n colTemplate.innerHTML = '';\n colTemplate.appendChild(createElement('br'));\n colTemplate.removeAttribute('class');\n (e.item.subCommand === 'InsertColumnLeft') ? curCell.parentElement.insertBefore(colTemplate, curCell) :\n this.insertAfter(colTemplate, curCell);\n }\n e.item.selection.setSelectionText(this.parent.currentDocument, selectedCell, selectedCell, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var curRow = closest(selectedCell, 'tr');\n var allRows = closest(curRow, 'table').rows;\n if (curRow.querySelectorAll('th,td').length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n for (var i = 0; i < allRows.length; i++) {\n allRows[i].deleteCell(selectedCell.cellIndex);\n }\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var parentTable = closest(selectedCell, 'table');\n if (parentTable.rows.length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n parentTable.deleteRow(selectedCell.parentNode.rowIndex);\n e.item.selection.setSelectionText(this.parent.currentDocument, parentTable.querySelector('td'), parentTable.querySelector('td'), 0, 0);\n parentTable.querySelector('td, th').classList.add('e-cell-select');\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.removeTable = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var seletedTable = closest(selectedCell.parentElement, 'table');\n if (seletedTable) {\n e.item.selection.restore();\n detach(seletedTable);\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableHeader = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var table = closest(selectedCell.parentElement, 'table');\n if (table && 0 === table.querySelectorAll('thead').length) {\n var cellCount = table.querySelectorAll('tr:first-child td').length;\n var header = table.createTHead();\n var row = header.insertRow(0);\n for (var i = 0; i < cellCount; i++) {\n var th = createElement('th');\n th.appendChild(createElement('br'));\n row.appendChild(th);\n }\n }\n else {\n table.deleteTHead();\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableVerticalAlign = function (e) {\n if (e.item.subCommand === 'AlignTop') {\n e.item.tableCell.style.verticalAlign = 'top';\n }\n else if (e.item.subCommand === 'AlignMiddle') {\n e.item.tableCell.style.verticalAlign = 'middle';\n }\n else {\n e.item.tableCell.style.verticalAlign = 'bottom';\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return TableCommand;\n}());\nexport { TableCommand };\n","/**\n * Is formatted or not.\n * @hidden\n */\nvar IsFormatted = /** @class */ (function () {\n function IsFormatted() {\n }\n IsFormatted.prototype.getFormattedNode = function (node, format, endNode) {\n var parentNode = this.getFormatParent(node, format, endNode);\n if (parentNode !== null && parentNode !== endNode) {\n return parentNode;\n }\n return null;\n };\n IsFormatted.prototype.getFormatParent = function (node, format, endNode) {\n do {\n node = node.parentNode;\n } while (node && (node !== endNode) && !this.isFormattedNode(node, format));\n return node;\n };\n IsFormatted.prototype.isFormattedNode = function (node, format) {\n switch (format) {\n case 'bold':\n return IsFormatted.isBold(node);\n case 'italic':\n return IsFormatted.isItalic(node);\n case 'underline':\n return IsFormatted.isUnderline(node);\n case 'strikethrough':\n return IsFormatted.isStrikethrough(node);\n case 'superscript':\n return IsFormatted.isSuperscript(node);\n case 'subscript':\n return IsFormatted.isSubscript(node);\n case 'fontcolor':\n return this.isFontColor(node);\n case 'fontname':\n return this.isFontName(node);\n case 'fontsize':\n return this.isFontSize(node);\n case 'backgroundcolor':\n return this.isBackgroundColor(node);\n default:\n return false;\n }\n };\n IsFormatted.isBold = function (node) {\n var validTags = ['strong', 'b'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontWeight === 'bold') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isItalic = function (node) {\n var validTags = ['em', 'i'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontStyle === 'italic') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isUnderline = function (node) {\n var validTags = ['u'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'underline') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isStrikethrough = function (node) {\n var validTags = ['del', 'strike'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'line-through') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isSuperscript = function (node) {\n var validTags = ['sup'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isSubscript = function (node) {\n var validTags = ['sub'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontColor = function (node) {\n var color = node.style && node.style.color;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n color !== null && color !== '' && color !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n backColor !== null && backColor !== '' && backColor !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontSize = function (node) {\n var size = node.style && node.style.fontSize;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n size !== null && size !== '' && size !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontName = function (node) {\n var name = node.style && node.style.fontFamily;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n name !== null && name !== '' && name !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n // Get Formatted Node\n IsFormatted.inlineTags = [\n 'a',\n 'abbr',\n 'acronym',\n 'b',\n 'bdo',\n 'big',\n 'cite',\n 'code',\n 'dfn',\n 'em',\n 'i',\n 'kbd',\n 'label',\n 'q',\n 'samp',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'sup',\n 'tt',\n 'u',\n 'var'\n ];\n return IsFormatted;\n}());\nexport { IsFormatted };\n","/**\n * `Selection` module is used to handle RTE Selections.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nvar SelectionCommands = /** @class */ (function () {\n function SelectionCommands() {\n }\n SelectionCommands.applyFormat = function (docElement, format, endNode, value) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase', 'fontcolor', 'fontname', 'fontsize', 'backgroundcolor'];\n if (validFormats.indexOf(format) > -1) {\n var domSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var isFormatted = new IsFormatted();\n var range = domSelection.getRange(docElement);\n var save = domSelection.save(range, docElement);\n var nodes = domSelection.getSelectionNodeCollection(range);\n var isCollapsed = false;\n var isFormat = false;\n var isCursor = false;\n var isFontStyle = (['fontcolor', 'fontname', 'fontsize', 'backgroundcolor'].indexOf(format) > -1);\n if (range.collapsed) {\n if (nodes.length > 0) {\n isCollapsed = true;\n range = nodeCutter.GetCursorRange(docElement, range, nodes[0]);\n }\n else if (range.startContainer.nodeName.toLowerCase() !== 'td') {\n var cursorNode = this.insertCursorNode(domSelection, range, isFormatted, nodeCutter, format, value, endNode);\n domSelection.endContainer = domSelection.startContainer = domSelection.getNodeArray(cursorNode, true);\n domSelection.endOffset = domSelection.startOffset = 1;\n }\n }\n isCursor = range.collapsed;\n for (var index = 0; index < nodes.length; index++) {\n var formatNode = isFormatted.getFormattedNode(nodes[index], format, endNode);\n if (index === 0 && formatNode === null) {\n isFormat = true;\n }\n if (formatNode !== null && (!isFormat || isFontStyle)) {\n nodes[index] = this.removeFormat(nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection);\n }\n else {\n nodes[index] = this.insertFormat(nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value);\n }\n domSelection = this.applySelection(nodes, domSelection, nodeCutter, index, isCollapsed);\n }\n save.restore();\n }\n };\n SelectionCommands.insertCursorNode = function (domSelection, range, isFormatted, nodeCutter, format, value, endNode) {\n var cursorNodes = domSelection.getNodeCollection(range);\n var cursorFormat = (cursorNodes.length > 0) ? isFormatted.getFormattedNode(cursorNodes[0], format, endNode) : null;\n var cursorNode = null;\n if (cursorFormat) {\n cursorNode = cursorNodes[0];\n InsertMethods.unwrap(cursorFormat);\n }\n else {\n cursorNode = this.getInsertNode(range, format, value).firstChild;\n }\n return cursorNode;\n };\n SelectionCommands.removeFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection) {\n var splitNode = null;\n if (!(range.startContainer === range.endContainer && range.startOffset === 0\n && range.endOffset === range.startContainer.length)) {\n var nodeIndex = [];\n var cloneNode = nodes[index];\n do {\n nodeIndex.push(domSelection.getIndex(cloneNode));\n cloneNode = cloneNode.parentNode;\n } while (cloneNode && (cloneNode !== formatNode));\n cloneNode = splitNode = nodeCutter.GetSpliceNode(range, formatNode);\n if (!isCursor) {\n while (cloneNode && cloneNode.childNodes.length > 0 && ((nodeIndex.length - 1) >= 0)\n && (cloneNode.childNodes.length > nodeIndex[nodeIndex.length - 1])) {\n cloneNode = cloneNode.childNodes[nodeIndex[nodeIndex.length - 1]];\n nodeIndex.pop();\n }\n if (cloneNode.nodeType === 3 && !(isCursor && cloneNode.nodeValue === '')) {\n nodes[index] = cloneNode;\n }\n else {\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n if (cloneNode.nodeType !== 3) {\n cloneNode.insertBefore(divNode.firstChild, cloneNode.firstChild);\n nodes[index] = cloneNode.firstChild;\n }\n else {\n cloneNode.parentNode.insertBefore(divNode.firstChild, cloneNode);\n nodes[index] = cloneNode.previousSibling;\n cloneNode.parentNode.removeChild(cloneNode);\n }\n }\n }\n else {\n var lastNode = splitNode;\n for (; lastNode.firstChild !== null && lastNode.firstChild.nodeType !== 3; null) {\n lastNode = lastNode.firstChild;\n }\n lastNode.innerHTML = '';\n nodes[index] = lastNode.firstChild;\n }\n }\n var child = InsertMethods.unwrap(formatNode);\n if (child.length > 0 && isFontStyle) {\n for (var num = 0; num < child.length; num++) {\n child[num] = InsertMethods.Wrap(child[num], this.GetFormatNode(format, value));\n }\n }\n return nodes[index];\n };\n SelectionCommands.insertFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value) {\n if (!isCursor) {\n if ((formatNode === null && isFormat) || isFontStyle) {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n nodes[index].textContent = nodeCutter.TrimLineBreak(nodes[index].textContent);\n if (format === 'uppercase' || format === 'lowercase') {\n nodes[index].textContent = (format === 'uppercase') ? nodes[index].textContent.toLocaleUpperCase()\n : nodes[index].textContent.toLocaleLowerCase();\n }\n else if (!(isFontStyle === true && value === '')) {\n var element = this.GetFormatNode(format, value);\n nodes[index] = (index === (nodes.length - 1)) ? InsertMethods.Wrap(nodes[index], element)\n : InsertMethods.WrapBefore(nodes[index], element, true);\n nodes[index] = this.getChildNode(nodes[index], element);\n }\n }\n else {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n }\n }\n else {\n if (format !== 'uppercase' && format !== 'lowercase') {\n var element = this.getInsertNode(range, format, value);\n nodes[index] = element.firstChild;\n nodeCutter.position = 1;\n }\n else {\n nodeCutter.position = range.startOffset;\n }\n }\n return nodes[index];\n };\n SelectionCommands.getInsertNode = function (range, format, value) {\n var element = this.GetFormatNode(format, value);\n element.innerHTML = '';\n range.insertNode(element);\n return element;\n };\n SelectionCommands.getChildNode = function (node, element) {\n if (node === undefined || node === null) {\n element.innerHTML = '';\n node = element.firstChild;\n }\n return node;\n };\n SelectionCommands.applySelection = function (nodes, domSelection, nodeCutter, index, isCollapsed) {\n if (nodes.length === 1 && !isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = 0;\n domSelection.endOffset = nodes[index].textContent.length;\n }\n else if (nodes.length === 1 && isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = nodeCutter.position;\n domSelection.endOffset = nodeCutter.position;\n }\n else if (index === 0) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.startOffset = 0;\n }\n else if (index === nodes.length - 1) {\n domSelection.endContainer = domSelection.getNodeArray(nodes[index], false);\n domSelection.endOffset = nodes[index].textContent.length;\n }\n return domSelection;\n };\n SelectionCommands.GetFormatNode = function (format, value) {\n var node;\n switch (format) {\n case 'bold':\n return document.createElement('strong');\n case 'italic':\n return document.createElement('em');\n case 'underline':\n node = document.createElement('span');\n node.style.textDecoration = 'underline';\n return node;\n case 'strikethrough':\n node = document.createElement('span');\n node.style.textDecoration = 'line-through';\n return node;\n case 'superscript':\n return document.createElement('sup');\n case 'subscript':\n return document.createElement('sub');\n case 'fontcolor':\n node = document.createElement('span');\n node.style.color = value;\n return node;\n case 'fontname':\n node = document.createElement('span');\n node.style.fontFamily = value;\n return node;\n case 'fontsize':\n node = document.createElement('span');\n node.style.fontSize = value;\n return node;\n default:\n node = document.createElement('span');\n node.style.backgroundColor = value;\n return node;\n }\n };\n return SelectionCommands;\n}());\nexport { SelectionCommands };\n","import * as CONSTANT from './../base/constant';\nimport { SelectionCommands } from './selection-commands';\nimport * as EVENTS from './../../common/constant';\n/**\n * Selection EXEC internal component\n * @hidden\n */\nvar SelectionBasedExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function SelectionBasedExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n SelectionBasedExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.SELECTION_TYPE, this.applySelection, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n SelectionBasedExec.prototype.keyDownHandler = function (e) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase'];\n if (e.event.ctrlKey && validFormats.indexOf(e.event.action) > -1) {\n e.event.preventDefault();\n SelectionCommands.applyFormat(this.parent.currentDocument, e.event.action, this.parent.editableElement);\n this.callBack(e, e.event.action);\n }\n };\n SelectionBasedExec.prototype.applySelection = function (e) {\n SelectionCommands.applyFormat(this.parent.currentDocument, e.subCommand.toLocaleLowerCase(), this.parent.editableElement, e.value);\n this.callBack(e, e.subCommand);\n };\n SelectionBasedExec.prototype.callBack = function (event, action) {\n if (event.callBack) {\n event.callBack({\n requestType: action,\n event: event.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return SelectionBasedExec;\n}());\nexport { SelectionBasedExec };\n","import * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Selection EXEC internal component\n * @hidden\n */\nvar InsertHtmlExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function InsertHtmlExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n InsertHtmlExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INSERTHTML_TYPE, this.applyHtml, this);\n };\n InsertHtmlExec.prototype.applyHtml = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.value);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return InsertHtmlExec;\n}());\nexport { InsertHtmlExec };\n","/**\n * `Clear Format` module is used to handle Clear Format.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nvar ClearFormat = /** @class */ (function () {\n function ClearFormat() {\n }\n ClearFormat.clear = function (docElement, endNode) {\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var save = nodeSelection.save(range, docElement);\n if (!isCollapsed) {\n var preNode = nodeCutter.GetSpliceNode(range, nodes[0]);\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1]);\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n var exactNodes = nodeSelection.getNodeCollection(range);\n var cloneSelectNodes = exactNodes.slice();\n this.clearInlines(nodeSelection.getSelectionNodes(cloneSelectNodes), cloneSelectNodes, nodeSelection.getRange(docElement), nodeCutter, endNode);\n this.reSelection(docElement, save, exactNodes);\n range = nodeSelection.getRange(docElement);\n exactNodes = nodeSelection.getNodeCollection(range);\n var cloneParentNodes = exactNodes.slice();\n this.clearBlocks(docElement, cloneParentNodes, endNode, nodeCutter, nodeSelection);\n this.reSelection(docElement, save, exactNodes);\n }\n };\n ClearFormat.reSelection = function (docElement, save, exactNodes) {\n var selectionNodes = save.getInsertNodes(exactNodes);\n save.startContainer = save.getNodeArray(selectionNodes[0], true, docElement);\n save.startOffset = 0;\n save.endContainer = save.getNodeArray(selectionNodes[selectionNodes.length - 1], false, docElement);\n var endIndexNode = selectionNodes[selectionNodes.length - 1];\n save.endOffset = (endIndexNode.nodeType === 3) ? endIndexNode.textContent.length\n : endIndexNode.childNodes.length;\n save.restore();\n };\n ClearFormat.clearBlocks = function (docElement, nodes, endNode, nodeCutter, nodeSelection) {\n var parentNodes = [];\n for (var index = 0; index < nodes.length; index++) {\n if (this.BLOCK_TAGS.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1\n && parentNodes.indexOf(nodes[index]) === -1) {\n parentNodes.push(nodes[index]);\n }\n else if ((this.BLOCK_TAGS.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1)\n && parentNodes.indexOf(nodes[index].parentNode) === -1\n && endNode !== nodes[index].parentNode) {\n parentNodes.push(nodes[index].parentNode);\n }\n }\n parentNodes = this.spliceParent(parentNodes, nodes)[0];\n parentNodes = this.removeParent(parentNodes);\n this.unWrap(docElement, parentNodes, nodeCutter, nodeSelection);\n };\n ClearFormat.spliceParent = function (parentNodes, nodes) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n var len = parentNodes[index1].childNodes.length;\n for (var index2 = 0; index2 < len; index2++) {\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) > 0)\n && (parentNodes[index1].childNodes[index2].childNodes.length > 0)) {\n nodes = this.spliceParent([parentNodes[index1].childNodes[index2]], nodes)[1];\n }\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) <= -1) &&\n (parentNodes[index1].childNodes[index2].textContent.trim() !== '')) {\n for (var index3 = 0; index3 < len; index3++) {\n if (nodes.indexOf(parentNodes[index1].childNodes[index3]) > -1) {\n nodes.splice(nodes.indexOf(parentNodes[index1].childNodes[index3]), 1);\n }\n }\n index2 = parentNodes[index1].childNodes.length;\n var parentIndex = parentNodes.indexOf(parentNodes[index1].parentNode);\n var nodeIndex = nodes.indexOf(parentNodes[index1].parentNode);\n if (parentIndex > -1) {\n parentNodes.splice(parentIndex, 1);\n }\n if (nodeIndex > -1) {\n nodes.splice(nodeIndex, 1);\n }\n var elementIndex = nodes.indexOf(parentNodes[index1]);\n if (elementIndex > -1) {\n nodes.splice(elementIndex, 1);\n }\n parentNodes.splice(index1, 1);\n index1--;\n }\n }\n }\n return [parentNodes, nodes];\n };\n ClearFormat.removeChild = function (parentNodes, parentNode) {\n var count = parentNode.childNodes.length;\n if (count > 0) {\n for (var index = 0; index < count; index++) {\n if (parentNodes.indexOf(parentNode.childNodes[index]) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNode.childNodes[index]);\n parentNodes.splice(parentNodes.indexOf(parentNode.childNodes[index]), 1);\n }\n }\n }\n return parentNodes;\n };\n ClearFormat.removeParent = function (parentNodes) {\n for (var index = 0; index < parentNodes.length; index++) {\n if (parentNodes.indexOf(parentNodes[index].parentNode) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNodes[index]);\n parentNodes.splice(index, 1);\n index--;\n }\n }\n return parentNodes;\n };\n ClearFormat.unWrap = function (docElement, parentNodes, nodeCutter, nodeSelection) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n if (this.NONVALID_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) > -1\n && parentNodes[index1].parentNode\n && this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].parentNode.nodeName.toLowerCase()) > -1) {\n nodeSelection.setSelectionText(docElement, parentNodes[index1], parentNodes[index1], 0, parentNodes[index1].childNodes.length);\n InsertMethods.unwrap(nodeCutter.GetSpliceNode(nodeSelection.getRange(docElement), parentNodes[index1].parentNode));\n }\n if (parentNodes[index1].nodeName.toLocaleLowerCase() !== 'p') {\n if (this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) < 0\n && parentNodes[index1].parentNode.nodeName.toLocaleLowerCase() !== 'p'\n && !(parentNodes[index1].childNodes.length === 1\n && parentNodes[index1].childNodes[0].nodeName.toLocaleLowerCase() === 'p')) {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n }\n var childNodes = InsertMethods.unwrap(parentNodes[index1]);\n if (childNodes.length === 1\n && childNodes[0].parentNode.nodeName.toLocaleLowerCase() === 'p') {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n for (var index2 = 0; index2 < childNodes.length; index2++) {\n if (this.NONVALID_TAGS.indexOf(childNodes[index2].nodeName.toLowerCase()) > -1) {\n this.unWrap(docElement, [childNodes[index2]], nodeCutter, nodeSelection);\n }\n }\n }\n else {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n }\n };\n ClearFormat.clearInlines = function (textNodes, nodes, range, nodeCutter, endNode) {\n for (var index = 0; index < textNodes.length; index++) {\n if (textNodes[index].parentNode &&\n IsFormatted.inlineTags.indexOf(textNodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n nodeCutter.GetSpliceNode(range, textNodes[index].parentNode);\n this.removeInlineParent(textNodes[index].parentNode);\n }\n }\n };\n ClearFormat.removeInlineParent = function (textNodes) {\n var nodes = InsertMethods.unwrap(textNodes);\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].parentNode.childNodes.length === 1\n && IsFormatted.inlineTags.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index].parentNode);\n }\n else if (IsFormatted.inlineTags.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index]);\n }\n }\n };\n ClearFormat.BLOCK_TAGS = ['address', 'article', 'aside', 'blockquote',\n 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'li', 'main', 'nav',\n 'noscript', 'ol', 'p', 'pre', 'section', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul'];\n ClearFormat.NONVALID_PARENT_TAGS = ['thead', 'tbody', 'ul', 'ol', 'table', 'tfoot'];\n ClearFormat.NONVALID_TAGS = ['thead', 'tbody', 'figcaption', 'td', 'tr',\n 'th', 'tfoot', 'figcaption', 'li'];\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import * as CONSTANT from './../base/constant';\nimport { ClearFormat } from './clearformat';\nimport * as EVENTS from './../../common/constant';\n/**\n * Clear Format EXEC internal component\n * @hidden\n */\nvar ClearFormatExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function ClearFormatExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ClearFormatExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_TYPE, this.applyClear, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ClearFormatExec.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'clear-format':\n this.applyClear({ subCommand: 'ClearFormat', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n ClearFormatExec.prototype.applyClear = function (e) {\n if (e.subCommand === 'ClearFormat') {\n ClearFormat.clear(this.parent.currentDocument, this.parent.editableElement);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n }\n };\n return ClearFormatExec;\n}());\nexport { ClearFormatExec };\n","import { debounce, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/selection';\nimport * as EVENTS from './../../common/constant';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoManager = /** @class */ (function () {\n function UndoRedoManager(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.addEventListener();\n }\n UndoRedoManager.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n };\n UndoRedoManager.prototype.removeEventListener = function () {\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, this.keyUp);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n };\n UndoRedoManager.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n UndoRedoManager.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoManager.prototype.keyDown = function (e) {\n var event = e.event;\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoManager.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * RTE collection stored html format.\n * @method saveData\n * @return {void}\n */\n UndoRedoManager.prototype.saveData = function (e) {\n var range = new NodeSelection().getRange(this.parent.currentDocument);\n var save = new NodeSelection().save(range, this.parent.currentDocument);\n var htmlText = this.parent.editableElement.innerHTML;\n var changEle = { text: htmlText, range: save };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.collapsed === range.collapsed)\n && (this.undoRedoStack[this.undoRedoStack.length - 1].range.startOffset === save.range.startOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.endOffset === save.range.endOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.startContainer === save.range.startContainer) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].text.trim() === changEle.text.trim())) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.undoRedoStack.length > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n * @method undo\n * @return {void}\n */\n UndoRedoManager.prototype.undo = function (e) {\n if (this.steps > 0) {\n var range = this.undoRedoStack[this.steps - 1].range;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.editableElement.innerHTML = removedContent;\n this.parent.editableElement.focus();\n range.restore();\n this.steps--;\n if (e.callBack) {\n e.callBack({\n requestType: 'Undo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n /**\n * Redo the editable text.\n * @method redo\n * @return {void}\n */\n UndoRedoManager.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n var range = this.undoRedoStack[this.steps + 1].range;\n this.parent.editableElement.innerHTML = this.undoRedoStack[this.steps + 1].text;\n this.parent.editableElement.focus();\n range.restore();\n this.steps++;\n if (e.callBack) {\n e.callBack({\n requestType: 'Redo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n UndoRedoManager.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoManager;\n}());\nexport { UndoRedoManager };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { Lists } from './../plugin/lists';\nimport { NodeSelection } from './../../selection/index';\nimport { DOMNode } from './../plugin/dom-node';\nimport { Formats } from './../plugin/formats';\nimport { LinkCommand } from './../plugin/link';\nimport { Alignments } from './../plugin/alignments';\nimport { Indents } from './../plugin/indents';\nimport { ImageCommand } from './../plugin/image';\nimport { TableCommand } from './../plugin/table';\nimport { SelectionBasedExec } from './../plugin/selection-exec';\nimport { InsertHtmlExec } from './../plugin/inserthtml-exec';\nimport { ClearFormatExec } from './../plugin/clearformat-exec';\nimport { UndoRedoManager } from './../plugin/undo';\nimport * as EVENTS from './../../common/constant';\n/**\n * EditorManager internal component\n * @hidden\n */\nvar EditorManager = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n */\n function EditorManager(options) {\n this.currentDocument = options.document;\n this.editableElement = options.editableElement;\n this.nodeSelection = new NodeSelection();\n this.domNode = new DOMNode(this.editableElement, this.currentDocument);\n this.observer = new Observer(this);\n this.listObj = new Lists(this);\n this.formatObj = new Formats(this);\n this.alignmentObj = new Alignments(this);\n this.indentsObj = new Indents(this);\n this.linkObj = new LinkCommand(this);\n this.imgObj = new ImageCommand(this);\n this.selectionObj = new SelectionBasedExec(this);\n this.inserthtmlObj = new InsertHtmlExec(this);\n this.clearObj = new ClearFormatExec(this);\n this.tableObj = new TableCommand(this);\n this.undoRedoManager = new UndoRedoManager(this, options.options);\n this.wireEvents();\n }\n EditorManager.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n };\n EditorManager.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n EditorManager.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n EditorManager.prototype.execCommand = function (command, value, event, callBack, text, exeValue) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(EVENTS.LIST_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'alignments':\n this.observer.notify(CONSTANT.ALIGNMENT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'indents':\n this.observer.notify(CONSTANT.INDENT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'links':\n this.observer.notify(CONSTANT.LINK, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'images':\n this.observer.notify(CONSTANT.IMAGE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'table':\n switch (value.toString().toLocaleLowerCase()) {\n case 'createtable':\n this.observer.notify(CONSTANT.TABLE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'insertrowbefore':\n case 'insertrowafter':\n this.observer.notify(CONSTANT.INSERT_ROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'insertcolumnleft':\n case 'insertcolumnright':\n this.observer.notify(CONSTANT.INSERT_COLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deleterow':\n this.observer.notify(CONSTANT.DELETEROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deletecolumn':\n this.observer.notify(CONSTANT.DELETECOLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableremove':\n this.observer.notify(CONSTANT.REMOVETABLE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableheader':\n this.observer.notify(CONSTANT.TABLEHEADER, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'aligntop':\n case 'alignmiddle':\n case 'alignbottom':\n this.observer.notify(CONSTANT.TABLE_VERTICAL_ALIGN, { item: exeValue, event: event, callBack: callBack });\n break;\n }\n break;\n case 'font':\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.SELECTION_TYPE, { subCommand: value, event: event, callBack: callBack, value: text });\n break;\n case 'inserthtml':\n this.observer.notify(CONSTANT.INSERTHTML_TYPE, { callBack: callBack, value: text });\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack });\n break;\n }\n };\n return EditorManager;\n}());\nexport { EditorManager };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Formatter } from './formatter';\nimport { EditorManager } from './../../editor-manager/base/editor-manager';\nimport { extend } from '@syncfusion/ej2-base';\nimport { htmlKeyConfig } from './../../common/config';\n/**\n * HTML adapter\n * @hidden\n */\nvar HTMLFormatter = /** @class */ (function (_super) {\n __extends(HTMLFormatter, _super);\n function HTMLFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (_this.currentDocument && _this.element) {\n _this.updateFormatter(_this.element, _this.currentDocument, options.options);\n }\n return _this;\n }\n HTMLFormatter.prototype.initialize = function () {\n this.keyConfig = htmlKeyConfig;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n */\n HTMLFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement && doc) {\n this.editorManager = new EditorManager({\n document: doc,\n editableElement: editElement,\n options: options\n });\n }\n };\n return HTMLFormatter;\n}(Formatter));\nexport { HTMLFormatter };\n","import { IsFormatted } from './isformatted';\nimport * as CONSTANT from './../base/constant';\nimport { NodeSelection } from './../../selection/index';\n/**\n * Update Toolbar Status\n * @hidden\n */\nexport var statusCollection = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null,\n createlink: false\n};\nvar ToolbarStatus = /** @class */ (function () {\n function ToolbarStatus() {\n }\n ToolbarStatus.get = function (docElement, targetNode, formatNode, fontSize, fontName, documentNode) {\n var formatCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeSelection = new NodeSelection();\n var nodes = documentNode ? [documentNode] : nodeSelection.getNodeCollection(nodeSelection.getRange(docElement));\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3) {\n nodes.splice(index, 1);\n index--;\n }\n }\n for (var index = 0; index < nodes.length; index++) {\n formatCollection = this.getFormatParent(docElement, formatCollection, nodes[index], targetNode, formatNode, fontSize, fontName);\n if ((index === 0 && formatCollection.bold) || !formatCollection.bold) {\n nodeCollection.bold = formatCollection.bold;\n }\n if ((index === 0 && formatCollection.italic) || !formatCollection.italic) {\n nodeCollection.italic = formatCollection.italic;\n }\n if ((index === 0 && formatCollection.underline) || !formatCollection.underline) {\n nodeCollection.underline = formatCollection.underline;\n }\n if ((index === 0 && formatCollection.strikethrough) || !formatCollection.strikethrough) {\n nodeCollection.strikethrough = formatCollection.strikethrough;\n }\n if ((index === 0 && formatCollection.superscript) || !formatCollection.superscript) {\n nodeCollection.superscript = formatCollection.superscript;\n }\n if ((index === 0 && formatCollection.subscript) || !formatCollection.subscript) {\n nodeCollection.subscript = formatCollection.subscript;\n }\n if ((index === 0 && formatCollection.fontcolor) || !formatCollection.fontcolor) {\n nodeCollection.fontcolor = formatCollection.fontcolor;\n }\n if ((index === 0 && formatCollection.fontname) || !formatCollection.fontname) {\n nodeCollection.fontname = formatCollection.fontname;\n }\n if ((index === 0 && formatCollection.fontsize) || !formatCollection.fontsize) {\n nodeCollection.fontsize = formatCollection.fontsize;\n }\n if ((index === 0 && formatCollection.backgroundcolor) || !formatCollection.backgroundcolor) {\n nodeCollection.backgroundcolor = formatCollection.backgroundcolor;\n }\n if ((index === 0 && formatCollection.orderedlist) || !formatCollection.orderedlist) {\n nodeCollection.orderedlist = formatCollection.orderedlist;\n }\n if ((index === 0 && formatCollection.unorderedlist) || !formatCollection.unorderedlist) {\n nodeCollection.unorderedlist = formatCollection.unorderedlist;\n }\n if ((index === 0 && formatCollection.alignments) || !formatCollection.alignments) {\n nodeCollection.alignments = formatCollection.alignments;\n }\n if ((index === 0 && formatCollection.formats) || !formatCollection.formats) {\n nodeCollection.formats = formatCollection.formats;\n }\n if ((index === 0 && formatCollection.createlink) || !formatCollection.createlink) {\n nodeCollection.createlink = formatCollection.createlink;\n }\n formatCollection = JSON.parse(JSON.stringify(statusCollection));\n }\n return nodeCollection;\n };\n ToolbarStatus.getFormatParent = function (docElement, formatCollection, node, targetNode, formatNode, fontSize, fontName) {\n if (targetNode.contains(node)) {\n do {\n formatCollection = this.isFormattedNode(docElement, formatCollection, node, formatNode, fontSize, fontName);\n node = node.parentNode;\n } while (node && (node !== targetNode));\n }\n return formatCollection;\n };\n ToolbarStatus.isFormattedNode = function (docElement, formatCollection, node, formatNode, fontSize, fontName) {\n if (!formatCollection.bold) {\n formatCollection.bold = IsFormatted.isBold(node);\n }\n if (!formatCollection.italic) {\n formatCollection.italic = IsFormatted.isItalic(node);\n }\n if (!formatCollection.underline) {\n formatCollection.underline = IsFormatted.isUnderline(node);\n }\n if (!formatCollection.strikethrough) {\n formatCollection.strikethrough = IsFormatted.isStrikethrough(node);\n }\n if (!formatCollection.superscript) {\n formatCollection.superscript = IsFormatted.isSuperscript(node);\n }\n if (!formatCollection.subscript) {\n formatCollection.subscript = IsFormatted.isSubscript(node);\n }\n if (!formatCollection.fontcolor) {\n formatCollection.fontcolor = this.isFontColor(docElement, node);\n }\n if (!formatCollection.fontname) {\n formatCollection.fontname = this.isFontName(docElement, node, fontName);\n }\n if (!formatCollection.fontsize) {\n formatCollection.fontsize = this.isFontSize(node, fontSize);\n }\n if (!formatCollection.backgroundcolor) {\n formatCollection.backgroundcolor = this.isBackgroundColor(node);\n }\n if (!formatCollection.orderedlist) {\n formatCollection.orderedlist = this.isOrderedList(node);\n }\n if (!formatCollection.unorderedlist) {\n formatCollection.unorderedlist = this.isUnorderedList(node);\n }\n if (!formatCollection.alignments) {\n formatCollection.alignments = this.isAlignment(node);\n }\n if (!formatCollection.formats) {\n formatCollection.formats = this.isFormats(node, formatNode);\n }\n if (!formatCollection.createlink) {\n formatCollection.createlink = this.isLink(node);\n }\n return formatCollection;\n };\n ToolbarStatus.isFontColor = function (docElement, node) {\n var color = node.style && node.style.color;\n if ((color === null || color === undefined || color === '') && node.nodeType !== 3) {\n color = this.getComputedStyle(docElement, node, 'color');\n }\n if (color !== null && color !== '' && color !== undefined) {\n return color;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isLink = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'a') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (backColor !== null && backColor !== '' && backColor !== undefined) {\n return backColor;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontSize = function (node, fontSize) {\n var size = node.style && node.style.fontSize;\n if ((size !== null && size !== '' && size !== undefined)\n && (fontSize === null || fontSize === undefined || (fontSize.indexOf(size) > -1))) {\n return size;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontName = function (docElement, node, fontName) {\n var name = node.style && node.style.fontFamily;\n if ((name === null || name === undefined || name === '') && node.nodeType !== 3) {\n name = this.getComputedStyle(docElement, node, 'font-family');\n }\n var index = null;\n if ((name !== null && name !== '' && name !== undefined)\n && (fontName === null || fontName === undefined || (fontName.filter(function (value, pos) {\n if (value.replace(/\"/g, '').replace(/ /g, '') === name.replace(/\"/g, '').replace(/ /g, '')) {\n index = pos;\n }\n }) && (index !== null)))) {\n return (index !== null) ? fontName[index] : name.replace(/\"/g, '');\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isOrderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ol') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isUnorderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ul') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isAlignment = function (node) {\n var align = node.style && node.style.textAlign;\n if (align === 'left') {\n return 'justifyleft';\n }\n else if (align === 'center') {\n return 'justifycenter';\n }\n else if (align === 'right') {\n return 'justifyright';\n }\n else if (align === 'justify') {\n return 'justifyfull';\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFormats = function (node, formatNode) {\n if (((formatNode === undefined || formatNode === null)\n && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) > -1)\n || (formatNode !== null && formatNode !== undefined\n && formatNode.indexOf(node.nodeName.toLocaleLowerCase()) > -1)) {\n return node.nodeName.toLocaleLowerCase();\n }\n else {\n return null;\n }\n };\n ToolbarStatus.getComputedStyle = function (docElement, node, prop) {\n return docElement.defaultView.getComputedStyle(node, null).getPropertyValue(prop);\n };\n return ToolbarStatus;\n}());\nexport { ToolbarStatus };\n","import * as events from '../base/constant';\nimport { ToolbarStatus } from '../../editor-manager/plugin/toolbar-status';\n/**\n * HtmlToolbarStatus module for refresh the toolbar status\n */\nvar HtmlToolbarStatus = /** @class */ (function () {\n function HtmlToolbarStatus(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n HtmlToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n HtmlToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n };\n HtmlToolbarStatus.prototype.onRefreshHandler = function (args) {\n var fontsize = [];\n var fontName = [];\n var formats = [];\n this.parent.fontSize.items.forEach(function (item) { fontsize.push(item.value); });\n this.parent.fontFamily.items.forEach(function (item) { fontName.push(item.value); });\n this.parent.format.types.forEach(function (item) {\n formats.push(item.value.toLocaleLowerCase());\n });\n this.toolbarStatus = ToolbarStatus.get(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel(), formats, fontsize, fontName, args.documentNode);\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n return HtmlToolbarStatus;\n}());\nexport { HtmlToolbarStatus };\n","/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function ContentRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n /**\n * The function is used to render RichTextEditor content div\n */\n ContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = this.parent.createElement('div', { className: 'e-rte-content', id: this.parent.getID() + 'rte-view' });\n var rteContent = (rteObj.value !== null && rteObj.value !== '') ? rteObj.value : '


    ';\n this.editableElement = this.parent.createElement('div', {\n className: 'e-content',\n id: this.parent.getID() + '_rte-edit-view',\n attrs: {\n 'contenteditable': 'true'\n },\n innerHTML: rteContent\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n * @return {Element}\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n */\n ContentRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n ContentRender.prototype.getText = function () {\n return this.getEditPanel().textContent;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @return {Document}\n */\n ContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ContentRender } from '../renderer/content-renderer';\n/* tslint:disable */\nvar IFRAMEHEADER = \"\\n \\n \\n \\n \\n \\n \";\n/* tslint:enable */\n/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar IframeContentRender = /** @class */ (function (_super) {\n __extends(IframeContentRender, _super);\n function IframeContentRender() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * The function is used to render RichTextEditor iframe\n */\n IframeContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var rteContent = (rteObj.value !== null && rteObj.value !== '') ? rteObj.value : '


    ';\n var iFrameBodyContent = '' +\n rteContent + '';\n var iFrameContent = IFRAMEHEADER + iFrameBodyContent;\n var iframe = this.parent.createElement('iframe', {\n innerHTML: iFrameContent,\n id: this.parent.getID() + '_rte-view',\n className: 'e-rte-content',\n styles: 'display:block;'\n });\n this.setPanel(iframe);\n rteObj.element.appendChild(iframe);\n iframe.contentDocument.body.id = this.parent.getID() + '_rte-edit-view';\n iframe.contentDocument.open();\n iframe.contentDocument.write(iFrameContent);\n iframe.contentDocument.close();\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n */\n IframeContentRender.prototype.getEditPanel = function () {\n return this.contentPanel.contentDocument.body;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n */\n IframeContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return IframeContentRender;\n}(ContentRender));\nexport { IframeContentRender };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, closest } from '@syncfusion/ej2-base';\nimport { HTMLFormatter } from '../formatter/html-formatter';\nimport { RenderType } from '../base/enum';\nimport { HtmlToolbarStatus } from './html-toolbar-status';\nimport { IframeContentRender } from '../renderer/iframe-content-renderer';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { ColorPickerInput } from './color-picker';\nimport { NodeSelection } from '../../selection/selection';\nimport { InsertHtml } from '../../editor-manager/plugin/inserthtml';\n/**\n * `HtmlEditor` module is used to HTML editor\n */\nvar HtmlEditor = /** @class */ (function () {\n function HtmlEditor(parent, serviceLocator) {\n this.rangeCollection = [];\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n */\n HtmlEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n HtmlEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.nodeSelectionObj = new NodeSelection();\n this.colorPickerModule = new ColorPickerInput(this.parent, this.locator);\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.htmlToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.renderColorPicker, this.renderColorPicker, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.selectRange, this.selectRange, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n };\n HtmlEditor.prototype.onSelectionSave = function () {\n var currentDocument = this.contentRenderer.getDocument();\n var range = this.nodeSelectionObj.getRange(currentDocument);\n this.saveSelection = this.nodeSelectionObj.save(range, currentDocument);\n };\n HtmlEditor.prototype.onSelectionRestore = function (e) {\n this.parent.isBlur = false;\n this.contentRenderer.getEditPanel().focus();\n if (isNullOrUndefined(e.items) || (e.items && e.items[0].command !== 'Table')) {\n this.saveSelection.restore();\n }\n };\n HtmlEditor.prototype.onKeyDown = function (e) {\n if (e.args.keyCode === 9 && this.parent.enableTabKey) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var parentNode = this.nodeSelectionObj.getParentNodeCollection(range);\n if (!((parentNode[0].nodeName === 'LI' || parentNode[0].nodeName === 'BR' || closest(parentNode[0], 'li')) &&\n range.startOffset === 0)) {\n e.args.preventDefault();\n if (!e.args.shiftKey) {\n InsertHtml.Insert(this.contentRenderer.getDocument(), '    ');\n this.rangeCollection.push(this.nodeSelectionObj.getRange(this.contentRenderer.getDocument()));\n }\n else if (this.rangeCollection.length > 0 &&\n this.rangeCollection[this.rangeCollection.length - 1].startContainer.textContent.length === 4) {\n var textCont = this.rangeCollection[this.rangeCollection.length - 1].startContainer;\n this.nodeSelectionObj.setSelectionText(this.contentRenderer.getDocument(), textCont, textCont, 0, textCont.textContent.length);\n InsertHtml.Insert(this.contentRenderer.getDocument(), document.createTextNode(''));\n this.rangeCollection.pop();\n }\n }\n }\n if (e.args.action === 'space' ||\n e.args.action === 'enter') {\n this.spaceLink(e.args);\n }\n };\n HtmlEditor.prototype.spaceLink = function (e) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var selectNodeEle = this.nodeSelectionObj.getParentNodeCollection(range);\n var text = range.startContainer.textContent;\n var splitText = text.split(' ');\n var urlText = splitText[splitText.length - 1];\n var regex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (selectNodeEle[0].nodeName !== 'A' && urlText.match(regex)) {\n var selection = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n var selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var value = {\n url: urlText,\n selection: selection, selectParent: selectParent,\n text: '',\n title: '',\n target: ''\n };\n this.parent.formatter.process(this.parent, {\n item: {\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n }\n }, e, value);\n }\n };\n HtmlEditor.prototype.onToolbarClick = function (args) {\n var save;\n var selectNodeEle;\n var selectParentEle;\n var item = args.item;\n var closestElement = closest(args.originalEvent.target, '.e-rte-quick-popup');\n if (closestElement && !closestElement.classList.contains('e-rte-inline-popup')) {\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview')) {\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n if (item.command === 'Images') {\n this.parent.notify(events.imageToolbarAction, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Links') {\n this.parent.notify(events.linkToolbarAction, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Table') {\n this.parent.notify(events.tableToolbarAction, {\n member: 'table', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n }\n else {\n var linkDialog = this.parent.element.querySelector('#' + this.parent.getID() + '_rtelink');\n var imageDialog = this.parent.element.querySelector('#' + this.parent.getID() + '_image');\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview')) {\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n if (isNullOrUndefined(linkDialog) && isNullOrUndefined(imageDialog)) {\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n }\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'Print':\n this.parent.print();\n break;\n case 'Image':\n this.parent.notify(events.insertImage, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'CreateTable':\n this.parent.notify(events.createTable, {\n member: 'table', args: args, selection: save\n });\n break;\n case 'SourceCode':\n this.parent.notify(events.sourceCode, { member: 'viewSource', args: args });\n break;\n case 'Preview':\n this.parent.notify(events.updateSource, { member: 'updateSource', args: args });\n break;\n case 'FontColor':\n case 'BackgroundColor':\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n }\n };\n HtmlEditor.prototype.renderColorPicker = function (args) {\n this.colorPickerModule.renderColorPickerInput(args);\n };\n HtmlEditor.prototype.instantiateRenderer = function () {\n if (this.parent.iframeSettings.enable) {\n this.renderFactory.addRenderer(RenderType.Content, new IframeContentRender(this.parent, this.locator));\n }\n else {\n this.renderFactory.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n }\n };\n HtmlEditor.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.htmlToolbarClick, this.onToolbarClick);\n this.parent.off(events.renderColorPicker, this.renderColorPicker);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\n this.parent.off(events.selectRange, this.selectRange);\n this.parent.off(events.getSelectedHtml, this.getSelectedHtml);\n this.parent.off(events.selectionSave, this.onSelectionSave);\n this.parent.off(events.selectionRestore, this.onSelectionRestore);\n };\n HtmlEditor.prototype.render = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n if (isNullOrUndefined(this.parent.formatter)) {\n this.parent.formatter = new HTMLFormatter({\n currentDocument: this.contentRenderer.getDocument(),\n element: editElement,\n options: option\n });\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new HtmlToolbarStatus(this.parent);\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n HtmlEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n };\n /**\n * For internal use only - Get the module name.\n */\n HtmlEditor.prototype.getModuleName = function () {\n return 'htmlEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n HtmlEditor.prototype.selectAll = function () {\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel(), this.parent.contentModule.getEditPanel(), 0, this.parent.contentModule.getEditPanel().childNodes.length);\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n HtmlEditor.prototype.selectRange = function (e) {\n this.parent.formatter.editorManager.nodeSelection.setRange(this.parent.contentModule.getDocument(), e.range);\n };\n /**\n * For get a selected text in RTE\n * @private\n */\n HtmlEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument()).toString());\n };\n return HtmlEditor;\n}());\nexport { HtmlEditor };\n","import { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\n/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function Render(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize RichTextEditor header, content and footer rendering\n */\n Render.prototype.render = function () {\n var rteObj = this.parent;\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.contentRenderer.renderPanel();\n };\n /**\n * Refresh the entire RichTextEditor.\n * @return {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n };\n /**\n * Destroy the entire RichTextEditor.\n * @return {void}\n */\n Render.prototype.destroy = function () {\n this.removeEventListener();\n };\n Render.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.keyUp, this.keyUp, this);\n };\n Render.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.modelChanged, this.refresh);\n this.parent.off(events.keyUp, this.keyUp);\n };\n Render.prototype.keyUp = function (e) {\n if (this.parent.editorMode === 'HTML') {\n switch (e.args.which) {\n case 46:\n case 8:\n var childNodes = this.parent.contentModule.getEditPanel().childNodes;\n if ((childNodes.length === 0) ||\n (childNodes.length === 1 && ((childNodes[0].tagName === 'BR') ||\n (childNodes[0].tagName === 'P' &&\n (childNodes[0].childNodes.length === 0 || childNodes[0].textContent === ''))))) {\n var node = this.parent.contentModule.getEditPanel();\n node.innerHTML = '


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


    ' ||\n this.contentModule.getEditPanel().innerHTML.length === 12) ||\n (this.contentModule.getEditPanel().childNodes.length === 1 &&\n this.contentModule.getEditPanel().childNodes[0].tagName === 'P' &&\n this.contentModule.getEditPanel().innerHTML.length === 8) ? null : this.parent.value;\n this.contentModule.getEditPanel().style.display = 'none';\n this.previewElement.style.display = 'block';\n }\n this.parent.isBlur = false;\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n this.parent.enableToolbarItem('SourceCode');\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n removeClass(tbItems, [CLS_ACTIVE]);\n this.parent.setContentHeight('sourceCode');\n this.wireEvent(this.previewElement);\n this.unWireBaseKeyDown();\n this.previewElement.focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder)) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder');\n placeHolderWrapper.style.display = 'none';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n this.parent.invokeChangeEvent();\n };\n ViewSource.prototype.updateSourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'Preview', targetItem: 'Preview', args: args });\n var editHTML = this.getPanel();\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'Preview', updateItem: 'SourceCode',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (this.parent.iframeSettings.enable) {\n editHTML.parentElement.style.display = 'none';\n this.contentModule.getPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = editHTML.value;\n }\n else {\n editHTML.style.display = 'none';\n this.contentModule.getEditPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = editHTML.value;\n }\n this.parent.isBlur = false;\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n this.parent.setContentHeight();\n this.unWireEvent();\n this.wireBaseKeyDown();\n this.contentModule.getEditPanel().focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder) && this.contentModule.getEditPanel().innerText.length === 0) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder');\n placeHolderWrapper.style.display = 'block';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Preview', targetItem: 'Preview', args: args });\n this.parent.formatter.enableUndo(this.parent);\n this.parent.invokeChangeEvent();\n };\n ViewSource.prototype.getPanel = function () {\n return this.parent.element.querySelector('.e-rte-srctextarea');\n };\n ViewSource.prototype.getViewPanel = function () {\n return (this.parent.iframeSettings.enable && this.getPanel()) ? this.getPanel().parentElement : this.getPanel();\n };\n /**\n * Destroy the entire RichTextEditor.\n * @return {void}\n */\n ViewSource.prototype.destroy = function () {\n this.removeEventListener();\n };\n return ViewSource;\n}());\nexport { ViewSource };\n","import { detach, closest, Browser } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, EventHandler, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Dialog, Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport * as classes from '../base/classes';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Table` module is used to handle table actions.\n */\nvar Table = /** @class */ (function () {\n function Table(parent, serviceLocator) {\n this.pageX = null;\n this.pageY = null;\n this.moveEle = null;\n this.parent = parent;\n this.rteID = parent.element.id;\n this.l10n = serviceLocator.getService('rteLocale');\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n Table.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.createTable, (Browser.isDevice || this.parent.inlineMode.enable) ? this.insertTableDialog : this.renderDlgContent, this);\n this.parent.on(events.initialEnd, this.afterRender, this);\n this.parent.on(events.docClick, this.docClick, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.tableToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.dropDownSelect, this.dropdownSelect, this);\n this.parent.on(events.keyDown, this.keyDown, this);\n };\n Table.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.createTable, (Browser.isDevice || this.parent.inlineMode.enable) ?\n this.insertTableDialog : this.renderDlgContent);\n this.parent.off(events.initialEnd, this.afterRender);\n this.parent.off(events.docClick, this.docClick);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.on(events.tableToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.dropDownSelect, this.dropdownSelect, this);\n this.parent.off(events.mouseDown, this.cellSelect);\n this.parent.off(events.tableColorPickerChanged, this.setBGColor);\n this.parent.off(events.keyDown, this.keyDown);\n };\n Table.prototype.afterRender = function () {\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n this.parent.on(events.tableColorPickerChanged, this.setBGColor, this);\n if (this.parent.tableSettings.resize) {\n EventHandler.add(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart, this);\n }\n if (!Browser.isDevice && this.parent.tableSettings.resize) {\n EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);\n }\n };\n Table.prototype.dropdownSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Table') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var args = {\n args: e,\n selection: this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument()),\n selectParent: this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range)\n };\n switch (item.subCommand) {\n case 'InsertRowBefore':\n case 'InsertRowAfter':\n this.addRow(args.selection, e);\n break;\n case 'InsertColumnLeft':\n case 'InsertColumnRight':\n this.addColumn(args.selection, e);\n break;\n case 'DeleteColumn':\n case 'DeleteRow':\n this.removeRowColumn(args.selection, e);\n break;\n case 'AlignTop':\n case 'AlignMiddle':\n case 'AlignBottom':\n this.verticalAlign(args, e);\n break;\n case 'Dashed':\n case 'Alternate':\n this.tableStyles(args, item.subCommand);\n break;\n }\n };\n Table.prototype.keyDown = function (e) {\n var event = e.args;\n var proxy = this;\n if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection) && this.contentModule) {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n var ele = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range)[0];\n ele = (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') ? ele.parentElement : ele;\n if ((event.keyCode === 8 || event.keyCode === 46)) {\n if (ele && ele.tagName === 'TBODY') {\n event.preventDefault();\n proxy.removeTable(selection, event, true);\n }\n else if (ele && ele.querySelectorAll('table').length > 0) {\n this.removeResizeEle();\n }\n }\n ele = (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') ? closest(ele, 'td') : ele;\n if (ele && (ele.tagName === 'TD' || ele.tagName === 'TH')) {\n switch (event.keyCode) {\n case 9:\n case 37:\n case 39:\n proxy.tabSelection(event, selection, ele);\n break;\n case 40:\n case 38:\n proxy.tableArrowNavigation(event, selection, ele);\n break;\n }\n }\n }\n };\n Table.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'TableHeader':\n this.tableHeader(args.selection, args.args);\n break;\n case 'TableRemove':\n this.removeTable(args.selection, args.args);\n break;\n case 'TableEditProperties':\n this.editTable(args);\n break;\n }\n };\n Table.prototype.verticalAlign = function (args, e) {\n var tdEle = (args.selection.range.startContainer.nodeName === 'TD' ||\n args.selection.range.startContainer.nodeName === 'TH') ?\n args.selection.range.startContainer : args.selection.range.startContainer.parentElement;\n if (tdEle.nodeName !== 'TD' && tdEle.nodeName !== 'TH') {\n return;\n }\n this.parent.formatter.process(this.parent, e, e, { tableCell: tdEle, subCommand: e.item.subCommand });\n };\n Table.prototype.tableStyles = function (args, command) {\n var table = closest(args.selectParent[0], 'table');\n if (command === 'Dashed') {\n (this.parent.element.classList.contains(classes.CLS_TB_DASH_BOR)) ?\n this.parent.element.classList.remove(classes.CLS_TB_DASH_BOR) : this.parent.element.classList.add(classes.CLS_TB_DASH_BOR);\n (table.classList.contains(classes.CLS_TB_DASH_BOR)) ? table.classList.remove(classes.CLS_TB_DASH_BOR) :\n table.classList.add(classes.CLS_TB_DASH_BOR);\n }\n if (command === 'Alternate') {\n (this.parent.element.classList.contains(classes.CLS_TB_ALT_BOR)) ?\n this.parent.element.classList.remove(classes.CLS_TB_DASH_BOR) : this.parent.element.classList.add(classes.CLS_TB_ALT_BOR);\n (table.classList.contains(classes.CLS_TB_ALT_BOR)) ? table.classList.remove(classes.CLS_TB_ALT_BOR) :\n table.classList.add(classes.CLS_TB_ALT_BOR);\n }\n this.parent.formatter.saveData();\n };\n Table.prototype.tabSelection = function (event, selection, ele) {\n if ((event.keyCode === 37 || event.keyCode === 39) && selection.range.startContainer.nodeType === 3) {\n return;\n }\n event.preventDefault();\n ele.classList.remove(classes.CLS_TABLE_SEL);\n if (!event.shiftKey && event.keyCode !== 37) {\n var nextElement = (!isNullOrUndefined(ele.nextSibling)) ? ele.nextSibling :\n (!isNullOrUndefined(closest(ele, 'tr').nextSibling) ? closest(ele, 'tr').nextSibling.childNodes[0] :\n (!isNullOrUndefined(closest(ele, 'table').nextSibling)) ?\n (closest(ele, 'table').nextSibling.nodeName.toLowerCase() === 'td') ?\n closest(ele, 'table').nextSibling : ele : ele);\n if (event.keyCode === 39 && ele === nextElement) {\n nextElement = closest(ele, 'table').nextSibling;\n }\n if (nextElement) {\n (nextElement.textContent.trim() !== '' && closest(nextElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), nextElement) :\n selection.setSelectionText(this.contentModule.getDocument(), nextElement, nextElement, 0, 0);\n }\n if (ele === nextElement && event.keyCode !== 39 && nextElement) {\n this.addRow(selection, event, true);\n nextElement = nextElement.parentElement.nextSibling.firstChild;\n (nextElement.textContent.trim() !== '' && closest(nextElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), nextElement) :\n selection.setSelectionText(this.contentModule.getDocument(), nextElement, nextElement, 0, 0);\n }\n }\n else {\n var prevElement = (!isNullOrUndefined(ele.previousSibling)) ? ele.previousSibling :\n (!isNullOrUndefined(closest(ele, 'tr').previousSibling) ?\n closest(ele, 'tr').previousSibling.childNodes[closest(ele, 'tr').previousSibling.childNodes.length - 1] :\n (!isNullOrUndefined(closest(ele, 'table').previousSibling)) ?\n (closest(ele, 'table').previousSibling.nodeName.toLowerCase() === 'td') ? closest(ele, 'table').previousSibling :\n ele : ele);\n if (event.keyCode === 37 && ele === prevElement) {\n prevElement = closest(ele, 'table').previousSibling;\n }\n if (prevElement) {\n (prevElement.textContent.trim() !== '' && closest(prevElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), prevElement) :\n selection.setSelectionText(this.contentModule.getDocument(), prevElement, prevElement, 0, 0);\n }\n }\n };\n Table.prototype.tableArrowNavigation = function (event, selection, ele) {\n var selText = selection.range.startContainer;\n if ((event.keyCode === 40 && selText.nodeType === 3 && (selText.nextSibling && selText.nextSibling.nodeName === 'BR' ||\n selText.parentNode && selText.parentNode.nodeName !== 'TD')) ||\n (event.keyCode === 38 && selText.nodeType === 3 && (selText.previousSibling && selText.previousSibling.nodeName === 'BR' ||\n selText.parentNode && selText.parentNode.nodeName !== 'TD'))) {\n return;\n }\n event.preventDefault();\n ele.classList.remove(classes.CLS_TABLE_SEL);\n if (event.keyCode === 40) {\n ele = (!isNullOrUndefined(closest(ele, 'tr').nextSibling)) ?\n closest(ele, 'tr').nextSibling.children[ele.cellIndex] :\n (!isNullOrUndefined(closest(ele, 'table').nextSibling)) ? closest(ele, 'table').nextSibling :\n ele;\n }\n else {\n ele = (!isNullOrUndefined(closest(ele, 'tr').previousSibling)) ?\n closest(ele, 'tr').previousSibling.children[ele.cellIndex] :\n (!isNullOrUndefined(closest(ele, 'table').previousSibling)) ? closest(ele, 'table').previousSibling :\n ele;\n }\n if (ele) {\n selection.setSelectionText(this.contentModule.getDocument(), ele, ele, 0, 0);\n }\n };\n Table.prototype.setBGColor = function (args) {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n var selectedCell = selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? closest(selectedCell.parentNode, 'td,th') : closest(selectedCell, 'td, th');\n if (selectedCell && (selectedCell.nodeName === 'TD' || selectedCell.nodeName === 'TH')) {\n var items = closest(selectedCell, 'table').querySelectorAll('.' + classes.CLS_TABLE_SEL);\n for (var i = 0; i < items.length; i++) {\n items[i].style.backgroundColor = args.item.value;\n }\n this.parent.formatter.saveData();\n }\n };\n Table.prototype.hideTableQuickToolbar = function () {\n if (this.quickToolObj && this.quickToolObj.tableQTBar && document.body.contains(this.quickToolObj.tableQTBar.element)) {\n this.quickToolObj.tableQTBar.hidePopup();\n }\n };\n Table.prototype.tableHeader = function (selection, e) {\n this.parent.formatter.process(this.parent, e, e.originalEvent, { selection: selection, subCommand: e.item.subCommand });\n };\n Table.prototype.editAreaClickHandler = function (e) {\n var args = e.args;\n if (args.which === 2 || args.which === 3) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.tableQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.tableQTBar.element.classList.contains('e-rte-pop');\n if (isPopupOpen) {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n if (target && target.nodeName !== 'A' && target.nodeName !== 'IMG' && (target.nodeName === 'TD' || target.nodeName === 'TH' ||\n target.nodeName === 'TABLE' || closest(target, 'table')) && !(range.startContainer.nodeType === 3 && !range.collapsed)) {\n var range_1 = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.save(range_1, this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;\n this.quickToolObj.tableQTBar.showPopup(args.pageX, pageY, target);\n this.parent.formatter.editorManager.nodeSelection.restore();\n }\n else {\n this.hideTableQuickToolbar();\n }\n }\n };\n Table.prototype.tableCellSelect = function (e) {\n var target = e.target;\n var row = Array.prototype.slice.call(target.parentElement.parentElement.children).indexOf(target.parentElement);\n var col = Array.prototype.slice.call(target.parentElement.children).indexOf(target);\n var list = this.dlgDiv.querySelectorAll('.e-rte-tablecell');\n Array.prototype.forEach.call(list, function (item) {\n var parentIndex = Array.prototype.slice.call(item.parentElement.parentElement.children).indexOf(item.parentElement);\n var cellIndex = Array.prototype.slice.call(item.parentElement.children).indexOf(item);\n removeClass([item], 'e-active');\n if (parentIndex <= row && cellIndex <= col) {\n addClass([item], 'e-active');\n }\n });\n this.tblHeader.innerHTML = (col + 1) + 'x' + (row + 1);\n };\n Table.prototype.tableCellLeave = function (e) {\n removeClass(this.dlgDiv.querySelectorAll('.e-rte-tablecell'), 'e-active');\n addClass([this.dlgDiv.querySelector('.e-rte-tablecell')], 'e-active');\n this.tblHeader.innerHTML = 1 + 'x' + 1;\n };\n Table.prototype.tableCellClick = function (e) {\n var target = e.target;\n var row = Array.prototype.slice.call(target.parentElement.parentElement.children).indexOf(target.parentElement) + 1;\n var col = Array.prototype.slice.call(target.parentElement.children).indexOf(target) + 1;\n this.self.tableInsert(row, col, e, this);\n };\n Table.prototype.tableInsert = function (row, col, e, selectionObj) {\n var proxy = (selectionObj.self) ? selectionObj.self : this;\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(selectionObj.selection.range.startContainer.parentNode, '#' + proxy.contentModule.getPanel().id))) {\n proxy.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());\n selectionObj.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());\n }\n var value = {\n row: row, columns: col, width: {\n minWidth: proxy.parent.tableSettings.minWidth,\n maxWidth: proxy.parent.tableSettings.maxWidth,\n width: proxy.parent.tableSettings.width,\n },\n selection: selectionObj.selection\n };\n if (proxy.popupObj) {\n proxy.popupObj.hide();\n }\n if (proxy.editdlgObj) {\n proxy.editdlgObj.hide();\n }\n proxy.parent.formatter.process(proxy.parent, selectionObj.args, selectionObj.args.originalEvent, value);\n proxy.contentModule.getEditPanel().focus();\n proxy.parent.on(events.mouseDown, proxy.cellSelect, proxy);\n };\n Table.prototype.cellSelect = function (e) {\n var target = e.args.target;\n target = (target.nodeName !== 'TD') ? closest(target, 'td,th') : target;\n removeClass(this.contentModule.getEditPanel().querySelectorAll('table td, table th'), classes.CLS_TABLE_SEL);\n if (target && (target.tagName === 'TD' || target.tagName === 'TH')) {\n target.removeAttribute('class');\n addClass([target], classes.CLS_TABLE_SEL);\n this.curTable = (this.curTable) ? this.curTable : closest(target, 'table');\n this.removeResizeEle();\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n }\n }\n };\n Table.prototype.resizeHelper = function (e) {\n var target = e.target || e.targetTouches[0].target;\n if (target.nodeName === 'TABLE' || target.nodeName === 'TD' || target.nodeName === 'TH') {\n this.curTable = (target.nodeName === 'TD' || target.nodeName === 'TH') ?\n target.closest('table') : target;\n this.removeResizeEle();\n this.tableResizeEleCreation(this.curTable, e);\n }\n };\n Table.prototype.tableResizeEleCreation = function (table, e) {\n this.parent.preventDefaultResize(e);\n var columns = Array.prototype.slice.call(table.rows[0].cells, 1);\n var rows = [];\n for (var i = 0; i < table.rows.length; i++) {\n rows.push(Array.prototype.slice.call(table.rows[i].cells, 0, 1)[0]);\n }\n var height = parseInt(getComputedStyle(table).height, 10);\n var width = parseInt(getComputedStyle(table).width, 10);\n var pos = this.calcPos(table);\n for (var i = 0; columns.length > i; i++) {\n var colReEle = this.parent.createElement('span', {\n className: classes.CLS_TB_COL_RES, attrs: {\n 'data-col': (i + 1).toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n colReEle.style.cssText = 'height: ' + height + 'px; width: 4px; top: ' + pos.top +\n 'px; left:' + (pos.left + this.calcPos(columns[i]).left) + 'px;';\n this.contentModule.getEditPanel().appendChild(colReEle);\n }\n for (var i = 0; rows.length > i; i++) {\n var rowReEle = this.parent.createElement('span', {\n className: classes.CLS_TB_ROW_RES, attrs: {\n 'data-row': (i).toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n rowReEle.style.cssText = 'width: ' + width + 'px; height: 4px; top: ' +\n (this.calcPos(rows[i]).top + pos.top + rows[i].offsetHeight - 2) +\n 'px; left:' + (this.calcPos(rows[i]).left + pos.left) + 'px;';\n this.contentModule.getEditPanel().appendChild(rowReEle);\n }\n var tableReBox = this.parent.createElement('span', {\n className: classes.CLS_TB_BOX_RES, attrs: {\n 'data-col': columns.length.toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n tableReBox.style.cssText = 'top: ' + (pos.top + height - 4) +\n 'px; left:' + (pos.left + width - 4) + 'px;';\n if (Browser.isDevice) {\n tableReBox.classList.add('e-rmob');\n }\n this.contentModule.getEditPanel().appendChild(tableReBox);\n };\n Table.prototype.removeResizeEle = function () {\n var item = this.contentModule.getEditPanel().querySelectorAll('.e-column-resize, .e-row-resize, .e-table-box');\n if (item.length > 0) {\n for (var i = 0; i < item.length; i++) {\n detach(item[i]);\n }\n }\n };\n Table.prototype.calcPos = function (elem) {\n var parentOffset = {\n top: 0,\n left: 0\n };\n var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = elem.offsetParent || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent.nodeName === 'TD' && elem.nodeName === 'TABLE') {\n offsetParent = closest(offsetParent, '.e-control');\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Table.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Table.prototype.getPointY = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageY;\n }\n else {\n return e.pageY;\n }\n };\n Table.prototype.resizeStart = function (e) {\n if (Browser.isDevice) {\n this.resizeHelper(e);\n }\n var target = e.target;\n if (target.classList.contains(classes.CLS_TB_COL_RES) ||\n target.classList.contains(classes.CLS_TB_ROW_RES) ||\n target.classList.contains(classes.CLS_TB_BOX_RES)) {\n e.preventDefault();\n this.parent.preventDefaultResize(e);\n removeClass(this.curTable.querySelectorAll('td,th'), classes.CLS_TABLE_SEL);\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.pageX = this.getPointX(e);\n this.pageY = this.getPointY(e);\n this.resizeBtnInit();\n this.hideTableQuickToolbar();\n if (target.classList.contains(classes.CLS_TB_COL_RES)) {\n this.resizeBtnStat.column = true;\n this.columnEle = this.curTable.rows[0].cells[parseInt(target.getAttribute('data-col'), 10)];\n this.colIndex = this.columnEle.cellIndex;\n this.moveEle = e.target;\n this.appendHelper();\n }\n if (target.classList.contains(classes.CLS_TB_ROW_RES)) {\n this.rowEle = this.curTable.rows[parseInt(target.getAttribute('data-row'), 10)];\n this.resizeBtnStat.row = true;\n this.appendHelper();\n }\n if (target.classList.contains(classes.CLS_TB_BOX_RES)) {\n this.resizeBtnStat.tableBox = true;\n }\n if (Browser.isDevice && this.helper && !this.helper.classList.contains('e-reicon')) {\n this.helper.classList.add('e-reicon');\n EventHandler.add(document, Browser.touchStartEvent, this.removeHelper, this);\n EventHandler.add(this.helper, Browser.touchStartEvent, this.resizeStart, this);\n }\n else {\n var args = { event: e, requestType: 'Table' };\n this.parent.trigger(events.resizeStart, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n }\n EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);\n EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);\n }\n };\n Table.prototype.removeHelper = function (e) {\n var cls = e.target.classList;\n if (!(cls.contains('e-reicon')) && this.helper) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n }\n this.pageX = null;\n this.helper = null;\n }\n };\n Table.prototype.appendHelper = function () {\n this.helper = this.parent.createElement('div', {\n className: 'e-table-rhelper'\n });\n if (Browser.isDevice) {\n this.helper.classList.add('e-reicon');\n }\n this.contentModule.getEditPanel().appendChild(this.helper);\n this.setHelperHeight();\n };\n Table.prototype.setHelperHeight = function () {\n var pos = this.calcPos(this.curTable);\n if (this.resizeBtnStat.column) {\n this.helper.classList.add('e-column-helper');\n this.helper.style.cssText = 'height: ' + getComputedStyle(this.curTable).height + '; top: ' +\n pos.top + 'px; left:' + (pos.left + this.calcPos(this.columnEle).left - 1) + 'px;';\n }\n else {\n this.helper.classList.add('e-row-helper');\n this.helper.style.cssText = 'width: ' + getComputedStyle(this.curTable).width + '; top: ' +\n (this.calcPos(this.rowEle).top + pos.top + this.rowEle.offsetHeight) +\n 'px; left:' + (this.calcPos(this.rowEle).left + pos.left) + 'px;';\n }\n };\n Table.prototype.updateHelper = function () {\n var pos = this.calcPos(this.curTable);\n if (this.resizeBtnStat.column) {\n var left = pos.left + this.calcPos(this.columnEle).left - 1;\n this.helper.style.left = left + 'px';\n }\n else {\n var top_1 = this.calcPos(this.rowEle).top + pos.top + this.rowEle.offsetHeight;\n this.helper.style.top = top_1 + 'px';\n }\n };\n Table.prototype.resizing = function (e) {\n var pageX = this.getPointX(e);\n var pageY = this.getPointY(e);\n var mouseX = (this.parent.enableRtl) ? -(pageX - this.pageX) : (pageX - this.pageX);\n var mouseY = (this.parent.enableRtl) ? -(pageY - this.pageY) : (pageY - this.pageY);\n this.pageX = pageX;\n this.pageY = pageY;\n var args = { event: e, requestType: 'table' };\n this.parent.trigger(events.onResize, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n var tableReBox = this.contentModule.getEditPanel().querySelector('.e-table-box');\n var tableWidth = parseInt(getComputedStyle(this.curTable).width, 10);\n var tableHeight = parseInt(getComputedStyle(this.curTable).height, 10);\n if (this.resizeBtnStat.column) {\n var cellColl = this.curTable.rows[0].cells;\n var width = parseFloat(getComputedStyle(this.columnEle).width);\n var actualwid = width - mouseX;\n var totalwid = parseFloat(getComputedStyle(this.columnEle).width) +\n parseFloat(getComputedStyle(cellColl[this.colIndex - 1]).width);\n for (var i = 0; i < this.curTable.rows.length; i++) {\n if ((totalwid - actualwid) > 20 && actualwid > 20) {\n this.curTable.rows[i].cells[this.colIndex - 1].style.width = totalwid - actualwid + 'px';\n this.curTable.rows[i].cells[this.colIndex].style.width = actualwid + 'px';\n }\n }\n this.updateHelper();\n }\n else if (this.resizeBtnStat.row) {\n this.parent.preventDefaultResize(e);\n var height = parseFloat(getComputedStyle(this.rowEle).height) + mouseY;\n if (height > 20) {\n this.rowEle.style.height = height + 'px';\n }\n this.curTable.style.height = '';\n tableReBox.style.cssText = 'top: ' + (this.calcPos(this.curTable).top + tableHeight - 4) +\n 'px; left:' + (this.calcPos(this.curTable).left + tableWidth - 4) + 'px;';\n this.updateHelper();\n }\n else if (this.resizeBtnStat.tableBox) {\n if (!Browser.isDevice) {\n EventHandler.remove(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper);\n }\n this.curTable.style.width = tableWidth + mouseX + 'px';\n this.curTable.style.height = tableHeight + mouseY + 'px';\n tableReBox.classList.add('e-rbox-select');\n tableReBox.style.cssText = 'top: ' + (this.calcPos(this.curTable).top + tableHeight - 4) +\n 'px; left:' + (this.calcPos(this.curTable).left + tableWidth - 4) + 'px;';\n }\n };\n Table.prototype.cancelResizeAction = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n this.removeResizeEle();\n };\n Table.prototype.resizeEnd = function (e) {\n this.resizeBtnInit();\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n if (this.contentModule.getEditPanel().querySelector('.e-table-box') &&\n this.contentModule.getEditPanel().contains(this.contentModule.getEditPanel().querySelector('.e-table-box'))) {\n if (!Browser.isDevice) {\n EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);\n }\n this.removeResizeEle();\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n this.helper = null;\n }\n this.pageX = null;\n this.pageY = null;\n this.moveEle = null;\n }\n var args = { event: e, requestType: 'table' };\n this.parent.trigger(events.resizeStop, args);\n this.parent.formatter.saveData();\n };\n Table.prototype.resizeBtnInit = function () {\n return this.resizeBtnStat = { column: false, row: false, tableBox: false };\n };\n Table.prototype.addRow = function (selectCell, e, tabkey) {\n var cmd;\n if (tabkey) {\n cmd = {\n item: { command: 'Table', subCommand: 'InsertRowAfter' }\n };\n }\n var value = {\n selection: selectCell,\n subCommand: (tabkey) ? cmd.item.subCommand : e.item.subCommand\n };\n this.parent.formatter.process(this.parent, (tabkey) ? cmd : e, e, value);\n };\n Table.prototype.addColumn = function (selectCell, e) {\n this.parent.formatter.process(this.parent, e, e, { selection: selectCell, width: this.parent.tableSettings.width, subCommand: e.item.subCommand });\n };\n Table.prototype.removeRowColumn = function (selectCell, e) {\n this.parent.formatter.process(this.parent, e, e, { selection: selectCell, subCommand: e.item.subCommand });\n this.hideTableQuickToolbar();\n };\n Table.prototype.removeTable = function (selection, args, delKey) {\n var cmd;\n if (delKey) {\n cmd = { item: { command: 'Table', subCommand: 'TableRemove' } };\n }\n var value = {\n selection: selection,\n subCommand: (delKey) ? cmd.item.subCommand : args.item.subCommand\n };\n this.parent.formatter.process(this.parent, (delKey) ? cmd : args, args.originalEvent, value);\n this.contentModule.getEditPanel().focus();\n this.removeResizeEle();\n this.hideTableQuickToolbar();\n };\n Table.prototype.renderDlgContent = function (args) {\n var _this = this;\n if (this.popupObj) {\n this.popupObj.hide();\n return;\n }\n this.hideTableQuickToolbar();\n var header = this.l10n.getConstant('tblhead');\n var insertbtn = this.l10n.getConstant('inserttablebtn');\n this.dlgDiv = this.parent.createElement('div', { className: 'e-rte-table-popup', id: this.rteID + '_table' });\n this.tblHeader = this.parent.createElement('div', { className: 'e-rte-popup-header' });\n this.tblHeader.innerHTML = header;\n this.dlgDiv.appendChild(this.tblHeader);\n var tableDiv = this.parent.createElement('div', { className: 'e-rte-table-span' });\n this.drawTable(tableDiv, args);\n this.dlgDiv.appendChild(tableDiv);\n this.dlgDiv.appendChild(this.parent.createElement('span', { className: 'e-span-border' }));\n var btnEle = this.parent.createElement('button', {\n className: 'e-insert-table-btn', id: this.rteID + '_inserTable',\n attrs: { type: 'button' }\n });\n this.dlgDiv.appendChild(btnEle);\n var button = new Button({\n iconCss: 'e-icons e-create-table', content: insertbtn, cssClass: 'e-flat',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n button.appendTo(btnEle);\n EventHandler.add(btnEle, 'click', this.insertTableDialog, { self: this, args: args.args, selection: args.selection });\n this.parent.getToolbar().appendChild(this.dlgDiv);\n var target = args.args.originalEvent.target;\n target = target.classList.contains('e-toolbar-item') ? target.firstChild : target.parentElement;\n this.popupObj = new Popup(this.dlgDiv, {\n targetType: 'relative',\n relateTo: target,\n collision: { X: 'fit', Y: 'none' },\n offsetY: 8,\n viewPortElement: this.parent.element,\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl,\n zIndex: 10001,\n close: function (event) {\n _this.parent.isBlur = false;\n _this.popupObj.destroy();\n detach(_this.popupObj.element);\n _this.popupObj = null;\n }\n });\n addClass([this.popupObj.element], 'e-popup-open');\n this.popupObj.refreshPosition(target);\n };\n Table.prototype.docClick = function (e) {\n var target = e.args.target;\n if (target && target.classList && ((this.popupObj && !closest(target, '#' + this.popupObj.element.id) ||\n (this.editdlgObj && !closest(target, '#' + this.editdlgObj.element.id)))) && !target.classList.contains('e-create-table') &&\n target.offsetParent && !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown')) {\n if (this.popupObj) {\n this.popupObj.hide();\n }\n if (this.editdlgObj) {\n this.editdlgObj.hide();\n }\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n if (target && target.tagName !== 'TD' && target.tagName !== 'TH' && !closest(target, 'td') &&\n closest(target, '.e-rte-quick-popup') === null && target.offsetParent &&\n !target.offsetParent.classList.contains('e-quick-dropdown') &&\n !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown') && !closest(target, '.e-rte-dropdown-popup')) {\n removeClass(this.parent.element.querySelectorAll('table td'), classes.CLS_TABLE_SEL);\n this.hideTableQuickToolbar();\n }\n if (target && target.classList && !target.classList.contains(classes.CLS_TB_COL_RES) &&\n !target.classList.contains(classes.CLS_TB_ROW_RES) && !target.classList.contains(classes.CLS_TB_BOX_RES)) {\n this.removeResizeEle();\n }\n };\n Table.prototype.drawTable = function (tableDiv, args) {\n var rowDiv;\n var tableCell;\n for (var row = 0; row < 3; row++) {\n rowDiv = this.parent.createElement('div', { className: 'e-rte-table-row', attrs: { 'data-column': '' + row } });\n for (var col = 0; col < 10; col++) {\n var display = (row > 2) ? 'none' : 'inline-block';\n tableCell = this.parent.createElement('div', { className: 'e-rte-tablecell e-default', attrs: { 'data-cell': '' + col } });\n rowDiv.appendChild(tableCell);\n tableCell.style.display = display;\n if (col === 0 && row === 0) {\n addClass([tableCell], 'e-active');\n }\n EventHandler.add(tableCell, 'mousemove', this.tableCellSelect, this);\n EventHandler.add(rowDiv, 'mouseleave', this.tableCellLeave, this);\n EventHandler.add(tableCell, 'mouseup', this.tableCellClick, { self: this, args: args.args, selection: args.selection });\n }\n tableDiv.appendChild(rowDiv);\n }\n };\n Table.prototype.editTable = function (args) {\n var _this = this;\n this.createDialog(args);\n var editContent = this.tableDlgContent(args);\n var update = this.l10n.getConstant('dialogUpdate');\n var cancel = this.l10n.getConstant('dialogCancel');\n this.editdlgObj.setProperties({\n height: 'initial', width: '290px', content: editContent,\n buttons: [{\n click: this.applyProperties.bind(this, args),\n buttonModel: { content: update, cssClass: 'e-flat e-size-update', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }]\n });\n this.editdlgObj.element.style.maxHeight = 'none';\n this.editdlgObj.content.querySelector('input').focus();\n };\n Table.prototype.insertTableDialog = function (args) {\n var proxy = (this.self) ? this.self : this;\n if (proxy.popupObj) {\n proxy.popupObj.hide();\n }\n proxy.createDialog(args);\n var dlgContent = proxy.tableCellDlgContent();\n var insert = proxy.l10n.getConstant('dialogInsert');\n var cancel = proxy.l10n.getConstant('dialogCancel');\n proxy.editdlgObj.setProperties({\n height: 'initial', width: '290px', content: dlgContent,\n buttons: [{\n click: proxy.customTable.bind(this, args),\n buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }\n },\n {\n click: function (e) { proxy.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }]\n });\n proxy.editdlgObj.element.style.maxHeight = 'none';\n proxy.editdlgObj.content.querySelector('input').focus();\n };\n Table.prototype.tableCellDlgContent = function () {\n var tableColumn = this.l10n.getConstant('columns');\n var tableRow = this.l10n.getConstant('rows');\n var tableWrap = this.parent.createElement('div', { className: 'e-cell-wrap' });\n var content = '
    '\n + '
    ';\n var contentElem = document.createRange().createContextualFragment(content);\n tableWrap.appendChild(contentElem);\n this.columnTextBox = new NumericTextBox({\n format: 'n0',\n min: 1,\n value: 3,\n placeholder: tableColumn,\n floatLabelType: 'Auto',\n max: 50,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n this.columnTextBox.appendTo(tableWrap.querySelector('#tableColumn'));\n this.rowTextBox = new NumericTextBox({\n format: 'n0',\n min: 1,\n value: 3,\n placeholder: tableRow,\n floatLabelType: 'Auto',\n max: 50,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n this.rowTextBox.appendTo(tableWrap.querySelector('#tableRow'));\n return tableWrap;\n };\n Table.prototype.createDialog = function (args) {\n var _this = this;\n if (this.editdlgObj) {\n this.editdlgObj.hide({ returnValue: true });\n return;\n }\n var tableDialog = this.parent.createElement('div', { className: 'e-rte-edit-table', id: this.rteID + '_image' });\n this.parent.element.appendChild(tableDialog);\n var insert = this.l10n.getConstant('dialogInsert');\n var cancel = this.l10n.getConstant('dialogCancel');\n var header = this.l10n.getConstant('tabledialogHeader');\n this.editdlgObj = new Dialog({\n header: header,\n cssClass: classes.CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'initial',\n position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },\n isModal: Browser.isDevice,\n buttons: [{\n buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n _this.editdlgObj.destroy();\n detach(_this.editdlgObj.element);\n _this.editdlgObj = null;\n },\n });\n this.editdlgObj.appendTo(tableDialog);\n if (this.quickToolObj && this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n };\n Table.prototype.customTable = function (args, e) {\n var proxy = (this.self) ? this.self : this;\n var argument = ((Browser.isDevice || proxy.parent.inlineMode.enable) ? args : this);\n proxy.tableInsert(proxy.rowTextBox.value, proxy.columnTextBox.value, e, argument);\n };\n Table.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.editdlgObj.hide({ returnValue: true });\n };\n Table.prototype.applyProperties = function (args, e) {\n var dialogEle = this.editdlgObj.element;\n var table = closest(args.selectNode[0], 'table');\n table.style.width = dialogEle.querySelector('.e-table-width').value + 'px';\n table.cellPadding = dialogEle.querySelector('.e-cell-padding').value;\n table.cellSpacing = dialogEle.querySelector('.e-cell-spacing').value;\n this.parent.formatter.saveData();\n this.editdlgObj.hide({ returnValue: true });\n };\n Table.prototype.tableDlgContent = function (e) {\n var selectNode = e.selectParent[0];\n var tableWidth = this.l10n.getConstant('tableWidth');\n var cellPadding = this.l10n.getConstant('cellpadding');\n var cellSpacing = this.l10n.getConstant('cellspacing');\n var tableWrap = this.parent.createElement('div', { className: 'e-table-sizewrap' });\n var widthVal = closest(selectNode, 'table').getClientRects()[0].width;\n var content = '
    ' + '
    '\n + '
    ';\n var contentElem = document.createRange().createContextualFragment(content);\n tableWrap.appendChild(contentElem);\n var widthNum = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: widthVal,\n placeholder: tableWidth,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n widthNum.appendTo(tableWrap.querySelector('#tableWidth'));\n var padding = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: 0,\n placeholder: cellPadding,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n padding.appendTo(tableWrap.querySelector('#cellPadding'));\n var spacing = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: 0,\n placeholder: cellSpacing,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n spacing.appendTo(tableWrap.querySelector('#cellSpacing'));\n return tableWrap;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Table.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Table.prototype.getModuleName = function () {\n return 'table';\n };\n return Table;\n}());\nexport { Table };\n","/** @hidden */\nexport var executeGroup = {\n 'bold': {\n command: 'style',\n subCommand: 'bold',\n value: 'strong'\n },\n 'italic': {\n command: 'style',\n subCommand: 'italic',\n value: 'em'\n },\n 'underline': {\n command: 'style',\n subCommand: 'underline',\n value: 'span'\n },\n 'strikeThrough': {\n command: 'style',\n subCommand: 'strikeThrough',\n value: 'span'\n },\n 'superscript': {\n command: 'effects',\n subCommand: 'superscript',\n value: 'sup'\n },\n 'subscript': {\n command: 'effects',\n subCommand: 'subscript',\n value: 'sub'\n },\n 'uppercase': {\n command: 'casing',\n subCommand: 'uppercase'\n },\n 'lowercase': {\n command: 'casing',\n subCommand: 'lowercase'\n },\n 'fontColor': {\n command: 'font',\n subCommand: 'fontcolor',\n value: '#ff0000'\n },\n 'fontName': {\n command: 'font',\n subCommand: 'fontname',\n value: 'Segoe UI'\n },\n 'fontSize': {\n command: 'font',\n subCommand: 'fontsize',\n value: '10pt'\n },\n 'backColor': {\n command: 'font',\n subCommand: 'backgroundcolor',\n value: '#ffff00'\n },\n 'justifyCenter': {\n command: 'Alignments',\n subCommand: 'JustifyCenter'\n },\n 'justifyFull': {\n command: 'Alignments',\n subCommand: 'JustifyFull'\n },\n 'justifyLeft': {\n command: 'Alignments',\n subCommand: 'JustifyLeft'\n },\n 'justifyRight': {\n command: 'Alignments',\n subCommand: 'JustifyRight'\n },\n 'undo': {\n command: 'Actions',\n subCommand: 'Undo'\n },\n 'redo': {\n command: 'Actions',\n subCommand: 'Redo'\n },\n 'createLink': {\n command: 'Links',\n subCommand: 'Links'\n },\n 'createImage': {\n command: 'Images',\n subCommand: 'Images'\n },\n 'formatBlock': {\n command: 'Formats',\n value: 'P'\n },\n 'heading': {\n command: 'Formats',\n value: 'H1'\n },\n 'indent': {\n command: 'Indents',\n subCommand: 'Indent'\n },\n 'outdent': {\n command: 'Indents',\n subCommand: 'Outdent'\n },\n 'insertHTML': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertText': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertHorizontalRule': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '
    '\n },\n 'insertImage': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertBrOnReturn': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '
    '\n },\n 'insertOrderedList': {\n command: 'Formats',\n value: 'OL'\n },\n 'insertUnorderedList': {\n command: 'Formats',\n value: 'UL'\n },\n 'insertParagraph': {\n command: 'Formats',\n value: 'P'\n },\n 'removeFormat': {\n command: 'Clear',\n subCommand: 'ClearFormat'\n }\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nimport { ToolbarType } from '../base/enum';\nimport { TableStyleItems } from '../models/items';\nexport var predefinedItems = ['Bold', 'Italic', 'Underline', '|', 'Formats', 'Alignments',\n 'OrderedList', 'UnorderedList', '|', 'CreateLink', 'Image', '|', 'SourceCode', 'Undo', 'Redo'];\nexport var fontFamily = [\n { text: 'Segoe UI', value: 'Segoe UI', class: 'e-segoe-ui' },\n { text: 'Arial', value: 'Arial,Helvetica,sans-serif', class: 'e-arial' },\n { text: 'Georgia', value: 'Georgia,serif', class: 'e-georgia' },\n { text: 'Impact', value: 'Impact,Charcoal,sans-serif', class: 'e-impact' },\n { text: 'Tahoma', value: 'Tahoma,Geneva,sans-serif', class: 'e-tahoma' },\n { text: 'Times New Roman', value: 'Times New Roman,Times,serif', class: 'e-times-new-roman' },\n { text: 'Verdana', value: 'Verdana,Geneva,sans-serif', class: 'e-verdana' }\n];\nexport var fontSize = [\n { text: '8 pt', value: '8pt' },\n { text: '10 pt', value: '10pt' },\n { text: '12 pt', value: '12pt' },\n { text: '14 pt', value: '14pt' },\n { text: '18 pt', value: '18pt' },\n { text: '24 pt', value: '24pt' },\n { text: '36 pt', value: '36pt' }\n];\nexport var formatItems = [\n { text: 'Paragraph', value: 'P', class: 'e-paragraph' },\n { text: 'Code', value: 'Pre', class: 'e-code' },\n { text: 'Quotation', value: 'BlockQuote', class: 'e-quote' },\n { text: 'Heading 1', value: 'H1', class: 'e-h1' },\n { text: 'Heading 2', value: 'H2', class: 'e-h2' },\n { text: 'Heading 3', value: 'H3', class: 'e-h3' },\n { text: 'Heading 4', value: 'H4', class: 'e-h4' }\n];\nexport var fontColor = {\n 'Custom': [\n '', '#000000', '#e7e6e6', '#44546a', '#4472c4', '#ed7d31', '#a5a5a5', '#ffc000', '#70ad47', '#ff0000',\n '#f2f2f2', '#808080', '#cfcdcd', '#d5dce4', '#d9e2f3', '#fbe4d5', '#ededed', '#fff2cc', '#e2efd9', '#ffcccc',\n '#d9d9d9', '#595959', '#aeaaaa', '#acb9ca', '#b4c6e7', '#f7caac', '#dbdbdb', '#ffe599', '#c5e0b3', '#ff8080',\n '#bfbfbf', '#404040', '#747070', '#8496b0', '#8eaadb', '#f4b083', '#c9c9c9', '#ffd966', '#a8d08d', '#ff3333',\n '#a6a6a6', '#262626', '#3b3838', '#323e4f', '#2f5496', '#c45911', '#7b7b7b', '#bf8f00', '#538135', '#b30000',\n '#7f7f7f', '#0d0d0d', '#161616', '#212934', '#1f3763', '#823b0b', '#525252', '#7f5f00', '#375623', '#660000'\n ]\n};\nexport var backgroundColor = {\n 'Custom': [\n '', '#000000', '#ffff00', '#00ff00', '#00ffff', '#0000ff', '#ff0000', '#000080', '#800080', '#996633',\n '#f2f2f2', '#808080', '#ffffcc', '#b3ffb3', '#ccffff', '#ccccff', '#ffcccc', '#ccccff', '#ff80ff', '#f2e6d9',\n '#d9d9d9', '#595959', '#ffff80', '#80ff80', '#b3ffff', '#8080ff', '#ff8080', '#8080ff', '#ff00ff', '#dfbf9f',\n '#bfbfbf', '#404040', '#ffff33', '#33ff33', '#33ffff', '#3333ff', '#ff3333', '#0000b3', '#b300b3', '#c68c53',\n '#a6a6a6', '#262626', '#e6e600', '#00b300', '#009999', '#000099', '#b30000', '#000066', '#660066', '#86592d',\n '#7f7f7f', '#0d0d0d', '#999900', '#006600', '#006666', '#000066', '#660000', '#00004d', '#4d004d', '#734d26',\n ]\n};\n/**\n * Configures the toolbar settings of the RTE.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enableFloating\", void 0);\n __decorate([\n Property(ToolbarType.Expand)\n ], ToolbarSettings.prototype, \"type\", void 0);\n __decorate([\n Property(predefinedItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\n/**\n * Configures the image settings of the RTE.\n */\nvar ImageSettings = /** @class */ (function (_super) {\n __extends(ImageSettings, _super);\n function ImageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(['.jpeg', '.jpg', '.png'])\n ], ImageSettings.prototype, \"allowedTypes\", void 0);\n __decorate([\n Property('inline')\n ], ImageSettings.prototype, \"display\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"path\", void 0);\n __decorate([\n Property(true)\n ], ImageSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(0)\n ], ImageSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property(0)\n ], ImageSettings.prototype, \"minHeight\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"maxHeight\", void 0);\n __decorate([\n Property(false)\n ], ImageSettings.prototype, \"resizeByPercent\", void 0);\n return ImageSettings;\n}(ChildProperty));\nexport { ImageSettings };\nvar TableSettings = /** @class */ (function (_super) {\n __extends(TableSettings, _super);\n function TableSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('100%')\n ], TableSettings.prototype, \"width\", void 0);\n __decorate([\n Property(TableStyleItems)\n ], TableSettings.prototype, \"styles\", void 0);\n __decorate([\n Property(true)\n ], TableSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(0)\n ], TableSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(null)\n ], TableSettings.prototype, \"maxWidth\", void 0);\n return TableSettings;\n}(ChildProperty));\nexport { TableSettings };\n/**\n * Configures the quick toolbar settings of the RTE.\n */\nvar QuickToolbarSettings = /** @class */ (function (_super) {\n __extends(QuickToolbarSettings, _super);\n function QuickToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], QuickToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('hide')\n ], QuickToolbarSettings.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(['Open', 'Edit', 'UnLink'])\n ], QuickToolbarSettings.prototype, \"link\", void 0);\n __decorate([\n Property(['Replace', 'Align', 'Caption', 'Remove', '-', 'InsertLink', 'OpenImageLink', 'EditImageLink', 'RemoveImageLink', 'Display', 'AltText', 'Dimension'])\n ], QuickToolbarSettings.prototype, \"image\", void 0);\n __decorate([\n Property(['Cut', 'Copy', 'Paste'])\n ], QuickToolbarSettings.prototype, \"text\", void 0);\n __decorate([\n Property(['TableHeader', 'TableRows', 'TableColumns', 'BackgroundColor', '-', 'TableRemove', 'Alignments', 'TableCellVerticalAlign', 'Styles'])\n ], QuickToolbarSettings.prototype, \"table\", void 0);\n return QuickToolbarSettings;\n}(ChildProperty));\nexport { QuickToolbarSettings };\n/**\n * Configures the font family settings of the RTE.\n */\nvar FontFamily = /** @class */ (function (_super) {\n __extends(FontFamily, _super);\n function FontFamily() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Segoe UI')\n ], FontFamily.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], FontFamily.prototype, \"width\", void 0);\n __decorate([\n Property(fontFamily)\n ], FontFamily.prototype, \"items\", void 0);\n return FontFamily;\n}(ChildProperty));\nexport { FontFamily };\n/**\n * Configures the font size settings of the RTE.\n */\nvar FontSize = /** @class */ (function (_super) {\n __extends(FontSize, _super);\n function FontSize() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('10 pt')\n ], FontSize.prototype, \"default\", void 0);\n __decorate([\n Property('35px')\n ], FontSize.prototype, \"width\", void 0);\n __decorate([\n Property(fontSize)\n ], FontSize.prototype, \"items\", void 0);\n return FontSize;\n}(ChildProperty));\nexport { FontSize };\n/**\n * Configures the format settings of the RTE.\n */\nvar Format = /** @class */ (function (_super) {\n __extends(Format, _super);\n function Format() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Paragraph')\n ], Format.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], Format.prototype, \"width\", void 0);\n __decorate([\n Property(formatItems)\n ], Format.prototype, \"types\", void 0);\n return Format;\n}(ChildProperty));\nexport { Format };\n/**\n * Configures the font Color settings of the RTE.\n */\nvar FontColor = /** @class */ (function (_super) {\n __extends(FontColor, _super);\n function FontColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ff0000')\n ], FontColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], FontColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], FontColor.prototype, \"columns\", void 0);\n __decorate([\n Property(fontColor)\n ], FontColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], FontColor.prototype, \"modeSwitcher\", void 0);\n return FontColor;\n}(ChildProperty));\nexport { FontColor };\n/**\n * Configures the background Color settings of the RTE.\n */\nvar BackgroundColor = /** @class */ (function (_super) {\n __extends(BackgroundColor, _super);\n function BackgroundColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ffff00')\n ], BackgroundColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], BackgroundColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], BackgroundColor.prototype, \"columns\", void 0);\n __decorate([\n Property(backgroundColor)\n ], BackgroundColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], BackgroundColor.prototype, \"modeSwitcher\", void 0);\n return BackgroundColor;\n}(ChildProperty));\nexport { BackgroundColor };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Objects used for configuring the iframe resources properties.\n */\nvar Resources = /** @class */ (function (_super) {\n __extends(Resources, _super);\n function Resources() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], Resources.prototype, \"styles\", void 0);\n __decorate([\n Property([])\n ], Resources.prototype, \"scripts\", void 0);\n return Resources;\n}(ChildProperty));\nexport { Resources };\n/**\n * Configures the iframe settings of the RTE.\n */\nvar IFrameSettings = /** @class */ (function (_super) {\n __extends(IFrameSettings, _super);\n function IFrameSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], IFrameSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], IFrameSettings.prototype, \"attributes\", void 0);\n __decorate([\n Complex({}, Resources)\n ], IFrameSettings.prototype, \"resources\", void 0);\n return IFrameSettings;\n}(ChildProperty));\nexport { IFrameSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the inlineMode property of the RTE.\n */\nvar InlineMode = /** @class */ (function (_super) {\n __extends(InlineMode, _super);\n function InlineMode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InlineMode.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], InlineMode.prototype, \"onSelection\", void 0);\n return InlineMode;\n}(ChildProperty));\nexport { InlineMode };\n","import { Browser, isNullOrUndefined, select, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\n/**\n * `FullScreen` module is used to maximize and minimize screen\n */\nvar FullScreen = /** @class */ (function () {\n function FullScreen(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n FullScreen.prototype.showFullScreen = function (event) {\n this.scrollableParent = getScrollableParent(this.parent.element);\n if (!this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.parent.trigger(events.actionBegin, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n if (this.parent.toolbarSettings.enableFloating && this.parent.toolbarSettings.enable) {\n this.parent.getToolbarElement().style.width = '100%';\n this.parent.getToolbarElement().style.top = '0px';\n }\n this.parent.element.classList.add(classes.CLS_FULL_SCREEN);\n this.toggleParentOverflow(true);\n this.parent.setContentHeight();\n if (this.parent.toolbarModule) {\n if (Browser.isDevice) {\n this.parent.toolbarModule.removeFixedTBarClass();\n }\n this.parent.toolbarModule.updateItem({\n targetItem: 'Maximize',\n updateItem: 'Minimize',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n }\n };\n FullScreen.prototype.hideFullScreen = function (event) {\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.parent.element.classList.remove(classes.CLS_FULL_SCREEN);\n this.parent.trigger(events.actionBegin, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n this.toggleParentOverflow(false);\n this.parent.setContentHeight();\n if (this.parent.toolbarModule) {\n this.parent.toolbarModule.updateItem({\n targetItem: 'Minimize',\n updateItem: 'Maximize',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.parent.toolbarModule.addFixedTBarClass();\n }\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n }\n };\n FullScreen.prototype.toggleParentOverflow = function (isAdd) {\n if (isNullOrUndefined(this.scrollableParent)) {\n return;\n }\n var overflow = (isAdd) ? 'hidden' : '';\n for (var i = 0; i < this.scrollableParent.length; i++) {\n if (this.scrollableParent[i].nodeName === '#document') {\n setStyleAttribute(select('body', this.scrollableParent[i]), {\n overflow: overflow\n });\n }\n else {\n setStyleAttribute(this.scrollableParent[i], {\n overflow: overflow\n });\n }\n }\n };\n FullScreen.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'full-screen':\n this.showFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n case 'escape':\n this.hideFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n }\n };\n FullScreen.prototype.addEventListener = function () {\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n FullScreen.prototype.removeEventListener = function () {\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n FullScreen.prototype.destroy = function () {\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.toggleParentOverflow(false);\n }\n this.removeEventListener();\n };\n return FullScreen;\n}());\nexport { FullScreen };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Complex, Browser, addClass, select } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, formatUnit, L10n, closest } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, Event, removeClass, print as printWindow, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, compile, append } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Render } from '../renderer/render';\nimport { ViewSource } from '../renderer/view-source';\nimport { executeGroup } from './interface';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { RenderType, ToolbarType } from './enum';\nimport { ExecCommandCallBack } from '../actions/execute-command-callback';\nimport { KeyboardEvents } from '../actions/keyboard';\nimport { ToolbarSettings, ImageSettings, QuickToolbarSettings, FontFamily, FontSize, Format } from '../models/toolbar-settings';\nimport { TableSettings } from '../models/toolbar-settings';\nimport { FontColor, BackgroundColor } from '../models/toolbar-settings';\nimport { IFrameSettings } from '../models/iframe-settings';\nimport { InlineMode } from '../models/inline-mode';\nimport { defaultLocale } from '../models/default-locale';\nimport { setAttributes } from '../actions/html-attributes';\nimport { FullScreen } from '../actions/full-screen';\nimport * as CONSTANT from '../../common/constant';\nimport { dispatchEvent } from '../base/util';\n/**\n * Represents the RichTextEditor component.\n * ```html\n * \n * \n * ```\n */\nvar RichTextEditor = /** @class */ (function (_super) {\n __extends(RichTextEditor, _super);\n function RichTextEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * @hidden\n */\n _this.isFocusOut = false;\n /**\n * @hidden\n */\n _this.isRTE = false;\n /**\n * @hidden\n */\n _this.isBlur = true;\n _this.needsID = true;\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n RichTextEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.toolbarSettings.enable) {\n modules.push({ member: 'toolbar', args: [this, this.serviceLocator] });\n modules.push({\n member: 'link',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'table',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'image',\n args: [this, this.serviceLocator]\n });\n if (this.quickToolbarSettings.enable) {\n modules.push({ member: 'quickToolbar', args: [this, this.serviceLocator] });\n }\n }\n if (this.showCharCount) {\n modules.push({ member: 'count', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'Markdown') {\n modules.push({ member: 'markdownEditor', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'HTML') {\n modules.push({ member: 'htmlEditor', args: [this, this.serviceLocator] });\n }\n return modules;\n };\n RichTextEditor.prototype.updateEnable = function () {\n if (this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n this.element.tabIndex = 0;\n this.element.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', '0');\n }\n else {\n if (this.getToolbar()) {\n removeClass(this.getToolbar().querySelectorAll('.' + classes.CLS_ACTIVE), classes.CLS_ACTIVE);\n }\n addClass([this.element], classes.CLS_DISABLED);\n this.element.tabIndex = -1;\n this.element.setAttribute('aria-disabled', 'true');\n this.inputElement.setAttribute('tabindex', '-1');\n }\n };\n RichTextEditor.prototype.setEnable = function () {\n this.updateEnable();\n (this.enabled) ? this.eventInitializer() : this.unWireEvents();\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n RichTextEditor.prototype.preRender = function () {\n this.serviceLocator = new ServiceLocator;\n this.initializeServices();\n this.setContainer();\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n attributes(this.element, { role: 'application' });\n };\n RichTextEditor.prototype.setContainer = function () {\n this.originalElement = this.element.cloneNode(true);\n if (this.value === null || this.valueTemplate !== null) {\n this.setValue();\n this.element.innerHTML = '';\n }\n if (this.element.tagName === 'TEXTAREA') {\n var rteOutterWrapper = this.createElement('div', {\n className: 'e-control e-richtexteditor', id: this.getID()\n });\n rteOutterWrapper.innerHTML = this.element.value;\n this.element.parentElement.insertBefore(rteOutterWrapper, this.element);\n this.valueContainer = this.element;\n this.valueContainer.classList.remove('e-control', 'e-richtexteditor');\n this.valueContainer.id = this.getID() + '-value';\n this.element = rteOutterWrapper;\n }\n else {\n this.valueContainer = this.createElement('textarea', {\n id: this.getID() + '-value'\n });\n }\n this.valueContainer.name = this.getID();\n this.valueContainer.style.display = 'none';\n if (this.value !== null) {\n this.valueContainer.value = this.value;\n }\n this.element.appendChild(this.valueContainer);\n };\n RichTextEditor.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n /**\n * Focuses the RichTextEditor component\n * @public\n */\n RichTextEditor.prototype.focusIn = function () {\n if (this.enabled) {\n this.inputElement.focus();\n }\n };\n /**\n * Blurs the RichTextEditor component\n * @public\n */\n RichTextEditor.prototype.focusOut = function () {\n if (this.enabled) {\n this.inputElement.blur();\n }\n };\n /**\n * Selects all the content in RichTextEditor\n * @public\n */\n RichTextEditor.prototype.selectAll = function () {\n this.notify(events.selectAll, {});\n };\n /**\n * Selects a content range or an element\n * @public\n */\n RichTextEditor.prototype.selectRange = function (range) {\n this.notify(events.selectRange, { range: range });\n };\n /**\n * Retrieves the HTML markup content from currently selected content of RichTextEditor.\n * @public\n */\n RichTextEditor.prototype.getSelection = function () {\n var str = '';\n this.notify(events.getSelectedHtml, {\n callBack: function (txt) {\n str = txt;\n }\n });\n return str;\n };\n /**\n * Executes the commands\n * CommandName - Specifies the name of the command to be executed.\n * value - Specifies the sub command.\n * @public\n */\n RichTextEditor.prototype.executeCommand = function (commandName, value) {\n var tool = executeGroup[commandName];\n this.formatter.editorManager.execCommand(tool.command, tool.subCommand ? tool.subCommand : (value ? value : tool.value), null, null, (value ? value : tool.value), (value ? value : tool.value));\n };\n RichTextEditor.prototype.encode = function (value) {\n var divNode = this.createElement('div');\n divNode.innerText = value.trim();\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n RichTextEditor.prototype.decode = function (value) {\n return value.replace(/&/g, '&').replace(/&lt;/g, '<')\n .replace(/</g, '<').replace(/&gt;/g, '>')\n .replace(/>/g, '>').replace(/ /g, ' ')\n .replace(/&nbsp;/g, ' ').replace(/"/g, '');\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n */\n RichTextEditor.prototype.render = function () {\n this.renderModule = new Render(this, this.serviceLocator);\n this.sourceCodeModule = new ViewSource(this, this.serviceLocator);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n this.RTERender();\n var execCommandCallBack = new ExecCommandCallBack(this);\n this.notify(events.initialEnd, {});\n if (this.toolbarSettings.enable && this.toolbarSettings.type === 'Expand' && !isNOU(this.getToolbar()) &&\n (this.toolbarSettings.items.indexOf('Undo') > -1 && this.toolbarSettings.items.indexOf('Redo') > -1)) {\n this.disableToolbarItem(['Undo', 'Redo']);\n }\n this.setContentHeight();\n (this.readonly || !this.enabled) ? this.unWireEvents() : this.eventInitializer();\n };\n /**\n * For internal use only - Initialize the event handler\n * @private\n */\n RichTextEditor.prototype.eventInitializer = function () {\n this.wireEvents();\n };\n /**\n * For internal use only - keydown the event handler;\n * @private\n */\n RichTextEditor.prototype.keyDown = function (e) {\n this.notify(events.keyDown, { member: 'keydown', args: e });\n if (this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n if (e.action || e.which === 9) {\n this.formatter.process(this, null, e);\n switch (e.action) {\n case 'toolbar-focus':\n if (this.toolbarSettings.enable) {\n var selector = '.e-toolbar-item[aria-disabled=\"false\"][title] [tabindex]';\n this.toolbarModule.baseToolbar.toolbarObj.element.querySelector(selector).focus();\n }\n break;\n case 'escape':\n this.contentModule.getEditPanel().focus();\n break;\n }\n }\n if (!isNOU(this.placeholder)) {\n this.setPlaceHolder();\n }\n };\n RichTextEditor.prototype.keyUp = function (e) {\n this.notify(events.keyUp, { member: 'keyup', args: e });\n var allowedKeys = e.which === 32 || e.which === 13 || e.which === 8 || e.which === 46;\n if (((e.key !== 'shift' && !e.ctrlKey) && e.key.length === 1 || allowedKeys) || (this.editorMode === 'Markdown'\n && ((e.key !== 'shift' && !e.ctrlKey) && e.key.length === 1 || allowedKeys)) && !this.inlineMode.enable) {\n this.formatter.onKeyHandler(this, e);\n }\n if (this.inputElement && this.inputElement.textContent.length !== 0) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n if (!isNOU(this.placeholder)) {\n this.setPlaceHolder();\n }\n };\n RichTextEditor.prototype.updateValue = function (value) {\n if (isNOU(value)) {\n this.setProperties({ value: this.inputElement.innerHTML });\n }\n else {\n this.setProperties({ value: value });\n }\n };\n RichTextEditor.prototype.mouseUp = function (e) {\n this.notify(events.mouseUp, { member: 'mouseUp', args: e });\n if (this.inputElement && ((this.editorMode === 'HTML' && this.inputElement.textContent.length !== 0) ||\n (this.editorMode === 'Markdown' && this.inputElement.value.length !== 0))) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n RichTextEditor.prototype.onCopy = function () {\n this.contentModule.getDocument().execCommand('copy', false, null);\n };\n RichTextEditor.prototype.onCut = function () {\n this.contentModule.getDocument().execCommand('cut', false, null);\n };\n RichTextEditor.prototype.onPaste = function (e) {\n var _this = this;\n var args = { requestType: 'Paste', editorMode: this.editorMode, event: e };\n var proxy = this;\n var value = null;\n if (e && !isNOU(e.clipboardData)) {\n value = e.clipboardData.getData('text/plain');\n }\n setTimeout(function () { _this.formatter.saveData(); }, 0);\n this.formatter.onSuccess(this, args);\n if (value !== null && value.length === 0) {\n this.notify(events.paste, {\n module: events.imgModule, file: e.clipboardData.items[0].getAsFile(), args: e\n });\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.clipboardAction = function (action, event) {\n switch (action.toLowerCase()) {\n case 'cut':\n this.onCut();\n this.formatter.onSuccess(this, {\n requestType: 'Cut',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'copy':\n this.onCopy();\n this.formatter.onSuccess(this, {\n requestType: 'Copy',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'paste':\n this.onPaste(event);\n break;\n }\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n * @method destroy\n * @return {void}\n */\n RichTextEditor.prototype.destroy = function () {\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n this.unWireEvents();\n if (this.originalElement.tagName === 'TEXTAREA') {\n this.element.parentElement.insertBefore(this.valueContainer, this.element);\n this.valueContainer.id = this.getID();\n this.valueContainer.removeAttribute('name');\n this.element.remove();\n if (this.originalElement.innerHTML.trim() !== '') {\n this.valueContainer.value = this.originalElement.innerHTML.trim();\n }\n else {\n this.valueContainer.value = '';\n }\n }\n else {\n if (this.originalElement.innerHTML.trim() !== '') {\n this.element.innerHTML = this.originalElement.innerHTML.trim();\n }\n else {\n this.element.innerHTML = '';\n }\n }\n if (this.placeholder && this.placeHolderWrapper) {\n this.placeHolderWrapper.remove();\n }\n if (!isNOU(this.cssClass)) {\n removeClass([this.element], this.cssClass);\n }\n this.removeHtmlAttributes();\n this.removeAttributes();\n _super.prototype.destroy.call(this);\n };\n RichTextEditor.prototype.removeHtmlAttributes = function () {\n if (this.htmlAttributes) {\n var keys = Object.keys(this.htmlAttributes);\n for (var i = 0; i < keys.length && this.element.hasAttribute(keys[i]); i++) {\n this.element.removeAttribute(keys[i]);\n }\n }\n };\n RichTextEditor.prototype.removeAttributes = function () {\n if (!this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n }\n if (this.enableRtl) {\n removeClass([this.element], classes.CLS_RTL);\n }\n if (this.readonly) {\n removeClass([this.element], classes.CLS_RTE_READONLY);\n }\n if (this.element.style.width !== '' && this.originalElement.style.width === '') {\n this.element.style.removeProperty('width');\n }\n if (this.element.style.height !== '' && this.originalElement.style.height === '') {\n this.element.style.removeProperty('height');\n }\n this.element.removeAttribute('aria-disabled');\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n };\n RichTextEditor.prototype.destroyDependentModules = function () {\n /* destroy dependent modules */\n this.renderModule.destroy();\n this.formatter.editorManager.undoRedoManager.destroy();\n this.sourceCodeModule.destroy();\n };\n /**\n * Returns the HTML or Text inside the RichTextEditor.\n * @return {Element}\n */\n RichTextEditor.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n RichTextEditor.prototype.getText = function () {\n return this.contentModule.getText();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n RichTextEditor.prototype.getModuleName = function () {\n return 'richtexteditor';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n RichTextEditor.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.value = (this.enableHtmlEncode) ? this.encode(this.decode(newProp[prop])) : newProp[prop];\n this.updatePanelValue();\n this.setPlaceHolder();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'valueTemplate':\n this.setValue();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'width':\n this.setWidth(newProp[prop]);\n break;\n case 'height':\n this.setHeight(newProp[prop]);\n this.setContentHeight();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'cssClass':\n this.element.classList.remove(oldProp[prop]);\n this.setCssClass(newProp[prop]);\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'placeholder':\n this.placeholder = newProp[prop];\n this.setPlaceHolder();\n break;\n case 'htmlAttributes':\n setAttributes(this.htmlAttributes, this, false);\n break;\n case 'iframeSettings':\n var frameSetting = oldProp[prop];\n if (frameSetting.resources) {\n var iframe = this.contentModule.getDocument();\n var header = iframe.querySelector('head');\n var files = void 0;\n if (frameSetting.resources.scripts) {\n files = header.querySelectorAll('.' + classes.CLS_SCRIPT_SHEET);\n this.removeSheets(files);\n }\n if (frameSetting.resources.styles) {\n files = header.querySelectorAll('.' + classes.CLS_STYLE_SHEET);\n this.removeSheets(files);\n }\n }\n this.setIframeSettings();\n break;\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'inlineMode':\n this.notify(events.modelChanged, { module: 'quickToolbar' });\n this.setContentHeight();\n break;\n case 'toolbarSettings':\n this.notify(events.modelChanged, { module: 'toolbar' });\n this.setContentHeight();\n break;\n case 'showCharCount':\n if (newProp[prop] && this.countModule) {\n this.countModule.renderCount();\n }\n else if (newProp[prop] === false && this.countModule) {\n this.countModule.destroy();\n }\n break;\n case 'enableHtmlEncode':\n this.updateValueData();\n break;\n default:\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n }\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.updateValueData = function () {\n if (this.enableHtmlEncode) {\n this.setProperties({ value: this.encode(this.decode(this.inputElement.innerHTML)) });\n }\n else {\n this.setProperties({\n value: /<[a-z][\\s\\S]*>/i.test(this.inputElement.innerHTML) ? this.inputElement.innerHTML :\n this.decode(this.inputElement.innerHTML)\n });\n }\n };\n RichTextEditor.prototype.removeSheets = function (srcList) {\n var i;\n for (i = 0; i < srcList.length; i++) {\n srcList[i].remove();\n }\n };\n RichTextEditor.prototype.updatePanelValue = function () {\n var value;\n if (this.editorMode === 'HTML' && this.value) {\n value = this.value.replace(/>\\s+<');\n }\n else {\n value = this.value;\n }\n value = (this.enableHtmlEncode && this.value) ? this.decode(value) : value;\n if (value) {\n if (this.valueContainer) {\n this.valueContainer.value = (this.enableHtmlEncode) ? this.value : value;\n }\n if (this.editorMode === 'HTML' && this.inputElement && this.inputElement.innerHTML.trim() !== value.trim()) {\n this.inputElement.innerHTML = value;\n }\n else if (this.editorMode === 'Markdown' && this.inputElement\n && this.inputElement.value.trim() !== value.trim()) {\n this.inputElement.value = value;\n }\n }\n else {\n if (this.editorMode === 'HTML') {\n this.inputElement.innerHTML = '


    ';\n }\n else {\n this.inputElement.value = '';\n }\n if (this.valueContainer) {\n this.valueContainer.value = '';\n }\n }\n };\n RichTextEditor.prototype.setHeight = function (height) {\n if (height !== 'auto') {\n this.element.style.height = formatUnit(height);\n }\n else {\n this.element.style.height = 'auto';\n }\n };\n RichTextEditor.prototype.setPlaceHolder = function () {\n if (this.inputElement && this.placeholder && this.iframeSettings.enable !== true) {\n if (!this.placeHolderWrapper) {\n this.placeHolderWrapper = this.createElement('span', { className: 'rte-placeholder' });\n if (this.inputElement) {\n this.inputElement.parentElement.insertBefore(this.placeHolderWrapper, this.inputElement);\n }\n attributes(this.placeHolderWrapper, {\n 'style': 'font-size: 16px; padding: 16px; margin-left: 0px; margin-right: 0px;'\n });\n }\n this.placeHolderWrapper.innerHTML = this.placeholder;\n if (this.inputElement.textContent.length !== 0) {\n this.placeHolderWrapper.style.display = 'none';\n }\n else {\n this.placeHolderWrapper.style.display = 'block';\n }\n }\n };\n RichTextEditor.prototype.setWidth = function (width) {\n if (width !== 'auto') {\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n }\n else {\n this.element.style.width = 'auto';\n }\n };\n RichTextEditor.prototype.setCssClass = function (cssClass) {\n if (!isNOU(cssClass)) {\n this.element.classList.add(cssClass);\n }\n };\n RichTextEditor.prototype.updateRTL = function () {\n this.notify(events.rtlMode, { enableRtl: this.enableRtl });\n if (this.enableRtl) {\n this.element.classList.add(classes.CLS_RTL);\n }\n else {\n this.element.classList.remove(classes.CLS_RTL);\n }\n };\n RichTextEditor.prototype.updateReadOnly = function () {\n if (this.editorMode !== 'Markdown') {\n if (this.readonly) {\n attributes(this.inputElement, { contenteditable: 'false' });\n addClass([this.element], classes.CLS_RTE_READONLY);\n }\n else {\n attributes(this.inputElement, { contenteditable: 'true' });\n removeClass([this.element], classes.CLS_RTE_READONLY);\n }\n }\n };\n RichTextEditor.prototype.setReadOnly = function () {\n this.updateReadOnly();\n (this.readonly) ? this.unWireEvents() : this.eventInitializer();\n };\n /**\n * By default, prints all the pages of the RichTextEditor.\n * @return {void}\n */\n RichTextEditor.prototype.print = function () {\n var printWind;\n var printArgs = {\n element: this.inputElement,\n requestType: 'print',\n cancel: false\n };\n this.trigger(events.actionBegin, printArgs);\n printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth);\n if (Browser.info.name === 'msie') {\n printWind.resizeTo(screen.availWidth, screen.availHeight);\n }\n printWind = printWindow(this.inputElement, printWind);\n if (printArgs.cancel) {\n return;\n }\n var actionArgs = {\n requestType: 'print'\n };\n this.trigger(events.actionComplete, actionArgs);\n };\n /**\n * Applies all the pending property changes and render the component again.\n * @public\n */\n RichTextEditor.prototype.refresh = function () {\n this.renderModule.refresh();\n };\n /**\n * Shows the RichTextEditor component in full-screen mode.\n */\n RichTextEditor.prototype.showFullScreen = function () {\n if (this.readonly) {\n return;\n }\n this.fullScreenModule.showFullScreen();\n };\n /**\n * Enables the give toolbar items in the RichTextEditor component.\n * @public\n */\n RichTextEditor.prototype.enableToolbarItem = function (items) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, true);\n };\n /**\n * Disables the given toolbar items in the RichTextEditor component.\n * @public\n */\n RichTextEditor.prototype.disableToolbarItem = function (items) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, false);\n };\n /**\n * Removes the give toolbar items from the RichTextEditor component.\n * @public\n */\n RichTextEditor.prototype.removeToolbarItem = function (items) {\n this.toolbarModule.removeTBarItems(items);\n };\n /**\n * Get the selected range from the RichTextEditor's content.\n * @public\n */\n RichTextEditor.prototype.getRange = function () {\n return this.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n };\n RichTextEditor.prototype.initializeServices = function () {\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n this.serviceLocator.register('rteLocale', this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale));\n };\n RichTextEditor.prototype.RTERender = function () {\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.fullScreenModule = new FullScreen(this);\n this.renderModule.render();\n this.inputElement = this.contentModule.getEditPanel();\n this.setHeight(this.height);\n setAttributes(this.htmlAttributes, this, false);\n if (this.iframeSettings) {\n this.setIframeSettings();\n }\n this.setCssClass(this.cssClass);\n this.updateEnable();\n this.setPlaceHolder();\n this.updateRTL();\n this.updateReadOnly();\n this.updatePanelValue();\n if (this.enableHtmlEncode) {\n this.setProperties({ value: this.encode(this.decode(this.value)) });\n }\n };\n RichTextEditor.prototype.setIframeSettings = function () {\n if (this.iframeSettings.resources) {\n var styleSrc = this.iframeSettings.resources.styles;\n var scriptSrc = this.iframeSettings.resources.scripts;\n if (this.iframeSettings.resources.scripts.length > 0) {\n this.InjectSheet(true, scriptSrc);\n }\n if (this.iframeSettings.resources.styles.length > 0) {\n this.InjectSheet(false, styleSrc);\n }\n }\n if (this.iframeSettings.attributes) {\n setAttributes(this.iframeSettings.attributes, this, true);\n }\n };\n RichTextEditor.prototype.InjectSheet = function (scriptSheet, srcList) {\n try {\n if (srcList && srcList.length > 0) {\n var iFrame = this.contentModule.getDocument();\n var target = iFrame.querySelector('head');\n for (var i = 0; i < srcList.length; i++) {\n if (scriptSheet) {\n var scriptEle = this.createScriptElement();\n scriptEle.src = srcList[i];\n target.appendChild(scriptEle);\n }\n else {\n var styleEle = this.createStyleElement();\n styleEle.href = srcList[i];\n target.appendChild(styleEle);\n }\n }\n }\n }\n catch (e) {\n return;\n }\n };\n RichTextEditor.prototype.createScriptElement = function () {\n var scriptEle = this.createElement('script', {\n className: classes.CLS_SCRIPT_SHEET\n });\n scriptEle.type = 'text/javascript';\n return scriptEle;\n };\n RichTextEditor.prototype.createStyleElement = function () {\n var styleEle = this.createElement('link', {\n className: classes.CLS_STYLE_SHEET\n });\n styleEle.rel = 'stylesheet';\n return styleEle;\n };\n RichTextEditor.prototype.setValue = function () {\n if (this.valueTemplate) {\n if (typeof this.valueTemplate === 'string') {\n this.setProperties({ value: this.valueTemplate });\n }\n else {\n var compiledString = void 0;\n compiledString = compile(this.valueTemplate);\n var compiledTemplate = compiledString({});\n for (var i = 0; i < compiledTemplate.length; i++) {\n var item = compiledTemplate[i];\n append([item], this.element);\n }\n this.setProperties({ value: this.element.innerHTML.trim() });\n }\n }\n else if (this.element.innerHTML.trim() !== '') {\n this.setProperties({ value: this.element.innerHTML.trim() });\n }\n };\n RichTextEditor.prototype.setContentHeight = function (target, isExpand) {\n var heightValue;\n var topValue = 0;\n var cntEle = (this.sourceCodeModule.getPanel() &&\n this.sourceCodeModule.getPanel().parentElement.style.display === 'block') ? this.sourceCodeModule.getPanel().parentElement :\n this.contentModule.getPanel();\n var rteHeight = this.element.offsetHeight;\n var tbHeight = this.getToolbar() ? this.toolbarModule.getToolbarHeight() : 0;\n var expandPopHeight = this.getToolbar() ? this.toolbarModule.getExpandTBarPopHeight() : 0;\n if (this.toolbarSettings.type === ToolbarType.Expand && isExpand && target !== 'preview') {\n heightValue = (this.height === 'auto') ? 'auto' : rteHeight - (tbHeight + expandPopHeight) + 'px';\n topValue = (!this.toolbarSettings.enableFloating) ? expandPopHeight : 0;\n }\n else {\n if (this.height === 'auto') {\n heightValue = (this.element.classList.contains('e-rte-full-screen')) ? '100%' : 'auto';\n }\n else {\n heightValue = rteHeight - tbHeight + 'px';\n }\n }\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\n if (this.iframeSettings.enable && target === 'sourceCode') {\n var codeElement = select('.' + classes.CLS_RTE_CONTENT, this.element);\n setStyleAttribute(codeElement, { height: heightValue, marginTop: topValue + 'px' });\n }\n if (this.toolbarSettings.enableFloating && this.getToolbar() && !this.inlineMode.enable) {\n if (isExpand) {\n setStyleAttribute(this.getToolbar().parentElement, { height: (tbHeight + expandPopHeight) + 'px' });\n }\n else {\n setStyleAttribute(this.getToolbar().parentElement, { height: tbHeight + 'px' });\n }\n }\n };\n /**\n * Retrieves the HTML from RichTextEditor.\n * @public\n */\n RichTextEditor.prototype.getHtml = function () {\n return this.value;\n };\n /**\n * Shows the source HTML/MD markup.\n * @public\n */\n RichTextEditor.prototype.showSourceCode = function () {\n if (this.readonly) {\n return;\n }\n this.notify(events.sourceCode, {});\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getBaseToolbarObject = function () {\n var tbObj;\n if (this.inlineMode.enable && !Browser.isDevice) {\n tbObj = this.quickToolbarModule && this.quickToolbarModule.getInlineBaseToolbar();\n }\n else {\n tbObj = this.toolbarModule && this.toolbarModule.getBaseToolbar();\n }\n return tbObj;\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getToolbar = function () {\n return this.toolbarModule ? this.toolbarModule.getToolbarElement() : null;\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getToolbarElement = function () {\n return this.toolbarModule && this.toolbarModule.getToolbarElement();\n };\n RichTextEditor.prototype.getID = function () {\n return this.element.id;\n };\n RichTextEditor.prototype.mouseDownHandler = function (e) {\n addClass([this.element], [classes.CLS_FOCUS]);\n this.preventDefaultResize(e);\n this.notify(events.mouseDown, { args: e });\n };\n RichTextEditor.prototype.preventImgResize = function (e) {\n if (e.target.nodeName.toLocaleLowerCase() === 'img') {\n e.preventDefault();\n }\n };\n RichTextEditor.prototype.preventDefaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().addEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', false, 'false');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', false, 'false');\n }\n };\n RichTextEditor.prototype.defaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().removeEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', true, 'true');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', true, 'true');\n }\n };\n RichTextEditor.prototype.resizeHandler = function () {\n var isExpand = (this.toolbarSettings.type === ToolbarType.Expand) ? true : false;\n this.setContentHeight('', isExpand);\n };\n RichTextEditor.prototype.scrollHandler = function (e) {\n this.notify(events.scroll, { args: e });\n };\n RichTextEditor.prototype.editAreaClickHandler = function (e) {\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n };\n RichTextEditor.prototype.focusHandler = function (e) {\n if (!this.isRTE || this.isFocusOut) {\n this.isRTE = this.isFocusOut ? false : true;\n this.isFocusOut = false;\n addClass([this.element], [classes.CLS_FOCUS]);\n if (this.editorMode === 'HTML') {\n this.cloneValue = (this.inputElement.innerHTML === '


    ') ? null : this.inputElement.innerHTML;\n }\n else {\n this.cloneValue = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n if (document.activeElement === this.element) {\n this.contentModule.getEditPanel().focus();\n }\n this.preventDefaultResize(e);\n this.trigger('focus');\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n }\n };\n RichTextEditor.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!this.element.contains(e.target) && document !== e.target && !closest(target, '.' + classes.CLS_RTE) &&\n !closest(target, '.' + classes.CLS_RTE_ELEMENTS)) {\n this.isBlur = true;\n this.isRTE = false;\n }\n this.notify(events.docClick, { args: e });\n };\n RichTextEditor.prototype.blurHandler = function (e) {\n var trg = e.relatedTarget;\n if (trg) {\n if (closest(trg, '.' + classes.CLS_RTE)) {\n this.isBlur = false;\n }\n else if (closest(trg, '.' + classes.CLS_RTE_ELEMENTS)) {\n this.isBlur = false;\n }\n else {\n this.isBlur = true;\n trg = null;\n }\n }\n if (this.isBlur && isNOU(trg)) {\n removeClass([this.element], [classes.CLS_FOCUS]);\n this.notify(events.focusChange, {});\n if (this.editorMode === 'HTML') {\n this.value = (this.inputElement.innerHTML === '


    ') ? null : this.inputElement.innerHTML;\n }\n else {\n this.value = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n this.valueContainer.value = this.value;\n this.notify(events.toolbarRefresh, { args: e, documentNode: document });\n this.invokeChangeEvent();\n this.isFocusOut = true;\n this.isBlur = false;\n dispatchEvent(this.valueContainer, 'focusout');\n this.defaultResize(e);\n this.trigger('blur');\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n }\n else {\n this.isRTE = true;\n }\n };\n RichTextEditor.prototype.invokeChangeEvent = function () {\n var eventArgs = {\n value: this.value\n };\n if (this.value !== this.cloneValue) {\n this.trigger('change', eventArgs);\n this.cloneValue = this.value;\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.wireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.unWireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n };\n RichTextEditor.prototype.resetHandler = function () {\n this.value = null;\n };\n RichTextEditor.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.inputElement, {\n keyAction: this.keyDown.bind(this), keyConfigs: this.formatter.keyConfig, eventName: 'keydown'\n });\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetHandler, this);\n }\n EventHandler.add(this.inputElement, 'keyup', this.keyUp, this);\n EventHandler.add(this.inputElement, 'paste', this.onPaste, this);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUp, this);\n EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.inputElement, 'click', this.editAreaClickHandler, this);\n this.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown, this);\n this.element.addEventListener('focusin', this.focusHandler.bind(this), true);\n this.element.addEventListener('focusout', this.blurHandler.bind(this), true);\n window.addEventListener('resize', this.resizeHandler.bind(this), true);\n if (this.iframeSettings.enable) {\n EventHandler.add(this.inputElement, 'focusin', this.focusHandler, this);\n EventHandler.add(this.inputElement, 'focusout', this.blurHandler, this);\n EventHandler.add(this.inputElement.ownerDocument, 'mousedown', this.onIframeMouseDown, this);\n }\n this.wireScrollElementsEvents();\n };\n RichTextEditor.prototype.onIframeMouseDown = function (e) {\n this.isBlur = false;\n this.notify(events.iframeMouseDown, e);\n };\n RichTextEditor.prototype.editorKeyDown = function (e) {\n switch (e.event.action) {\n case 'copy':\n this.onCopy();\n break;\n case 'cut':\n this.onCut();\n break;\n }\n if (e.callBack && (e.event.action === 'copy' || e.event.action === 'cut')) {\n e.callBack({\n requestType: e.event.action,\n editorMode: 'HTML',\n event: e.event\n });\n }\n };\n RichTextEditor.prototype.unWireEvents = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetHandler);\n }\n EventHandler.remove(this.inputElement, 'keyup', this.keyUp);\n EventHandler.remove(this.inputElement, 'paste', this.onPaste);\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUp);\n EventHandler.remove(this.inputElement, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.inputElement, 'click', this.editAreaClickHandler);\n if (this.formatter) {\n this.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown);\n }\n this.element.removeEventListener('focusin', this.focusHandler.bind(this), false);\n this.element.removeEventListener('focusout', this.blurHandler.bind(this), false);\n window.removeEventListener('resize', this.resizeHandler.bind(this), false);\n if (this.iframeSettings.enable) {\n EventHandler.remove(this.inputElement, 'focusin', this.focusHandler);\n EventHandler.remove(this.inputElement, 'focusout', this.blurHandler);\n EventHandler.remove(this.inputElement.ownerDocument, 'mousedown', this.onIframeMouseDown);\n }\n this.unWireScrollElementsEvents();\n };\n __decorate([\n Complex({}, ToolbarSettings)\n ], RichTextEditor.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Complex({}, QuickToolbarSettings)\n ], RichTextEditor.prototype, \"quickToolbarSettings\", void 0);\n __decorate([\n Complex({}, IFrameSettings)\n ], RichTextEditor.prototype, \"iframeSettings\", void 0);\n __decorate([\n Complex({}, ImageSettings)\n ], RichTextEditor.prototype, \"insertImageSettings\", void 0);\n __decorate([\n Complex({}, TableSettings)\n ], RichTextEditor.prototype, \"tableSettings\", void 0);\n __decorate([\n Property(0)\n ], RichTextEditor.prototype, \"floatingToolbarOffset\", void 0);\n __decorate([\n Complex({}, InlineMode)\n ], RichTextEditor.prototype, \"inlineMode\", void 0);\n __decorate([\n Property('100%')\n ], RichTextEditor.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property({})\n ], RichTextEditor.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], RichTextEditor.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableHtmlEncode\", void 0);\n __decorate([\n Property('auto')\n ], RichTextEditor.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"value\", void 0);\n __decorate([\n Property(30)\n ], RichTextEditor.prototype, \"undoRedoSteps\", void 0);\n __decorate([\n Property(300)\n ], RichTextEditor.prototype, \"undoRedoTimer\", void 0);\n __decorate([\n Property('HTML')\n ], RichTextEditor.prototype, \"editorMode\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"keyConfig\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"showCharCount\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableTabKey\", void 0);\n __decorate([\n Property(-1)\n ], RichTextEditor.prototype, \"maxLength\", void 0);\n __decorate([\n Complex({}, Format)\n ], RichTextEditor.prototype, \"format\", void 0);\n __decorate([\n Complex({}, FontFamily)\n ], RichTextEditor.prototype, \"fontFamily\", void 0);\n __decorate([\n Complex({}, FontSize)\n ], RichTextEditor.prototype, \"fontSize\", void 0);\n __decorate([\n Complex({}, FontColor)\n ], RichTextEditor.prototype, \"fontColor\", void 0);\n __decorate([\n Complex({}, BackgroundColor)\n ], RichTextEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"valueTemplate\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizeStop\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"formatter\", void 0);\n RichTextEditor = __decorate([\n NotifyPropertyChanges\n ], RichTextEditor);\n return RichTextEditor;\n}(Component));\nexport { RichTextEditor };\n","import * as index from '@syncfusion/ej2-richtexteditor';\nindex.RichTextEditor.Inject( index.Toolbar,index.Link,index.Image,index.Count,index.QuickToolbar,index.HtmlEditor,index.MarkdownEditor,index.Table);\nexport * from '@syncfusion/ej2-richtexteditor';\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/** @hidden */\nexport var dragStart = 'dragStart';\n/** @hidden */\nexport var drag = 'drag';\n/** @hidden */\nexport var dragStop = 'dragStop';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var resizing = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\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/** @hidden */\nexport var tapHoldReady = 'tap-hold-ready';\n","/**\n * CSS Constants\n */\n/** @hidden */\nexport var ROOT = 'e-schedule';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DEVICE_CLASS = 'e-device';\n/** @hidden */\nexport var ICON = 'e-icons';\n/** @hidden */\nexport var ENABLE_CLASS = 'e-enable';\n/** @hidden */\nexport var DISABLE_CLASS = 'e-disable';\n/** @hidden */\nexport var TABLE_CONTAINER_CLASS = 'e-table-container';\n/** @hidden */\nexport var SCHEDULE_TABLE_CLASS = 'e-schedule-table';\n/** @hidden */\nexport var ALLDAY_CELLS_CLASS = 'e-all-day-cells';\n/** @hidden */\nexport var HEADER_POPUP_CLASS = 'e-header-popup';\n/** @hidden */\nexport var HEADER_CALENDAR_CLASS = 'e-header-calendar';\n/** @hidden */\nexport var ALLDAY_ROW_CLASS = 'e-all-day-row';\n/** @hidden */\nexport var CONTENT_TABLE_CLASS = 'e-content-table';\n/** @hidden */\nexport var WORK_CELLS_CLASS = 'e-work-cells';\n/** @hidden */\nexport var WORK_HOURS_CLASS = 'e-work-hours';\n/** @hidden */\nexport var POPUP_OPEN = 'e-popup-open';\n/** @hidden */\nexport var DATE_HEADER_WRAP_CLASS = 'e-date-header-wrap';\n/** @hidden */\nexport var DATE_HEADER_CONTAINER_CLASS = 'e-date-header-container';\n/** @hidden */\nexport var HEADER_CELLS_CLASS = 'e-header-cells';\n/** @hidden */\nexport var WORKDAY_CLASS = 'e-work-days';\n/** @hidden */\nexport var OTHERMONTH_CLASS = 'e-other-month';\n/** @hidden */\nexport var CURRENT_DAY_CLASS = 'e-current-day';\n/** @hidden */\nexport var CURRENTDATE_CLASS = 'e-current-date';\n/** @hidden */\nexport var CURRENT_PANEL_CLASS = 'e-current-panel';\n/** @hidden */\nexport var PREVIOUS_PANEL_CLASS = 'e-previous-panel';\n/** @hidden */\nexport var NEXT_PANEL_CLASS = 'e-next-panel';\n/** @hidden */\nexport var TRANSLATE_CLASS = 'e-translate';\n/** @hidden */\nexport var LEFT_INDENT_CLASS = 'e-left-indent';\n/** @hidden */\nexport var LEFT_INDENT_WRAP_CLASS = 'e-left-indent-wrap';\n/** @hidden */\nexport var EVENT_TABLE_CLASS = 'e-event-table';\n/** @hidden */\nexport var RESOURCE_LEFT_TD_CLASS = 'e-resource-left-td';\n/** @hidden */\nexport var RESOURCE_GROUP_CELLS_CLASS = 'e-resource-group-cells';\n/** @hidden */\nexport var RESOURCE_TEXT_CLASS = 'e-resource-text';\n/** @hidden */\nexport var RESOURCE_COLUMN_WRAP_CLASS = 'e-resource-column-wrap';\n/** @hidden */\nexport var RESOURCE_COLUMN_TABLE_CLASS = 'e-resource-column-table';\n/** @hidden */\nexport var RESOURCE_CHILD_CLASS = 'e-child-node';\n/** @hidden */\nexport var RESOURCE_PARENT_CLASS = 'e-parent-node';\n/** @hidden */\nexport var RESOURCE_EXPAND_CLASS = 'e-resource-expand';\n/** @hidden */\nexport var RESOURCE_COLLAPSE_CLASS = 'e-resource-collapse';\n/** @hidden */\nexport var RESOURCE_TREE_ICON_CLASS = 'e-resource-tree-icon';\n/** @hidden */\nexport var RESOURCE_CELLS_CLASS = 'e-resource-cells';\n/** @hidden */\nexport var TIME_CELLS_WRAP_CLASS = 'e-time-cells-wrap';\n/** @hidden */\nexport var TIME_CELLS_CLASS = 'e-time-cells';\n/** @hidden */\nexport var ALTERNATE_CELLS_CLASS = 'e-alternate-cells';\n/** @hidden */\nexport var CURRENT_TIME_CLASS = 'e-current-time';\n/** @hidden */\nexport var CURRENT_TIMELINE_CLASS = 'e-current-timeline';\n/** @hidden */\nexport var PREVIOUS_TIMELINE_CLASS = 'e-previous-timeline';\n/** @hidden */\nexport var HIDE_CHILDS_CLASS = 'e-hide-childs';\n/** @hidden */\nexport var SCROLL_CONTAINER_CLASS = 'e-scroll-container';\n/** @hidden */\nexport var WRAPPER_CLASS = 'e-wrapper';\n/** @hidden */\nexport var TIMELINE_WRAPPER_CLASS = 'e-timeline-wrapper';\n/** @hidden */\nexport var APPOINTMENT_WRAPPER_CLASS = 'e-appointment-wrapper';\n/** @hidden */\nexport var DAY_WRAPPER_CLASS = 'e-day-wrapper';\n/** @hidden */\nexport var TOOLBAR_CONTAINER = 'e-schedule-toolbar-container';\n/** @hidden */\nexport var RESOURCE_TOOLBAR_CONTAINER = 'e-schedule-resource-toolbar-container';\n/** @hidden */\nexport var HEADER_TOOLBAR = 'e-schedule-toolbar';\n/** @hidden */\nexport var RESOURCE_HEADER_TOOLBAR = 'e-schedule-resource-toolbar';\n/** @hidden */\nexport var SELECTED_CELL_CLASS = 'e-selected-cell';\n/** @hidden */\nexport var WEEK_NUMBER_WRAPPER_CLASS = 'e-week-number-wrapper';\n/** @hidden */\nexport var WEEK_NUMBER_CLASS = 'e-week-number';\n/** @hidden */\nexport var APPOINTMENT_WRAP_CLASS = 'e-appointment-wrap';\n/** @hidden */\nexport var WRAPPER_CONTAINER_CLASS = 'e-wrapper-container';\n/** @hidden */\nexport var APPOINTMENT_CONTAINER_CLASS = 'e-appointment-container';\n/** @hidden */\nexport var APPOINTMENT_CLASS = 'e-appointment';\n/** @hidden */\nexport var APPOINTMENT_BORDER = 'e-appointment-border';\n/** @hidden */\nexport var APPOINTMENT_DETAILS = 'e-appointment-details';\n/** @hidden */\nexport var SUBJECT_WRAP = 'e-subject-wrap';\n/** @hidden */\nexport var RESOURCE_NAME = 'e-resource-name';\n/** @hidden */\nexport var APPOINTMENT_TIME = 'e-time';\n/** @hidden */\nexport var TABLE_WRAP_CLASS = 'e-table-wrap';\n/** @hidden */\nexport var OUTER_TABLE_CLASS = 'e-outer-table';\n/** @hidden */\nexport var CONTENT_WRAP_CLASS = 'e-content-wrap';\n/** @hidden */\nexport var AGENDA_CELLS_CLASS = 'e-agenda-cells';\n/** @hidden */\nexport var AGENDA_CURRENT_DAY_CLASS = 'e-current-day';\n/** @hidden */\nexport var AGENDA_SELECTED_CELL = 'e-active-appointment-agenda';\n/** @hidden */\nexport var AGENDA_MONTH_HEADER_CLASS = 'e-month-header';\n/** @hidden */\nexport var AGENDA_HEADER_CLASS = 'e-day-date-header';\n/** @hidden */\nexport var AGENDA_RESOURCE_CLASS = 'e-resource-column';\n/** @hidden */\nexport var AGENDA_DATE_CLASS = 'e-date-column';\n/** @hidden */\nexport var NAVIGATE_CLASS = 'e-navigate';\n/** @hidden */\nexport var DATE_HEADER_CLASS = 'e-date-header';\n/** @hidden */\nexport var AGENDA_DAY_BORDER_CLASS = 'e-day-border';\n/** @hidden */\nexport var DATE_BORDER_CLASS = 'e-date-border';\n/** @hidden */\nexport var AGENDA_DAY_PADDING_CLASS = 'e-day-padding';\n/** @hidden */\nexport var DATE_TIME_CLASS = 'e-date-time';\n/** @hidden */\nexport var DATE_TIME_WRAPPER_CLASS = 'e-date-time-wrapper';\n/** @hidden */\nexport var AGENDA_EMPTY_EVENT_CLASS = 'e-empty-event';\n/** @hidden */\nexport var AGENDA_NO_EVENT_CLASS = 'e-no-event';\n/** @hidden */\nexport var APPOINTMENT_INDICATOR_CLASS = 'e-appointment-indicator';\n/** @hidden */\nexport var EVENT_INDICATOR_CLASS = 'e-indicator';\n/** @hidden */\nexport var EVENT_ICON_UP_CLASS = 'e-up-icon';\n/** @hidden */\nexport var EVENT_ICON_DOWN_CLASS = 'e-down-icon';\n/** @hidden */\nexport var EVENT_ICON_LEFT_CLASS = 'e-left-icon';\n/** @hidden */\nexport var EVENT_ICON_RIGHT_CLASS = 'e-right-icon';\n/** @hidden */\nexport var EVENT_ACTION_CLASS = 'e-event-action';\n/** @hidden */\nexport var CLONE_ELEMENT_CLASS = 'e-event-clone';\n/** @hidden */\nexport var MONTH_CLONE_ELEMENT_CLASS = 'e-month-event';\n/** @hidden */\nexport var CLONE_TIME_INDICATOR_CLASS = 'e-clone-time-indicator';\n/** @hidden */\nexport var DRAG_CLONE_CLASS = 'e-drag-clone';\n/** @hidden */\nexport var EVENT_RESIZE_CLASS = 'e-event-resize';\n/** @hidden */\nexport var RESIZE_CLONE_CLASS = 'e-resize-clone';\n/** @hidden */\nexport var LEFT_RESIZE_HANDLER = 'e-left-handler';\n/** @hidden */\nexport var RIGHT_RESIZE_HANDLER = 'e-right-handler';\n/** @hidden */\nexport var TOP_RESIZE_HANDLER = 'e-top-handler';\n/** @hidden */\nexport var BOTTOM_RESIZE_HANDLER = 'e-bottom-handler';\n/** @hidden */\nexport var EVENT_RECURRENCE_ICON_CLASS = 'e-recurrence-icon';\n/** @hidden */\nexport var EVENT_RECURRENCE_EDIT_ICON_CLASS = 'e-recurrence-edit-icon';\n/** @hidden */\nexport var HEADER_ROW_CLASS = 'e-header-row';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_WRAPPER_CLASS = 'e-all-day-appointment-wrapper';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_CLASS = 'e-all-day-appointment';\n/** @hidden */\nexport var EVENT_COUNT_CLASS = 'e-appointment-hide';\n/** @hidden */\nexport var ROW_COUNT_WRAPPER_CLASS = 'e-row-count-wrapper';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_SECTION_CLASS = 'e-all-day-appointment-section';\n/** @hidden */\nexport var APPOINTMENT_ROW_EXPAND_CLASS = 'e-appointment-expand';\n/** @hidden */\nexport var APPOINTMENT_ROW_COLLAPSE_CLASS = 'e-appointment-collapse';\n/** @hidden */\nexport var MORE_INDICATOR_CLASS = 'e-more-indicator';\n/** @hidden */\nexport var CELL_POPUP_CLASS = 'e-cell-popup';\n/** @hidden */\nexport var EVENT_POPUP_CLASS = 'e-event-popup';\n/** @hidden */\nexport var MULTIPLE_EVENT_POPUP_CLASS = 'e-multiple-event-popup';\n/** @hidden */\nexport var POPUP_HEADER_CLASS = 'e-popup-header';\n/** @hidden */\nexport var POPUP_HEADER_ICON_WRAPPER = 'e-header-icon-wrapper';\n/** @hidden */\nexport var POPUP_CONTENT_CLASS = 'e-popup-content';\n/** @hidden */\nexport var POPUP_FOOTER_CLASS = 'e-popup-footer';\n/** @hidden */\nexport var DATE_TIME_DETAILS_CLASS = 'e-date-time-details';\n/** @hidden */\nexport var RECURRENCE_SUMMARY_CLASS = 'e-recurrence-summary';\n/** @hidden */\nexport var QUICK_POPUP_EVENT_DETAILS_CLASS = 'e-event-details';\n/** @hidden */\nexport var EVENT_CREATE_CLASS = 'e-event-create';\n/** @hidden */\nexport var EDIT_EVENT_CLASS = 'e-event-edit';\n/** @hidden */\nexport var DELETE_EVENT_CLASS = 'e-event-delete';\n/** @hidden */\nexport var TEXT_ELLIPSIS = 'e-text-ellipsis';\n/** @hidden */\nexport var MORE_POPUP_WRAPPER_CLASS = 'e-more-popup-wrapper';\n/** @hidden */\nexport var MORE_EVENT_POPUP_CLASS = 'e-more-event-popup';\n/** @hidden */\nexport var MORE_EVENT_HEADER_CLASS = 'e-more-event-header';\n/** @hidden */\nexport var MORE_EVENT_DATE_HEADER_CLASS = 'e-more-event-date-header';\n/** @hidden */\nexport var MORE_EVENT_HEADER_DAY_CLASS = 'e-header-day';\n/** @hidden */\nexport var MORE_EVENT_HEADER_DATE_CLASS = 'e-header-date';\n/** @hidden */\nexport var MORE_EVENT_CLOSE_CLASS = 'e-more-event-close';\n/** @hidden */\nexport var MORE_EVENT_CONTENT_CLASS = 'e-more-event-content';\n/** @hidden */\nexport var MORE_EVENT_WRAPPER_CLASS = 'e-more-appointment-wrapper';\n/** @hidden */\nexport var QUICK_DIALOG_CLASS = 'e-quick-dialog';\n/** @hidden */\nexport var QUICK_DIALOG_EDIT_EVENT_CLASS = 'e-quick-dialog-edit-event';\n/** @hidden */\nexport var QUICK_DIALOG_EDIT_SERIES_CLASS = 'e-quick-dialog-edit-series';\n/** @hidden */\nexport var QUICK_DIALOG_DELETE_CLASS = 'e-quick-dialog-delete';\n/** @hidden */\nexport var QUICK_DIALOG_CANCEL_CLASS = 'e-quick-dialog-cancel';\n/** @hidden */\nexport var QUICK_DIALOG_ALERT_BTN_CLASS = 'e-quick-dialog-alert-btn';\n/** @hidden */\nexport var EVENT_WINDOW_DIALOG_CLASS = 'e-schedule-dialog';\n/** @hidden */\nexport var FORM_CONTAINER_CLASS = 'e-form-container';\n/** @hidden */\nexport var FORM_CLASS = 'e-schedule-form';\n/** @hidden */\nexport var EVENT_WINDOW_ALLDAY_TZ_DIV_CLASS = 'e-all-day-time-zone-row';\n/** @hidden */\nexport var EVENT_WINDOW_ALL_DAY_CLASS = 'e-all-day';\n/** @hidden */\nexport var TIME_ZONE_CLASS = 'e-time-zone';\n/** @hidden */\nexport var TIME_ZONE_ICON_CLASS = 'e-time-zone-icon';\n/** @hidden */\nexport var TIME_ZONE_DETAILS_CLASS = 'e-time-zone-details';\n/** @hidden */\nexport var EVENT_WINDOW_REPEAT_DIV_CLASS = 'e-repeat-parent-row';\n/** @hidden */\nexport var EVENT_WINDOW_REPEAT_CLASS = 'e-repeat';\n/** @hidden */\nexport var EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS = 'e-title-location-row';\n/** @hidden */\nexport var SUBJECT_CLASS = 'e-subject';\n/** @hidden */\nexport var LOCATION_CLASS = 'e-location';\n/** @hidden */\nexport var LOCATION_ICON_CLASS = 'e-location-icon';\n/** @hidden */\nexport var LOCATION_DETAILS_CLASS = 'e-location-details';\n/** @hidden */\nexport var EVENT_WINDOW_START_END_DIV_CLASS = 'e-start-end-row';\n/** @hidden */\nexport var EVENT_WINDOW_START_CLASS = 'e-start';\n/** @hidden */\nexport var EVENT_WINDOW_END_CLASS = 'e-end';\n/** @hidden */\nexport var EVENT_WINDOW_RESOURCES_DIV_CLASS = 'e-resources-row';\n/** @hidden */\nexport var DESCRIPTION_CLASS = 'e-description';\n/** @hidden */\nexport var DESCRIPTION_ICON_CLASS = 'e-description-icon';\n/** @hidden */\nexport var DESCRIPTION_DETAILS_CLASS = 'e-description-details';\n/** @hidden */\nexport var EVENT_WINDOW_TIME_ZONE_DIV_CLASS = 'e-time-zone-row';\n/** @hidden */\nexport var EVENT_WINDOW_START_TZ_CLASS = 'e-start-time-zone';\n/** @hidden */\nexport var EVENT_WINDOW_END_TZ_CLASS = 'e-end-time-zone';\n/** @hidden */\nexport var EVENT_WINDOW_BACK_ICON_CLASS = 'e-back-icon';\n/** @hidden */\nexport var EVENT_WINDOW_SAVE_ICON_CLASS = 'e-save-icon';\n/** @hidden */\nexport var EVENT_WINDOW_DELETE_BUTTON_CLASS = 'e-event-delete';\n/** @hidden */\nexport var EVENT_WINDOW_CANCEL_BUTTON_CLASS = 'e-event-cancel';\n/** @hidden */\nexport var EVENT_WINDOW_SAVE_BUTTON_CLASS = 'e-event-save';\n/** @hidden */\nexport var EVENT_WINDOW_DIALOG_PARENT_CLASS = 'e-dialog-parent';\n/** @hidden */\nexport var EVENT_WINDOW_TITLE_TEXT_CLASS = 'e-title-text';\n/** @hidden */\nexport var EVENT_WINDOW_ICON_DISABLE_CLASS = 'e-icon-disable';\n/** @hidden */\nexport var EDIT_CLASS = 'e-edit';\n/** @hidden */\nexport var EDIT_ICON_CLASS = 'e-edit-icon';\n/** @hidden */\nexport var DELETE_CLASS = 'e-delete';\n/** @hidden */\nexport var DELETE_ICON_CLASS = 'e-delete-icon';\n/** @hidden */\nexport var CLOSE_CLASS = 'e-close';\n/** @hidden */\nexport var CLOSE_ICON_CLASS = 'e-close-icon';\n/** @hidden */\nexport var ERROR_VALIDATION_CLASS = 'e-schedule-error';\n/** @hidden */\nexport var EVENT_TOOLTIP_ROOT_CLASS = 'e-schedule-event-tooltip';\n/** @hidden */\nexport var ALLDAY_ROW_ANIMATE_CLASS = 'e-animate';\n/** @hidden */\nexport var TIMESCALE_DISABLE = 'e-timescale-disable';\n/** @hidden */\nexport var DISABLE_DATE = 'e-disable-date';\n/** @hidden */\nexport var HIDDEN_CLASS = 'e-hidden';\n/** @hidden */\nexport var POPUP_WRAPPER_CLASS = 'e-quick-popup-wrapper';\n/** @hidden */\nexport var POPUP_TABLE_CLASS = 'e-popup-table';\n/** @hidden */\nexport var RESOURCE_MENU = 'e-resource-menu';\n/** @hidden */\nexport var RESOURCE_MENU_ICON = 'e-icon-menu';\n/** @hidden */\nexport var RESOURCE_LEVEL_TITLE = 'e-resource-level-title';\n/** @hidden */\nexport var RESOURCE_TREE = 'e-resource-tree';\n/** @hidden */\nexport var RESOURCE_TREE_POPUP_OVERLAY = 'e-resource-tree-popup-overlay';\n/** @hidden */\nexport var RESOURCE_TREE_POPUP = 'e-resource-tree-popup';\n/** @hidden */\nexport var RESOURCE_CLASS = 'e-resource';\n/** @hidden */\nexport var RESOURCE_ICON_CLASS = 'e-resource-icon';\n/** @hidden */\nexport var RESOURCE_DETAILS_CLASS = 'e-resource-details';\n/** @hidden */\nexport var DATE_TIME_ICON_CLASS = 'e-date-time-icon';\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 = { requestType: 'toolbarItemRendering', items: items };\n this.parent.trigger(events.actionBegin, args);\n this.toolbarObj = new Toolbar({\n items: args.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 var prevNavEle = this.toolbarObj.element.querySelector('.e-prev');\n if (prevNavEle) {\n prevNavEle.firstChild.setAttribute('title', this.l10n.getConstant('previous'));\n }\n var nextNavEle = this.toolbarObj.element.querySelector('.e-next');\n if (nextNavEle) {\n nextNavEle.firstChild.setAttribute('title', this.l10n.getConstant('next'));\n }\n this.updateActiveView();\n this.parent.trigger(events.actionComplete, { requestType: 'toolBarItemRendered', items: this.toolbarObj.items });\n };\n HeaderRenderer.prototype.updateItems = function () {\n if (this.toolbarObj) {\n var items = this.getItems();\n var args = { requestType: 'toolbarItemRendering', items: items };\n this.parent.trigger(events.actionBegin, args);\n this.toolbarObj.items = args.items;\n this.toolbarObj.dataBind();\n this.parent.trigger(events.actionComplete, {\n requestType: 'toolBarItemRendered',\n items: this.toolbarObj.items\n });\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.updateActiveView = function () {\n var selEle = this.toolbarObj.element.querySelectorAll('.e-views');\n removeClass(selEle, ['e-active-view']);\n if (selEle.length > 0 && selEle[this.parent.viewIndex]) {\n addClass([selEle[this.parent.viewIndex]], ['e-active-view']);\n }\n };\n HeaderRenderer.prototype.updateDateRange = function (text) {\n var selEle = this.toolbarObj.element.querySelector('.e-date-range');\n if (selEle) {\n selEle.setAttribute('aria-label', text);\n selEle.querySelector('.e-tbar-btn-text').innerHTML = text;\n this.toolbarObj.refreshOverflow();\n }\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(), null)) :\n items.push(this.getItemObject(item.option.toLowerCase(), item.displayName));\n }\n }\n return items;\n };\n HeaderRenderer.prototype.getItemObject = function (viewName, displayName) {\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',\n text: displayName || this.l10n.getConstant('day'), cssClass: 'e-views e-day'\n };\n break;\n case 'week':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-week',\n text: displayName || this.l10n.getConstant('week'), cssClass: 'e-views e-week'\n };\n break;\n case 'workweek':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-workweek',\n text: displayName || this.l10n.getConstant('workWeek'), cssClass: 'e-views e-work-week'\n };\n break;\n case 'month':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-month',\n text: displayName || this.l10n.getConstant('month'), cssClass: 'e-views 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-views e-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-views e-month-agenda'\n };\n break;\n case 'timelineday':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-timeline-day',\n text: displayName || this.l10n.getConstant('timelineDay'), cssClass: 'e-views e-timeline-day'\n };\n break;\n case 'timelineweek':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-timeline-week',\n text: displayName || this.l10n.getConstant('timelineWeek'), cssClass: 'e-views e-timeline-week'\n };\n break;\n case 'timelineworkweek':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-timeline-workweek',\n text: displayName || this.l10n.getConstant('timelineWorkWeek'), cssClass: 'e-views e-timeline-work-week'\n };\n break;\n case 'timelinemonth':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-timeline-month',\n text: displayName || this.l10n.getConstant('timelineMonth'), cssClass: 'e-views e-timeline-month'\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.calculateViewIndex = function (args) {\n var target = closest(args.originalEvent.target, '.e-views');\n var views = [].slice.call(this.element.querySelectorAll('.e-views'));\n return views.indexOf(target);\n };\n HeaderRenderer.prototype.toolbarClickHandler = function (args) {\n if (!args.item) {\n return;\n }\n var strClass = args.item.cssClass.replace('e-views ', '');\n switch (strClass) {\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, undefined, this.calculateViewIndex(args));\n break;\n case 'e-week':\n this.parent.changeView('Week', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-work-week':\n this.parent.changeView('WorkWeek', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-month':\n this.parent.changeView('Month', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-agenda':\n this.parent.changeView('Agenda', args.originalEvent, undefined, this.calculateViewIndex(args));\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, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-day':\n this.parent.changeView('TimelineDay', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-week':\n this.parent.changeView('TimelineWeek', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-work-week':\n this.parent.changeView('TimelineWorkWeek', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-month':\n this.parent.changeView('TimelineMonth', args.originalEvent, undefined, this.calculateViewIndex(args));\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 var isSameTime = this.parent.activeCellsData.startTime.getTime() === this.parent.activeCellsData.endTime.getTime();\n if (this.parent.activeCellsData && !isSameTime) {\n data = this.parent.activeCellsData;\n }\n else {\n var interval = this.parent.activeViewOptions.timeScale.interval;\n var slotCount = this.parent.activeViewOptions.timeScale.slotCount;\n var msInterval = (interval * util.MS_PER_MINUTE) / slotCount;\n var startTime = new Date(this.parent.selectedDate.getTime());\n startTime.setHours(new Date().getHours(), (Math.round(startTime.getMinutes() / msInterval) * msInterval), 0);\n var endTime = new Date(new Date(startTime.getTime()).setMilliseconds(startTime.getMilliseconds() + msInterval));\n data = { startTime: startTime, endTime: endTime, isAllDay: false };\n }\n this.parent.eventWindow.openEditor(extend(data, { cancel: false, event: args.originalEvent }), '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.toolbarObj.element;\n };\n HeaderRenderer.prototype.updateHeaderItems = function (classType) {\n var prevNavEle = this.toolbarObj.element.querySelector('.e-prev');\n var nextNavEle = this.toolbarObj.element.querySelector('.e-next');\n var dateRangeEle = this.toolbarObj.element.querySelector('.e-date-range');\n if (prevNavEle) {\n (classType === 'add') ? addClass([prevNavEle], cls.HIDDEN_CLASS) : removeClass([prevNavEle], cls.HIDDEN_CLASS);\n }\n if (nextNavEle) {\n (classType === 'add') ? addClass([nextNavEle], cls.HIDDEN_CLASS) : removeClass([nextNavEle], cls.HIDDEN_CLASS);\n }\n if (dateRangeEle) {\n (classType === 'add') ? addClass([dateRangeEle], cls.TEXT_ELLIPSIS) : removeClass([dateRangeEle], cls.TEXT_ELLIPSIS);\n }\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.headerPopup) {\n this.headerPopup.destroy();\n }\n if (this.headerCalendar) {\n this.headerCalendar.destroy();\n }\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 /**\n * @hidden\n */\n Scroll.prototype.setDimensions = function () {\n this.setWidth();\n this.setHeight();\n var data = { cssProperties: this.parent.getCssProperties(), module: this.getModuleName() };\n this.parent.notify(scrollUiUpdate, data);\n };\n /**\n * @hidden\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, Browser } 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' || this.parent.uiStateValues.action ||\n (e.originalEvent && (e.originalEvent.target.classList.contains(cls.APPOINTMENT_CLASS) ||\n closest(e.originalEvent.target, '.' + cls.APPOINTMENT_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 || this.parent.uiStateValues.action) {\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 * (Browser.isDevice ? 6 : 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 if (this.parent.isAdaptive) {\n var event_1 = e.originalEvent;\n this.parent.notify(events.tapHoldReady, { event: event_1 });\n }\n return;\n }\n target = closest(e.originalEvent.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.'\n + cls.HEADER_CELLS_CLASS);\n if (!isNullOrUndefined(target)) {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n if (!this.parent.activeViewOptions.readonly) {\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n }\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 this.parent.activeView.generateColumnLevels();\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 = this.getClosestCell(e.event);\n if (this.parent.activeViewOptions.readonly || this.parent.currentView === 'MonthAgenda' || !this.initialTarget) {\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 EventHandler.add(allDayRow, 'mousemove', this.onMouseSelection, this);\n EventHandler.add(allDayRow, 'mouseup', this.onMoveup, this);\n }\n };\n KeyboardInteraction.prototype.onMouseSelection = function (e) {\n var target = this.getClosestCell(e);\n if (target) {\n this.selectCells(true, target);\n }\n };\n KeyboardInteraction.prototype.getClosestCell = function (e) {\n return closest(e.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS);\n };\n KeyboardInteraction.prototype.onAppointmentSelection = function (e) {\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS);\n 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 EventHandler.remove(allDayRow, 'mousemove', this.onMouseSelection);\n EventHandler.remove(allDayRow, 'mouseup', this.onMoveup);\n }\n };\n KeyboardInteraction.prototype.processEnter = function (e) {\n if (this.parent.activeViewOptions.readonly || this.isPreventAction(e)) {\n return;\n }\n var target = (e.target);\n if (closest(target, '.' + cls.POPUP_WRAPPER_CLASS)) {\n if (target.classList.contains(cls.QUICK_POPUP_EVENT_DETAILS_CLASS) ||\n target.classList.contains(cls.EVENT_CREATE_CLASS) ||\n target.classList.contains(cls.EDIT_EVENT_CLASS) ||\n target.classList.contains(cls.DELETE_EVENT_CLASS) ||\n target.classList.contains(cls.CLOSE_CLASS)) {\n target.click();\n e.preventDefault();\n }\n else if (target.classList.contains(cls.SUBJECT_CLASS)) {\n this.parent.element.querySelector('.' + cls.EVENT_CREATE_CLASS).click();\n e.preventDefault();\n }\n return;\n }\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(this.parent.getNavigateView());\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 if (this.parent.activeView.isTimelineView()) {\n var cell = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS +\n ' tr:not(.' + cls.HIDDEN_CLASS + ') .' + cls.WORK_CELLS_CLASS + ':not(.' + cls.RESOURCE_GROUP_CELLS_CLASS + ')');\n this.selectCells(false, cell);\n }\n else {\n this.selectCells(false, this.parent.getWorkCellElements()[0]);\n }\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 initialId = void 0;\n var selectedCells = this.getCells(this.isInverseTableSelect(), this.initialTarget, target);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n initialId = this.initialTarget.getAttribute('data-group-index');\n var resourceSelectedCells = [];\n for (var i = 0; i < selectedCells.length; i++) {\n if (selectedCells[i].getAttribute('data-group-index') === initialId) {\n resourceSelectedCells.push(selectedCells[i]);\n }\n }\n selectedCells = resourceSelectedCells;\n }\n this.selectedCells = selectedCells;\n if (selectedCells.length > 2 && !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayCells = this.getAllDayCells(selectedCells);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resourceAllDayCells = [];\n for (var i = 0; i < allDayCells.length; i++) {\n if (allDayCells[i].getAttribute('data-group-index') === initialId) {\n resourceAllDayCells.push(allDayCells[i]);\n }\n }\n allDayCells = resourceAllDayCells;\n }\n selectedCells = selectedCells.concat(allDayCells);\n }\n if ((target.getAttribute('data-group-index') !== initialId) && this.parent.activeViewOptions.group.resources.length > 0) {\n target = this.selectedCells[this.selectedCells.length - 1];\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) {\n var appointments = this.getAppointmentElements();\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]);\n nextAppEle.focus();\n addClass([nextAppEle], cls.AGENDA_SELECTED_CELL);\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);\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.viewCollections[index].option;\n this.parent.changeView(view, e, undefined, index);\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.activeView.isTimelineView() || 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 var quickPopupWrapper = this.getQuickPopupElement();\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 !quickPopupWrapper.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 tableRows = this.parent.getTableRows();\n var curRowIndex = tableRows.indexOf(target.parentElement);\n if (curRowIndex > 0 && curRowIndex < tableRows.length) {\n this.selectCells(isMultiple, (tableRows[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.activeView.isTimelineView() || 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 var quickPopupWrapper = this.getQuickPopupElement();\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 !quickPopupWrapper.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 tableRows = this.parent.getTableRows();\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var curRowIndex = tableRows.indexOf(target.parentElement);\n if (curRowIndex >= 0 && curRowIndex < tableRows.length - 1) {\n this.selectCells(isMultiple, (tableRows[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) {\n var tableEle = this.parent.getContentTable();\n var curRowIndex = target.parentNode.sectionRowIndex;\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.getQuickPopupElement = function () {\n return (this.parent.isAdaptive ? document.body : this.parent.element).querySelector('.' + cls.POPUP_WRAPPER_CLASS);\n };\n KeyboardInteraction.prototype.isCancelLeftRightAction = function (e, isMultiple) {\n if (this.parent.currentView === 'Agenda' || (isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return true;\n }\n if ((this.isPreventAction(e) && isMultiple)) {\n return true;\n }\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n var quickPopupWrapper = this.getQuickPopupElement();\n if (moreEventWrapper.classList.contains(cls.POPUP_OPEN) || quickPopupWrapper.classList.contains(cls.POPUP_OPEN)) {\n return true;\n }\n return false;\n };\n KeyboardInteraction.prototype.processRight = function (e, isMultiple) {\n if (this.isCancelLeftRightAction(e, isMultiple)) {\n return;\n }\n var selectedCells = this.parent.getSelectedElements();\n var targetCell;\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 if (!target) {\n return;\n }\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target);\n if (key.columnIndex >= 0 && key.columnIndex < key.maxIndex - 1) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex].cells[target.cellIndex + 1], 'right');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (key.columnIndex === key.maxIndex - 1) {\n if (!this.isInverseTableSelect() && key.rowIndex < key.element.rows.length - 1) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex + 1].cells[0], 'right');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\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(e, isMultiple)) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedElements();\n var targetCell;\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 if (!target) {\n return;\n }\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target);\n if (key.columnIndex > 0 && key.columnIndex < key.maxIndex) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex].cells[target.cellIndex - 1], 'left');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (key.columnIndex === 0) {\n if (!this.isInverseTableSelect() && key.rowIndex > 0) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex - 1].cells[key.maxIndex - 1], 'left');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\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.calculateNextPrevDate = function (currentCell, target, type) {\n var initialId = this.initialTarget.getAttribute('data-group-index');\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.currentView === 'Month') {\n if (target.getAttribute('data-group-index') !== initialId) {\n var currentDate = new Date(parseInt(currentCell.getAttribute('data-date'), 10));\n var nextPrevDate = (type === 'right') ? new Date(currentDate.setDate(currentDate.getDate() + 1))\n : new Date(currentDate.setDate(currentDate.getDate() - 1));\n target = [].slice.call(this.parent.element.querySelectorAll('td[data-date=\"'\n + nextPrevDate.getTime().toString() + '\"]' + '[data-group-index=\"' + initialId + '\"]'))[0];\n }\n }\n return target;\n };\n KeyboardInteraction.prototype.getFocusableElements = function (container) {\n var queryString = 'a[href]:not([tabindex=\"-1\"]),input:not([disabled]):not([tabindex=\"-1\"]),' +\n 'textarea:not([disabled]):not([tabindex=\"-1\"]),button:not([disabled]):not([tabindex=\"-1\"]),' +\n 'select:not([disabled]):not([tabindex=\"-1\"]),[tabindex]:not([tabindex=\"-1\"]),[contentEditable=true]:not([tabindex=\"-1\"])';\n return [].slice.call(container.querySelectorAll(queryString));\n };\n KeyboardInteraction.prototype.processTabOnPopup = function (e, popupElement) {\n var _this = this;\n var focusableElements = this.getFocusableElements(popupElement);\n focusableElements = focusableElements.filter(function (element) {\n var footerEle = _this.parent.element.querySelector('.' + cls.POPUP_FOOTER_CLASS);\n if (footerEle && footerEle.offsetParent) {\n return !(element.classList.contains(cls.EDIT_CLASS) || element.classList.contains(cls.DELETE_CLASS));\n }\n else {\n return !(element.classList.contains(cls.EDIT_EVENT_CLASS) || element.classList.contains(cls.DELETE_EVENT_CLASS));\n }\n });\n var firstEle = focusableElements[0];\n var lastEle = focusableElements[focusableElements.length - 1];\n if (!isNullOrUndefined(lastEle) && document.activeElement === lastEle && !e.shiftKey) {\n e.preventDefault();\n firstEle.focus();\n }\n if (!isNullOrUndefined(firstEle) && document.activeElement === firstEle && e.shiftKey) {\n e.preventDefault();\n lastEle.focus();\n }\n };\n KeyboardInteraction.prototype.processTab = function (e, isReverse) {\n var target = e.target;\n var popupWrapper = closest(target, '.' + cls.POPUP_WRAPPER_CLASS + ',.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (popupWrapper && popupWrapper.classList.contains(cls.POPUP_OPEN)) {\n if (popupWrapper.classList.contains(cls.MORE_POPUP_WRAPPER_CLASS)) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n this.processTabOnPopup(e, popupWrapper);\n return;\n }\n if (target.classList.contains(cls.ROOT)) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n return;\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n var appointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n var selectedAppointments = this.parent.eventBase.getSelectedAppointments();\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 };\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 KeyboardInteraction.prototype.isPreventAction = function (e) {\n var target = closest(e.target, '.' + cls.RESOURCE_GROUP_CELLS_CLASS);\n if (this.parent.activeView.isTimelineView() && !isNullOrUndefined(target)) {\n return true;\n }\n return false;\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, extend, EventHandler, uniqueID } from '@syncfusion/ej2-base';\nimport { createElement, prepend, append, addClass, 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 (typeof event_1[fields.startTime] === 'string') {\n event_1[fields.startTime] = util.getDateFromString(event_1[fields.startTime]);\n }\n if (typeof event_1[fields.endTime] === 'string') {\n event_1[fields.endTime] = util.getDateFromString(event_1[fields.endTime]);\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 /** @private */\n EventBase.prototype.timezoneConvert = function (eventData) {\n var fields = this.parent.eventFields;\n eventData[fields.startTimezone] = eventData[fields.startTimezone] || eventData[fields.endTimezone];\n eventData[fields.endTimezone] = eventData[fields.endTimezone] || eventData[fields.startTimezone];\n if (this.parent.timezone) {\n var startTz = eventData[fields.startTimezone];\n var endTz = eventData[fields.endTimezone];\n eventData[fields.startTime] =\n this.timezone.convert(eventData[fields.startTime], this.parent.timezone, startTz);\n eventData[fields.endTime] =\n this.timezone.convert(eventData[fields.endTime], this.parent.timezone, endTz);\n }\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, appointments, resourceTdData) {\n if (appointments === void 0) { appointments = 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 if (resourceTdData) {\n filter = this.filterEventsByResource(resourceTdData, filter);\n }\n return this.sortByTime(filter);\n };\n EventBase.prototype.filterEventsByResource = function (resourceTdData, appointments) {\n if (appointments === void 0) { appointments = this.parent.eventsProcessed; }\n var predicate;\n var resourceCollection = this.parent.resourceBase.resourceCollection;\n for (var level = 0; level < resourceCollection.length; level++) {\n var operator = this.parent.activeViewOptions.group.allowGroupEdit && resourceCollection[level].allowMultiple ?\n 'contains' : 'equal';\n var tempPredicate = new Predicate(resourceCollection[level].field, operator, resourceTdData.groupOrder[level]);\n predicate = predicate ? predicate.and(tempPredicate) : tempPredicate;\n }\n return new DataManager({ json: appointments }).executeLocal(new Query().where(predicate));\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.group.byDate && this.parent.activeViewOptions.showWeekend &&\n this.parent.currentView !== 'WorkWeek' && this.parent.currentView !== 'TimelineWorkWeek') {\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 if (!this.parent.activeViewOptions.group.byDate) {\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], availSlot.length, isLeft, isRight));\n }\n else {\n for (var _i = 0, availSlot_1 = availSlot; _i < availSlot_1.length; _i++) {\n var slot_1 = availSlot_1[_i];\n ranges.push(this.cloneEventObject(event, slot_1, slot_1, 1, (slot_1 !== orgStart), (slot_1 !== orgEnd)));\n }\n }\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);\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) {\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 if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n removeClass(selectedAppointments, cls.AGENDA_SELECTED_CELL);\n }\n };\n EventBase.prototype.addSelectedAppointments = function (cells) {\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 this.parent.removeSelectedClass();\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 = ((!isNullOrUndefined(this.parent.activeCellsData) &&\n this.parent.activeCellsData.element) || 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 var queryString = '[data-date=\"' + nearestTime + '\"]';\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n queryString += '[data-group-index=\"' + this.getGroupIndexFromEvent(selectedObject) + '\"]';\n }\n target = targetArea.querySelector(queryString);\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.getGroupIndexFromEvent = function (eventData) {\n var groupOrder = [];\n var groupIndex = 0;\n for (var _i = 0, _a = this.parent.resourceBase.resourceCollection; _i < _a.length; _i++) {\n var resourceData = _a[_i];\n groupOrder.push(eventData[resourceData.field]);\n }\n this.parent.resourceBase.lastResourceLevel.forEach(function (resource) {\n var count;\n var order = resource.groupOrder;\n order.forEach(function (resIndex, index) {\n var resValue = (groupOrder[index] instanceof Array) ? groupOrder[index][index] : groupOrder[index];\n if (resValue === resIndex) {\n count = count ? count + 1 : 1;\n }\n });\n if (order.length === count) {\n groupIndex = resource.groupIndex;\n }\n });\n return groupIndex;\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 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, isAllDay) {\n if (isAllDay === void 0) { isAllDay = false; }\n EventHandler.add(element, 'click', this.eventClick, this);\n EventHandler.add(element, 'dblclick', this.eventDoubleClick, this);\n if (!this.parent.activeViewOptions.readonly && ['Agenda', 'MonthAgenda'].indexOf(this.parent.currentView) === -1) {\n if (this.parent.resizeModule) {\n this.parent.resizeModule.wireResizeEvent(element);\n }\n if (this.parent.dragAndDropModule && !this.parent.isAdaptive) {\n this.parent.dragAndDropModule.wireDragEvent(element, isAllDay);\n }\n }\n };\n EventBase.prototype.renderResizeHandler = function (element, spanEvent) {\n if (!this.parent.resizeModule || !this.parent.allowResizing || this.parent.activeViewOptions.readonly) {\n return;\n }\n for (var _i = 0, _a = Object.keys(spanEvent); _i < _a.length; _i++) {\n var resizeEdge = _a[_i];\n var resizeHandler = createElement('div', { className: cls.EVENT_RESIZE_CLASS });\n switch (resizeEdge) {\n case 'isLeft':\n if (!spanEvent.isLeft) {\n resizeHandler.appendChild(createElement('div', { className: 'e-left-right-resize' }));\n addClass([resizeHandler], this.parent.enableRtl ? cls.RIGHT_RESIZE_HANDLER : cls.LEFT_RESIZE_HANDLER);\n prepend([resizeHandler], element);\n }\n break;\n case 'isRight':\n if (!spanEvent.isRight) {\n resizeHandler.appendChild(createElement('div', { className: 'e-left-right-resize' }));\n addClass([resizeHandler], this.parent.enableRtl ? cls.LEFT_RESIZE_HANDLER : cls.RIGHT_RESIZE_HANDLER);\n append([resizeHandler], element);\n }\n break;\n case 'isTop':\n if (!spanEvent.isTop) {\n resizeHandler.appendChild(createElement('div', { className: 'e-top-bottom-resize' }));\n addClass([resizeHandler], cls.TOP_RESIZE_HANDLER);\n prepend([resizeHandler], element);\n }\n break;\n case 'isBottom':\n if (!spanEvent.isBottom) {\n resizeHandler.appendChild(createElement('div', { className: 'e-top-bottom-resize' }));\n addClass([resizeHandler], cls.BOTTOM_RESIZE_HANDLER);\n append([resizeHandler], element);\n }\n break;\n }\n }\n };\n EventBase.prototype.eventClick = function (eventData) {\n var target = eventData.target;\n if (target.classList.contains(cls.DRAG_CLONE_CLASS) || target.classList.contains(cls.RESIZE_CLONE_CLASS)) {\n return;\n }\n if (eventData.ctrlKey && eventData.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.quickPopup.quickPopup.hide();\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 if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n addClass([args.element], cls.AGENDA_SELECTED_CELL);\n }\n this.parent.notify(event.eventClick, this.parent.activeEventData);\n };\n EventBase.prototype.eventDoubleClick = function (e) {\n this.parent.quickPopup.quickPopupHide(true);\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.getEventIDType = function () {\n return typeof (this.parent.eventsData[0][this.parent.eventFields.id]);\n };\n EventBase.prototype.getEventMaxID = function (resourceId) {\n var _this = this;\n if (this.parent.eventsData.length < 1) {\n return 1;\n }\n var eventId;\n var idType = this.getEventIDType();\n if (idType === 'string') {\n eventId = uniqueID().toString();\n }\n if (idType === 'number') {\n var maxId = Math.max.apply(Math, this.parent.eventsData.map(function (event) { return event[_this.parent.eventFields.id]; }));\n maxId = isNullOrUndefined(resourceId) ? maxId : maxId + resourceId;\n eventId = maxId + 1;\n }\n return eventId;\n };\n EventBase.prototype.activeEventData = function (eventData) {\n var _this = this;\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 && eventObject.isSpanned) {\n eventObject = this.parent.eventsData.filter(function (obj) {\n return obj[_this.parent.eventFields.id] === eventObject[_this.parent.eventFields.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 eventRule = event[fields.recurrenceRule];\n var duration = endDate.getTime() - startDate.getTime();\n currentViewDate = new Date(+currentViewDate - duration);\n var dates = generate(startDate, eventRule, event[fields.recurrenceException], this.parent.firstDayOfWeek, undefined, currentViewDate);\n if (this.parent.currentView === 'Agenda' && eventRule.indexOf('COUNT') === -1 && eventRule.indexOf('UNTIL') === -1) {\n if (isNullOrUndefined(event.generatedDates)) {\n event.generatedDates = { start: new Date(dates[0]), end: new Date(dates[dates.length - 1]) };\n }\n else {\n if (dates[0] < event.generatedDates.start.getTime()) {\n event.generatedDates.start = new Date(dates[0]);\n }\n if (dates[dates.length - 1] > event.generatedDates.end.getTime()) {\n event.generatedDates.end = new Date(dates[dates.length - 1]);\n }\n }\n }\n var date = dates.shift();\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 EventBase.prototype.applyResourceColor = function (element, eventData, type, groupOrder, alpha) {\n if (!this.parent.resourceBase) {\n return;\n }\n var alphaColor = function (color, alpha) {\n color = color.replace('#', '');\n var r = parseInt(color.substring(0, color.length / 3), 16);\n var g = parseInt(color.substring(color.length / 3, 2 * color.length / 3), 16);\n var b = parseInt(color.substring(2 * color.length / 3, 3 * color.length / 3), 16);\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + alpha + \")\";\n };\n var color = this.parent.resourceBase.getResourceColor(eventData, groupOrder);\n if (color) {\n // tslint:disable-next-line:no-any\n element.style[type] = !isNullOrUndefined(alpha) ? alphaColor(color, alpha) : color;\n }\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 = {\n cancel: false,\n data: (eventData instanceof Array) ? eventData : [eventData],\n requestType: 'eventCreate'\n };\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 query = new Query().where('Guid', 'equal', data.Guid);\n var edited = new DataManager(this.parent.eventsProcessed).executeLocal(query);\n var exDate = this.excludeDateCheck(edited[0][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 // if (!this.parent.activeView.isTimelineView()) {\n // this.parent.eventBase.selectWorkCellByTime(dataObj);\n // }\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] || id)).\n or(new Predicate(fields.recurrenceID, 'equal', (app[fields.recurrenceID] || id)));\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 }\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() {\n }\n FieldValidator.prototype.renderFormValidator = function (form, rules, element) {\n var _this = this;\n this.element = element;\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 = this.element.querySelector('#' + args.inputName + '_Error');\n if (elem) {\n elem.style.display = (args.status === 'failure') ? '' : 'none';\n }\n };\n FieldValidator.prototype.errorPlacement = function (inputElement, error) {\n var id = error.getAttribute('for');\n var elem = this.element.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 if (this.element.classList.contains(cls.POPUP_WRAPPER_CLASS)) {\n dlgContent = this.element;\n client = this.element.getBoundingClientRect();\n }\n else {\n dlgContent = this.element.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 if (this.element) {\n var elements = [].slice.call(this.element.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 }\n if (this.formObj) {\n this.formObj.reset();\n }\n };\n /**\n * @hidden\n */\n FieldValidator.prototype.destroy = function () {\n if (this.formObj && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n };\n return FieldValidator;\n}());\nexport { FieldValidator };\n","import { closest, EventHandler, isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, createElement, remove, extend } from '@syncfusion/ej2-base';\nimport { Dialog, Popup, isCollide } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Crud } from '../actions/crud';\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 EVENT_FIELD = 'e-field';\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();\n this.render();\n this.addEventListener();\n }\n QuickPopups.prototype.render = function () {\n this.renderQuickPopup();\n this.renderMorePopup();\n this.renderQuickDialog();\n };\n QuickPopups.prototype.renderQuickPopup = function () {\n var quickPopupWrapper = createElement('div', { className: cls.POPUP_WRAPPER_CLASS + ' e-popup-close' });\n if (this.parent.isAdaptive) {\n document.body.appendChild(quickPopupWrapper);\n addClass([quickPopupWrapper], cls.DEVICE_CLASS);\n }\n else {\n this.parent.element.appendChild(quickPopupWrapper);\n }\n this.quickPopup = new Popup(quickPopupWrapper, {\n actionOnScroll: 'hide',\n targetType: (this.parent.isAdaptive ? 'container' : 'relative'),\n enableRtl: this.parent.enableRtl,\n open: this.quickPopupOpen.bind(this),\n close: this.quickPopupClose.bind(this),\n hideAnimation: (this.parent.isAdaptive ? { name: 'ZoomOut' } : { name: 'FadeOut', duration: 150 }),\n showAnimation: (this.parent.isAdaptive ? { name: 'ZoomIn' } : { name: 'FadeIn', duration: 150 }),\n collision: (this.parent.isAdaptive ? { X: 'fit', Y: 'fit' } : { X: 'none', Y: 'fit' }),\n position: (this.parent.isAdaptive ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }),\n viewPortElement: (this.parent.isAdaptive ? document.body : this.parent.element),\n zIndex: (this.parent.isAdaptive ? 1000 : 1)\n });\n };\n QuickPopups.prototype.renderMorePopup = function () {\n var moreEventPopup = \"
    \" +\n (\"
    \") +\n (\"
    \") +\n (\"
    \");\n var moreEventWrapper = createElement('div', {\n className: cls.MORE_POPUP_WRAPPER_CLASS + ' e-popup-close',\n innerHTML: moreEventPopup\n });\n this.parent.element.appendChild(moreEventWrapper);\n this.morePopup = new Popup(moreEventWrapper, {\n targetType: 'relative',\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'ZoomOut', duration: 300 },\n showAnimation: { name: 'ZoomIn', duration: 300 },\n open: this.morePopupOpen.bind(this),\n close: this.morePopupClose.bind(this),\n collision: { X: 'flip', Y: 'flip' },\n viewPortElement: this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS),\n zIndex: 0\n });\n var closeButton = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS);\n this.renderButton('e-round', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeButton, this.closeClick);\n EventHandler.add(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS), 'click', this.navigationClick, this);\n };\n QuickPopups.prototype.renderQuickDialog = function () {\n this.quickDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n buttons: [\n { buttonModel: { cssClass: 'e-quick-alertok e-flat', isPrimary: true }, click: this.dialogButtonClick.bind(this) },\n { buttonModel: { cssClass: 'e-quick-alertcancel e-flat', 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 var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (okButton) {\n okButton.setAttribute('aria-label', this.l10n.getConstant('occurrence'));\n }\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (cancelButton) {\n cancelButton.setAttribute('aria-label', this.l10n.getConstant('series'));\n }\n };\n QuickPopups.prototype.renderButton = function (className, iconName, isDisabled, element, clickEvent) {\n new Button({ cssClass: className, disabled: isDisabled, enableRtl: this.parent.enableRtl, iconCss: iconName }, element);\n EventHandler.add(element, 'click', clickEvent, this);\n };\n QuickPopups.prototype.quickDialogClass = function (action) {\n var classList = [\n cls.QUICK_DIALOG_EDIT_EVENT_CLASS, cls.QUICK_DIALOG_EDIT_SERIES_CLASS, cls.QUICK_DIALOG_DELETE_CLASS,\n cls.QUICK_DIALOG_CANCEL_CLASS, cls.QUICK_DIALOG_ALERT_BTN_CLASS, cls.DISABLE_CLASS\n ];\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n removeClass([okButton, cancelButton], classList);\n switch (action) {\n case 'Recurrence':\n addClass([okButton], cls.QUICK_DIALOG_EDIT_EVENT_CLASS);\n addClass([cancelButton], cls.QUICK_DIALOG_EDIT_SERIES_CLASS);\n break;\n case 'Delete':\n addClass([okButton], cls.QUICK_DIALOG_DELETE_CLASS);\n addClass([cancelButton], cls.QUICK_DIALOG_CANCEL_CLASS);\n break;\n case 'Alert':\n addClass([okButton], cls.QUICK_DIALOG_ALERT_BTN_CLASS);\n addClass([cancelButton], cls.DISABLE_CLASS);\n break;\n }\n };\n QuickPopups.prototype.applyFormValidation = function () {\n var form = this.quickPopup.element.querySelector('.' + cls.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, this.quickPopup.element);\n };\n QuickPopups.prototype.openRecurrenceAlert = function () {\n var editDeleteOnly = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (editDeleteOnly) {\n editDeleteOnly.innerHTML = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteEvent' : 'editEvent');\n }\n var editDeleteSeries = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (editDeleteSeries) {\n editDeleteSeries.innerHTML = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteSeries' : 'editSeries');\n }\n this.quickDialog.content =\n this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteRecurrenceContent' : 'editContent');\n this.quickDialog.header = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteEvent' : 'editEvent');\n this.quickDialogClass('Recurrence');\n this.showQuickDialog('RecurrenceAlert');\n };\n QuickPopups.prototype.openRecurrenceValidationAlert = function (type) {\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n removeClass([okButton], cls.QUICK_DIALOG_EDIT_EVENT_CLASS);\n okButton.innerHTML = this.l10n.getConstant('ok');\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n this.quickDialog.header = this.l10n.getConstant('alert');\n switch (type) {\n case 'wrongPattern':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('wrongPattern');\n break;\n case 'dateValidation':\n removeClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('recurrenceDateValidation');\n break;\n case 'createError':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('createError');\n break;\n case 'sameDayAlert':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('sameDayAlert');\n break;\n case 'seriesChangeAlert':\n removeClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('seriesChangeAlert');\n break;\n }\n if (!cancelButton.classList.contains(cls.DISABLE_CLASS)) {\n addClass([cancelButton], 'e-quick-alert-cancelpresent');\n }\n this.showQuickDialog('RecurrenceValidationAlert');\n };\n QuickPopups.prototype.openDeleteAlert = function () {\n if (this.parent.activeViewOptions.readonly) {\n return;\n }\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (okButton) {\n okButton.innerHTML = this.l10n.getConstant('delete');\n }\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (cancelButton) {\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n }\n this.quickDialog.content = (this.parent.activeEventData.event.length > 1) ?\n this.l10n.getConstant('deleteMultipleContent') : this.l10n.getConstant('deleteContent');\n this.quickDialog.header = (this.parent.activeEventData.event.length > 1) ?\n this.l10n.getConstant('deleteMultipleEvent') : 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 okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (okButton) {\n okButton.innerHTML = this.l10n.getConstant('ok');\n }\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (cancelButton) {\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n }\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, 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 (eventCollection, groupOrder, groupIndex) {\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 if (eventCollection.length === 0) {\n moreEventWrapperEle = createElement('div', {\n className: cls.MORE_EVENT_CONTENT_CLASS,\n innerHTML: this.l10n.getConstant('emptyContainer')\n });\n }\n else {\n for (var _i = 0, eventCollection_1 = eventCollection; _i < eventCollection_1.length; _i++) {\n var eventData = eventCollection_1[_i];\n var eventText = (eventData[fields.subject] || this.parent.eventSettings.fields.subject.default);\n var appointmentEle = createElement('div', {\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-id': '' + eventData[fields.id],\n 'data-guid': eventData.Guid, 'role': 'button', 'tabindex': '0', 'aria-readonly': 'false',\n 'aria-selected': 'false', 'aria-grabbed': 'true', 'aria-label': eventText\n }\n });\n appointmentEle.appendChild(createElement('div', { className: cls.SUBJECT_CLASS, innerHTML: eventText }));\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n appointmentEle.setAttribute('data-group-index', groupIndex);\n }\n if (!isNullOrUndefined(eventData[fields.recurrenceRule])) {\n var iconClass = (eventData[fields.id] === eventData[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 var args = { data: eventData, element: appointmentEle, cancel: false };\n this.parent.trigger(event.eventRendered, args);\n if (!args.cancel) {\n moreEventWrapperEle.appendChild(appointmentEle);\n this.parent.eventBase.wireAppointmentEvents(appointmentEle);\n this.parent.eventBase.applyResourceColor(appointmentEle, eventData, 'backgroundColor', groupOrder);\n }\n }\n }\n moreEventContentEle.appendChild(moreEventWrapperEle);\n return moreEventContentEle;\n };\n QuickPopups.prototype.tapHoldEventPopup = function (args) {\n var target = closest(args.event.target, '.' + cls.APPOINTMENT_CLASS);\n this.isMultipleEventSelect = false;\n this.parent.selectedElements = [];\n this.isMultipleEventSelect = true;\n this.parent.eventBase.getSelectedEventElements(target);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n var guid = target.getAttribute('data-guid');\n var eventObj = this.parent.eventBase.getEventByGuid(guid);\n var eventTitle = (eventObj[this.parent.eventFields.subject] || this.l10n.getConstant('noTitle'));\n var eventTemplate = \"
    \" +\n (\"\") +\n (\"
    \" + eventTitle + \"
    \") +\n (\"\") +\n (\"
    \");\n this.quickPopup.element.innerHTML = eventTemplate;\n var closeIcon = this.quickPopup.element.querySelector('.' + cls.CLOSE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.closeClick);\n var editIcon = this.quickPopup.element.querySelector('.' + cls.EDIT_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.EDIT_ICON_CLASS, false, editIcon, this.editClick);\n var deleteIcon = this.quickPopup.element.querySelector('.' + cls.DELETE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.DELETE_ICON_CLASS, false, deleteIcon, this.deleteClick);\n this.beforeQuickPopupOpen(target);\n };\n QuickPopups.prototype.cellClick = function (args) {\n if (!this.parent.showQuickInfo || this.parent.currentView === 'MonthAgenda' || this.parent.isAdaptive) {\n this.quickPopupHide();\n return;\n }\n var target = closest(args.event.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.' +\n cls.HEADER_CELLS_CLASS);\n if (isNullOrUndefined(target) || args.event.target.classList.contains(cls.MORE_INDICATOR_CLASS)) {\n return;\n }\n var isSameTarget = this.quickPopup.relateTo === target;\n if (isSameTarget && this.quickPopup.element.classList.contains(cls.POPUP_OPEN)) {\n var subjectElement_1 = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectElement_1) {\n subjectElement_1.focus();\n }\n return;\n }\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);\n var headerTemplate;\n var templateArgs = extend({}, temp, { elementType: 'cell' }, true);\n if (this.parent.quickInfoTemplates.header) {\n headerTemplate = this.parent.getQuickInfoTemplatesHeader()(templateArgs)[0].innerHTML;\n }\n if (!headerTemplate) {\n headerTemplate = \"
    \" +\n (\"
    \");\n }\n var contentTemplate;\n if (this.parent.quickInfoTemplates.content) {\n contentTemplate = this.parent.getQuickInfoTemplatesContent()(templateArgs)[0].innerHTML;\n }\n if (!contentTemplate) {\n contentTemplate = \"
    \" +\n (\"
    \") +\n (\"
    \" + cellDetails.details + \"
    \") +\n ((this.parent.activeViewOptions.group.resources.length > 0 ? \"
    \" +\n (\"
    \" + this.getResourceText(args, 'cell') + \"
    \") : '') + \"
    \");\n }\n var footerTemplate;\n if (this.parent.quickInfoTemplates.footer) {\n footerTemplate = this.parent.getQuickInfoTemplatesFooter()(templateArgs)[0].innerHTML;\n }\n if (!footerTemplate) {\n footerTemplate = \"
    \" +\n (\"
    \");\n }\n var cellTemplate = headerTemplate + contentTemplate + footerTemplate;\n var quickCellPopup = createElement('div', { className: cls.CELL_POPUP_CLASS, innerHTML: cellTemplate });\n var subjectElement = quickCellPopup.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectElement) {\n Input.createInput({ element: subjectElement, properties: { placeholder: this.l10n.getConstant('addTitle') } });\n }\n var closeIcon = quickCellPopup.querySelector('.' + cls.CLOSE_CLASS);\n if (closeIcon) {\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.quickPopupHide);\n }\n var moreButton = quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_DETAILS_CLASS);\n if (moreButton) {\n this.renderButton('e-flat', '', false, moreButton, this.detailsClick);\n }\n var saveButton = quickCellPopup.querySelector('.' + cls.EVENT_CREATE_CLASS);\n if (saveButton) {\n this.renderButton('e-flat e-primary', '', this.parent.activeViewOptions.readonly, saveButton, this.saveClick);\n }\n this.quickPopup.content = quickCellPopup;\n this.quickPopup.dataBind();\n this.applyFormValidation();\n if (this.morePopup) {\n this.morePopup.hide();\n }\n this.quickPopup.relateTo = target;\n this.beforeQuickPopupOpen(target);\n };\n QuickPopups.prototype.isSameEventClick = function (events) {\n var isSameTarget = this.quickPopup.relateTo === closest(events.element, '.' + cls.APPOINTMENT_CLASS);\n if (isSameTarget && this.quickPopup.element.classList.contains(cls.POPUP_OPEN)) {\n var editIcon = this.quickPopup.element.querySelector('.' + cls.EDIT_CLASS);\n if (editIcon) {\n editIcon.focus();\n }\n if (!this.parent.isAdaptive) {\n var editButton = this.quickPopup.element.querySelector('.' + cls.EDIT_EVENT_CLASS);\n if (editButton) {\n editButton.focus();\n }\n }\n return true;\n }\n return false;\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 && this.isMultipleEventSelect) {\n this.updateTapHoldEventPopup(closest(events.element, '.' + cls.APPOINTMENT_CLASS));\n }\n else {\n var isSameTarget = this.isSameEventClick(events);\n if (isSameTarget) {\n return;\n }\n var eventData = events.event;\n var args = this.getFormattedString(eventData);\n var headerTemplate = void 0;\n var templateArgs = extend({}, eventData, { elementType: 'event' }, true);\n if (this.parent.quickInfoTemplates.header) {\n headerTemplate = this.parent.getQuickInfoTemplatesHeader()(templateArgs)[0].innerHTML;\n }\n if (!headerTemplate) {\n headerTemplate = \"
    \" +\n (\"\") +\n (\"\") +\n (\"
    \") +\n (\"
    \" + args.eventSubject + \"
    \");\n }\n var contentTemplate = void 0;\n if (this.parent.quickInfoTemplates.content) {\n contentTemplate = this.parent.getQuickInfoTemplatesContent()(templateArgs)[0].innerHTML;\n }\n if (!contentTemplate) {\n contentTemplate = \"
    \" +\n (\"
    \" + args.details + \"
    \") +\n ((eventData[this.parent.eventFields.recurrenceRule] ? \"
    \" + this.getRecurrenceSummary(eventData) + \"
    \") : '') + \"
    \") +\n (\"\" + (eventData[this.parent.eventFields.location] ? \"
    \") +\n (eventData[this.parent.eventFields.location] + \"
    \") : '')) +\n (\"\" + (eventData[this.parent.eventFields.startTimezone] ||\n eventData[this.parent.eventFields.endTimezone] ? \"
    \") +\n (this.getTimezone(eventData) + \"
    \") : '')) +\n (\"\" + (eventData[this.parent.eventFields.description] ? \"
    \" + eventData[this.parent.eventFields.description] + \"
    \") : '')) +\n ((this.parent.resources.length > 0 ? \"
    \") +\n (this.getResourceText(events, 'event') + \"
    \") : '') + \"
    \");\n }\n var footerTemplate = void 0;\n if (this.parent.quickInfoTemplates.footer) {\n footerTemplate = this.parent.getQuickInfoTemplatesFooter()(templateArgs)[0].innerHTML;\n }\n if (!footerTemplate) {\n footerTemplate = \"
    \" +\n ((this.parent.isAdaptive ? '' : \"\") +\n (\"\")) + \"
    \");\n }\n var eventTemplate = headerTemplate + contentTemplate + footerTemplate;\n var quickEventPopup = createElement('div', { className: cls.EVENT_POPUP_CLASS, innerHTML: eventTemplate });\n var readonly = this.parent.activeViewOptions.readonly;\n var editIcon = quickEventPopup.querySelector('.' + cls.EDIT_CLASS);\n if (editIcon) {\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.EDIT_ICON_CLASS, false, editIcon, this.editClick);\n }\n var deleteIcon = quickEventPopup.querySelector('.' + cls.DELETE_CLASS);\n if (deleteIcon) {\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.DELETE_ICON_CLASS, readonly, deleteIcon, this.deleteClick);\n }\n var closeIcon = quickEventPopup.querySelector('.' + cls.CLOSE_CLASS);\n if (closeIcon) {\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.quickPopupHide);\n }\n var editButton = quickEventPopup.querySelector('.' + cls.EDIT_EVENT_CLASS);\n if (editButton) {\n this.renderButton('e-flat e-primary', '', false, editButton, this.editClick);\n }\n var deleteButton = quickEventPopup.querySelector('.' + cls.DELETE_EVENT_CLASS);\n if (deleteButton) {\n this.renderButton('e-flat', '', readonly, deleteButton, this.deleteClick);\n }\n this.quickPopup.content = quickEventPopup;\n this.quickPopup.dataBind();\n if (this.morePopup && !closest(events.element, '.' + cls.MORE_EVENT_WRAPPER_CLASS)) {\n this.morePopup.hide();\n }\n this.quickPopup.relateTo = this.parent.isAdaptive ? document.body :\n closest(events.element, '.' + cls.APPOINTMENT_CLASS);\n this.beforeQuickPopupOpen(events.element);\n }\n };\n QuickPopups.prototype.getResourceText = function (args, type) {\n var resourceValue = '';\n if (this.parent.activeViewOptions.group.resources.length === 0) {\n var resourceCollection_1 = this.parent.resourceBase.resourceCollection.slice(-1)[0];\n var resourceData = resourceCollection_1.dataSource;\n var resourceIndex_1 = 0;\n var eventData_1 = args.event;\n resourceData.forEach(function (resource, index) {\n if (resource[resourceCollection_1.idField] === eventData_1[resourceCollection_1.field]) {\n resourceIndex_1 = index;\n }\n });\n resourceValue = resourceData[resourceIndex_1][resourceCollection_1.textField];\n }\n else {\n if (type === 'event') {\n var eventData = args.event;\n var resourceData = void 0;\n var lastResource_1;\n for (var i = this.parent.resourceBase.resourceCollection.length - 1; i >= 0; i--) {\n resourceData = eventData[this.parent.resourceBase.resourceCollection[i].field];\n if (!isNullOrUndefined(resourceData)) {\n lastResource_1 = this.parent.resourceBase.resourceCollection[i];\n break;\n }\n }\n if (!Array.isArray(resourceData)) {\n resourceData = [resourceData];\n }\n var resNames_1 = [];\n var lastResourceData_1 = lastResource_1.dataSource;\n resourceData.map(function (value) {\n var i = util.findIndexInData(lastResourceData_1, lastResource_1.idField, value);\n var text = lastResourceData_1[i][lastResource_1.textField];\n if (text) {\n resNames_1.push(text);\n }\n });\n resourceValue = resNames_1.join(', ');\n }\n else {\n var argsData = args;\n var groupIndex = !isNullOrUndefined(argsData.groupIndex) ? argsData.groupIndex : 0;\n var resourceDetails = this.parent.resourceBase.lastResourceLevel[groupIndex];\n resourceValue = resourceDetails.resourceData[resourceDetails.resource.textField];\n }\n }\n return resourceValue;\n };\n QuickPopups.prototype.getFormattedString = function (eventData) {\n var fields = this.parent.eventFields;\n var eventSubject = (eventData[fields.subject] || this.l10n.getConstant('noTitle'));\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.parent.getTimeString(startDate);\n var endTimeDetail = this.parent.getTimeString(endDate);\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, endDate, groupIndex) {\n this.quickPopupHide(true);\n var moreEventContentEle = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS);\n if (moreEventContentEle) {\n remove(moreEventContentEle);\n }\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 var dateElement = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS);\n dateElement.innerHTML = this.getDateFormat(data.date, 'd');\n dateElement.setAttribute('data-date', selectedDate);\n dateElement.setAttribute('data-end-date', endDate.getTime().toString());\n var groupOrder;\n if (!isNullOrUndefined(groupIndex)) {\n dateElement.setAttribute('data-group-index', groupIndex);\n groupOrder = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)].groupOrder;\n }\n var moreEventElements = this.createMoreEventList(data.event, groupOrder, groupIndex);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_POPUP_CLASS).appendChild(moreEventElements);\n removeClass(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_DATE_HEADER_CLASS).childNodes, cls.CURRENTDATE_CLASS);\n if (util.resetTime(data.date).getTime() === util.resetTime(new Date()).getTime()) {\n addClass(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_DATE_HEADER_CLASS).childNodes, cls.CURRENTDATE_CLASS);\n }\n if (this.parent.currentView.indexOf('Timeline') !== -1) {\n var gIndex = target.getAttribute('data-group-index');\n var index = (isNullOrUndefined(gIndex)) ? 0 : parseInt(gIndex, 10);\n this.morePopup.relateTo = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS +\n ' tbody tr:nth-child(' + (index + 1) + ') td[data-date=\"' + target.getAttribute('data-start-date') + '\"]');\n }\n else {\n this.morePopup.relateTo = closest(target, '.' + cls.WORK_CELLS_CLASS);\n }\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.element.querySelector('.' + cls.FORM_CLASS).ej2_instances[0].validate()) {\n return;\n }\n var fields = this.parent.eventFields;\n var saveObj = extend({}, this.parent.eventWindow.getObjectFromFormData(cls.POPUP_WRAPPER_CLASS));\n if (!isNullOrUndefined(saveObj[fields.subject])) {\n saveObj[fields.subject] = saveObj[fields.subject] !== '' ?\n saveObj[fields.subject] : this.parent.eventSettings.fields.subject.default;\n }\n saveObj[fields.id] = this.parent.eventBase.getEventMaxID();\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 if (this.parent.resourceBase) {\n this.parent.resourceBase.setResourceValues(saveObj, true);\n }\n this.parent.currentAction = 'Add';\n this.crudAction.addEvent(saveObj);\n this.quickPopupHide();\n };\n QuickPopups.prototype.detailsClick = function () {\n var subjectEle = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectEle && subjectEle.value !== '') {\n var args = extend(this.parent.activeCellsData, { subject: subjectEle.value });\n }\n this.fieldValidator.destroyToolTip();\n this.quickPopupHide();\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n };\n QuickPopups.prototype.editClick = function () {\n this.quickPopupHide(true);\n var data = this.parent.activeEventData.event;\n this.parent.currentAction = 'EditSeries';\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.quickPopupHide(true);\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.updateMoreEventContent = function () {\n if (this.morePopup.element.classList.contains('e-popup-close')) {\n return;\n }\n var moreEventContentEle = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS);\n if (moreEventContentEle) {\n remove(moreEventContentEle);\n }\n var dateElement = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS);\n var startDate = this.parent.getDateFromElement(dateElement);\n var endDate = new Date(parseInt(dateElement.getAttribute('data-end-date'), 10));\n var groupIndex = dateElement.getAttribute('data-group-index');\n var data;\n var groupOrder;\n if (!isNullOrUndefined(groupIndex)) {\n data = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)];\n groupOrder = data.groupOrder;\n }\n var filteredEvents = this.parent.eventBase.filterEvents(startDate, endDate, this.parent.eventsProcessed, data);\n var moreElement = this.createMoreEventList(filteredEvents, groupOrder, groupIndex);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_POPUP_CLASS).appendChild(moreElement);\n };\n QuickPopups.prototype.closeClick = function () {\n this.quickPopupHide();\n this.morePopup.hide();\n };\n QuickPopups.prototype.dialogButtonClick = function (event) {\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (event.target.classList.contains('e-quick-alertok') &&\n (cancelButton.classList.contains('e-quick-alert-cancelpresent'))) {\n removeClass([cancelButton], 'e-quick-alert-cancelpresent');\n this.parent.eventWindow.eventSave(this.l10n.getConstant('ok'));\n return;\n }\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.updateTapHoldEventPopup = function (target) {\n var selectedElements = this.parent.eventBase.getSelectedEventElements(target);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n if (selectedElements.length > 0) {\n var eventObj = this.parent.eventBase.getEventByGuid(selectedElements[0].getAttribute('data-guid'));\n var titleContent = (selectedElements.length === 1) ?\n (eventObj[this.parent.eventFields.subject] || this.l10n.getConstant('noTitle')) :\n '(' + selectedElements.length + ')' + ' ' + this.l10n.getConstant('selectedItems');\n this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS).innerHTML = titleContent;\n if (selectedElements.length > 1) {\n addClass([this.quickPopup.element.querySelector('.' + cls.EDIT_ICON_CLASS)], cls.HIDDEN_CLASS);\n }\n else {\n removeClass([this.quickPopup.element.querySelector('.' + cls.EDIT_ICON_CLASS)], cls.HIDDEN_CLASS);\n }\n }\n else {\n this.parent.selectedElements = [];\n this.quickPopupHide();\n }\n };\n QuickPopups.prototype.getTimezone = function (event) {\n var zoneDetails = '';\n zoneDetails += event[this.parent.eventFields.startTimezone] || '';\n zoneDetails += zoneDetails === '' ? '' : ' - ';\n zoneDetails += event[this.parent.eventFields.endTimezone] || '';\n return zoneDetails;\n };\n QuickPopups.prototype.getRecurrenceSummary = function (event) {\n var recurrenceEditor = this.parent.eventWindow.getRecurrenceEditorInstance();\n var ruleSummary = recurrenceEditor.getRuleSummary(event[this.parent.eventFields.recurrenceRule]);\n return ruleSummary.charAt(0).toUpperCase() + ruleSummary.slice(1);\n };\n QuickPopups.prototype.getDateFormat = function (date, formatString) {\n return this.parent.globalize.formatDate(date, { skeleton: formatString });\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.beforeQuickDialogClose = function () {\n this.parent.eventBase.focusElement();\n };\n QuickPopups.prototype.beforeQuickPopupOpen = function (target) {\n var isEventPopup = this.quickPopup.element.querySelector('.' + cls.EVENT_POPUP_CLASS);\n var popupType = this.parent.isAdaptive ? isEventPopup ? 'ViewEventInfo' : 'EditEventInfo' : 'QuickInfo';\n var eventProp = {\n type: popupType, cancel: false, data: this.getDataFromTarget(target),\n target: target, element: this.quickPopup.element\n };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n this.destroyButtons();\n if (eventProp.element.classList.contains(cls.POPUP_OPEN)) {\n this.quickPopupClose();\n }\n this.quickPopup.element.innerHTML = '';\n return;\n }\n var display = this.quickPopup.element.style.display;\n this.quickPopup.element.style.display = 'block';\n if (this.parent.isAdaptive) {\n this.quickPopup.element.removeAttribute('style');\n this.quickPopup.element.style.display = 'block';\n this.quickPopup.element.style.height = formatUnit((popupType === 'EditEventInfo') ? 65 : window.innerHeight);\n }\n else {\n this.quickPopup.offsetX = 10;\n this.quickPopup.collision = { X: 'none', Y: 'fit' };\n this.quickPopup.position = { X: 'right', Y: 'top' };\n this.quickPopup.dataBind();\n this.quickPopup.refreshPosition(null, true);\n var collide = isCollide(this.quickPopup.element, this.parent.element);\n if (collide.indexOf(this.parent.enableRtl ? 'left' : 'right') > -1) {\n this.quickPopup.offsetX = -target.offsetWidth - 10 - this.quickPopup.element.offsetWidth;\n this.quickPopup.dataBind();\n var leftCollide = isCollide(this.quickPopup.element, this.parent.element);\n if (leftCollide.indexOf('left') > -1) {\n this.quickPopup.position = { X: 'center', Y: 'center' };\n this.quickPopup.collision = { X: 'fit', Y: 'fit' };\n this.quickPopup.offsetX = -(this.quickPopup.element.offsetWidth / 2);\n this.quickPopup.dataBind();\n }\n }\n }\n if (isEventPopup) {\n this.applyEventColor();\n }\n this.quickPopup.element.style.display = display;\n this.quickPopup.dataBind();\n this.quickPopup.show();\n };\n QuickPopups.prototype.applyEventColor = function () {\n var color = this.parent.activeEventData.element.style.backgroundColor;\n if (color === '') {\n return;\n }\n var colorEle = this.quickPopup.element.querySelector('.' + cls.POPUP_HEADER_CLASS);\n var footerEle = this.quickPopup.element.querySelector('.' + cls.POPUP_FOOTER_CLASS);\n if (footerEle && footerEle.offsetParent) {\n colorEle = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (colorEle) {\n colorEle.style.borderLeftColor = color;\n color = \"rgba(\" + color.match(/\\d+/g).join() + \",0.3)\";\n }\n }\n if (colorEle) {\n colorEle.style.backgroundColor = color;\n }\n };\n QuickPopups.prototype.quickPopupOpen = function () {\n if (this.parent.isAdaptive) {\n return;\n }\n if (this.quickPopup.element.querySelector('.' + cls.CELL_POPUP_CLASS)) {\n var subjectElement = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectElement) {\n subjectElement.focus();\n }\n }\n else {\n var editElement = this.quickPopup.element.querySelector('.' + cls.EDIT_EVENT_CLASS);\n if (editElement) {\n editElement.focus();\n }\n var editIcon = this.quickPopup.element.querySelector('.' + cls.EDIT_CLASS);\n if (editIcon) {\n editIcon.focus();\n }\n }\n };\n QuickPopups.prototype.quickPopupClose = function () {\n this.parent.eventBase.focusElement();\n this.quickPopup.relateTo = cls.WORK_CELLS_CLASS;\n this.fieldValidator.destroyToolTip();\n this.destroyButtons();\n this.quickPopup.element.innerHTML = '';\n };\n QuickPopups.prototype.morePopupOpen = function () {\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).focus();\n this.morePopup.refreshPosition();\n };\n QuickPopups.prototype.morePopupClose = function () {\n var moreWrapper = this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS);\n if (moreWrapper) {\n moreWrapper.remove();\n }\n };\n QuickPopups.prototype.quickPopupHide = function (hideAnimation) {\n if (this.quickPopup.element.classList.contains('e-popup-open')) {\n if (hideAnimation) {\n var animation = this.quickPopup.hideAnimation;\n this.quickPopup.hideAnimation = null;\n this.quickPopup.hide();\n this.quickPopup.hideAnimation = animation;\n }\n else {\n this.quickPopup.hide();\n }\n this.isMultipleEventSelect = false;\n }\n };\n QuickPopups.prototype.navigationClick = 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(this.parent.getNavigateView());\n }\n }\n };\n QuickPopups.prototype.documentClick = function (e) {\n var target = e.event.target;\n var classNames = '.' + cls.POPUP_WRAPPER_CLASS + ',.' + cls.HEADER_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS +\n ',.' + cls.WORK_CELLS_CLASS + ',.' + cls.APPOINTMENT_CLASS;\n if (!closest(target, classNames)) {\n this.quickPopupHide();\n }\n if (!closest(target, '.' + cls.MORE_POPUP_WRAPPER_CLASS) && !target.classList.contains(cls.MORE_INDICATOR_CLASS)\n && (!closest(target, '.' + cls.POPUP_OPEN))) {\n this.morePopup.hide();\n }\n };\n QuickPopups.prototype.onClosePopup = function () {\n this.quickPopupHide();\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 this.parent.on(event.dataReady, this.updateMoreEventContent, this);\n this.parent.on(event.tapHoldReady, this.tapHoldEventPopup, this);\n };\n QuickPopups.prototype.removeEventListner = function () {\n this.parent.off(event.cellClick, this.cellClick);\n this.parent.off(event.eventClick, this.eventClick);\n this.parent.off(event.documentClick, this.documentClick);\n this.parent.off(event.dataReady, this.updateMoreEventContent);\n this.parent.off(event.tapHoldReady, this.tapHoldEventPopup);\n };\n QuickPopups.prototype.destroyButtons = function () {\n var buttonCollections = [].slice.call(this.quickPopup.element.querySelectorAll('.e-control.e-btn'));\n buttonCollections.forEach(function (button) {\n var instance = button.ej2_instances[0];\n if (instance) {\n instance.destroy();\n }\n });\n };\n QuickPopups.prototype.destroy = function () {\n this.fieldValidator.destroy();\n this.removeEventListner();\n this.destroyButtons();\n this.quickPopup.destroy();\n remove(this.quickPopup.element);\n this.morePopup.destroy();\n if (this.quickDialog.element) {\n this.quickDialog.destroy();\n remove(this.quickDialog.element);\n this.quickDialog.element = null;\n }\n };\n return QuickPopups;\n}());\nexport { QuickPopups };\n","import { isNullOrUndefined, append, createElement } 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.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: this.parent.cssClass + ' ' + cls.EVENT_TOOLTIP_ROOT_CLASS,\n target: this.getTargets(),\n beforeRender: this.onBeforeRender.bind(this),\n enableRtl: this.parent.enableRtl\n });\n this.tooltipObj.appendTo(this.parent.element);\n }\n EventTooltip.prototype.getTargets = function () {\n var targets;\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.eventSettings.enableTooltip) {\n targets = '.' + cls.APPOINTMENT_CLASS + ',' + '.' + cls.RESOURCE_CELLS_CLASS;\n }\n else if (this.parent.eventSettings.enableTooltip) {\n targets = '.' + cls.APPOINTMENT_CLASS;\n }\n else {\n targets = '.' + cls.RESOURCE_CELLS_CLASS;\n }\n return targets;\n };\n EventTooltip.prototype.onBeforeRender = function (args) {\n if (!isNullOrUndefined(args.target.getAttribute('data-tooltip-id'))) {\n return;\n }\n var content = '';\n if (args.target.classList.contains(cls.RESOURCE_CELLS_CLASS) && this.parent.activeViewOptions.group.resources.length > 0) {\n var index = parseInt(args.target.getAttribute('data-group-index'), 0);\n var resCollection = this.parent.resourceBase.lastResourceLevel[index];\n var data = {\n resource: resCollection.resource,\n resourceData: resCollection.resourceData\n };\n var ele = createElement('div');\n append([].slice.call(this.parent.getHeaderTooltipTemplate()(data)), ele);\n content = ele.innerHTML;\n this.tooltipObj.content = content;\n return;\n }\n var record = this.parent.eventBase.getEventByGuid(args.target.getAttribute('data-guid'));\n if (!isNullOrUndefined(this.parent.eventSettings.tooltipTemplate)) {\n var ele = createElement('div');\n append([].slice.call(this.parent.getEventTooltipTemplate()(record)), ele);\n content = ele.innerHTML;\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 = (record[fields.subject] || this.parent.eventSettings.fields.subject.default);\n var tooltipLocation = !isNullOrUndefined(record[fields.location]) ? record[fields.location] : '';\n var startMonthDate = globalize.formatDate(eventStart, { 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.parent.localeObj.getConstant('allDay') :\n (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, isNullOrUndefined, removeClass, addClass } 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, classList } 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 MONETHEXPANDWRAPPER = 'e-month-expand-wrapper';\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 REPEATCONTENTWRAPPER = 'e-repeat-content-wrapper';\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 RADIOLABEL = 'onDay';\nvar RULEUNTIL = 'UNTIL';\nvar RULEBYDAY = 'BYDAY';\nvar RULEBYMONTHDAY = 'BYMONTHDAY';\nvar RULEBYMONTH = 'BYMONTH';\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 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 monthWeek: 'Month Week',\n monthPosition: 'Month Position',\n monthExpander: 'Month Expander',\n yearExpander: 'Year Expander',\n repeatInterval: 'Repeat Interval'\n };\n _this.renderStatus = 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 addClass([this.element], cssClass);\n }\n };\n RecurrenceEditor.prototype.initialize = function () {\n this.renderComponent();\n if (!isNullOrUndefined(this.value)) {\n this.setRecurrenceRule(this.value);\n }\n else {\n this.startState(this.repeatType.value.toString().toUpperCase(), NEVER, this.startDate);\n this.updateForm(this.repeatType.value.toString());\n if (this.selectedType > 0) {\n this.setProperties({ value: this.getRecurrenceRule() }, false);\n }\n }\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 = [].slice.call(this.element.querySelectorAll('.' + DAYWRAPPER + ' button'));\n elements.forEach(function (element) { return removeClass([element], [ACTIVE, PRIMARY]); });\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('.' + DAYWRAPPER + ' button[data-index=\"' + days.indexOf(dayIndex) + '\"]');\n if (element) {\n addClass([element], [ACTIVE, PRIMARY]);\n }\n };\n RecurrenceEditor.prototype.rtlClass = function (status) {\n if (status) {\n addClass([this.element], RTLCLASS);\n }\n else {\n removeClass([this.element], 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 _this = this;\n this.repeatType.setProperties({ value: state });\n var end = this.element.querySelector('.' + ENDON);\n if (state === DAILY) {\n classList(end, [FORMLEFT], [FORMRIGHT]);\n }\n else {\n classList(end, [FORMRIGHT], [FORMLEFT]);\n }\n switch (state) {\n case NONE:\n neverClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case WEEKLY:\n weekClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case MONTHLY:\n monthClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case YEARLY:\n yearClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case DAILY:\n dailyClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n }\n };\n RecurrenceEditor.prototype.updateEndOnForm = function (state) {\n var _this = this;\n this.endType.setProperties({ value: state });\n switch (state) {\n case NEVER:\n noEndClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case UNTIL:\n endOnDateClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case COUNT:\n endOnCountClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n }\n };\n RecurrenceEditor.prototype.freshOnEndForm = function () {\n var _this = this;\n noEndClassList.forEach(function (className) {\n var element = _this.element.querySelector('.' + className);\n if (element) {\n removeClass([element], HIDEWRAPPER);\n }\n });\n };\n RecurrenceEditor.prototype.showFormElement = function () {\n var _this = this;\n neverClassList.forEach(function (className) { return removeClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n };\n RecurrenceEditor.prototype.renderDropdowns = function () {\n var _this = this;\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 htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT) },\n change: function (args) {\n self.setProperties({ selectedType: args.value }, false);\n self.element.querySelector('.' + REPEATCONTENT).innerHTML =\n 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 self.freshOnEndForm();\n self.updateEndOnForm(args.value);\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.endType.appendTo(this.element.querySelector('.' + ENDONELEMENT));\n var renderDropDownList = function (dropDownData) {\n return new DropDownList({\n dataSource: dropDownData,\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 self.onWeekDay.setProperties({ checked: true });\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n };\n this.monthWeekPos = renderDropDownList(this.getMonthPosData());\n this.monthWeekPos.appendTo(this.element.querySelector('.' + MONTHPOS));\n this.monthWeekDays = renderDropDownList(this.getDayData('wide'));\n this.monthWeekDays.appendTo(this.element.querySelector('.' + MONTHWEEK));\n this.monthValue = new DropDownList({\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 self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.monthValue.appendTo(this.element.querySelector('.' + YEAREXPANDERELEMENT));\n };\n RecurrenceEditor.prototype.setDefaultValue = function () {\n var formelement = [].slice.call(this.element.querySelectorAll('.e-control .e-numerictextbox'));\n for (var _i = 0, formelement_1 = formelement; _i < formelement_1.length; _i++) {\n var element = formelement_1[_i];\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 _i = 0, recurreneElement_1 = recurreneElement; _i < recurreneElement_1.length; _i++) {\n var element = recurreneElement_1[_i];\n var instance = void 0;\n if (element.classList.contains('e-datepicker')) {\n 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 instance = element.ej2_instances[0];\n instance.index = instance.index || 0;\n instance.dataBind();\n }\n else if (element.classList.contains('e-numerictextbox')) {\n instance = element.ej2_instances[0];\n var value = void 0;\n if (instance.element.classList.contains(REPEATINTERVAL)) {\n value = 1;\n }\n else if (instance.element.classList.contains(ENDONCOUNT)) {\n value = 10;\n }\n else {\n value = this.startDate.getDate();\n }\n instance.value = instance.value || value;\n instance.dataBind();\n }\n }\n };\n RecurrenceEditor.prototype.getPopupWidth = function () {\n return Browser.isDevice ? '100%' : 'auto';\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 = [].slice.call(this.element.querySelectorAll('.' + DAYWRAPPER + ' button'));\n var self = this;\n for (var _i = 0, btns_1 = btns; _i < btns_1.length; _i++) {\n var btn = btns_1[_i];\n var button = new Button({ isToggle: true, enableRtl: this.enableRtl }, btn);\n this.dayButtons.push(button);\n EventHandler.add(btn, 'click', function (args) {\n var btns = [].slice.call(_this.element.querySelectorAll('.' + DAYWRAPPER + ' button.' + PRIMARY));\n var element = args.target;\n if (!element.classList.contains(PRIMARY)) {\n addClass([element], PRIMARY);\n self.triggerChangeEvent();\n }\n else if (btns.length > 1) {\n removeClass([element], 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 this.rotateArray(weekday, this.firstDayOfWeek);\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.' + format, getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.stand-alone.' + format, 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 var fullDay = this.getDayData('wide');\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 for (var _i = 0, _a = this.dayButtons; _i < _a.length; _i++) {\n var obj = _a[_i];\n var 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 if (!this.recurrenceCount.isDestroyed) {\n this.recurrenceCount.destroy();\n }\n if (!this.monthDate.isDestroyed) {\n this.monthDate.destroy();\n }\n if (!this.repeatInterval.isDestroyed) {\n this.repeatInterval.destroy();\n }\n if (!this.untilDateObj.isDestroyed) {\n this.untilDateObj.destroy();\n }\n if (!this.repeatType.isDestroyed) {\n this.repeatType.destroy();\n }\n if (!this.endType.isDestroyed) {\n this.endType.destroy();\n }\n if (!this.monthWeekPos.isDestroyed) {\n this.monthWeekPos.destroy();\n }\n if (!this.monthWeekDays.isDestroyed) {\n this.monthWeekDays.destroy();\n }\n if (!this.monthValue.isDestroyed) {\n this.monthValue.destroy();\n }\n this.dayButtons.forEach(function (element) { return element.destroy(); });\n this.dayButtons = [];\n this.monthButtons.forEach(function (element) { return element.destroy(); });\n this.monthButtons = [];\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 viewDate = isNullOrUndefined(viewDate) ? this.startDate : viewDate;\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 + SEMICOLON + this.getSelectedMonthData();\n break;\n case YEARLY:\n ruleData += RULEYEARLY + SEMICOLON + this.getSelectedMonthData() + 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.destroyComponents();\n _super.prototype.destroy.call(this);\n var removeClasses = ['e-' + this.getModuleName()];\n if (this.cssClass) {\n removeClasses = removeClasses.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], removeClasses);\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 case 'value':\n if (this.getRecurrenceRule() !== this.value) {\n this.setRecurrenceRule(this.value);\n }\n break;\n case 'locale':\n case 'frequencies':\n case 'firstDayOfWeek':\n this.refresh();\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()\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, MultiSelect } 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();\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.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.refresh = function () {\n this.destroy();\n this.renderEventWindow();\n };\n EventWindow.prototype.openEditor = function (data, type) {\n this.parent.quickPopup.quickPopupHide(true);\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.parent.activeCellsData = data;\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 = {\n type: 'Editor',\n data: this.eventData,\n cancel: false,\n element: this.element,\n target: (this.cellClickAction ? this.parent.activeCellsData.element : this.parent.activeEventData.element)\n };\n if (this.cellClickAction) {\n eventProp.duration = this.getSlotDuration();\n }\n this.parent.trigger(event.popupOpen, eventProp);\n args.cancel = eventProp.cancel;\n this.duration = this.cellClickAction ? eventProp.duration : null;\n this.refreshDateTimePicker(this.duration);\n if (this.cellClickAction && eventProp.duration !== this.getSlotDuration() && isNullOrUndefined(this.parent.editorTemplate)) {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n endObj.value = new Date(startObj.value.getTime() + (util.MS_PER_MINUTE * eventProp.duration));\n endObj.dataBind();\n }\n };\n EventWindow.prototype.onBeforeClose = function () {\n this.parent.eventBase.focusElement();\n };\n EventWindow.prototype.getEventWindowContent = function () {\n var container = createElement('div', { className: cls.FORM_CONTAINER_CLASS });\n var form = createElement('form', {\n id: this.parent.element.id + 'EditForm',\n className: cls.FORM_CLASS,\n attrs: { onsubmit: 'return false;' }\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(cls.EVENT_WINDOW_DIALOG_PARENT_CLASS);\n var titleLocationDiv = this.createDivElement(cls.EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS);\n var titleDiv = this.renderTextBox(cls.SUBJECT_CLASS);\n var locationDiv = this.renderTextBox(cls.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.TIME_ZONE_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', { className: REPEAT_CONTAINER_CLASS });\n var button = createElement('button', {\n className: REPEAT_BUTTON_CLASS,\n attrs: { type: 'button', 'title': this.l10n.getConstant('editRecurrence') }\n });\n this.buttonObj = new Button({ iconCss: REPEAT_BUTTON_ICON_CLASS + ' e-icons', cssClass: 'e-medium ' + this.parent.cssClass });\n repeatEditConainer.appendChild(button);\n this.buttonObj.appendTo(button);\n repeatDiv.appendChild(repeatEditConainer);\n repeatParentDiv.appendChild(repeatDiv);\n var description = this.createDivElement(cls.DESCRIPTION_CLASS + '-row');\n var descriptionDiv = this.renderTextBox(cls.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 if (this.parent.resources.length > 0) {\n var resourceParentDiv = this.createDivElement(cls.EVENT_WINDOW_RESOURCES_DIV_CLASS);\n for (var i = 0; i < this.parent.resourceBase.resourceCollection.length; i++) {\n resourceParentDiv.appendChild(this.renderMultiSelect(i));\n }\n parentDiv.appendChild(resourceParentDiv);\n }\n parentDiv.appendChild(description);\n var submit = createElement('button', { attrs: { type: 'hidden', title: 'submit', style: 'display:none' } });\n parentDiv.appendChild(submit);\n return parentDiv;\n };\n EventWindow.prototype.createRecurrenceEditor = function (parentDiv) {\n var recurrenceEditor = this.createDivElement();\n parentDiv.appendChild(recurrenceEditor);\n this.recurrenceEditor = this.renderRecurrenceEditor();\n this.recurrenceEditor.appendTo(recurrenceEditor);\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 title: ((this.l10n.getConstant(fieldName.charAt(0).toLowerCase() + fieldName.slice(1))) === '') ?\n fieldName : this.l10n.getConstant(fieldName.charAt(0).toLowerCase() + fieldName.slice(1))\n }\n });\n };\n EventWindow.prototype.getSlotDuration = function () {\n return this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\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,\n cssClass: this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n floatLabelType: 'Always',\n format: (isNullOrUndefined(this.parent.dateFormat) ?\n this.getFormat('dateFormats') : this.parent.dateFormat) + ' ' + this.getFormat('timeFormats'),\n placeholder: this.getFieldLabel(value),\n step: this.getSlotDuration(),\n value: new Date(), width: '100%'\n });\n dateTimePicker.appendTo(dateTimeInput);\n return dateTimeDiv;\n };\n EventWindow.prototype.refreshDateTimePicker = function (duration) {\n var _this = this;\n var startEndElement = [].slice.call(this.element.querySelectorAll('.' + cls.EVENT_WINDOW_START_CLASS + ',.' +\n cls.EVENT_WINDOW_END_CLASS));\n startEndElement.forEach(function (element) {\n var instance = element.ej2_instances[0];\n instance.step = duration || _this.getSlotDuration();\n instance.dataBind();\n });\n };\n EventWindow.prototype.onTimeChange = function () {\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 * this.duration;\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.renderMultiSelect = function (index) {\n var resourceData = this.parent.resourceBase.resourceCollection[index];\n var fieldName = resourceData.field;\n var value = 'e-' + fieldName;\n var labelValue = resourceData.title;\n var resourceDiv = this.createDivElement(value + '-container' + ' ' + 'e-resources');\n var resourceInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n resourceDiv.appendChild(resourceInput);\n var resourceTemplate = '
    ${' + resourceData.textField + '}
    ';\n if (resourceData.allowMultiple) {\n var listObj = new MultiSelect({\n cssClass: this.parent.cssClass || '',\n dataSource: resourceData.dataSource,\n change: this.onMultiselectResourceChange.bind(this),\n itemTemplate: resourceTemplate,\n fields: {\n text: resourceData.textField,\n value: resourceData.idField\n },\n htmlAttributes: { 'title': labelValue, 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: labelValue,\n popupHeight: '230px',\n popupWidth: '447px',\n mode: 'Box'\n });\n listObj.appendTo(resourceInput);\n }\n else {\n var drowDownList = new DropDownList({\n cssClass: this.parent.cssClass || '',\n change: this.onDropdownResourceChange.bind(this),\n dataSource: resourceData.dataSource,\n enableRtl: this.parent.enableRtl,\n fields: {\n text: resourceData.textField,\n value: resourceData.idField\n },\n htmlAttributes: { 'title': labelValue, 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: labelValue,\n popupHeight: '230px',\n popupWidth: '447px',\n itemTemplate: resourceTemplate\n });\n drowDownList.appendTo(resourceInput);\n }\n return resourceDiv;\n };\n EventWindow.prototype.renderDropDown = function (value) {\n var fieldName = this.getFieldName(value);\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,\n change: this.onTimezoneChange,\n cssClass: this.parent.cssClass || '',\n dataSource: timezoneData,\n enableRtl: this.parent.enableRtl,\n fields: { text: 'Text', value: 'Value' },\n filterBarPlaceholder: 'Search Timezone',\n 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 htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: this.getFieldLabel(value),\n popupHeight: '230px',\n });\n drowDownList.appendTo(timezoneInput);\n return timezoneDiv;\n };\n EventWindow.prototype.onMultiselectResourceChange = function (args) {\n if (!args.value || !this.parent.activeViewOptions.group.byGroupID || this.parent.resources.length <= 1) {\n return;\n }\n var resourceCollection = this.parent.resourceBase.resourceCollection;\n for (var i = 0; i < resourceCollection.length; i++) {\n if (resourceCollection[i].field === args.element.getAttribute('name') && i < resourceCollection.length - 1) {\n var resObject = this.createInstance(i);\n var datasource = [];\n for (var j = 0; j < args.value.length; j++) {\n var resourceData = resourceCollection[i + 1].dataSource;\n var query = new Query().where(resourceCollection[i + 1].groupIDField, 'equal', args.value[j]);\n var filter = new DataManager({ json: resourceData }).executeLocal(query)[0];\n var groupId = filter[resourceCollection[i + 1].idField];\n var filterRes = this.filterDatasource(i, groupId);\n datasource = datasource.concat(filterRes);\n }\n resObject.dataSource = datasource;\n resObject.dataBind();\n }\n }\n };\n EventWindow.prototype.createInstance = function (index) {\n var resourceData = this.parent.resourceBase.resourceCollection[index + 1];\n var resObject = this.element.querySelector('.e-' + resourceData.field).\n ej2_instances[0];\n return resObject;\n };\n EventWindow.prototype.onDropdownResourceChange = function (args) {\n if (!args.value || this.parent.resources.length <= 1 || !this.parent.activeViewOptions.group.byGroupID) {\n return;\n }\n var resourceCollection = this.parent.resourceBase.resourceCollection;\n for (var i = 0; i < resourceCollection.length; i++) {\n if ((i < resourceCollection.length - 1) && resourceCollection[i].field === args.element.getAttribute('name')) {\n var resObj = this.createInstance(i);\n var groupId = args.itemData[resourceCollection[i].idField];\n resObj.dataSource = this.filterDatasource(i, groupId);\n resObj.dataBind();\n var resValue = resObj.dataSource[0][resourceCollection[i + 1].idField];\n resObj.value = (resourceCollection[i + 1].allowMultiple) ? [resValue] : resValue;\n resObj.dataBind();\n }\n }\n };\n EventWindow.prototype.filterDatasource = function (index, groupId) {\n var resourceData = this.parent.resourceBase.resourceCollection[index + 1];\n var query = new Query().where(resourceData.groupIDField, 'equal', groupId);\n var filter = new DataManager({ json: resourceData.dataSource }).executeLocal(query);\n return filter;\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 checkBox = new CheckBox({\n change: this.onChange.bind(this),\n cssClass: value + ' ' + this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n label: this.getFieldLabel(value)\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 elementType = (value === cls.DESCRIPTION_CLASS) ? 'textarea' : 'input';\n var textBoxInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName, elementType);\n textBoxDiv.appendChild(textBoxInput);\n Input.createInput({\n element: textBoxInput,\n floatLabelType: 'Always',\n properties: {\n enableRtl: this.parent.enableRtl,\n placeholder: this.getFieldLabel(value)\n }\n });\n return textBoxDiv;\n };\n EventWindow.prototype.getFieldName = function (name) {\n var fieldName = '';\n switch (name) {\n case cls.SUBJECT_CLASS:\n fieldName = this.fields.subject;\n break;\n case cls.LOCATION_CLASS:\n fieldName = this.fields.location;\n break;\n case cls.EVENT_WINDOW_START_CLASS:\n fieldName = this.fields.startTime;\n break;\n case cls.EVENT_WINDOW_END_CLASS:\n fieldName = this.fields.endTime;\n break;\n case cls.DESCRIPTION_CLASS:\n fieldName = this.fields.description;\n break;\n case cls.EVENT_WINDOW_ALL_DAY_CLASS:\n fieldName = this.fields.isAllDay;\n break;\n case cls.EVENT_WINDOW_START_TZ_CLASS:\n fieldName = this.fields.startTimezone;\n break;\n case cls.EVENT_WINDOW_END_TZ_CLASS:\n fieldName = this.fields.endTimezone;\n break;\n case cls.TIME_ZONE_CLASS:\n fieldName = 'Timezone';\n break;\n case cls.EVENT_WINDOW_REPEAT_CLASS:\n fieldName = 'Repeat';\n break;\n }\n return fieldName;\n };\n EventWindow.prototype.getFieldLabel = function (fieldName) {\n var labelText = '';\n switch (fieldName) {\n case cls.SUBJECT_CLASS:\n labelText = this.parent.editorTitles.subject;\n break;\n case cls.LOCATION_CLASS:\n labelText = this.parent.editorTitles.location;\n break;\n case cls.DESCRIPTION_CLASS:\n labelText = this.parent.editorTitles.description;\n break;\n case cls.EVENT_WINDOW_START_CLASS:\n labelText = this.parent.editorTitles.startTime;\n break;\n case cls.EVENT_WINDOW_END_CLASS:\n labelText = this.parent.editorTitles.endTime;\n break;\n case cls.EVENT_WINDOW_START_TZ_CLASS:\n labelText = this.parent.editorTitles.startTimezone;\n break;\n case cls.EVENT_WINDOW_END_TZ_CLASS:\n labelText = this.parent.editorTitles.endTimezone;\n break;\n case cls.EVENT_WINDOW_REPEAT_CLASS:\n labelText = this.parent.editorTitles.recurrenceRule;\n break;\n case cls.EVENT_WINDOW_ALL_DAY_CLASS:\n labelText = this.parent.editorTitles.isAllDay;\n break;\n case cls.TIME_ZONE_CLASS:\n labelText = this.l10n.getConstant('timezone');\n break;\n }\n return labelText;\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.TIME_ZONE_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-rec-editor'));\n };\n EventWindow.prototype.loadRecurrenceEditor = function () {\n this.repeatDialogObject.show();\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.hide();\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 addClass([element], 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 removeClass([element], HIDE_STYLE_CLASS);\n }\n else {\n addClass([element], 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.hide();\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 (event) {\n this.element.querySelector('.' + cls.FORM_CLASS).removeAttribute('data-id');\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 if (this.parent.resources.length > 0 || this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.setResourceValues(eventObj, false);\n }\n this.showDetails(eventObj);\n var deleteButton = this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS);\n if (deleteButton) {\n addClass([deleteButton], cls.DISABLE_CLASS);\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 addClass([element], HIDE_STYLE_CLASS);\n this.updateRepeatLabel(this.repeatRule);\n }\n this.dialogObject.show();\n };\n EventWindow.prototype.applyFormValidation = function () {\n var getValidationRule = function (rules) { return (rules && Object.keys(rules).length > 0) ? rules : undefined; };\n var form = this.element.querySelector('.' + cls.FORM_CLASS);\n var rules = {};\n rules[this.parent.eventSettings.fields.subject.name] = getValidationRule(this.parent.eventSettings.fields.subject.validation);\n rules[this.parent.eventSettings.fields.location.name] = getValidationRule(this.parent.eventSettings.fields.location.validation);\n rules[this.parent.eventSettings.fields.startTime.name] = getValidationRule(this.parent.eventSettings.fields.startTime.validation);\n rules[this.parent.eventSettings.fields.endTime.name] = getValidationRule(this.parent.eventSettings.fields.endTime.validation);\n rules[this.parent.eventSettings.fields.description.name] =\n getValidationRule(this.parent.eventSettings.fields.description.validation);\n this.fieldValidator.renderFormValidator(form, rules, this.element);\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(cls.EVENT_WINDOW_DIALOG_CLASS);\n var keyNames = Object.keys(eventObj);\n for (var _i = 0, formelement_1 = formelement; _i < formelement_1.length; _i++) {\n var curElement = formelement_1[_i];\n var columnName = curElement.name;\n var isCustomElement = (curElement.classList.contains('e-multiselect') ||\n curElement.classList.contains('e-dropdownlist'));\n if (!isNullOrUndefined(columnName) || isCustomElement) {\n if (columnName === '' && isCustomElement) {\n columnName = this.getColumnName(curElement);\n curElement.setAttribute('name', columnName);\n }\n if (keyNames.indexOf(columnName) !== -1) {\n this.setValueToElement(curElement, eventObj[columnName]);\n }\n else {\n this.setDefaultValueToElement(curElement);\n }\n }\n }\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n this.onAllDayChange(eventObj[this.fields.isAllDay]);\n var timezoneObj = this.getInstance(cls.TIME_ZONE_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.getColumnName = function (element) {\n var isDropDownList = element.classList.contains('e-dropdownlist');\n var inputCollection = isDropDownList ? [].slice.call(element.parentElement.children) :\n [].slice.call(element.parentElement.parentElement.children);\n var collection = inputCollection.filter(function (item) { return item.name; });\n return (collection.length > 0) ? collection[0].name : '';\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 timezoneDiv = this.element.querySelector('.e-time-zone-container');\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 addClass([timezoneDiv], cls.DISABLE_CLASS);\n if (this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS)) {\n removeClass([this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS)], cls.ENABLE_CLASS);\n }\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 removeClass([timezoneDiv], cls.DISABLE_CLASS);\n if (this.element.querySelector('.e-checkbox-wrapper .e-time-zone').checked) {\n addClass([this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS)], cls.ENABLE_CLASS);\n }\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 * this.getSlotDuration());\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 removeClass([this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS)], cls.DISABLE_CLASS);\n }\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('editEvent');\n this.element.querySelector('.' + cls.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.TIME_ZONE_CLASS + '.' + EVENT_FIELD);\n var timezoneValue = void 0;\n if (eventObj[this.fields.startTimezone] || eventObj[this.fields.endTimezone]) {\n timezoneValue = true;\n this.parent.eventBase.timezoneConvert(eventObj);\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 removeClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: true });\n }\n else {\n addClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n }\n if (this.parent.readonly && !this.parent.isAdaptive) {\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.refreshResourceDataSource = function () {\n var _this = this;\n if (this.parent.resources.length === 0 || !isNullOrUndefined(this.parent.editorTemplate)) {\n return;\n }\n this.parent.resourceBase.resourceCollection.forEach(function (resource, index) {\n var instance = _this.createInstance(index - 1);\n instance.dataSource = resource.dataSource;\n instance.dataBind();\n });\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 () {\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 timezone.push({ Value: localTimezoneName, Text: localTimezoneName });\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(cls.EVENT_WINDOW_DIALOG_CLASS);\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 (alert) {\n var alertType;\n var formElement = this.element.querySelector('.' + cls.FORM_CLASS);\n if (formElement && formElement.classList.contains('e-formvalidator') &&\n !formElement.ej2_instances[0].validate()) {\n return;\n }\n var eventObj = extend({}, this.getObjectFromFormData(cls.EVENT_WINDOW_DIALOG_CLASS));\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 if (this.recurrenceEditor && this.recurrenceEditor.value && this.recurrenceEditor.value !== '') {\n alertType = this.recurrenceValidation(eventObj[this.fields.startTime], eventObj[this.fields.endTime], alert);\n if (!isNullOrUndefined(alertType)) {\n this.parent.quickPopup.openRecurrenceValidationAlert(alertType);\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(new Date(eventObj[this.fields.startTime].getTime()));\n eventObj[this.fields.endTime] = util.addDays(util.resetTime(new Date(eventObj[this.fields.endTime].getTime())), 1);\n }\n var ruleData = this.recurrenceEditor ? this.recurrenceEditor.getRecurrenceRule() : null;\n eventObj[this.fields.recurrenceRule] = ruleData ? ruleData : undefined;\n var isResourceEventExpand = (this.parent.activeViewOptions.group.resources.length > 0 || this.parent.resources.length > 0)\n && !this.parent.activeViewOptions.group.allowGroupEdit;\n if (!isNullOrUndefined(eventId)) {\n var eveId = this.parent.eventBase.getEventIDType() === 'string' ? eventId : parseInt(eventId, 10);\n var editedData = new DataManager({ json: this.parent.eventsData }).executeLocal(new Query().\n where(this.fields.id, 'equal', eveId))[0];\n eventObj = extend({}, editedData, eventObj);\n var currentAction = void 0;\n if (!isNullOrUndefined(editedData[this.fields.recurrenceRule])) {\n currentAction = this.parent.currentAction;\n if (this.parent.currentAction === 'EditOccurrence') {\n if (!eventObj[this.fields.recurrenceID]) {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxID();\n eventObj.Guid = this.parent.activeEventData.event.Guid;\n }\n else {\n currentAction = null;\n }\n if (this.editOccurrenceValidation(eveId, eventObj)) {\n this.parent.quickPopup.openRecurrenceValidationAlert('sameDayAlert');\n return;\n }\n }\n if (this.parent.currentAction === 'EditSeries' || eventObj[this.fields.id] !== editedData[this.fields.id]) {\n eventObj[this.fields.recurrenceID] = editedData[this.fields.id];\n }\n }\n if (isResourceEventExpand) {\n this.resourceSaveEvent(eventObj, 'Save', currentAction);\n }\n else {\n this.parent.saveEvent(eventObj, currentAction);\n }\n }\n else {\n this.parent.currentAction = 'Add';\n if (isResourceEventExpand) {\n this.resourceSaveEvent(eventObj, this.parent.currentAction);\n }\n else {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxID();\n this.parent.addEvent(eventObj);\n }\n }\n this.dialogObject.hide();\n };\n EventWindow.prototype.getObjectFromFormData = function (className) {\n var formElement = this.getFormElements(className);\n var eventObj = {};\n for (var _i = 0, formElement_1 = formElement; _i < formElement_1.length; _i++) {\n var currentElement = formElement_1[_i];\n var columnName = currentElement.name;\n if (!isNullOrUndefined(columnName) && columnName !== '') {\n eventObj[columnName] = this.getValueFromElement(currentElement);\n }\n }\n return eventObj;\n };\n EventWindow.prototype.recurrenceValidation = function (startDate, endDate, alert) {\n var alertMessage;\n var recEditor = this.recurrenceEditor;\n var interval = this.getInstance('e-repeat-interval.e-numerictextbox').value;\n if (alert !== this.l10n.getConstant('ok')) {\n if (this.parent.currentAction === 'EditSeries' &&\n !isNullOrUndefined(this.eventData[this.parent.eventFields.recurrenceException])) {\n alertMessage = 'seriesChangeAlert';\n }\n if (this.getInstance('e-end-on-left .e-ddl .e-dropdownlist').value === 'until' &&\n this.getInstance('e-end-on-date .e-datepicker').value\n < recEditor.startDate) {\n alertMessage = 'wrongPattern';\n }\n if (isNullOrUndefined(alertMessage)) {\n switch (recEditor.value.split(';')[0].split('=')[1]) {\n case 'DAILY':\n if ((((endDate.getTime() - startDate.getTime()) / (1000 * 3600)) >= (interval * 24))) {\n alertMessage = 'createError';\n }\n break;\n case 'WEEKLY':\n var types = recEditor.value.split(';')[1].split('=')[1].split(',');\n var obj = { 'SU': 0, 'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6 };\n var temp = [];\n var tempDiff = [];\n for (var index = 0; index < types.length * (interval + 1); index++) {\n temp[index] =\n (types.length > index) ? obj[types[index]] : temp[index - types.length] + (7 * interval);\n }\n var tempvalue = temp.sort(function (a, b) { return a - b; });\n for (var index = 1; index < tempvalue.length; index++) {\n tempDiff.push(tempvalue[index] - tempvalue[index - 1]);\n }\n if ((((endDate.getTime() - startDate.getTime()) / (1000 * 3600)) >= Math.min.apply(Math, tempDiff) * 24)\n || isNullOrUndefined(interval)) {\n alertMessage = 'createError';\n }\n break;\n case 'MONTHLY':\n if (this.getInstance('e-month-expander-checkbox-wrapper .e-radio').checked\n && [29, 30, 31].indexOf(parseInt(recEditor.value.split(';')[1].split('=')[1], 10)) !== -1) {\n alertMessage = 'dateValidation';\n }\n else if (endDate.getTime() >= new Date(+startDate).setMonth(startDate.getMonth() + interval)) {\n alertMessage = 'createError';\n }\n break;\n case 'YEARLY':\n if (endDate.getTime() >= new Date(+startDate).setFullYear(startDate.getFullYear() + interval)) {\n alertMessage = 'createError';\n }\n break;\n }\n }\n }\n else {\n if (endDate.getTime() >= new Date(+startDate).setMonth(startDate.getMonth() + interval)) {\n alertMessage = 'createError';\n }\n if (isNullOrUndefined(alertMessage)) {\n this.parent.quickPopup.quickDialog.hide();\n }\n }\n return alertMessage;\n };\n EventWindow.prototype.getRecurrenceIndex = function (recColl, event) {\n var recIndex;\n for (var index = 0; index < recColl.length; index++) {\n if (event[this.fields.startTime].valueOf() === recColl[index][this.fields.startTime].valueOf()) {\n recIndex = index;\n break;\n }\n }\n return recIndex;\n };\n EventWindow.prototype.editOccurrenceValidation = function (eventId, eventObj) {\n var recurColl = this.parent.getOccurrencesByID(eventId);\n var index = this.getRecurrenceIndex(recurColl, this.eventData);\n if (isNullOrUndefined(index)) {\n return false;\n }\n if (index === 0) {\n if (!isNullOrUndefined(recurColl[index + 1])) {\n if (!(new Date(+recurColl[index + 1][this.fields.startTime]).getTime() >=\n new Date(+eventObj[this.fields.endTime]).getTime())) {\n return true;\n }\n }\n }\n else {\n if (index === recurColl.length - 1) {\n if (!(new Date(+recurColl[index - 1][this.fields.endTime]).getTime()\n <= new Date(+eventObj[this.fields.startTime]).getTime())) {\n return true;\n }\n }\n else if (!((new Date(+recurColl[index - 1][this.fields.endTime]).getTime() <=\n new Date(+eventObj[this.fields.startTime]).getTime()) &&\n (new Date(+recurColl[index + 1][this.fields.startTime]).getTime() >=\n new Date(+eventObj[this.fields.endTime]).getTime()))) {\n return true;\n }\n }\n return false;\n };\n EventWindow.prototype.resourceSaveEvent = function (eventObj, action, currentAction) {\n var _this = this;\n var lastResouceData = this.parent.resourceBase.resourceCollection.slice(-1)[0];\n var resourceData = eventObj[lastResouceData.field];\n resourceData = (resourceData instanceof Array) ? resourceData : [resourceData];\n var lastlevel = this.parent.resourceBase.lastResourceLevel;\n var eventList = [];\n var _loop_1 = function (i) {\n var events = extend({}, eventObj, null, true);\n events[this_1.fields.id] = this_1.parent.eventBase.getEventMaxID();\n var temp = [];\n var addValues = function () {\n if (action === 'Save' && i === resourceData.length - 1) {\n if (temp.length > 0) {\n temp[0][_this.fields.id] = eventObj[_this.fields.id];\n for (var k = 1; k < temp.length; k++) {\n temp[k][_this.fields.id] = _this.parent.eventBase.getEventMaxID(i);\n eventList.push(temp[k]);\n _this.parent.saveEvent(temp[0], currentAction);\n }\n }\n else {\n events[_this.fields.id] = eventObj[_this.fields.id];\n _this.parent.saveEvent(events, currentAction);\n }\n }\n else {\n if (temp.length > 0) {\n for (var j = 0; j < temp.length; j++) {\n temp[j][_this.fields.id] = _this.parent.eventBase.getEventMaxID(j);\n eventList.push(temp[j]);\n }\n }\n else {\n events[_this.fields.id] = _this.parent.eventBase.getEventMaxID(i);\n eventList.push(events);\n }\n }\n };\n if (this_1.parent.activeViewOptions.group.byGroupID && (!isNullOrUndefined(lastlevel))) {\n var lastResource = lastResouceData.dataSource;\n var index = util.findIndexInData(lastResource, lastResouceData.idField, resourceData[i]);\n var groupId_1 = lastResource[index][lastResouceData.groupIDField];\n var filter = lastlevel.filter(function (obj) { return obj.resourceData[lastResouceData.idField] === resourceData[i]; }).\n filter(function (obj) { return obj.resourceData[lastResouceData.groupIDField] === groupId_1; })[0];\n var groupOrder = filter.groupOrder;\n for (var index_1 = 0; index_1 < this_1.parent.resourceBase.resourceCollection.length; index_1++) {\n var field = this_1.parent.resourceBase.resourceCollection[index_1].field;\n events[field] = (groupOrder[index_1] instanceof Array) ? groupOrder[index_1][0] : groupOrder[index_1];\n }\n addValues();\n }\n else {\n for (var index = 0; index < this_1.parent.resourceBase.resourceCollection.length - 1; index++) {\n var field = this_1.parent.resourceBase.resourceCollection[index].field;\n if (events[field] instanceof Array && events[field].length > 1) {\n for (var k = 0; k < events[field].length; k++) {\n var event_1 = extend({}, events, null, true);\n event_1[field] = eventObj[field][k];\n event_1[lastResouceData.field] = resourceData[i];\n temp.push(event_1);\n }\n }\n else {\n if (temp.length === 0) {\n events[field] = (eventObj[field] instanceof Array) ?\n eventObj[field][0] : eventObj[field];\n events[lastResouceData.field] = resourceData[i];\n }\n else {\n for (var l = 0; l < temp.length; l++) {\n temp[l][field] = (eventObj[field] instanceof Array) ?\n eventObj[field][0] : eventObj[field];\n }\n }\n }\n }\n events[lastResouceData.field] = resourceData[i];\n addValues();\n }\n };\n var this_1 = this;\n for (var i = 0; i < resourceData.length; i++) {\n _loop_1(i);\n }\n if (eventList.length > 0) {\n for (var _i = 0, eventList_1 = eventList; _i < eventList_1.length; _i++) {\n var event_2 = eventList_1[_i];\n event_2[this.fields.recurrenceException] = null;\n event_2[this.fields.recurrenceID] = null;\n }\n this.parent.addEvent(eventList);\n }\n };\n EventWindow.prototype.getEventIdFromForm = function () {\n return this.element.querySelector('.' + cls.FORM_CLASS).getAttribute('data-id');\n };\n EventWindow.prototype.getFormElements = function (className) {\n if (className === cls.EVENT_WINDOW_DIALOG_CLASS) {\n return [].slice.call(this.element.querySelectorAll('.' + EVENT_FIELD));\n }\n return [].slice.call(this.parent.element.querySelectorAll('.' + className + ' .' + 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-multiselect')) {\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-multiselect')) {\n var instance = element.ej2_instances[0];\n instance.value = [];\n instance.value = ((value instanceof Array) ? 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-multiselect')) {\n var instance = element.ej2_instances[0];\n instance.value = [];\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 () {\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 EventWindow.prototype.destroyComponents = function () {\n var formelement = this.getFormElements(cls.EVENT_WINDOW_DIALOG_CLASS);\n for (var _i = 0, formelement_2 = formelement; _i < formelement_2.length; _i++) {\n var element = formelement_2[_i];\n var instance = void 0;\n if (element.classList.contains('e-datetimepicker')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-datepicker')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-checkbox')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-dropdownlist')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-multiselect')) {\n instance = element.ej2_instances[0];\n }\n if (instance) {\n instance.destroy();\n }\n }\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\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 this.destroyComponents();\n this.fieldValidator.destroy();\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 };\n return EventWindow;\n}());\nexport { EventWindow };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { EventTooltip } from '../popups/event-tooltip';\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, isDataRefresh) {\n if (isDataRefresh === void 0) { isDataRefresh = true; }\n this.initializeLayout(viewName);\n if (isDataRefresh) {\n this.refreshDataManager();\n }\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 'MonthAgenda':\n this.parent.activeView = this.parent.monthAgendaModule;\n break;\n case 'TimelineDay':\n this.parent.activeView = this.parent.timelineViewsModule;\n this.parent.activeView.viewClass = 'e-timeline-day-view';\n break;\n case 'TimelineWorkWeek':\n this.parent.activeView = this.parent.timelineViewsModule;\n this.parent.activeView.viewClass = 'e-timeline-work-week-view';\n break;\n case 'TimelineWeek':\n this.parent.activeView = this.parent.timelineViewsModule;\n this.parent.activeView.viewClass = 'e-timeline-week-view';\n break;\n case 'TimelineMonth':\n this.parent.activeView = this.parent.timelineMonthModule;\n break;\n }\n if (isNullOrUndefined(this.parent.activeView)) {\n var firstView = this.parent.viewCollections[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.uiStateValues.isGroupAdaptive = this.parent.isAdaptive && this.parent.activeViewOptions.group.resources.length > 0 &&\n this.parent.activeViewOptions.group.enableCompactView;\n this.parent.activeView.renderLayout(cls.CURRENT_PANEL_CLASS);\n if ((this.parent.eventSettings.enableTooltip ||\n (this.parent.timelineViewsModule && this.parent.activeViewOptions.group.resources.length > 0\n && this.parent.activeViewOptions.group.headerTooltipTemplate)) && isNullOrUndefined(this.parent.eventTooltip)) {\n this.parent.eventTooltip = new EventTooltip(this.parent);\n }\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', 'main');\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); }).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 this.parent.hideSpinner();\n };\n Render.prototype.dataManagerFailure = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.hideSpinner();\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 * A class that represents the configuration of working hours related options of scheduler.\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 represents the configuration of options related to timescale on scheduler.\n */\nvar TimeScale = /** @class */ (function (_super) {\n __extends(TimeScale, _super);\n function TimeScale() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], TimeScale.prototype, \"enable\", void 0);\n __decorate([\n Property(60)\n ], TimeScale.prototype, \"interval\", void 0);\n __decorate([\n Property(2)\n ], TimeScale.prototype, \"slotCount\", void 0);\n __decorate([\n Property()\n ], TimeScale.prototype, \"minorSlotTemplate\", void 0);\n __decorate([\n Property()\n ], TimeScale.prototype, \"majorSlotTemplate\", void 0);\n return TimeScale;\n}(ChildProperty));\nexport { TimeScale };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 defines the template options available to customize the quick popup of scheduler.\n */\nvar QuickInfoTemplates = /** @class */ (function (_super) {\n __extends(QuickInfoTemplates, _super);\n function QuickInfoTemplates() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], QuickInfoTemplates.prototype, \"header\", void 0);\n __decorate([\n Property()\n ], QuickInfoTemplates.prototype, \"content\", void 0);\n __decorate([\n Property()\n ], QuickInfoTemplates.prototype, \"footer\", void 0);\n return QuickInfoTemplates;\n}(ChildProperty));\nexport { QuickInfoTemplates };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 represents the header rows related configurations on timeline views.\n */\nvar HeaderRows = /** @class */ (function (_super) {\n __extends(HeaderRows, _super);\n function HeaderRows() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], HeaderRows.prototype, \"option\", void 0);\n __decorate([\n Property()\n ], HeaderRows.prototype, \"template\", void 0);\n return HeaderRows;\n}(ChildProperty));\nexport { HeaderRows };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 that applies on each appointment field options of scheduler.\n */\nvar FieldOptions = /** @class */ (function (_super) {\n __extends(FieldOptions, _super);\n function FieldOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldOptions.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"default\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"title\", void 0);\n __decorate([\n Property({})\n ], FieldOptions.prototype, \"validation\", void 0);\n return FieldOptions;\n}(ChildProperty));\nexport { FieldOptions };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { FieldOptions } from './field-options';\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('Id')\n ], Field.prototype, \"id\", void 0);\n __decorate([\n Complex({ name: 'Subject', default: 'Add title' }, FieldOptions)\n ], Field.prototype, \"subject\", void 0);\n __decorate([\n Complex({ name: 'StartTime' }, FieldOptions)\n ], Field.prototype, \"startTime\", void 0);\n __decorate([\n Complex({ name: 'EndTime' }, FieldOptions)\n ], Field.prototype, \"endTime\", void 0);\n __decorate([\n Complex({ name: 'StartTimezone' }, FieldOptions)\n ], Field.prototype, \"startTimezone\", void 0);\n __decorate([\n Complex({ name: 'EndTimezone' }, FieldOptions)\n ], Field.prototype, \"endTimezone\", void 0);\n __decorate([\n Complex({ name: 'Location' }, FieldOptions)\n ], Field.prototype, \"location\", void 0);\n __decorate([\n Complex({ name: 'Description' }, FieldOptions)\n ], Field.prototype, \"description\", void 0);\n __decorate([\n Complex({ name: 'IsAllDay' }, FieldOptions)\n ], Field.prototype, \"isAllDay\", void 0);\n __decorate([\n Complex({ name: 'RecurrenceID' }, FieldOptions)\n ], Field.prototype, \"recurrenceID\", void 0);\n __decorate([\n Complex({ name: 'RecurrenceRule' }, FieldOptions)\n ], Field.prototype, \"recurrenceRule\", void 0);\n __decorate([\n Complex({ name: 'RecurrenceException' }, FieldOptions)\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 __decorate([\n Property()\n ], EventSettings.prototype, \"resourceColorField\", 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 { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that holds the resource grouping related configurations on Schedule.\n */\nvar Group = /** @class */ (function (_super) {\n __extends(Group, _super);\n function Group() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], Group.prototype, \"byDate\", void 0);\n __decorate([\n Property(true)\n ], Group.prototype, \"byGroupID\", void 0);\n __decorate([\n Property(false)\n ], Group.prototype, \"allowGroupEdit\", void 0);\n __decorate([\n Property([])\n ], Group.prototype, \"resources\", void 0);\n __decorate([\n Property(true)\n ], Group.prototype, \"enableCompactView\", void 0);\n __decorate([\n Property()\n ], Group.prototype, \"headerTooltipTemplate\", void 0);\n return Group;\n}(ChildProperty));\nexport { Group };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 represents the resource related configurations and its data binding options.\n */\nvar Resources = /** @class */ (function (_super) {\n __extends(Resources, _super);\n function Resources() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Resources.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"title\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"name\", void 0);\n __decorate([\n Property(false)\n ], Resources.prototype, \"allowMultiple\", void 0);\n __decorate([\n Property([])\n ], Resources.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"query\", void 0);\n __decorate([\n Property('Id')\n ], Resources.prototype, \"idField\", void 0);\n __decorate([\n Property('Text')\n ], Resources.prototype, \"textField\", void 0);\n __decorate([\n Property('Expanded')\n ], Resources.prototype, \"expandedField\", void 0);\n __decorate([\n Property('GroupID')\n ], Resources.prototype, \"groupIDField\", void 0);\n __decorate([\n Property('Color')\n ], Resources.prototype, \"colorField\", void 0);\n __decorate([\n Property('StartHour')\n ], Resources.prototype, \"startHourField\", void 0);\n __decorate([\n Property('EndHour')\n ], Resources.prototype, \"endHourField\", void 0);\n __decorate([\n Property('WorkDays')\n ], Resources.prototype, \"workDaysField\", void 0);\n __decorate([\n Property('CssClass')\n ], Resources.prototype, \"cssClassField\", void 0);\n return Resources;\n}(ChildProperty));\nexport { Resources };\n","import { extend, isNullOrUndefined, createElement, EventHandler, addClass, append, removeClass, remove, closest, classList } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Data } from '../actions/data';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nvar ResourceBase = /** @class */ (function () {\n function ResourceBase(parent) {\n this.resourceCollection = [];\n this.leftPixel = 25;\n this.parent = parent;\n }\n ResourceBase.prototype.renderResourceHeaderIndent = function (tr) {\n var resColTd = createElement('td', { className: cls.RESOURCE_LEFT_TD_CLASS });\n var resColDiv = createElement('div', {\n className: cls.RESOURCE_TEXT_CLASS\n });\n resColTd.appendChild(resColDiv);\n var args = { elementType: 'emptyCells', element: resColTd };\n this.parent.trigger(events.renderCell, args);\n tr.appendChild(resColTd);\n };\n ResourceBase.prototype.hideResourceRows = function (tBody) {\n if (this.resourceCollection.length <= 1) {\n return;\n }\n var trCount = this.lastResourceLevel.length;\n for (var i = 0; i < trCount; i++) {\n var resData = this.lastResourceLevel[i].resourceData;\n var res = this.lastResourceLevel[i].resource;\n if (resData.ClassName === cls.RESOURCE_PARENT_CLASS && !resData[res.expandedField] &&\n !isNullOrUndefined(resData[res.expandedField])) {\n var trCollection = [].slice.call(tBody.children);\n var slicedCollection = trCollection.slice(i + 1, i + (parseInt(resData.Count, 0) + 1));\n addClass(slicedCollection, cls.HIDDEN_CLASS);\n }\n }\n };\n ResourceBase.prototype.createResourceColumn = function () {\n var resColl = this.resourceCollection;\n var resDiv = createElement('div', { className: cls.RESOURCE_COLUMN_WRAP_CLASS });\n var tbl = this.parent.activeView.createTableLayout(cls.RESOURCE_COLUMN_TABLE_CLASS);\n var tBody = tbl.querySelector('tbody');\n var resData = this.generateTreeData(true);\n this.countCalculation(resColl.slice(0, -2), resColl.slice(0, -1));\n append(this.getContentRows(resData), tBody);\n this.hideResourceRows(tBody);\n tbl.appendChild(tBody);\n resDiv.appendChild(tbl);\n return resDiv;\n };\n ResourceBase.prototype.getContentRows = function (resData) {\n var resRows = [];\n var left;\n var rIndex;\n var resColl = this.resourceCollection;\n var tr = createElement('tr');\n var td = createElement('td');\n for (var i = 0; i < resData.length; i++) {\n var ntd = td.cloneNode();\n rIndex = util.findIndexInData(resColl, 'name', resData[i].resource.name);\n if (rIndex === resColl.length - 1) {\n extend(resData[i].resourceData, { ClassName: cls.RESOURCE_CHILD_CLASS });\n this.lastResourceLevel[i].className = [cls.RESOURCE_CHILD_CLASS];\n }\n else {\n extend(resData[i].resourceData, { ClassName: cls.RESOURCE_PARENT_CLASS });\n this.lastResourceLevel[i].className = [cls.RESOURCE_PARENT_CLASS];\n }\n left = (rIndex * this.leftPixel) + 'px';\n if (resData[i].resourceData.ClassName === cls.RESOURCE_PARENT_CLASS) {\n var iconClass = void 0;\n if (resData[i].resourceData[resColl[rIndex].expandedField] ||\n isNullOrUndefined(resData[i].resourceData[resColl[rIndex].expandedField])) {\n iconClass = cls.RESOURCE_COLLAPSE_CLASS;\n }\n else {\n iconClass = cls.RESOURCE_EXPAND_CLASS;\n }\n var iconDiv = createElement('div');\n addClass([iconDiv], [cls.RESOURCE_TREE_ICON_CLASS, iconClass]);\n this.setMargin(iconDiv, left);\n ntd.appendChild(iconDiv);\n if (this.resourceCollection.length > 1) {\n EventHandler.add(iconDiv, 'click', this.onTreeIconClick, this);\n }\n }\n this.parent.activeView.setResourceHeaderContent(ntd, resData[i], cls.RESOURCE_TEXT_CLASS);\n ntd.setAttribute('data-group-index', resData[i].groupIndex.toString());\n if (!this.parent.activeViewOptions.resourceHeaderTemplate) {\n this.setMargin(ntd.querySelector('.' + cls.RESOURCE_TEXT_CLASS), left);\n }\n var classCollection = [cls.RESOURCE_CELLS_CLASS, resData[i].resourceData.ClassName];\n addClass([ntd], classCollection);\n var args = { elementType: 'resourceHeader', element: ntd, groupIndex: resData[i].groupIndex };\n this.parent.trigger(events.renderCell, args);\n var ntr = tr.cloneNode();\n ntr.appendChild(ntd);\n resRows.push(ntr);\n }\n return resRows;\n };\n ResourceBase.prototype.setMargin = function (element, value) {\n if (!this.parent.enableRtl) {\n element.style.marginLeft = value;\n }\n else {\n element.style.marginRight = value;\n }\n };\n ResourceBase.prototype.countCalculation = function (parentCollection, wholeCollection) {\n var collection;\n for (var y = 0; y < parentCollection.length; y++) {\n var data = parentCollection[parentCollection.length - (y + 1)]\n .dataSource;\n for (var x = 0; x < data.length; x++) {\n var totalCount = 0;\n if (this.parent.activeViewOptions.group.byGroupID) {\n collection = new DataManager(wholeCollection[wholeCollection.length - 1].dataSource)\n .executeLocal(new Query().where(wholeCollection[wholeCollection.length - 1].groupIDField, 'equal', data[x][parentCollection[parentCollection.length - (y + 1)].idField]));\n }\n else {\n collection = wholeCollection[wholeCollection.length - 1].dataSource;\n }\n for (var z = 0; z < collection.length; z++) {\n totalCount = totalCount + parseInt(collection[z].Count, 0);\n }\n totalCount = totalCount + parseInt(data[x].Count, 0);\n extend(data[x], { Count: totalCount });\n }\n wholeCollection = wholeCollection.slice(0, -1);\n }\n };\n ResourceBase.prototype.onTreeIconClick = function (e) {\n if (this.parent.eventTooltip) {\n this.parent.eventTooltip.close();\n }\n var target = e.target;\n var hide;\n var trElement = closest(target, '.' + cls.RESOURCE_PARENT_CLASS)\n .parentElement;\n var index = trElement.rowIndex;\n var args = {\n cancel: false, event: e, groupIndex: index,\n requestType: !target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS) ? 'resourceExpand' : 'resourceCollapse',\n };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n if (target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS)) {\n classList(target, [cls.RESOURCE_EXPAND_CLASS], [cls.RESOURCE_COLLAPSE_CLASS]);\n hide = true;\n }\n else {\n classList(target, [cls.RESOURCE_COLLAPSE_CLASS], [cls.RESOURCE_EXPAND_CLASS]);\n hide = false;\n }\n var rowCollection = [];\n var workCellCollection = [];\n var headerRowCollection = [];\n var pNode;\n var clickedRes = this.lastResourceLevel[index].resourceData;\n var resRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.RESOURCE_COLUMN_WRAP_CLASS + ' ' + 'tr'));\n var contentRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CONTENT_WRAP_CLASS + ' ' + 'tbody tr'));\n var eventRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CONTENT_WRAP_CLASS + ' .' + cls.APPOINTMENT_CONTAINER_CLASS));\n var eventElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n for (var i = 0; i < eventElements.length; i++) {\n remove(eventElements[i]);\n }\n for (var j = 0; j < clickedRes.Count; j++) {\n rowCollection.push(resRows[index + j + 1]);\n workCellCollection.push(contentRows[index + j + 1]);\n headerRowCollection.push(eventRows[index + j + 1]);\n }\n var clonedCollection = this.lastResourceLevel;\n for (var i = 0; i < rowCollection.length; i++) {\n var expanded = true;\n pNode = rowCollection[i].children[0].classList.contains(cls.RESOURCE_PARENT_CLASS);\n clonedCollection[index].resourceData[clonedCollection[index].resource.expandedField] = !hide;\n if (hide) {\n if (pNode) {\n var trElem = rowCollection[i].querySelector('.' + cls.RESOURCE_TREE_ICON_CLASS);\n classList(trElem, [cls.RESOURCE_EXPAND_CLASS], [cls.RESOURCE_COLLAPSE_CLASS]);\n }\n if (!rowCollection[i].classList.contains(cls.HIDDEN_CLASS)) {\n addClass([rowCollection[i], workCellCollection[i], headerRowCollection[i]], cls.HIDDEN_CLASS);\n }\n }\n else {\n if (pNode) {\n var rowIndex = rowCollection[i].rowIndex;\n if (!clonedCollection[rowIndex].resourceData[clonedCollection[rowIndex].resource.expandedField]\n && !isNullOrUndefined(clonedCollection[rowIndex].resourceData[clonedCollection[rowIndex].resource.expandedField])) {\n rowCollection.splice(i + 1, (parseInt(clonedCollection[rowIndex].resourceData.Count, 0)));\n workCellCollection.splice(i + 1, (parseInt(clonedCollection[rowIndex].resourceData.Count, 0)));\n headerRowCollection.splice(i + 1, (parseInt(clonedCollection[rowIndex].resourceData.Count, 0)));\n expanded = false;\n }\n if (expanded) {\n var trElem = rowCollection[i].querySelector('.' + cls.RESOURCE_TREE_ICON_CLASS);\n classList(trElem, [cls.RESOURCE_COLLAPSE_CLASS], [cls.RESOURCE_EXPAND_CLASS]);\n }\n }\n if (rowCollection[i].classList.contains(cls.HIDDEN_CLASS)) {\n removeClass([rowCollection[i], workCellCollection[i], headerRowCollection[i]], cls.HIDDEN_CLASS);\n }\n }\n }\n var data = { cssProperties: this.parent.getCssProperties(), module: 'scroll' };\n this.parent.notify(events.scrollUiUpdate, data);\n args = {\n cancel: false, event: e, groupIndex: index,\n requestType: target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS) ? 'resourceExpanded' : 'resourceCollapsed',\n };\n this.parent.notify(events.dataReady, {});\n this.parent.trigger(events.actionComplete, args);\n };\n ResourceBase.prototype.renderResourceHeader = function () {\n var resourceWrapper = createElement('div', { className: cls.RESOURCE_TOOLBAR_CONTAINER });\n resourceWrapper.innerHTML = '
    ' +\n '
    ';\n if (this.parent.currentView === 'MonthAgenda') {\n var target = this.parent.activeView.getPanel().querySelector('.' + cls.CONTENT_WRAP_CLASS);\n target.insertBefore(resourceWrapper, target.children[1]);\n }\n else {\n this.parent.element.insertBefore(resourceWrapper, this.parent.element.children[2]);\n }\n this.renderResourceHeaderText();\n EventHandler.add(resourceWrapper.querySelector('.' + cls.RESOURCE_MENU_ICON), 'click', this.menuClick, this);\n };\n ResourceBase.prototype.renderResourceTree = function () {\n this.popupOverlay = createElement('div', { className: cls.RESOURCE_TREE_POPUP_OVERLAY });\n var treeWrapper = createElement('div', { className: cls.RESOURCE_TREE_POPUP + ' e-popup-close' });\n if (this.parent.currentView === 'MonthAgenda') {\n var target = this.parent.activeView.getPanel().querySelector('.' + cls.WRAPPER_CONTAINER_CLASS);\n target.insertBefore(treeWrapper, target.children[0]);\n target.appendChild(this.popupOverlay);\n }\n else {\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(treeWrapper);\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.popupOverlay);\n }\n var resourceTree = createElement('div', { className: cls.RESOURCE_TREE });\n treeWrapper.appendChild(resourceTree);\n this.treeViewObj = new TreeView({\n cssClass: this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n fields: {\n dataSource: this.generateTreeData(),\n id: 'resourceId',\n text: 'resourceName',\n child: 'resourceChild'\n },\n nodeTemplate: this.parent.resourceHeaderTemplate,\n nodeClicked: this.resourceClick.bind(this)\n });\n this.treeViewObj.appendTo(resourceTree);\n this.treeViewObj.expandAll();\n this.treePopup = new Popup(treeWrapper, {\n targetType: 'relative',\n actionOnScroll: 'none',\n content: this.treeViewObj.element,\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'SlideLeftOut', duration: 500 },\n showAnimation: { name: 'SlideLeftIn', duration: 500 },\n viewPortElement: this.parent.element.querySelector('.' + (this.parent.currentView === 'MonthAgenda' ?\n cls.WRAPPER_CONTAINER_CLASS : cls.TABLE_CONTAINER_CLASS))\n });\n this.parent.on(events.documentClick, this.documentClick, this);\n };\n ResourceBase.prototype.generateTreeData = function (isTimeLine) {\n var _this = this;\n var treeCollection = [];\n var resTreeColl = [];\n var groupIndex = 0;\n this.resourceTreeLevel.forEach(function (resTree, index) {\n var treeHandler = function (treeLevel, index, levelId) {\n var resource = _this.resourceCollection[index];\n var treeArgs;\n var resObj;\n if (!isTimeLine) {\n treeArgs = {\n resourceId: levelId,\n resourceName: treeLevel.resourceData[resource.textField]\n };\n }\n else {\n resObj = {\n type: 'resourceHeader', resource: treeLevel.resource,\n resourceData: treeLevel.resourceData, groupIndex: groupIndex,\n groupOrder: treeLevel.groupOrder\n };\n resTreeColl.push(resObj);\n groupIndex++;\n }\n if (treeLevel.child.length > 0 && !isTimeLine) {\n treeArgs.resourceChild = [];\n }\n var count = 1;\n for (var _i = 0, _a = treeLevel.child; _i < _a.length; _i++) {\n var tree = _a[_i];\n if (!isTimeLine) {\n treeArgs.resourceChild.push(treeHandler(tree, index + 1, levelId + '-' + count));\n }\n else {\n treeHandler(tree, index + 1, levelId + '-' + count);\n }\n count += 1;\n }\n if (isTimeLine) {\n extend(resObj.resourceData, { Count: count - 1 });\n }\n return treeArgs;\n };\n if (!isTimeLine) {\n treeCollection.push(treeHandler(resTree, 0, (index + 1).toString()));\n }\n else {\n treeHandler(resTree, 0, (index + 1).toString());\n }\n });\n if (isTimeLine) {\n this.lastResourceLevel = resTreeColl;\n return resTreeColl;\n }\n else {\n return treeCollection;\n }\n };\n ResourceBase.prototype.renderResourceHeaderText = function () {\n var _this = this;\n var resource = this.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n var headerCollection = [];\n resource.groupOrder.forEach(function (level, index) {\n var resourceLevel = _this.resourceCollection[index];\n var resourceText = resourceLevel.dataSource.filter(function (resData) {\n return resData[resourceLevel.idField] === level;\n });\n var resourceName = createElement('div', {\n className: cls.RESOURCE_NAME,\n innerHTML: resourceText[0][resourceLevel.textField]\n });\n headerCollection.push(resourceName);\n var levelIcon = createElement('div', { className: 'e-icons e-icon-next' });\n headerCollection.push(levelIcon);\n });\n headerCollection.pop();\n var target = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element;\n var headerWrapper = target.querySelector('.' + cls.RESOURCE_LEVEL_TITLE);\n headerWrapper.innerHTML = '';\n headerCollection.forEach(function (element) { return headerWrapper.appendChild(element); });\n if (this.lastResourceLevel.length === 1) {\n addClass([this.parent.element.querySelector('.' + cls.RESOURCE_MENU)], cls.DISABLE_CLASS);\n }\n };\n ResourceBase.prototype.menuClick = function (event) {\n if (this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP).classList.contains('e-popup-open')) {\n this.treePopup.hide();\n removeClass([this.popupOverlay], 'e-enable');\n }\n else {\n var treeNodes = this.treeViewObj.element.querySelectorAll('.e-list-item:not(.e-has-child)');\n removeClass(treeNodes, 'e-active');\n addClass([treeNodes[this.parent.uiStateValues.groupIndex]], 'e-active');\n this.treePopup.show();\n addClass([this.popupOverlay], 'e-enable');\n }\n };\n ResourceBase.prototype.resourceClick = function (event) {\n if (!event.node.classList.contains('e-has-child')) {\n this.treePopup.hide();\n var treeNodes = [].slice.call(this.treeViewObj.element.querySelectorAll('.e-list-item:not(.e-has-child)'));\n this.parent.uiStateValues.groupIndex = treeNodes.indexOf(event.node);\n this.parent.renderModule.render(this.parent.currentView, false);\n var processed = this.parent.eventBase.processData(this.parent.eventsData);\n this.parent.notify(events.dataReady, { processedData: processed });\n }\n event.event.preventDefault();\n };\n ResourceBase.prototype.documentClick = function (args) {\n if (closest(args.event.target, '.' + cls.RESOURCE_TREE_POPUP)) {\n return;\n }\n var treeWrapper = this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP);\n if (treeWrapper && treeWrapper.classList.contains('e-popup-open')) {\n this.treePopup.hide();\n removeClass([this.popupOverlay], 'e-enable');\n }\n };\n ResourceBase.prototype.bindResourcesData = function (isSetModel) {\n var _this = this;\n this.parent.showSpinner();\n var promises = [];\n for (var i = 0; i < this.parent.resources.length; i++) {\n var dataModule = new Data(this.parent.resources[i].dataSource, this.parent.resources[i].query);\n promises.push(dataModule.getData(dataModule.generateQuery()));\n }\n Promise.all(promises).then(function (e) { return _this.dataManagerSuccess(e, isSetModel); })\n .catch(function (e) { return _this.dataManagerFailure(e); });\n };\n ResourceBase.prototype.dataManagerSuccess = function (e, isSetModel) {\n if (this.parent.isDestroyed) {\n return;\n }\n for (var i = 0, length_1 = e.length; i < length_1; i++) {\n this.parent.resources[i].dataSource = e[i].result;\n }\n this.parent.setProperties({ resources: this.parent.resources }, true);\n this.parent.uiStateValues.groupIndex = 0;\n this.parent.renderElements(isSetModel);\n if (isSetModel) {\n this.parent.eventWindow.refreshResourceDataSource();\n }\n };\n ResourceBase.prototype.setResourceCollection = function () {\n var requiredResources = [];\n this.resourceCollection = [];\n this.colorIndex = null;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n for (var _i = 0, _a = this.parent.activeViewOptions.group.resources; _i < _a.length; _i++) {\n var resource = _a[_i];\n var index_1 = util.findIndexInData(this.parent.resources, 'name', resource);\n if (index_1 >= 0) {\n requiredResources.push(this.parent.resources[index_1]);\n }\n }\n }\n else if (this.parent.resources.length > 0) {\n requiredResources = this.parent.resources;\n }\n var index = 0;\n for (var _b = 0, requiredResources_1 = requiredResources; _b < requiredResources_1.length; _b++) {\n var resource = requiredResources_1[_b];\n var resources = {\n field: resource.field,\n title: resource.title,\n name: resource.name,\n allowMultiple: resource.allowMultiple,\n dataSource: resource.dataSource,\n idField: resource.idField,\n textField: resource.textField,\n groupIDField: resource.groupIDField,\n colorField: resource.colorField,\n startHourField: resource.startHourField,\n endHourField: resource.endHourField,\n workDaysField: resource.workDaysField,\n expandedField: resource.expandedField,\n cssClassField: resource.cssClassField\n };\n if (resource.name === this.parent.eventSettings.resourceColorField) {\n this.colorIndex = index;\n }\n index++;\n this.resourceCollection.push(resources);\n }\n if (isNullOrUndefined(this.colorIndex)) {\n this.colorIndex = this.resourceCollection.length - 1;\n }\n };\n ResourceBase.prototype.generateResourceLevels = function (innerDates, isTimeLine) {\n var _this = this;\n var resources = this.resourceCollection;\n var resTreeGroup = [];\n var lastColumnDates = [];\n var group = function (resources, index, prevResource, prevResourceData, prevOrder) {\n var resTree = [];\n var resource = resources[0];\n if (resource) {\n var data = void 0;\n if (prevResourceData && _this.parent.activeViewOptions.group.byGroupID) {\n var id = prevResourceData[prevResource.idField];\n data = new DataManager(resource.dataSource).executeLocal(new Query().where(resource.groupIDField, 'equal', id));\n }\n else {\n data = resource.dataSource;\n }\n for (var i = 0; i < data.length; i++) {\n var groupOrder = [];\n if (prevOrder && prevOrder.length > 0) {\n groupOrder = groupOrder.concat(prevOrder);\n }\n groupOrder.push(data[i][resource.idField]);\n var items = group(resources.slice(1), index + 1, resource, data[i], groupOrder);\n // Here validate child item empty top level resource only\n if (index === 0 && items.length === 0 && _this.resourceCollection.length > 1) {\n continue;\n }\n var dateCol = [];\n var renderDates = _this.parent.activeView.renderDates;\n var resWorkDays = void 0;\n if (!_this.parent.activeViewOptions.group.byDate && index + 1 === _this.resourceCollection.length) {\n var workDays = data[i][resource.workDaysField];\n var resStartHour = data[i][resource.startHourField];\n var resEndHour = data[i][resource.endHourField];\n if (workDays && workDays.length > 0) {\n renderDates = _this.parent.activeView.getRenderDates(workDays);\n resWorkDays = workDays;\n dateCol = _this.parent.activeView.getDateSlots(renderDates, workDays);\n }\n else {\n resWorkDays = _this.parent.activeViewOptions.workDays;\n dateCol = innerDates;\n }\n var dateSlots = _this.generateCustomHours(dateCol, resStartHour, resEndHour, groupOrder);\n lastColumnDates = lastColumnDates.concat(dateSlots);\n }\n var resCssClass = data[i][resource.cssClassField];\n var slotData = {\n type: 'resourceHeader', className: ['e-resource-cells'],\n resourceLevelIndex: index, groupOrder: groupOrder,\n resource: resource, resourceData: data[i],\n colSpan: _this.parent.activeViewOptions.group.byDate ? 1 : dateCol.length,\n renderDates: renderDates, workDays: resWorkDays, cssClass: resCssClass,\n child: items\n };\n resTree.push(slotData);\n }\n if (!resTreeGroup[index]) {\n resTreeGroup[index] = [];\n }\n resTreeGroup[index].push(resTree);\n return resTree;\n }\n return [];\n };\n this.resourceTreeLevel = group(resources, 0);\n return (isTimeLine) ? [] : this.generateHeaderLevels(resTreeGroup, lastColumnDates, innerDates);\n };\n ResourceBase.prototype.generateCustomHours = function (renderDates, startHour, endHour, groupOrder) {\n var dateSlots = extend([], renderDates, null, true);\n for (var _i = 0, dateSlots_1 = dateSlots; _i < dateSlots_1.length; _i++) {\n var dateSlot = dateSlots_1[_i];\n if (startHour) {\n dateSlot.startHour = this.parent.globalize.parseDate(startHour, { skeleton: 'Hm' });\n }\n if (endHour) {\n dateSlot.endHour = this.parent.globalize.parseDate(endHour, { skeleton: 'Hm' });\n }\n if (groupOrder) {\n dateSlot.groupOrder = groupOrder;\n }\n }\n return dateSlots;\n };\n ResourceBase.prototype.generateHeaderLevels = function (resTreeGroup, lastColumnDates, headerDates) {\n var headerLevels = [];\n for (var i = resTreeGroup.length - 1; i >= 0; i--) {\n var temp = 0;\n for (var _i = 0, _a = resTreeGroup[i]; _i < _a.length; _i++) {\n var currentLevelChilds = _a[_i];\n for (var _b = 0, currentLevelChilds_1 = currentLevelChilds; _b < currentLevelChilds_1.length; _b++) {\n var currentLevelChild = currentLevelChilds_1[_b];\n if (resTreeGroup[i + 1]) {\n var nextLevelChilds = resTreeGroup[i + 1][temp];\n var colSpan = 0;\n for (var _c = 0, nextLevelChilds_1 = nextLevelChilds; _c < nextLevelChilds_1.length; _c++) {\n var nextLevelChild = nextLevelChilds_1[_c];\n if (!this.parent.activeViewOptions.group.byGroupID || (this.parent.activeViewOptions.group.byGroupID &&\n nextLevelChild.resourceData[nextLevelChild.resource.groupIDField] ===\n currentLevelChild.resourceData[currentLevelChild.resource.idField])) {\n colSpan += nextLevelChild.colSpan;\n }\n }\n currentLevelChild.colSpan = colSpan;\n }\n currentLevelChild.groupIndex = temp;\n temp++;\n headerLevels[currentLevelChild.resourceLevelIndex] = headerLevels[currentLevelChild.resourceLevelIndex] || [];\n headerLevels[currentLevelChild.resourceLevelIndex].push(currentLevelChild);\n }\n }\n }\n this.lastResourceLevel = headerLevels.slice(-1)[0];\n if (!this.parent.activeViewOptions.group.byDate) {\n var index = 0;\n for (var _d = 0, _e = this.lastResourceLevel; _d < _e.length; _d++) {\n var lastLevelResource = _e[_d];\n for (var i = 0; i < lastLevelResource.colSpan; i++) {\n lastColumnDates[index].groupIndex = lastLevelResource.groupIndex;\n index++;\n }\n }\n headerLevels.push(lastColumnDates);\n return headerLevels;\n }\n var dateHeaderLevels = [];\n var levels = extend([], headerLevels, null, true);\n var dateColSpan = 0;\n for (var _f = 0, _g = levels[0]; _f < _g.length; _f++) {\n var firstRowTd = _g[_f];\n dateColSpan += firstRowTd.colSpan;\n }\n var datesColumn = [];\n for (var _h = 0, headerDates_1 = headerDates; _h < headerDates_1.length; _h++) {\n var headerDate = headerDates_1[_h];\n headerDate.colSpan = dateColSpan;\n datesColumn.push(headerDate);\n var resGroup = extend([], levels, null, true);\n for (var k = 0, length_2 = resGroup.length; k < length_2; k++) {\n if (k === resGroup.length - 1) {\n for (var _j = 0, _k = resGroup[k]; _j < _k.length; _j++) {\n var resTd = _k[_j];\n resTd.date = headerDate.date;\n resTd.workDays = headerDate.workDays;\n resTd.startHour = headerDate.startHour;\n resTd.endHour = headerDate.endHour;\n }\n }\n if (!dateHeaderLevels[k]) {\n dateHeaderLevels[k] = [];\n }\n dateHeaderLevels[k] = dateHeaderLevels[k].concat(resGroup[k]);\n }\n }\n dateHeaderLevels.unshift(datesColumn);\n return dateHeaderLevels;\n };\n ResourceBase.prototype.setResourceValues = function (eventObj, isCrud) {\n var _this = this;\n var setValues = function (index, field, value) {\n if (_this.resourceCollection[index].allowMultiple && (!isCrud || isCrud && _this.parent.activeViewOptions.group.allowGroupEdit)) {\n eventObj[field] = [value];\n }\n else {\n eventObj[field] = value;\n }\n };\n var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :\n this.parent.activeCellsData.groupIndex;\n if (this.parent.activeViewOptions.group.resources.length > 0 && !isNullOrUndefined(groupIndex)) {\n var groupOrder = this.lastResourceLevel[groupIndex].groupOrder;\n for (var index = 0; index < this.resourceCollection.length; index++) {\n setValues(index, this.resourceCollection[index].field, groupOrder[index]);\n }\n }\n else if (this.parent.resources.length > 0) {\n for (var index = 0; index < this.resourceCollection.length; index++) {\n var data = this.resourceCollection[index].dataSource[0];\n setValues(index, this.resourceCollection[index].field, data[this.resourceCollection[index].idField]);\n }\n }\n };\n ResourceBase.prototype.getResourceColor = function (eventObj, groupOrder) {\n var resource = this.resourceCollection[this.colorIndex];\n if (isNullOrUndefined(groupOrder) && this.parent.activeViewOptions.group.allowGroupEdit && resource.allowMultiple) {\n return undefined;\n }\n var id = isNullOrUndefined(groupOrder) ? eventObj[resource.field] : groupOrder[this.colorIndex];\n var data = this.filterData(resource.dataSource, resource.idField, 'equal', id);\n if (data.length > 0) {\n return data[0][resource.colorField];\n }\n return undefined;\n };\n ResourceBase.prototype.getCssClass = function (eventObj) {\n var resource = this.resourceCollection.slice(-1)[0];\n if (this.parent.activeViewOptions.group.allowGroupEdit && resource.allowMultiple) {\n return undefined;\n }\n var data = this.filterData(resource.dataSource, resource.idField, 'equal', eventObj[resource.field]);\n if (data.length > 0) {\n return data[0][resource.cssClassField];\n }\n return undefined;\n };\n ResourceBase.prototype.filterData = function (dataSource, field, operator, value) {\n return new DataManager(dataSource).executeLocal(new Query().where(field, operator, value));\n };\n ResourceBase.prototype.dataManagerFailure = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.hideSpinner();\n };\n ResourceBase.prototype.getResourceData = function (eventObj, index, groupEditIndex) {\n if (this.parent.activeViewOptions.group.allowGroupEdit) {\n var resourceObj = {};\n for (var _i = 0, groupEditIndex_1 = groupEditIndex; _i < groupEditIndex_1.length; _i++) {\n var groupIndex = groupEditIndex_1[_i];\n var resourceLevel = this.lastResourceLevel[groupIndex].groupOrder;\n for (var level = 0, length_3 = resourceLevel.length; level < length_3; level++) {\n var fieldName = this.resourceCollection[level].field;\n if (isNullOrUndefined(resourceObj[fieldName])) {\n resourceObj[fieldName] = [];\n }\n resourceObj[fieldName].push(resourceLevel[level]);\n }\n }\n eventObj = extend(eventObj, resourceObj);\n }\n else {\n for (var level = 0, length_4 = this.resourceCollection.length; level < length_4; level++) {\n eventObj[this.resourceCollection[level].field] = this.lastResourceLevel[index].groupOrder[level];\n }\n }\n };\n ResourceBase.prototype.addResource = function (resources, name, index) {\n for (var i = 0, length_5 = this.parent.resources.length; i < length_5; i++) {\n var resource = this.parent.resources[i];\n if (resource.name === name) {\n resource.dataSource.splice(index, 0, resources);\n break;\n }\n }\n this.bindResourcesData(true);\n };\n ResourceBase.prototype.removeResource = function (resourceId, name) {\n var _this = this;\n var _loop_1 = function (i, length_6) {\n var resource = this_1.parent.resources[i];\n if (resource.name === name) {\n resource.dataSource.forEach(function (data, index) {\n if (data[resource.idField] === resourceId) {\n _this.parent.resources[i].dataSource.splice(index, 1);\n }\n });\n return \"break\";\n }\n };\n var this_1 = this;\n for (var i = 0, length_6 = this.parent.resources.length; i < length_6; i++) {\n var state_1 = _loop_1(i, length_6);\n if (state_1 === \"break\")\n break;\n }\n this.bindResourcesData(true);\n };\n ResourceBase.prototype.destroy = function () {\n this.parent.off(events.documentClick, this.documentClick);\n if (this.treeViewObj) {\n this.treeViewObj.destroy();\n this.treeViewObj = null;\n }\n if (this.treePopup) {\n this.treePopup.destroy();\n this.treePopup = null;\n remove(this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP));\n remove(this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP_OVERLAY));\n }\n var resToolBarEle = this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER);\n if (resToolBarEle) {\n remove(resToolBarEle);\n }\n };\n return ResourceBase;\n}());\nexport { ResourceBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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, Collection } 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, classList } from '@syncfusion/ej2-base';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\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 { TimeScale } from '../models/time-scale';\nimport { QuickInfoTemplates } from '../models/quick-info-templates';\nimport { HeaderRows } from '../models/header-rows';\nimport { Crud } from '../actions/crud';\nimport { EventSettings } from '../models/event-settings';\nimport { Group } from '../models/group';\nimport { Resources } from '../models/resources';\nimport { ResourceBase } from '../base/resource';\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 var addClasses = [];\n var removeClasses = [];\n addClasses.push(cls.ROOT);\n if (this.enableRtl) {\n addClasses.push(cls.RTL);\n }\n else {\n removeClasses.push(cls.RTL);\n }\n if (this.isAdaptive) {\n addClasses.push(cls.DEVICE_CLASS);\n }\n else {\n removeClasses.push(cls.DEVICE_CLASS);\n }\n if (this.cssClass) {\n addClasses.push(this.cssClass);\n }\n classList(this.element, addClasses, removeClasses);\n this.validateDate();\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n this.quickInfoTemplatesHeaderFn = this.templateParser(this.quickInfoTemplates.header);\n this.quickInfoTemplatesContentFn = this.templateParser(this.quickInfoTemplates.content);\n this.quickInfoTemplatesFooterFn = this.templateParser(this.quickInfoTemplates.footer);\n createSpinner({ target: this.element });\n this.scrollModule = new Scroll(this);\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n this.renderModule = new Render(this);\n this.eventBase = new EventBase(this);\n this.initializeDataModule();\n this.initializeResources();\n };\n Schedule.prototype.initializeResources = function (isSetModel) {\n if (isSetModel === void 0) { isSetModel = false; }\n if (this.resources.length > 0) {\n this.resourceBase = new ResourceBase(this);\n this.resourceBase.bindResourcesData(isSetModel);\n }\n else {\n this.resourceBase = null;\n this.renderElements(isSetModel);\n }\n };\n Schedule.prototype.renderElements = function (isLayoutOnly) {\n if (isLayoutOnly) {\n this.initializeView(this.currentView);\n return;\n }\n if (this.showHeaderBar) {\n this.headerModule = new HeaderRenderer(this);\n }\n this.element.appendChild(this.createElement('div', { className: cls.TABLE_CONTAINER_CLASS }));\n if (Browser.isDevice || Browser.isTouch) {\n this.scheduleTouchModule = new ScheduleTouch(this);\n }\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.getViewIndex = function (viewName) {\n for (var item = 0; item < this.viewCollections.length; item++) {\n var checkIndex = this.viewCollections[item].option;\n if (checkIndex === viewName) {\n return item;\n }\n }\n return -1;\n };\n Schedule.prototype.setViewOptions = function (isModuleLoad) {\n if (isModuleLoad === void 0) { isModuleLoad = false; }\n this.viewOptions = {};\n this.viewCollections = [];\n var viewName;\n var selectedView;\n var count = 0;\n this.viewIndex = -1;\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 if (this.currentView === viewName) {\n selectedView = viewName;\n this.viewIndex = count;\n }\n }\n else {\n viewName = view.option;\n if (view.isSelected) {\n selectedView = viewName;\n this.viewIndex = count;\n }\n }\n var obj = extend({ option: viewName }, isOptions ? view : {});\n var fieldViewName = viewName.charAt(0).toLowerCase() + viewName.slice(1);\n this.viewCollections.push(obj);\n if (isNullOrUndefined(this.viewOptions[fieldViewName])) {\n this.viewOptions[fieldViewName] = [obj];\n }\n else {\n this.viewOptions[fieldViewName].push(obj);\n }\n count++;\n }\n if (!isModuleLoad && selectedView) {\n this.setProperties({ currentView: selectedView }, true);\n }\n if (this.viewIndex === -1) {\n var currentIndex = this.getViewIndex(this.currentView);\n this.viewIndex = (currentIndex === -1) ? 0 : currentIndex;\n }\n };\n Schedule.prototype.getActiveViewOptions = function () {\n var timeScale = {\n enable: this.timeScale.enable,\n interval: this.timeScale.interval,\n slotCount: this.timeScale.slotCount,\n majorSlotTemplate: this.timeScale.majorSlotTemplate,\n minorSlotTemplate: this.timeScale.minorSlotTemplate\n };\n var group = {\n byDate: this.group.byDate,\n byGroupID: this.group.byGroupID,\n allowGroupEdit: this.group.allowGroupEdit,\n resources: this.group.resources,\n headerTooltipTemplate: this.group.headerTooltipTemplate,\n enableCompactView: this.group.enableCompactView\n };\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 resourceHeaderTemplate: this.resourceHeaderTemplate,\n workDays: this.workDays,\n showWeekend: this.showWeekend,\n showWeekNumber: this.showWeekNumber,\n displayName: null,\n interval: 1,\n timeScale: timeScale,\n group: group,\n headerRows: this.headerRows\n };\n return extend(scheduleOptions, this.viewCollections[this.viewIndex], undefined, true);\n };\n Schedule.prototype.initializeDataModule = function () {\n this.eventFields = {\n id: this.eventSettings.fields.id,\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.editorTitles = {\n subject: this.eventSettings.fields.subject.title || this.localeObj.getConstant('title'),\n startTime: this.eventSettings.fields.startTime.title || this.localeObj.getConstant('start'),\n endTime: this.eventSettings.fields.endTime.title || this.localeObj.getConstant('end'),\n isAllDay: this.eventSettings.fields.isAllDay.title || this.localeObj.getConstant('allDay'),\n startTimezone: this.eventSettings.fields.startTimezone.title || this.localeObj.getConstant('startTimezone'),\n endTimezone: this.eventSettings.fields.endTimezone.title || this.localeObj.getConstant('endTimezone'),\n location: this.eventSettings.fields.location.title || this.localeObj.getConstant('location'),\n description: this.eventSettings.fields.description.title || this.localeObj.getConstant('description'),\n recurrenceRule: this.eventSettings.fields.recurrenceRule.title || this.localeObj.getConstant('repeat')\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.showSpinner();\n this.activeViewOptions = this.getActiveViewOptions();\n if (this.resourceBase) {\n this.resourceBase.setResourceCollection();\n }\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.majorSlotTemplateFn = this.templateParser(this.activeViewOptions.timeScale.majorSlotTemplate);\n this.minorSlotTemplateFn = this.templateParser(this.activeViewOptions.timeScale.minorSlotTemplate);\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n this.resourceHeaderTemplateFn = this.templateParser(this.activeViewOptions.resourceHeaderTemplate);\n this.headerTooltipTemplateFn = this.templateParser(this.activeViewOptions.group.headerTooltipTemplate);\n };\n Schedule.prototype.initializePopups = function () {\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.setCldrTimeFormat = function () {\n if (this.locale === 'en' || this.locale === 'en-US') {\n this.timeFormat = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n this.timeFormat = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', cldrData));\n }\n };\n Schedule.prototype.getTimeString = function (date) {\n return this.globalize.formatDate(date, { format: this.timeFormat, type: 'time' });\n };\n Schedule.prototype.changeView = function (view, event, muteOnChange, index) {\n if (isNullOrUndefined(index)) {\n index = this.getViewIndex(view);\n }\n if (!muteOnChange && index === this.viewIndex || index < 0) {\n return;\n }\n this.viewIndex = index;\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 = { action: 'date', cancel: false, previousDate: this.selectedDate, currentDate: selectedDate };\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.getNavigateView = function () {\n if (this.activeView.isTimelineView()) {\n return this.currentView === 'TimelineMonth' ? 'TimelineDay' : 'Agenda';\n }\n return 'Day';\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 view = (view === 'timelineDay' || view === 'timelineWeek' || view === 'timelineWorkWeek') ? 'timelineViews' : view;\n modules.push({\n member: view,\n args: [this]\n });\n }\n if (this.allowDragAndDrop) {\n modules.push({\n member: 'dragAndDrop',\n args: [this]\n });\n }\n if (this.allowResizing) {\n modules.push({\n member: 'resize',\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, isGroupAdaptive: false, groupIndex: 0, action: false };\n this.activeCellsData = { startTime: new Date(), endTime: new Date(), isAllDay: false };\n this.activeEventData = { event: undefined, element: undefined };\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 emptyContainer: 'There are no events scheduled on this day.',\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 deleteMultipleEvent: 'Delete Multiple Events',\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 deleteMultipleContent: 'Are you sure you want to delete the selected events?',\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 wrongPattern: 'The recurrence pattern is not valid.',\n seriesChangeAlert: 'The changes made to specific instances of this series will be cancelled ' +\n 'and those events will match the series again.',\n createError: 'The duration of the event must be shorter than how frequently it occurs. ' +\n 'Shorten the duration, or change the recurrence pattern in the recurrence event editor.',\n recurrenceDateValidation: 'Some months have fewer than the selected date. For these months, ' +\n 'the occurrence will fall on the last date of the month.',\n sameDayAlert: 'Two occurrences of the same event cannot occur on the same day.',\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 occurrence: 'Occurrence',\n series: 'Series',\n previous: 'Previous',\n next: 'Next',\n timelineDay: 'Timeline Day',\n timelineWeek: 'Timeline Week',\n timelineWorkWeek: 'Timeline Work Week',\n timelineMonth: 'Timeline Month'\n };\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.setCldrTimeFormat();\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 + ' tbody');\n };\n Schedule.prototype.getTableRows = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr:not(.' + cls.HIDDEN_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' || this.currentView === 'TimelineMonth' || td.classList.contains(cls.ALLDAY_CELLS_CLASS)\n || td.classList.contains(cls.HEADER_CELLS_CLASS) || !this.activeViewOptions.timeScale.enable) {\n return true;\n }\n if (this.activeViewOptions.headerRows.length > 0 && this.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour') {\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.getMajorSlotTemplate = function () {\n return this.majorSlotTemplateFn;\n };\n Schedule.prototype.getMinorSlotTemplate = function () {\n return this.minorSlotTemplateFn;\n };\n Schedule.prototype.getAppointmentTemplate = function () {\n return this.appointmentTemplateFn;\n };\n Schedule.prototype.getEventTooltipTemplate = function () {\n return this.eventTooltipTemplateFn;\n };\n Schedule.prototype.getHeaderTooltipTemplate = function () {\n return this.headerTooltipTemplateFn;\n };\n Schedule.prototype.getEditorTemplate = function () {\n return this.editorTemplateFn;\n };\n Schedule.prototype.getQuickInfoTemplatesHeader = function () {\n return this.quickInfoTemplatesHeaderFn;\n };\n Schedule.prototype.getQuickInfoTemplatesContent = function () {\n return this.quickInfoTemplatesContentFn;\n };\n Schedule.prototype.getQuickInfoTemplatesFooter = function () {\n return this.quickInfoTemplatesFooterFn;\n };\n Schedule.prototype.getResourceHeaderTemplate = function () {\n return this.resourceHeaderTemplateFn;\n };\n Schedule.prototype.getCssProperties = function () {\n var cssProps = {\n border: this.enableRtl ? 'borderLeftWidth' : 'borderRightWidth',\n padding: this.enableRtl ? 'paddingLeft' : 'paddingRight'\n };\n return cssProps;\n };\n Schedule.prototype.onDocumentClick = function (args) {\n this.notify(events.documentClick, { event: args });\n };\n Schedule.prototype.onScheduleResize = function () {\n if (this.quickPopup) {\n this.quickPopup.onClosePopup();\n }\n if (this.currentView === 'Month' || !this.activeViewOptions.timeScale.enable || this.activeView.isTimelineView()) {\n this.notify(events.dataReady, {});\n }\n };\n Schedule.prototype.templateParser = function (template) {\n if (template) {\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, Browser.touchStartEvent, 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 var requireScheduleRefresh = 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, { module: 'scroll', properties: { width: newProp.width, height: newProp.height } });\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();\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 this.headerModule.updateDateRange(this.activeView.getDateRangeText());\n }\n this.notify(events.scrollUiUpdate, { cssProperties: this.getCssProperties() });\n if (this.activeView.isTimelineView()) {\n this.notify(events.dataReady, {});\n }\n break;\n case 'showWeekend':\n case 'workDays':\n case 'startHour':\n case 'endHour':\n case 'workHours':\n case 'readonly':\n case 'headerRows':\n case 'showWeekNumber':\n requireRefresh = true;\n break;\n case 'locale':\n this.setCldrTimeFormat();\n requireScheduleRefresh = true;\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 if (this.activeViewOptions.timeScale.enable) {\n this.activeView.highlightCurrentTime();\n }\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 'timezone':\n this.eventBase.timezonePropertyChange(oldProp.timezone);\n break;\n case 'enableRtl':\n requireScheduleRefresh = true;\n break;\n default:\n this.extendedPropertyChange(prop, newProp, oldProp);\n break;\n }\n }\n if (requireScheduleRefresh) {\n this.refresh();\n }\n else 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();\n this.changeView(this.currentView, null, true);\n break;\n case 'eventSettings':\n this.onEventSettingsPropertyChanged(newProp.eventSettings, oldProp.eventSettings);\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 case 'quickInfoTemplates':\n if (this.quickInfoTemplates.header) {\n this.quickInfoTemplatesHeaderFn = this.templateParser(this.quickInfoTemplates.header);\n }\n if (this.quickInfoTemplates.content) {\n this.quickInfoTemplatesContentFn = this.templateParser(this.quickInfoTemplates.content);\n }\n if (this.quickInfoTemplates.footer) {\n this.quickInfoTemplatesFooterFn = this.templateParser(this.quickInfoTemplates.footer);\n }\n break;\n case 'group':\n this.onGroupSettingsPropertyChanged(newProp.group, oldProp.group);\n break;\n case 'resources':\n this.initializeResources(true);\n this.eventWindow.refresh();\n break;\n case 'timeScale':\n this.activeViewOptions.timeScale.interval = newProp.timeScale.interval || this.activeViewOptions.timeScale.interval;\n this.activeViewOptions.timeScale.slotCount = newProp.timeScale.slotCount || this.activeViewOptions.timeScale.slotCount;\n this.eventWindow.refreshDateTimePicker();\n this.initializeView(this.currentView);\n break;\n case 'allowDragAndDrop':\n case 'allowResizing':\n this.notify(events.dataReady, {\n processedData: this.eventBase.processData(this.eventsData)\n });\n break;\n }\n };\n Schedule.prototype.onGroupSettingsPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (prop === 'headerTooltipTemplate') {\n this.headerTooltipTemplateFn = this.templateParser(newProp[prop]);\n }\n else {\n this.initializeView(this.currentView);\n this.eventWindow.refresh();\n }\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 case 'resourceColorField':\n if (this.resourceBase) {\n this.resourceBase.setResourceCollection();\n }\n requireRefresh = true;\n break;\n }\n }\n if (requireRefresh) {\n this.renderModule.refreshDataManager();\n }\n };\n /**\n * Allows to show the spinner on schedule at the required scenarios.\n */\n Schedule.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * When the spinner is shown manually using `showSpinner` method, it can be hidden using this `hideSpinner` method.\n */\n Schedule.prototype.hideSpinner = function () {\n hideSpinner(this.element);\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 * @param {number} groupIndex Defines the resource index from last level.\n * @returns {void}\n */\n Schedule.prototype.setWorkHours = function (dates, start, end, groupIndex) {\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 = this.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.activeViewOptions.timeScale.slotCount;\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 renderDates = this.activeView.renderDates;\n if (!isNullOrUndefined(groupIndex) && this.resourceBase && !this.activeView.isTimelineView()) {\n renderDates = this.resourceBase.lastResourceLevel[groupIndex].renderDates;\n }\n var colIndex = this.getIndexOfDate(renderDates, date);\n if (colIndex >= 0) {\n for (var i = startIndex; i < endIndex; i++) {\n if (this.activeView.isTimelineView()) {\n var rowIndex = (!isNullOrUndefined(groupIndex)) ? groupIndex : 0;\n cells.push(tableEle.rows[rowIndex].cells[i]);\n }\n else {\n if (!isNullOrUndefined(groupIndex)) {\n var tds = [].slice.call(tableEle.rows[i].querySelectorAll('.' + cls.WORK_CELLS_CLASS + '[data-group-index=\"' + groupIndex + '\"]'));\n cells.push(tds[colIndex]);\n }\n else {\n cells.push(tableEle.rows[i].cells[colIndex]);\n }\n }\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 if (isNullOrUndefined(startTime)) {\n return undefined;\n }\n var endTime;\n var duration = 1;\n var endDateFromColSpan = this.activeView.isTimelineView() && !isNullOrUndefined(td.getAttribute('colSpan'));\n if (endDateFromColSpan) {\n duration = parseInt(td.getAttribute('colSpan'), 10);\n }\n if (!this.activeViewOptions.timeScale.enable || td.classList.contains(cls.ALLDAY_CELLS_CLASS) ||\n td.classList.contains(cls.HEADER_CELLS_CLASS) || endDateFromColSpan) {\n endTime = util.addDays(new Date(startTime.getTime()), duration);\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 var groupIndex = td.getAttribute('data-group-index');\n if (!isNullOrUndefined(groupIndex)) {\n data.groupIndex = parseInt(groupIndex, 10);\n }\n return data;\n };\n /**\n * Retrieves the resource details based on the provided resource index.\n * @param {number} index index of the resources at the last level.\n * @returns {ResourceDetails} Object An object holding the details of resource and resourceData.\n */\n Schedule.prototype.getResourcesByIndex = function (index) {\n if (this.resourceBase && this.resourceBase.lastResourceLevel) {\n if (index < 0 || index >= this.resourceBase.lastResourceLevel.length) {\n return undefined;\n }\n var data = this.resourceBase.lastResourceLevel[index];\n return { resource: data.resource, resourceData: data.resourceData };\n }\n return undefined;\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 return this.eventBase.getOccurrencesByID(eventID);\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 return this.eventBase.getOccurrencesByRange(startTime, endTime);\n };\n /**\n * Retrieves the dates that lies on active view of Schedule.\n * @method getCurrentViewDates\n * @returns {Date[]} Returns the collection of dates.\n */\n Schedule.prototype.getCurrentViewDates = function () {\n return this.activeView.renderDates;\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 retrieve 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 * @param {number} groupIndex Defines the resource index from last level.\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, groupIndex) {\n var _this = this;\n var eventCollection = this.eventBase.filterEvents(startTime, endTime);\n if (this.currentAction !== 'Add' && this.activeEventData.event) {\n eventCollection = eventCollection.filter(function (event) { return event.Guid !==\n _this.activeEventData.event.Guid; });\n }\n if (!isNullOrUndefined(groupIndex) && this.resourceBase && this.resourceBase.lastResourceLevel.length > 0) {\n eventCollection = this.eventBase.filterEventsByResource(this.resourceBase.lastResourceLevel[groupIndex], eventCollection);\n }\n return (eventCollection.length > 0) ? 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 * Adds the resources to the specified index.\n * @param resources\n * @param {string} name Name of the resource defined in resources collection.\n * @param {number} index Index or position where the resource should be added.\n */\n Schedule.prototype.addResource = function (resources, name, index) {\n this.resourceBase.addResource(resources, name, index);\n };\n /**\n * Removes the specified resource.\n * @param resourceId Specifies the resource id to be removed.\n * @param name Specifies the resource name from which the id should be referred.\n */\n Schedule.prototype.removeResource = function (resourceId, name) {\n this.resourceBase.removeResource(resourceId, name);\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 this.quickPopup = null;\n }\n if (this.eventTooltip) {\n this.eventTooltip.destroy();\n this.eventTooltip = null;\n }\n if (this.eventWindow) {\n this.eventWindow.destroy();\n this.eventWindow = null;\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 this.scrollModule = null;\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 this.scheduleTouchModule = null;\n }\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n var removeClasses = [cls.ROOT];\n if (this.cssClass) {\n removeClasses = removeClasses.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], removeClasses);\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 Property(true)\n ], Schedule.prototype, \"allowResizing\", void 0);\n __decorate([\n Complex({}, WorkHours)\n ], Schedule.prototype, \"workHours\", void 0);\n __decorate([\n Complex({}, TimeScale)\n ], Schedule.prototype, \"timeScale\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowKeyboardInteraction\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowDragAndDrop\", 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(false)\n ], Schedule.prototype, \"showWeekNumber\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"editorTemplate\", void 0);\n __decorate([\n Complex({}, QuickInfoTemplates)\n ], Schedule.prototype, \"quickInfoTemplates\", 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, \"resourceHeaderTemplate\", void 0);\n __decorate([\n Complex({}, Group)\n ], Schedule.prototype, \"group\", void 0);\n __decorate([\n Collection([], Resources)\n ], Schedule.prototype, \"resources\", void 0);\n __decorate([\n Collection([], HeaderRows)\n ], Schedule.prototype, \"headerRows\", 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, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"resizeStop\", 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 { addClass, createElement, compile, extend, isNullOrUndefined, closest } from '@syncfusion/ej2-base';\nimport { formatUnit, remove, removeClass } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\n/**\n * Base class for the common drag and resize related actions\n */\nvar ActionBase = /** @class */ (function () {\n function ActionBase(parent) {\n this.parent = parent;\n this.actionObj = {\n X: 0, Y: 0, groupIndex: 0, cellWidth: 0, cellHeight: 0, slotInterval: 0, interval: 0, actionIndex: 0,\n cloneElement: [], originalElement: [], action: null, isAllDay: null, excludeSelectors: null\n };\n this.scrollArgs = { element: null, width: 0, height: 0 };\n this.resizeEdges = { left: false, right: false, top: false, bottom: false };\n this.scrollEdges = { left: false, right: false, top: false, bottom: false };\n }\n ActionBase.prototype.getChangedData = function () {\n var eventObj = extend({}, this.actionObj.event, null, true);\n eventObj[this.parent.eventFields.startTime] = this.actionObj.start;\n eventObj[this.parent.eventFields.endTime] = this.actionObj.end;\n if (!isNullOrUndefined(this.actionObj.isAllDay)) {\n eventObj[this.parent.eventFields.isAllDay] = this.actionObj.isAllDay;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var originalElement = this.getOriginalElement(this.actionObj.element);\n var indexCol = originalElement.map(function (element) { return parseInt(element.getAttribute('data-group-index'), 10); });\n if (indexCol.indexOf(this.actionObj.groupIndex) === -1) {\n var cloneIndex_1 = parseInt(this.actionObj.clone.getAttribute('data-group-index'), 10);\n indexCol = indexCol.filter(function (index) { return index !== cloneIndex_1; });\n indexCol.push(this.actionObj.groupIndex);\n this.parent.resourceBase.getResourceData(eventObj, this.actionObj.groupIndex, indexCol);\n }\n }\n return eventObj;\n };\n ActionBase.prototype.saveChangedData = function (eventArgs) {\n this.parent.activeEventData.event = this.actionObj.event;\n this.parent.currentAction = 'Save';\n var eventObj = eventArgs.data;\n var isSameResource = (this.parent.activeViewOptions.group.resources.length > 0) ?\n parseInt(this.actionObj.element.getAttribute('data-group-index'), 10) === this.actionObj.groupIndex : true;\n if (+eventObj[this.parent.eventFields.startTime] === +this.actionObj.event[this.parent.eventFields.startTime] &&\n +eventObj[this.parent.eventFields.endTime] === +this.actionObj.event[this.parent.eventFields.endTime] && isSameResource) {\n return;\n }\n if (eventObj[this.parent.eventFields.startTimezone] || eventObj[this.parent.eventFields.endTimezone]) {\n this.parent.eventBase.timezoneConvert(eventObj);\n }\n var currentAction;\n if (eventObj[this.parent.eventFields.recurrenceRule] &&\n eventObj[this.parent.eventFields.id] === eventObj[this.parent.eventFields.recurrenceID]) {\n eventObj[this.parent.eventFields.id] = this.parent.eventBase.getEventMaxID();\n currentAction = 'EditOccurrence';\n }\n this.parent.crudModule.saveEvent(eventObj, currentAction);\n };\n ActionBase.prototype.calculateIntervalTime = function (date) {\n var intervalTime = new Date(+date);\n intervalTime.setMinutes(Math.floor(intervalTime.getMinutes() / this.actionObj.interval) * this.actionObj.interval);\n return intervalTime;\n };\n ActionBase.prototype.getContentAreaDimension = function () {\n var viewElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var trElement = [].slice.call(viewElement.querySelector('tr').children);\n if (!this.parent.activeView.isTimelineView() && this.parent.activeViewOptions.group.resources.length > 0 &&\n !this.parent.isAdaptive) {\n trElement = this.getResourceElements(trElement);\n }\n var leftOffset = trElement[0].getBoundingClientRect();\n var rightOffset = trElement.slice(-1)[0].getBoundingClientRect();\n var viewDimension = {\n bottom: viewElement.scrollHeight - 5,\n left: this.parent.enableRtl ? rightOffset.left : leftOffset.left,\n right: this.parent.enableRtl ? leftOffset.right : rightOffset.right,\n top: 0\n };\n return viewDimension;\n };\n ActionBase.prototype.getPageCoordinates = function (e) {\n var eventArgs = e.event;\n return eventArgs && eventArgs.changedTouches ? eventArgs.changedTouches[0] : e.changedTouches ? e.changedTouches[0] :\n eventArgs || e;\n };\n ActionBase.prototype.getIndex = function (index) {\n var contentElements = [].slice.call(this.parent.getContentTable().querySelector('tr').children);\n var indexes = { minIndex: 0, maxIndex: contentElements.length - 1 };\n if (this.actionObj.action === 'resize' && this.parent.activeViewOptions.group.resources.length > 0 &&\n !this.parent.uiStateValues.isGroupAdaptive && !this.parent.activeView.isTimelineView()) {\n var groupElements = this.getResourceElements(contentElements);\n indexes.minIndex = groupElements[0].cellIndex;\n indexes.maxIndex = groupElements.slice(-1)[0].cellIndex;\n }\n if (index < indexes.minIndex) {\n index = indexes.minIndex;\n }\n if (index > indexes.maxIndex) {\n index = indexes.maxIndex;\n }\n return index;\n };\n ActionBase.prototype.updateTimePosition = function (date) {\n for (var _i = 0, _a = this.actionObj.cloneElement; _i < _a.length; _i++) {\n var cloneElement = _a[_i];\n var timeElement = cloneElement.querySelector('.' + cls.APPOINTMENT_TIME);\n if (timeElement) {\n timeElement.innerHTML = this.parent.getTimeString(this.actionObj.start) + ' - ' +\n this.parent.getTimeString(this.actionObj.end);\n }\n }\n if (!this.parent.activeViewOptions.timeScale.enable || !this.parent.isAdaptive || this.parent.currentView === 'Month' ||\n this.parent.currentView === 'TimelineMonth') {\n return;\n }\n var timeIndicator = this.parent.element.querySelector('.' + cls.CLONE_TIME_INDICATOR_CLASS);\n if (!timeIndicator) {\n timeIndicator = createElement('div', { className: cls.CLONE_TIME_INDICATOR_CLASS });\n var wrapperClass = this.parent.activeView.isTimelineView() ? cls.DATE_HEADER_WRAP_CLASS : cls.TIME_CELLS_WRAP_CLASS;\n this.parent.element.querySelector('.' + wrapperClass).appendChild(timeIndicator);\n }\n timeIndicator.innerHTML = this.parent.getTimeString(date);\n var offsetValue = 0;\n if (this.parent.activeView.isTimelineView()) {\n if (this.parent.enableRtl) {\n var rightValue = parseInt(this.actionObj.clone.style.right, 10);\n offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.left ?\n rightValue + this.actionObj.clone.offsetWidth : rightValue;\n timeIndicator.style.right = formatUnit(offsetValue);\n }\n else {\n var leftValue = parseInt(this.actionObj.clone.style.left, 10);\n offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.left ?\n leftValue : leftValue + this.actionObj.clone.offsetWidth;\n timeIndicator.style.left = formatUnit(offsetValue);\n }\n }\n else {\n offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.top ? this.actionObj.clone.offsetTop :\n this.actionObj.clone.offsetTop + this.actionObj.clone.offsetHeight;\n timeIndicator.style.top = formatUnit(offsetValue);\n }\n };\n ActionBase.prototype.getResourceElements = function (table) {\n var _this = this;\n return table.filter(function (element) {\n return parseInt(element.getAttribute('data-group-index'), 10) === _this.actionObj.groupIndex;\n });\n };\n ActionBase.prototype.getOriginalElement = function (element) {\n var originalElement;\n var guid = element.getAttribute('data-guid');\n if (this.parent.activeView.isTimelineView()) {\n originalElement = [].slice.call(this.parent.element.querySelectorAll('[data-guid=\"' + guid + '\"]'));\n }\n else {\n var tr = closest(element, 'tr');\n originalElement = [].slice.call(tr.querySelectorAll('[data-guid=\"' + guid + '\"]'));\n }\n return originalElement;\n };\n ActionBase.prototype.createCloneElement = function (element) {\n var cloneElement = compile(element.outerHTML)({})[0];\n var cloneClassLists = [cls.CLONE_ELEMENT_CLASS];\n cloneClassLists.push((this.actionObj.action === 'drag') ? cls.DRAG_CLONE_CLASS : cls.RESIZE_CLONE_CLASS);\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'TimelineMonth') {\n cloneClassLists.push(cls.MONTH_CLONE_ELEMENT_CLASS);\n }\n addClass([cloneElement], cloneClassLists);\n addClass([element], cls.EVENT_ACTION_CLASS);\n element.parentElement.appendChild(cloneElement);\n cloneElement.style.width = formatUnit(cloneElement.offsetWidth - 2);\n return cloneElement;\n };\n ActionBase.prototype.removeCloneElement = function () {\n this.actionObj.originalElement.forEach(function (element) { return removeClass([element], cls.EVENT_ACTION_CLASS); });\n this.actionObj.originalElement = [];\n this.actionObj.cloneElement.forEach(function (element) { return remove(element); });\n this.actionObj.cloneElement = [];\n var timeIndicator = this.parent.element.querySelector('.' + cls.CLONE_TIME_INDICATOR_CLASS);\n if (timeIndicator) {\n remove(timeIndicator);\n }\n };\n ActionBase.prototype.getCursorElement = function (e) {\n var pages = this.getPageCoordinates(e);\n return document.elementFromPoint(pages.clientX, pages.clientY);\n };\n ActionBase.prototype.autoScroll = function () {\n var parent = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n var xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n var yInBounds = yIsScrollable && parent.scrollTop >= 0 && parent.scrollTop + parent.offsetHeight <= parent.scrollHeight;\n var xInBounds = xIsScrollable && parent.scrollLeft >= 0 && parent.scrollLeft + parent.offsetWidth <= parent.scrollWidth;\n if (yInBounds && (this.scrollEdges.top || this.scrollEdges.bottom)) {\n parent.scrollTop += this.scrollEdges.top ? -this.actionObj.scroll.scrollBy : this.actionObj.scroll.scrollBy;\n if (this.actionObj.action === 'resize') {\n this.actionObj.Y += this.scrollEdges.top ? this.actionObj.scroll.scrollBy : -this.actionObj.scroll.scrollBy;\n }\n }\n if (xInBounds && (this.scrollEdges.left || this.scrollEdges.right)) {\n parent.scrollLeft += this.scrollEdges.left ? -this.actionObj.scroll.scrollBy : this.actionObj.scroll.scrollBy;\n if (this.actionObj.action === 'resize') {\n this.actionObj.X += this.scrollEdges.left ? this.actionObj.scroll.scrollBy : -this.actionObj.scroll.scrollBy;\n }\n }\n };\n ActionBase.prototype.autoScrollValidation = function (e) {\n if (!this.actionObj.scroll.enable || closest(e.target, '.' + cls.DATE_HEADER_WRAP_CLASS)) {\n return false;\n }\n var pages = this.getPageCoordinates(e);\n var allowScroll = false;\n var autoScrollDistance = 30;\n this.scrollEdges = { left: false, right: false, top: false, bottom: false };\n var viewBoundaries = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS).getBoundingClientRect();\n if (pages.pageY < viewBoundaries.top + autoScrollDistance) {\n allowScroll = true;\n this.scrollEdges.top = true;\n }\n if (pages.pageY > viewBoundaries.bottom - autoScrollDistance) {\n allowScroll = true;\n this.scrollEdges.bottom = true;\n }\n if (pages.pageX < viewBoundaries.left + autoScrollDistance) {\n allowScroll = true;\n this.scrollEdges.left = true;\n }\n if (pages.pageX > viewBoundaries.right - autoScrollDistance) {\n allowScroll = true;\n this.scrollEdges.right = true;\n }\n return allowScroll;\n };\n ActionBase.prototype.actionClass = function (type) {\n if (type === 'addClass') {\n addClass([this.parent.element], cls.EVENT_ACTION_CLASS);\n }\n else {\n removeClass([this.parent.element], cls.EVENT_ACTION_CLASS);\n }\n };\n /**\n * To destroy the action base module.\n * @return {void}\n * @private\n */\n ActionBase.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.actionObj = {};\n this.scrollArgs = {};\n this.resizeEdges = { left: false, right: false, top: false, bottom: false };\n this.scrollEdges = { left: false, right: false, top: false, bottom: false };\n };\n return ActionBase;\n}());\nexport { ActionBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { addClass, Browser, EventHandler, closest, extend, formatUnit, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { ActionBase } from '../actions/action-base';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Schedule events resize actions\n */\nvar Resize = /** @class */ (function (_super) {\n __extends(Resize, _super);\n function Resize() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Resize.prototype.wireResizeEvent = function (element) {\n var _this = this;\n var resizeElement = [].slice.call(element.querySelectorAll('.' + cls.EVENT_RESIZE_CLASS));\n resizeElement.forEach(function (element) { return EventHandler.add(element, Browser.touchStartEvent, _this.resizeStart, _this); });\n };\n Resize.prototype.resizeHelper = function () {\n var _this = this;\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.activeViewOptions.group.allowGroupEdit) {\n this.actionObj.originalElement.forEach(function (element, index) {\n var cloneElement = _this.createCloneElement(element);\n _this.actionObj.cloneElement[index] = cloneElement;\n if (_this.actionObj.element === element) {\n _this.actionObj.clone = cloneElement;\n }\n });\n }\n else {\n this.actionObj.clone = this.createCloneElement(this.actionObj.element);\n this.actionObj.cloneElement = [this.actionObj.clone];\n this.actionObj.originalElement = [this.actionObj.element];\n }\n };\n Resize.prototype.resizeStart = function (e) {\n this.actionObj.action = 'resize';\n this.actionObj.slotInterval = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n this.actionObj.interval = this.actionObj.slotInterval;\n var resizeTarget = closest(e.target, '.' + cls.EVENT_RESIZE_CLASS);\n this.actionObj.element = closest(resizeTarget, '.' + cls.APPOINTMENT_CLASS);\n this.actionObj.event = this.parent.eventBase.getEventByGuid(this.actionObj.element.getAttribute('data-guid'));\n var eventObj = extend({}, this.actionObj.event, null, true);\n var resizeArgs = {\n cancel: false,\n data: eventObj,\n element: this.actionObj.element,\n event: e,\n interval: this.actionObj.interval,\n scroll: { enable: true, scrollBy: 10 }\n };\n this.parent.trigger(event.resizeStart, resizeArgs);\n if (resizeArgs.cancel) {\n return;\n }\n this.actionClass('addClass');\n this.parent.uiStateValues.action = true;\n this.resizeEdges = {\n left: resizeTarget.classList.contains(cls.LEFT_RESIZE_HANDLER),\n right: resizeTarget.classList.contains(cls.RIGHT_RESIZE_HANDLER),\n top: resizeTarget.classList.contains(cls.TOP_RESIZE_HANDLER),\n bottom: resizeTarget.classList.contains(cls.BOTTOM_RESIZE_HANDLER)\n };\n this.actionObj.groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex : 0;\n var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);\n this.actionObj.cellWidth = workCell.offsetWidth;\n this.actionObj.cellHeight = workCell.offsetHeight;\n var headerRows = this.parent.activeViewOptions.headerRows.map(function (row) { return row.option; });\n if (this.parent.activeView.isTimelineView() && headerRows.length > 0 && ['Date', 'Hour'].indexOf(headerRows.slice(-1)[0]) < 0) {\n var tr = this.parent.getContentTable().querySelector('tr');\n var noOfDays_1 = 0;\n var tdCollections = [].slice.call(tr.childNodes);\n tdCollections.forEach(function (td) { return noOfDays_1 += parseInt(td.getAttribute('colspan'), 10); });\n this.actionObj.cellWidth = tr.offsetWidth / noOfDays_1;\n this.actionObj.cellHeight = tr.offsetHeight;\n }\n var pages = this.getPageCoordinates(e);\n this.actionObj.X = pages.pageX;\n this.actionObj.Y = pages.pageY;\n this.actionObj.groupIndex = parseInt(this.actionObj.element.getAttribute('data-group-index') || '0', 10);\n this.actionObj.interval = resizeArgs.interval;\n this.actionObj.scroll = resizeArgs.scroll;\n this.actionObj.start = new Date(eventObj[this.parent.eventFields.startTime].getTime());\n this.actionObj.end = new Date(eventObj[this.parent.eventFields.endTime].getTime());\n this.actionObj.originalElement = this.getOriginalElement(this.actionObj.element);\n var viewElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n this.scrollArgs = { element: viewElement, width: viewElement.scrollWidth, height: viewElement.scrollHeight };\n EventHandler.add(document, Browser.touchMoveEvent, this.resizing, this);\n EventHandler.add(document, Browser.touchEndEvent, this.resizeStop, this);\n };\n Resize.prototype.resizing = function (e) {\n this.parent.quickPopup.quickPopupHide();\n if (this.parent.element.querySelectorAll('.' + cls.RESIZE_CLONE_CLASS).length === 0) {\n this.resizeHelper();\n }\n if (this.autoScrollValidation(e) && !this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n this.autoScroll();\n }\n var resizeValidation = this.resizeValidation(e);\n if (this.resizeEdges.left) {\n if (resizeValidation) {\n var leftStyles = this.getLeftRightStyles(e, true);\n for (var _i = 0, _a = this.actionObj.cloneElement; _i < _a.length; _i++) {\n var cloneElement = _a[_i];\n setStyleAttribute(cloneElement, leftStyles);\n addClass([cloneElement], cls.LEFT_RESIZE_HANDLER);\n }\n }\n this.horizontalResizing(!this.parent.enableRtl);\n }\n if (this.resizeEdges.right) {\n if (resizeValidation) {\n var rightStyles = this.getLeftRightStyles(e, false);\n for (var _b = 0, _c = this.actionObj.cloneElement; _b < _c.length; _b++) {\n var cloneElement = _c[_b];\n setStyleAttribute(cloneElement, rightStyles);\n addClass([cloneElement], cls.RIGHT_RESIZE_HANDLER);\n }\n }\n this.horizontalResizing(this.parent.enableRtl);\n }\n if (this.resizeEdges.top) {\n if (resizeValidation) {\n var topStyles = this.getTopBottomStyles(e, true);\n for (var _d = 0, _e = this.actionObj.cloneElement; _d < _e.length; _d++) {\n var cloneElement = _e[_d];\n setStyleAttribute(cloneElement, topStyles);\n addClass([cloneElement], cls.TOP_RESIZE_HANDLER);\n }\n }\n this.verticalResizing(true);\n }\n if (this.resizeEdges.bottom) {\n if (resizeValidation) {\n var bottomStyles = this.getTopBottomStyles(e, false);\n for (var _f = 0, _g = this.actionObj.cloneElement; _f < _g.length; _f++) {\n var cloneElement = _g[_f];\n setStyleAttribute(cloneElement, bottomStyles);\n addClass([cloneElement], cls.BOTTOM_RESIZE_HANDLER);\n }\n }\n this.verticalResizing(false);\n }\n var eventObj = extend({}, this.actionObj.event, null, true);\n var resizeArgs = {\n cancel: false,\n data: eventObj,\n element: this.actionObj.element,\n event: e,\n startTime: this.actionObj.start,\n endTime: this.actionObj.end\n };\n this.parent.trigger(event.resizing, resizeArgs);\n };\n Resize.prototype.resizeStop = function (e) {\n EventHandler.remove(document, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeStop);\n this.removeCloneElement();\n this.actionClass('removeClass');\n this.parent.uiStateValues.action = false;\n var resizeArgs = { cancel: false, data: this.getChangedData(), element: this.actionObj.element, event: e };\n this.parent.trigger(event.resizeStop, resizeArgs);\n if (resizeArgs.cancel) {\n return;\n }\n this.saveChangedData(resizeArgs);\n };\n Resize.prototype.verticalResizing = function (isTop) {\n var offsetValue = this.actionObj.clone.offsetTop;\n if (!isTop) {\n offsetValue += this.actionObj.clone.offsetHeight;\n }\n var minutes = (offsetValue / this.actionObj.cellHeight) * this.actionObj.slotInterval;\n var resizeTime = util.resetTime(new Date(parseInt(this.actionObj.clone.offsetParent.getAttribute('data-date'), 10)));\n resizeTime.setHours(this.parent.activeView.getStartHour().getHours());\n resizeTime.setMinutes(minutes);\n if (isTop) {\n this.actionObj.start = this.calculateIntervalTime(resizeTime);\n }\n else {\n this.actionObj.end = this.calculateIntervalTime(resizeTime);\n }\n this.updateTimePosition(resizeTime);\n };\n Resize.prototype.horizontalResizing = function (isLeft) {\n var eventStart = new Date(this.actionObj.event[this.parent.eventFields.startTime].getTime());\n var eventEnd = new Date(this.actionObj.event[this.parent.eventFields.endTime].getTime());\n var resizeTime;\n if (this.parent.activeView.isTimelineView()) {\n var tr = this.parent.getContentTable().querySelector('tr');\n var headerName = this.parent.currentView;\n if (this.parent.activeViewOptions.headerRows.length > 0) {\n var rows = this.parent.activeViewOptions.headerRows.map(function (row) { return row.option; });\n headerName = rows.slice(-1)[0];\n if (this.parent.currentView === 'TimelineMonth' && headerName === 'Hour') {\n headerName = rows.slice(-2)[0] || 'Month';\n }\n }\n resizeTime = isLeft ? eventStart : eventEnd;\n var cellIndex = 0;\n if (['Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1) {\n var noOfDays_2 = 0;\n var tdCollections = [].slice.call(tr.childNodes);\n tdCollections.forEach(function (td) { return noOfDays_2 += parseInt(td.getAttribute('colspan'), 10); });\n var offsetValue = this.parent.enableRtl ? parseInt(this.actionObj.clone.style.right, 10) :\n parseInt(this.actionObj.clone.style.left, 10);\n if (!isLeft) {\n offsetValue += (this.actionObj.clone.offsetWidth - this.actionObj.cellWidth);\n }\n cellIndex = Math.floor(offsetValue / (tr.offsetWidth / noOfDays_2));\n cellIndex = (cellIndex < 0) ? 0 : (cellIndex >= noOfDays_2) ? noOfDays_2 - 1 : cellIndex;\n }\n else {\n var cellWidth = this.parent.currentView === 'TimelineMonth' || !this.parent.activeViewOptions.timeScale.enable ?\n this.actionObj.cellWidth - 2 : 0;\n cellIndex = Math.floor(isLeft ? (this.actionObj.clone.offsetLeft / this.actionObj.cellWidth) :\n (this.actionObj.clone.offsetLeft + (this.actionObj.clone.offsetWidth - cellWidth)) / this.actionObj.cellWidth);\n if (this.parent.enableRtl) {\n var cellOffsetWidth = 0;\n if (headerName === 'TimelineMonth' || (!this.parent.activeViewOptions.timeScale.enable &&\n this.parent.currentView !== 'TimelineMonth')) {\n cellOffsetWidth = this.actionObj.cellWidth;\n }\n var offsetWidth = (Math.floor(parseInt(this.actionObj.clone.style.right, 10) / this.actionObj.cellWidth) *\n this.actionObj.cellWidth) + (isLeft ? 0 : this.actionObj.clone.offsetWidth - cellOffsetWidth);\n cellIndex = Math.ceil(offsetWidth / this.actionObj.cellWidth);\n }\n cellIndex = this.getIndex(cellIndex);\n }\n var resizeDate = void 0;\n if (['Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1) {\n resizeDate = new Date(this.parent.activeView.renderDates[cellIndex].getTime());\n }\n else {\n resizeDate = new Date(parseInt(tr.childNodes.item(cellIndex).getAttribute('data-date'), 10));\n }\n if (['TimelineMonth', 'Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1 ||\n !this.parent.activeViewOptions.timeScale.enable) {\n resizeTime = new Date(resizeDate.setHours(resizeTime.getHours(), resizeTime.getMinutes(), resizeTime.getSeconds()));\n }\n else {\n var offsetValue = this.parent.enableRtl ? parseFloat(this.actionObj.clone.style.right) :\n parseFloat(this.actionObj.clone.style.left);\n if (!isLeft) {\n offsetValue += this.actionObj.clone.offsetWidth;\n }\n var spanMinutes = Math.ceil((this.actionObj.slotInterval / this.actionObj.cellWidth) *\n (offsetValue - Math.floor(offsetValue / this.actionObj.cellWidth) * this.actionObj.cellWidth));\n resizeTime = new Date(resizeDate.getTime());\n resizeTime.setMinutes(resizeTime.getMinutes() + spanMinutes);\n this.updateTimePosition(resizeTime);\n }\n }\n else {\n var cloneIndex = closest(this.actionObj.clone, 'td').cellIndex;\n var originalWidth = Math.ceil((isLeft ? this.actionObj.element.offsetWidth : 0) / this.actionObj.cellWidth) *\n this.actionObj.cellWidth;\n var noOfDays = Math.ceil((this.actionObj.clone.offsetWidth - originalWidth) / this.actionObj.cellWidth);\n var tr = closest(this.actionObj.clone, 'tr');\n var dayIndex = isLeft ? cloneIndex - noOfDays : cloneIndex + noOfDays - 1;\n dayIndex = this.getIndex(dayIndex);\n resizeTime = new Date(parseInt(tr.childNodes.item(dayIndex).getAttribute('data-date'), 10));\n if (isLeft) {\n resizeTime.setHours(eventStart.getHours(), eventStart.getMinutes(), eventStart.getSeconds());\n }\n else {\n resizeTime.setHours(eventEnd.getHours(), eventEnd.getMinutes(), eventEnd.getSeconds());\n }\n }\n if (isLeft) {\n this.actionObj.start = this.parent.activeViewOptions.timeScale.enable ? this.calculateIntervalTime(resizeTime) : resizeTime;\n }\n else {\n var resizeEnd = (this.actionObj.event[this.parent.eventFields.isAllDay] && resizeTime.getHours() === 0 &&\n resizeTime.getMinutes() === 0) ? util.addDays(resizeTime, 1) : resizeTime;\n this.actionObj.end = this.parent.activeViewOptions.timeScale.enable && this.parent.currentView !== 'Month' ?\n this.calculateIntervalTime(resizeEnd) : resizeEnd;\n }\n };\n Resize.prototype.getTopBottomStyles = function (e, isTop) {\n var pages = this.getPageCoordinates(e);\n var viewElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var slotInterval = (this.actionObj.cellHeight / this.actionObj.slotInterval) * this.actionObj.interval;\n var clnHeight = isTop ? this.actionObj.element.offsetHeight + (this.actionObj.Y - pages.pageY) :\n this.actionObj.element.offsetHeight + (pages.pageY - this.actionObj.Y);\n var clnTop = isTop ? this.actionObj.element.offsetTop - (this.actionObj.Y - pages.pageY) : this.actionObj.clone.offsetTop;\n clnHeight = (clnTop < 0) ? this.actionObj.clone.offsetHeight :\n (this.actionObj.clone.offsetTop + this.actionObj.clone.offsetHeight) > this.scrollArgs.height ?\n this.actionObj.clone.offsetHeight : clnHeight;\n clnTop = (clnTop < 0) ? 0 : clnTop;\n clnTop = Math.floor(clnTop / slotInterval) * slotInterval;\n clnHeight = clnTop + clnHeight >= viewElement.scrollHeight ? viewElement.scrollHeight - clnTop :\n Math.ceil(clnHeight / slotInterval) * slotInterval;\n var styles = {\n height: formatUnit(clnHeight < this.actionObj.cellHeight ? this.actionObj.cellHeight : clnHeight),\n top: formatUnit((clnHeight < this.actionObj.cellHeight && isTop) ? this.actionObj.clone.offsetTop : clnTop),\n left: '0px', right: '0px', width: '100%'\n };\n return styles;\n };\n Resize.prototype.getLeftRightStyles = function (e, isLeft) {\n var styles = {};\n var pages = this.getPageCoordinates(e);\n var isTimelineView = this.parent.activeView.isTimelineView();\n var isTimeViews = ['TimelineDay', 'TimelineWeek', 'TimelineWorkWeek'].indexOf(this.parent.currentView) > 0 &&\n this.parent.activeViewOptions.timeScale.enable;\n var slotInterval = (this.actionObj.cellWidth / this.actionObj.slotInterval) * this.actionObj.interval;\n var pageWidth = isLeft ? (this.actionObj.X - pages.pageX) : (pages.pageX - this.actionObj.X);\n var targetWidth = isTimelineView ?\n (this.actionObj.element.offsetWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth :\n this.parent.currentView === 'Month' ? this.actionObj.element.offsetWidth :\n Math.ceil(this.actionObj.element.offsetWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n var offsetWidth = targetWidth + (Math.ceil(pageWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth);\n if (isTimeViews) {\n offsetWidth = targetWidth + (Math.ceil(pageWidth / slotInterval) * slotInterval);\n }\n styles.width = formatUnit((offsetWidth < this.actionObj.cellWidth) ? this.actionObj.cellWidth : offsetWidth);\n if (this.parent.enableRtl) {\n var rightValue = isTimelineView ?\n Math.floor(parseInt(this.actionObj.element.style.right, 10) / this.actionObj.cellWidth) * this.actionObj.cellWidth :\n -(offsetWidth - this.actionObj.cellWidth);\n rightValue = isTimelineView ? rightValue : isLeft ? 0 : rightValue > 0 ? 0 : rightValue;\n if (isTimelineView && !isLeft) {\n rightValue = Math.ceil((this.actionObj.element.offsetLeft + (this.actionObj.element.offsetWidth +\n (pages.pageX - this.actionObj.X))) / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n rightValue = rightValue < 0 ? Math.abs(rightValue) : -rightValue;\n }\n styles.right = formatUnit(rightValue);\n }\n else {\n var offsetLeft = isLeft ? this.actionObj.element.offsetLeft - (this.actionObj.X - pages.pageX) :\n this.parent.enableRtl ? this.actionObj.element.offsetLeft : 0;\n if (isTimelineView) {\n offsetLeft = isLeft ? offsetLeft : parseInt(this.actionObj.clone.style.left, 10);\n if (this.parent.enableRtl) {\n offsetLeft = !isLeft ? (pages.pageX < this.actionObj.X - this.actionObj.clone.offsetWidth) ?\n parseInt(this.actionObj.clone.style.right, 10) : offsetLeft : offsetLeft;\n }\n else {\n offsetLeft = isLeft ? (pages.pageX > this.actionObj.X + this.actionObj.clone.offsetWidth &&\n this.actionObj.clone.offsetWidth === this.actionObj.cellWidth) ?\n parseInt(this.actionObj.clone.style.left, 10) : offsetLeft : offsetLeft;\n }\n }\n var leftValue = offsetLeft;\n offsetLeft = isTimelineView ? isTimeViews ? isLeft ? Math.floor(offsetLeft / slotInterval) * slotInterval : offsetLeft :\n Math.floor(offsetLeft / this.actionObj.cellWidth) * this.actionObj.cellWidth :\n Math.ceil(Math.abs(offsetLeft) / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n var cloneWidth = Math.ceil(this.actionObj.clone.offsetWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n if (isLeft) {\n styles.left = formatUnit(isTimelineView ? offsetLeft : isLeft ? leftValue < 0 ? -offsetLeft :\n (Math.ceil((targetWidth - cloneWidth) / this.actionObj.cellWidth) * this.actionObj.cellWidth) : offsetLeft);\n }\n }\n return styles;\n };\n Resize.prototype.resizeValidation = function (e) {\n var pages = this.getPageCoordinates(e);\n var viewDimension = this.getContentAreaDimension();\n var resizeValidation = false;\n if (this.resizeEdges.left) {\n resizeValidation = (pages.pageX - this.actionObj.cellWidth) >= viewDimension.left;\n }\n if (this.resizeEdges.right) {\n resizeValidation = (pages.pageX + this.actionObj.cellWidth) <= viewDimension.right;\n }\n if (this.resizeEdges.top) {\n resizeValidation = this.actionObj.clone.offsetTop >= viewDimension.top;\n }\n if (this.resizeEdges.bottom) {\n resizeValidation = (this.actionObj.clone.offsetTop + this.actionObj.clone.offsetHeight) <= this.scrollArgs.height;\n }\n return resizeValidation;\n };\n /**\n * Get module name.\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n return Resize;\n}(ActionBase));\nexport { Resize };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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, Draggable, extend, formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, remove, removeClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { ActionBase } from '../actions/action-base';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * Schedule events drag actions\n */\nvar DragAndDrop = /** @class */ (function (_super) {\n __extends(DragAndDrop, _super);\n function DragAndDrop() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DragAndDrop.prototype.wireDragEvent = function (element, isAllDay) {\n var dragAreaTarget = isAllDay ? cls.DATE_HEADER_WRAP_CLASS : cls.CONTENT_WRAP_CLASS;\n new Draggable(element, {\n abort: '.' + cls.EVENT_RESIZE_CLASS,\n clone: true,\n cursorAt: { left: 0, top: 0 },\n dragArea: this.parent.element.querySelector('.' + dragAreaTarget),\n dragStart: this.dragStart.bind(this),\n drag: this.drag.bind(this),\n dragStop: this.dragStop.bind(this),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this),\n queryPositionInfo: this.dragPosition.bind(this)\n });\n };\n DragAndDrop.prototype.dragHelper = function (e) {\n this.setDragActionDefaultValues();\n this.actionObj.element = e.element;\n this.actionObj.action = 'drag';\n this.actionObj.clone = this.createCloneElement(this.actionObj.element);\n if (this.parent.currentView !== 'Month' && this.parent.timeScale.enable && !this.parent.activeView.isTimelineView() &&\n !this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n setStyleAttribute(this.actionObj.clone, { left: '0%', right: '0%', width: '100%' });\n }\n this.actionObj.clone.style.top = formatUnit(this.actionObj.element.offsetTop);\n this.actionObj.cloneElement = [this.actionObj.clone];\n this.actionObj.originalElement = [this.actionObj.element];\n return this.actionObj.clone;\n };\n DragAndDrop.prototype.dragPosition = function (e) {\n var slotInterval = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n var cellWidth = this.parent.activeView.isTimelineView() ? (this.actionObj.cellWidth / slotInterval) *\n this.actionObj.interval : this.actionObj.cellWidth;\n var cellHeight = (this.actionObj.cellHeight / slotInterval) * this.actionObj.interval;\n var leftOffset = this.parent.enableRtl ? parseInt(e.left, 10) : Math.abs(parseInt(e.left, 10));\n var leftValue;\n if (this.parent.currentView === 'Month' || this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n leftValue = e.left;\n }\n else {\n leftValue = formatUnit(Math.floor(leftOffset / cellWidth) * cellWidth);\n }\n var topValue;\n if (this.parent.activeView.isTimelineView() || this.actionObj.element.offsetParent.classList.contains(cls.MORE_EVENT_POPUP_CLASS)) {\n topValue = formatUnit(this.actionObj.clone.offsetTop);\n }\n else if (this.parent.currentView === 'Month') {\n topValue = formatUnit(0);\n }\n else if (this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) &&\n !this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n topValue = formatUnit(this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS).scrollTop);\n }\n else if (this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n topValue = formatUnit(this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).offsetTop);\n }\n else {\n topValue = formatUnit(Math.ceil(parseInt(e.top, 10) / cellHeight) * cellHeight);\n var scrollHeight = this.parent.element.querySelector('.e-content-wrap').scrollHeight;\n var cloneBottom = parseInt(topValue, 10) + this.actionObj.clone.offsetHeight;\n if (cloneBottom > scrollHeight) {\n topValue = (parseInt(topValue, 10) - (cloneBottom - scrollHeight)) + 'px';\n }\n }\n return { left: leftValue, top: topValue };\n };\n DragAndDrop.prototype.setDragActionDefaultValues = function () {\n this.actionObj.action = 'drag';\n this.actionObj.isAllDay = null;\n this.actionObj.slotInterval = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n this.actionObj.interval = this.actionObj.slotInterval;\n var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);\n this.actionObj.cellWidth = workCell.offsetWidth;\n this.actionObj.cellHeight = workCell.offsetHeight;\n };\n DragAndDrop.prototype.dragStart = function (e) {\n this.parent.quickPopup.quickPopupHide();\n this.eventArgs = this.getPageCoordinates(e);\n var eventGuid = this.actionObj.element.getAttribute('data-guid');\n this.actionObj.event = this.parent.eventBase.getEventByGuid(eventGuid);\n var eventObj = extend({}, this.actionObj.event, null, true);\n var dragArgs = {\n cancel: false,\n data: eventObj,\n event: e,\n excludeSelectors: null,\n element: this.actionObj.element,\n interval: this.actionObj.interval,\n scroll: { enable: true, scrollBy: 10 }\n };\n this.parent.trigger(events.dragStart, dragArgs);\n if (dragArgs.cancel) {\n this.removeCloneElement();\n return;\n }\n this.actionClass('addClass');\n this.parent.uiStateValues.action = true;\n this.actionObj.start = eventObj[this.parent.eventFields.startTime];\n this.actionObj.end = eventObj[this.parent.eventFields.endTime];\n this.actionObj.groupIndex = parseInt(this.actionObj.element.getAttribute('data-group-index') || '0', 10);\n this.actionObj.interval = dragArgs.interval;\n this.actionObj.scroll = dragArgs.scroll;\n this.actionObj.excludeSelectors = dragArgs.excludeSelectors;\n };\n DragAndDrop.prototype.drag = function (e) {\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventArgs = this.getPageCoordinates(e);\n this.actionObj.Y = eventArgs.pageY;\n if (this.autoScrollValidation(e) && !this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n this.autoScroll();\n }\n this.updateDraggingDateTime(e);\n var dragArgs = { data: eventObj, event: e, element: this.actionObj.element };\n this.parent.trigger(events.drag, dragArgs);\n };\n DragAndDrop.prototype.dragStop = function (e) {\n this.removeCloneElement();\n this.actionClass('removeClass');\n this.parent.uiStateValues.action = false;\n if (this.isAllowDrop(e)) {\n return;\n }\n var dragArgs = { cancel: false, data: this.getChangedData(), event: e, element: this.actionObj.element };\n this.parent.trigger(events.dragStop, dragArgs);\n if (dragArgs.cancel) {\n return;\n }\n this.saveChangedData(dragArgs);\n };\n DragAndDrop.prototype.updateDraggingDateTime = function (e) {\n if (this.actionObj.element.offsetParent.classList.contains(cls.MORE_EVENT_POPUP_CLASS)) {\n this.morePopupEventDragging(e);\n }\n else if (this.parent.activeView.isTimelineView()) {\n if (this.parent.currentView === 'TimelineMonth') {\n this.calculateTimelineDate(e);\n }\n else {\n this.calculateTimelineTime(e);\n }\n }\n else {\n if (this.parent.currentView === 'Month') {\n this.calculateVerticalDate(e);\n }\n else {\n this.calculateVerticalTime(e);\n }\n }\n };\n DragAndDrop.prototype.morePopupEventDragging = function (e) {\n if (isNullOrUndefined(e.target) || (e.target && isNullOrUndefined(closest(e.target, 'td')))) {\n return;\n }\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -\n eventObj[this.parent.eventFields.startTime].getTime();\n var td = closest(e.target, 'td');\n var dragStart = new Date(parseInt(td.getAttribute('data-date'), 10));\n var dragEnd = new Date(dragStart.getTime());\n dragEnd.setMilliseconds(eventDuration);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.actionObj.groupIndex = parseInt(td.getAttribute('data-group-index'), 10);\n }\n this.actionObj.start = new Date(dragStart.getTime());\n this.actionObj.end = new Date(dragEnd.getTime());\n this.actionObj.clone.style.top = formatUnit(td.offsetParent.offsetTop);\n this.actionObj.clone.style.left = formatUnit(td.offsetLeft);\n this.actionObj.clone.style.width = formatUnit(td.offsetWidth);\n var eventContainer = td;\n var eventWrapper;\n if (this.parent.activeView.isTimelineView()) {\n var rowIndex = closest(td, 'tr').rowIndex;\n eventContainer = this.parent.element.querySelectorAll('.e-appointment-container').item(rowIndex);\n }\n eventWrapper = eventContainer.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!eventWrapper) {\n eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n eventContainer.appendChild(eventWrapper);\n }\n eventWrapper.appendChild(this.actionObj.clone);\n };\n DragAndDrop.prototype.calculateVerticalTime = function (e) {\n if (isNullOrUndefined(e.target) || (e.target && isNullOrUndefined(closest(e.target, 'tr')))) {\n return;\n }\n if (this.parent.activeViewOptions.timeScale.enable) {\n this.swapDragging(e);\n }\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventStart = eventObj[this.parent.eventFields.startTime];\n var eventEnd = eventObj[this.parent.eventFields.endTime];\n var eventDuration = eventEnd.getTime() - eventStart.getTime();\n var offsetTop = Math.floor(this.actionObj.clone.offsetTop / this.actionObj.cellHeight) * this.actionObj.cellHeight;\n offsetTop = offsetTop < 0 ? 0 : offsetTop;\n var rowIndex = offsetTop / this.actionObj.cellHeight;\n var heightPerMinute = this.actionObj.cellHeight / this.actionObj.slotInterval;\n var diffInMinutes = this.actionObj.clone.offsetTop - offsetTop;\n var isAllDayDrag = this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS);\n var tr;\n if (isAllDayDrag) {\n tr = this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS);\n }\n else {\n var trCollections = this.parent.getContentTable().querySelectorAll('tr');\n tr = trCollections.item(rowIndex);\n }\n var index = closest(e.target, 'td').cellIndex;\n var colIndex = isNullOrUndefined(index) ? closest(this.actionObj.clone, 'td').cellIndex : index;\n var td = tr.childNodes.item(colIndex);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.actionObj.groupIndex = parseInt(td.getAttribute('data-group-index'), 10);\n }\n var dragStart;\n var dragEnd;\n if (this.parent.activeViewOptions.timeScale.enable && !isAllDayDrag) {\n this.getEventWrapper(colIndex).appendChild(this.actionObj.clone);\n var spanHours = -(((this.actionObj.slotInterval / this.actionObj.cellHeight) * diffInMinutes) * (1000 * 60));\n if (this.actionObj.clone.querySelector('.' + cls.EVENT_ICON_UP_CLASS)) {\n var startTime = new Date(eventStart.getTime());\n spanHours = util.addDays(util.resetTime(new Date(startTime.getTime())), 1).getTime() - startTime.getTime();\n }\n dragStart = new Date(parseInt(td.getAttribute('data-date'), 10));\n dragStart.setMinutes(dragStart.getMinutes() + (diffInMinutes * heightPerMinute));\n dragStart.setMilliseconds(-spanHours);\n dragStart = this.calculateIntervalTime(dragStart);\n dragStart.setMilliseconds(spanHours);\n dragEnd = new Date(dragStart.getTime());\n if (this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n dragEnd.setMinutes(dragEnd.getMinutes() + this.actionObj.slotInterval);\n }\n else {\n dragEnd.setMilliseconds(eventDuration);\n }\n }\n else {\n this.getEventWrapper(colIndex).appendChild(this.actionObj.clone);\n dragStart = new Date(parseInt(td.getAttribute('data-date'), 10));\n dragStart.setHours(eventStart.getHours(), eventStart.getMinutes(), eventStart.getSeconds());\n dragEnd = new Date(dragStart.getTime());\n dragEnd.setMilliseconds(eventDuration);\n if (!this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) &&\n this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n dragEnd = util.addDays(util.resetTime(dragEnd), 1);\n }\n }\n this.actionObj.start = new Date(+dragStart);\n this.actionObj.end = new Date(+dragEnd);\n this.updateTimePosition(this.actionObj.start);\n };\n DragAndDrop.prototype.swapDragging = function (e) {\n var _this = this;\n var colIndex = closest(e.target, 'td').cellIndex;\n var setDragArea = function (isAllDay) {\n var dragAreaTarget = isAllDay ? cls.DATE_HEADER_WRAP_CLASS : cls.CONTENT_WRAP_CLASS;\n var dragObj = _this.actionObj.element.ej2_instances[0];\n dragObj.dragArea = _this.parent.element.querySelector('.' + dragAreaTarget);\n dragObj.dataBind();\n };\n if (closest(e.target, '.' + cls.DATE_HEADER_WRAP_CLASS) &&\n !closest(this.actionObj.clone, '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS)) {\n addClass([this.actionObj.clone], cls.ALLDAY_APPOINTMENT_CLASS);\n this.getEventWrapper(colIndex).appendChild(this.actionObj.clone);\n this.actionObj.isAllDay = true;\n setDragArea(this.actionObj.isAllDay);\n var eventHeight_1 = this.getAllDayEventHeight();\n var allDayElement = [].slice.call(this.parent.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS + ':first-child'));\n if (allDayElement[0].offsetHeight < eventHeight_1) {\n allDayElement.forEach(function (element) { return element.style.height = ((eventHeight_1 + 2) / 12) + 'em'; });\n }\n setStyleAttribute(this.actionObj.clone, {\n height: formatUnit(eventHeight_1),\n top: formatUnit(this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).offsetTop)\n });\n }\n if (closest(e.target, '.' + cls.WORK_CELLS_CLASS) && !closest(this.actionObj.clone, '.' + cls.DAY_WRAPPER_CLASS)) {\n removeClass([this.actionObj.clone], cls.ALLDAY_APPOINTMENT_CLASS);\n this.getEventWrapper(colIndex).appendChild(this.actionObj.clone);\n this.actionObj.isAllDay = false;\n setDragArea(this.actionObj.isAllDay);\n var cursorElement = this.getCursorElement(e);\n setStyleAttribute(this.actionObj.clone, {\n left: formatUnit(0),\n top: formatUnit(cursorElement.offsetTop),\n height: formatUnit(this.actionObj.element.offsetHeight),\n width: formatUnit(this.actionObj.cellWidth)\n });\n }\n };\n DragAndDrop.prototype.calculateVerticalDate = function (e) {\n if (isNullOrUndefined(e.target) || (e.target && isNullOrUndefined(closest(e.target, 'tr')))) {\n return;\n }\n this.actionObj.clone.style.top = formatUnit(0);\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -\n eventObj[this.parent.eventFields.startTime].getTime();\n var td = closest(e.target, 'td');\n var tr = td.parentElement;\n var colIndex = (tr.rowIndex * tr.childNodes.length) + td.cellIndex;\n // let cellIndex: number = td.cellIndex;\n // let daysCount: number = Math.floor(this.actionObj.element.offsetWidth / this.actionObj.cellWidth);\n // let maxIndex: number = (tr.lastChild as HTMLTableCellElement).cellIndex;\n // if (cellIndex + daysCount > maxIndex) {\n // this.actionObj.clone.style.width = formatUnit((this.actionObj.cellWidth - 2) * ((maxIndex + 1) - cellIndex));\n // } else {\n // this.actionObj.clone.style.width = formatUnit(this.actionObj.element.offsetWidth);\n // }\n var outerWrapper = this.parent.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.actionObj.groupIndex = parseInt(td.getAttribute('data-group-index'), 10);\n }\n var targetWrapper = outerWrapper.item(colIndex).querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!targetWrapper) {\n targetWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n outerWrapper.item(colIndex).appendChild(targetWrapper);\n }\n if (!targetWrapper.querySelector('.' + cls.CLONE_ELEMENT_CLASS)) {\n targetWrapper.appendChild(this.actionObj.clone);\n }\n var timeString = td.getAttribute('data-date') || eventObj[this.parent.eventFields.startTime].getTime().toString();\n var dragStart = new Date(parseInt(timeString, 10));\n var dragEnd = new Date(dragStart.getTime());\n if (this.parent.enableRtl) {\n var endTimeDiff = eventObj[this.parent.eventFields.endTime].getTime() -\n (util.resetTime(new Date(+eventObj[this.parent.eventFields.endTime]))).getTime();\n dragEnd = new Date(dragStart.getTime() + endTimeDiff);\n dragStart = new Date(dragEnd.getTime() - eventDuration);\n }\n else {\n var startTimeDiff = eventObj[this.parent.eventFields.startTime].getTime() -\n (util.resetTime(new Date(+eventObj[this.parent.eventFields.startTime]))).getTime();\n dragStart = new Date(dragStart.getTime() + startTimeDiff);\n dragEnd = new Date(dragStart.getTime() + eventDuration);\n }\n this.actionObj.start = new Date(dragStart.getTime());\n this.actionObj.end = new Date(dragEnd.getTime());\n this.updateTimePosition(this.actionObj.start);\n };\n DragAndDrop.prototype.calculateTimelineTime = function (e) {\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -\n eventObj[this.parent.eventFields.startTime].getTime();\n var offsetLeft = this.parent.enableRtl ? Math.abs(this.actionObj.clone.offsetLeft) - this.actionObj.clone.offsetWidth :\n parseInt(this.actionObj.clone.style.left, 10);\n offsetLeft = Math.floor(offsetLeft / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n var diffInMinutes = this.actionObj.clone.offsetLeft - offsetLeft;\n if (this.parent.enableRtl) {\n var rightOffset = Math.abs(parseInt(this.actionObj.clone.style.left, 10)) - this.actionObj.clone.offsetWidth;\n this.actionObj.clone.style.right = formatUnit(rightOffset);\n diffInMinutes = rightOffset - offsetLeft;\n }\n var widthPerMinute = this.actionObj.slotInterval / this.actionObj.cellWidth;\n var colIndex = this.getIndex(Math.floor(offsetLeft / this.actionObj.cellWidth));\n var tr = this.parent.getContentTable().querySelector('tr');\n var eventStart = new Date(parseInt(tr.childNodes.item(colIndex).getAttribute('data-date'), 10));\n eventStart.setMinutes(eventStart.getMinutes() + Math.round((widthPerMinute * diffInMinutes)));\n eventStart = this.calculateIntervalTime(eventStart);\n var eventEnd = new Date(eventStart.getTime());\n eventEnd.setMilliseconds(eventDuration);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.calculateResourceGroupingPosition(e);\n }\n this.actionObj.start = new Date(eventStart.getTime());\n this.actionObj.end = new Date(eventEnd.getTime());\n this.updateTimePosition(this.actionObj.start);\n };\n DragAndDrop.prototype.calculateTimelineDate = function (e) {\n var cloneIndex = 0;\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -\n eventObj[this.parent.eventFields.startTime].getTime();\n if (this.parent.enableRtl) {\n cloneIndex = (Math.floor(parseInt(this.actionObj.clone.style.right, 10))) / this.actionObj.cellWidth;\n var rightOffset = Math.abs(parseInt(this.actionObj.clone.style.left, 10)) - this.actionObj.clone.offsetWidth;\n this.actionObj.clone.style.right = formatUnit(rightOffset);\n }\n else {\n cloneIndex = Math.floor(this.actionObj.clone.offsetLeft / this.actionObj.cellWidth);\n var leftOffset = parseInt(this.actionObj.clone.style.left, 10);\n this.actionObj.clone.style.left = formatUnit(leftOffset);\n }\n cloneIndex = this.getIndex(cloneIndex);\n var tr = this.parent.getContentTable().querySelector('tr');\n var dragDate = new Date(parseInt(tr.childNodes.item(cloneIndex).getAttribute('data-date'), 10));\n var dragStart = new Date(dragDate.getTime());\n var srtDateDiff = eventObj[this.parent.eventFields.startTime].getTime() -\n (util.resetTime(new Date(+eventObj[this.parent.eventFields.startTime]))).getTime();\n dragStart = new Date(dragStart.getTime() + srtDateDiff);\n var dragEnd = new Date(dragStart.getTime() + eventDuration);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.calculateResourceGroupingPosition(e);\n }\n this.actionObj.start = new Date(dragStart.getTime());\n this.actionObj.end = new Date(dragEnd.getTime());\n this.updateTimePosition(this.actionObj.start);\n };\n DragAndDrop.prototype.calculateResourceGroupingPosition = function (e) {\n var dragArea = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var trCollection = this.parent.element.querySelectorAll('.e-content-wrap .e-content-table tr:not(.e-hidden)');\n var rowIndex = Math.floor(Math.floor((this.actionObj.Y + dragArea.scrollTop) -\n dragArea.getBoundingClientRect().top) / this.actionObj.cellHeight);\n rowIndex = (rowIndex < 0) ? 0 : (rowIndex > trCollection.length - 1) ? trCollection.length - 1 : rowIndex;\n var eventContainer = this.parent.element.querySelectorAll('.e-appointment-container:not(.e-hidden)').item(rowIndex);\n var eventWrapper = eventContainer.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!eventWrapper) {\n eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n eventContainer.appendChild(eventWrapper);\n }\n eventWrapper.appendChild(this.actionObj.clone);\n var td = closest(e.target, 'td');\n this.actionObj.groupIndex = td ? parseInt(td.getAttribute('data-group-index'), 10) : this.actionObj.groupIndex;\n this.actionObj.clone.style.top = formatUnit(trCollection.item(rowIndex).offsetTop);\n };\n DragAndDrop.prototype.getEventWrapper = function (index) {\n var eventWrapper;\n var isAllDayDrag = this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS);\n if (this.parent.activeViewOptions.timeScale.enable) {\n var wrapperClass = isAllDayDrag ? '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : '.' + cls.APPOINTMENT_WRAPPER_CLASS;\n eventWrapper = this.parent.element.querySelectorAll(wrapperClass).item(index);\n }\n else {\n var targetWrapper = this.parent.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS).item(index);\n eventWrapper = targetWrapper.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!eventWrapper) {\n eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n targetWrapper.appendChild(eventWrapper);\n }\n }\n return eventWrapper;\n };\n DragAndDrop.prototype.getAllDayEventHeight = function () {\n var eventWrapper = createElement('div', { className: cls.APPOINTMENT_CLASS });\n this.parent.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS).appendChild(eventWrapper);\n var eventHeight = eventWrapper.offsetHeight;\n remove(eventWrapper);\n return eventHeight;\n };\n DragAndDrop.prototype.isAllowDrop = function (e) {\n if (!this.actionObj.excludeSelectors) {\n return false;\n }\n var dropSelectors = this.actionObj.excludeSelectors.split(',');\n var isAllowDrop = false;\n for (var _i = 0, dropSelectors_1 = dropSelectors; _i < dropSelectors_1.length; _i++) {\n var selector = dropSelectors_1[_i];\n if (e.target.classList.contains(selector)) {\n isAllowDrop = true;\n break;\n }\n }\n return isAllowDrop;\n };\n /**\n * Get module name.\n */\n DragAndDrop.prototype.getModuleName = function () {\n return 'dragAndDrop';\n };\n return DragAndDrop;\n}(ActionBase));\nexport { DragAndDrop };\n","import { createElement, append, prepend, isNullOrUndefined, getValue, getDefaultDateObject, cldrData, addClass } from '@syncfusion/ej2-base';\nimport { getDateInMs, addDays, resetTime, WEEK_LENGTH, getWeekFirstDate, getOuterHeight, getScrollBarWidth } 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.getTimeString(dt);\n },\n getTimelineDate: function (dt) {\n return _this.parent.globalize.formatDate(dt, { skeleton: 'MMMd' }) + ', ' + _this.parent.getDayNames('wide')[dt.getDay()];\n }\n };\n this.parent = parent;\n }\n ViewBase.prototype.isTimelineView = function () {\n return this.parent.currentView.indexOf('Timeline') !== -1;\n };\n ViewBase.prototype.createEventTable = function (trCount) {\n var eventTable = createElement('div', { className: cls.EVENT_TABLE_CLASS });\n for (var row = 0; row < trCount; row++) {\n eventTable.appendChild(createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS }));\n }\n return eventTable;\n };\n ViewBase.prototype.collapseRows = function (wrap) {\n if (!this.isTimelineView()) {\n return;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.parent.resourceBase.hideResourceRows(wrap.querySelector('tbody'));\n this.parent.resourceBase.hideResourceRows(wrap.querySelector('.' + cls.EVENT_TABLE_CLASS));\n }\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.createColGroup = function (table, lastRow) {\n var length = lastRow.length;\n if (lastRow[0].colSpan) {\n length = lastRow.map(function (value) { return value.colSpan; }).reduce(function (prev, next) { return prev + next; });\n }\n var colGroupEle = createElement('colgroup');\n for (var i = 0; i < length; i++) {\n colGroupEle.appendChild(createElement('col'));\n }\n table.appendChild(colGroupEle);\n };\n ViewBase.prototype.getScrollXIndent = function (content) {\n return content.offsetHeight - content.clientHeight > 0 ? getScrollBarWidth() : 0;\n };\n ViewBase.prototype.scrollTopPanel = function (target) {\n this.getDatesHeaderElement().firstChild.scrollLeft = target.scrollLeft;\n };\n ViewBase.prototype.scrollHeaderLabels = function (target) {\n var _this = this;\n var headerTable = this.element.querySelector('.e-date-header-wrap table');\n var colWidth = headerTable.offsetWidth / headerTable.querySelectorAll('colgroup col').length;\n var applyLeft = function (headerCells, isRtl) {\n var currentCell;\n var tdLeft = 0;\n var colSpan = 0;\n var hiddenLeft = isRtl ? target.scrollWidth - target.offsetWidth - target.scrollLeft : target.scrollLeft;\n for (var i = 0; i < headerCells.length; i++) {\n colSpan += parseInt(headerCells[i].getAttribute('colSpan'), 10);\n if (colSpan > Math.floor(hiddenLeft / colWidth)) {\n currentCell = headerCells[i];\n break;\n }\n tdLeft += headerCells[i].offsetWidth;\n }\n currentCell.children[0].style[isRtl ? 'right' : 'left'] = (hiddenLeft - tdLeft) + 'px';\n };\n var className = ['.e-header-year-cell', '.e-header-month-cell', '.e-header-week-cell', '.e-header-cells'];\n for (var i = 0; i < className.length; i++) {\n var headerCells = [].slice.call(this.element.querySelectorAll(className[i]));\n if (headerCells.length > 0) {\n headerCells.forEach(function (element) {\n element.children[0].style[_this.parent.enableRtl ? 'right' : 'left'] = '';\n });\n applyLeft(headerCells, this.parent.enableRtl);\n }\n }\n };\n ViewBase.prototype.addAttributes = function (td, element) {\n if (td.text) {\n element.innerHTML = td.text;\n }\n if (td.colSpan) {\n element.setAttribute('colspan', td.colSpan.toString());\n }\n if (td.className) {\n addClass([element], td.className);\n }\n };\n ViewBase.prototype.getHeaderBarHeight = function () {\n var headerBarHeight = 2;\n if (this.parent.headerModule) {\n headerBarHeight += getOuterHeight(this.parent.headerModule.getHeaderElement());\n }\n if (this.parent.uiStateValues.isGroupAdaptive) {\n headerBarHeight += this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR).offsetHeight;\n }\n return headerBarHeight;\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.getDatesHeaderElement = function () {\n return this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS);\n };\n ViewBase.prototype.adjustEventWrapper = function () {\n // Here adjust the events wrapper width based in work cells\n };\n ViewBase.prototype.getDateSlots = function (renderDates, workDays) {\n // Here getDateSlots only need in vertical and month views\n return [];\n };\n ViewBase.prototype.generateColumnLevels = function () {\n // Here generateColumnLevels only need in vertical and month views\n return [];\n };\n ViewBase.prototype.highlightCurrentTime = function () {\n // Here showTimeIndicator functionalities\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, workDays) {\n if (workDays === void 0) { workDays = this.parent.activeViewOptions.workDays; }\n if (workDays.indexOf(date.getDay()) >= 0) {\n return true;\n }\n return false;\n };\n ViewBase.prototype.isWorkHour = function (date, startHour, endHour, workDays) {\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, workDays)) {\n return false;\n }\n return true;\n };\n ViewBase.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n // Due to same code for vertical and time line, week & work week views, if condition has used\n if (this.parent.currentView === 'Week' || this.parent.currentView === 'TimelineWeek') {\n var selectedDate = resetTime(this.parent.selectedDate);\n var start = getWeekFirstDate(selectedDate, this.parent.firstDayOfWeek);\n for (var i = 0, length_1 = WEEK_LENGTH * this.parent.activeViewOptions.interval; i < length_1; i++) {\n if (this.parent.activeViewOptions.showWeekend) {\n renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n }\n start = addDays(start, 1);\n }\n }\n else if (this.parent.currentView === 'WorkWeek' || this.parent.currentView === 'TimelineWorkWeek') {\n var start = getWeekFirstDate(resetTime(this.parent.selectedDate), this.parent.firstDayOfWeek);\n for (var i = 0, length_2 = WEEK_LENGTH * this.parent.activeViewOptions.interval; i < length_2; i++) {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n start = addDays(start, 1);\n }\n }\n else {\n for (var i = 0, length_3 = this.parent.activeViewOptions.interval; i < length_3; i++) {\n renderDates.push(addDays(resetTime(this.parent.selectedDate), i));\n }\n }\n if (!workDays) {\n this.renderDates = renderDates;\n }\n return renderDates;\n };\n ViewBase.prototype.getNextPreviousDate = function (type) {\n if (this.parent.currentView === 'Day' || this.parent.currentView === 'TimelineDay') {\n var daysCount = (type === 'next') ? this.parent.activeViewOptions.interval : -(this.parent.activeViewOptions.interval);\n if (this.parent.activeViewOptions.showWeekend) {\n return addDays(this.parent.selectedDate, daysCount);\n }\n else {\n var date = addDays(this.parent.selectedDate, daysCount);\n while (!this.isWorkDay(date)) {\n date = addDays(date, daysCount);\n }\n return date;\n }\n }\n if (type === 'next') {\n return addDays(this.parent.selectedDate, WEEK_LENGTH * this.parent.activeViewOptions.interval);\n }\n else {\n return addDays(this.parent.selectedDate, -WEEK_LENGTH * this.parent.activeViewOptions.interval);\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 (startDate === endDate) {\n endDate = null;\n }\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', {\n className: className,\n innerHTML: '
    ' + this.parent.globalize.formatDate(date, { format: 'd' }) + '
    ' +\n '
    ' + this.parent.globalize.formatDate(date, { format: 'E' }) + '
    '\n });\n return wrap;\n };\n ViewBase.prototype.setResourceHeaderContent = function (tdElement, tdData, className) {\n if (className === void 0) { className = 'e-text-ellipsis'; }\n if (this.parent.activeViewOptions.resourceHeaderTemplate) {\n var cntEle = void 0;\n var data = {\n resource: tdData.resource,\n resourceData: tdData.resourceData\n };\n cntEle = this.parent.getResourceHeaderTemplate()(data);\n if (cntEle && cntEle.length) {\n append([].slice.call(cntEle), tdElement);\n }\n }\n else {\n tdElement.appendChild(createElement('div', {\n className: className, innerHTML: tdData.resourceData[tdData.resource.textField]\n }));\n }\n };\n ViewBase.prototype.renderResourceMobileLayout = function () {\n this.parent.resourceBase.renderResourceHeader();\n this.parent.resourceBase.renderResourceTree();\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 if (this.isPreventAction(e)) {\n return;\n }\n this.parent.notify(event.cellMouseDown, { event: e });\n };\n WorkCellInteraction.prototype.cellClick = function (e) {\n if (this.isPreventAction(e)) {\n return;\n }\n var queryStr = '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.' + cls.HEADER_CELLS_CLASS;\n var target = closest(e.target, queryStr);\n if (isNullOrUndefined(target)) {\n return;\n }\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n var navigateView = this.parent.getNavigateView();\n var sameView = this.parent.currentView === navigateView;\n if (isNullOrUndefined(navigateEle) || sameView ||\n isNullOrUndefined(this.parent.viewOptions[navigateView.charAt(0).toLowerCase() + navigateView.slice(1)])) {\n if (this.parent.activeViewOptions.readonly) {\n this.parent.quickPopup.quickPopupHide();\n return;\n }\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(target);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView(this.parent.getNavigateView());\n }\n }\n };\n WorkCellInteraction.prototype.cellDblClick = function (e) {\n if (this.parent.activeViewOptions.readonly || this.isPreventAction(e)) {\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 WorkCellInteraction.prototype.isPreventAction = function (e) {\n if (closest(e.target, '.' + cls.NAVIGATE_CLASS)) {\n return false;\n }\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS + ',.' + cls.RESOURCE_GROUP_CELLS_CLASS);\n if (!isNullOrUndefined(target)) {\n return true;\n }\n target = closest(e.target, '.' + cls.HEADER_CELLS_CLASS);\n if (this.parent.activeView.isTimelineView() && !isNullOrUndefined(target)) {\n return true;\n }\n return false;\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, formatUnit } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\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 VerticalEvent = /** @class */ (function (_super) {\n __extends(VerticalEvent, _super);\n /**\n * Constructor for vertical view\n */\n function VerticalEvent(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dateRender = [];\n _this.renderedEvents = [];\n _this.renderedAllDayEvents = [];\n _this.overlapEvents = [];\n _this.moreEvents = [];\n _this.overlapList = [];\n _this.allDayEvents = [];\n _this.slotCount = _this.parent.activeViewOptions.timeScale.slotCount;\n _this.interval = _this.parent.activeViewOptions.timeScale.interval;\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 VerticalEvent.prototype.renderAppointments = function () {\n var _this = this;\n var wrapperElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS + ',.' + cls.ROW_COUNT_WRAPPER_CLASS));\n wrapperElements.forEach(function (element) { return remove(element); });\n this.allDayElement = [].slice.call(this.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS));\n this.setAllDayRowHeight(0);\n if (this.parent.eventsProcessed.length === 0) {\n return;\n }\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 this.renderedEvents = [];\n this.renderedAllDayEvents = [];\n this.resources = (this.parent.activeViewOptions.group.resources.length > 0) ? this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.lastResourceLevel : [];\n this.cellHeight = this.element.querySelector('.' + cls.WORK_CELLS_CLASS).offsetHeight;\n this.dateRender[0] = this.parent.activeView.renderDates;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.resources.forEach(function (resource, index) { return _this.dateRender[index] = resource.renderDates; });\n }\n this.renderEvents('normalEvents');\n if (this.allDayEvents.length > 0) {\n this.allDayEvents = this.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.slots.push(this.parent.activeView.renderDates.map(function (date) { return +date; }));\n this.renderEvents('allDayEvents');\n }\n this.parent.notify(events.contentReady, {});\n addClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n };\n VerticalEvent.prototype.renderEvents = function (eventType) {\n removeClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n var eventCollection = (eventType === 'allDayEvents') ? this.sortByDateTime(this.allDayEvents) : undefined;\n var resources = this.getResourceList();\n var dateCount = 0;\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\n var resource = resources_1[_i];\n var renderDates = this.dateRender[resource];\n for (var day = 0, length_1 = renderDates.length; day < length_1; day++) {\n this.renderedEvents = [];\n var startDate = new Date(renderDates[day].getTime());\n var endDate = util.addDays(renderDates[day], 1);\n var filterEvents = this.filterEvents(startDate, endDate, eventCollection, this.resources[resource]);\n for (var _a = 0, filterEvents_1 = filterEvents; _a < filterEvents_1.length; _a++) {\n var event_1 = filterEvents_1[_a];\n if (this.parent.resourceBase) {\n this.setValues(event_1, resource);\n }\n if (eventType === 'allDayEvents') {\n this.renderAllDayEvents(event_1, day, resource, dateCount);\n }\n else {\n if (this.isAllDayAppointment(event_1)) {\n this.allDayEvents.push(extend({}, event_1, null, true));\n }\n else {\n this.renderNormalEvents(event_1, day, resource, dateCount);\n }\n }\n this.cssClass = null;\n this.groupOrder = null;\n }\n dateCount += 1;\n }\n }\n };\n VerticalEvent.prototype.setValues = function (event, resourceIndex) {\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.cssClass = this.resources[resourceIndex].cssClass;\n this.groupOrder = this.resources[resourceIndex].groupOrder;\n }\n else {\n this.cssClass = this.parent.resourceBase.getCssClass(event);\n }\n };\n VerticalEvent.prototype.getResourceList = function () {\n var resources = Array.apply(null, {\n length: (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) ?\n this.resources.length : 1\n }).map(function (value, index) { return index; });\n return resources;\n };\n VerticalEvent.prototype.createAppointmentElement = function (record, isAllDay, data, resource) {\n var fieldMapping = this.parent.eventFields;\n var recordSubject = (record[fieldMapping.subject] || this.parent.eventSettings.fields.subject.default);\n var appointmentWrapper = createElement('div', {\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-id': 'Appointment_' + record[fieldMapping.id],\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': recordSubject\n }\n });\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resourceIndex = this.parent.isAdaptive ? this.parent.uiStateValues.groupIndex : resource;\n appointmentWrapper.setAttribute('data-group-index', resourceIndex.toString());\n }\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 appointmentSubject = createElement('div', { className: cls.SUBJECT_CLASS, innerHTML: recordSubject });\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.getTimeString(record[fieldMapping.startTime])\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(record[fieldMapping.endTime]),\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.getTimeString(record[fieldMapping.startTime]) + ' - ' +\n this.parent.getTimeString(record[fieldMapping.endTime]);\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.LOCATION_CLASS,\n innerHTML: (record[fieldMapping.location] || this.parent.eventSettings.fields.location.default || '')\n });\n templateElement = [appointmentSubject, appointmentTime, appointmentLocation];\n }\n }\n append(templateElement, appointmentDetails);\n if (!this.parent.isAdaptive && !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', { className: cls.ICON + ' ' + iconClass });\n isAllDay ? appointmentDetails.appendChild(recurrenceIcon) : appointmentWrapper.appendChild(recurrenceIcon);\n }\n this.renderSpannedIcon(isAllDay ? appointmentDetails : appointmentWrapper, eventData);\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n this.applyResourceColor(appointmentWrapper, record, 'backgroundColor', this.groupOrder);\n this.renderResizeHandler(appointmentWrapper, eventData);\n return appointmentWrapper;\n };\n VerticalEvent.prototype.createMoreIndicator = function (allDayRow, count, currentDay) {\n var index = currentDay + count;\n var countWrapper = allDayRow[index];\n if (countWrapper.childElementCount <= 0) {\n var innerCountWrap = createElement('div', {\n className: cls.ROW_COUNT_WRAPPER_CLASS,\n id: cls.ROW_COUNT_WRAPPER_CLASS + '-' + index.toString()\n });\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n attrs: { 'tabindex': '0', 'data-index': index.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.querySelector('.' + cls.MORE_INDICATOR_CLASS);\n var moreCount = parseInt(countCell.getAttribute('data-count'), 10) + 1;\n countCell.setAttribute('data-count', moreCount.toString());\n countCell.innerHTML = countCell.innerHTML.replace(/[0-9]/g, moreCount.toString());\n }\n };\n VerticalEvent.prototype.renderSpannedIcon = function (element, spanEvent) {\n var iconElement = createElement('div', { className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON });\n if (spanEvent.isLeft) {\n var iconLeft = iconElement.cloneNode();\n addClass([iconLeft], cls.EVENT_ICON_LEFT_CLASS);\n prepend([iconLeft], element);\n }\n if (spanEvent.isRight) {\n var iconRight = iconElement.cloneNode();\n addClass([iconRight], cls.EVENT_ICON_RIGHT_CLASS);\n append([iconRight], element);\n }\n if (spanEvent.isTop) {\n var iconTop = iconElement.cloneNode();\n addClass([iconTop], cls.EVENT_ICON_UP_CLASS);\n prepend([iconTop], element);\n }\n if (spanEvent.isBottom) {\n var iconBottom = iconElement.cloneNode();\n addClass([iconBottom], cls.EVENT_ICON_DOWN_CLASS);\n append([iconBottom], element);\n }\n };\n VerticalEvent.prototype.isSpannedEvent = function (record, day, resource) {\n var currentDate = util.resetTime(this.dateRender[resource][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 VerticalEvent.prototype.renderAllDayEvents = function (eventObj, dayIndex, resource, dayCount) {\n var _this = this;\n var currentDates = this.dateRender[resource];\n if (this.parent.activeViewOptions.group.byDate) {\n this.slots[0] = [this.dateRender[resource][dayIndex].getTime()];\n currentDates = [this.dateRender[resource][dayIndex]];\n }\n var record = this.splitEvent(eventObj, currentDates)[0];\n var allDayRowCell = this.element.querySelector('.' + cls.ALLDAY_CELLS_CLASS + ':first-child');\n var cellTop = allDayRowCell.offsetTop;\n var eStart = new Date(record[this.parent.eventFields.startTime].getTime());\n var eEnd = new Date(record[this.parent.eventFields.endTime].getTime());\n var appWidth = 0;\n var appLeft = '0%';\n var topValue = 1;\n var appLevel = 0;\n var isDateRange = currentDates[0].getTime() <= eStart.getTime() &&\n util.addDays(currentDates.slice(-1)[0], 1).getTime() >= eStart.getTime();\n if (eStart <= eEnd && isDateRange) {\n var isAlreadyRendered = [];\n if (this.renderedAllDayEvents[resource]) {\n isAlreadyRendered = this.renderedAllDayEvents[resource].filter(function (event) {\n return event.Guid === eventObj.Guid;\n });\n if (this.parent.activeViewOptions.group.byDate) {\n isAlreadyRendered = isAlreadyRendered.filter(function (event) {\n return event[_this.parent.eventFields.startTime] >= currentDates[dayIndex] &&\n event[_this.parent.eventFields.endTime] <= util.addDays(new Date(+currentDates[dayIndex]), 1);\n });\n }\n }\n if (isAlreadyRendered.length === 0) {\n var allDayDifference = record.data.count;\n var allDayIndex = this.getOverlapIndex(record, dayIndex, true, resource);\n record.Index = allDayIndex;\n this.allDayLevel = (this.allDayLevel < allDayIndex) ? allDayIndex : this.allDayLevel;\n var widthAdjustment = record.data.isRight ? 0 :\n this.parent.currentView === 'Day' ? 4 : 7;\n if (allDayDifference >= 0) {\n appWidth = (allDayDifference * 100) - widthAdjustment;\n }\n if (isNullOrUndefined(this.renderedAllDayEvents[resource])) {\n this.renderedAllDayEvents[resource] = [];\n }\n this.renderedAllDayEvents[resource].push(extend({}, record, null, true));\n var allDayRow = [].slice.call(this.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).children);\n var wIndex = this.parent.activeViewOptions.group.byDate ? (this.resources.length * dayIndex) + resource : dayCount;\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS +\n ':nth-child(' + (wIndex + 1) + ')');\n var appointmentElement = this.createAppointmentElement(eventObj, true, record.data, resource);\n addClass([appointmentElement], cls.ALLDAY_APPOINTMENT_CLASS);\n var args = { data: eventObj, element: appointmentElement, cancel: false };\n this.parent.trigger(events.eventRendered, args);\n if (args.cancel) {\n return;\n }\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 if (allDayIndex > 1) {\n this.moreEvents.push(appointmentElement);\n for (var count = 0, length_2 = allDayDifference; count < length_2; count++) {\n this.createMoreIndicator(allDayRow, count, wIndex);\n }\n }\n allDayRowCell.setAttribute('data-count', this.allDayLevel.toString());\n var allDayRowHeight = ((!this.parent.uiStateValues.expand && this.allDayLevel > 2) ?\n (3 * appHeight) : ((this.allDayLevel + 1) * appHeight)) + 4;\n this.setAllDayRowHeight(allDayRowHeight);\n this.addOrRemoveClass();\n this.wireAppointmentEvents(appointmentElement, true);\n }\n }\n };\n VerticalEvent.prototype.renderNormalEvents = function (eventObj, dayIndex, resource, dayCount) {\n var record = this.isSpannedEvent(eventObj, dayIndex, resource);\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 currentDate = util.resetTime(new Date(this.dateRender[resource][dayIndex].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n if (eStart <= eEnd && !(eStart.getTime() >= schedule.endHour.getTime() || eEnd.getTime() <= schedule.startHour.getTime())) {\n var appHeight = 0;\n if (schedule.endHour.getTime() <= eEnd.getTime() && schedule.startHour.getTime() >= eStart.getTime()) {\n appHeight = this.getAppointmentHeight(this.cellHeight, schedule.startHour, schedule.endHour);\n }\n else if (schedule.endHour.getTime() <= eEnd.getTime()) {\n appHeight = this.getAppointmentHeight(this.cellHeight, eStart, schedule.endHour);\n }\n else if (schedule.startHour.getTime() >= eStart.getTime()) {\n appHeight = this.getAppointmentHeight(this.cellHeight, schedule.startHour, eEnd);\n }\n else {\n appHeight = (eEnd.getTime() - eStart.getTime()) / (60 * 1000) * (this.cellHeight * this.slotCount) / this.interval;\n }\n appHeight = (appHeight < this.cellHeight) ? this.cellHeight : appHeight;\n if (eStart.getTime() > schedule.startHour.getTime()) {\n topValue = this.getTopValue(eStart, dayIndex, resource);\n }\n var appIndex = this.getOverlapIndex(record, dayIndex, false, resource);\n record.Index = appIndex;\n this.overlapList.push(record);\n if (this.overlapList.length > 1) {\n if (isNullOrUndefined(this.overlapEvents[appIndex])) {\n this.overlapEvents[appIndex] = [];\n }\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 = {\n index: appIndex, left: appLeft, width: appWidth,\n day: dayIndex, dayIndex: dayCount, record: record, resource: resource\n };\n var tempData = this.adjustOverlapElements(argsData);\n appWidth = (tempData.appWidth);\n if (isNullOrUndefined(this.renderedEvents[resource])) {\n this.renderedEvents[resource] = [];\n }\n this.renderedEvents[resource].push(extend({}, record, null, true));\n var appointmentWrap = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_CLASS));\n var appointmentElement = this.createAppointmentElement(eventObj, false, record.isSpanned, resource);\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 var subjectElement = appointmentElement.querySelector('.' + cls.SUBJECT_CLASS);\n if (!this.parent.isAdaptive && subjectElement) {\n subjectElement.style.maxHeight = formatUnit(maxHeight);\n }\n if (this.parent.enableRtl) {\n setStyleAttribute(appointmentElement, { 'right': tempData.appLeft });\n }\n else {\n setStyleAttribute(appointmentElement, { 'left': tempData.appLeft });\n }\n var index = this.parent.activeViewOptions.group.byDate ? (this.resources.length * dayIndex) + resource : dayCount;\n var args = { data: eventObj, element: appointmentElement, cancel: false };\n this.parent.trigger(events.eventRendered, args);\n if (args.cancel) {\n return;\n }\n appointmentWrap[index].appendChild(appointmentElement);\n this.wireAppointmentEvents(appointmentElement, false);\n }\n };\n VerticalEvent.prototype.getTopValue = function (date, day, resource) {\n var startEndHours = util.getStartEndHours(util.resetTime(this.dateRender[resource][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.slotCount) / this.interval;\n };\n VerticalEvent.prototype.getAppointmentHeight = function (cellHeight, startDate, endDate) {\n return (((endDate.getTime() - startDate.getTime()) / (1000 * 60)) / (this.interval / this.slotCount)) * cellHeight;\n };\n VerticalEvent.prototype.getOverlapIndex = function (record, day, isAllDay, resource) {\n var _this = this;\n var fieldMapping = this.parent.eventFields;\n var predicate;\n var eventsList = [];\n var appIndex = -1;\n this.overlapEvents = [];\n if (isAllDay) {\n if (!isNullOrUndefined(this.renderedAllDayEvents[resource])) {\n var date_1 = util.resetTime(new Date(this.dateRender[resource][day].getTime()));\n eventsList = this.renderedAllDayEvents[resource].filter(function (app) {\n return util.resetTime(app[fieldMapping.startTime]).getTime() <= date_1.getTime() &&\n util.resetTime(app[fieldMapping.endTime]).getTime() >= date_1.getTime();\n });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n eventsList = this.filterEventsByResource(this.resources[resource], eventsList);\n }\n }\n }\n else {\n var appointmentList_1 = !isNullOrUndefined(this.renderedEvents[resource]) ? this.renderedEvents[resource] : [];\n var appointment_1 = [];\n predicate = new Predicate(fieldMapping.endTime, 'greaterthan', record[fieldMapping.startTime]).\n and(new Predicate(fieldMapping.startTime, 'lessthan', record[fieldMapping.endTime]));\n this.overlapList = new DataManager({ json: appointmentList_1 }).executeLocal(new Query().where(predicate));\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.overlapList = this.filterEventsByResource(this.resources[resource], this.overlapList);\n }\n this.overlapList.forEach(function (obj) {\n predicate = new Predicate(fieldMapping.endTime, 'greaterthanorequal', obj[fieldMapping.startTime]).\n and(new Predicate(fieldMapping.startTime, 'lessthanorequal', obj[fieldMapping.endTime]));\n var filterList = new DataManager({ json: appointmentList_1 }).executeLocal(new Query().where(predicate));\n if (_this.parent.activeViewOptions.group.resources.length > 0) {\n filterList = _this.filterEventsByResource(_this.resources[resource], filterList);\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;\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 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 return (appIndex === -1) ? 0 : appIndex;\n };\n VerticalEvent.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 dayCount = this.parent.activeViewOptions.group.byDate ? (this.resources.length * args.day) + args.resource :\n args.dayIndex;\n var element = this.element.querySelector('#e-appointment-wrapper-' + dayCount);\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 data.appWidth = appWidth;\n data.appLeft = ((parseInt(appWidth, 0) + 1) * args.index) + '%';\n }\n }\n }\n }\n }\n return data;\n };\n VerticalEvent.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 VerticalEvent.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 VerticalEvent.prototype.getEventHeight = function () {\n var eventElement = createElement('div', { className: cls.APPOINTMENT_CLASS, styles: 'visibility:hidden' });\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS + ':first-child');\n eventWrapper.appendChild(eventElement);\n var height = eventElement.offsetHeight;\n eventElement.remove();\n return height;\n };\n VerticalEvent.prototype.rowExpandCollapse = function () {\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 VerticalEvent.prototype.animationUiUpdate = function () {\n this.parent.notify(events.contentReady, {});\n };\n return VerticalEvent;\n}(EventBase));\nexport { VerticalEvent };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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.moreIndicatorHeight = 19;\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.eventHeight = this.getElementHeightFromClass(this.element, cls.APPOINTMENT_CLASS);\n if (this.parent.currentView === 'Month') {\n this.monthHeaderHeight = util.getOuterHeight(this.element.querySelector('.' + cls.DATE_HEADER_CLASS));\n }\n else {\n this.monthHeaderHeight = 0;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.renderResourceEvents();\n }\n else {\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays);\n }\n };\n MonthEvent.prototype.renderEventsHandler = function (dateRender, workDays, resData) {\n this.renderedEvents = [];\n var eventsList;\n var resIndex = 0;\n if (resData) {\n resIndex = resData.groupIndex;\n this.cssClass = resData.cssClass;\n this.groupOrder = resData.groupOrder;\n eventsList = this.parent.eventBase.filterEventsByResource(resData);\n this.workCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS + '[data-group-index=\"' + resIndex + '\"]'));\n }\n else {\n eventsList = this.parent.eventsProcessed;\n this.workCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n }\n this.sortByDateTime(eventsList);\n this.cellWidth = this.workCells.slice(-1)[0].offsetWidth;\n this.cellHeight = this.workCells.slice(-1)[0].offsetHeight;\n this.dateRender = dateRender;\n this.getSlotDates(workDays);\n for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {\n var event_1 = eventsList_1[_i];\n if (this.parent.resourceBase && !resData) {\n this.cssClass = this.parent.resourceBase.getCssClass(event_1);\n }\n var splittedEvents = this.splitEvent(event_1, this.dateRender);\n for (var _a = 0, splittedEvents_1 = splittedEvents; _a < splittedEvents_1.length; _a++) {\n var event_2 = splittedEvents_1[_a];\n this.updateIndicatorIcon(event_2);\n this.renderEvents(event_2, resIndex);\n }\n }\n this.cssClass = null;\n this.groupOrder = null;\n };\n MonthEvent.prototype.updateIndicatorIcon = function (event) {\n if (this.parent.currentView.indexOf('Timeline') === -1 || this.parent.currentView === 'TimelineMonth'\n || event[this.fields.isAllDay]) {\n return;\n }\n var cloneData = event.data;\n var startHour = util.getStartEndHours(event[this.fields.startTime], this.parent.activeView.getStartHour(), this.parent.activeView.getEndHour());\n var endHour = util.getStartEndHours(event[this.fields.endTime], this.parent.activeView.getStartHour(), this.parent.activeView.getEndHour());\n cloneData.isLeft = cloneData.isLeft || cloneData[this.fields.startTime].getTime() < startHour.startHour.getTime();\n cloneData.isRight = cloneData.isRight || cloneData[this.fields.endTime].getTime() > endHour.endHour.getTime();\n };\n MonthEvent.prototype.renderResourceEvents = function () {\n var resources = this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.lastResourceLevel;\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\n var slotData = resources_1[_i];\n this.renderEventsHandler(slotData.renderDates, slotData.workDays, slotData);\n }\n };\n MonthEvent.prototype.getSlotDates = function (workDays) {\n this.slots = [];\n var dates = this.dateRender.map(function (date) { return +date; });\n var noOfDays = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : workDays.length;\n while (dates.length > 0) {\n this.slots.push(dates.splice(0, noOfDays));\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 = util.getOuterHeight(el);\n remove(el);\n return height;\n };\n MonthEvent.prototype.createAppointmentElement = function (record, resIndex) {\n var eventSubject = (record[this.fields.subject] || this.parent.eventSettings.fields.subject.default);\n var appointmentWrapper = createElement('div', {\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-id': 'Appointment_' + record[this.fields.id],\n 'data-guid': record.Guid, 'role': 'button', 'tabindex': '0',\n 'aria-readonly': 'false', 'aria-selected': 'false', 'aria-grabbed': 'true',\n 'aria-label': eventSubject\n }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n appointmentWrapper.setAttribute('data-group-index', resIndex.toString());\n }\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 eventLocation = (record[this.fields.location] || this.parent.eventSettings.fields.location.default || '');\n var appointmentSubject = createElement('div', {\n className: cls.SUBJECT_CLASS,\n innerHTML: (eventSubject + (eventLocation ? '; ' + eventLocation : ''))\n });\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventData[this.fields.startTime])\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventData[this.fields.endTime])\n });\n if (this.parent.currentView === 'Month') {\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 else {\n var innerElement = void 0;\n if (record[this.fields.isAllDay]) {\n var allDayString = createElement('div', {\n className: cls.APPOINTMENT_TIME, innerHTML: this.parent.localeObj.getConstant('allDay')\n });\n innerElement = [appointmentSubject, allDayString];\n }\n else {\n var timeString = this.parent.getTimeString(eventData[this.fields.startTime])\n + ' - ' + this.parent.getTimeString(eventData[this.fields.endTime]);\n var appTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''), innerHTML: timeString,\n });\n var appLocation = createElement('div', { className: cls.LOCATION_CLASS, innerHTML: eventLocation });\n innerElement = [appointmentSubject, appTime, appLocation];\n }\n var wrap = createElement('div', { className: 'e-inner-wrap' });\n append(innerElement, wrap);\n templateElement = [wrap];\n }\n }\n append([].slice.call(templateElement), appointmentDetails);\n this.appendEventIcons(record, appointmentDetails);\n this.renderResizeHandler(appointmentWrapper, record.data);\n return appointmentWrapper;\n };\n MonthEvent.prototype.appendEventIcons = function (record, appointmentDetails) {\n var eventData = record.data;\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 + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : '')\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 };\n MonthEvent.prototype.renderEvents = function (event, resIndex) {\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(startTime);\n event.Index = overlapCount;\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 = (diffInDays * this.cellWidth) - 3;\n var cellTd = this.workCells[day];\n var appTop = (overlapCount * (appHeight + EVENT_GAP));\n if (this.cellHeight > this.monthHeaderHeight + ((overlapCount + 1) * (appHeight + EVENT_GAP)) + this.moreIndicatorHeight) {\n var appointmentElement = this.createAppointmentElement(event, resIndex);\n this.applyResourceColor(appointmentElement, event, 'backgroundColor', this.groupOrder);\n this.wireAppointmentEvents(appointmentElement);\n setStyleAttribute(appointmentElement, { 'width': appWidth + 'px', 'top': appTop + 'px' });\n this.renderEventElement(event, appointmentElement, cellTd);\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 startDate = new Date(this.dateRender[day + i].getTime());\n var endDate = util.addDays(this.dateRender[day + i], 1);\n var groupIndex = cellTd_1.getAttribute('data-group-index');\n var filterEvents = this.getFilteredEvents(startDate, endDate, groupIndex);\n var appArea = this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight;\n var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));\n var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);\n var moreIndicatorElement = this.getMoreIndicatorElement(count, startDate, endDate);\n if (!isNullOrUndefined(groupIndex)) {\n moreIndicatorElement.setAttribute('data-group-index', groupIndex);\n }\n moreIndicatorElement.style.top = appArea + 'px';\n moreIndicatorElement.style.width = cellTd_1.offsetWidth - 2 + 'px';\n this.renderElement(cellTd_1, moreIndicatorElement);\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n }\n }\n }\n };\n MonthEvent.prototype.getFilteredEvents = function (startDate, endDate, groupIndex) {\n var filteredEvents;\n if (isNullOrUndefined(groupIndex)) {\n filteredEvents = this.filterEvents(startDate, endDate);\n }\n else {\n var data = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)];\n filteredEvents = this.filterEvents(startDate, endDate, undefined, data);\n }\n return filteredEvents;\n };\n MonthEvent.prototype.getOverlapEvents = function (date, appointments) {\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 return appointmentsList;\n };\n MonthEvent.prototype.getIndex = function (date) {\n var appIndex = -1;\n var appointments = this.renderedEvents;\n if (appointments.length > 0) {\n var appointmentsList = this.getOverlapEvents(date, appointments);\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 if (!isNullOrUndefined(startDate) && this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: startDate }, true);\n this.parent.changeView(this.parent.getNavigateView());\n }\n else {\n var endDate = new Date(parseInt(target.getAttribute('data-end-date'), 10));\n var groupIndex = target.getAttribute('data-group-index');\n var filteredEvents = this.getFilteredEvents(startDate, endDate, groupIndex);\n var moreEventArgs = { date: startDate, event: filteredEvents, element: event.target };\n this.parent.quickPopup.moreEventClick(moreEventArgs, endDate, groupIndex);\n }\n };\n MonthEvent.prototype.renderEventElement = function (event, appointmentElement, cellTd) {\n var args = { data: event, element: appointmentElement, cancel: false };\n this.parent.trigger(events.eventRendered, args);\n if (args.cancel) {\n this.renderedEvents.pop();\n return;\n }\n this.renderElement(cellTd, appointmentElement);\n };\n MonthEvent.prototype.renderElement = function (cellTd, element) {\n if (cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {\n cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(element);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(element);\n cellTd.appendChild(wrapper);\n }\n };\n MonthEvent.prototype.getMoreIndicatorElement = function (count, startDate, endDate) {\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': startDate.getTime().toString(),\n 'data-end-date': endDate.getTime().toString()\n }\n });\n return moreIndicatorElement;\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 { compile, isNullOrUndefined, extend, EventHandler, formatUnit, Browser } 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 { VerticalEvent } from '../event-renderer/vertical-view';\nimport { MonthEvent } from '../event-renderer/month';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\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.viewClass = 'e-day-view';\n _this.isInverseTableSelect = true;\n _this.baseCssClass = 'e-vertical-view';\n _this.dateHeaderTemplate = '
    ${getDayName(date)}
    ' +\n '
    ${getDate(date)}
    ';\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 if (this.parent.activeViewOptions.timeScale.enable) {\n var appointment = new VerticalEvent(this.parent);\n appointment.renderAppointments();\n }\n else {\n var appointment = new MonthEvent(this.parent);\n appointment.renderAppointments();\n }\n };\n VerticalView.prototype.onContentScroll = function (e) {\n var target = e.target;\n this.scrollLeftPanel(target);\n this.scrollTopPanel(target);\n if (!this.parent.isAdaptive) {\n this.parent.uiStateValues.top = target.scrollTop;\n }\n this.parent.uiStateValues.left = target.scrollLeft;\n if (!isNullOrUndefined(this.parent.quickPopup)) {\n this.parent.quickPopup.quickPopupHide();\n }\n };\n VerticalView.prototype.onApaptiveMove = function (e) {\n if (this.parent.uiStateValues.action) {\n e.preventDefault();\n }\n };\n VerticalView.prototype.onApaptiveScroll = function (e) {\n this.parent.uiStateValues.top = e.target.scrollTop;\n };\n VerticalView.prototype.scrollLeftPanel = function (target) {\n var leftPanel = this.getLeftPanelElement();\n if (!isNullOrUndefined(leftPanel)) {\n leftPanel.scrollTop = target.scrollTop;\n }\n };\n VerticalView.prototype.scrollUiUpdate = function (args) {\n var headerBarHeight = this.getHeaderBarHeight();\n var timecells = this.getLeftPanelElement();\n var content = this.getScrollableElement();\n var header = this.getDatesHeaderElement();\n var scrollerHeight = this.parent.element.offsetHeight - headerBarHeight - header.offsetHeight;\n this.setContentHeight(content, timecells, scrollerHeight);\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 if (this.parent.uiStateValues.isInitial || this.isTimelineView()) {\n this.scrollToWorkHour();\n this.parent.uiStateValues.isInitial = this.isTimelineView();\n }\n else {\n content.scrollTop = this.parent.uiStateValues.top;\n }\n if (this.parent.activeViewOptions.timeScale.enable) {\n this.highlightCurrentTime();\n }\n };\n VerticalView.prototype.setContentHeight = function (element, leftPanelElement, height) {\n if (this.parent.isAdaptive && !this.isTimelineView()) {\n element.style.height = formatUnit(height);\n }\n else {\n if (!isNullOrUndefined(leftPanelElement)) {\n leftPanelElement.style.height = formatUnit(height - this.getScrollXIndent(element));\n }\n element.style.height = formatUnit(height);\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.generateColumnLevels = function () {\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n var columnLevels = [];\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n columnLevels = this.parent.resourceBase.generateResourceLevels(level);\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resourceLevel = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n var resStartHour = resourceLevel.resourceData[resourceLevel.resource.startHourField];\n var resEndHour = resourceLevel.resourceData[resourceLevel.resource.endHourField];\n var dateSlots = this.getDateSlots(resourceLevel.renderDates, resourceLevel.workDays, resStartHour, resEndHour);\n columnLevels = [dateSlots];\n }\n }\n else {\n columnLevels.push(level);\n }\n this.colLevels = columnLevels;\n return columnLevels;\n };\n VerticalView.prototype.getDateSlots = function (renderDates, workDays, workStartHour, workEndHour) {\n if (workStartHour === void 0) { workStartHour = this.parent.workHours.start; }\n if (workEndHour === void 0) { workEndHour = this.parent.workHours.end; }\n var dateCol = [];\n var start = this.parent.globalize.parseDate(workStartHour, { skeleton: 'Hm' });\n var end = this.parent.globalize.parseDate(workEndHour, { skeleton: 'Hm' });\n for (var _i = 0, renderDates_1 = renderDates; _i < renderDates_1.length; _i++) {\n var col = renderDates_1[_i];\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentDate(col)) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n dateCol.push({\n date: col, type: 'dateHeader', className: classList, colSpan: 1,\n workDays: workDays, startHour: new Date(+start), endHour: new Date(+end)\n });\n }\n return dateCol;\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.activeViewOptions.headerRows.length > 0 &&\n this.parent.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour') {\n return;\n }\n if (this.parent.showTimeIndicator && this.isWorkHourRange(new Date())) {\n var currentDateIndex = this.getCurrentTimeIndicatorIndex();\n if (currentDateIndex.length > 0) {\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.getCurrentTimeIndicatorIndex = function () {\n var currentDateIndex = [];\n if (!isNullOrUndefined(this.parent.resourceBase) && (this.parent.activeViewOptions.group.resources.length > 0) &&\n !this.parent.uiStateValues.isGroupAdaptive) {\n var count = 0;\n for (var _i = 0, _a = this.parent.resourceBase.lastResourceLevel; _i < _a.length; _i++) {\n var resource = _a[_i];\n var index = this.parent.getIndexOfDate(resource.renderDates, util.resetTime(new Date()));\n if (index >= 0) {\n var resIndex = this.parent.activeViewOptions.group.byDate ?\n (this.parent.resourceBase.lastResourceLevel.length * index) + count : count + index;\n currentDateIndex.push(resIndex);\n }\n count += this.parent.activeViewOptions.group.byDate ? 1 : resource.renderDates.length;\n }\n }\n else {\n var renderDates = (this.parent.uiStateValues.isGroupAdaptive) ?\n this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex].renderDates : this.renderDates;\n var index = this.parent.getIndexOfDate(renderDates, util.resetTime(new Date()));\n if (index >= 0) {\n currentDateIndex.push(index);\n }\n }\n return currentDateIndex;\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 queryString = '.' + cls.PREVIOUS_TIMELINE_CLASS + ',.' + cls.CURRENT_TIMELINE_CLASS + ',.' + cls.CURRENT_TIME_CLASS;\n var timeIndicator = [].slice.call(this.element.querySelectorAll(queryString));\n timeIndicator.forEach(function (indicator) { return remove(indicator); });\n };\n VerticalView.prototype.changeCurrentTimePosition = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeCurrentTimeIndicatorElements();\n var currentDateIndex = this.getCurrentTimeIndicatorIndex();\n var firstRow = this.parent.getContentTable().rows[0];\n var top = this.getTopFromDateTime(new Date());\n var topInPx = formatUnit(top);\n var rowIndex = Math.floor(top / firstRow.cells[0].offsetHeight);\n if (isNullOrUndefined(rowIndex)) {\n return;\n }\n var curTimeWrap = this.element.querySelectorAll('.' + cls.TIMELINE_WRAPPER_CLASS);\n for (var i = 0, length_1 = currentDateIndex[0]; i < length_1; i++) {\n curTimeWrap[i].appendChild(createElement('div', { className: cls.PREVIOUS_TIMELINE_CLASS, styles: 'top:' + topInPx }));\n }\n for (var _i = 0, currentDateIndex_1 = currentDateIndex; _i < currentDateIndex_1.length; _i++) {\n var day = currentDateIndex_1[_i];\n curTimeWrap[day].appendChild(createElement('div', { className: cls.CURRENT_TIMELINE_CLASS, styles: 'top:' + topInPx }));\n }\n var currentTimeEle = createElement('div', {\n innerHTML: this.parent.getTimeString(new Date()),\n className: cls.CURRENT_TIME_CLASS,\n styles: 'top:' + topInPx\n });\n var timeCellsWrap = this.getLeftPanelElement();\n removeClass(timeCellsWrap.querySelectorAll('.' + cls.HIDE_CHILDS_CLASS), cls.HIDE_CHILDS_CLASS);\n addClass([timeCellsWrap.querySelectorAll('tr')[rowIndex].lastChild], cls.HIDE_CHILDS_CLASS);\n prepend([currentTimeEle], timeCellsWrap);\n currentTimeEle.style.top = formatUnit(currentTimeEle.offsetTop - (currentTimeEle.offsetHeight / 2));\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.parent.activeViewOptions.timeScale.slotCount) /\n this.parent.activeViewOptions.timeScale.interval;\n };\n VerticalView.prototype.getWorkCellHeight = function () {\n return this.element.querySelector('.e-work-cells').offsetHeight;\n };\n VerticalView.prototype.getTdContent = function (date, type, groupIndex) {\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(this.dateHeaderTemplate, this.customHelper)({ date: date });\n }\n break;\n case 'majorSlot':\n if (this.parent.activeViewOptions.timeScale.majorSlotTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getMajorSlotTemplate()(args);\n }\n else {\n cntEle = compile(MAJOR_SLOT_TEMPLATE, this.customHelper)({ date: date });\n }\n break;\n case 'minorSlot':\n if (this.parent.activeViewOptions.timeScale.minorSlotTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getMinorSlotTemplate()(args);\n }\n else {\n cntEle = compile(MINOR_SLOT_TEMPLATE, this.customHelper)({ date: date });\n }\n break;\n case 'alldayCells':\n if (this.parent.cellTemplate) {\n var args = { date: date, type: type, groupIndex: groupIndex };\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 = [this.baseCssClass, this.viewClass];\n clsList.push(type);\n if (this.parent.activeViewOptions.group.byDate) {\n clsList.push('e-by-date');\n }\n if (!this.parent.activeViewOptions.timeScale.enable) {\n addClass([this.element], [cls.TIMESCALE_DISABLE, this.viewClass]);\n }\n this.renderPanel(type);\n addClass([this.element], clsList);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.colLevels = this.generateColumnLevels();\n this.renderHeader();\n this.renderContent();\n if (this.parent.uiStateValues.isGroupAdaptive && !this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n };\n VerticalView.prototype.renderHeader = function () {\n var tr = createElement('tr');\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n if (this.parent.activeViewOptions.timeScale.enable) {\n var indentTd = createElement('td', { className: cls.LEFT_INDENT_CLASS });\n indentTd.appendChild(this.renderLeftIndent());\n tr.appendChild(indentTd);\n }\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', (this.parent.activeViewOptions.timeScale.enable ? '2' : '1'));\n var scrollContainer = createElement('div', { className: cls.SCROLL_CONTAINER_CLASS });\n if (this.parent.activeViewOptions.timeScale.enable) {\n scrollContainer.appendChild(this.renderTimeCells());\n }\n scrollContainer.appendChild(this.renderContentArea());\n workTd.appendChild(scrollContainer);\n EventHandler.add(scrollContainer, 'scroll', this.onApaptiveScroll, this);\n EventHandler.add(scrollContainer, Browser.touchMoveEvent, this.onApaptiveMove, this);\n tr.appendChild(workTd);\n }\n else {\n workTd.appendChild(this.renderContentArea());\n if (this.parent.activeViewOptions.timeScale.enable) {\n var timesTd = createElement('td');\n timesTd.appendChild(this.renderTimeCells());\n tr.appendChild(timesTd);\n }\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 data_1 = { className: [this.colLevels[i][0].className[0]], type: 'emptyCells' };\n if (this.parent.activeViewOptions.showWeekNumber && data_1.className.indexOf(cls.HEADER_CELLS_CLASS) !== -1) {\n data_1.className.push(cls.WEEK_NUMBER_CLASS);\n var weekNo = util.getWeekNumber(this.renderDates.slice(-1)[0]);\n data_1.text = '' + weekNo + '';\n }\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 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 this.createColGroup(tbl, lastLevel);\n for (var i = 0; i < rowCount; i++) {\n var ntr = trEle.cloneNode();\n addClass([ntr], cls.HEADER_ROW_CLASS);\n var level = this.colLevels[i];\n for (var j = 0; j < level.length; j++) {\n ntr.appendChild(this.createTd(level[j]));\n }\n tbl.querySelector('tbody').appendChild(ntr);\n }\n this.createAllDayRow(tbl, lastLevel);\n wrap.appendChild(tbl);\n return container;\n };\n VerticalView.prototype.createAllDayRow = function (table, tdData) {\n var ntr = createElement('tr');\n addClass([ntr], cls.ALLDAY_ROW_CLASS);\n for (var j = 0; j < tdData.length; j++) {\n var td = extend({}, tdData[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 if (!isNullOrUndefined(td.groupIndex)) {\n ntd.setAttribute('data-group-index', '' + td.groupIndex);\n }\n this.wireCellEvents(ntd);\n ntr.appendChild(ntd);\n }\n table.querySelector('tbody').appendChild(ntr);\n var thead = createElement('thead');\n thead.appendChild(this.createEventWrapper('allDay'));\n prepend([thead], table);\n };\n VerticalView.prototype.createTd = function (td) {\n var tdEle = createElement('td');\n this.addAttributes(td, tdEle);\n if (td.date && td.type) {\n var ele = this.getTdContent(td.date, td.type, td.groupIndex);\n if (ele && ele.length) {\n append([].slice.call(ele), tdEle);\n }\n }\n if (td.type === 'resourceHeader') {\n this.setResourceHeaderContent(tdEle, td);\n }\n if (td.type === 'dateHeader' && td.className.indexOf(cls.HEADER_CELLS_CLASS) >= 0) {\n tdEle.setAttribute('data-date', td.date.getTime().toString());\n if (!isNullOrUndefined(td.groupIndex)) {\n tdEle.setAttribute('data-group-index', '' + td.groupIndex);\n }\n EventHandler.add(tdEle, 'click', this.workCellAction.cellClick, this.workCellAction);\n EventHandler.add(tdEle, 'dblclick', this.workCellAction.cellDblClick, this.workCellAction);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date, groupIndex: td.groupIndex };\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.workCellAction);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this.workCellAction);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this.workCellAction);\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 wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n this.createColGroup(tbl, this.colLevels.slice(-1)[0]);\n this.renderContentTable(tbl);\n wrap.appendChild(tbl);\n this.wireCellEvents(tbl.querySelector('tbody'));\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n EventHandler.add(wrap, Browser.touchMoveEvent, this.onApaptiveMove, this);\n return wrap;\n };\n VerticalView.prototype.renderContentTable = function (table) {\n var _this = this;\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var tbody = table.querySelector('tbody');\n var handler = function (r) {\n var ntr = tr.cloneNode();\n for (var _i = 0, _a = _this.colLevels[_this.colLevels.length - 1]; _i < _a.length; _i++) {\n var tdData = _a[_i];\n var ntd = _this.createContentTd(tdData, r, td);\n ntr.appendChild(ntd);\n }\n tbody.appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n this.renderContentTableHeader(table);\n };\n VerticalView.prototype.createContentTd = function (tdData, r, td) {\n var ntd = td.cloneNode();\n if (tdData.colSpan) {\n ntd.setAttribute('colspan', tdData.colSpan.toString());\n }\n var clsName = this.getContentTdClass(r);\n var cellDate = util.resetTime(new Date('' + tdData.date));\n util.setTime(cellDate, util.getDateInMs(r.date));\n var type = 'workCells';\n if (tdData.className.indexOf(cls.RESOURCE_PARENT_CLASS) !== -1) {\n clsName.push(cls.RESOURCE_GROUP_CELLS_CLASS);\n type = 'resourceGroupCells';\n }\n if (this.parent.workHours.highlight && ((this.parent.activeViewOptions.timeScale.enable &&\n this.isWorkHour(cellDate, tdData.startHour, tdData.endHour, tdData.workDays)) ||\n (!this.parent.activeViewOptions.timeScale.enable && this.isWorkDay(cellDate, tdData.workDays)))) {\n clsName.push(cls.WORK_HOURS_CLASS);\n }\n addClass([ntd], clsName);\n if (this.parent.cellTemplate) {\n var args_1 = { date: cellDate, type: type, groupIndex: tdData.groupIndex };\n append([].slice.call(this.parent.getCellTemplate()(args_1)), ntd);\n }\n ntd.setAttribute('data-date', cellDate.getTime().toString());\n if (!isNullOrUndefined(tdData.groupIndex) || this.parent.uiStateValues.isGroupAdaptive) {\n var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :\n tdData.groupIndex;\n ntd.setAttribute('data-group-index', '' + groupIndex);\n }\n var args = { elementType: type, element: ntd, date: cellDate, groupIndex: tdData.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return ntd;\n };\n VerticalView.prototype.getContentTdClass = function (r) {\n return r.last ? [cls.WORK_CELLS_CLASS] : [cls.WORK_CELLS_CLASS, cls.ALTERNATE_CELLS_CLASS];\n };\n VerticalView.prototype.renderContentTableHeader = function (table) {\n var thead = createElement('thead');\n thead.appendChild(this.createEventWrapper());\n if (this.parent.activeViewOptions.timeScale.enable) {\n thead.appendChild(this.createEventWrapper('timeIndicator'));\n }\n prepend([thead], table);\n };\n VerticalView.prototype.createEventWrapper = function (type) {\n if (type === void 0) { type = ''; }\n var tr = createElement('tr');\n this.colLevels.slice(-1)[0].forEach(function (col, day) {\n var appointmentWrap = createElement('td', {\n className: (type === 'allDay') ? cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : (type === 'timeIndicator') ?\n cls.TIMELINE_WRAPPER_CLASS : cls.DAY_WRAPPER_CLASS, attrs: { 'data-date': col.date.getTime().toString() }\n });\n if (!isNullOrUndefined(col.groupIndex)) {\n appointmentWrap.setAttribute('data-group-index', col.groupIndex.toString());\n }\n if (type === '') {\n var innerWrapper = createElement('div', {\n id: cls.APPOINTMENT_WRAPPER_CLASS + '-' + day.toString(),\n className: cls.APPOINTMENT_WRAPPER_CLASS\n });\n appointmentWrap.appendChild(innerWrapper);\n }\n tr.appendChild(appointmentWrap);\n });\n return tr;\n };\n VerticalView.prototype.getScrollableElement = function () {\n if (this.parent.isAdaptive && this.parent.currentView.indexOf('Timeline') === -1) {\n return this.element.querySelector('.' + cls.SCROLL_CONTAINER_CLASS);\n }\n else {\n return this.getContentAreaElement();\n }\n };\n VerticalView.prototype.getLeftPanelElement = 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.parent.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.parent.activeViewOptions.timeScale.slotCount;\n var end = new Date(start.getTime());\n end.setMilliseconds(end.getMilliseconds() + msInterval);\n return end;\n };\n VerticalView.prototype.getTimeSlotRows = function (handler) {\n var rows = [];\n var startHour = this.getStartHour();\n var endHour = this.getEndHour();\n var msMajorInterval = this.parent.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.parent.activeViewOptions.timeScale.slotCount;\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 if (!this.parent.activeViewOptions.timeScale.enable) {\n length = 1;\n }\n var dt = new Date(msStartHour);\n var start = this.parent.globalize.parseDate(this.parent.workHours.start, { skeleton: 'Hm' });\n var end = this.parent.globalize.parseDate(this.parent.workHours.end, { skeleton: 'Hm' });\n for (var i = 0; i < length; i++) {\n var majorTickDivider = i % (msMajorInterval / msInterval);\n var row = {\n date: new Date('' + dt),\n startHour: start,\n endHour: end,\n first: (majorTickDivider === 0),\n middle: (majorTickDivider < this.parent.activeViewOptions.timeScale.slotCount - 1),\n last: (majorTickDivider === this.parent.activeViewOptions.timeScale.slotCount - 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 if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\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';\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 /**\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';\n/**\n * week view\n */\nvar Week = /** @class */ (function (_super) {\n __extends(Week, _super);\n /**\n * Constructor for week view\n */\n function Week(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-week-view';\n return _this;\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';\n/**\n * work week view\n */\nvar WorkWeek = /** @class */ (function (_super) {\n __extends(WorkWeek, _super);\n /**\n * Constructor for work week view\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 /**\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 { 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.monthDates = {};\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.scrollTopPanel(e.target);\n this.scrollLeftPanel(e.target);\n };\n Month.prototype.scrollLeftPanel = function (target) {\n var leftPanel = this.getLeftPanelElement();\n if (leftPanel) {\n leftPanel.scrollTop = target.scrollTop;\n }\n };\n Month.prototype.getLeftPanelElement = function () {\n return this.element.querySelector('.' + cls.WEEK_NUMBER_WRAPPER_CLASS);\n };\n Month.prototype.onScrollUIUpdate = function (args) {\n var headerHeight = this.getHeaderBarHeight();\n var header = this.getDatesHeaderElement();\n var content = this.getContentAreaElement();\n var height = this.parent.element.offsetHeight - headerHeight - header.offsetHeight;\n var leftPanel = this.getLeftPanelElement();\n this.setContentHeight(content, leftPanel, height);\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 };\n Month.prototype.setContentHeight = function (content, leftPanelElement, height) {\n content.style.height = 'auto';\n if (this.parent.currentView === 'Month') {\n content.style.height = formatUnit(height);\n }\n if (leftPanelElement) {\n if (this.parent.currentView === 'MonthAgenda') {\n height = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetHeight;\n }\n leftPanelElement.style.height = 'auto';\n leftPanelElement.style.height = formatUnit(height - this.getScrollXIndent(content));\n }\n };\n Month.prototype.generateColumnLevels = function () {\n var colLevels = [];\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n colLevels = this.parent.resourceBase.generateResourceLevels(level);\n if (this.parent.currentView === 'MonthAgenda') {\n colLevels = [level];\n }\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resourceLevel = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n colLevels = [this.getDateSlots(resourceLevel.renderDates, resourceLevel.workDays)];\n }\n }\n else {\n colLevels.push(level);\n }\n this.colLevels = colLevels;\n return colLevels;\n };\n Month.prototype.getDateSlots = function (renderDates, workDays) {\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : workDays.length;\n var dateSlots = [];\n for (var col = 0; col < count; col++) {\n var classList = [cls.HEADER_CELLS_CLASS];\n var currentDateIndex = renderDates.slice(0, count).map(function (date) { return date.getDay(); });\n if (this.isCurrentMonth(this.parent.selectedDate) && currentDateIndex.indexOf(new Date().getDay()) === col) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n dateSlots.push({ date: renderDates[col], type: 'monthDay', className: classList, colSpan: 1, workDays: workDays });\n }\n return dateSlots;\n };\n Month.prototype.getDayNameFormat = function () {\n if (this.parent.isAdaptive || this.parent.activeViewOptions.group.resources.length > 0) {\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 if (this.parent.activeViewOptions.group.byDate) {\n clsList.push('e-by-date');\n }\n addClass([this.element], clsList);\n this.renderPanel(type);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.colLevels = this.generateColumnLevels();\n this.renderHeader();\n this.renderContent();\n var target = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element;\n if (this.parent.uiStateValues.isGroupAdaptive && !target.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n };\n Month.prototype.wireCellEvents = function (element) {\n EventHandler.add(element, 'mousedown', this.workCellAction.cellMouseDown, this.workCellAction);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this.workCellAction);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this.workCellAction);\n };\n Month.prototype.renderHeader = function () {\n var tr = createElement('tr');\n this.renderLeftIndent(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.renderLeftIndent = function (tr) {\n if (this.parent.activeViewOptions.showWeekNumber) {\n tr.appendChild(createElement('td', { className: 'e-left-indent' }));\n }\n };\n Month.prototype.renderContent = function () {\n var tr = createElement('tr');\n if (this.parent.activeViewOptions.showWeekNumber) {\n tr.appendChild(this.renderWeekNumberContent());\n }\n var workTd = createElement('td');\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var contentArea = this.renderContentArea();\n if (this.parent.currentView === 'Month') {\n wrap.appendChild(contentArea);\n }\n else {\n var monthAgendaWrapper = createElement('div', { className: cls.TABLE_CONTAINER_CLASS });\n monthAgendaWrapper.appendChild(contentArea);\n wrap.appendChild(monthAgendaWrapper);\n }\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n workTd.appendChild(wrap);\n tr.appendChild(workTd);\n this.element.querySelector('tbody').appendChild(tr);\n this.renderAppointmentContainer();\n };\n Month.prototype.renderWeekNumberContent = function () {\n var dateCol = this.renderDates.map(function (date) { return new Date(+date); });\n var td = createElement('td');\n var contentWrapper = createElement('div', { className: cls.WEEK_NUMBER_WRAPPER_CLASS });\n td.appendChild(contentWrapper);\n var contentWrapTable = this.createTableLayout();\n contentWrapper.appendChild(contentWrapTable);\n var noOfDays = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH :\n this.parent.activeViewOptions.workDays.length;\n for (var i = 0, length_1 = (this.renderDates.length / noOfDays); i < length_1; i++) {\n var dates = dateCol.splice(0, noOfDays);\n var weekNumber = util.getWeekNumber(dates.slice(-1)[0]).toString();\n contentWrapTable.querySelector('tbody').appendChild(this.createWeekNumberElement(weekNumber));\n }\n return td;\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 this.createColGroup(table, this.colLevels[this.colLevels.length - 1]);\n var trEle = createElement('tr');\n for (var i = 0; i < this.colLevels.length; i++) {\n var level = this.colLevels[i];\n var ntr = trEle.cloneNode();\n for (var j = 0; j < level.length; j++) {\n var td = level[j];\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('td');\n this.addAttributes(td, tdEle);\n if (td.type === 'monthDay') {\n var ele = createElement('span', { innerHTML: this.parent.getDayNames(this.dayNameFormat)[td.date.getDay()] });\n tdEle.appendChild(ele);\n }\n if (td.type === 'resourceHeader') {\n this.setResourceHeaderContent(tdEle, td);\n }\n if (td.type === 'dateHeader') {\n addClass([tdEle], cls.DATE_HEADER_CLASS);\n tdEle.setAttribute('data-date', td.date.getTime().toString());\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n var cellArgs = { date: td.date, type: td.type };\n var ele = this.parent.getDateHeaderTemplate()(cellArgs);\n if (ele && ele.length) {\n append([].slice.call(ele), tdEle);\n }\n }\n else {\n var ele = createElement('span', { className: cls.NAVIGATE_CLASS });\n var title = this.parent.globalize.formatDate(td.date, { skeleton: 'full' });\n ele.setAttribute('title', title);\n ele.innerHTML = (td.date.getDate() === 1 && !this.isCurrentDate(td.date) && !this.parent.isAdaptive) ?\n this.parent.globalize.formatDate(td.date, { format: 'MMM d' }) :\n this.parent.globalize.formatDate(td.date, { skeleton: 'd' });\n tdEle.appendChild(ele);\n }\n this.wireCellEvents(tdEle);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date, groupIndex: td.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return tdEle;\n };\n Month.prototype.getContentSlots = function () {\n var slotDatas = [];\n var prepareSlots = function (rowIndex, renderDate, resData, classList) {\n var data = {\n date: new Date(+renderDate), groupIndex: resData.groupIndex, workDays: resData.workDays,\n type: 'monthCells', className: classList || [cls.WORK_CELLS_CLASS]\n };\n if (!slotDatas[rowIndex]) {\n slotDatas[rowIndex] = [];\n }\n slotDatas[rowIndex].push(data);\n };\n var includeResource = this.parent.currentView !== 'MonthAgenda' &&\n this.parent.activeViewOptions.group.resources.length > 0;\n if (includeResource && !this.parent.uiStateValues.isGroupAdaptive && !this.parent.activeViewOptions.group.byDate) {\n for (var _i = 0, _a = this.colLevels[this.colLevels.length - 2]; _i < _a.length; _i++) {\n var res = _a[_i];\n var dates = res.renderDates.map(function (date) { return new Date(+date); });\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : res.workDays.length;\n for (var i = 0; i < (res.renderDates.length / count); i++) {\n var colDates = dates.splice(0, count);\n for (var _b = 0, colDates_1 = colDates; _b < colDates_1.length; _b++) {\n var colDate = colDates_1[_b];\n prepareSlots(i, colDate, res);\n }\n }\n }\n }\n else {\n var dates = this.renderDates.map(function (date) { return new Date(+date); });\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH :\n this.parent.activeViewOptions.workDays.length;\n for (var i = 0; i < (this.renderDates.length / count); i++) {\n var colDates = dates.splice(0, count);\n for (var _c = 0, colDates_2 = colDates; _c < colDates_2.length; _c++) {\n var colDate = colDates_2[_c];\n if (includeResource) {\n var lastRow = this.colLevels[(this.colLevels.length - 1)];\n var resourcesTd = lastRow.slice(0, lastRow.length / count);\n for (var resIndex = 0; resIndex < resourcesTd.length; resIndex++) {\n var clsList = void 0;\n if (resIndex !== 0) {\n clsList = [cls.WORK_CELLS_CLASS, cls.DISABLE_DATE];\n }\n prepareSlots(i, colDate, resourcesTd[resIndex], clsList);\n }\n }\n else {\n prepareSlots(i, colDate, this.colLevels[this.colLevels.length - 1][0]);\n }\n }\n }\n }\n return slotDatas;\n };\n Month.prototype.updateClassList = function (data) {\n if (this.isOtherMonth(data.date)) {\n data.className.push(cls.OTHERMONTH_CLASS);\n }\n if (this.parent.currentView === 'MonthAgenda' && this.parent.isSelectedDate(data.date)) {\n data.className.push(cls.SELECTED_CELL_CLASS);\n }\n };\n Month.prototype.isOtherMonth = function (date) {\n return date.getTime() < this.monthDates.start.getTime() || date.getTime() > this.monthDates.end.getTime();\n };\n Month.prototype.renderContentArea = function () {\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n if (this.parent.currentView === 'TimelineMonth') {\n this.createColGroup(tbl, this.colLevels[this.colLevels.length - 1]);\n }\n var monthDate = new Date(this.parent.selectedDate.getTime());\n this.monthDates = {\n start: util.firstDateOfMonth(monthDate),\n end: util.lastDateOfMonth(util.addMonths(monthDate, this.parent.activeViewOptions.interval - 1))\n };\n this.renderContentTable(tbl);\n this.wireCellEvents(tbl.querySelector('tbody'));\n return tbl;\n };\n Month.prototype.renderContentTable = function (table) {\n var tbody = table.querySelector('tbody');\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var slotDatas = this.getContentSlots();\n for (var row = 0; row < slotDatas.length; row++) {\n var ntr = tr.cloneNode();\n for (var col = 0; col < slotDatas[row].length; col++) {\n var ntd = this.createContentTd(slotDatas[row][col], td);\n ntr.appendChild(ntd);\n }\n tbody.appendChild(ntr);\n }\n };\n Month.prototype.createContentTd = function (data, td) {\n var ntd = td.cloneNode();\n if (data.colSpan) {\n ntd.setAttribute('colspan', data.colSpan.toString());\n }\n this.updateClassList(data);\n var type = data.type;\n if (data.className.indexOf(cls.RESOURCE_PARENT_CLASS) !== -1) {\n data.className.push(cls.RESOURCE_GROUP_CELLS_CLASS);\n type = 'resourceGroupCells';\n }\n if (this.parent.workHours.highlight && this.isWorkDay(data.date, data.workDays)) {\n data.className.push(cls.WORKDAY_CLASS);\n }\n if (this.isCurrentDate(data.date)) {\n data.className.push(cls.CURRENTDATE_CLASS);\n }\n addClass([ntd], data.className);\n ntd.setAttribute('data-date', data.date.getTime().toString());\n if (!isNullOrUndefined(data.groupIndex) || this.parent.uiStateValues.isGroupAdaptive) {\n var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :\n data.groupIndex;\n ntd.setAttribute('data-group-index', '' + groupIndex);\n }\n this.renderDateHeaderElement(data, ntd);\n if (this.parent.cellTemplate) {\n var args_1 = { date: data.date, type: type, groupIndex: data.groupIndex };\n append([].slice.call(this.parent.getCellTemplate()(args_1)), ntd);\n }\n var args = { elementType: type, element: ntd, date: data.date, groupIndex: data.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return ntd;\n };\n Month.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n Month.prototype.renderDateHeaderElement = function (data, ntd) {\n if (this.parent.currentView === 'TimelineMonth') {\n return;\n }\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.getMonthStart = function (currentDate) {\n var monthStart = util.getWeekFirstDate(util.firstDateOfMonth(currentDate), this.parent.firstDayOfWeek);\n var start = new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());\n return start;\n };\n Month.prototype.getMonthEnd = function (currentDate) {\n var endDate = util.addMonths(currentDate, this.parent.activeViewOptions.interval - 1);\n var lastWeekOfMonth = util.getWeekFirstDate(util.lastDateOfMonth(endDate), this.parent.firstDayOfWeek);\n var monthEnd = util.addDays(lastWeekOfMonth, util.WEEK_LENGTH - 1);\n return monthEnd;\n };\n Month.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n var currentDate = util.resetTime(this.parent.selectedDate);\n var start = this.getMonthStart(currentDate);\n var monthEnd = this.getMonthEnd(currentDate);\n do {\n if (this.parent.activeViewOptions.showWeekend) {\n renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n }\n start = util.addDays(start, 1);\n } while (start.getTime() <= monthEnd.getTime());\n if (!workDays) {\n this.renderDates = renderDates;\n }\n return renderDates;\n };\n Month.prototype.getNextPreviousDate = function (type) {\n if (type === 'next') {\n return util.addMonths(this.parent.selectedDate, this.parent.activeViewOptions.interval);\n }\n else {\n return util.addMonths(this.parent.selectedDate, -(this.parent.activeViewOptions.interval));\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 if (this.parent.activeViewOptions.interval > 1) {\n var endDate = util.addMonths(util.lastDateOfMonth(this.parent.selectedDate), this.parent.activeViewOptions.interval - 1);\n if (this.parent.selectedDate.getFullYear() === endDate.getFullYear()) {\n var monthNames = (this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM' }))\n + ' - ' + (this.parent.globalize.formatDate(endDate, { format: 'MMMM ' })) + endDate.getFullYear();\n return monthNames;\n }\n return (this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM' })) + ' ' +\n this.parent.selectedDate.getFullYear() + ' - ' + (this.parent.globalize.formatDate(endDate, { format: 'MMMM ' })) +\n endDate.getFullYear();\n }\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 Month.prototype.createWeekNumberElement = function (text) {\n var tr = createElement('tr');\n var td = createElement('td', {\n className: cls.WEEK_NUMBER_CLASS,\n attrs: { 'title': (text ? this.parent.localeObj.getConstant('week') + ' ' + text : '') },\n innerHTML: (text || '')\n });\n tr.appendChild(td);\n return tr;\n };\n Month.prototype.unwireEvents = function () {\n // No scroller events for month view\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 this.unwireEvents();\n if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\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, extend, remove } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { ViewBase } from '../renderer/view-base';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\nvar AgendaBase = /** @class */ (function () {\n /**\n * Constructor for AgendaBase\n */\n function AgendaBase(parent) {\n this.parent = parent;\n this.viewBase = new ViewBase(parent);\n }\n AgendaBase.prototype.createAgendaContentElement = function (type, listData, aTd, groupOrder, groupIndex) {\n var listElement;\n if (type === 'noEvents') {\n var noEvents = [{ 'subject': this.parent.localeObj.getConstant('noEvents') }];\n listElement = ListBase.createList(this.parent.createElement, 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(this.parent.createElement, 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 className: cls.APPOINTMENT_CLASS, attrs: {\n 'data-id': 'Appointment_' + listData[li][this.parent.eventFields.id],\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': (listData[li][this.parent.eventFields.subject]\n || this.parent.eventSettings.fields.subject.default)\n }\n });\n if (!isNullOrUndefined(groupIndex)) {\n appWrapper.setAttribute('data-group-index', groupIndex.toString());\n }\n this.parent.eventBase.applyResourceColor(appWrapper, listData[li], 'borderColor', groupOrder);\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], cancel: false };\n this.parent.trigger(event.eventRendered, args);\n if (args.cancel) {\n remove(listElement.children[li]);\n }\n }\n }\n aTd.appendChild(listElement);\n if ((this.parent.currentView === 'MonthAgenda' && this.parent.activeViewOptions.group.resources.length > 0)\n || this.parent.currentView === 'Agenda') {\n addClass([aTd], cls.AGENDA_DAY_BORDER_CLASS);\n }\n return aTd;\n };\n AgendaBase.prototype.createAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var eventSubject = (event[fieldMapping.subject] || this.parent.eventSettings.fields.subject.default);\n var eventLocation = (event[fieldMapping.location] || this.parent.eventSettings.fields.location.default);\n var appSubjectWrap = createElement('div', { className: cls.SUBJECT_WRAP });\n if (!isNullOrUndefined(eventLocation) && eventLocation !== '') {\n eventSubject += ',';\n }\n appSubjectWrap.appendChild(createElement('div', { className: cls.SUBJECT_CLASS, innerHTML: eventSubject }));\n if (!isNullOrUndefined(eventLocation) && eventLocation !== '') {\n appSubjectWrap.appendChild(createElement('div', { className: cls.LOCATION_CLASS, innerHTML: eventLocation }));\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.parent.localeObj.getConstant('allDay');\n var timeStr = this.parent.getTimeString(strDate) + ' - ' + this.parent.getTimeString(endDate);\n if (!isNullOrUndefined(event.data)) {\n var eventString = (endDate.getTime() - strDate.getTime()) / util.MS_PER_DAY >= 1 ? allDayStr : timeStr;\n allDayStr = eventString + ' (' + this.parent.localeObj.getConstant('day') + ' '\n + event.data.index + '/' + event.data.count + ')';\n }\n var displayStr = (!isNullOrUndefined(event.data) || isAllDay) ? allDayStr : timeStr;\n var appDateTime = createElement('div', { className: cls.DATE_TIME_CLASS, innerHTML: displayStr });\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 AgendaBase.prototype.calculateResourceTableElement = function (tBody, noOfDays, agendaDate) {\n if (isNullOrUndefined(this.parent.resourceBase.lastResourceLevel)) {\n var level = this.viewBase.getDateSlots(this.viewBase.renderDates, this.parent.activeViewOptions.workDays);\n this.parent.resourceBase.generateResourceLevels(level);\n }\n var agendaLastDate = util.addDays(new Date(agendaDate.getTime()), noOfDays);\n var days = (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') ? noOfDays : 1;\n var resColl = this.parent.resourceBase.resourceCollection;\n var resData = this.parent.resourceBase.lastResourceLevel;\n var initialDate = agendaDate;\n for (var i = 0; i < days; i++) {\n var lastLevelInfo = [];\n var tempLastLevelInfo = [];\n var tempIndex = 0;\n var eventObj = void 0;\n var dateObj = void 0;\n var firstDate = util.addDays(initialDate, i);\n var finalDate = (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda')\n ? util.addDays(firstDate, 1) : agendaLastDate;\n var agendaCollection = this.parent.eventBase.filterEvents(firstDate, finalDate);\n if (agendaCollection.length > 0 || !this.parent.hideEmptyAgendaDays || this.parent.currentView === 'MonthAgenda') {\n for (var res = 0; res < resData.length; res++) {\n noOfDays = (!this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') ? noOfDays : 1;\n var data = [];\n agendaDate = firstDate;\n var resDataCollection = this.parent.eventBase.filterEvents(agendaDate, agendaLastDate, agendaCollection, resData[res]);\n if (resDataCollection.length > 0 || !this.parent.hideEmptyAgendaDays || this.parent.currentView === 'MonthAgenda') {\n for (var r = 0; r < noOfDays; r++) {\n var resDayCollection = this.parent.eventBase.filterEvents(agendaDate, util.addDays(agendaDate, 1), resDataCollection, undefined);\n if (resDayCollection.length > 0 || !this.parent.hideEmptyAgendaDays ||\n this.parent.currentView === 'MonthAgenda') {\n data.push(resDayCollection[0]);\n eventObj = {\n rowSpan: 1, type: 'eventColumn', resource: resColl[resColl.length - 1],\n groupIndex: resData[res].groupIndex, groupOrder: resData[res].groupOrder,\n resourceData: resData[res].resourceData, eventData: resDayCollection, date: agendaDate\n };\n dateObj = {\n rowSpan: 1, type: 'dateColumn', resource: resColl[resColl.length - 1],\n groupOrder: resData[res].groupOrder, resourceData: resData[res].resourceData,\n date: agendaDate, text: ''\n };\n if (!lastLevelInfo[tempIndex]) {\n lastLevelInfo[tempIndex] = [];\n }\n lastLevelInfo[tempIndex].push(eventObj);\n lastLevelInfo[tempIndex].push(dateObj);\n tempIndex++;\n }\n agendaDate = util.addDays(agendaDate, 1);\n if (agendaDate.getTime() >= agendaLastDate.getTime() || this.parent.activeViewOptions.group.byDate\n || this.parent.currentView === 'MonthAgenda') {\n lastLevelInfo[lastLevelInfo.length - 1][1].text = 'lastRow';\n var tempObj = {\n rowSpan: data.length, type: 'resourceColumn', resource: resColl[resColl.length - 1],\n groupOrder: resData[res].groupOrder.slice(0, -1), resourceData: resData[res].resourceData,\n groupIndex: (lastLevelInfo.length - data.length), className: [cls.RESOURCE_NAME],\n date: agendaDate\n };\n lastLevelInfo[lastLevelInfo.length - data.length].push(tempObj);\n tempLastLevelInfo.push(extend({}, tempObj, null, true));\n break;\n }\n }\n }\n }\n var topResources = resColl.slice(0, -1);\n var tempGroupedData = [];\n var totalRowSpan = 0;\n for (var y = 0; y < topResources.length; y++) {\n var data = topResources[topResources.length - (y + 1)]\n .dataSource;\n for (var x = 0; x < data.length; x++) {\n var z = 0;\n for (var u = 0; u < tempLastLevelInfo.length; u++) {\n if (tempLastLevelInfo[u].groupOrder[topResources.length - (y + 1)] === data[x][topResources[topResources.length - (y + 1)].idField]) {\n totalRowSpan = totalRowSpan + tempLastLevelInfo[u].rowSpan;\n tempGroupedData.push(extend({}, tempLastLevelInfo[u], null, true));\n }\n if (++z === tempLastLevelInfo.length && tempGroupedData.length > 0) {\n tempGroupedData[0].rowSpan = totalRowSpan;\n tempGroupedData[0].type = 'parentColumnLevel_' + (y + 1);\n tempGroupedData[0].resource = topResources[topResources.length - (y + 1)];\n tempGroupedData[0].resourceData = data[x];\n tempGroupedData[0].date = agendaDate;\n lastLevelInfo[tempGroupedData[0].groupIndex].push(tempGroupedData[0]);\n tempGroupedData = [];\n totalRowSpan = 0;\n }\n }\n }\n }\n this.createResourceTableRow(lastLevelInfo, tBody);\n }\n }\n var totalCollection = this.parent.eventBase.filterEvents(initialDate, agendaLastDate);\n if (totalCollection.length === 0 && !this.parent.activeViewOptions.allowVirtualScrolling && this.parent.hideEmptyAgendaDays) {\n this.renderEmptyContent(tBody, initialDate);\n }\n };\n AgendaBase.prototype.createResourceTableRow = function (tContent, tBody) {\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var ntr;\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var tempData;\n var rowSpan = 0;\n var level;\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n var tContentCollection = [];\n var parentCollection = this.parent.resourceBase.resourceCollection.slice(0, -1);\n for (var w = 0; w < tContent.length; w++) {\n tContentCollection = tContentCollection.concat(tContent[w]);\n }\n level = (parentCollection.length > 0) ? 'parentColumnLevel_' + parentCollection.length : 'resourceColumn';\n var rowSpanCollection = new DataManager({ json: tContentCollection }).executeLocal(new Query()\n .where('type', 'equal', level));\n for (var x = 0; x < rowSpanCollection.length; x++) {\n rowSpan = rowSpan + rowSpanCollection[x].rowSpan;\n }\n }\n for (var row = 0; row < tContent.length; row++) {\n ntr = tr.cloneNode();\n for (var col = tContent[row].length - 1; col >= 0; col--) {\n var data = tContent[row][col];\n var ntd = td.cloneNode();\n if (data.type === 'dateColumn') {\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n tempData = tContent[row][col];\n continue;\n }\n ntd.setAttribute('data-date', data.date.getTime().toString());\n ntd.appendChild(this.createDateHeaderElement(data.date));\n var className = [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DATE_CLASS];\n if (data.text === 'lastRow') {\n className.push(cls.AGENDA_DAY_BORDER_CLASS);\n }\n addClass([ntd], className);\n ntr.appendChild(ntd);\n }\n else if (data.type === 'eventColumn') {\n var elementType = (data.eventData.length === 0) ? 'noEvents' : 'data';\n ntd = this.createAgendaContentElement(elementType, data.eventData, ntd, data.groupOrder, data.groupIndex);\n ntd.setAttribute('data-date', data.date.getTime().toString());\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n addClass([ntd], [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DAY_PADDING_CLASS]);\n }\n ntr.appendChild(ntd);\n }\n else {\n ntd.setAttribute('rowspan', data.rowSpan.toString());\n addClass([ntd], cls.AGENDA_RESOURCE_CLASS);\n this.viewBase.setResourceHeaderContent(ntd, data, data.className[0]);\n ntr.appendChild(ntd);\n }\n }\n if (this.parent.activeViewOptions.group.byDate && row === 0 && this.parent.currentView !== 'MonthAgenda') {\n var ntd = td.cloneNode();\n ntd.setAttribute('data-date', tempData.date.getTime().toString());\n ntd.setAttribute('rowspan', rowSpan.toString());\n ntd.appendChild(this.createDateHeaderElement(tempData.date));\n addClass([ntd], [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DATE_CLASS, cls.DATE_BORDER_CLASS]);\n var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), tempData.date.getTime());\n ntr.setAttribute('aria-rowindex', daysCount.toString());\n if (this.parent.element.querySelector(\".e-agenda-view tr[aria-rowindex=\\\"\" + daysCount + \"\\\"]\")) {\n break;\n }\n ntr.insertBefore(ntd, ntr.childNodes[0]);\n }\n tBody.appendChild(ntr);\n }\n };\n AgendaBase.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.viewBase.getMobileDateElement(date, cls.AGENDA_HEADER_CLASS);\n }\n return dateHeader;\n };\n AgendaBase.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.parent.localeObj.getConstant('noEvents')\n });\n eTd.appendChild(noEvents);\n tBody.appendChild(eTr);\n };\n AgendaBase.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': (type === 'monthHeader') ? cls.AGENDA_MONTH_HEADER_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 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, closest, extend } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, 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.agendaBase.renderEmptyContent(tBody, agendaDate);\n this.wireEvents();\n if (this.parent.uiStateValues.isGroupAdaptive && !this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.parent.resourceBase.generateResourceLevels([{ renderDates: this.parent.activeView.renderDates }]);\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n };\n Agenda.prototype.eventLoad = function (args) {\n this.dataSource = extend([], this.parent.eventsData, null, true);\n for (var _i = 0, _a = this.parent.eventsData; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n delete event_1.generatedDates;\n }\n var eventCollection = args.processedData;\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resource = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n this.dataSource = this.parent.eventBase.filterEventsByResource(resource, this.dataSource);\n eventCollection = this.parent.eventBase.filterEventsByResource(resource, eventCollection);\n }\n this.parent.eventsProcessed = this.agendaBase.processAgendaEvents(eventCollection);\n var agendaDate = util.resetTime(this.parent.selectedDate);\n var tBody = this.parent.getContentTable();\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.refreshEvent = function (refreshDate) {\n var processedData = [];\n for (var _i = 0, _a = this.dataSource; _i < _a.length; _i++) {\n var eventData = _a[_i];\n var fields = this.parent.eventFields;\n var data = eventData;\n if (isNullOrUndefined(data[fields.recurrenceID]) && !isNullOrUndefined(data[fields.recurrenceRule]) &&\n !isNullOrUndefined(data.generatedDates) && refreshDate >= data.generatedDates.end) {\n processedData = processedData.concat(this.parent.eventBase.generateOccurrence(data, refreshDate));\n }\n }\n this.parent.eventsProcessed = this.parent.eventsProcessed.concat(this.agendaBase.processAgendaEvents(processedData));\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 agendaDate = new Date(new Date(agendaDate.getTime()).setHours(0, 0, 0, 0));\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 if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var date = agendaDate;\n if (!this.parent.activeViewOptions.group.byDate) {\n this.parent.activeViewOptions.allowVirtualScrolling = false;\n date = firstDate;\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange(this.parent.activeView.getDateRangeText());\n this.parent.headerModule.updateHeaderItems('remove');\n }\n }\n this.agendaBase.calculateResourceTableElement(tBody, this.parent.agendaDaysCount, date);\n }\n else {\n for (var day = 0; day < noOfDays; day++) {\n var filterData = [];\n filterData = this.appointmentFiltering(agendaDate);\n var nTr = this.agendaBase.createTableRowElement(agendaDate, 'data');\n if (this.element.querySelector('tr[aria-rowindex=\"' + parseInt(nTr.getAttribute('aria-rowindex'), 10)\n + '\"]')) {\n continue;\n }\n // if (this.isMonthFirstDate(agendaDate)) {\n // tBody.appendChild(this.renderMonthHeader(this.createTableRowElement(agendaDate, 'monthHeader')));\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.agendaBase.createDateHeaderElement(agendaDate));\n nTr.appendChild(dTd);\n var cTd = this.agendaBase.createAgendaContentElement(elementType, filterData, aTd);\n nTr.appendChild(cTd);\n if (cTd.querySelectorAll('li').length > 0) {\n tBody.appendChild(nTr);\n }\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 }\n endDate = new Date(agendaDate.getTime() - util.MS_PER_DAY);\n }\n else {\n this.agendaBase.renderEmptyContent(tBody, agendaDate);\n endDate = util.addDays(agendaDate, this.parent.agendaDaysCount - 1);\n }\n this.agendaDates = { start: firstDate, end: endDate };\n };\n // private renderMonthHeader(mTr: Element): Element {\n // mTr.removeAttribute('aria-rowindex');\n // for (let td of [].slice.call(mTr.childNodes)) {\n // td.removeAttribute('aria-colindex');\n // }\n // let headerDate: Date = new Date(parseInt(mTr.children[0].getAttribute('data-date'), 10));\n // let div: Element = createElement('div', {\n // className: cls.DATE_HEADER_CLASS,\n // innerHTML: headerDate.toLocaleString(this.parent.locale, { month: 'long' }) + ' ' + headerDate.getFullYear()\n // });\n // mTr.lastElementChild.appendChild(div);\n // return mTr;\n // }\n Agenda.prototype.agendaScrolling = function (event) {\n this.parent.quickPopup.quickPopupHide();\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 this.parent.headerModule.updateDateRange(this.getDateRangeText(date));\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 if (filterData.length === 0) {\n this.refreshEvent(startDate);\n filterData = this.parent.eventBase.filterEvents(dateStart, dateEnd);\n }\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 // private isMonthFirstDate(date: Date): boolean {\n // return date.getDate() === 1;\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 () {\n var headerHeight = this.getHeaderBarHeight();\n if (this.parent.headerModule) {\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n this.parent.headerModule.updateHeaderItems('add');\n }\n else {\n this.parent.headerModule.updateHeaderItems('remove');\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 if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\n remove(this.element);\n this.element = null;\n if (this.parent.headerModule && this.parent.activeViewOptions.allowVirtualScrolling) {\n this.parent.headerModule.updateHeaderItems('remove');\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 wrapperContainer = createElement('div', { className: cls.WRAPPER_CONTAINER_CLASS });\n contentArea.appendChild(wrapperContainer);\n var appWrap = createElement('div', { className: cls.APPOINTMENT_WRAP_CLASS });\n wrapperContainer.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 resourceWrapper = this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR);\n if (resourceWrapper) {\n headerHeight += resourceWrapper.offsetHeight;\n }\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 wrapperContainer = this.element.querySelector('.' + cls.WRAPPER_CONTAINER_CLASS);\n var eventWrapper = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n wrapperContainer.style.height = eventWrapper.style.height = formatUnit(availableHeight);\n };\n MonthAgenda.prototype.onDataReady = function (args) {\n this.setEventWrapperHeight();\n this.clearElements();\n var eventCollection = args.processedData;\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resource = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n eventCollection = this.parent.eventBase.filterEventsByResource(resource, eventCollection);\n }\n this.parent.eventsProcessed = this.agendaBase.processAgendaEvents(eventCollection);\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, date);\n }\n }\n count++;\n }\n };\n MonthAgenda.prototype.onCellClick = function (event) {\n this.parent.quickPopup.quickPopupHide();\n var filterData = this.appointmentFiltering(event.startTime);\n this.onEventRender(filterData, event.startTime);\n this.parent.setProperties({ selectedDate: new Date('' + event.startTime) }, true);\n };\n MonthAgenda.prototype.onEventRender = function (events, date) {\n var appWrap = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n appWrap.innerHTML = '';\n if (this.parent.activeViewOptions.group.resources.length === 0 || this.parent.uiStateValues.isGroupAdaptive) {\n if (events.length > 0) {\n var appContainer = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n appWrap.appendChild(this.agendaBase.\n createAgendaContentElement('data', events, appContainer));\n }\n else {\n this.appendAppContainer(appWrap);\n }\n }\n else {\n if (events.length > 0) {\n var table = this.createTableLayout();\n var tBody = table.querySelector('tbody');\n this.agendaBase.calculateResourceTableElement(tBody, 1, date);\n table.appendChild(tBody);\n appWrap.appendChild(table);\n }\n else {\n this.appendAppContainer(appWrap);\n }\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.parent.localeObj.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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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, setStyleAttribute, extend, EventHandler } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\nimport { MonthEvent } from './month';\nvar EVENT_GAP = 2;\n/**\n * Timeline view events render\n */\nvar TimelineEvent = /** @class */ (function (_super) {\n __extends(TimelineEvent, _super);\n /**\n * Constructor for timeline views\n */\n function TimelineEvent(parent, type) {\n var _this = _super.call(this, parent) || this;\n _this.startHour = _this.parent.activeView.getStartHour();\n _this.endHour = _this.parent.activeView.getEndHour();\n _this.slotCount = _this.parent.activeViewOptions.timeScale.slotCount;\n _this.interval = _this.parent.activeViewOptions.timeScale.interval;\n _this.day = 0;\n _this.renderType = type;\n _this.appContainers = [].slice.call(_this.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));\n _this.dayLength = _this.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr')[0].children.length;\n _this.content = _this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);\n return _this;\n }\n TimelineEvent.prototype.getSlotDates = function () {\n this.slots = [];\n this.slots.push(this.parent.activeView.renderDates.map(function (date) { return +date; }));\n };\n TimelineEvent.prototype.getOverlapEvents = function (date, appointments) {\n var appointmentsList = [];\n if (this.renderType === 'day') {\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(new Date(date.getTime())).getTime()) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(new Date(date.getTime())).getTime())) {\n appointmentsList.push(app);\n }\n }\n }\n else {\n for (var _a = 0, appointments_2 = appointments; _a < appointments_2.length; _a++) {\n var app = appointments_2[_a];\n var eventData = app.data;\n if (eventData[this.fields.startTime].getTime() <= date.getTime() &&\n eventData[this.fields.endTime].getTime() > date.getTime()) {\n appointmentsList.push(app);\n }\n }\n }\n return appointmentsList;\n };\n TimelineEvent.prototype.renderResourceEvents = function () {\n var resources = this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.lastResourceLevel;\n for (var i = 0; i < resources.length; i++) {\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays, resources[i]);\n }\n };\n TimelineEvent.prototype.renderEvents = function (event, resIndex) {\n if (this.parent.headerRows.length > 0 &&\n this.parent.headerRows[this.parent.headerRows.length - 1].option !== 'Hour') {\n this.renderType = 'day';\n this.cellWidth = this.content.offsetWidth / this.dateRender.length;\n this.slotsPerDay = 1;\n }\n else {\n this.slotsPerDay = (this.dayLength / this.dateRender.length);\n }\n var wrapIndex = this.parent.uiStateValues.isGroupAdaptive ? 0 : resIndex;\n var eventData = event.data;\n var startTime = this.getStartTime(event, eventData);\n var endTime = this.getEndTime(event, eventData);\n this.day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime())));\n if (this.day < 0) {\n return;\n }\n var currentDate = util.resetTime(new Date(this.dateRender[this.day].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var overlapCount = this.getIndex(startTime);\n event.Index = overlapCount;\n var appHeight = this.eventHeight;\n var diffInDays = eventData.count;\n if (startTime <= endTime) {\n var appWidth = 0;\n var appLeft = 0;\n var appRight = 0;\n var position = 0;\n if (this.renderType === 'day' || event[this.fields.isAllDay]) {\n appWidth = this.renderType === 'day' ? (((diffInDays * this.slotsPerDay) * this.cellWidth) - 2) :\n ((diffInDays * this.slotsPerDay) * this.cellWidth);\n position = ((this.day * this.slotsPerDay) * this.cellWidth);\n }\n else {\n appWidth = this.getNormalEventsWidth(startTime, endTime, diffInDays);\n position = this.getPosition(schedule, startTime, endTime, this.day);\n position = position * this.cellWidth;\n }\n appWidth = (appWidth === 0) ? this.cellWidth : appWidth; // appWidth 0 when start and end time as same\n this.renderedEvents.push(extend({}, event, null, true));\n var cellTd = this.appContainers[wrapIndex];\n var top_1 = this.getRowTop(resIndex);\n var appTop = (top_1 + EVENT_GAP) + (overlapCount * (appHeight + EVENT_GAP));\n appLeft = (this.parent.enableRtl) ? 0 : position;\n appRight = (this.parent.enableRtl) ? position : 0;\n if (this.cellHeight > ((overlapCount + 1) * (appHeight + EVENT_GAP)) + this.moreIndicatorHeight) {\n var appointmentElement = this.createAppointmentElement(event, resIndex);\n this.applyResourceColor(appointmentElement, event, 'backgroundColor', this.groupOrder);\n this.wireAppointmentEvents(appointmentElement);\n setStyleAttribute(appointmentElement, {\n 'width': appWidth + 'px', 'left': appLeft + 'px', 'right': appRight + 'px', 'top': appTop + 'px'\n });\n this.renderEventElement(event, appointmentElement, cellTd);\n }\n else {\n for (var i = 0; i < diffInDays; i++) {\n var cellTd_1 = this.appContainers[wrapIndex];\n var moreIndicator = cellTd_1.querySelector('.' + cls.MORE_INDICATOR_CLASS);\n var appPos = (this.parent.enableRtl) ? appRight : appLeft;\n appPos = (Math.floor(appPos / this.cellWidth) * this.cellWidth);\n if ((cellTd_1 && isNullOrUndefined(moreIndicator)) ||\n (!this.isAlreadyAvail(appPos, cellTd_1))) {\n var interval = this.interval / this.slotCount;\n var startDate = new Date(this.dateRender[this.day + i].getTime());\n var endDate = util.addDays(this.dateRender[this.day + i], 1);\n var slotStartTime = (new Date(startTime.setMinutes(Math.floor(startTime.getMinutes() / interval) * interval)));\n var slotEndTime = new Date(slotStartTime.getTime() + (60000 * interval));\n var groupIndex = void 0;\n if (this.parent.activeViewOptions.group.resources.length > 0 && !isNullOrUndefined(resIndex)) {\n groupIndex = resIndex.toString();\n }\n var filterEvents = this.getFilterEvents(startDate, endDate, slotStartTime, slotEndTime, groupIndex);\n var appArea = this.cellHeight - this.moreIndicatorHeight;\n var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));\n var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);\n var moreIndicatorElement = void 0;\n if (this.renderType === 'day') {\n moreIndicatorElement = this.getMoreIndicatorElement(count, startDate, endDate);\n }\n else {\n moreIndicatorElement = this.getMoreIndicatorElement(count, slotStartTime, slotEndTime);\n }\n if (!isNullOrUndefined(groupIndex)) {\n moreIndicatorElement.setAttribute('data-group-index', groupIndex);\n }\n moreIndicatorElement.style.top = top_1 + appArea + 'px';\n moreIndicatorElement.style.width = this.cellWidth + 'px';\n moreIndicatorElement.style.left = (Math.floor(appLeft / this.cellWidth) * this.cellWidth) + 'px';\n moreIndicatorElement.style.right = (Math.floor(appRight / this.cellWidth) * this.cellWidth) + 'px';\n this.renderElement(cellTd_1, moreIndicatorElement);\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n }\n }\n }\n };\n TimelineEvent.prototype.getStartTime = function (event, eventData) {\n var startTime = event[this.fields.startTime];\n var schedule = util.getStartEndHours(startTime, this.startHour, this.endHour);\n if (schedule.startHour.getTime() >= eventData[this.fields.startTime]) {\n startTime = schedule.startHour;\n }\n else if (schedule.endHour.getTime() <= eventData[this.fields.startTime]) {\n startTime = this.getNextDay(schedule.startHour, eventData);\n }\n else {\n startTime = eventData[this.fields.startTime];\n }\n // To overcome the overflow\n if (event[this.fields.isAllDay]) {\n eventData[this.fields.startTime] = schedule.startHour;\n }\n return startTime;\n };\n TimelineEvent.prototype.getNextDay = function (startTime, eventData) {\n var startDate;\n for (var i = 1; i <= this.dateRender.length; i++) {\n startDate = util.addDays(startTime, i);\n if (this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime()))) !== -1) {\n eventData.count = eventData.count - 1;\n return startDate;\n }\n }\n return startDate;\n };\n TimelineEvent.prototype.getEndTime = function (event, eventData) {\n var endTime = event[this.fields.endTime];\n var schedule = util.getStartEndHours(endTime, this.startHour, this.endHour);\n if (schedule.endHour.getTime() <= eventData[this.fields.endTime]) {\n endTime = schedule.endHour;\n }\n else {\n endTime = eventData[this.fields.endTime];\n }\n // To overcome the overflow\n if (event[this.fields.isAllDay]) {\n eventData[this.fields.endTime] = schedule.endHour;\n }\n return endTime;\n };\n TimelineEvent.prototype.getNormalEventsWidth = function (startDate, endDate, diffInDays) {\n if (this.isSameDay(startDate, endDate)) {\n return this.getSameDayEventsWidth(startDate, endDate);\n }\n else {\n return this.getSpannedEventsWidth(startDate, endDate, diffInDays);\n }\n };\n TimelineEvent.prototype.getSameDayEventsWidth = function (startDate, endDate) {\n return (((endDate.getTime() - startDate.getTime())) / (60 * 1000) * (this.cellWidth * this.slotCount) / this.interval);\n };\n TimelineEvent.prototype.getSpannedEventsWidth = function (startDate, endDate, diffInDays) {\n var width = (diffInDays * this.slotsPerDay) * this.cellWidth;\n var startWidth;\n var endWidth;\n var start = util.getStartEndHours(util.resetTime(new Date(startDate.getTime())), this.startHour, this.endHour);\n startWidth = this.getSameDayEventsWidth(start.startHour, startDate);\n if (this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(endDate.getTime()))) === -1) {\n endWidth = 0;\n }\n else {\n var end = util.getStartEndHours(util.resetTime(new Date(endDate.getTime())), this.startHour, this.endHour);\n endWidth = this.getSameDayEventsWidth(endDate, end.endHour);\n }\n var spannedWidth = startWidth + endWidth;\n return (width > spannedWidth) ? width - spannedWidth : endWidth - startWidth;\n };\n TimelineEvent.prototype.isSameDay = function (startTime, endTime) {\n var startDay = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime())));\n var endDay = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(endTime.getTime())));\n return (startDay === endDay);\n };\n TimelineEvent.prototype.getAppointmentLeft = function (schedule, startTime, endTime, day) {\n var slotTd = (this.isSameDay(startTime, schedule.startHour)) ?\n ((startTime.getTime() - schedule.startHour.getTime()) / ((60 * 1000) * this.interval)) * this.slotCount : 0;\n if (day === 0) {\n return slotTd;\n }\n else {\n var daySlot = (((schedule.endHour.getTime() - schedule.startHour.getTime()) / (60 * 1000)) / this.interval) * this.slotCount;\n return (daySlot * day) + slotTd;\n }\n };\n TimelineEvent.prototype.getPosition = function (schedule, startTime, endTime, day) {\n if (schedule.endHour.getTime() <= endTime.getTime() && schedule.startHour.getTime() >= startTime.getTime()) {\n return this.getAppointmentLeft(schedule, schedule.startHour, schedule.endHour, day);\n }\n else if (schedule.endHour.getTime() <= endTime.getTime()) {\n return this.getAppointmentLeft(schedule, startTime, schedule.endHour, day);\n }\n else if (schedule.startHour.getTime() >= startTime.getTime()) {\n return this.getAppointmentLeft(schedule, schedule.startHour, endTime, day);\n }\n else {\n return this.getAppointmentLeft(schedule, startTime, endTime, day);\n }\n };\n TimelineEvent.prototype.getFilterEvents = function (startDate, endDate, startTime, endTime, gIndex) {\n if (this.renderType === 'day') {\n return this.getFilteredEvents(startDate, endDate, gIndex);\n }\n else {\n return this.getFilteredEvents(startTime, endTime, gIndex);\n }\n };\n TimelineEvent.prototype.isAlreadyAvail = function (appPos, cellTd) {\n var moreIndicator = [].slice.call(cellTd.querySelectorAll('.' + cls.MORE_INDICATOR_CLASS));\n for (var i = 0; i < moreIndicator.length; i++) {\n var indicatorPos = void 0;\n if (moreIndicator) {\n indicatorPos = (this.parent.enableRtl) ? moreIndicator[i].style.right : moreIndicator[i].style.left;\n }\n if (parseInt(indicatorPos, 10) === Math.floor(appPos)) {\n return true;\n }\n }\n return false;\n };\n TimelineEvent.prototype.getRowTop = function (resIndex) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var tr = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS +\n ' tbody tr:nth-child(' + (resIndex + 1) + ')');\n return tr.offsetTop;\n }\n return 0;\n };\n return TimelineEvent;\n}(MonthEvent));\nexport { TimelineEvent };\n","import { createElement, compile, append } from '@syncfusion/ej2-base';\nimport { MS_PER_DAY, getWeekNumber } from '../base/util';\n/**\n * timeline header\n */\nvar TimelineHeaderRow = /** @class */ (function () {\n function TimelineHeaderRow(parent, renderDates) {\n this.parent = parent;\n this.renderDates = renderDates;\n }\n TimelineHeaderRow.prototype.groupByYear = function (dates) {\n var result = {};\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var d = dates_1[_i];\n var key = d.getFullYear();\n result[key] = result[key] || [];\n result[key].push(d);\n }\n return result;\n };\n TimelineHeaderRow.prototype.groupByMonth = function (dates) {\n var result = {};\n for (var _i = 0, dates_2 = dates; _i < dates_2.length; _i++) {\n var d = dates_2[_i];\n var key = (d.getFullYear() - 1970) * 12 + d.getMonth();\n result[key] = result[key] || [];\n result[key].push(d);\n }\n return result;\n };\n TimelineHeaderRow.prototype.groupByWeek = function (dates) {\n var result = {};\n for (var _i = 0, dates_3 = dates; _i < dates_3.length; _i++) {\n var d = dates_3[_i];\n var jsDate = +new Date(1970, 0, 1);\n var key = Math.ceil(((((+d - jsDate)) / MS_PER_DAY) + new Date(jsDate).getDay() + 1) / 7);\n result[key] = result[key] || [];\n result[key].push(d);\n }\n return result;\n };\n TimelineHeaderRow.prototype.generateSlots = function (data, colspan, template, tempFn, cls, type) {\n var _this = this;\n var tdDatas = [];\n var customHelper = {\n getYear: function (dt) {\n return _this.parent.globalize.formatDate(dt, { format: 'y' });\n },\n getMonth: function (dt) {\n return _this.parent.globalize.formatDate(dt, { format: 'MMMM' });\n },\n getWeekNumber: function (dt) {\n return getWeekNumber(dt);\n }\n };\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var dates = data[keys[i]];\n var content = void 0;\n var ele = createElement('div');\n var htmlCol = void 0;\n if (!tempFn) {\n htmlCol = compile(template, customHelper)({ date: dates[0] });\n }\n else {\n var args = { date: dates[0], type: type };\n htmlCol = tempFn(args);\n }\n append([].slice.call(htmlCol), ele);\n content = ele.innerHTML;\n tdDatas.push({\n date: dates[0], type: type, className: [cls], colSpan: dates.length * colspan, text: content\n });\n }\n return tdDatas;\n };\n TimelineHeaderRow.prototype.generateColumnLevels = function (dateSlots, hourSlots) {\n var levels = [];\n var rows = this.parent.activeViewOptions.headerRows;\n var lastLevelColspan = 1;\n if (rows[rows.length - 1].option === 'Hour' && hourSlots.length > 0) {\n lastLevelColspan = hourSlots.length / dateSlots.length;\n }\n var tdDatas = [];\n var templateFn;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n switch (row.option) {\n case 'Year':\n templateFn = row.template ? this.parent.templateParser(row.template) : undefined;\n var yearTemplate = '${getYear(date)}';\n var byYear = this.groupByYear(this.renderDates);\n tdDatas = this.generateSlots(byYear, lastLevelColspan, yearTemplate, templateFn, 'e-header-year-cell', 'yearHeader');\n levels.push(tdDatas);\n break;\n case 'Month':\n templateFn = row.template ? this.parent.templateParser(row.template) : undefined;\n var monthTemp = '${getMonth(date)}';\n var byMonth = this.groupByMonth(this.renderDates);\n tdDatas = this.generateSlots(byMonth, lastLevelColspan, monthTemp, templateFn, 'e-header-month-cell', 'monthHeader');\n levels.push(tdDatas);\n break;\n case 'Week':\n templateFn = row.template ? this.parent.templateParser(row.template) : undefined;\n var weekTemplate = '${getWeekNumber(date)}';\n var byWeek = this.groupByWeek(this.renderDates);\n tdDatas = this.generateSlots(byWeek, lastLevelColspan, weekTemplate, templateFn, 'e-header-week-cell', 'weekHeader');\n levels.push(tdDatas);\n break;\n case 'Date':\n tdDatas = dateSlots;\n tdDatas = tdDatas.map(function (value) {\n value.colSpan = lastLevelColspan;\n return value;\n });\n levels.push(tdDatas);\n break;\n case 'Hour':\n if (hourSlots.length > 0) {\n levels.push(hourSlots);\n }\n break;\n }\n }\n return levels;\n };\n return TimelineHeaderRow;\n}());\nexport { TimelineHeaderRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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, createElement, prepend, extend, formatUnit } from '@syncfusion/ej2-base';\nimport { VerticalView } from './vertical-view';\nimport { TimelineEvent } from '../event-renderer/timeline-view';\nimport * as cls from '../base/css-constant';\nimport { getDateInMs, resetTime } from '../base/util';\nimport { TimelineHeaderRow } from './timeline-header-row';\n/**\n * timeline view\n */\nvar TimelineViews = /** @class */ (function (_super) {\n __extends(TimelineViews, _super);\n function TimelineViews(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dateHeaderTemplate = '${getTimelineDate(date)}';\n _this.baseCssClass = 'e-timeline-view';\n return _this;\n }\n TimelineViews.prototype.getLeftPanelElement = function () {\n return this.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);\n };\n TimelineViews.prototype.scrollTopPanel = function (target) {\n _super.prototype.scrollTopPanel.call(this, target);\n this.scrollHeaderLabels(target);\n };\n TimelineViews.prototype.scrollToWorkHour = function () {\n var start = this.parent.globalize.parseDate(this.parent.workHours.start, { skeleton: 'Hm' });\n var currDateTime = this.isWorkDay(this.parent.selectedDate) && this.parent.workHours.highlight &&\n !isNullOrUndefined(start) ? new Date(+this.parent.selectedDate).setHours(start.getHours(), start.getMinutes())\n : new Date(+this.parent.selectedDate).setHours(0, 0, 0, 0);\n var queryString = '[data-date=\"' + currDateTime + '\"]';\n var firstWorkHourCell = this.element.querySelector(queryString);\n if (firstWorkHourCell) {\n this.getScrollableElement().scrollLeft = firstWorkHourCell.offsetLeft;\n }\n };\n TimelineViews.prototype.scrollToHour = function (hour) {\n var date = this.parent.globalize.parseDate(hour, { skeleton: 'Hm' });\n if (isNullOrUndefined(date)) {\n return;\n }\n this.getScrollableElement().scrollLeft = this.getLeftFromDateTime(null, date);\n };\n TimelineViews.prototype.generateColumnLevels = function () {\n var levels = [];\n var dateSlots = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n levels.push(dateSlots);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.generateResourceLevels(dateSlots, !this.parent.uiStateValues.isGroupAdaptive);\n }\n var hourSlots = [];\n if (this.parent.activeViewOptions.timeScale.enable) {\n hourSlots = this.generateTimeSlots(levels[levels.length - 1]);\n levels.push(hourSlots);\n }\n if (this.parent.activeViewOptions.headerRows.length > 0) {\n var renderGn = new TimelineHeaderRow(this.parent, this.renderDates);\n levels = renderGn.generateColumnLevels(dateSlots, hourSlots);\n }\n return levels;\n };\n TimelineViews.prototype.generateTimeSlots = function (dateSlots) {\n var _this = this;\n var handler = function (r) {\n r.type = r.first ? 'majorSlot' : 'minorSlot';\n r.className = r.first ? ['e-time-slots'] : ['e-time-slots', cls.TIME_CELLS_CLASS];\n r.workDays = _this.parent.activeViewOptions.workDays;\n return r;\n };\n var timeSlotData = this.getTimeSlotRows(handler);\n var slots = [];\n for (var _i = 0, dateSlots_1 = dateSlots; _i < dateSlots_1.length; _i++) {\n var data = dateSlots_1[_i];\n data.colSpan = timeSlotData.length;\n var tempTimeSlots = extend([], timeSlotData, null, true);\n for (var _a = 0, tempTimeSlots_1 = tempTimeSlots; _a < tempTimeSlots_1.length; _a++) {\n var slot = tempTimeSlots_1[_a];\n slot.date = new Date(+resetTime(data.date) + getDateInMs(slot.date));\n slots.push(slot);\n }\n }\n return slots;\n };\n TimelineViews.prototype.changeCurrentTimePosition = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeCurrentTimeIndicatorElements();\n var currentDateIndex = this.getCurrentTimeIndicatorIndex();\n var left = this.getLeftFromDateTime(currentDateIndex, new Date());\n var height = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetHeight;\n var headerWrap = this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n var contentWrap = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n contentWrap.appendChild(createElement('div', {\n className: cls.CURRENT_TIMELINE_CLASS,\n styles: (this.parent.enableRtl ? 'right' : 'left') + ':' + formatUnit(left) + '; height:' + formatUnit(height)\n }));\n var currentTimeEle = createElement('div', {\n innerHTML: this.parent.getTimeString(new Date()),\n className: cls.CURRENT_TIME_CLASS\n });\n headerWrap.appendChild(currentTimeEle);\n currentTimeEle.style[this.parent.enableRtl ? 'right' : 'left'] = formatUnit(left - (currentTimeEle.offsetWidth / 2));\n };\n TimelineViews.prototype.getLeftFromDateTime = function (currentDateIndex, date) {\n var startHour = this.getStartHour();\n var endHour = this.getEndHour();\n var diffInDates = 0;\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n if (!isNullOrUndefined(currentDateIndex)) {\n var end = (endHour.getHours() === 0) ? 24 : endHour.getHours();\n if (currentDateIndex[0] !== 0) {\n diffInDates = (currentDateIndex[0]) * ((end - startHour.getHours()) * 60) + (endHour.getMinutes() - startHour.getMinutes());\n }\n diffInMinutes = diffInDates + diffInMinutes;\n }\n return (diffInMinutes * this.getWorkCellWidth() * this.parent.activeViewOptions.timeScale.slotCount) /\n this.parent.activeViewOptions.timeScale.interval;\n };\n TimelineViews.prototype.getWorkCellWidth = function () {\n return this.element.querySelector('.e-work-cells').offsetWidth;\n };\n TimelineViews.prototype.renderHeader = function () {\n var tr = createElement('tr');\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.parent.resourceBase.renderResourceHeaderIndent(tr);\n }\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n TimelineViews.prototype.createAllDayRow = function (table, tdData) {\n // For current time indicator wrapper\n };\n TimelineViews.prototype.getCurrentTimeIndicatorIndex = function () {\n var currentDateIndex = [];\n var index = this.parent.getIndexOfDate(this.renderDates, resetTime(new Date()));\n if (index >= 0) {\n currentDateIndex.push(index);\n }\n return currentDateIndex;\n };\n TimelineViews.prototype.renderContent = function () {\n var tr = createElement('tr');\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var resTd = createElement('td');\n resTd.appendChild(this.parent.resourceBase.createResourceColumn());\n tr.appendChild(resTd);\n }\n var workTd = createElement('td');\n var wrap = this.renderContentArea();\n wrap.appendChild(this.createEventTable(this.getRowCount()));\n this.collapseRows(wrap);\n workTd.appendChild(wrap);\n tr.appendChild(workTd);\n this.element.querySelector('tbody').appendChild(tr);\n };\n TimelineViews.prototype.getRowCount = function () {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n return this.parent.resourceBase.lastResourceLevel.length;\n }\n return 1;\n };\n TimelineViews.prototype.getResourceTdData = function (i, tdData) {\n var resLevel = this.parent.resourceBase.lastResourceLevel[i];\n var resSHr = resLevel.resourceData[resLevel.resource.startHourField] || this.parent.workHours.start;\n var resEHr = resLevel.resourceData[resLevel.resource.endHourField] || this.parent.workHours.end;\n tdData.startHour = this.parent.globalize.parseDate(resSHr, { skeleton: 'Hm' });\n tdData.endHour = this.parent.globalize.parseDate(resEHr, { skeleton: 'Hm' });\n tdData.workDays = resLevel.resourceData[resLevel.resource.workDaysField] || this.parent.workDays;\n tdData.className = resLevel.className;\n tdData.groupIndex = resLevel.groupIndex;\n tdData.groupOrder = resLevel.groupOrder;\n return tdData;\n };\n TimelineViews.prototype.renderContentTable = function (table) {\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var tBody = table.querySelector('tbody');\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var trCount = this.getRowCount();\n for (var i = 0; i < trCount; i++) {\n var ntr = tr.cloneNode();\n for (var _i = 0, _a = this.colLevels[this.colLevels.length - 1]; _i < _a.length; _i++) {\n var tdData = _a[_i];\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n tdData = this.getResourceTdData(i, tdData);\n }\n var ntd = this.createContentTd(tdData, tdData, td);\n ntr.appendChild(ntd);\n }\n tBody.appendChild(ntr);\n }\n table.appendChild(tBody);\n };\n TimelineViews.prototype.getContentTdClass = function (r) {\n return (r.first || !this.parent.activeViewOptions.timeScale.enable) ? [cls.WORK_CELLS_CLASS] :\n [cls.WORK_CELLS_CLASS, cls.ALTERNATE_CELLS_CLASS];\n };\n TimelineViews.prototype.renderEvents = function () {\n if (this.parent.activeViewOptions.timeScale.enable) {\n var appointment = new TimelineEvent(this.parent, 'hour');\n appointment.renderAppointments();\n }\n else {\n var appointment = new TimelineEvent(this.parent, 'day');\n appointment.renderAppointments();\n }\n };\n TimelineViews.prototype.getModuleName = function () {\n return 'timelineViews';\n };\n return TimelineViews;\n}(VerticalView));\nexport { TimelineViews };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\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, createElement, formatUnit } from '@syncfusion/ej2-base';\nimport { Month } from './month';\nimport { TimelineEvent } from '../event-renderer/timeline-view';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport { TimelineHeaderRow } from './timeline-header-row';\n/**\n * timeline month view\n */\nvar TimelineMonth = /** @class */ (function (_super) {\n __extends(TimelineMonth, _super);\n /**\n * Constructor for timeline month view\n */\n function TimelineMonth(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-timeline-month-view';\n _this.isInverseTableSelect = true;\n return _this;\n }\n /**\n * Get module name.\n */\n TimelineMonth.prototype.getModuleName = function () {\n return 'timelineMonth';\n };\n TimelineMonth.prototype.onDataReady = function (args) {\n var appointment = new TimelineEvent(this.parent, 'day');\n appointment.renderAppointments();\n };\n TimelineMonth.prototype.getLeftPanelElement = function () {\n return this.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);\n };\n TimelineMonth.prototype.scrollTopPanel = function (target) {\n _super.prototype.scrollTopPanel.call(this, target);\n this.scrollHeaderLabels(target);\n };\n TimelineMonth.prototype.setContentHeight = function (content, leftPanelElement, height) {\n if (leftPanelElement) {\n leftPanelElement.style.height = formatUnit(height - this.getScrollXIndent(content));\n }\n content.style.height = formatUnit(height);\n };\n TimelineMonth.prototype.getDateSlots = function (renderDates, workDays) {\n var dateSlots = [];\n for (var _i = 0, renderDates_1 = renderDates; _i < renderDates_1.length; _i++) {\n var col = renderDates_1[_i];\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentDate(col)) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n dateSlots.push({ date: col, type: 'dateHeader', className: classList, colSpan: 1, workDays: workDays });\n }\n return dateSlots;\n };\n TimelineMonth.prototype.renderLeftIndent = function (tr) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.parent.resourceBase.renderResourceHeaderIndent(tr);\n }\n };\n TimelineMonth.prototype.renderContent = function () {\n var contentTr = createElement('tr');\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var resTd = createElement('td');\n resTd.appendChild(this.parent.resourceBase.createResourceColumn());\n contentTr.appendChild(resTd);\n }\n var contentTd = createElement('td');\n this.element.querySelector('tbody').appendChild(contentTr);\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n wrap.appendChild(this.renderContentArea());\n wrap.appendChild(this.createEventTable(this.getRowCount()));\n this.collapseRows(wrap);\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n contentTd.appendChild(wrap);\n contentTr.appendChild(contentTd);\n };\n TimelineMonth.prototype.getRowCount = function () {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n return this.parent.resourceBase.lastResourceLevel.length;\n }\n return 1;\n };\n TimelineMonth.prototype.getContentSlots = function () {\n var slotDatas = [];\n for (var row = 0; row < this.getRowCount(); row++) {\n for (var _i = 0, _a = this.colLevels[this.colLevels.length - 1]; _i < _a.length; _i++) {\n var data = _a[_i];\n data.className = [cls.WORK_CELLS_CLASS];\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var resLevel = this.parent.resourceBase.lastResourceLevel[row];\n data.workDays = resLevel.resourceData[resLevel.resource.workDaysField] || this.parent.workDays;\n data.className = data.className.concat(resLevel.className);\n data.groupIndex = resLevel.groupIndex;\n data.groupOrder = resLevel.groupOrder;\n }\n var slotData = {\n date: new Date(+data.date), colSpan: data.colSpan, groupIndex: data.groupIndex, workDays: data.workDays,\n type: 'monthCells', className: data.className\n };\n if (!slotDatas[row]) {\n slotDatas[row] = [];\n }\n slotDatas[row].push(slotData);\n }\n }\n return slotDatas;\n };\n TimelineMonth.prototype.updateClassList = function () {\n // No need to update content for timeline month view\n };\n TimelineMonth.prototype.unwireEvents = function () {\n EventHandler.remove(this.getContentAreaElement(), 'scroll', this.onContentScroll);\n };\n TimelineMonth.prototype.getMonthStart = function (currentDate) {\n var monthStart = util.firstDateOfMonth(util.resetTime(currentDate));\n return new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());\n };\n TimelineMonth.prototype.getMonthEnd = function (currentDate) {\n var monthStart = util.firstDateOfMonth(util.resetTime(currentDate));\n return util.lastDateOfMonth(util.addMonths(new Date(+monthStart), this.parent.activeViewOptions.interval - 1));\n };\n TimelineMonth.prototype.generateColumnLevels = function () {\n var colLevels = [];\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n colLevels.push(level);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.generateResourceLevels(level, !this.parent.uiStateValues.isGroupAdaptive);\n }\n var hourSlots = [];\n if (this.parent.activeViewOptions.headerRows.length > 0) {\n var renderGn = new TimelineHeaderRow(this.parent, this.renderDates);\n colLevels = renderGn.generateColumnLevels(level, hourSlots);\n }\n this.colLevels = colLevels;\n return colLevels;\n };\n return TimelineMonth;\n}(Month));\nexport { TimelineMonth };\n","import * as index from '@syncfusion/ej2-schedule';\nindex.Schedule.Inject( index.Day,index.Week,index.WorkWeek,index.Month,index.Agenda,index.MonthAgenda,index.TimelineViews,index.TimelineMonth,index.Resize,index.DragAndDrop);\nexport * from '@syncfusion/ej2-schedule';\n","/**\n * Maps Themes doc\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})(Theme || (Theme = {}));\n","import { addClass, createElement as internalCreateElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\n/**\n * Initialize ButtonGroup CSS component with specified properties.\n * ```html\n *
    \n * \n * \n * \n *
    \n * ```\n * ```typescript\n * createButtonGroup('#buttongroup', {\n * cssClass: 'e-outline',\n * buttons: [\n * { content: 'Day' },\n * { content: 'Week' },\n * { content: 'Work Week'}\n * ]\n * });\n * ```\n * @param {string} selector\n * @param {CreateButtonGroupModel} options\n * @returns HTMLElement\n */\nexport function createButtonGroup(selector, options, createElement) {\n if (options === void 0) { options = {}; }\n var child;\n var btnElem;\n var nextChild;\n var btnModel;\n if (isNullOrUndefined(createElement)) {\n createElement = internalCreateElement;\n }\n var wrapper = document.querySelector(selector);\n addClass([wrapper], ['e-btn-group']);\n wrapper.setAttribute('role', 'group');\n var childs = wrapper.children;\n options.buttons = options.buttons || [];\n for (var i = 0, j = 0; j < childs.length; i++, j++) {\n child = childs[j];\n btnModel = options.buttons[i];\n if (btnModel !== null) {\n if (child.tagName === 'BUTTON') {\n btnElem = child;\n }\n else {\n btnElem = createElement('label');\n nextChild = childs[j + 1];\n if (nextChild) {\n wrapper.insertBefore(btnElem, nextChild);\n }\n else {\n wrapper.appendChild(btnElem);\n }\n if (child.id) {\n btnElem.setAttribute('for', child.id);\n }\n if (btnModel && btnModel.disabled) {\n child.disabled = true;\n }\n j++;\n }\n if (options.cssClass && btnModel && !btnModel.cssClass) {\n btnModel.cssClass = options.cssClass;\n }\n new Button(btnModel || {}, btnElem);\n }\n }\n return wrapper;\n}\n","/**\n * TreeMap constants doc\n */\n/**\n * Specifies TreeMap load event name.\n * @private\n */\nexport var load = 'load';\n/**\n * Specifies TreeMap loaded event name.\n * @private\n */\nexport var loaded = 'loaded';\n/**\n * Specifies TreeMap beforePrint event name.\n * @private\n */\nexport var beforePrint = 'beforePrint';\n/**\n * Specifies the itemRendering event name.\n * @private\n */\nexport var itemRendering = 'itemRendering';\n/**\n * Specifies the drilldown start event name.\n * @private\n */\nexport var drillStart = 'drillStart';\n/**\n * Specifies the drilldown end event name.\n * @private\n */\nexport var drillEnd = 'drillEnd';\n/**\n * Specifies the item selected event name.\n * @private\n */\nexport var itemSelected = 'itemSelected';\n/**\n * Specifies the item highlight event name.\n * @private\n */\nexport var itemHighlight = 'itemHighlight';\n/**\n * Specifies the tooltip rendering event name.\n * @private\n */\nexport var tooltipRendering = 'tooltipRendering';\n/**\n * Specifies the item click event name.\n * @private\n */\nexport var itemClick = 'itemClick';\n/**\n * Specifies the item move event name.\n * @private\n */\nexport var itemMove = 'itemMove';\n/**\n * Specifies the mouse click event name.\n * @private\n */\nexport var click = 'click';\n/**\n * Specifies the mouse move event name.\n * @private\n */\nexport var mouseMove = 'mouseMove';\n/**\n * Specifies legend item rendering event name.\n * @private\n */\nexport var legendItemRendering = 'legendItemRendering';\n/**\n * Specifies treemap resize event name.\n * @private\n */\nexport var resize = 'resize';\n/**\n * Specifies the font family\n * @private\n */\nexport var defaultFont = 'Roboto, Segoe UI, Noto, Sans-serif';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, 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 { defaultFont } from './constants';\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('#808080')\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 * Configures the treemap margin.\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 fonts in treemap.\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(defaultFont)\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 * 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({ size: '14px' }, 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({ size: '15px' }, 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 };\nvar ColorMapping = /** @class */ (function (_super) {\n __extends(ColorMapping, _super);\n function ColorMapping() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"from\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"to\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"minOpacity\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"maxOpacity\", void 0);\n return ColorMapping;\n}(ChildProperty));\nexport { ColorMapping };\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, \"visible\", void 0);\n __decorate([\n Property('Default')\n ], LegendSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", 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({ size: '13px' }, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"fill\", 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 Property(null)\n ], LegendSettings.prototype, \"imageUrl\", 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({ size: '14px' }, Font)\n ], LegendSettings.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('Bottom')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"orientation\", 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('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property({ x: 0, y: 0 })\n ], LegendSettings.prototype, \"location\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\nvar InitialDrillSettings = /** @class */ (function (_super) {\n __extends(InitialDrillSettings, _super);\n function InitialDrillSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], InitialDrillSettings.prototype, \"groupIndex\", void 0);\n __decorate([\n Property(null)\n ], InitialDrillSettings.prototype, \"groupName\", void 0);\n return InitialDrillSettings;\n}(ChildProperty));\nexport { InitialDrillSettings };\nvar LeafItemSettings = /** @class */ (function (_super) {\n __extends(LeafItemSettings, _super);\n function LeafItemSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#808080')\n ], LeafItemSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], LeafItemSettings.prototype, \"autoFill\", void 0);\n __decorate([\n Complex({}, Border)\n ], LeafItemSettings.prototype, \"border\", void 0);\n __decorate([\n Property(0)\n ], LeafItemSettings.prototype, \"gap\", void 0);\n __decorate([\n Property(10)\n ], LeafItemSettings.prototype, \"padding\", void 0);\n __decorate([\n Property(1)\n ], LeafItemSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LeafItemSettings.prototype, \"showLabels\", void 0);\n __decorate([\n Property(null)\n ], LeafItemSettings.prototype, \"labelPath\", void 0);\n __decorate([\n Property(null)\n ], LeafItemSettings.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('TopLeft')\n ], LeafItemSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Complex({ color: null, size: '12px' }, Font)\n ], LeafItemSettings.prototype, \"labelStyle\", void 0);\n __decorate([\n Property(null)\n ], LeafItemSettings.prototype, \"labelTemplate\", void 0);\n __decorate([\n Property('Center')\n ], LeafItemSettings.prototype, \"templatePosition\", void 0);\n __decorate([\n Property('Trim')\n ], LeafItemSettings.prototype, \"interSectAction\", void 0);\n __decorate([\n Collection([], ColorMapping)\n ], LeafItemSettings.prototype, \"colorMapping\", void 0);\n return LeafItemSettings;\n}(ChildProperty));\nexport { LeafItemSettings };\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(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property('#000816')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(0.75)\n ], TooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(['Circle'])\n ], TooltipSettings.prototype, \"markerShapes\", void 0);\n __decorate([\n Complex({}, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ fontFamily: defaultFont, size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\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('#808080')\n ], SelectionSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('0.5')\n ], SelectionSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, Border)\n ], SelectionSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Item')\n ], SelectionSettings.prototype, \"mode\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\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(false)\n ], HighlightSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#808080')\n ], HighlightSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('0.5')\n ], HighlightSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, Border)\n ], HighlightSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Item')\n ], HighlightSettings.prototype, \"mode\", void 0);\n return HighlightSettings;\n}(ChildProperty));\nexport { HighlightSettings };\n/**\n * Options for customizing the tree map levels.\n */\nvar LevelSettings = /** @class */ (function (_super) {\n __extends(LevelSettings, _super);\n function LevelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], LevelSettings.prototype, \"groupPath\", void 0);\n __decorate([\n Property(0)\n ], LevelSettings.prototype, \"groupGap\", void 0);\n __decorate([\n Property(10)\n ], LevelSettings.prototype, \"groupPadding\", void 0);\n __decorate([\n Complex({}, Border)\n ], LevelSettings.prototype, \"border\", void 0);\n __decorate([\n Property('#808080')\n ], LevelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], LevelSettings.prototype, \"autoFill\", void 0);\n __decorate([\n Property(1)\n ], LevelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LevelSettings.prototype, \"showHeader\", void 0);\n __decorate([\n Property(20)\n ], LevelSettings.prototype, \"headerHeight\", void 0);\n __decorate([\n Property(null)\n ], LevelSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], LevelSettings.prototype, \"headerFormat\", void 0);\n __decorate([\n Property('Near')\n ], LevelSettings.prototype, \"headerAlignment\", void 0);\n __decorate([\n Complex({ color: null, size: '13px' }, Font)\n ], LevelSettings.prototype, \"headerStyle\", void 0);\n __decorate([\n Property('TopLeft')\n ], LevelSettings.prototype, \"templatePosition\", void 0);\n __decorate([\n Collection([], ColorMapping)\n ], LevelSettings.prototype, \"colorMapping\", void 0);\n return LevelSettings;\n}(ChildProperty));\nexport { LevelSettings };\n","import { Rect, itemsToOrder, TextOption, measureText, textTrim, hide, wordWrap, textWrap, getTemplateFunction, convertElement, findLabelLocation, PathOption, textFormatter, colorNameToHex, convertHexToColor, colorMap, measureElement, convertToContainer, convertToRect, getShortestEdge, getArea, orderByArea, isParentItem } from '../utils/helper';\nimport { isNullOrUndefined, createElement, extend } from '@syncfusion/ej2-base';\nimport { Location, findChildren, renderTextElement } from '../utils/helper';\nimport { itemRendering } from '../model/constants';\n/**\n * To calculate and render the shape layer\n */\nvar LayoutPanel = /** @class */ (function () {\n function LayoutPanel(treemap) {\n this.treemap = treemap;\n }\n /* tslint:disable:no-string-literal */\n LayoutPanel.prototype.processLayoutPanel = function () {\n var data;\n var totalRect;\n if (this.treemap.levelsOfData && this.treemap.levelsOfData.length > 0) {\n data = (!isNullOrUndefined(this.treemap.initialDrillDown.groupIndex) &&\n !isNullOrUndefined(this.treemap.initialDrillDown.groupName)) ?\n this.getDrilldownData(this.treemap.levelsOfData[0], [])[0] : this.treemap.levelsOfData[0];\n totalRect = extend({}, this.treemap.areaRect, totalRect, false);\n this.calculateLayoutItems(data || this.treemap.levelsOfData[0], totalRect);\n this.renderLayoutItems(data || this.treemap.levelsOfData[0]);\n }\n };\n LayoutPanel.prototype.getDrilldownData = function (data, drillData) {\n var treemap = this.treemap;\n var newData = {};\n var child = findChildren(data)['values'];\n if (child && child.length > 0 && drillData.length === 0) {\n for (var i = 0; i < child.length; i++) {\n if (child[i]['groupIndex'] === treemap.initialDrillDown.groupIndex &&\n child[i]['name'] === treemap.initialDrillDown.groupName) {\n child[i]['isDrilled'] = true;\n newData[child[i]['groupName']] = [child[i]];\n drillData.push(newData);\n }\n }\n for (var j = 0; j < child.length; j++) {\n this.getDrilldownData(child[j], drillData);\n }\n }\n return drillData;\n };\n LayoutPanel.prototype.calculateLayoutItems = function (data, rect) {\n this.renderItems = [];\n this.parentData = [];\n if (!isNullOrUndefined(this.treemap.weightValuePath)) {\n if (this.treemap.layoutType.indexOf('SliceAndDice') > -1) {\n this.computeSliceAndDiceDimensional(data, rect);\n }\n else {\n rect.height = rect.height + rect.y;\n rect.width = rect.width + rect.x;\n this.computeSquarifyDimensional(data, rect);\n }\n }\n };\n LayoutPanel.prototype.computeSliceAndDiceDimensional = function (data, coords) {\n var leafItem = this.treemap.leafItemSettings;\n var rect;\n var groups = this.treemap.levels;\n var groupIndex;\n var isLeafItem = false;\n var children = findChildren(data)['values'];\n var gap;\n var headerHeight;\n if (children && children.length > 0) {\n this.sliceAndDiceProcess(children, coords);\n if (this.treemap.levels.length > 0) {\n for (var i = 0; i < children.length; i++) {\n groupIndex = children[i]['groupIndex'];\n isLeafItem = (groups.length === 0 || groupIndex === groups.length);\n gap = isLeafItem ? leafItem.gap : groups[groupIndex].groupGap;\n headerHeight = groups.length === 0 ? 0 : groups[groupIndex] ? groups[groupIndex].showHeader ?\n groups[groupIndex].headerHeight : 0 : groups[groupIndex - 1].showHeader ? groups[groupIndex - 1].headerHeight : 0;\n rect = children[i]['rect'];\n rect = new Rect(rect.x + (gap / 2), rect.y + (headerHeight + (gap / 2)), rect.width - gap, Math.abs(rect.height - (gap + headerHeight)));\n this.computeSliceAndDiceDimensional(children[i], rect);\n }\n }\n }\n return data;\n };\n LayoutPanel.prototype.sliceAndDiceProcess = function (processData, rect) {\n var parentArea = rect.height * rect.width;\n var levels = this.treemap.levels;\n var childValue;\n var alottedValue = 0;\n var totalWeight = 0;\n processData.forEach(function (data) { totalWeight += data['weight']; });\n processData.forEach(function (child) {\n child['weightArea'] = parentArea * child['weight'] / totalWeight;\n });\n var isHorizontal = (this.treemap.layoutType === 'SliceAndDiceAuto') ? (rect.width > rect.height) :\n (this.treemap.layoutType === 'SliceAndDiceHorizontal');\n processData.sort(itemsToOrder);\n for (var i = 0; i < processData.length; i++) {\n var item = processData[i];\n item['isLeafItem'] = (levels.length === 0) || ((this.treemap.isHierarchicalData ||\n isNullOrUndefined(this.treemap.leafItemSettings.labelPath)) ?\n item['groupIndex'] === levels.length - 1 : item['groupIndex'] === this.treemap.levels.length);\n if (isHorizontal) {\n childValue = ((parentArea / totalWeight) * processData[i]['weight']) / rect.height;\n if (alottedValue <= rect.width) {\n processData[i]['rect'] = new Rect(alottedValue + rect.x, rect.y, childValue, rect.height);\n }\n }\n else {\n childValue = ((parentArea / totalWeight) * processData[i]['weight']) / rect.width;\n if (alottedValue <= rect.height) {\n processData[i]['rect'] = new Rect(rect.x, alottedValue + rect.y, rect.width, childValue);\n }\n }\n alottedValue += childValue;\n this.renderItems.push(processData[i]);\n }\n };\n LayoutPanel.prototype.computeSquarifyDimensional = function (data, coords) {\n var leaf = this.treemap.leafItemSettings;\n var rect;\n var levels = this.treemap.levels;\n var groupIndex;\n var isLeafItem = false;\n var item;\n var child = findChildren(data)['values'];\n var index;\n var gap;\n var padding;\n var headerHeight;\n if (child && child.length > 0) {\n if (this.parentData.length === 0) {\n this.parentData = [];\n this.parentData.push(child);\n }\n this.calculateChildrenLayout(data, child, coords);\n if (this.treemap.levels.length > 0) {\n for (var i = 0; i < child.length; i++) {\n item = child[i];\n index = item['groupIndex'];\n rect = item['rect'];\n gap = (item['isLeafItem'] ? leaf.gap : levels[index].groupGap) / 2;\n padding = (item['isLeafItem'] ? leaf.padding : levels[index].groupPadding) / 2;\n headerHeight = this.treemap.isHierarchicalData ? index === 0 && item['isLeafItem'] ? 0 : levels[index] ?\n levels[index].showHeader ? levels[index].headerHeight : 0 : 0 : (levels.length === 0) ? 0 : levels[index] ?\n levels[index].showHeader ? levels[index].headerHeight : 0 : 0;\n rect = new Rect(rect.x + padding, rect.y + (headerHeight + padding), rect.width - padding, rect.height - padding);\n if (!item['isLeafItem'] && item['weight'] > 0) {\n this.computeSquarifyDimensional(child[i], rect);\n }\n }\n }\n }\n };\n LayoutPanel.prototype.calculateChildrenLayout = function (parent, children, coords) {\n this.computeTotalArea(children, getArea(coords));\n children.sort(orderByArea);\n this.performRowsLayout(children, [], coords, []);\n };\n LayoutPanel.prototype.performRowsLayout = function (data, currentRow, rect, stack) {\n var dataLength = data.length;\n if (dataLength === 0) {\n var newCoordinates = this.getCoordinates(currentRow, rect);\n var newStack = stack.concat(newCoordinates);\n return newStack;\n }\n var width = getShortestEdge(rect);\n var nextDatum = data[0];\n var restData = data.slice(1, dataLength);\n if (this.aspectRatio(currentRow, nextDatum, width)) {\n var newRow = currentRow.concat(nextDatum);\n return this.performRowsLayout(restData, newRow, rect, stack);\n }\n else {\n var currentRowLength = currentRow.length;\n var valueSum = 0;\n for (var i = 0; i < currentRowLength; i += 1) {\n valueSum += currentRow[i]['itemArea'];\n }\n var newContainer = this.cutArea(rect, valueSum);\n var newCoordinates = this.getCoordinates(currentRow, rect);\n var newStack = stack.concat(newCoordinates);\n return this.performRowsLayout(data, [], newContainer, newStack);\n }\n };\n LayoutPanel.prototype.aspectRatio = function (currentRow, nextDatum, length) {\n if (currentRow.length === 0) {\n return true;\n }\n else {\n var newRow = currentRow.concat(nextDatum);\n var currentMaxAspectRatio = this.findMaxAspectRatio(currentRow, length);\n var newMaxAspectRatio = this.findMaxAspectRatio(newRow, length);\n return (currentMaxAspectRatio >= newMaxAspectRatio);\n }\n };\n LayoutPanel.prototype.findMaxAspectRatio = function (row, length) {\n var rowLength = row.length;\n var minArea = Infinity;\n var maxArea = -Infinity;\n var sumArea = 0;\n for (var i = 0; i < rowLength; i += 1) {\n var area = row[i]['itemArea'];\n if (area < minArea) {\n minArea = area;\n }\n if (area > maxArea) {\n maxArea = area;\n }\n sumArea += area;\n }\n var result = Math.max((Math.pow(length, 2)) * maxArea / (Math.pow(sumArea, 2)), (Math.pow(sumArea, 2)) /\n ((Math.pow(length, 2)) * minArea));\n return result;\n };\n LayoutPanel.prototype.cutArea = function (rect, area) {\n var newContainer = convertToContainer(rect);\n var width = newContainer.width;\n var height = newContainer.height;\n var xOffset = newContainer.x;\n var yOffset = newContainer.y;\n if (width >= height) {\n var areaWidth = area / height;\n var newWidth = width - areaWidth;\n var container = {\n x: xOffset + areaWidth,\n y: yOffset,\n width: newWidth,\n height: height,\n };\n return convertToRect(container);\n }\n else {\n var areaHeight = area / width;\n var newHeight = height - areaHeight;\n var container = {\n x: xOffset,\n y: yOffset + areaHeight,\n width: width,\n height: newHeight,\n };\n return convertToRect(container);\n }\n };\n LayoutPanel.prototype.getCoordinates = function (row, rect) {\n var container = convertToContainer(rect);\n var headerHeight;\n var width = container.width;\n var height = container.height;\n var xOffset = container.x;\n var yOffset = container.y;\n var rowLength = row.length;\n var levels = this.treemap.levels;\n var leaf = this.treemap.leafItemSettings;\n var index;\n var valueSum = 0;\n for (var i = 0; i < rowLength; i += 1) {\n valueSum += row[i]['itemArea'];\n }\n var areaWidth = valueSum / height;\n var areaHeight = valueSum / width;\n var subXOffset = xOffset;\n var subYOffset = yOffset;\n var padding;\n var coordinates = [];\n var isParent;\n var gap;\n var parentRect;\n for (var i = 0; i < rowLength; i += 1) {\n var item = row[i];\n index = item['groupIndex'];\n item['isLeafItem'] = (levels.length === 0) || (this.treemap.isHierarchicalData ? index === levels.length :\n isNullOrUndefined(leaf.labelPath) ? false : index === levels.length);\n isParent = isParentItem(this.parentData[0], item);\n parentRect = isParent ? this.treemap.areaRect : item['parent'].rect;\n padding = item['isLeafItem'] ? leaf.padding : levels[index].groupPadding;\n if (width >= height) {\n var y1 = subYOffset + item['itemArea'] / areaWidth;\n item['rect'] = {\n x: subXOffset,\n y: subYOffset,\n width: subXOffset + areaWidth,\n height: y1,\n };\n subYOffset = y1;\n }\n else {\n var x1 = subXOffset + item['itemArea'] / areaHeight;\n item['rect'] = {\n x: subXOffset,\n y: subYOffset,\n width: x1,\n height: subYOffset + areaHeight,\n };\n subXOffset = x1;\n }\n if (item['weight'] > 0 && (isParent || (Math.round(rect.y + (padding / 2)) <=\n Math.round(parentRect.y + (parentRect.height - parentRect.y)) && Math.round(rect.x + (padding / 2)) <=\n Math.round(parentRect.x + (parentRect.width - parentRect.x))))) {\n this.renderItems.push(item);\n coordinates.push(item);\n }\n }\n return coordinates;\n };\n LayoutPanel.prototype.computeTotalArea = function (data, area) {\n var dataLength = data.length;\n var dataSum = 0;\n var result = [];\n for (var i = 0; i < dataLength; i += 1) {\n var dataLength_1 = data.length;\n var dataSum_1 = 0;\n for (var i_1 = 0; i_1 < dataLength_1; i_1 += 1) {\n dataSum_1 += data[i_1]['weight'];\n }\n var multiplier = area / dataSum_1;\n var datum = void 0;\n for (var j = 0; j < dataLength_1; j++) {\n datum = data[j];\n datum['itemArea'] = datum['weight'] * multiplier;\n result.push(datum);\n }\n }\n return result;\n };\n /* tslint:disable-next-line:max-func-body-length */\n LayoutPanel.prototype.renderLayoutItems = function (renderData) {\n var textCollection = [];\n var position;\n var treeMap = this.treemap;\n var colorMapping;\n var txtVisible;\n var getItemColor;\n var eventArgs;\n this.renderer = treeMap.renderer;\n var trimHeader;\n var textLocation = new Location(0, 0);\n var pathOptions;\n var elementID = treeMap.element.id;\n var index;\n var templatePosition;\n var mode = treeMap.layoutType;\n var rect;\n var format;\n var interSectAction = this.treemap.leafItemSettings.interSectAction;\n var textSize;\n var fill;\n var item;\n var renderText;\n var opacity;\n var padding = 5;\n var rectPath = '';\n var isRender;\n var secondaryEle = document.getElementById(treeMap.element.id + '_Secondary_Element');\n var groupId;\n var textOptions;\n var templateEle;\n var gap;\n var textStyle;\n var levels = treeMap.levels;\n this.layoutGroup = this.renderer.createGroup({ id: elementID + '_TreeMap_' + mode + '_Layout' });\n var itemGroup;\n var level;\n var template;\n var border;\n var templateGroup = createElement('div', {\n id: treeMap.element.id + '_Label_Template_Group',\n className: 'template',\n styles: 'overflow: hidden; position: absolute;pointer-events: none;' +\n 'top:' + treeMap.areaRect.y + 'px;' +\n 'left:' + treeMap.areaRect.x + 'px;' +\n 'height:' + treeMap.areaRect.height + 'px;' +\n 'width:' + treeMap.areaRect.width + 'px;'\n });\n var isLeafItem = false;\n var leaf = treeMap.leafItemSettings;\n var childItems;\n for (var i = 0; i < this.renderItems.length; i++) {\n item = this.renderItems[i];\n index = item['groupIndex'];\n rect = item['rect'];\n isLeafItem = item['isLeafItem'];\n groupId = elementID + '_Level_Index_' + index + '_Item_Index_' + i;\n itemGroup = this.renderer.createGroup({ id: groupId + '_Group' });\n gap = (isLeafItem ? leaf.gap : levels[index].groupGap) / 2;\n if (treeMap.layoutType === 'Squarified') {\n rect.width = Math.abs(rect.x - rect.width) - gap;\n rect.height = Math.abs(rect.y - rect.height) - gap;\n }\n colorMapping = isLeafItem ? leaf.colorMapping : levels[index].colorMapping;\n getItemColor = this.getItemColor(isLeafItem, item);\n fill = getItemColor['fill'];\n opacity = getItemColor['opacity'];\n format = isLeafItem ? leaf.labelFormat : (levels[index]).headerFormat;\n txtVisible = isLeafItem ? leaf.showLabels : (levels[index]).showHeader;\n renderText = textFormatter(format, item['data'], this.treemap) || item['name'];\n childItems = findChildren(item)['values'];\n renderText = !isLeafItem && childItems && childItems.length > 0 && this.treemap.enableDrillDown ?\n !item['isDrilled'] ? '[+] ' + renderText : '[-] ' + renderText : renderText;\n textStyle = (isLeafItem ? leaf.labelStyle : levels[index].headerStyle);\n border = isLeafItem ? leaf.border : levels[index].border;\n position = !isLeafItem ? (levels[index].headerAlignment) === 'Near' ? 'TopLeft' : (levels[index].headerAlignment) === 'Center' ?\n 'TopCenter' : 'TopRight' : leaf.labelPosition;\n templatePosition = isLeafItem ? leaf.templatePosition : levels[index].templatePosition;\n template = isLeafItem ? leaf.labelTemplate : levels[index].headerTemplate;\n item['options'] = { border: border, opacity: opacity, fill: fill };\n eventArgs = {\n cancel: false, name: itemRendering, treemap: this.treemap,\n currentItem: item, RenderItems: this.renderItems, options: item['options']\n };\n this.treemap.trigger(itemRendering, eventArgs);\n if (!eventArgs.cancel) {\n rectPath = ' M ' + rect.x + ' ' + rect.y + ' L ' + (rect.x + rect.width) + ' ' + rect.y +\n ' L ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height) + ' L ' + rect.x + ' ' + (rect.y + rect.height) + 'z';\n pathOptions = new PathOption(groupId + '_RectPath', fill, border.width, border.color, opacity, null, rectPath);\n var path = this.renderer.drawPath(pathOptions);\n itemGroup.appendChild(path);\n if (txtVisible) {\n this.renderItemText(renderText.toString(), itemGroup, textStyle, rect, interSectAction, groupId, fill, position);\n }\n if (template) {\n templateEle = this.renderTemplate(secondaryEle, groupId, rect, templatePosition, template, item);\n templateGroup.appendChild(templateEle);\n }\n itemGroup.setAttribute('aria-label', item['name']);\n itemGroup.setAttribute('tabindex', (this.treemap.tabIndex + i + 2).toString());\n this.layoutGroup.appendChild(itemGroup);\n }\n }\n if (templateGroup.childNodes.length > 0) {\n secondaryEle.appendChild(templateGroup);\n }\n this.treemap.svgObject.appendChild(this.layoutGroup);\n };\n LayoutPanel.prototype.renderItemText = function (text, parentElement, textStyle, rect, interSectAction, groupId, fill, position) {\n var level;\n var textOptions;\n var headerPosition;\n var secondaryEle = document.getElementById(this.treemap.element.id + '_Secondary_Element');\n var leaf = this.treemap.leafItemSettings;\n var padding = 5;\n var textSize;\n var textLocation;\n var textCollection = [];\n var customText;\n var templateEle;\n var tspanText = [];\n var height = 0;\n var textName;\n textCollection = ((text.indexOf('
    ')) !== -1) ? text.split('
    ') : null;\n customText = this.labelInterSectAction(rect, text, textStyle, interSectAction);\n textSize = measureText(textCollection && textCollection[0] || customText[0], textStyle);\n textLocation = findLabelLocation(rect, position, textSize, 'Text', this.treemap);\n if (!isNullOrUndefined(textCollection)) {\n var collection = [];\n var texts = null;\n var maxNumber = [];\n for (var i = 0; i < textCollection.length; i++) {\n texts = textTrim((rect.width - 5), textCollection[i], textStyle);\n textSize = measureText(texts, textStyle);\n height += textSize.height;\n maxNumber.push(textSize.width);\n collection.push(texts);\n }\n customText = collection;\n textSize.width = Math.max.apply(null, maxNumber);\n textSize.height = height;\n }\n if (interSectAction === 'WrapByWord' || interSectAction === 'Wrap' || interSectAction === 'Trim') {\n for (var j = 0; j < customText.length; j++) {\n textSize = measureText(customText[j], textStyle);\n height += textSize.height;\n if ((rect.height - padding) > height) {\n tspanText.push(customText[j]);\n }\n }\n if (interSectAction === 'Wrap' && customText.length !== tspanText.length && tspanText.length) {\n var collectionLength = tspanText.length - 1;\n var stringText = tspanText[collectionLength];\n stringText = stringText.substring(0, (stringText.length - 1)) + '...';\n tspanText.splice(collectionLength);\n if (stringText !== '...') {\n tspanText.push(stringText);\n }\n }\n }\n else {\n textName = customText;\n tspanText.push(textName);\n }\n textOptions = new TextOption(groupId + '_Text', textLocation.x, textLocation.y, 'start', tspanText);\n renderTextElement(textOptions, textStyle, textStyle.color || this.getSaturatedColor(fill), parentElement);\n };\n LayoutPanel.prototype.getItemColor = function (isLeafItem, item) {\n var treemap = this.treemap;\n var itemFill = isLeafItem ? treemap.leafItemSettings.fill : treemap.levels[item['groupIndex']].fill;\n var itemOpacity = isLeafItem ? treemap.leafItemSettings.opacity : treemap.levels[item['groupIndex']].opacity;\n var parentData = findChildren(treemap.levelsOfData[0])['values'];\n var colorMapping = isLeafItem ? treemap.leafItemSettings.colorMapping :\n treemap.levels[item['groupIndex']].colorMapping;\n if (colorMapping.length > 0) {\n var option = colorMap(colorMapping, item['data'][this.treemap.equalColorValuePath], item['data'][this.treemap.rangeColorValuePath], item['data'][this.treemap.weightValuePath]);\n itemFill = option['fill'];\n itemOpacity = option['opacity'];\n }\n else {\n for (var i = 0; i < parentData.length; i++) {\n if (parentData[i]['levelOrderName'] === item['levelOrderName'].split('_')[0]) {\n itemFill = treemap.palette.length > 0 ? treemap.palette[i % treemap.palette.length] : itemFill;\n }\n }\n }\n return { fill: itemFill, opacity: itemOpacity };\n };\n /**\n * To find saturated color for datalabel\n */\n LayoutPanel.prototype.getSaturatedColor = function (color) {\n var saturatedColor = color;\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 LayoutPanel.prototype.renderTemplate = function (secondaryEle, groupId, rect, position, template, item) {\n var templateElement;\n var labelEle;\n var templateSize;\n var templateFn;\n var templateLocation;\n if (isNullOrUndefined(template['prototype'])) {\n var keys = Object.keys(item['data']);\n for (var i = 0; i < keys.length; i++) {\n template = template.replace(new RegExp('{{:' + keys[i] + '}}', 'g'), item['data'][keys[i].toString()]);\n }\n }\n templateFn = getTemplateFunction(template);\n templateElement = templateFn(item['data'], this.treemap);\n labelEle = convertElement(templateElement, groupId + '_Template', item['data']);\n templateSize = measureElement(labelEle, secondaryEle);\n templateLocation = findLabelLocation(rect, position, templateSize, 'Template', this.treemap);\n labelEle.style.left = templateLocation.x + 'px';\n labelEle.style.top = templateLocation.y + 'px';\n return labelEle;\n };\n LayoutPanel.prototype.labelInterSectAction = function (rect, text, textStyle, alignment) {\n var textValue;\n var maxWidth = rect.width - 10;\n switch (alignment) {\n case 'Hide':\n textValue = [hide(maxWidth, rect.height, text, textStyle)];\n break;\n case 'Trim':\n textValue = [textTrim((maxWidth + 3), text, textStyle)];\n break;\n case 'WrapByWord':\n textValue = wordWrap(maxWidth, text, textStyle);\n break;\n case 'Wrap':\n textValue = textWrap(maxWidth, text, textStyle);\n break;\n }\n return textValue;\n };\n return LayoutPanel;\n}());\nexport { LayoutPanel };\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","/**\n * Tree Map Component\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})();\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, extend, Ajax } from '@syncfusion/ej2-base';\nimport { Complex, Collection } from '@syncfusion/ej2-base';\nimport { Event, Internationalization } from '@syncfusion/ej2-base';\nimport { SvgRenderer, isNullOrUndefined, createElement, EventHandler, Browser, remove } from '@syncfusion/ej2-base';\nimport { Border, Margin, TitleSettings, LegendSettings, InitialDrillSettings } from './model/base';\nimport { SelectionSettings, TooltipSettings, LevelSettings, LeafItemSettings, HighlightSettings, } from './model/base';\nimport { Size, stringToNumber, RectOption, Rect, textTrim, measureText, findChildren, removeClassNames } from '../treemap/utils/helper';\nimport { findPosition, TextOption, renderTextElement, isContainsData, TreeMapAjax } from '../treemap/utils/helper';\nimport { load, loaded, drillStart, drillEnd } from '../treemap/model/constants';\nimport { itemClick, itemMove, click, mouseMove, resize } from '../treemap/model/constants';\nimport { LayoutPanel } from './layout/render-panel';\nimport { ExportUtils } from '../treemap/utils/export';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n/**\n * Represents the TreeMap control.\n * ```html\n *
    \n * \n * ```\n */\nvar TreeMap = /** @class */ (function (_super) {\n __extends(TreeMap, _super);\n /**s\n * Constructor for TreeMap component.\n */\n function TreeMap(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.orientation = 'Horizontal';\n /** @private */\n _this.drilledItems = [];\n /** @private */\n _this.isHierarchicalData = false;\n return _this;\n }\n TreeMap.prototype.preRender = function () {\n this.trigger(load, { treemap: this });\n this.initPrivateVariable();\n this.unWireEVents();\n this.createSvg();\n this.wireEVents();\n this.setCulture();\n };\n TreeMap.prototype.render = function () {\n this.themeEffect();\n this.createSecondaryElement();\n this.addTabIndex();\n this.renderBorder();\n this.renderTitle(this.titleSettings, 'title', null, null);\n this.processDataManager();\n };\n /* tslint:disable:no-string-literal */\n /* tslint:disable:no-eval */\n TreeMap.prototype.processDataManager = function () {\n var _this = this;\n var dataModule;\n var queryModule;\n var ajaxModule;\n var localAjax;\n if (this.dataSource instanceof DataManager) {\n dataModule = this.dataSource;\n queryModule = this.query instanceof Query ? this.query : new Query();\n var dataManager = dataModule.executeQuery(queryModule);\n dataManager.then(function (e) {\n _this.dataSource = e['result'];\n _this.renderTreeMapElements();\n });\n }\n else if (this.dataSource instanceof TreeMapAjax) {\n localAjax = this.dataSource;\n ajaxModule = new Ajax(localAjax.dataOptions, localAjax.type, localAjax.async, localAjax.contentType);\n ajaxModule.onSuccess = function (args) {\n _this.dataSource = JSON.parse('[' + args + ']')[0];\n _this.renderTreeMapElements();\n };\n ajaxModule.send(localAjax.sendData);\n }\n else {\n this.renderTreeMapElements();\n }\n };\n TreeMap.prototype.renderTreeMapElements = function () {\n this.processingData();\n if (this.treeMapLegendModule && this.legendSettings.visible) {\n this.treeMapLegendModule.renderLegend();\n }\n this.layout.processLayoutPanel();\n this.element.appendChild(this.svgObject);\n this.elementChange();\n this.trigger(loaded, { treemap: this });\n };\n TreeMap.prototype.createSvg = function () {\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 var containerWidth = this.element.clientWidth;\n var containerHeight = this.element.clientHeight;\n this.availableSize = new Size(stringToNumber(this.width, containerWidth) || containerWidth || 600, stringToNumber(this.height, containerHeight) || containerHeight || 450);\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 initilize the private varibales of treemap.\n */\n TreeMap.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.layout = new LayoutPanel(this);\n };\n /**\n * To change font styles of map based on themes\n */\n TreeMap.prototype.themeEffect = function () {\n switch (this.theme) {\n case 'Material':\n case 'Bootstrap':\n case 'Fabric':\n this.setTextStyle('#424242');\n break;\n case 'Highcontrast':\n this.setTextStyle('#FFFFFF');\n break;\n }\n };\n TreeMap.prototype.setTextStyle = function (color) {\n this.titleSettings.textStyle.color = this.titleSettings.textStyle.color || color;\n this.titleSettings.subtitleSettings.textStyle.color = this.titleSettings.subtitleSettings.textStyle.color || color;\n this.legendSettings.textStyle.color = this.legendSettings.textStyle.color || color;\n this.legendSettings.titleStyle.color = this.legendSettings.titleStyle.color || color;\n };\n TreeMap.prototype.createSecondaryElement = function () {\n var secondaryEle = document.getElementById(this.element.id + '_Secondary_Element');\n if (secondaryEle && secondaryEle.childElementCount > 0) {\n secondaryEle.remove();\n }\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 TreeMap.prototype.elementChange = function () {\n if (this.treeMapLegendModule && this.legendSettings.visible && this.treeMapLegendModule.legendGroup && this.layout.layoutGroup) {\n this.svgObject.insertBefore(this.layout.layoutGroup, this.treeMapLegendModule.legendGroup);\n }\n };\n /**\n * @private\n * Render the treemap border\n */\n TreeMap.prototype.renderBorder = function () {\n var width = this.border.width;\n var color = this.theme === 'Highcontrast' ? '#000000' : '#FFFFFF';\n this.background = this.background ? this.background : color;\n var borderElement = document.getElementById(this.element.id + '_TreeMap_Border');\n if (isNullOrUndefined(borderElement)) {\n var borderRect = new RectOption(this.element.id + '_TreeMap_Border', 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 else {\n borderElement.setAttribute('fill', this.background);\n }\n };\n TreeMap.prototype.renderTitle = function (title, type, bounds, groupEle) {\n var style = title.textStyle;\n var height;\n var titlePadding = 10;\n var width = (this.availableSize.width - this.margin.right - this.margin.left);\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 + '_TreeMap_' + 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', title.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 = (this.availableSize.height - titleBounds.y - titlePadding - this.margin.bottom);\n this.areaRect = new Rect(this.margin.left, titleBounds.y + titlePadding, width, height);\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 = (this.availableSize.height - this.margin.top - this.margin.bottom);\n this.areaRect = new Rect(this.margin.left, this.margin.top, width, height);\n }\n };\n TreeMap.prototype.processingData = function () {\n var _this = this;\n var path;\n this.dataSource = this.dataSource;\n if (!isNullOrUndefined(this.dataSource) && this.dataSource.length > 0 && this.weightValuePath) {\n this.levelsOfData = [];\n this.dataSource.map(function (data) {\n data[_this.weightValuePath] = (data[_this.weightValuePath]) ? data[_this.weightValuePath].toString() :\n data[_this.weightValuePath];\n });\n this.leafItemSettings.labelPath = this.leafItemSettings.labelPath || this.weightValuePath;\n this.checkIsHierarchicalData();\n if (this.levels.length === 0) {\n var data_1 = new Object();\n data_1['level'] = 0;\n path = this.leafItemSettings.labelPath;\n data_1[path] = [];\n for (var i = 0; i < this.dataSource.length; i++) {\n var child = findChildren(this.dataSource[i])['values'];\n if (this.isHierarchicalData && child && child.length > 0) {\n child.forEach(function (currentData, dataIndex) {\n if (currentData[path]) {\n data_1[path].push({\n groupIndex: 0, name: currentData[path], levelOrderName: currentData[path].toString(),\n data: currentData, weight: currentData[_this.weightValuePath]\n });\n }\n });\n }\n else {\n if (this.dataSource[i][path]) {\n data_1[path].push({\n groupIndex: 0, name: this.dataSource[i][path], levelOrderName: this.dataSource[i][path].toString(), data: this.dataSource[i],\n weight: this.dataSource[i][this.weightValuePath]\n });\n }\n }\n }\n this.levelsOfData.push(data_1);\n }\n else {\n if (this.isHierarchicalData) {\n this.hierarchyData = [];\n this.hierarchyData = extend([], this.dataSource, this.hierarchyData, true);\n for (var i = 0; i < this.hierarchyData.length; i++) {\n this.processHierarchicalData(this.hierarchyData[i], i);\n }\n this.levelsOfData = this.hierarchyData;\n }\n else {\n this.processFlatJsonData();\n if (this.levelsOfData.length > 1) {\n this.reOrderLevelData(this.levelsOfData.length - 1);\n }\n }\n path = this.levels[0].groupPath;\n }\n if (!this.isHierarchicalData) {\n this.findTotalWeight(this.levelsOfData[0][path], 'Parent');\n }\n }\n };\n TreeMap.prototype.checkIsHierarchicalData = function () {\n var child;\n this.dataSource = this.dataSource;\n for (var i = 0; i < this.dataSource.length; i++) {\n child = findChildren(this.dataSource[i])['values'];\n if (child && child.length) {\n this.isHierarchicalData = true;\n break;\n }\n else if (i === this.dataSource.length - 1) {\n this.isHierarchicalData = false;\n }\n }\n };\n TreeMap.prototype.processHierarchicalData = function (data, dataCount) {\n var _this = this;\n var childData;\n var levelData = [];\n var newData = new Object();\n var levelIndex;\n var path = this.leafItemSettings.labelPath ? this.leafItemSettings.labelPath : this.weightValuePath;\n var currentData = new Object();\n var level;\n var key;\n newData = findChildren(data);\n childData = newData ? newData['values'] : null;\n if (childData && childData.length > 0) {\n key = newData['key'];\n for (var i = 0; i < this.levels.length; i++) {\n if (key === this.levels[i].groupPath) {\n level = this.levels[i];\n levelIndex = i;\n }\n }\n for (var j = 0; j < childData.length; j++) {\n childData[j]['name'] = childData[j][path];\n childData[j]['levelOrderName'] = (levelIndex === 0 ? childData[j]['name'] :\n data['levelOrderName'] + '_' + childData[j]['name']) + '';\n childData[j]['groupIndex'] = isNullOrUndefined(levelIndex) ? this.levels.length : levelIndex;\n if (levelIndex !== 0) {\n childData[j]['parent'] = data;\n }\n childData[j]['groupName'] = key;\n childData[j]['data'] = childData[j];\n childData[j]['isDrilled'] = false;\n childData[j]['weight'] = childData[j][this.weightValuePath];\n }\n childData.forEach(function (currentData) {\n _this.processHierarchicalData(currentData, dataCount);\n });\n }\n if (dataCount === this.hierarchyData.length - 1) {\n var mainData_1 = this.hierarchyData[0][this.levels[0].groupPath];\n for (var k = 0; k < this.hierarchyData.length; k++) {\n childData = findChildren(this.hierarchyData[k])['values'];\n if (k !== 0 && childData) {\n childData.forEach(function (currentData) { mainData_1.push(currentData); });\n this.hierarchyData.splice(k, 1);\n k -= 1;\n }\n }\n mainData_1 = this.hierarchyData[0][this.levels[0].groupPath];\n for (var l = 0; l < mainData_1.length; l++) {\n newData[this.levels[0].groupPath] = mainData_1;\n mainData_1[l]['parent'] = newData;\n }\n }\n };\n /**\n * Handles the print method for chart control.\n */\n TreeMap.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 TreeMap.prototype.export = function (type, fileName, orientation) {\n var exportMap = new ExportUtils(this);\n exportMap.export(type, fileName, orientation);\n };\n /* tslint:disable:no-string-literal */\n TreeMap.prototype.processFlatJsonData = function () {\n this.dataSource = this.dataSource;\n var groupPath;\n var childGroupPath;\n var orderNames = [];\n var process = false;\n for (var i = 0; i < this.levels.length + 1; i++) {\n groupPath = this.levels[i] ? this.levels[i].groupPath : this.leafItemSettings.labelPath;\n var level = new Object();\n level['level'] = i;\n level[groupPath] = [];\n this.levelsOfData.push(level);\n for (var j = 0; j < this.dataSource.length; j++) {\n var currentData = {};\n var childName = '';\n if (this.dataSource[j][groupPath]) {\n var name_1 = this.dataSource[j][groupPath];\n if (i !== 0) {\n for (var k = 0; k <= i; k++) {\n var childGroupPath_1 = this.levels[k] ? this.levels[k].groupPath : groupPath;\n childName += (this.dataSource[j][childGroupPath_1]) + ((k === i) ? '' : '_');\n }\n }\n if (!(orderNames.length > 0 ? orderNames.indexOf(childName ?\n childName : name_1) !== -1 : false)) {\n currentData['name'] = name_1;\n currentData['levelOrderName'] = ((childName) ? childName : name_1) + '';\n currentData['groupIndex'] = i;\n currentData['isDrilled'] = false;\n currentData['groupName'] = groupPath;\n currentData['data'] = this.dataSource[j];\n this.levelsOfData[this.levelsOfData.length - 1][groupPath].push(currentData);\n orderNames.push((childName) ? childName : name_1);\n }\n }\n }\n }\n };\n TreeMap.prototype.reOrderLevelData = function (start) {\n var currentName;\n var currentPath = this.levels[start] ? this.levels[start].groupPath : this.leafItemSettings.labelPath;\n var prevPath = this.levels[start - 1].groupPath;\n var currentData = this.levelsOfData[start][currentPath];\n var previousData = this.levelsOfData[start - 1][prevPath];\n for (var i = 0; i < currentData.length; i++) {\n currentName = currentData[i]['levelOrderName'];\n for (var j = 0; j < previousData.length; j++) {\n previousData[j][currentPath] = isNullOrUndefined(previousData[j][currentPath]) ? [] : previousData[j][currentPath];\n if (currentName.indexOf(previousData[j]['levelOrderName']) !== -1) {\n if (isNullOrUndefined(currentData[i]['parent'])) {\n currentData[i]['parent'] = previousData[j];\n }\n previousData[j][currentPath].push(currentData[i]);\n break;\n }\n }\n }\n this.findTotalWeight(this.levelsOfData[this.levelsOfData.length - 1][currentPath], 'Child');\n this.levelsOfData.splice(start, 1);\n if ((start - 1) > 0) {\n this.reOrderLevelData(start - 1);\n }\n };\n TreeMap.prototype.findTotalWeight = function (processData, type) {\n var _this = this;\n var totalWeight;\n var childData;\n var levelName;\n var start = 0;\n var split;\n var groupName;\n var groupObj = new Object();\n var _loop_1 = function (i) {\n totalWeight = 0;\n groupName = processData[i]['groupName'];\n split = processData[i]['levelOrderName'].split('_');\n this_1.dataSource.forEach(function (data) {\n if (isContainsData(split, processData[i]['levelOrderName'], data, _this)) {\n totalWeight += parseFloat(data[_this.weightValuePath]);\n }\n });\n if (type === 'Parent') {\n groupObj[groupName] = processData;\n processData[i]['parent'] = groupObj;\n }\n processData[i]['weight'] = totalWeight;\n };\n var this_1 = this;\n for (var i = 0; i < processData.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * To unbind event handlers for treemap.\n */\n TreeMap.prototype.unWireEVents = function () {\n EventHandler.remove(this.element, 'click', this.clickOnTreeMap);\n // EventHandler.remove(this.element, 'dblclick', this.doubleClick);\n EventHandler.remove(this.element, Browser.touchStartEvent, this.mouseDownOnTreeMap);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMoveOnTreeMap);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEndOnTreeMap);\n EventHandler.remove(this.element, 'pointerleave mouseleave', this.mouseLeaveOnTreeMap);\n window.removeEventListener('resize', this.resizeOnTreeMap);\n };\n /**\n * To bind event handlers for treemap.\n */\n TreeMap.prototype.wireEVents = function () {\n EventHandler.add(this.element, 'click', this.clickOnTreeMap, this);\n //EventHandler.add(this.element, 'dblclick', this.doubleClick, this);\n EventHandler.add(this.element, Browser.touchStartEvent, this.mouseDownOnTreeMap, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMoveOnTreeMap, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEndOnTreeMap, this);\n EventHandler.add(this.element, 'pointerleave mouseleave', this.mouseLeaveOnTreeMap, this);\n window.addEventListener('resize', this.resizeOnTreeMap.bind(this));\n };\n /**\n * Method to set culture for maps\n */\n TreeMap.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * To add tab index for treemap element\n */\n TreeMap.prototype.addTabIndex = function () {\n this.element.setAttribute('aria-label', this.description || 'TreeMap Element');\n this.element.setAttribute('tabindex', this.tabIndex.toString());\n };\n /**\n * To handle the window resize event on treemap.\n */\n TreeMap.prototype.resizeOnTreeMap = function (e) {\n var _this = this;\n var args = {\n name: resize,\n cancel: false,\n previousSize: this.availableSize,\n currentSize: new Size(0, 0),\n treemap: this\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-treemap')) {\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 };\n TreeMap.prototype.clickOnTreeMap = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var eventArgs;\n var itemIndex;\n var clickArgs = { cancel: false, name: click, treemap: this, mouseEvent: e };\n this.trigger(click, clickArgs);\n if (targetId.indexOf('_Item_Index') > -1) {\n e.preventDefault();\n itemIndex = parseFloat(targetId.split('_')[6]);\n eventArgs = { cancel: false, name: itemClick, treemap: this, item: this.layout.renderItems[itemIndex], mouseEvent: e };\n this.trigger(itemClick, eventArgs);\n }\n };\n /* tslint:disable-next-line:max-func-body-length */\n TreeMap.prototype.mouseDownOnTreeMap = function (e) {\n var targetEle = e.target;\n var startEvent;\n var endEvent;\n var targetId = targetEle.id;\n var totalRect;\n var index;\n var newDrillItem = new Object();\n var item;\n var process = true;\n var layoutID = this.element.id + '_TreeMap_' + this.layoutType + '_Layout';\n if (targetId.indexOf('_Item_Index') > -1 && this.enableDrillDown) {\n e.preventDefault();\n index = parseFloat(targetId.split('_')[6]);\n item = this.layout.renderItems[index];\n if (this.levels.length !== 0 && !item['isLeafItem'] && findChildren(item)['values'] &&\n findChildren(item)['values'].length > 0) {\n if (this.drilledItems.length > 0) {\n for (var i = 0; i < this.drilledItems.length; i++) {\n if (item['levelOrderName'] === this.drilledItems[i]['name']) {\n if (item['groupIndex'] === 0 && item['parent'][item['groupName']] instanceof Array) {\n item['isDrilled'] = !(item['isDrilled']);\n if (!item['isDrilled']) {\n newDrillItem = item['parent'];\n }\n else {\n newDrillItem[item['groupName']] = [item];\n }\n }\n else {\n item['isDrilled'] = false;\n item['parent']['isDrilled'] = true;\n item = item['parent'];\n newDrillItem[item['groupName']] = [item];\n }\n this.drilledItems.splice(i, 1);\n i -= 1;\n break;\n }\n else if (i === this.drilledItems.length - 1) {\n item['isDrilled'] = true;\n newDrillItem[item['groupName']] = [item];\n }\n }\n }\n else {\n item['isDrilled'] = true;\n newDrillItem[item['groupName']] = [item];\n }\n startEvent = { cancel: false, name: drillStart, treemap: this, item: newDrillItem, element: targetEle };\n this.trigger(drillStart, startEvent);\n if (!startEvent.cancel) {\n if (document.getElementById(layoutID)) {\n document.getElementById(layoutID).remove();\n }\n totalRect = extend({}, this.areaRect, totalRect, true);\n this.layout.calculateLayoutItems(newDrillItem, totalRect);\n this.layout.renderLayoutItems(newDrillItem);\n }\n endEvent = { cancel: false, name: drillEnd, treemap: this, renderItems: this.layout.renderItems };\n this.trigger(drillEnd, endEvent);\n if (process) {\n this.drilledItems.push({ name: item['levelOrderName'], data: item });\n }\n }\n }\n this.notify(Browser.touchStartEvent, e);\n };\n TreeMap.prototype.mouseMoveOnTreeMap = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var eventArgs;\n var item;\n var moveArgs = { cancel: false, name: mouseMove, treemap: this, mouseEvent: e };\n this.trigger(mouseMove, moveArgs);\n var childItems;\n if (targetId.indexOf('_Item_Index') > -1) {\n item = this.layout.renderItems[parseFloat(targetId.split('_')[6])];\n childItems = findChildren(item)['values'];\n this.element.style.cursor = (!item['isLeafItem'] && childItems && childItems.length > 0 && this.enableDrillDown) ?\n 'pointer' : 'auto';\n eventArgs = { cancel: false, name: itemMove, treemap: this, item: item, mouseEvent: e };\n this.trigger(itemMove, eventArgs);\n }\n this.notify(Browser.touchMoveEvent, e);\n };\n TreeMap.prototype.mouseEndOnTreeMap = function (e) {\n this.notify(Browser.touchEndEvent, e);\n };\n TreeMap.prototype.mouseLeaveOnTreeMap = function (e) {\n if (this.treeMapTooltipModule) {\n this.treeMapTooltipModule.removeTooltip();\n }\n if (this.treeMapLegendModule) {\n this.treeMapLegendModule.removeInteractivePointer();\n }\n removeClassNames(document.getElementsByClassName('treeMapHighLight'), 'treeMapHighLight', this);\n };\n /**\n * To provide the array of modules needed for maps rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n TreeMap.prototype.requiredModules = function () {\n var modules = [];\n if (this.tooltipSettings.visible) {\n modules.push({\n member: 'treeMapTooltip',\n args: [this]\n });\n }\n if (this.highlightSettings.enable) {\n modules.push({\n member: 'treeMapHighlight',\n args: [this]\n });\n }\n if (this.selectionSettings.enable) {\n modules.push({\n member: 'treeMapSelection',\n args: [this]\n });\n }\n if (this.legendSettings.visible) {\n modules.push({\n member: 'treeMapLegend',\n args: [this]\n });\n }\n return modules;\n };\n TreeMap.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 render = true;\n break;\n }\n }\n if (render) {\n this.createSvg();\n this.render();\n }\n };\n /**\n * Get component name\n */\n TreeMap.prototype.getModuleName = function () {\n return 'treemap';\n };\n /**\n * To destroy the treemap control.\n */\n TreeMap.prototype.destroy = function () {\n this.unWireEVents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n TreeMap.prototype.getPersistData = function () {\n return '';\n };\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Border)\n ], TreeMap.prototype, \"border\", void 0);\n __decorate([\n Complex({}, Margin)\n ], TreeMap.prototype, \"margin\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"background\", void 0);\n __decorate([\n Property('Material')\n ], TreeMap.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, TitleSettings)\n ], TreeMap.prototype, \"titleSettings\", void 0);\n __decorate([\n Property('Squarified')\n ], TreeMap.prototype, \"layoutType\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"weightValuePath\", void 0);\n __decorate([\n Property('')\n ], TreeMap.prototype, \"rangeColorValuePath\", void 0);\n __decorate([\n Property('')\n ], TreeMap.prototype, \"equalColorValuePath\", void 0);\n __decorate([\n Property([])\n ], TreeMap.prototype, \"palette\", void 0);\n __decorate([\n Property(false)\n ], TreeMap.prototype, \"enableDrillDown\", void 0);\n __decorate([\n Complex({}, InitialDrillSettings)\n ], TreeMap.prototype, \"initialDrillDown\", void 0);\n __decorate([\n Complex({}, LeafItemSettings)\n ], TreeMap.prototype, \"leafItemSettings\", void 0);\n __decorate([\n Collection([], LevelSettings)\n ], TreeMap.prototype, \"levels\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], TreeMap.prototype, \"highlightSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeMap.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], TreeMap.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], TreeMap.prototype, \"legendSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeMap.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], TreeMap.prototype, \"tabIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"format\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemRendering\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"drillStart\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"drillEnd\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemSelected\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemHighlight\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"tooltipRendering\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemClick\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemMove\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"mouseMove\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"resize\", void 0);\n TreeMap = __decorate([\n NotifyPropertyChanges\n ], TreeMap);\n return TreeMap;\n}(Component));\nexport { TreeMap };\n","import { findChildren, Location, Rect, Size, measureText, TextOption, PathOption, RectOption, drawSymbol, orderByArea } from '../utils/helper';\nimport { Browser, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { renderTextElement, textTrim } from '../utils/helper';\nimport { legendItemRendering } from '../model/constants';\n/**\n * Legend module class\n */\nvar TreeMapLegend = /** @class */ (function () {\n function TreeMapLegend(treemap) {\n this.page = 0;\n this.legendBorderRect = new Rect(0, 0, 0, 0);\n this.currentPage = 0;\n this.heightIncrement = 0;\n this.widthIncrement = 0;\n this.textMaxWidth = 0;\n this.legendItemRect = new Rect(0, 0, 0, 0);\n this.treemap = treemap;\n this.addEventListener();\n }\n /**\n * method for legend\n */\n TreeMapLegend.prototype.renderLegend = function () {\n this.legendRenderingCollections = [];\n this.legendCollections = [];\n this.legendNames = [];\n this.totalPages = [];\n this.gradientCount = 1;\n this.defsElement = this.treemap.renderer.createDefs();\n this.treemap.svgObject.appendChild(this.defsElement);\n this.calculateLegendBounds();\n this.drawLegend();\n };\n /* tslint:disable:no-string-literal */\n /* tslint:disable-next-line:max-func-body-length */\n TreeMapLegend.prototype.calculateLegendBounds = function () {\n var _this = this;\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n this.findColorMappingLegendItems(treemap.levelsOfData[0]);\n if (this.treemap.palette.length > 0 && this.legendCollections.length === 0) {\n this.findPaletteLegendItems(this.treemap.levelsOfData[0], 'Parent');\n }\n if (this.legendCollections.length > 0) {\n var defaultSize = 25;\n var textPadding = 10;\n var position = legend.position;\n var legendTitle = legend.title.text;\n var titleTextStyle = legend.titleStyle;\n var legendMode = legend.mode;\n var shapeX = 0;\n var shapeY = 0;\n var textX = 0;\n var textY = 0;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapeLocation = [];\n var textLocation = [];\n var orientation_1 = (legend.orientation === 'None') ? ((position === 'Top' || position === 'Bottom')\n ? 'Horizontal' : 'Vertical') : legend.orientation;\n var leftPadding = 10;\n var topPadding = 10;\n var spacing = 10;\n var legendWidth = (legend.width.length > 1) ? (legend.width.indexOf('%') > -1) ? (treemap.availableSize.width / 100)\n * parseFloat(legend.width) : parseFloat(legend.width) : null;\n var legendHeight = (legend.height.length > 1) ? (legend.height.indexOf('%') > -1) ?\n (treemap.availableSize.height / 100) * parseFloat(legend.height) : parseFloat(legend.height) : null;\n var legendTitleSize = measureText(legendTitle, titleTextStyle);\n var startX_1 = 0;\n var startY_1 = 0;\n var shapePadding = legend.shapePadding;\n var rectWidth = void 0;\n var rectHeight = void 0;\n var itemTextStyle = legend.textStyle;\n var legendLength = this.legendCollections.length;\n if (legendMode === 'Default') {\n legendWidth = (isNullOrUndefined(legendWidth)) ? treemap.areaRect.width : legendWidth;\n legendHeight = (isNullOrUndefined(legendHeight)) ? treemap.areaRect.height : legendHeight;\n var j = 0;\n for (var i = 0; i < this.legendCollections.length; i++) {\n var legendItem = this.legendCollections[i];\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n var legendTextSize = measureText(legendItem['legendName'], legend.textStyle);\n this.textMaxWidth = Math.max(this.textMaxWidth, legendTextSize.width);\n if (i === 0) {\n startX_1 = shapeX = (leftPadding + (shapeWidth / 2));\n startY_1 = 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 (orientation_1 === '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 shapeX = startX_1;\n shapeY = startY_1;\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_1;\n shapeY = startY_1;\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['legendName'],\n Shape: { x: shapeX, y: shapeY },\n Text: { x: textX, y: textY },\n Fill: legendItem['legendFill'],\n Data: legendItem['legendData'],\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 startX_1 = legendRect.x;\n startY_1 = legendRect.y;\n }\n _this.widthIncrement = Math.max(_this.widthIncrement, Math.abs(startX_1 - (legendRect.x + legendRect.width)));\n _this.heightIncrement = Math.max(_this.heightIncrement, Math.abs(startY_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 else {\n var itemTextStyle_1 = legend.textStyle;\n var rectWidth_1;\n var rectHeight_1;\n var legendLength_1 = this.legendCollections.length;\n rectWidth_1 = (orientation_1 === 'Horizontal') ? (isNullOrUndefined(legendWidth)) ? (treemap.areaRect.width / legendLength_1) :\n (legendWidth / legendLength_1) : (isNullOrUndefined(legendWidth)) ? defaultSize : legendWidth;\n rectHeight_1 = (orientation_1 === 'Horizontal') ? (isNullOrUndefined(legendHeight)) ? defaultSize : legendHeight :\n (isNullOrUndefined(legendHeight)) ? (treemap.areaRect.height / legendLength_1) : (legendHeight / legendLength_1);\n startX_1 = 0;\n startY_1 = legendTitleSize.height + spacing;\n var textPadding_1 = 10;\n var placement = legend.labelPosition;\n var itemStartX = 0;\n var itemStartY = 0;\n var labelAction = legend.labelDisplayMode;\n var maxTextHeight = 0;\n var maxTextWidth = 0;\n for (var i = 0; i < this.legendCollections.length; i++) {\n startX_1 = (orientation_1 === 'Horizontal') ? (startX_1 + rectWidth_1) : startX_1;\n startY_1 = (orientation_1 === 'Horizontal') ? startY_1 : (startY_1 + rectHeight_1);\n var legendText = this.legendCollections[i]['legendName'];\n var itemTextSize = new Size(0, 0);\n if (labelAction === 'None') {\n itemTextSize = measureText(legendText, itemTextStyle_1);\n }\n else if (labelAction === 'Trim') {\n legendText = textTrim((orientation_1 === 'Horizontal' ? rectWidth_1 : rectHeight_1), legendText, itemTextStyle_1);\n itemTextSize = measureText(legendText, itemTextStyle_1);\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 (orientation_1 === 'Horizontal') {\n textX = startX_1 + (rectWidth_1 / 2);\n textY = (placement === 'After') ? (startY_1 + rectHeight_1 + (itemTextSize.height / 2)) + textPadding_1 :\n (startY_1 - textPadding_1);\n }\n else {\n textX = (placement === 'After') ? startX_1 - (itemTextSize.width / 2) - textPadding_1\n : (startX_1 + rectWidth_1 + itemTextSize.width / 2) + textPadding_1;\n textY = startY_1 + (rectHeight_1 / 2) + (itemTextSize.height / 4);\n }\n }\n if (i === 0) {\n itemStartX = (orientation_1 === 'Horizontal') ? startX_1 : (placement === 'After') ?\n textX - (itemTextSize.width / 2) : startX_1;\n itemStartY = (orientation_1 === 'Horizontal') ? (placement === 'After') ? startY_1 :\n textY - (itemTextSize.height / 2) : startY_1;\n }\n if (i === legendLength_1 - 1) {\n legendWidth = (orientation_1 === 'Horizontal') ? Math.abs((startX_1 + rectWidth_1) - itemStartX) :\n (rectWidth_1 + maxTextWidth + textPadding_1);\n legendHeight = (orientation_1 === 'Horizontal') ? (rectHeight_1 + (maxTextHeight / 2) + textPadding_1) :\n Math.abs((startY_1 + rectHeight_1) - itemStartY);\n }\n this.legendRenderingCollections.push({\n fill: this.legendCollections[i]['legendFill'], x: startX_1, y: startY_1,\n width: rectWidth_1, height: rectHeight_1, element: this.legendCollections[i]['gradientElement'],\n text: legendText, textX: textX, textY: textY,\n textWidth: itemTextSize.width, textHeight: itemTextSize.height,\n data: this.legendCollections[i]['legendData']\n });\n }\n this.legendItemRect = { x: itemStartX, y: itemStartY, width: legendWidth, height: legendHeight };\n }\n }\n };\n TreeMapLegend.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 TreeMapLegend.prototype.findColorMappingLegendItems = function (data) {\n var child = findChildren(data)['values'];\n if (child && child.length > 0) {\n this.calculateLegendItems(child);\n if (this.treemap.levels.length > 0) {\n for (var i = 0; i < child.length; i++) {\n this.findColorMappingLegendItems(child[i]);\n }\n }\n }\n };\n TreeMapLegend.prototype.findPaletteLegendItems = function (data, type) {\n var child = findChildren(data)['values'];\n if (child && child.length > 0) {\n for (var i = 0; i < child.length; i++) {\n this.legendCollections.push({\n legendName: child[i]['name'],\n legendFill: this.treemap.palette[i % this.treemap.palette.length],\n legendData: [],\n itemArea: child[i]['weight']\n });\n }\n this.legendCollections.sort(orderByArea);\n for (var j = 0; j < this.legendCollections.length; j++) {\n this.legendCollections[j]['legendFill'] = this.treemap.palette[j % this.treemap.palette.length];\n }\n }\n };\n TreeMapLegend.prototype.calculateLegendItems = function (data) {\n var isAddData;\n var fill;\n var rangeValue;\n var currentData;\n var legendText;\n var itemValue;\n var isLeafItem;\n var colorMapProcess = false;\n var colorMapping;\n var groupIndex;\n var leaf = this.treemap.leafItemSettings;\n var levels = this.treemap.levels;\n var equalValue;\n var position = this.treemap.legendSettings.position;\n var gradientElement;\n var x2;\n var y2;\n for (var i = 0; i < data.length; i++) {\n currentData = data[i]['data'];\n groupIndex = data[i]['groupIndex'];\n isLeafItem = (this.treemap.levels.length === 0 || groupIndex === this.treemap.levels.length);\n colorMapping = isLeafItem ? leaf.colorMapping : levels[groupIndex].colorMapping;\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n rangeValue = Number(currentData[this.treemap.rangeColorValuePath]);\n equalValue = currentData[this.treemap.equalColorValuePath];\n colorMap.value = !isNullOrUndefined(colorMap.value) ? colorMap.value.toString() : colorMap.value;\n if (!isNullOrUndefined(colorMap.from) && !isNullOrUndefined(colorMap.to) &&\n rangeValue >= colorMap.from && rangeValue <= colorMap.to) {\n colorMapProcess = true;\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.from + ' - ' + colorMap.to;\n fill = isNullOrUndefined(colorMap.color) ? fill : colorMap.color;\n isAddData = this.isAddNewLegendData(legendText);\n }\n else if (!isNullOrUndefined(colorMap.value) && equalValue === colorMap.value) {\n colorMapProcess = true;\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.value.toString();\n fill = isNullOrUndefined(colorMap.color) ? fill : colorMap.color;\n isAddData = this.isAddNewLegendData(legendText);\n }\n if (colorMapProcess && colorMap.maxOpacity && colorMap.minOpacity && this.treemap.legendSettings.mode === 'Interactive') {\n var colors = [];\n var gradient = void 0;\n var stop1Color = { colorStop: '0%', color: fill };\n var stop2Color = { colorStop: '100%', color: fill };\n x2 = position === 'Top' || position === 'Bottom' ? '100%' : '0%';\n y2 = position === 'Top' || position === 'Bottom' ? '0%' : '100%';\n colors.push(stop1Color);\n colors.push(stop2Color);\n gradient = {\n id: 'groupIndex_' + groupIndex + '_colorIndex_' + this.gradientCount, x1: '0%', y1: '0%', x2: x2, y2: y2\n };\n gradientElement = this.treemap.renderer.drawGradient('linearGradient', gradient, colors).childNodes[0];\n gradientElement.childNodes[0].setAttribute('stop-opacity', colorMap.minOpacity.toString());\n gradientElement.childNodes[1].setAttribute('stop-opacity', colorMap.maxOpacity.toString());\n this.defsElement.appendChild(gradientElement);\n this.gradientCount++;\n }\n if (isAddData && isAddData['process'] && colorMapProcess) {\n colorMapProcess = false;\n this.legendCollections.push({\n legendName: legendText, legendFill: fill, legendData: [], gradientElement: gradientElement\n });\n this.legendCollections[this.legendCollections.length - 1]['legendData'].push(data[i]);\n }\n else if (colorMapProcess) {\n colorMapProcess = false;\n this.legendCollections[isAddData['value']]['legendData'].push(data[i]);\n }\n }\n }\n };\n TreeMapLegend.prototype.isAddNewLegendData = function (legendText) {\n var newDataProcess;\n var itemValue;\n if (this.legendCollections.length === 0) {\n newDataProcess = true;\n }\n else {\n for (var j = 0; j < this.legendCollections.length; j++) {\n if (legendText === this.legendCollections[j]['legendName']) {\n newDataProcess = false;\n itemValue = j;\n break;\n }\n else if (j === this.legendCollections.length - 1) {\n newDataProcess = true;\n }\n }\n }\n return { process: newDataProcess, value: itemValue };\n };\n /**\n * To draw the legend\n */\n TreeMapLegend.prototype.drawLegend = function () {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var render = treemap.renderer;\n var fill;\n var textOptions;\n var gradientElement;\n var textFont = legend.textStyle;\n this.legendGroup = render.createGroup({ id: treemap.element.id + '_Legend_Group' });\n this.renderLegendBorder();\n this.renderLegendTitle();\n if (legend.mode === 'Default') {\n this.drawLegendItem(this.currentPage);\n }\n else {\n for (var i = 0; i < this.legendRenderingCollections.length; i++) {\n var itemId = treemap.element.id + '_Legend_Index_' + i;\n var textId = treemap.element.id + '_Legend_Index_' + i + '_Text';\n var item = this.legendRenderingCollections[i];\n gradientElement = item['element'];\n fill = gradientElement ? 'url(#' + gradientElement.id + ')' : item['fill'];\n var bounds = new Rect(item['x'], item['y'], item['width'], item['height']);\n var textLocation = new Location(item['textX'], item['textY']);\n var rectOptions = new RectOption(itemId, fill, legend.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 }\n };\n TreeMapLegend.prototype.drawLegendItem = function (page) {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var spacing = 10;\n var shapeSize = new Size(legend.shapeWidth, legend.shapeHeight);\n var textOptions;\n var renderOptions;\n var render = treemap.renderer;\n var shapeBorder = legend.shapeBorder;\n var eventArgs;\n if (page >= 0 && page < this.totalPages.length) {\n if (document.getElementById(this.legendGroup.id)) {\n document.getElementById(this.legendGroup.id).remove();\n }\n var isLineShape = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine' || legend.shape === 'Cross');\n var strokeColor = isLineShape ? isNullOrUndefined(legend.fill) ? '#000000' : legend.fill : shapeBorder.color;\n var strokeWidth = isLineShape ? (shapeBorder.width === 0) ? 1 : shapeBorder.width : shapeBorder.width;\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: treemap.element.id + '_Legend_Index_' + i });\n var legendText = collection['DisplayText'];\n var shapeId = treemap.element.id + '_Legend_Shape_Index_' + i;\n var textId = treemap.element.id + '_Legend_Text_Index_' + i;\n var shapeLocation = collection['Shape'];\n var textLocation = collection['Text'];\n eventArgs = {\n cancel: false, name: legendItemRendering, treemap: treemap, fill: collection['Fill'],\n shape: legend.shape, imageUrl: legend.imageUrl\n };\n var renderOptions_1 = new PathOption(shapeId, eventArgs.fill, strokeWidth, isLineShape ? collection['Fill'] : strokeColor, 1, '');\n legendElement.appendChild(drawSymbol(shapeLocation, eventArgs.shape, shapeSize, eventArgs.imageUrl, renderOptions_1, legendText));\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: treemap.element.id + '_Legend_Paging_Group' });\n var leftPageElement = render.createGroup({ id: treemap.element.id + '_Legend_Left_Paging_Group' });\n var rightPageElement = render.createGroup({ id: treemap.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(treemap.element.id + '_Left_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', leftPath);\n leftPageElement.appendChild(render.drawPath(leftPageOptions));\n var leftRectPageOptions = new RectOption(treemap.element.id + '_Left_Page_Rect', 'transparent', {}, 1, new Rect(leftPageX - (width / 2), (locY - (height * 2)), width * 2, spacing * 2), '');\n leftPageElement.appendChild(render.drawRectangle(leftRectPageOptions));\n this.wireEvents(leftPageElement);\n var rightPageOptions = new PathOption(treemap.element.id + '_Right_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', rightPath);\n rightPageElement.appendChild(render.drawPath(rightPageOptions));\n var rightRectPageOptions = new RectOption(treemap.element.id + '_Right_Page_Rect', 'transparent', {}, 1, new Rect((rightPageX - width), (locY - height), width, spacing), '');\n rightPageElement.appendChild(render.drawRectangle(rightRectPageOptions));\n this.wireEvents(rightPageElement);\n pagingGroup.appendChild(leftPageElement);\n pagingGroup.appendChild(rightPageElement);\n var pageTextOptions = {\n 'id': treemap.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 }\n };\n TreeMapLegend.prototype.renderLegendBorder = function () {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var legendTitle = legend.title.text;\n var spacing = 10;\n var textStyle = legend.titleStyle;\n var textOptions;\n var title = textTrim((this.legendItemRect.width + (spacing * 2)), legendTitle, textStyle);\n var textSize = measureText(title, 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 var renderOptions = new RectOption(treemap.element.id + '_Legend_Border', legend.background, legend.border, 1, this.legendBorderRect, '');\n var legendBorder = treemap.renderer.drawRectangle(renderOptions);\n legendBorder.style.pointerEvents = 'none';\n this.legendGroup.appendChild(legendBorder);\n this.getLegendAlignment(treemap, this.legendBorderRect.width, this.legendBorderRect.height, legend);\n this.legendGroup.setAttribute('transform', 'translate( ' + (this.translate.x + (-(this.legendBorderRect.x))) + ' ' +\n (this.translate.y + (-(this.legendBorderRect.y))) + ' )');\n treemap.svgObject.appendChild(this.legendGroup);\n };\n TreeMapLegend.prototype.renderLegendTitle = function () {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var textStyle = legend.titleStyle;\n var legendTitle = legend.title.text;\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 if (legendTitle) {\n textOptions = new TextOption(treemap.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 };\n /**\n * To rendered the interactive pointer\n */\n TreeMapLegend.prototype.renderInteractivePointer = function (e) {\n var treemap = this.treemap;\n var target = e.target;\n var interactiveId = treemap.element.id + '_Interactive_Legend';\n target = !(e.type.indexOf('touch') > -1) ? target :\n document.elementFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY);\n var targetItem;\n var legend = treemap.legendSettings;\n if (target.id.indexOf('_Item_Index') > -1 && legend.visible && this.legendRenderingCollections.length > 0) {\n var currentData = void 0;\n var legendRect = void 0;\n var rect = void 0;\n var data = void 0;\n var fill = void 0;\n var stroke = void 0;\n var strokeWidth = void 0;\n var legendElement = void 0;\n targetItem = treemap.layout.renderItems[parseFloat(target.id.split('_')[6])];\n var svgRect = treemap.svgObject.getBoundingClientRect();\n for (var i = 0; i < this.legendCollections.length; i++) {\n currentData = this.legendCollections[i];\n legendElement = document.getElementById(treemap.element.id + '_Legend_Index_' + i);\n legendRect = legendElement.getBoundingClientRect();\n var rect_1 = 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['legendData'])) {\n data = currentData['legendData'];\n for (var j = 0; j < data.length; j++) {\n if (data[j]['levelOrderName'] === targetItem['levelOrderName']) {\n this.drawInteractivePointer(legend, fill, stroke, interactiveId, strokeWidth, rect_1);\n break;\n }\n }\n }\n }\n }\n else {\n this.removeInteractivePointer();\n }\n };\n TreeMapLegend.prototype.drawInteractivePointer = 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.treemap.svgObject.appendChild(this.treemap.renderer.drawPath(pathOptions));\n };\n TreeMapLegend.prototype.getLegendAlignment = function (treemap, width, height, legend) {\n var x;\n var y;\n var spacing = 10;\n var areaX = treemap.areaRect.x;\n var areaY = treemap.areaRect.y;\n var areaHeight = treemap.areaRect.height;\n var areaWidth = treemap.areaRect.width;\n var totalWidth = treemap.availableSize.width;\n var totalHeight = treemap.availableSize.height;\n if (legend.position === 'Float') {\n this.translate = legend.location;\n }\n else {\n switch (legend.position) {\n case 'Top':\n case 'Bottom':\n treemap.areaRect.height = (areaHeight - height);\n x = (totalWidth / 2) - (width / 2);\n y = (legend.position === 'Top') ? areaY : (areaY + treemap.areaRect.height);\n treemap.areaRect.y = (legend.position === 'Top') ? areaY + height + spacing : areaY;\n break;\n case 'Left':\n case 'Right':\n treemap.areaRect.width = (areaWidth - width);\n x = (legend.position === 'Left') ? areaX : areaX + treemap.areaRect.width;\n y = (totalHeight / 2) - (height / 2);\n treemap.areaRect.x = (legend.position === 'Left') ? areaX + width : areaX;\n break;\n }\n switch (legend.alignment) {\n case 'Near':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = treemap.areaRect.x;\n }\n else {\n y = treemap.areaRect.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 this.translate = new Location(x, y);\n }\n };\n TreeMapLegend.prototype.mouseUpHandler = function (e) {\n this.renderInteractivePointer(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeInteractivePointer.bind(this), 3000);\n };\n /**\n * To remove the interactive pointer\n */\n TreeMapLegend.prototype.removeInteractivePointer = function () {\n if (document.getElementById(this.treemap.element.id + '_Interactive_Legend')) {\n document.getElementById(this.treemap.element.id + '_Interactive_Legend').remove();\n }\n };\n /**\n * To change the next page\n */\n TreeMapLegend.prototype.changeNextPage = function (e) {\n this.currentPage = (e.target.id.indexOf('_Left_Page_') > -1) ? (this.currentPage - 1) :\n (this.currentPage + 1);\n this.drawLegend();\n };\n /**\n * Wire events for event handler\n */\n TreeMapLegend.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.changeNextPage, this);\n };\n /**\n * To add the event listener\n */\n TreeMapLegend.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchMoveEvent, this.renderInteractivePointer, this);\n this.treemap.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * To remove the event listener\n */\n TreeMapLegend.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchMoveEvent, this.renderInteractivePointer);\n this.treemap.off(Browser.touchEndEvent, this.mouseUpHandler);\n };\n /**\n * Get module name.\n */\n TreeMapLegend.prototype.getModuleName = function () {\n return 'treeMapLegend';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n TreeMapLegend.prototype.destroy = function (treemap) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return TreeMapLegend;\n}());\nexport { TreeMapLegend };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { itemHighlight, itemSelected } from '../model/constants';\nimport { findHightLightItems, removeClassNames, applyOptions } from '../utils/helper';\n/**\n * Performing treemap highlight\n */\nvar TreeMapHighlight = /** @class */ (function () {\n function TreeMapHighlight(treeMap) {\n this.treemap = treeMap;\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\n TreeMapHighlight.prototype.mouseMove = function (e) {\n var treemap = this.treemap;\n var processHighlight;\n var targetId = e.target.id;\n var eventArgs;\n var items = [];\n var highlight = this.treemap.highlightSettings;\n var item;\n var highLightElements = [];\n var process;\n var treeMapElement;\n var element;\n var orders;\n if (targetId.indexOf('_Item_Index') > -1) {\n if (this.highLightId !== targetId) {\n treeMapElement = document.getElementById(treemap.element.id + '_TreeMap_' + treemap.layoutType + '_Layout');\n var selectionElements = document.getElementsByClassName('treeMapSelection');\n item = this.treemap.layout.renderItems[parseFloat(targetId.split('_')[6])];\n orders = findHightLightItems(item, [], highlight.mode, treemap);\n for (var i = 0; i < treeMapElement.childElementCount; i++) {\n element = treeMapElement.childNodes[i];\n process = true;\n item = treemap.layout.renderItems[element.id.split('_')[6]];\n for (var j = 0; j < selectionElements.length; j++) {\n if (element.id === selectionElements[j].id) {\n process = false;\n break;\n }\n }\n if (orders.indexOf(item['levelOrderName']) > -1 && process) {\n highLightElements.push(element);\n items.push(item);\n }\n }\n removeClassNames(document.getElementsByClassName('treeMapHighLight'), 'treeMapHighLight', treemap);\n for (var k = 0; k < highLightElements.length; k++) {\n element = highLightElements[k];\n applyOptions(element.childNodes[0], { border: highlight.border, fill: highlight.fill, opacity: highlight.opacity });\n element.classList.add('treeMapHighLight');\n this.highLightId = targetId;\n }\n eventArgs = { cancel: false, name: itemHighlight, treemap: treemap, items: items, elements: highLightElements };\n treemap.trigger(itemHighlight, eventArgs);\n }\n else {\n processHighlight = false;\n }\n }\n else {\n removeClassNames(document.getElementsByClassName('treeMapHighLight'), 'treeMapHighLight', treemap);\n processHighlight = false;\n }\n return processHighlight;\n };\n /**\n * To bind events for highlight\n */\n TreeMapHighlight.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchMoveEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for highlight\n */\n TreeMapHighlight.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchMoveEvent, this.mouseMove);\n };\n /**\n * Get module name.\n */\n TreeMapHighlight.prototype.getModuleName = function () {\n return 'treeMapHighlight';\n };\n /**\n * To destroy the hightlight.\n * @return {void}\n * @private\n */\n TreeMapHighlight.prototype.destroy = function (treeMap) {\n this.removeEventListener();\n };\n return TreeMapHighlight;\n}());\nexport { TreeMapHighlight };\n/**\n * Performing treemap selection\n */\nvar TreeMapSelection = /** @class */ (function () {\n function TreeMapSelection(treeMap) {\n this.treemap = treeMap;\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\n /**\n * Mouse down event in selection\n */\n TreeMapSelection.prototype.mouseDown = function (e) {\n var targetEle = e.target;\n var eventArgs;\n var treemap = this.treemap;\n var items = [];\n var targetId = targetEle.id;\n var item;\n var selectionElements = [];\n var opacity;\n var treeMapElement;\n var element;\n var orders;\n var selection = treemap.selectionSettings;\n var layoutID = treemap.element.id + '_TreeMap_' + treemap.layoutType + '_Layout';\n if (targetId.indexOf('_Item_Index') > -1) {\n e.preventDefault();\n if (this.selectionId !== targetId) {\n treeMapElement = document.getElementById(layoutID);\n item = treemap.layout.renderItems[parseFloat(targetId.split('_')[6])];\n orders = findHightLightItems(item, [], selection.mode, treemap);\n for (var i = 0; i < treeMapElement.childElementCount; i++) {\n element = treeMapElement.childNodes[i];\n item = treemap.layout.renderItems[element.id.split('_')[6]];\n if (orders.indexOf(item['levelOrderName']) > -1) {\n selectionElements.push(element);\n items.push(item);\n }\n }\n removeClassNames(document.getElementsByClassName('treeMapSelection'), 'treeMapSelection', treemap);\n this.selectionId = targetId;\n var highLightElements = document.getElementsByClassName('treeMapHighLight');\n for (var k = 0; k < selectionElements.length; k++) {\n element = selectionElements[k];\n if (highLightElements.length > 0) {\n for (var j = 0; j < highLightElements.length; j++) {\n if (highLightElements[j].id === element.id) {\n highLightElements[j].classList.remove('treeMapHighLight');\n }\n applyOptions(element.childNodes[0], { border: selection.border, fill: selection.fill, opacity: selection.opacity });\n element.classList.add('treeMapSelection');\n }\n }\n else {\n applyOptions(element.childNodes[0], { border: selection.border, fill: selection.fill, opacity: selection.opacity });\n element.classList.add('treeMapSelection');\n }\n eventArgs = { cancel: false, name: itemSelected, treemap: treemap, items: items, elements: selectionElements };\n treemap.trigger(itemSelected, eventArgs);\n }\n }\n else {\n removeClassNames(document.getElementsByClassName('treeMapSelection'), 'treeMapSelection', treemap);\n this.selectionId = '';\n }\n }\n else {\n removeClassNames(document.getElementsByClassName('treeMapSelection'), 'treeMapSelection', treemap);\n this.selectionId = '';\n }\n };\n /**\n * To bind events for selection\n */\n TreeMapSelection.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchStartEvent, this.mouseDown, this);\n };\n /**\n * To unbind events for selection\n */\n TreeMapSelection.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchStartEvent, this.mouseDown);\n };\n /**\n * Get module name.\n */\n TreeMapSelection.prototype.getModuleName = function () {\n return 'treeMapSelection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n TreeMapSelection.prototype.destroy = function (treeMap) {\n this.removeEventListener();\n };\n return TreeMapSelection;\n}());\nexport { TreeMapSelection };\n","import { Tooltip } from '@syncfusion/ej2-svg-base';\nimport { Browser, createElement } from '@syncfusion/ej2-base';\nimport { getMousePosition, textFormatter, formatValue } from '../utils/helper';\nimport { tooltipRendering } from '../model/constants';\n/**\n * Render Tooltip\n */\nvar TreeMapTooltip = /** @class */ (function () {\n function TreeMapTooltip(treeMap) {\n this.treemap = treeMap;\n this.tooltipSettings = this.treemap.tooltipSettings;\n this.tooltipId = this.treemap.element.id + '_TreeMapTooltip';\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\n TreeMapTooltip.prototype.renderTooltip = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var tootipArgs;\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].pageX;\n pageY = touchArg.changedTouches[0].pageY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n var formatFunction;\n var value;\n var targetId = target.id;\n var item = {};\n var tooltipEle;\n var location;\n var toolTipHeader;\n var toolTipData = {};\n var tooltipContent = [];\n var markerFill;\n if (targetId.indexOf('_Item_Index') > -1) {\n item = this.treemap.layout.renderItems[parseFloat(targetId.split('_')[6])];\n toolTipHeader = item['name'];\n value = item['weight'];\n this.currentTime = new Date().getTime();\n toolTipData = item['data'];\n markerFill = item['options']['fill'];\n tooltipContent = [textFormatter(this.tooltipSettings.format, toolTipData, this.treemap) ||\n this.treemap.weightValuePath.toString() + ' : ' + formatValue(value, this.treemap)];\n if (document.getElementById(this.tooltipId)) {\n tooltipEle = document.getElementById(this.tooltipId);\n }\n else {\n tooltipEle = createElement('div', {\n id: this.treemap.element.id + '_TreeMapTooltip',\n className: 'EJ2-TreeMap-Tooltip',\n styles: 'position: absolute;pointer-events:none;'\n });\n document.getElementById(this.treemap.element.id + '_Secondary_Element').appendChild(tooltipEle);\n }\n location = getMousePosition(pageX, pageY, this.treemap.svgObject);\n location.y = (this.tooltipSettings.template) ? location.y + 10 : location.y;\n tootipArgs = {\n cancel: false, name: tooltipRendering, item: item,\n options: {\n location: location, text: tooltipContent, data: toolTipData,\n textStyle: this.tooltipSettings.textStyle, template: this.tooltipSettings.template\n },\n treemap: this.treemap,\n element: target, eventArgs: e\n };\n this.treemap.trigger(tooltipRendering, tootipArgs);\n if (!tootipArgs.cancel) {\n this.svgTooltip = new Tooltip({\n enable: true,\n header: '',\n data: tootipArgs.options['data'],\n template: tootipArgs.options['template'],\n content: tootipArgs.options['text'],\n shapes: [],\n location: tootipArgs.options['location'],\n palette: [markerFill],\n areaBounds: this.treemap.areaRect,\n textStyle: tootipArgs.options['textStyle'],\n theme: this.treemap.theme\n });\n this.svgTooltip.appendTo(tooltipEle);\n }\n else {\n this.removeTooltip();\n }\n }\n else {\n this.removeTooltip();\n }\n };\n TreeMapTooltip.prototype.mouseUpHandler = function (e) {\n this.renderTooltip(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeTooltip.bind(this), 2000);\n };\n TreeMapTooltip.prototype.removeTooltip = function () {\n if (document.getElementsByClassName('EJ2-TreeMap-Tooltip').length > 0) {\n document.getElementsByClassName('EJ2-TreeMap-Tooltip')[0].remove();\n }\n };\n /**\n * To bind events for tooltip module\n */\n TreeMapTooltip.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchMoveEvent, this.renderTooltip, this);\n this.treemap.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * To unbind events for tooltip module\n */\n TreeMapTooltip.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchMoveEvent, this.renderTooltip);\n this.treemap.off(Browser.touchEndEvent, this.mouseUpHandler);\n };\n /**\n * Get module name.\n */\n TreeMapTooltip.prototype.getModuleName = function () {\n return 'treeMapTooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n TreeMapTooltip.prototype.destroy = function (treeMap) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return TreeMapTooltip;\n}());\nexport { TreeMapTooltip };\n","import * as index from '@syncfusion/ej2-treemap';\nindex.TreeMap.Inject( index.TreeMapTooltip,index.TreeMapLegend,index.TreeMapHighlight,index.TreeMapSelection);\nexport * from '@syncfusion/ej2-treemap';\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","indexOf","Array","isArray","extend","copied","first","second","deep","result","arguments","_loop_1","arguments_1","obj1","forEach","clone","src","copy","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","args","clearTimeout","setTimeout","compareElementParent","child","parent","node","document","parentNode","throwError","message","Error","e","stack","print","element","printWindow","div","createElement","links","slice","call","getElementsByTagName","querySelectorAll","reference","open","appendChild","cloneNode","len","outerHTML","write","innerHTML","close","focus","interval","setInterval","ready","clearInterval","formatUnit","getInstance","component","elem","querySelector","instances","_a","inst","uniqueID","tagName","properties","SVG_REG","test","createElementNS","className","id","styles","setAttribute","attrs","attributes","addClass","elements","classes","classList","getClassList","ele","_b","classList_1","contains","add","removeClass","classList_2","remove","push","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","docFrag","createDocumentFragment","insertBefore","firstElementChild","append","detach","removeChild","EventHandler","clearEvents","select","selector","context","selectAll","closest","el","nodeType","matches","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","getObject","instance","curKey","defaultValue","type","hasOwnProperty","getObjectArray","isSetter","isFactory","curType","setProperties","propertyGetter","Property","target","propertyDescriptor","set","newValue","oldVal","saveChanges","propertySetter","get","enumerable","configurable","defineProperty","addPropertyCollection","Complex","complexSetter","complexGetter","ComplexFactory","complexFactorySetter","complexFactoryGetter","Collection","oldValueCollection","newValCollection","complexArraySetter","defCollection","complexArrayGetter","CollectionFactory","complexArrayFactorySetter","complexArrayFactoryGetter","Event","eventDescriptor","oldValue","finalContext","getParentContext","prefix","NotifyPropertyChanges","classConstructor","propertyType","propList","props","complexProps","colProps","events","propNames","complexPropNames","colPropNames","eventNames","propertyName","getBuilderProperties","builderObject","propCollections","isPropertyArray","rex","prop","childType","tempValue","_c","curText","rippleEffect","rippleOptions","done","rippleModel","ignore","rippleFlag","isCenterRipple","duration","getRippleModel","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","Browser","isPointer","removeAttribute","offset","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","Math","max","abs","left","right","top","bottom","radius","sqrt","diameter","x","y","rippleElement","toString","getComputedStyle","getPropertyValue","transform","removeRipple","eventArgs","rippleElements","opacity","getElementsByClassName","setCulture","cultureName","defaultCulture","onIntlChange","notify","locale","getNumericObject","numObject","IntlBase","getDependables","cldrData","mapper","dateObject","numSystem","symbPattern","pattern","getSymbolPattern","getFormatData","dateSeparator","getDateSeparator","getDefaultDateObject","compile","template","helper","fnCode","str","varCOunt","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_SVG","childNodes","HAS_ROW","wrapperInitialize","tag","WRAPPER","role","ejInstance","input","wrapper","aria-checked","index","nodeName","nodeValue","getTextNode","childnode","destroy","ejInst","checked","preRender","proxy","control","moduleName","getAttribute","createCheckBox","enableRipple","options","cssClass","enableRtl","rippleSpan","frameSpan","label","labelSpan","rippleMouseHandler","event_1","createEvent","initEvent","dispatchEvent","calculateRelativeBasedPosition","anchor","fixedElement","anchorPos","tempAnchor","offsetParent","position","offsetLeft","offsetTop","parentElement","calculatePosition","currentElement","positionX","positionY","targetValues","popupRect","fixedParent","parentDocument","ownerDocument","posX","posY","pos","elementRect","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","updatePosition","toLowerCase","getBodyScrollTop","getBodyScrollLeft","height","width","fit","viewPortElement","axis","X","Y","elemData","targetContainer","containerWidth","getTargetContainerWidth","getViewPortWidth","containerLeft","ContainerLeft","containerRight","ContainerRight","overLeft","overRight","containerHeight","getTargetContainerHeight","getViewPortHeight","containerTop","ContainerTop","containerBottom","ContainerBottom","overTop","overBottom","isCollide","elemOffset","yAxis","topCollideCheck","xAxis","leftCollideCheck","topSide","rightSide","leftSide","bottomSide","flip","tEdge","TL","TR","BL","BR","eEdge","edge","updateElementData","setPosition","leftFlip","topFlip","setPopup","eStatus","deepCheck","collideSide","getTargetContainerLeft","getTargetContainerTop","innerHeight","innerWidth","getScrollableParent","eleStyle","scrollParents","overflowRegex","parentStyle","overflow","overflowY","overflowX","getZindexPartial","parentZindex","defaultView","childrenZindex","children","isEqualNode","siblingsZindex","finalValue","concat","createSpinner","internalCreateElement","makeElement","container","spinnerContainer","CLS_SPINWRAP","spinnerInnerContainer","CLS_SPININWRAP","wrap","inner_wrap","create_spinner_container","spinTemplate","theme","getTheme","defaultSize","DEFT_MAT_WIDTH","DEFT_FAB_WIDTH","DEFT_BOOT_WIDTH","parseFloat","calculateRadius","setTheme","labelEle","CLS_SPINLABEL","textContent","createLabel","CLS_SPINTEMPLATE","replaceContent","spinCSSClass","CLS_HIDESPIN","createMaterialSpinner","random_generator","globalTimeOut","timeOut","innerContainer","svgMaterial","CLS_MATERIALSPIN","matCirclePath","CLS_SPINCIRCLE","firstChild","create_material_element","svg","path","strokeSize","getStrokeSize","transformOrigin","drawArc","PI","getDashOffset","mat_calculate_attributes","create_fabric_element","CLS_FABRICSPIN","fb_calculate_attributes","createFabricSpinner","svgBoot","CLS_BOOTSPIN","item","bootCircle","defaultRadius","create_bootstrap_element","startArc","defineArcPoints","circleEle","boot_calculate_attributes","createBootstrapSpinner","CLS_HIGHCONTRASTSPIN","createHighContrastSpinner","generateSeries","begin","stop","formSeries","series","end","count","increment","toFixed","random","combine","charAt","floor","innerCon","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","CLS_SPINARC","animateMaterial","spinnerInfo","easing","mat_animation","currentTime","min","Date","getTime","startTime","updatePath","change","globalInfo","previousId","getSize","rotate","createCircle","easeAnimation","current","timestamp","timecount","innerConainer","trgClass","centerX","centerY","circle","join","defineCircle","endArc","defineArc","angle","radians","cos","sin","showSpinner","showHideSpinner","isHide","spinnerWrap","inner","CLS_SHOWSPIN","svgEle","isAnimate","globalObject","globalVariables","timeOutVar","startMatAnimate","boot_animate","rotation","animateBootstrap","hideSpinner","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","maskInputHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","enabled","bindClearEvent","unwireEvents","showClearButton","inputObj","clearButton","resetHandler","preventDefault","redoCollec","startIndex","selectionStart","endIndex","selectionEnd","triggerMaskChangeEvent","setSelectionRange","unstrippedValue","strippedValue","maskValues","k","checkMask","maskValue","regExpCollec","focusEventArgs","trigger","isFocus","isDevice","info","version","isIos","placeholder","floatLabelType","labelElement","TOPLABEL","sIndex_1","eIndex_1","oldValue_1","_callPasteHandler","maskKeyPress","validateValue","i_1","preValue_1","sIndex_2","eIndex","undoCollec","value_1","ctrlKey","keyCode","removeMaskInputValues","addedValues","preEleVal","val","prevValue","startValue","collec","splice","mobileRemoveFunction","sIndex","autoFillMaskInputValues","isRemove","oldEventVal","isDeleted","initStartIndex","initEndIndex","curMask","multipleDel","preValue","prompt_1","elementValue","code","String","fromCharCode","isIosInvalid","changeEventArgs","isInitial","maskedValue","isInteraction","removeMaskError","val_1","startIndex_1","isSpace","isAndroid","preventUnsupportedValues","temp_1","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","curVal","caseCount","toUpperCase","addMaskErrorClass","sIdx","idx","ctrl","chkSupport","timer","INPUTGROUP","FLOATINPUT","ERROR","newVal","BOTTOMLABEL","Input","getMaskInput","UTILMASK","inputEle","regularExpressions","getUtilMaskEle","getModel","model","getFieldValues","dataItem","fields","fieldData","isHeader","dataField","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","getScrollbarThemeColor","scrollStyle","backRect","thumb","circleHover","arrow","grip","arrowHover","backRectBorder","measureText","text","font","htmlObject","getElementById","fontSize","size","fontWeight","fontStyle","fontFamily","whiteSpace","lineHeight","Size","clientWidth","clientHeight","sort","isDescending","sortData","a","b","rotateTextSize","chart","box","renderer","SvgRenderer","font-size","font-style","font-family","font-weight","text-anchor","createText","delayRedraw","redraw","svgObject","removeElement","getElement","logBase","base","log","showTooltip","areaWidth","isTouch","tooltip","inside","range","withIn","logWithIn","valueType","withInRange","previousPoint","currentPoint","nextPoint","mX2","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","labelPlacement","CoefficientToVector","valueToPolarCoefficient","primaryXAxis","startAngle","clipRect","indexFinder","isPoint","ids","Index","parseInt","coefficient","delta","dateTimeInterval","visibleLabels","createTooltip","createZoomingLabels","isVertical","arrowLocation","direction","opposedPosition","chartRect","availableSize","scrollBarHeight","zoomingScrollBar","endLabel","startLabel","labelStyle","findDirection","Rect","drawPath","PathOption","themeStyle","textElement","TextOption","color","withInBounds","bounds","getValueXByPoint","getValueYByPoint","findClipRect","requireInvertedAxis","firstToLowerCase","substr","getMinPointsDelta","seriesCollection","xValues","minVal","seriesMin","minDelta","Number","MAX_VALUE","visible","name","xAxisName","points","map","xMin","xMax","getAnimationFunction","effect","functionName","linear","endValue","markerAnimate","pointIndex","isLabel","Animation","animate","progress","timeStamp","pathAnimation","previousDirection","currentDireciton","c","startDirections","splitDirections","endDirections","startPath","endPath","directions","appendClipElement","clipPath","clipElement","redrawElement","def","createDefs","triggerLabelRender","tempInterval","argsData","cancel","axisLabelRender","text_1","textTrim","maximumLabelWidth","VisibleLabels","setRange","minimum","maximum","getActualDesiredIntervalsCount","orientation","desiredIntervals","desiredIntervalsCount","maximumLabels","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","appendChildElement","existChild","animateRedrawElement","replaceChild","getDraggedRectLocation","x1","y1","x2","y2","checkBounds","getLabelText","labelFormat","customLabelFormat","seriesType","high","low","median","upperQuartile","lowerQuartile","outliers","liers","format","stopTimer","collections","currentRect","some","isOverlap","containsRect","calculateRect","textSize","margin","convertToHexCode","componentToHex","r","g","hex","convertHexToColor","exec","ColorValue","colorNameToHex","isRGBValue","getSaturationColor","factor","colorCode","rgb","round","getMedian","half","fill","space","stroke","mode","cartesianlarge","cartesiansmall","getAccumulationLegend","maxWidth","stringToNumber","containerSize","rX","rY","arrowPadding","tipX","tipY","tipRadius","startX","startY","setElementAttributes","isDiv","setStyle","isMinus","tspanElement","renderOptions","dominant-baseline","baseLine","createTSpan","calculateSize","marginHeight","getModuleName","tooltipSpace","enable","periodHeight","periodSelectorSettings","periods","labelSize","enableGrouping","disableRangeSelector","createSvg","getTitle","title","titleCollection","textOverflow","textWrap","titlePositionX","titleStyle","textAlignment","currentLabel","maximumWidth","textCollection","labelCollection","defaultToString","validateNullOrUndefined","getTooltipThemeColor","getSeriesFromIndex","visibleSeries","visibleSeries_1","pointByIndex","points_1","sparkline","appendShape","drawCircle","drawRectangle","topLeft","topRight","bottomLeft","bottomRight","calculateRoundedRectPath","renderTextElement","textOptions","getIdElement","rangeValueToCoefficient","inversed","getXLocation","getRangeValueXByPoint","getExactData","selectedData","getNearestValue","reduce","prev","curr","getRangeThemeColor","thumbSize","navigatorStyleSettings","thumbWidth","thumbHeight","gridLineColor","axisLineColor","labelFontColor","unselectedRectColor","thumpLineColor","thumbBackground","gripColor","thumbHoverColor","selectedRegionColor","tooltipBackground","tooltipFontColor","smithchart","SmithchartSize","maxwidth","convertElementFromLabel","labelId","templateHtml","_getEpsilonValue","reverselinear","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","getRoundedPathArc","actualStart","actualEnd","oldStart","oldEnd","getRoundedPath","outerOldEnd","innerOldEnd","outerOldStart","innerOldStart","getCompleteArc","innerRadius","getCompletePath","getPointer","targetId","tempString","axisIndex","pointerIndex","getLabelFormat","getRangeColor","ranges","currentRange","filter","rangeColor","processPathData","collection","arrayCollection","parsePathData","ob","char","command","r1","r2","largeArc","sweep","tokenizer","commands","lastIndex","isExponential","getRectanglePath","cornerRadius","point2","next","corners","corner","getPolygonPath","seg","pathSegmentCollection","x0","y0","segments","cpt2","newSeg","transformPath","arr","sX","sY","s","bX","bY","iX","iY","scalePathData","updatedSegment","getPathString","segment","isScale","scaleFactor","oldOffset","newOffset","splitArrayCollection","getNewString","getString","string","cmd","ang","l","identityMatrix","Matrix","MatrixTypes","Identity","transformPointByMatrix","matrix","pt","Translation","Scaling","m11","m22","m21","num2","m12","multiplyPoint","transformPointsByMatrix","transformedPoints","rotateMatrix","multiplyMatrix","Unknown","setMatrix","createRotationRadians","scaleMatrix","scaleX","scaleY","createScaling","translateMatrix","matrix1","matrix2","type2","assignMatrix","mat","getBasicShape","basicShapes","getPortShape","portShapes","getDecoratorShape","decorator","pathData","decoratorShapes","getIconShape","icon","getFlowShape","flowShapes","initTooltip","diagram","tooltipOption","Tooltip","updateTooltipContent","beforeCollision","beforeOpen","opensOn","appendTo","display","collidedPosition","updateTooltip","tooltipObject","showTipPointer","animation","findConnectorPoints","layoutOrientation","intermeditatePoints","sourcePoint","sourceWrapper","srcPoint","sourcePortWrapper","srcPort","srcNode","getPortDirection","cornersPointsBeforeRotation","sourceID","targetWrapper","sPoint","tPoint","getIntersection","getSourcePoint","tarPoint","sourceCorners","targetCorners","sourceNode","targetNode","sourcePort","targetPort","targetPortWrapper","srcCorner","srcDir","tarCorner","tarDir","port","tarPortPt","getDirection","equals","containsPoint","topCenter","sPt","tPt","refPoint","sourceEle","targetEle","tarPort","srcCor","tarCor","srcBounds","swapBounds","tarBounds","isInterSect","sourceSegment","createSegmentsCollection","targetSegment","srcSegment","tarSegmet","intersect3","checkSourceAndTargetIntersect","findPoint","getOppositeDirection","checkLastSegmentasTerminal","Point","isEmptyPoint","vector1","distance","vector2","intermeditatePointsForStraight","removeSegment","checkConsectiveSegmentAsSame","updateSegmentPoints","checkSourcePointInTarget","nodeOrPortToNode","pointToPort","checkPreviousSegment","checkPortdirection","returnIntermeditatePoints","findIntermeditatePoints","OrthogonalSegment","extra","swap","getSwapping","swapPoints","pts","diffY","NoOfSegments","One","Three","Five","getRightToLeftSegmentCount","sourceObj","targetObj","diffX","middleRight","getRightToRightSegmentCount","Two","Four","getRightToTopSegmentCount","bottomCenter","getRightToBottomSegmentCount","getBottomToTopSegmentCount","difX","getBottomToBottomSegmentCount","middleLeft","getBottomToLeftSegmentCount","getLeftToLeftSegmentCount","getLeftToTopSegmentCount","getTopToTopSegmentCount","segLength","tar","adjustSegmentLength","orthoConnection2Segment","orthoConnection3Segment","prevDir","orthoConnection4Segment","segmentValue","sLeft","sRight","sBottom","sTop","tLeft","tRight","tBottom","tTop","addLineSegment","orthoConnection5Segment","addOrthoSegments","findOrthoSegments","defaultOrthoConnection","fixedPoint","nodeMargin","nodeConnectingPoint","nodeDirection","source_1","target_1","segmentPoint","connectToOneEnd","seg_1","lastSegment","pointToNode","pointToPoint","findPointToPointOrtho","terminateConnection","targetPoint","setLineEndPoint","segPoint","portdirection","findSourceDirection","addPoints","update","portDir","findSegmentDirection","endPoint","isTarget","reverse","pointsFromNodeToPoint","tPoints","connector","actualSegment","actualLastPoint","distancePoints","getPoints","createLineSegment","object","outerBounds","rectBounds","rotateAngle","parentTransform","dir","BezierSegment","StraightSegment","length_3","lastPoint","nodeCorners","top_1","shortes","findAngle","re","findLength","es","asin","cor","isTar","segmentPoints","actualSize","sPt1","rotatePoint","tPt1","angle_2","angle_3","PathElement","getIntersectionPoints","thisSegment","minimal","intersection","intersectSegment","isNaN","intersect","dist","segment1","segment2","a1","a2","b1","b2","c1","c2","r3","r4","denom","x3","y3","x4","y4","sameSign","point1","allow","diffx","diffy","interPt","getLeftLength","getRightLength","preDir","getTopLength","getBottomLength","getOrtho3Seg","point3","gap","closeEdge","boundsValue","one","two","three","four","fourty5","one35","two25","three15","getOuterBounds","sourceDecorator","uniteRect","targetDecorator","excludeBounds","part","isEmptyVector","getBezierPoints","getBezierBounds","startPoint","controlPoint1","controlPoint2","minx","miny","maxx","maxy","t","bezierPoints","canSelect","ShapeAnnotation","PathAnnotation","constraints","AnnotationConstraints","Select","Connector","ConnectorConstraints","NodeConstraints","canMove","Drag","Selector","canEnablePointerEvents","PointerEvents","canDragSourceEnd","DragSourceEnd","canDragTargetEnd","DragTargetEnd","canDragSegmentThumb","DragSegmentThumb","canRotate","Rotate","canShadow","Shadow","canInConnect","Node","InConnect","canOutConnect","OutConnect","canResize","returnValue","Resize","ResizeSouthEast","ResizeEast","ResizeNorthEast","ResizeSouth","ResizeNorth","ResizeSouthWest","ResizeWest","ResizeNorthWest","canAllowDrop","AllowDrop","canSingleSelect","tool","DiagramTools","SingleSelect","canZoomPan","ZoomPan","canContinuousDraw","ContinuousDraw","canDrawOnce","DrawOnce","defaultTool","MultipleSelect","canUserInteract","DiagramConstraints","UserInteraction","canZoomTextEdit","ZoomTextEdit","canPageEditable","ApiUpdate","canApiInteract","diagramActions","DiagramAction","ToolAction","canDraw","PortConstraints","Draw","canDrag","renderRuler","isHorizontal","rulerSize","getRulerSize","rulerGeometry","getRulerGeometry","createHtmlElement","diagramRuler","rulerSettings","horizontalRuler","verticalRuler","ruler","Ruler","segmentWidth","hRuler","vRuler","rulerObj","updateRuler","hOffset","scroller","horizontalOffset","vOffset","verticalOffset","showRulers","updateRulerDimension","removeRulerElements","viewPortHeight","viewPortWidth","updateRulerDiv","updateRulerSpace","scale","currentZoom","arrangeTick","getFunction","dataBind","marginLeft","hRulerOffset","marginTop","vRulerOffset","completeRegion","region","selectedObjects","findObjectType","drawingObject","findNearestPoint","shortestPoint","angleBWStAndEnd","angleBWStAndRef","vaAngle","isDiagramChild","htmlLayer","hasClass","groupHasType","nameTable","isPointOverConnector","intermediatePoints","bezierPoint1","bezierPoint2","pointsForBezier","toBounds","Inflate","hitPadding","intersectinPt","intersectDetails","intersectPt","rect_1","annotations","lineUtil1","lineUtil2","l1","l2","na","nb","ua","ub","line","getTooltipOffset","mousePosition","inheritTooltip","InheritTooltip","objectTooltip","isMouseBased","offsetPoint","tooltipOffset","relativeMode","bound","objects","getBounds","getAnnotationPosition","annotation","getloop","getOffsetOfConnector","alignednumber","getAlignedPosition","offsetLength","prevLength","kCount","lengths","cnst","state","alignment","alignLabelOnSegments","vAlign","hAlign","getBezierDirection","serialize","clonedObject","cloneObject","getCustomProperty","selectedItems","nodes","connectors","JSON","stringify","deserialize","clear","protectPropertyChange","dataSourceSettings","doBinding","nodeTemp","setNodeTemplate","getDescription","commandManager","execute","canExecute","arrangeTickHorizontal","arrangeTickVertical","getLayoutInfo","layout","getBranch","nodeDefaults","getNodeDefaults","connectorDefaults","getConnectorDefaults","dataObj","parse","contextMenuSettings","bridgeDirection","pageSettings","addInfo","scrollSettings","layers","backgroundColor","basicElements","snapSettings","isLoading","views","refresh","Diagram","updateStyle","changedObject","StrokeStyle","strokeColor","strokeDashArray","strokeWidth","bold","textWrapping","italic","textAlign","textDecoration","gradient","TextElement","refreshTextElement","updateHyperlink","actualAnnotation","hyperlink","link","updateShapeContent","actualObject","minHeight","maxHeight","minWidth","horizontalAlignment","verticalAlignment","Text","elementId","updateShape","oldObject","DiagramElement","pathContent","imageContent","ImageElement","imageAlign","align","imageScale","flowShapeElement","nativeContent","DiagramNativeElement","htmlContent","DiagramHtmlElement","updateContent","newValues","nativeElement","getDiagramElement","getContent","htmlElement","flowshapedata","basicShapeData","removeItem","array","updateConnector","anglePoint","srcDecorator","tarDecorator","updateSegmentElement","firstSegment","clipDecorators","updateDecoratorElement","updateShapeElement","getUserHandlePosition","selectorItem","handle","pivot","side","connectorOffset","getPointloop","canResizeCorner","selectorConstraints","action","thumbsConstraints","SelectorConstraints","ThumbsConstraints","canShowCorner","checkPortRestriction","portVisibility","findAnnotation","annotationId","findPort","portId","ports","findObjectIndex","getObjectFromCollection","scaleElement","sw","sh","refObject","Container","newPosition","arrangeChild","drop","initContainer","init","measure","arrange","desiredSize","insertObject","mid","diagramElement","diagramId","symbolPalette","palettes","symbols","getPaletteSymbols","nodeId","enterObject","enterTable","w","h","cornerPoint","trans","findSegmentPoints","sample","sampleLength","measureElement","pathNode","getChildNode","setAttributeNS","bBox","newPathString","absoluteBounds","pathLength","getTotalLength","getPointAtLength","measurePath","getBBox","svgBounds","wrapSvgText","textValue","txtValue","bounds1","breakWord","bBoxText","dy","words","newText","existingWidth","existingText","eachLine","wordWrapping","measureHtmlText","whiteSpaceToString","wordBreak","wordBreakToString","offsetHeight","wrapBounds","pivotX","pivotY","dashArray","shadow","description","doWrap","textAlignToString","getTextOptions","txtWidth","wrapSvgTextAlign","getDiagramLayerSvg","elementcoll","contentId","getAdornerLayerSvg","getSelectorElement","getAdornerLayer","getNativeLayerSvg","getGridLayerSvg","getBackgroundLayerSvg","getBackgroundLayer","getHTMLLayer","elementType","attribute","setAttributeHtml","createSvgElement","setAttributeSvg","parentsUntil","isID","animVal","addTouchPointer","touchList","touches","clientX","clientY","pointerId","isHtml","compiledString","createMeasureElements","usageCount","divElement","imageElement","createTextNode","tSpan","randomId","chars","additionalProp","newObject","sourceObject","customProperties","propAdditional","internalProp","getInternalProperties","properties_1","property","cloneArray","HTMLElement","innerHtml","sourceArray","clonedArray","extendObject","childObject","extendeArray","extendArray","extendedObject","childArray","reset","middleElement","overFlow","middle","rotateSize","minX","minY","maxX","maxY","getOffset","findToolToActivate","touchStart","touchMove","currentSymbol","hasSelection","userHandles","obj_1","paddedBounds","selectorBnds","hasSingleConnection","conn_1","sourcePaddingValue","targetPaddingValue","conn","connectorEditingToolModule","checkForConnectorSegment","ten","rotateThumb","labelSelection","labelRotate","forty","checkForResizeHandles","PointPort","findPortToolToActivate","isSelected","PortVisibility","Hover","Visible","sourcePortID","currentDrawingObject","padding","firstLevel","parentId","getCursor","cursor","cursors","getBpmnShapePathData","bpmnShapes","getBpmnTriggerShapePathData","bpmnTriggerShapes","getBpmnGatewayShapePathData","bpmnGatewayShapes","getBpmnTaskShapePathData","bpmnTaskShapes","getBpmnLoopShapePathData","bpmnLoopShapes","getGraphBounds","collectionContains","coll","incrementalSearch","items","selectedIndex","ignoreCase","queryString","prevString","activeClass","listItems","strLength","innerText","Search","inputVal","searchType","itemData","queryStr","toLocaleLowerCase","itemsData","highlightSearch","query","ignoreRegex","replaceQuery","findTextNode","createFloatLabel","overAllWrapper","searchWrapper","inputElement","floatLinelement","floatLabelElement","FLOATLINE","FLOATTEXT","aria-labelledby","LABELTOP","LABELBOTTOM","updateFloatLabelState","setPlaceHolder","doesImplementInterface","checkFor","valueAccessor","field","column","DataUtil","getUpdateUsingRaf","updateFunction","callBack","requestAnimationFrame","iterateArrayOrObject","predicate","pred","iterateExtend","baseExtend","getActualProperties","templateCompiler","baseTemplateComplier","setStyleAndAttributes","customAttributes","copyAttr","literals","exclude","moved","prepareColumns","columns","autoWidth","Column","headerText","foreignKeyValue","foreignKeyField","setCssInGridPopUp","popUp","isBottomTail","popUpSpan","targetPosition","changedTouches","popup","getPosition","getPopupLeftPosition","ChildProperty","getElementIndex","inArray","getActualPropFromColl","getUid","appendChildren","parents","calculateAggregate","customAggregate","aggregates","getScrollBarWidth","scrollWidth","divNode","cssText","getRowHeight","rowHeight","table","isComplexField","getComplexFieldID","setComplexFieldID","isEditable","col","row","isOldRow","isIdentity","isPrimaryKey","allowEditing","isActionPrevent","dlg","editSettings","showConfirmDialog","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","json","columnData","getDay","where","getDatePredicate","operator","matchCase","executeLocal","getColumnByForeignKeyValue","filterObject","datePredicate","prevDate","nextDate","prevObj","nextObj","setSeconds","getSeconds","setHours","predicateSt","Predicate","predicateEnd","and","or","ejpredicate","renderMovable","frzCols","mEle","childElementCount","getCustomDateFormat","colType","intl","Internationalization","getDatePattern","setStateAndProperties","summaryIterator","callback","dateanddatetimerender","rtl","isInline","rowData","leftPadding","rightPadding","titlePositionY","heatmapSize","topPadding","bottomPadding","textNone","increaseDateTimeInterval","intervalType","setFullYear","getFullYear","setMonth","getMonth","setDate","getDate","getHours","setMinutes","getMinutes","getTooltipText","tooltipCollection","xPosition","yPosition","RgbColor","R","G","B","convertPixelToValue","pointerElement","pointerRect","lineBounds","newSize","divideVal","getPathToRect","tempDiv","svgRect","isPointerDrag","axes","pointerEnable","pointers","pointer","enableDrag","textFormatter","formatValue","getNumberFormat","useGrouping","useGroupingSeparator","formatFunction","getElementOffset","calculateNiceInterval","currentInterval","niceInterval","minInterval","pow","intervalDivs_1","interior","getRangePalette","placement","getBox","boxName","rectWidth","rectHeight","bottomRadius","topRadius","addValue","y1_1","locHeight","x1_1","locWidth","maps","getMousePosition","pageXOffset","pageYOffset","clientTop","clientLeft","MapLocation","degreesToRadians","deg","radiansToDegrees","convertGeoToPoint","latitude","longitude","layer","mapModel","lat","lng","mapSize","mapAreaRect","longitudeMinMax","baseMapBounds","latitudeMinMax","latRadian","lngRadian","projectionType","geometryType","pixelOrigin","sinY","calculateBound","aitoff","tan","Infinity","roundTo","xToCoordinate","yToCoordinate","convertTileLatLongToPoint","zoomLevel","tileTranslatePoint","isMapCoordinates","sinLatitude","pixelX","pixelY","mapObject","totalSize","baseSize","cosy","sincia","sinci","acos","convertElement","markerId","mapObj","markerEle","tempGroup","drawBalloon","balloon","createGroup","checkShapeDataFields","dataPath","propertyPath","pointObject","findMidPointOfPolygon","startX1","startY1","xSum","ySum","rightMinPoint","rightMaxPoint","leftMinPoint","leftMaxPoint","bottomMinPoint","bottomMaxPoint","topMinPoint","topMaxPoint","rightMin","rightMax","leftMin","leftMax","topMax","topMin","bottomMax","bottomMin","isCustomPath","layerData","customPath","findPosition","getTranslate","zoomFactor","zoomSettings","baseMapRectBounds","mapWidth","mapHeight","centerPosition","leftPosition","topPosition","mapLayerPanel","calculateFactor","getElementByID","Internalize","getShapeData","layerIndex","shapeIndex","shapeData","shapeDataPath","shapePropertyPath","triggerShapeEvent","selection","eventName","elementSelector","getTargetElement","createStyle","customizeStyle","elementAnimate","animationComplete","timeout","areaHeight","demo","size1","wordWrap","changeBorderWidth","childNode","changeNavaigationLineWidth","currentStroke","layersCollection","shapeSettings","m","navigationLineSettings","targetTouches","calculateScale","startTouches","endTouches","startDistance","getDistance","getTouches","posTop","posLeft","touch","getTouchCenter","zoomAnimate","previousLocation","preScale","previousScale","diffScale","currentLocation","currentScale","slopeFactor","slope","slopeIntersection","slopeValue","intercept","horizontalDifference","verticalDifference","translatePoint","zoomModule","processTemplate","process","clearAnimation","startAnimation","cancelAnimationFrame","smoothTranslate","getIndex","getDropDownValue","returnType","subCommand","isNOU","iconCss","getFormattedFontSize","i10n","itemLocale","toolsLocale","getConstant","setToolbarStatus","isPopToolbar","dropDown","dropDownModule","tbItems","itemStr","tbElements","classes.CLS_ACTIVE","toolbarSettings","formatDropDown","types","alignDropDown","model.alignmentItems","fontNameDropDown","name_1","fontSizeDropDown","getCollection","getTBarItemsIndex","toolbarItems","itemsIndex","updateUndoRedoStatus","baseToolbar","undoRedoStatus","trgItems","undoRedoItems","toolbarObj","classes.CLS_TB_ITEM","keys_2","enableItems","evt","setAttributes","htmlAttributes","rte","isFrame","contentModule","getDocument","htmlAttr","setEnable","readonly","setReadOnly","valueContainer","getWeekFirstDate","date1","firstDayOfWeek","date","firstDateOfMonth","lastDateOfMonth","dt","getWeekNumber","currentDate","valueOf","MS_PER_DAY","setTime","time","tzOffsetBefore","getTimezoneOffset","tzOffsetDiff","resetTime","getDateInMs","addDays","addMonths","day","getMaxDays","getStartEndHours","startHour","endHour","date2","getDaysCount","startDate","endDate","strTime","getDateFromString","findIndexInData","getOuterHeight","marginBottom","getMonthSummary","ruleObject","cldrObj","localeObj","summary","monthDay","WEEKPOS","DAYINDEXOBJECT","generate","rule","excludeDate","startDayOfWeek","maximumCount","viewDate","MAXOCCURRENCE","cacheDate","extractObjectFromRule","modifiedDate","tempViewDate","until","maxOccurrence","dayIndex","setFirstDayOfWeek","DAYINDEX","tempExcludeDate","parsedDate","getDateFromRecurrenceDateString","freq","tempDate","expectedCount","compareDates","validateRules","excludeDateHandler","dailyType","getStartDateForWeek","expectedDays","dayCycleData","processWeekDays","weeklyType","monthlyType","yearDay","weekNo","checkYearlyType","startDay","firstWeekSpan","maxDate","minDate","stDate","weekNos","processWeekNo","LEAPYEAR","getMaxYearDay","processYearDay","yearlyType","recDateString","zeroIndex","validateMonthlyRuleType","month","beginDate","monthCollection","weekCollection","monthInit","currentMonthDate","datas","week","dayData","chDate","setNextValidDate","monthlyDayTypeProcess","mainDate","validateProperDate","monthlyDateTypeProcess","NORMALYEAR","monthData","rules","validRules","splitData","dayCycle","checkYear","expectedyearDay","startDateCollection","diff","getYearDay","shift","days","expectedMonth","expectedDate","checkDayIndex","checkMonth","checkDate","getRecurrenceStringFromDate","getUTCFullYear","roundDateValues","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","measureObject","Location","itemsToOrder","isContainsData","pathName","processData","treemap","isExist","leaf","leafItemSettings","levels","groupPath","labelPath","weightValuePath","findChildren","findHightLightItems","treeMap","parentName","currentItem","renderItems","findLabelLocation","areaRect","getArea","getShortestEdge","convertToContainer","convertToRect","xOffset","yOffset","colorMap","colorMapping","equalValue","paths","minOpacity","maxOpacity","deSaturationColor","rangeValue","dataLabel","resultText","currentLength","totalWidth","totalLength","sliceString","hide","orderByArea","removeClassNames","applyOptions","svgRenderer","renderLegendShape","renderPath","shapeWidth","shapeHeight","shapeX","shapeY","isParentItem","headerRegex","defaultType","Ajax","async","contentType","emitError","send","Promise","resolve","reject","httpRequest","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","setRequestHeader","beforeSend","successHandler","onSuccess","failureHandler","reason","onFailure","responseText","dataType","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","boundedEvents_1","Base","isProtectedOnChange","changedProperties","oldProperties","refreshing","finalUpdate","childChangedProperties","modelObserver","addInstance","isDestroyed","muteOnChange","prevDetection","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","moduleClass","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","language","navigator","getEvent","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","regX","uA","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","__extends","extendStatics","setPrototypeOf","__proto__","p","__","create","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","_super","ease","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","elements_1","element_1","delayAnimation","animationId","frameId","applyAnimation","step","timerId","prevTimeStamp","avg","timingFunction","performance","now","fail","newProp","oldProp","CanvasRenderer","rootID","rootId","getOptionValue","createCanvas","canvasObj","ctx","getContext","setCanvasSize","lineWidth","dashArrayString","setLineDash","strokeStyle","drawLine","save","beginPath","moveTo","lineTo","restore","dataUrl","toDataURL","canvasCtx","globalAlpha","drawCornerRadius","fillStyle","fillRect","arcTo","closePath","canvasTranslate","dataSplit","borderWidth","flag","translate","innerR","c3","c4","bezierCurveTo","arc","counterClockWise","drawText","baseline","textBaseline","labelRotation","fillText","drawPolyline","drawEllipse","circumference","drawImage","imageObj","Image","createLinearGradient","colors","myGradient","colorStop","setGradientValues","createRadialGradient","colorName","newColorStop","stopColor","addColorStop","updateCanvasAttributes","img_1","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","clean","modules","usedModules","arg","removableModule_1","mod","parentObj","controlParent","isParentArray","updateChange","updateTimeOut","changeTime_1","curIndex","defaultNumberingSystem","latn","_digits","_type","defaultNumberSymbols","decimal","group","percentSign","plusSign","minusSign","infinity","nan","exponential","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","propKeys_1","getSymbolRegex","regexStr","getSymbolMatch","matchKeys_1","constructRegex","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","errorText","ms","ls","mf","lf","NumberFormat","numberFormatter","option","cldr","symbolPattern","fOptions","cOptions","dOptions","dependable","numberMapper","parser","parserObject","currencySymbol","getCurrencySymbol","numericObject","currency","defaultCurrencyCode","percentSymbol","minusSymbol","formatRegex","customFormat","getProperNumericSkeleton","isCurrency","isPercent","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","defaultCurrency","nData","pData","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isFinite","intNumberFormatter","negativeDataRegex","pattern_1","lastIndexOf","primary","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","loc","typeMapper","patternRegex","patternMatch","M","L","H","'"," a","yy","EEEE","E","defaultFirstDay","firstDayMapper","sun","mon","tue","wed","thu","fri","sat","currencyFormatRegex","curWithoutNumberRegex","$","%","-","0","1","dateParseRegex","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","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","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","getWeekData","firstDay","iCulture","lastPageID","abbreviateRegexGlobal","weekdayKey","timeSetter","datePartMatcher","z","Z","dateFormat","formatOptions","dateSeperator","patternMatch_1","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","retOptions","props_1","matchString","internalNumberParser","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","groupRegex","NumberParser","numberParser","symbolRegex","symbolpattern","getParsedNumber","isNegative","NaN","exponent","rightToLeft","getDateFormat","getCulture","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getNumberPattern","getFirstDayOfWeek","componentCount","lastHistoryLen","Component","needsID","moduleLoader","localObserver","detectFunction","enablePersistence","setPersistData","injectModules","render","mergePersistData","event_2","getInjectedModules","injectedModules","Inject","localStorage","getItem","setItem","getPersistData","clearTemplate","templateName","isHistoryChanged","pageID","history","hash","charCodeAt","addOnPersist","persistObj","objValue","ignoreOnPersist","iterateJsonProperties","newObj","newList","this_1","DialogUtility","defaultPosition","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","droppables","toggleEvents","isIE","scope","isUnWire","initialize","currentTarget","abort","intCoord","getCoordinates","initialPosition","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isChangeTouch","intCordinate","styleProp","marginRight","dragTarget","intClosest","calculateParentPosition","getHelperElement","dragTargetElement","helperElement","parentClientRect","dragStart","curTarget","getProperTargetElement","dragArea","setDragArea","enableTailMode","posValue","getProcessedPositionValue","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","queryPositionInfo","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","dragData","intOver","hoverObject","intOut","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","dragValue","enableAutoScroll","scrollIntoView","docBody","docEle","dragStop","dragStopCalled","intDrop","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","elementFromPoint","cursorAt","sender","draggable","draggedElement","dropIns","getDropInstance","parent_1","eleInst","eleInst_1","Droppable","mouseOver","area","accept","isDrag","isDropArea","canDrop","droppedElement","coord","backspace","tab","enter","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","rectangle","polyline","ellipse","drawPolygon","polygon","img","preserveAspectRatio","createTitle","createClipPath","createForeignObject","foreignObject","createPattern","newOptions","fx","fy","drawGradient","gradientType","defs","stop_1","drawClipPath","drawCircularClipPath","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","isTouchMoved","movedDirection","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","timeOutTapHold","tapHoldEvent","tapHoldThreshold","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","originalEvent","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","calcPoints","swipeArgs","swipeDirection","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","checkSwipe","modeClear","lastTapTime","eTapArgs","pnt","newX","newY","newT","xDist","yDist","Engine","isRipple","comp","data_1","builderFunction","classObj","encodeURIComponent","siblings","childNodes_1","curNode","ELEMENT_NODE","attrVal","cssClassName","Button","isPrimary","setIconCss","disabled","controlStatus","removeRippleEffect","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","Switch","bar","onLabel","offLabel","setLabel","switchInner","rippleTouchHandler","eventType","onText","offText","switchFocusHandler","switchMouseUp","toggle","OTHERMONTH","ROOT","OVERLAY","WEEKNUMBER","SELECTED","FOCUSEDDATE","OTHERMONTHROW","ZOOMIN","CalendarBase","controlUp","controlDown","moveDown","moveUp","moveLeft","moveRight","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","altUpArrow","spacebar","altRightArrow","altLeftArrow","globalize","todayDisabled","todayDate","data-role","calendarElement","createHeader","createContent","validateDate","checkDateValue","minMaxUpdate","headerElement","iconContainer","previousIcon","aria-disabled","aria-label","nextIcon","headerTitleElement","aria-atomic","contentElement","tabIndex","aria-activedescendant","createContentHeader","createContentBody","showTodayButton","createContentFooter","getCultureValues","culShortNames","getCultureObjects","shortNames","html","tableHeadElement","weekNumber","shiftArray","renderYears","renderDecades","renderMonths","updateFooter","todayElement","l10","today","footer","todayButtonClick","navigateTitle","keyboardModule","keyActionHandle","currentView","depth","getViewNumber","navigateTo","multiSelection","selectedDate","view","focusedDate","tableBodyElement","depthValue","levelRestrict","KeyboardNavigate","selectDate","contentClick","addYears","number","isMonthYearRange","addDay","isMinMaxRange","navigatePreviousHandler","navigatePrevious","navigateNextHandler","navigateNext","navigateHandler","triggerNavigate","minMaxDate","localDate","numCells","tdEles","renderDays","renderTemplate","currentMonth","titleUpdate","getMilliseconds","setStartDate","weekEle","weekAnchor","getWeek","dateFormatOptions","tdEle","dayCell","dayLink","renderDayCellArgs","isDisabled","isOutOfRange","renderDayCellEvent","otherMnthBool","disabledCls","getDateVal","updateFocus","otherMonth","tableElement","removeTableHeadElement","valueUtil","curDate","yr","curYrs","minYr","minMonth","maxYr","maxMonth","localMonth","localYr","startYr","endYr","startHdrYr","endHdrYr","startYear","rowIterator","aria-selected","lastDate","timeOffset","findLastDay","classNm","trEle","otherMonthCell","iconHandler","setAriaActiveDescendant","clickEventEmitter","eve","getIdValue","switchView","validateValues","copyValues","skipIndex","tempValueString","minString","maxString","setValueUpdate","setActiveDescendant","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","stringVal","previous","ld","tzOffset","dateString","setDateDecade","setDateYear","checkPresentDate","tempElement","selectedElement","previousValue","checkPrevious","navigatedEvent","navigatedArgs","compare","modifier","findNextTD","tmpDate","Calendar","isMultiSelection","tempValues","limit","copyDate","previousValues","form","formResetHandler","changedArgs","triggerChange","previousDate","tempDays","storeView","addDate","tempDates","removeDate","changeEvent","isInteracted","PositionData","CLASSNAMES","Popup","setEnableRtl","refreshPosition","setContent","actionOnScroll","wireScrollEvents","unwireScrollEvents","orientationOnChange","getRelateToElement","scrollRefresh","parent_2","relateToElement","relateTo","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","parent_3","isElementVisible","checkGetBoundingClientRect","win","windowView","scrollY","scrollX","outerWidth","outerHeight","parent_4","reposition","collision","checkFixedParent","checkCollision","getAnchorPosition","anchorEle","eleRect","anchorRect","targetType","callFlip","param","callFit","viewPortRect","horz","vert","show","animationOptions","relativeElement","zIndexElement","showAnimation","hideAnimation","ButtonProps","AnimationSettings","DLG_HEADER_CONTENT","MODAL_DLG","DLG_CLOSE_ICON","SCROLL_DISABLED","FULLSCREEN","DLG_CLOSE_ICON_BTN","DLG_UTIL_DEFAULT_TITLE","DLG_UTIL_ROOT","DLG_UTIL_ALERT","DLG_UTIL_CONFIRM","Dialog","initRender","headerContent","classArray","clonedEle","closeIconClickEventHandler","dlgOverlayClickEventHandler","l10n","prevOnChange","keyDown","isModal","buttonObj","btnObj","activeElement","focusableElements","isTagName","isContentEdit","hasAttribute","closeOnEscape","primaryButtonEle","buttonIndex_1","buttons","buttonModel","click","setCSSClass","setMaxHeight","initialRender","setzIndex","calculatezIndex","setTargetContent","setHeader","showCloseIcon","renderCloseIcon","footerTemplate","setButton","setFooterTemplate","allowDragging","setAllowDragging","aria-modal","setIsModal","dlgContainer","popupObj","focusContent","dlgOverlay","unBindEvent","closeArgs","storeActiveElement","positionChange","setEnableRTL","setOverlayZindex","zIndexValue","setPopupPosition","dragObj","buttonContent","btn","ftrTemplateContent","aria-describedby","contentEle","innerContentElement","setTemplate","isContent","headerEle","createHeaderContent","closeIcon","closeIconBtnObj","closeIconTitle","oldCSSClass","getValidFocusNode","u","disableElement","getAutoFocusNode","validNode","elementMatch","Element","bindEvent","updateIsModal","setPopupZindex","isFullScreen","fullScreen","openAnimation","animationSettings","dialogOpen","closeAnimation","getButtons","createDialog","dialogObject","formOptions","isDraggable","formButtonModel","buttonPropModel","buttonProps","alert","dialogElement","alertDialogObj","alertButtonModel","okButton","setAlertButtonModel","alertOptions","confirm","confirmDialogObj","okButtonModel","cancelButtonModel","cancelButton","setConfirmButtonModel","confirmOptions","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","TIP_BOTTOM","TIP_RIGHT","POPUP_OPEN","POPUP_CLOSE","formatPosition","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","tipClass","tooltipEle","renderPopup","elePos","mouseTrail","getTooltipPosition","openPopupHandler","closePopupHandler","offsetPos","calculateTooltipOffset","collisionFlipFit","tooltipEventArgs","tooltipEleWidth","tooltipEleHeight","arrowEle","tipWidth","tipHeight","tipAdjust","tipHeightAdjust","tipWidthAdjust","updateTipPosition","selEle","adjustArrow","leftValue","topValue","tooltipWidth","tooltipHeight","arrowInnerELe","tipPosExclude","tipPointerPosition","POINTER_ADJUST","renderContent","tooltipContent","templateFunction","isSticky","tipClose","ICON","onStickyClose","addDescribedBy","describedby","data-tooltip-id","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","hideTooltip","targetList_1","ctrlId","restoreElement","wireMouseEvents","showTimer","hideTimer","isHidden","TOOLTIP_WRAP","aria-hidden","PopupAnimation","openDelay","horizontal","vertical","affectedPos","eleOffset","arrowleft","targetElement","closeAnimation_1","closeDelay","unwireMouseEvents","onMouseOut","onMouseMove","eventPageX","eventPageY","colpos","touchEnd","scrollHandler","triggerList_1","getTriggerList","wireFocusEvents","touchModule","tapHold","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","findTarget","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","isRtl","setEnabled","isEnable","inputContainer","disabledAttrs","considerWrapper","removeAttributes","addAttributes","setClearButton","isClear","_internalRipple","argsButton","_onMouseDownRipple","_onMouseUpRipple","parentEle","_onMouseRipple","appendSpan","iconClass","createInput","setPropertyValue","removeFloating","unwireFloatingEvents","addFloating","iconEle","floatLine","floatText","setRipple","ErrorOption","SPINICON","INCREMENT","DECREMENT","INTREGEXP","NumericTextBox","isPrevFocused","decimalSeparator","intRegExp","isCalled","cloneElement","angularTagName","tabindex","incrementTitle","decrementTitle","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","checkAttributes","validateMinMax","validateStep","updatePlaceholder","createWrapper","showSpinButton","spinBtnCreation","changeValue","strictMode","trimValue","decimals","roundNumber","attributes_1","inputWrapper","aria-readonly","hiddenInput","validateHidden","spinDown","spinUp","wireSpinBtnEvents","formattedValue","aria-valuemin","aria-valuemax","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","focusIn","focusOut","keyUpHandler","inputHandler","pasteHandler","mouseDownOnSpinner","mouseUpOnSpinner","touchMoveOnSpinner","unwireSpinBtnEvents","parsedInput","updateValue","beforeUpdate","preventHandler","iOS","platform","currentPos","prevPos","ignoreKeyCode","valArray","prevVal","nextEle","cursorPosChanged","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","stepCount","roundValue","precision","divide","updateCurrency","propVal","numberOfDecimals","decimalPart","modifyText","validateState","result1","result2","metaKey","currentChar","stopPropagation","fractionRule","validateDecimalOnType","mouseWheel","rawEvent","wheelDelta","detail","formatValue_1","ele_1","getElementData","mouseUpClick","floatLabelTypeUpdate","decrement","getText","propValue","#","?","&","MaskUndo","MaskedTextBox","resetMaskedTextBox","setMaskPlaceholder","setWidth","setVal","dynamicPlaceholder","strippedValue_1","strippedVal","getMaskedValue","TicksData","LimitData","TooltipData","classNames","Slider","horDir","verDir","transition","rangeBar","transitionOnMaterialTooltip","scaleTransform","customAriaText","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","internationalization","ticks","formatString","formatInfo","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","setZindex","tooltipElement","firstTooltipElement","secondTooltipElement","sliderContainer","showOn","sliderTrack","isMaterial","isBootstrap","setHandler","createRangeBar","limits","createLimitBar","setOrientClass","class","showButtons","setButtons","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","renderScale","renderTooltip","firstElementClassName","limitBarFirst","limitBarSecond","firstHandle","secondHandle","setAriaAttributes","customValues","createSecondHandle","secondMaterialHandle","createFirstHandle","firstMaterialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","activeHandle","handlePos1","handlePos2","getHandle","tooltipObj","firstTooltipObj","secondTooltipObj","refreshTooltip","openMaterialTooltip","tooltipAnimation","closeTooltip","handleFocusOut","tooltipValue","setTooltipContent","addTooltipClass","setAriaAttrValue","formatContent","handleVal1","ariaContent","handle1","handle2","handleVal2","count_1","getTooltipTransformProperties","previousTooltipClass","tooltipPlacement","tooltipPosition","tooltipBeforeOpen","transformProperties","bootstrapCollisionArgs","wireMaterialTooltipEvent","sliderDown","tooltipPositionCalculation","checkTooltipPosition","firstHandleTooltipPosition","secondHandleTooltipPosition","tooltipClass","tooltipPointer","afterClose","tooltipAfterClose","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","openTooltip","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","refreshTooltipOnMove","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","customTickCounter","bigNum","tickCount","orien","ul","smallStep","showSmallTicks","largeStep","steps","customStep","li","islargeTick","tickWidth","largestep","repeat","createTick","formatTicksValue","decimalPoints","tickesAlignment","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","tickText","tickElement","tickValuePosition","other","otherChild","ariaValueText","isTickFormatted","valuenow","aria-valuetext","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","focusSliderElement","buttonUp","setRangeBar","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","currentValue","minValue","maxValue","limitBar","preHandlePos1","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","updateRangeValue","setPreviousVal","preHandlePos2","tempStartEnd","onResize","startHandleFixed","endHandleFixed","xyToPosition","stepValueCalculation","percentStep","remain","addition","f","positionToValue","sliderBarClick","handlepos","handleVal","focusedElement","checkRepeatedValue","xPostion","yPostion","firstPartRemain","secondPartRemain","minDiff","dragRangeBarMove","dragRangeBarUp","sliderBarMove","sliderBarUp","handleValueAdjust","handleValue","assignValue","handleNumber","valueAndPostion","wireButtonEvt","sliderFocusOut","onresize","keyUp","hover","relatedTarget","transformProperties_1","hiddenHandle_1","handle_1","blur","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","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","maxLength","minLength","rangeLength","tel","equalTo","inputElements","createHTML5Rules","FormValidator_1","addRules","removeRules","validate","selected","rules_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","submitHandler","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","getErrorMessage","errorRule","isValid","removeErrorRules","showMessage","createErrorElement","errorElement","optionalValidationStatus","refer","currentRule","formElement","checkValidator","ruleValue","formats","errorOption","Message","errorContainer","containerId","customPlacement","nextSibling","checkRequired","inputType","compareTo","Label","FILE","STATUS","REMOVE_ICON","DELETE_ICON","ABORT_ICON","RETRY_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","ICON_FOCUSED","PAUSE_UPLOAD","RESUME_UPLOAD","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","multiple","fileList","filesData","uploadedFilesData","isForm","allTypes","pausedData","uploadMetaData","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","renderButtonTemplates","unBindDropEvents","setDropArea","renderPreLoadFiles","updateDirectoryAttributes","setLocalizedTexts","preLocaleObj","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","listParent","createFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","localeText","Browse","Clear","Upload","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","pauseUpload","resume","retry","fileUploadCancel","checkHTMLAttributes","asyncSettings","saveUrl","removeUrl","isPureReactComponent","directoryUpload","renderBrowseButton","initializeUpload","wireActionButtonEvents","uploadButtonClick","clearButtonClick","unwireActionButtonEvents","uploadText","clearText","dropAreaWrapper","fileDropArea","files","clearData","files_1","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","showFileList","dropTextArea","dropArea","dropZoneElement","enableDropText","bindDropEvents","newAttr","createAttribute","setAttributeNode","checkAutoUpload","browseButtonClick","onSelectFiles","removeFocus","keyActionHandler","resetForm","setTabFocus","setReverseFocus","metaData","getCurrentMetaData","file","abortUpload","resumeUpload","chunkUpload","removeFiles","fileInfo","targetMetaData","iconElements","iconElement","dropElement","dragHover","onDragLeave","onPasteFile","clipboardData","pasteFile","kind","renderSelectedFiles","getAsFile","liElement","spinnerTarget","removeFilesData","customTemplate","getLiElement","removeUploadedFile","removeDirectly","selectedFiles","ajax","formData","FormData","currentRequest","postRawFile","updateFormData","customFormData","removeCompleted","removeFailed","customData","updateStatus","rootElement","statusElement","getFilesFromFolder","filesEntries","dataTransfer","checkDirectoryUpload","_loop_2","webkitGetAsEntry","isFile","files_2","fileObj","fullPath","isDirectory","traverseFileTree","files_3","_loop_3","this_2","createReader","readEntries","entries","targetFiles","sortFileList","directory","paste","eventArgs_1","getFileType","webkitRelativePath","validatedFileSize","fileSource","isModified","modifiedFilesData","progressInterval","checkExtension","dataFiles","updateSortedFileList","singleUpload","previousListClone","added","removedList_1","oldList","createParentUL","isBlank","dropFiles","extensions_1","extension","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","createCustomfileList","fileData_1","listItem","data-file-name","uploadTemplateFn","fileData_2","textContainer","getFileNameOnly","fileExtension","rtlContainer","bytesToSize","truncateName","nameElement","dataset","tail","setInitialAttributes","filterfileList","filterFiles","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","loaded","total","changeProgressValue","progressValue","uploadInProgress","customUI","request","cancelUploadingFile","updateProgressBarClasses","removecanceledFile","renderFailureState","removeProgressbar","deleteIcon","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","callType","progressAnimation","animateProgressBar","extensions","uploadTemplate","exception","chunkSize","chunkIndex","blob","retryCount","sendRequest","totalChunk","chunkUploadComplete","chunkUploadInProgress","eventCancelByArgs","chunkUploadFailed","checkChunkUpload","response","updateMetaData","eventArgs_2","sendNextRequest","name_2","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","eventArgsData","retryRequest","retryAfterDelay","checkPausePlayAction","retryUpload","fromcanceledStage","retryElement","clearIcon","loadedSize","bytes","fileNames","sortedFilesData","sortedFileNames_1","name_3","uploadFiles","validateFileType","chunkEnabled","_loop_4","this_3","name_4","getFilesData","validUrl","removeFiles_1","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","Item","DropDownButton","canOpen","openPopUp","closePopup","createPopup","getPopUpElement","createItems","showIcon","hasIcon","separator","createAnchor","appendArrowSpan","setActiveElem","activeElem","popupEle","getULElement","popupElement","delegateMousedownHandler","mousedownHandler","keyBoardHandler","rippleFn","upDownKeyHandler","keyEventHandler","defaultIdx","liIdx","removeCustomSelection","isValidLI","selectedLi","getLI","trgt","beforeOpenArgs","openArgs","focusEle","beforeCloseArgs","TAGNAME","SplitButton","createPrimaryButton","createSecondaryButton","secondaryBtnObj","setAria","btnModel","primaryBtnObj","btnElem","dropDownBtnModel","beforeItemRender","beforeClose","aria-expanded","aria-haspopup","aria-owns","primaryBtnClickHandler","btnKeyBoardHandler","altdownarrow","HIDESPINNER","PROGRESS","PROGRESSACTIVE","CONTENTCLS","ProgressButton","percent","isPaused","startProgress","progressTime","enableProgress","createProgress","spinner","setSpinPosition","spinSettings","cont","clsList","hideSpin","startAnimate","startContAnimate","prevTime","prevPercent","prevProgressTime","args_1","timeDiff","stepTime","timeDiffBuffer","currentDuration","setSpinnerSize","setIconSpan","iconSpan","CTRLBTN","CTRLSWITCH","FORMATSWITCH","HIDEHEX","HIDEOPACITY","HIDERGBA","HIDEVALUE","HIDEVALUESWITCH","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SHOWVALUE","SELECT","SPLITPREVIEW","presets","ColorPicker","Apply","Cancel","ModeSwitcher","inline","createWidget","createSplitBtn","enableOpacity","tileRipple","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","beforeOpenFn","onOpen","beforePopupClose","rgba","convertToRgbString","hexToRgb","preview","getPopupEle","popupInst","getPopupInst","modal","onPopupClose","destroyOtherComp","presetColors","paletteGroup","appendPalette","modeSwitcher","noColor","setNoColor","borderBottomWidth","hsv","rgbToHsv","refEle","tile","roundedColor","presetName","addTileSelection","noColorEle","attr","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","hueChange","createOpacitySlider","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","convertToOtherFormat","pValue","rgbToHex","cValue","updatePreview","triggerEvent","previewContainer","colorValue","isPicker","createNumericInput","numericInput","inputWrap","appendValueSwitchBtn","hexInput","maxlength","clsName","appendOpacityValue","valueSwitchBtn","formatSwitchHandler","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","getTooltipInst","setTooltipOffset","convertToHsvString","updateHsv","isKey","updateInput","removeTileSelection","convertRgbToNumberArray","n","pickerKeyDown","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","handlerDragPosition","enterKeyHandler","triggerChangeEvent","prob","setHsv","handlerMove","handlerEnd","switchToPalette","ctrlBtnClick","noColorTile","switchToPicker","grpEle","tiles","prevSelectedEle","pop","tilePosition","keySelectionChanges","newEle","cIdx","emptyCount","inputValueChange","isPopupOpen","tooltipInst","len_1","bigInt","v","q","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","popupWrapper","changeRtlProps","changePaletteProps","changeOpacityProps","cls","TextBox","textboxWrapper","interaction","resetInputHandler","INPUTFOCUS","ACTIVE","DatePicker","previousElementValue","isDateIconClicked","altDownArrow","calendarKeyConfigs","bindEvents","setAllowEdit","allowEdit","ariaAttrs","isCalendar","disabledDates","dateOptions","dateTimeFormat","minMaxUpdates","dateValue","tempFormat","dateIconHandler","inputFocusHandler","inputBlurHandler","inputChangeHandler","resetFormHandler","keyboardModules","inputKeyActionHandle","CalendarKeyActionHandle","focusArguments","strictModeUpdate","changeTrigger","blurArguments","calendarKeyboardModules","documentHandler","createCalendar","modelHeader","yearHeading","h2","daySpan","monthSpan","selectCalendar","prevent_1","outOfRange","preventArgs","prevent_2","ensureInputAttribute","ngTag","inputEleCopy","validationAttribute","checkHtmlAttributes","nameAttribute","valueCopy","previousValCopy","dateIdString","isDisabledDate","subQuery","isChild","queries","fKey","fromTable","lookups","expands","sortedColumns","groupedColumns","setKey","using","dataManager","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","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","getVal","tempObj","aggs","buildHierarchy","lookup","pKey","grp","fKeyData","getFieldList","copyObj","ds","ignoreDiacritics","diacritics","callAdaptorFunction","adaptor","fnName","param1","param2","isPlainObject","isCors","xhr","getGuid","rand","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","isnull","processSymbols","parseJson","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","dupValue","dateParse","toTimeZone","isJson","isGuid","replacer","jsonReplacer","arrayReplacer","keys_3","addSelfOffset","toJSON","toUTC","utc","unix","toLocalTime","datefn","differenceString","localtimefn","norm","Adaptor","requestType","pvt","processResponse","JsonAdaptor","processQuery","countFlg","agg","batchRequest","dm","changes","addedRecords","changedRecords","deletedRecords","onWhere","onAggregates","onSearch","onSortBy","fnCompare","onGroup","aggQuery","onPage","onRange","onTake","onSkip","onSelect","keyField","UrlAdaptor","hierarchyFilters","getQueryRequest","groups","filters","searches","getFiltersFrom","req","getRequestQuery","reqParams","pvtData","convertToQueryString","request1","selects","requests","getAggregateResult","original","batchUrl","crudUrl","changed","deleted","insertUrl","keyColumn","updateUrl","predicats","aggregateData","groupQuery","ODataAdaptor","multipartAccept","batch","changeSet","batchPre","batchContent","changeSetContent","batchChangeSetContentType","updateType","onPredicate","requiresCast","guid","getField","onComplexPredicate","onEachWhere","onEachSearch","onEachSort","onCount","settings","overrideMimeType","dataCopy","results","emptyAndBatch","processBatchResponse","versionCheck","requiresFormat","keys_4","localTimeReplacer","convertObj","localTime","compareAndRemove","initialGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","generateBodyContent","method","stat","org","o","jsonObj","exVal","changeGuid","ODataV4Adaptor","getModulename","isDate","onExpand","expanded","exArr","ex","WebApiAdaptor","Count","Items","WebMethodAdaptor","RemoteSaveAdaptor","updateKey","CacheAdaptor","isCrudAction","isInsertAction","cacheAdaptor","guidId","forDel","requestTime","generateKey","currentFilter","newQuery","cachedItems","crossDomain","offline","timeTillExpiration","cachingPageSize","enableCaching","jsonp","defaultQuery","isDataAvailable","then","setDefaultQuery","deffered","Deferred","nextTick","getDeferedArgs","makeRequest","promise","extendRequest","fnSuccess","fnFail","cache","isSelector","virtualSelectRecords","fnQueryChild","subDeffer","childArgs","subUrl","childReq","subData","virtualRecords","catch","all","pResult","cResult","deff","doAjaxRequest","defer","check","hasChild","collapsible","image","iconWrapper","createListFromArray","isSingleLevel","generateUL","createListItemFromArray","subChild","curOpt","defaultListBaseOptions","getModuleClass","generateId","itemCreating","generateSingleLevelLI","generateLI","itemCreated","createListItemFromJson","defaultMappedFields","ariaAttributes","defaultAriaAttributes","typeofData","curItem","innerEle","showCheckBox","itemClass","imageUrl","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","innerDiv","wrapperRole","itemText","ulElement","listRole","isChecked","groupBy","headerTemplate","createList","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","groupDataSource","curFields","cusQuery","itemObj","grpItem","renderContentTemplate","liCollection","renderGroupTemplate","headerItems","category","headerItems_1","headerData","generateIcon","TimePickerBase","effectsConfig","None","SlideLeft","SlideDown","Zoom","Fade","effectsRTLConfig","root","focused","parentItem","listIcon","listItemText","groupListItem","headerTemplateText","disable","backIcon","checkboxWrapper","checkbox","checklist","checkboxIcon","checkboxRight","checkboxLeft","listviewCheckbox","itemCheckList","FieldSettings","ListView","setHTMLAttribute","setSize","listBaseOption","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","setCheckbox","curViewDS","getSubDS","resetCurrentList","isWindow","enableElement","isEnabled","showBack","showHeader","innerHeaderEle","textEle","hedBackButton","headerTemplateEle","fromView","toView","fPos_1","overflow_1","anim","aniObj","curUL","renderCheckbox","initialization","animateOptions","currentLiElements","isNestedList","selectedId","checkboxElement","frameElement_1","checkInternally","checkBoxPosition","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","getItemData","back","selectEventData","removeHover","removeSelect","setSelectLI","setCheckboxLI","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","onArrowKeyDown","arrowKeyHandler","elementTop","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","scrollTo","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","spaceKeyHandler","tabFocus","swipeActionHandler","focusout","swipe","focusedLI_1","hoverLI","selectedLI_1","renderSubList","selectedLI","lastLi","hoverSiblingLI","curLIs","levelKeys","localData","levelKeys_1","curDSJSON","findItemFromDS","curDS","getElementUID","resultJSON","getQuery","setViewDataSource","isInAnimation","setLocalData","renderList","renderIntoDom","createUIItem","uiVirtualization","classAr","pID","toUL","fromUL","selectItem","selectMultipleItems","getParentId","getSelectedItems","liTextCollection","liDataCollection","dataParent","tempData","findItem","enableItem","setItemState","disableItem","showItem","showHideItem","hideItem","addItem","addListItem","removeItemFromList","groupLi","previousElementSibling","dsIndex","removeMultipleItems","Virtualization","listViewInstance","firstDs","expectedDomItemCount","ValidateItemCount","domItemCount","uiLastIndex","wireScrollEvent","otherDs","topElement","bottomElement","totalHeight","topElementHeight","bottomElementHeight","listDiff","uiIndicesInitialization","onVirtualScroll","onVirtualUiScroll","dataSourceLength","itemCount","uiIndices","activeIndices","disabledItemIndices","hiddenItemIndices","getscrollerHeight","startingHeight","scrollPosition","scroll","onLongScroll","onNormalScroll","isScrollingDown","updateUI","updateUiContent","curViewDs","checkListWrapper","changeElementAttributes","checklistElement","activeIndex","findDSAndIndexFromId","dataCollection_1","textCollection_1","curViewDS_1","curViewDS_2","resutJSON","removeUiItem","addUiItem","changeUiIndices","liItem","previousSibling","commonTemplate","templateElements","groupTemplateElements","templateData","flatTemplateNodes","groupTemplateNodes","compileTemplate","textProperty","classProperty","attributeProperty","onChange","listElement","updateContextData","regexMatch","resultantOutput","classNameMatch","subNode","bindedvalue","attributeNames","attributeName","attributeNameFunction","attributeValueFunction","attrNameMatch","attrValueMatch","subNode_1","attrName","attributeValue","isChildHasTextContent","textPropertyMatch","textFunction","LEFTCALENDER","RIGHTCALENDER","STARTDATE","ENDDATE","RANGEHOVER","STARTLABEL","ENDLABEL","CALENDAR","HEADER","TITLE","ICONCONTAINER","RANGECONTAINER","PRESETS","FOCUSDATE","CONTENT","DAYSPAN","DATEDISABLED","ICONDISABLED","LISTCLASS","ListBaseClasses","HOVER","OVERFLOW","Presets","DateRangePicker","isCustomRange","isCustomWindow","presetsItem","previousEleValue","isKeyPopup","dateDisabled","isRangeIconClicked","isMaxDaysClicked","disabledDays","preventBlur","preventFocus","setModelValue","presetKeyConfig","keyInputConfigs","defaultConstant","customRange","applyText","cancelText","selectedDays","isMobile","matchMedia","angularTag","initProperty","navNextFunction","navNextMonth","navPrevFunction","navPrevMonth","deviceNavNextFunction","deviceNavNext","deviceNavPrevFunction","deviceNavPrevious","initStartDate","initEndDate","shiftTab","processPresets","setRangeAllowEdit","rangeIconHandler","inputKeyboardModule","updateHiddenInput","firstHiddenChild","secondHiddenChild","clearRange","applyButton","removeSelection","applyFunction","leftCalendar","calendarFocus","minDays","maxDays","isPreset","createPresets","listRippleEffect","renderControl","createControl","bindCalendarEvents","updateRange","rightCalendar","disabledDateRender","updateHeader","clearCalendarEvents","leftCalPrevIcon","leftCalNextIcon","rightCalPrevIcon","rightCalNextIcon","updateNavIcons","compareMonths","leftCalCurrentDate","rightCalCurrentDate","calendarIconEvent","deviceCalendarEvent","startButton","deviceHeaderClick","endButton","calendarIconRipple","leftKeyboardModule","keyInputHandler","rightKeyboardModule","bindCalendarCellEvents","removeFocusedDate","calendar","updateDeviceCalendar","deviceNavigation","deviceCalendar","removeClassDisabled","updateMinMaxDays","selectableDates","refreshControl","previousStartValue","previousEndValue","inputStr","isDateDisabled","keyCalendarUpdate","isLeftCalendar","updateCalendarElement","navInCalendar","leftLimit","rightLimit","keyNavigation","rightDateLimit","leftDateLimit","presetElement","selectRange","yearDate","calendarNavigation","checkMinMaxDays","presetHeight","tdCells_1","hoverSelection","focusedDate_1","tdCells_2","isDisabledCell","eleDate","startDateValue","elementCollection","elementCollection_1","tdCells_3","eleDateValue","eleDateValue_1","addSelectedAttributes","endDateValue","rangeArgs","inputValue","otherMonthSelect","isStartDate","sameDate","tdCell","endEle","endEle_1","endEle_2","ele_2","removeSelectedAttributes","tdCells","tdCells_4","tdCells_5","startMonth","maxEle","tdCells_6","calendar_1","tdCells_7","disabledDayCnt","start_1","end_1","updateControl","createRangeHeader","labelContainer","endBtn","startBtn","changeIcon","disableInput","validateRangeStrict","validateMinMaxDays","validateRange","renderCalendar","isSameMonth","startMonthCurrentDate","selectNextMonth","selectStartMonth","calendarContainer","prevIcon","leftTitle","leftContainer","rightContainer","leftNavTitle","rightTitle","rightNavTitle","controlContainer","headerContainer","footerSection","cancelBtn","CANCEL","applyBtn","cancelFunction","deviceHeaderUpdate","closeEventArgs","popupKeyboardModule","popupKeyActionHandle","onMouseClick","isClick","setListSelection","onMouseOver","onMouseLeave","renderCustomPopup","removeListSelection","applyPresetRange","modelValue","showPopup","openEventArgs","listTag","wireListEvents","unWireListEvents","popupWidth","btnKeyboardModule","presetKeyboardModule","presetKeyActionHandler","popupKeyBoardHandler","popupCloseHandler","rangeContainer","listMoveDown","setScrollPosition","listMoveUp","hvrItem","getHoverLI","actItem","getActiveLI","listHeight","active","liHeight","setEleWidth","virtualRenderCellArgs","virtualRenderCellEvent","isStartDisabled","isEndDisabled","createHiddenInput","isBlur","getSelectedRange","refreshChange","enableInput","clearModelvalue","DAY","MONTH","YEAR","NAVIGATION","FOCUS","createListItems","createdEl","timeFormat","timeCollections","Theme","TimePicker","disableItemCollection","keyConfigure","down","up","createInputElement","setTimeAllowEdit","validateInterval","validateDisable","getFormattedValue","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","aria-autocomplete","isNullOrEmpty","unBindEvents","ariaAttribute","generateList","listWrapper","addSelection","getPopupHeight","popupHeight","popupCalculation","firstItem","isEmptyList","textIndent","paddingRight","paddingLeft","containerStyle","setPopupWidth","createDateObj","removeErrorClass","checkErrorState","disableTimeIcon","selectInputText","getMeridianText","getCursorSelection","getActiveElement","borderLeftWidth","setScrollTo","findScrollTop","initialTime","scrollTime","cldrTimeFormat","cldrDateFormat","getCultureDateObject","getCultureTimeObject","dateToNumeric","getExactDateTime","checkValue","compareFormatChange","updatePlaceHolder","popupHandler","mouseUpHandler","curPos","cursorDetails","focusSelection","isSeparator","keyHandler","objToString","previousState","setSelection","animModel","documentClickHandler","checkValueChange","isNavigation","valueProcess","currentLi","setHover","maxVal","dateVal","strictOperation","setCurrentDate","clearHandler","inputEvent","setZIndex","getTextFormat","strArray","newval","findNextElement","textVal","timeVal","validLiElement","backward","elementIndex","isCheck","nextItem","offsetValue","lastItemOffsetValue","ulPadding","paddingTop","isUpdate","hoveredItem","getHoverItem","setActiveClass","TimeParse","listBaseOptions","getProperty","HOUR","MINUTE","SECOND","MILLISECOND","DATETIMEPOPUPWRAPPER","DateTimePicker","previousDateTime","blurHandler","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isDisable","timeIcon","renderTimeIcon","timeHandler","dateHandler","inputKeyAction","getCldrFormat","isDatePopupOpen","listCreation","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","TimeKeyActionHandle","unWireTimeListEvents","setDimension","setTimeHover","removeTimeHover","setInputValue","getFullDateTime","tempVal","combineDateTime","minutes","seconds","timeValue","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","hours","milliseconds","tempStartValue","tempMin","tempEndValue","tempMax","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","axisLabelFont","axisTitleFont","chartTitleFont","chartSubTitleFont","crosshairLabelFont","tooltipLabelFont","legendLabelFont","stripLineLabelFont","Font","Border","ChartArea","Margin","Indexes","CornerRadius","seriesIndex","EmptyPointSettings","TooltipSettings","DoubleRange","mStart","mEnd","Double","calculateNumericNiceInterval","actualDesiredIntervalsCount","intervalDivs","getActualRange","initializeDoubleRange","actualRange","doubleRange","POSITIVE_INFINITY","NEGATIVE_INFINITY","calculateRangeAndInterval","calculateRange","applyRangePadding","calculateVisibleLabels","series_1","paddingInterval","rangePadding","findMinMax","yMin","yMax","getRangePadding","findAdditional","findNormal","updateActualRange","calculateVisibleRange","zoomPosition","enableAutoIntervalOnZooming","triggerRangeRender","getFormat","isCustom","getMaxLabelWidth","isStack100","legendRender","textRender","pointRender","seriesRender","axisRangeCalculated","axisMultiLabelRender","tooltipRender","chartMouseMove","chartMouseClick","chartMouseLeave","chartMouseDown","chartMouseUp","zoomComplete","dragComplete","annotationRender","scrollEnd","scrollChanged","ChartAnnotationSettings","LabelBorder","MultiLevelCategories","StripLineSettings","MultiLevelLabels","Row","nearSizes","farSizes","computeSize","findTickSize","crossInAxis","findLabelSize","lineStyle","MajorGridLines","MinorGridLines","AxisLine","MajorTickLines","MinorTickLines","CrosshairTooltip","Axis","axisBottomLine","crossAt","updatedRect","multiLevelLabelHeight","isChart","crossAxis","tickPosition","isInside","majorTickLines","innerPadding","titleSize","maxLabelSize","placeNextToAxisLine","findDifference","updateCrossValue","baseRange","pointX","previousEnd","isIntersect","labelIntersectAction","rotatedLabel","edgeLabelPlacement","findMultiRows","multiLevelLabelModule","multiLevelLabels","getMultilevelLabelsHeight","currentX","store","getModule","baseModule","originalText","Mean","verticalStandardMean","verticalSquareRoot","horizontalStandardMean","horizontalSquareRoot","verticalMean","horizontalMean","PolarArc","currentXPosition","CustomizeOption","StackValues","startValues","endValues","RectOption","CircleOption","PolygonOption","Thickness","PointData","lierIndex","AccPointData","ControlPoints","CartesianAxisLayoutPanel","chartModule","measureAxis","seriesClipRect","initialClipRect","leftSize","rightSize","topSize","bottomSize","measureRowAxis","measureColumnAxis","calculateAxisSize","refreshAxis","calculateRowSize","rows","arrangeAxis","measureDefinition","computedHeight","calculateColumnSize","computedWidth","definition","axis_1","scrollBarModule","enableScrollbar","isZoomed","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","rowIndex","rowTop","remainingHeight","columnLeft","remainingWidth","renderAxes","outsideElement","axisElement","axisLineElement","findAxisPosition","drawAxisLine","majorGridLines","drawXAxisGridLine","drawXAxisLabels","drawXAxisBorder","drawXAxisTitle","drawYAxisGridLine","drawYAxisLabels","drawYAxisBorder","drawYAxisTitle","renderScrollbar","drawBottomLine","isScrollUI","isRow","definitionName","optionsLine","plotX","plotY","stroke-dasharray","minorDirection","pointY","majorGrid","majorTick","minorGird","minorTick","tickSize","axisLineSize","ticksbwtLabel","isTickInside","isBorder","minorGridLines","minorTickLines","minorTicksPerInterval","drawAxisMinorLine","renderGridLine","renderTickLine","chartArea","elementSize","isLabelInside","isOpposed","createZoomingLabel","endY","labelBorder","endX","createAxisBorderElement","renderYAxisMultiLevelLabels","labelIndex","logStart","coor","logInterval","logPosition","ticksX","ticksY","findLogNumeric","labelPadding","diffHeight","yLocation","intervalLength","islabelInside","anglePadding","findAxisLabel","axisRect","length_2","renderXAxisMultiLevelLabels","borderElement","enableTrim","findParentNode","zoomElement","ChartData","currentPoints","previousPoints","getData","drawType","isRectSeries","marker","mouseX","mouseY","getRectPoint","selectionMode","selectionModule","rectPoints","fromCenterX","fromCenterY","clickAngle","distanceFromCenter","arcAngle","regionData","regions","chartAreaType","checkRegionContainsPoint","regionRect","getClosest","xData","xData_1","getClosestX","DataLabelSettings","MarkerSettings","Points","symbolLocations","percentage","Trendline","setDataSource","trendLineModule","initDataSource","visibleSeriesCount","ErrorBarCapSettings","ChartSegment","ErrorBarSettings","SeriesBase","currentViewData","processJsonData","xName","Series","textMappingName","processInternalData","paretoSeriesModule","performCumulativeCalculation","sizeMax","getSeriesType","dataPoint","pushCategoryData","pushData","setEmptyPoint","isArea","findSplinePoint","volume","pointColorMapping","tooltipMappingName","findVisibility","isEmpty","emptyPointSettings","yData","getAverage","yValues","setXYMinMax","setHiloMinMax","isIndexed","refreshDataManager","dateSource","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","stackingSeies","stackedValues","seriesCollection_1","pointsLength","findPercentageOfStacking","stackingSeies_1","seriesCollection_2","renderSeries","createSeriesElements","errorBarModule","dataLabelModule","appendSeriesElement","seriesElements","performAnimation","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","Marker","renderMarker","previousPath","circlePath","shapeOption","markerElement","isBoxPlot","markerClipRect","getRangeLowPoint","markerElements","incFactor","lowPoint","LegendSettings","BaseLegend","rowCount","columnCount","pageButtonSize","pageXCollections","maxColumns","isTrimmed","currentPage","legend","legendSettings","legendID","isChartControl","calculateLegendBounds","legendBounds","library","getLegendBounds","getLocation","setBounds","maxItemHeight","legendHeight","legendWidth","alignLegend","legendSize","renderLegend","firstLegend","findFirstLegendPosition","legendCollections","legendGroup","legendTranslateGroup","createLegendElements","legendSeriesGroup","totalPages","textPadding","shapePadding","previousLegend","legendOption","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","Dictionary","toStringFunction","nElements","toStr","pair","previousElement","keysArray","namesOfKeys","index1","pair1","valuesArray","namesOfValues","index2","pair2","containsKey","PdfName","stringStartMark","internalValue","isSaving6","position6","normalizeValue","status6","index6","writer","escapeString","crossTable","newName","stringValue","ch","delimiters","replacements","Operators","forTest","endObj","slash","newLine","stream","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","setGraphicsState","comment","evenOdd","setMiterLimit","DictionaryProperties","pages","kids","resources","mediaBox","decodeParms","type1","baseFont","encoding","subtype","contents","procset","colorSpace","extGState","xObject","bitsPerComponent","dctdecode","blackIs1","predictor","deviceRgb","annot","uri","annots","ca","CA","xyz","dest","BM","flatedecode","cIDFontType2","cIDToGIDMap","identity","dw","fontDescriptor","cIDSystemInfo","fontName","flags","fontBBox","missingWidth","stemV","italicAngle","capHeight","ascent","descent","leading","avgWidth","fontFile2","xHeight","stemH","registry","ordering","supplement","type0","identityH","toUnicode","descendantFonts","PdfDictionary","dictionary","position7","primitiveItems","suffix","archive","isFont","encrypt","dictionaryProperties","freezeChanges","status7","isSaving7","index7","getArchive","setArchive","setEncrypt","modify","getEncrypt","freezer","bChanged","onBeginSave","beginSave","onFontDictionaryBeginSave","fontDictionaryBeginSave","onDescendantFontBeginSave","descendantFontBeginSave","onTemplateBeginSave","pageBeginDrawTemplate","pageBeginSave","onBeginAnnotationSave","annotationBeginSave","onSectionBeginSave","saveEvent","sectionBeginSave","bRaiseEvent","saveItems","SaveSectionCollectionEventHandler","SaveDescendantFontEventHandler","SaveFontDictionaryEventHandler","SaveAnnotationEventHandler","SaveSectionEventHandler","SaveTemplateEventHandler","PdfNumber","position5","status5","isSaving5","index5","intValue","floatToString","returnString","PdfArray","startMark","endMark","position9","clonedObject9","internalElements","tempArray","tempNumberArray","pdfNumber","status9","isSaving9","index9","pdfCrossTable","markedChange","getItems","newArray","fromRectangle","tempElements","markChanged","removeAt","Save","fileName","buffer","mimeType","getMimeType","Blob","isMicrosoftBrowser","msSaveBlob","downloadLink","saveInternal","hasDownloadAttribute","download","dataUrl_1","URL","createObjectURL","revokeObjectURL","reader_1","FileReader","onloadend","readAsDataURL","XmlWriter","contentPos","bufferText","bufferBlob","currentState","namespaceStack","Namespace","elementStack","XmlElement","attributeStack","flush","writeProcessingInstruction","checkName","writeStartDocument","writeProcessingInstructionInternal","standalone","rawText","writeEndDocument","writeEndElement","writeStartElement","localName","namespace","startElementContent","lookupPrefix","lookupNamespace","writeStartElementInternal","writeEndElementInternal","previousTop","writeElementString","writeString","writeAttributeString","writeStartAttribute","writeStringInternal","writeEndAttribute","writeInternal","writeRaw","isRawString","writeStartAttributePrefixAndNameSpace","writeStartAttributeSpecialAttribute","skipPushAndWrite","pushNamespaceExplicit","pushNamespaceImplicit","writeStartAttributeInternal","namespaceName","writeNamespaceDeclaration","namespaceUri","writeStartNamespaceDeclaration","inAttributeValue","addNamespace","ns","lookupNamespaceIndex","existingNsIndex","addAttribute","XmlAttribute","isDuplicate","Encoding","includeBom","emitBOM","encodingType","initBOM","getByteCount","utf8Len","getByteCountInternal","codePoint","isHighSurrogate","codeUnit","toCodepoint","highCodeUnit","lowCodeUnit","charIndex","charCount","byteCount","isUtf8","charCode","getBytes","RangeError","ArrayBuffer","getBytesOfUtf8Encoding","getBytesOfUnicodeEncoding","getBytesOfAnsiEncoding","byteLength","byteCal","getStringOfUtf8Encoding","byteUnicode","getStringofUnicodeEncoding","bufview","charcode","uint","uint16","byteUni","byte16","StreamWriter","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","dataWindow","hashHead","hashPrevious","writeZLibHeader","compressedString","encode","inputBuffer","ChecksumCalculator","checksumUpdate","pendingBufferFlush","compressData","headerDate","pendingBufferWriteShortBytes","finish","success","fillWindow","canFlush","compressSlow","lookAheadCompleted","slideWindow","prevMatch","prevLen","discardMatch","matchPreviousBest","matchPreviousAvailable","huffmanIsFull","insertString","findLongestMatch","huffmanTallyLit","huffmanTallyDist","huffmanFlushBlock","lastBlock","more","subarray","updateHash","chainLen","niceLen","scan","bestEnd","bestLength","stringEnd","scanEnd1","scanEnd","literal","codeFrequencies","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","elementCount","minCodes","codeMinCount","codeFrequency","lengthCount","Int32Array","codeCount","codeLength","codes","lengthTemp","nextCode","bitsCount","bitReverse","reverseBits","blTree","maxCount","minCount","curLen","nextLen","maxRepeatCount","minRepeatCount","currentRepeatCount","currentCodeLength","codesCount","arrTree","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","skipFileSave","zipData","dirLength","getCompressedData","constructZippedObject","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","PdfStream","dicPrefix","dicSuffix","clonedObject2","bCompress","isImageStream","isFontStream","dataStream2","bCompress2","clearStream","internalStream","writeBytes","onCmapBeginSave","cmapBeginSave","onFontProgramBeginSave","fontProgramBeginSave","compressContent","byteArray","dataArray","getCompressedString","addFilter","filterName","PdfReferenceHolder","isImage","bytesToString","output","SaveCmapEventHandler","SaveFontProgramEventHandler","ForceEncoding","SourceType","PdfHorizontalAlignment","PdfString","bHex","position1","clonedObject1","bDecrypted","isParentDecrypted","isPacked","isFormField","isColorSpace","isHexString","status1","isSaving1","bConverted","bForceEncoding","bytesToHex","Ascii","pdfEncode","stringMark","escapeSymbols","currentData","CrossTable","newString","toUnicodeArray","bAddPrefix","byteToString","hexStringMark","hexFormatPattern","PdfReference","objNumber","genNumber","index3","position3","status3","isSaving3","obj2","index4","position4","objectIndex","primitiveObject","status4","isSaving4","pdfReference","cTable","isSaving","getReference","PdfAction","pdfDictionary","PdfUriAction","uniformResourceIdentifier","PdfVerticalAlignment","PdfTextAlignment","TextRenderingMode","PdfLineJoin","PdfLineCap","PdfDashStyle","PdfFillMode","PdfColorSpace","PdfBlendMode","PdfGraphicsUnit","PdfGridImagePosition","PdfTextDirection","PdfFontStyle","PdfColor","color1","color2","color3","color4","redColor","greenColor","blueColor","grayColor","gray","alpha","filled","maxColourChannelValue","cyanColor","magentaColor","yellowColor","blackColor","assignCMYK","red","green","blue","black","cyan","magenta","yellow","rgbToString","ifStroking","colour","rgbStrings","toArray","Rgb","grayStringsSroke","grayStringsFill","PointF","SizeF","RectangleF","arg1","arg2","arg3","arg4","pointf","sizef","Rectangle","PdfBrush","PdfSolidBrush","pdfColor","monitorChanges","brush","streamWriter","getResources","currentColorSpace","setColorAndSpace","resetChanges","PdfFontFamily","PdfFontType","PdfWordWrapType","PdfSubSuperScript","FontEncoding","TtfCmapFormat","TtfCmapEncoding","TtfPlatformID","TtfMicrosoftEncodingID","TtfMacintoshEncodingID","FontDescriptorFlags","TtfCompositeGlyphFlags","LineType","PdfStringFormat","scalingFactor","wordWrapType","Word","internalLineLimit","Top","isRightToLeft","internalCharacterSpacing","internalWordSpacing","clip","pdfSubSuperScript","internalParagraphIndent","firstLineIndent","trailingSpaces","isNoClip","initialLineIndent","StringTokenizer","currentPosition","getCharsCount","numSymbols","readLine","text2","peekLine","readWord","peekWord","word","read","builder","peek","readToEnd","spaces","whiteSpacePattern","PdfStringLayouter","isOverloadWithPosition","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","curLine","curIndent","curLineWidth","getWrapType","WordOnly","textRemainder","Character","ln","LayoutBreak","LastParagraphLine","layoutLines","breakType","LineInfo","allowPartialLines","lineLimit","expHeight","trimLine","empty","ObjectStatus","PdfFont","Regular","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","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","a3","a4","a5","a6","a7","a8","a9","a10","b0","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","RotateAngle0","pageOrientation","Portrait","pageOrigin","isRotation","updateSize","Landscape","getActualSize","PdfStreamWriter","dictionaryName","writeOperator","executeObject","useEvenOddRule","fillStrokePath","fillPath","closeFillPath","textScaling","strokePath","restoreGraphicsState","saveGraphicsState","startNextLine","writePoint","showText","checkTextParam","writeText","setLeading","setTextRenderingMode","renderingMode","setCharacterSpacing","charSpacing","setWordSpacing","showNextLineText","setColorSpace","temparg1","op","opcode","updateY","writeComment","forStroking","setLineDashPattern","patternOffset","setLineDashPatternHelper","tempPattern","miterLimit","setLineCap","lineCapStyle","setLineJoin","lineJoinStyle","PdfPen","dashOffsetValue","penDashPattern","pdfDashStyle","Solid","pdfLineCap","pdfLineJoin","penWidth","internalMiterLimit","setBrush","Custom","Dash","Dot","DashDot","DashDotDot","sBrush","pdfBrush","currentPen","dashControl","lineJoin","lineCap","pen","getPattern","dashOffset","dashPattern","PdfTransformationMatrix","radDegFactor","transformationMatrix","multiply","degreesX","degRadFactor","metrixElements","tempMatrix","dispose","ProcedureSets","pdf","imageB","imageC","imageI","TemporaryDictionary","mKeys","mValues","ReferenceError","PdfTransparency","PdfAutomaticFieldInfoCollection","automaticFieldsInformation","fieldInfo","automaticFields","PdfGraphicsElement","drawHelper","graphics","bNeedSave","gState","translateTransform","drawInternal","PdfAutomaticField","internalBounds","internalTemplateSize","internalFont","internalBrush","internalPen","internalStringFormat","performDrawHelper","scalingX","scalingY","getFont","stringFormat","draw","location_1","PdfAutomaticFieldInfo","getBrush","defaultFont","getPageFromGraphics","pageNumberFieldLocation","pageNumberField","ByteArray","mPosition","dataView","DataView","readByte","getBuffer","writeFromBase64String","base64","encodedString","chr1","chr2","chr3","enc2","enc3","keyStr","resultIndex","PdfBoolean","objectStatus","saving","boolToStr","PdfLayoutType","ImageDecoder","mFormat","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","ptHeight","PdfBitmap","imageStatus","loadImage","initializeAsync","decoder","TtfTableInfo","TtfNameTable","TtfNameRecord","TtfHeadTable","TtfMetrics","macStyle","TtfHorizontalHeaderTable","TtfOS2Table","TtfPostTable","TtfLongHorMetric","TtfCmapSubTable","TtfCmapTable","TtfGlyphInfo","glyph","TtfLocaTable","TtfAppleCmapSubTable","TtfMicrosoftCmapSubTable","TtfTrimmedCmapSubTable","TtfGlyphHeader","BigEndianWriter","capacity","int32Size","int16Size","int64Size","bufferLength","internalPosition","writeShort","writeInt","writeUInt","buff","TtfReader","fontData","isTtcFont","isMacTtf","metricsName","isMacTTF","missedGlyphs","tableNames","entrySelectors","macintoshDictionary","microsoftDictionary","internalMacintoshGlyphs","internalMicrosoftGlyphs","readFontDictionary","readNameTable","headTable","readHeadTable","initializeFontName","checkPreambula","numTables","readInt16","tableDirectory","tableKey","readString","readInt32","lowestPosition","fixOffsets","minOffset","tableKeys","tableInfo","getTable","formatSelector","readUInt16","nameRecords","platformID","encodingID","languageID","nameID","unicode","readFixed","fontRevision","checkSumAdjustment","readUInt32","magicNumber","unitsPerEm","created","readInt64","modified","lowestReadableSize","fontDirectionHint","indexToLocalFormat","glyphDataFormat","readHorizontalHeaderTable","ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","metricDataFormat","numberOfHMetrics","readOS2Table","xAvgCharWidth","usWeightClass","usWidthClass","fsType","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","sFamilyClass","panose","readBytes","ulUnicodeRange1","ulUnicodeRange2","ulUnicodeRange3","ulUnicodeRange4","vendorIdentifier","fsSelection","usFirstCharIndex","usLastCharIndex","sTypoAscender","sTypoDescender","sTypoLineGap","usWinAscent","usWinDescent","ulCodePageRange1","ulCodePageRange2","sxHeight","sCapHeight","usDefaultChar","usBreakChar","usMaxContext","readPostTable","formatType","underlinePosition","underlineThickness","isFixedPitch","minType42","maxType42","minType1","maxType1","readWidthTable","glyphCount","advanceWidth","lsb","glyphWidth","readCmapTable","tablesCount","subTables","subTable","readCmapSubTable","getCmapEncoding","Macintosh","Microsoft","Apple","readAppleCmapTable","readMicrosoftCmapTable","Trimmed","readTrimmedCmapTable","maxMacIndex","glyphInfo","getWidth","macintosh","addGlyph","Unicode","microsoft","segCountX2","searchRange","entrySelector","rangeShift","segCount","endCount","readUshortArray","reservedPad","startCount","idDelta","idRangeOffset","glyphID","codeOffset","Symbol","firstCode","entryCount","postScriptName","glyphCode","Undefined","Roman","microsoftGlyphs","macintoshGlyphs","initializeMetrics","horizontalHeadTable","os2Table","postTable","cmapTables","bSymbol","isSymbol","winAscent","macAscent","winDescent","macDescent","fontBox","widthTable","updateWidth","subScriptSizeFactor","superscriptSizeFactor","getGlyph","byteToProcess","getDefaultGlyph","readLocaTable","bShort","offsets","updateGlyphChars","glyphChars","locaTable","glyphCharKeys","nextKey","processCompositeGlyph","glyphOffset","glyphHeader","numberOfContours","skipBytes","glyphIndex","MoreComponents","Arg1And2AreWords","WeHaveScale","WeHaveAnXyScale","WeHaveTwoByTwo","generateGlyphTable","newLocaTable","newGlyphTable","activeGlyphs","glyphSize","glyphSizeAligned","nextGlyphOffset","nextGlyphIndex","oldGlyphOffset","oldNextGlyphOffset","glyphTableSize","updateLocaTable","bLocaIsShort","newLocaTableOut","newLocaUpdated","newLocaSize","getFontProgram","locaTableSize","getFontProgramLength","fontProgramLength","writeCheckSums","writeGlyphs","usedTablesSize","nextTableSize","calculateCheckSum","byte1","byte2","byte3","byte4","setOffset","createInternals","bIsLocaShort","isFontPresent","getGlyphChars","charKeys","getAllGlyphs","allGlyphInfo","readFontProgram","convertString","getCharWidth","isUnicode","i1","i2","i3","i4","written","PdfFontMetrics","getAscent","getDescent","getLineGap","clearTypeFonts","clearTypeFontCollection","subSuperScript","SubScript","SuperScript","WidthTable","internalWidthTable","StandardWidthTable","widths","UnicodeTrueTypeFont","base64String","nameString","isCompress","isEmbedFont","cmapPrefix","cmapEndCodespaceRange","cmapBeginRange","cmapEndRange","cmapSuffix","fontString","Initialize","ttfReader","ttfMetrics","fontDictionary","fontProgram","cmap","descendantFont","subsetName","getFontName","createDescendantFont","createCmap","createFontDictionary","createFontProgram","isBold","formatName","createFontDescriptor","systemInfo","createSystemInfo","descriptor","getDescriptorFlags","getBoundBox","descFonts","usedChars","getDescendantWidth","generateCmap","generateFontProgram","chLen","firstGlyphIndex","lastGlyphIndex","firstGlyphIndexWasSet","widthDetails","middlePart","toHexString","nextRange","FixedPitch","Symbolic","Nonsymbolic","isItalic","ForceBold","isCaseChange","setSymbols","ArabicShapeRenderer","arabicCharTable","alef","alefHamza","alefHamzaBelow","alefMadda","lam","hamza","zeroWidthJoiner","hamzaAbove","hamzaBelow","wawHamza","yehHamza","waw","alefMaksura","yeh","farsiYeh","shadda","madda","lwa","lwawh","lwawhb","lwawm","bwhb","fathatan","superScriptalef","vowel","arabicMapTable","getCharacterShape","doShape","ArabicShape","present","ligature","shapeCount","getShapeCount","Shapes","Value","Ligature","Type","shapeValue","shapeType","shapeVowel","shapeLigature","shapeShapes","Bidi","indexes","indexLevels","mirroringShapeCharacters","doMirrorShaping","getLogicalToVisualString","inputText","rtlCharacters","RtlCharacters","getVisualOrder","setDefaultIndexLevel","doOrder","resultBuilder","odd","even","pstart","pend","reArrange","textOrder","rtlCharacterTypes","LRE","LRO","AL","RLE","RLO","PDF","EN","ES","ET","AN","CS","NSM","BN","S","WS","ON","charTypes","getCharacterCode","doVisualOrder","characterCodes","setDefaultLevels","setLevels","updateLevels","getEmbeddedCharactersLength","preType","checkNSM","checkEmbeddedCharacters","startType","endType","charType","checkEuropeanDigits","checkArabicCharacters","checkEuropeanNumberSeparator","checkEuropeanNumberTerminator","getLength","checkOtherNeutrals","checkOtherCharacters","pst","checkCommanCharacters","validSet","byte","lt","tt","rt","RtlRenderer","openBracket","closeBracket","wordSpace","customLayout","splitLayout","customSplitLayout","getGlyphIndex","glyphs","fontInternal","textDirection","layouted","txt","addChars","PdfGraphics","previousTextRenderingMode","Fill","previousCharacterSpacing","previousWordSpacing","previousTextScaling","procedureSets","isNormalRender","isUseFontSize","isEmfTextScaled","isEmf","isEmfPlus","isBaselineFormat","emfScalingFactor","colorSpaceChanged","isPointOverload","currentColorSpaces","isImageOptimized","graphicsState","istransparencySet","internalAutomaticFields","startCutIndex","pdfStreamWriter","canvasSize","pdfStringLayoutResult","internalMediaBoxUpperRightBound","clipBounds","pageLayer","bStateSaved","currentBrush","currentFont","bCSInitialized","currentStringFormat","requireProcedureSet","drawPdfTemplate","bNeedScale","getTranslateTransform","getScaleTransform","getName","newLocation","drawString","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","resultHeight","remainingString","drawLayoutResult","underlineStrikeoutText","getNextPage","section","getPages","setClip","tm","getTextRenderingMode","cs","ws","textHeight","boundsHeight","vAlignShift","ttfFont","lineInfo","hAlignShift","drawUnicodeLine","drawAsciiLine","justifyLine","useWordSpace","Justify","rtlRender","blocks","rightAlign","RightToLeft","drawUnicodeBlocks","breakUnicodeLine","tokens","token","convertToUnicode","getUnicodeString","xShift","spaceWidth","tokenWidth","converted","boundsWidth","hasWordSpacing","whitespacesCount","initializeCoordinates","justifyStyle","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","setTransparency","trasparencies","transp","td","TransparencyData","clipTranslateMargins","clipArea","rotateTransform","getRotateTransform","mediaBoxUpperRightBound","cropBox","PdfGraphicsState","textRenderingMode","doRestoreState","pathTypesValuesMask","transparencyObject","GetResourceEventHandler","internalTextRenderingMode","internalTextScaling","pdfColorSpace","pdfGraphics","pdfPen","pdfFont","alphaPen","alphaBrush","blendMode","PdfPageLayer","streamClipPageTemplates","sublayer","contentLength","pdfPage","clipPageTemplates","layerid","layerName","initializeGraphics","PdfPageLayerCollection","sign","oPage","gr","sc","isSame","origin","getActualBounds","PdfCollection","parentLayerCount","optionalContent","PdfPageBase","lPage","parseLayers","firstArgument","secondArgument","addLayer","insertLayer","loadedPage","saveStream","restoreStream","saveData","PdfTemplate","writeTransformation","tempSize","templateSize","PdfResources","addType","addSubType","baseDictionary","getNames","primitive","names","sName","generateName","pdfNames","fonts","procedureSetName","procSets","removeFont","Guid","getNewGuidString","xobjects","savable","transDic","parentXObjects","hasSameImageStream","oldReference","randomString","randomNumber","defLayerIndex","pageDictionary","pdfSection","defaultLayerIndex","layerCollection","PdfAnnotationCollection","alreadyExistsAnnotationError","missingAnnotationException","internalAnnotations","lists","doAdd","setPage","layoutResult","lastPosition","setColor","colours","PdfPage","annotationCollection","defaultLayer","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","getGroup","createNewGroup","tGroup","representative","removeGroup","isMerging","defaultMargin","documentPageCollection","cacheCollection","defaultStandardFont","PdfStandardFont","Helvetica","isCacheEnabled","Cmyk","GrayScale","checkPagesPresence","PdfStandardFontMetricsFactory","getMetrics","getHelveticaMetrics","Courier","getCourierMetrics","TimesRoman","getTimesMetrics","getSymbolMetrics","ZapfDingbats","getZapfDingbatsMetrics","subSuperScriptFactor","helveticaBoldItalicAscent","helveticaBoldItalicDescent","helveticaBoldItalicName","arialBoldWidth","helveticaBoldAscent","helveticaBoldDescent","helveticaBoldName","helveticaItalicAscent","helveticaItalicDescent","helveticaItalicName","arialWidth","helveticaAscent","helveticaDescent","helveticaName","courierBoldItalicAscent","courierBoldItalicDescent","courierBoldItalicName","fixedWidth","courierBoldAscent","courierBoldDescent","courierBoldName","courierItalicAscent","courierItalicDescent","courierItalicName","courierAscent","courierDescent","courierName","timesBoldItalicAscent","timesBoldItalicDescent","timesBoldItalicName","timesRomanBoldItalicWidths","timesBoldAscent","timesBoldDescent","timesBoldName","timesRomanBoldWidth","timesItalicAscent","timesItalicDescent","timesItalicName","timesRomanItalicWidth","timesAscent","timesDescent","timesName","timesRomanWidth","symbolAscent","symbolDescent","symbolName","symbolWidth","zapfDingbatsAscent","zapfDingbatsDescent","zapfDingbatsName","zapfDingbatsWidth","fontFamilyPrototype","encodings","pdfFontFamily","checkStyle","initializeInternals","convert","getCharWidthInternal","stFont","fontFamilyEqual","lineReducer","styleEqual","WinAnsiEncoding","charOffset","PdfAnnotation","textBrush","textFont","internalColor","darkness","nativeRectangle","initialHeight","tempLoacation","PdfLinkAnnotation","PdfActionLinkAnnotation","pdfAction","getSetAction","PdfDocumentLinkAnnotation","pdfDestination","ElementLayouter","layoutElement","layoutInternal","Layouter","PdfLayoutFormat","baseFormat","break","paginateBounds","boundsSet","usePaginateBounds","layoutType","layoutPaginateBounds","PdfLayoutParams","layoutFormat","PdfLayoutResult","PdfLayoutElement","beginPageLayout","endPageLayout","onBeginPageLayout","onEndPageLayout","bEmbedFonts","PdfLayoutBreakType","PdfDestinationMode","TextLayouter","currentBounds","pageResult","TextPageLayoutResult","remainder","layoutOnPage","getLayoutResult","PdfTextLayoutResult","lastLineBounds","checkCorrectBounds","stringResult","textFinished","FitElement","PdfTextWebLink","getTextPageBounds","verticalShift","remainderText","lastLineTextBounds","PdfTextElement","hasPointOverload","isPdfTextElement","stringLayoutResult","previousPosition","calculateResultBounds","lineSize","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","destinationLocation","initializePrimitive","simplePage","FitToPage","PdfTrueTypeFont","createFontInternal","getUnicodeLineWidth","codeWidth","calculateStyle","iStyle","equalFont","enableCache","isEmbed","isUnicodeFont","glyphIndices","resultGlyph","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","gridBackgroundImage","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","gridRowBackgroundImage","RangeNavigatorTheme","PdfGridCell","cellWidth","cellHeight","tempval","fontSpilt","finsh","rowSpanRemainingHeight","hasRowSpan","hasColSpan","isFinish","gridRowSpan","colSpan","gridRow","internalIsCellMergeContinue","internalIsRowMergeContinue","internalIsCellMergeStart","internalIsRowMergeStart","remaining","objectValue","PdfGrid","isSingleGrid","ParentCell","isChildGrid","getRow","colCount","rowSpanExists","hasRowSpanSpan","cellStyle","measureHeight","columnSpanExists","isComplete","measureWidth","layouter","getTextFont","webLink","cellPadding","cellSpacing","drawCellBackground","getBackgroundBrush","backgroundImage","getBackgroundImage","adjustContentLayoutArea","returnBounds","rowSpan","cancelSubsequentSpans","allowHorizontalOverflow","rowOverflowIndex","adjustOuterLayoutArea","getTextPen","getTextBrush","strFormat","getStringFormat","innerLayoutArea","allowRowBreakAcrossPages","splitChildRowIndex","rowFontSplit","repeatFlag","childGrid","layoutRect","PdfGridLayouter","PdfGridLayoutFormat","LayoutFormat","Paginate","setSpan","checkSpan","childGridResult","rowBreakHeightValue","rowBreakHeight","NestedGridLayoutResult","imageBounds","drawCellBorders","borderOverlapStyle","Inside","p1","p2","Square","currentColIndex","columnSpan","isCellMergeContinue","compWidth","getColumn","currentRowIndex","rowCollection","getHeader","rowMergeComplete","calculateWidth","cellIndex","tempWidth","PdfGridCellCollection","tempcell","PdfGridColumn","columnWidth","isCustomWidth","PdfGridColumnCollection","internalColumns","measureColumnsWidth","initialWidth","isPageWidth","getDefaultWidths","subFactor","PdfGridRow","gridRowOverflowIndex","rowWidth","isrowFinish","isRowSpanRowHeightSet","noOfPageCount","isRowHeightSet","isPageBreakRowSpanApplied","isRowMergeComplete","pdfGrid","bRowSpanExists","gridCells","rowStyle","gridRowBreakHeight","gridResult","bColumnSpanExists","cellIn","rowin","rowWid","PdfGridRowCollection","addRow","temprow","PdfGridHeaderCollection","gridSize","isGridSplit","isRearranged","pageBounds","listOfNavigatePages","parentCellIndex","breakRow","hasColumnSpan","beginCellDraw","endCellDraw","bRepeatHeader","gridColumns","gridRows","gridHeaders","gridInitialWidth","gridStyle","ispageWidth","ischildGrid","parentCell","onBeginCellDraw","raiseBeginCellDraw","onEndCellDraw","raiseEndCellDraw","gridLocation","currentCellIndex","maxSpan","isRowMergeContinue","isCellMergeStart","isRowMergeStart","maximumRowSpan","cellcolSpan","cellrowSpan","cellmaxSpan","childGridColumnWidth","colCount_1","colCount_2","RowCount","ColCount","colWidth","childGridColWidth","childheight","columnRanges","gridLayoutFormat","currentPageBounds","currentGraphics","FitColumnsToPage","Grid","hType","horizontalOverflowType","determineColumnDrawRanges","startColumn","endColumn","cellWidths","availableWidth","subWidths","layoutedPages","startPage","cellBounds","cellStartIndex","cellEndIndex","returnObject","raiseBeforePageLayout","drawRow","repeatRow","originalHeight","repeatRowIndex","rowResult","tempResult","raisePageLayouted","getNextPageformat","isRowBreaksNextPage","i_2","repeatHeader","j_1","headerRepeat","j_2","tempResult1","i_3","i_4","OnePage","i_5","recalHeight","ReCalculateHeight","secion","pageGraphics","location_2","totalwidth","i_6","isPdfGrid","maximumCellBoundsWidth","largeNavigatePage","rowLayoutBoundsWidth","NextPage","reArrangePages","nextPage","pageindex","CheckIfDefaultFormat","defaultFormat","measureTrailingSpaces","noClip","RaiseBeforeCellDraw","PdfGridBeginCellDrawEventArgs","raiseAfterCellDraw","cellstyle","PdfGridEndCellDrawEventArgs","isChanged","PdfGridLayoutResult","newHeight","currentRow","raiseBeginPageLayout","PdfGridBeginPageLayoutEventArgs","startRowIndex","PdfGridEndPageLayoutEventArgs","raiseEndPageLayout","result_1","RowLayoutResult","rowHeightWithSpan","currRowIndex","calculatedHeight","FitPage","drawRowWithBreak","repeatRowNumber","location_4","cancelSpans","calculateHeight","gridHeight","cellstyle1","FinishedDrawingCell","rowBreakPageHeightCellIndex","GridCellEventArgs","gridRowIndex","gridCellIndex","gridBounds","bSkip","PdfCancelEventArgs","isCancel","BeginPageLayoutEventArgs","EndPageLayoutEventArgs","nextPdfPage","startRow","layoutedBounds","bIsFinished","ExportUtils","resizeTo","screen","availWidth","availHeight","getHTMLContent","export","controls","controlValue","getControlsValue","isDownload","svgData","XMLSerializer","serializeToString","triggerDownload","image_1","ctx_1","imageString","msSaveOrOpenBlob","msToBlob","MouseEvent","bubbles","cancelable","groupEle","CrosshairSettings","ZoomSettings","Chart","chartid","initPrivateVariable","refreshDefinition","tooltipModule","createChartSvg","calculateAreaType","calculateVisibleSeries","initTechnicalIndicators","initTrendLines","calculateVisibleAxis","getLocalizedLabel","legendModule","getLegendOptions","calculateStackValues","renderElements","isCalculateStacking","rectCount","renderBorder","renderTitle","renderAreaBorder","renderSeriesElements","applyZoomkit","performSelection","setSecondaryElementPosition","renderAnnotation","yAxisElements","stripLineModule","renderStripLine","initializeModuleElements","dataLabelCollections","indicators","indicatorElements","hasTrendlines","trendLineElements","isTrendline","tooltipDiv","initializeIndicator","initializeTrendLine","appendElementsAfterSeries","indicator","createIndicatorElements","getTrendLineElements","enablePan","performedUI","applyZoomToolkit","annotationModule","renderAnnotations","selectedDataIndexes","invokeSelection","redrawSelection","initializeDataModule","techIndicator","titleHeight","subTitleHeight","titleWidth","subTitleCollection","subTitle","subTitleStyle","exportChart","trendIndex","trendLine","sourceIndex","initSeriesCollection","yAxisName","polarSeriesModule","radarSeriesModule","paretoAxes","isPanning","isAxisZoomed","series_2","initAxis","injectTo","isSeries","seriesName","initSeries","getAnchor","renderSubTitle","subTitleElementSize","subTitleOptions","addSeries","removeSeries","removeSvg","stopEvent","chartOnMouseDown","mouseMove","mouseEnd","chartOnMouseClick","chartRightClick","mouseLeave","chartResize","longPress","crosshairModule","pointerType","zooming","disableScroll","enableSelectionZooming","enablePinchZooming","msTouchAction","msContentZooming","msUserSelect","webkitUserSelect","isOrientation","setMouseXY","currentSize","previousSize","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","enableMouseWheelZooming","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","seriesRefresh","isMultiSelect","NiceInterval","calculateDateTimeNiceInterval","totalDays","actualIntervalType","getSkeleton","getDayFormat","getMonthFormat","findCustomFormats","DateTime","datetimeInterval","getYear","getHour","endMinute","endSecond","endYear","endMonth","endDay","axisLabels","alignRangeStart","skeletonType","sDate","intervalSize","sResult","Category","Logarithmic","logEnd","calculateLogNiceInterval","axisFormat","isCustomFormat","DateTimeCategory","axisSize","sameInterval","sameValue","StripLine","measureStripLine","stripline","segmentAxis","isRepeat","getFromTovalue","startFromAxis","sizeType","isSegmented","segmentStart","segmentEnd","segRect","getToValue","findValue","isEnd","fromValue","striplineGroup","axes_1","getSegmentAxis","repeatEvery","repeatUntil","renderStripLineElement","getStartValue","renderRectangle","textMid","ty","tx","getTextStart","segmentAxisName","xy","LineBase","improveChartPerformance","tempPoints","xVisibleRange","yVisibleRange","seriesPoints","areaBounds","xTolerance","yTolerance","prevXValue","prevYValue","xVal","yVal","seriesPoints_1","currentPoint_1","getLineDirection","firstPoint","secondPoint","getPointLocation","appendLinePath","pathElement","doProgressiveAnimation","storePointLocation","doLinearAnimation","elementWidth","xCenter","yCenter","LineSeries","prevPoint","isPolar","isDrop","getCoordinate","visiblePoints","visiblePoints_1","isClosed","ColumnBase","getSideBySideInfo","enableSideBySidePlacement","getSideBySidePositions","seriesSpacing","columnSpacing","pointSpacing","getRectangle","findRectPosition","vSeries","updateSymbolLocation","updateYRegion","updateXRegion","histogramValues","binWidth","rectElements","animateRect","isPlot","ColumnSeries","sideBySideInfo","pointColumn","MultiColoredSeries","getAreaPathDirection","getAreaEmptyDirection","isXSegment","getAxisValue","sortSegments","chartSegments","access","applySegmentAxis","includeSegment","attributeOptions","createClipRect","isX","isRequired","startPointLocation","endPointLocation","AreaSeries","currentXValue","isDropMode","BarSeries","pointBar","PolarRadarPanel","drawYAxisLine","vector","minorGirdLine","xLoc","yLoc","tickXSize","tickYSize","labelText","firstLabelX","lastLabelX","textAnchor","tickOptions","gridOptions","PolarSeries","inverted","columnDrawTypeRender","itemCurrentXPos","pointStartAngle","pointEndAngle","dStartX","dStartY","dEndX","dEndY","isRangeColumn","isLogAxis","isStacking","sumofYValues","rangeInterval","getSeriesPosition","doPolarRadarAnimation","animateElement","chartcenterX","chartcenterY","RadarSeries","StackingBarSeries","stackedValue","pointStack","CandleSeries","centerRegion","tickRegion","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","intermediateSumIndexes","sumIndexes","summaryFillColor","negativeFillColor","intermediateSum","sumIndex","HiloSeries","HiloOpenCloseSeries","highLowRect","updateTickRegion","open_1","close_1","drawHiloOpenClosePath","RangeAreaSeries","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","cardinalSplineTension","splineType","ySpline1","ySpline2","ySplineDuplicate1","ySplineDuplicate2","deltaX2","SplineSeries","pt1","pt2","bpt1","bpt2","HistogramSeries","showNormalDistribution","renderNormalDistribution","calculateBinInterval","mean","sumValue","yValues_1","sDValue","binInterval","updatedData","yCount","pointLocation","distributionLine","yValuesCount","del","SplineAreaSeries","controlPt1","controlPt2","startPoint1","TechnicalAnalysis","signalLine","setSeriesProperties","indicatorElement","getDataPoint","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","mb","lb","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","trendlineSeries","setLinearRange","setExponentialRange","setMovingAverageRange","setPolynomialRange","setPowerRange","setLogarithmicRange","splineSeriesModule","slopeIntercept","getExponentialPoints","xLogValue","yLogValue","xPointsLgr","getLogarithmicPoints","xPolyValues","yPolyValues","getPolynomialPoints","powerPoints","getPowerPoints","getLinearPoints","xAvgValues","getMovingAveragePoints","slopeInterceptLog","midPoint","x1Log","backwardForecast","y1Log","x2Log","y2Log","x3Log","forwardForecast","y3Log","slopeInterceptPower","polynomialOrder","polynomialSlopes","subIndex","numArray","newIndex","nIndex","nIndex2","nnIndex","nnIndex2","gaussJordanElimination","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","isIos7","disableTrackTooltip","horizontalCross","verticalCross","crossGroup","stopAnimation","valueX","valueY","axisTooltipGroup","renderCrosshairLine","renderAxisTooltip","axisGroup","textElem","getAxisText","tooltipLocation","isTop","isBottom","isLeft","isRight","labelValue","tooltipRect","boundsX","boundsY","crosshairInterval","Side","TooltipLocation","TextStyle","TooltipBorder","AreaBounds","ToolLocation","removeSVG","createTooltipElement","formattedText","isFirst","markerPoint","templateObject","fadeOuted","updateTemplateFn","markerSide","renderTooltipElement","drawMarker","markerSize","textElements","groupElement","shapes","markerGroup","marginX","tipLocation","marginY","sharedTooltipLocation","headerSize","pathElement_1","pointRect","enableAnimation","updateDiv","animateTooltipDiv","enableShadow","defElement","changeText","findFormattedText","isRender","tspanOption","subWidth","tspanStyle","headerSpace","isColumn","markerPadding","width_1","firstElement","symbolLocation","clipX","clipY","currenDiff","fadeOut","tooltipGroup_1","opacity_1","endAnimation","tooltipGroup","BaseTooltip","getTooltipElement","isTooltip","removeHighlight","highlightPoint","highlight","highlightPoints","clipLocation","extraPoints","templatePoint","accumulationTooltipModule","svgTooltip","SVGTooltip","findPalette","updatePreviousPoint","findColor","svgElement","firstText","removeText","toolTipInterval","removeTooltip","renderGroupedTooltip","renderSeriesTooltip","findHeader","parseTemplate","findShapes","findData","getSymbolLocation","findMarkerHeight","getTemplateText","findMouseValue","getBoxLocation","getWaterfallRegion","getRangeArea","formatPointValue","findSharedLocation","dataValue","getPrototypeOf","isXPoint","isYPoint","getIndicatorTooltipFormat","textX","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","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","shadowElement","zoomToolkitMove","zoomToolkitLeave","showToolkit","chartMouseWheel","mouseCancelHandler","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_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","argsFont","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","positionIndex","intersectY","shapeElements","textNode","ErrorBar","renderErrorBar","capId","errorbar","errorBarCap","errorDirection","errorX","errorY","verticalError","horizontalError","capOption","findLocation","horizontalPositiveError","verticalPositiveError","horizontalNegativeError","verticalNegativeError","getErrorDirection","calculateFixedValue","calculatePercentageValue","calculateStandardDeviationValue","getMean","meanCalculation","calculateStandardErrorValue","calculateCustomValue","getHorizontalDirection","errorMode","capLength","capDirection","getVerticalDirection","getBothDirection","pathH","pathV","verStandardMean","horStandardMean","verSquareRoot","horSquareRoot","sumOfX","sumOfY","errorBarElements","Legend","visibleSeriesCollection","visibleSeriesCollection_1","extraHeight","extraWidth","legendEventArgs","columnHeight","prevLegend","previousBound","availwidth","LegendClick","redrawSeriesElements","refreshSeries","legendItemsId_1","AnnotationBase","setAnnotationPixelValue","accumulationBound","setAnnotationPointValue","xAnnotation","setAccumulationPointValue","annotationElement","coordinateUnits","setElementStyle","accPoint","setAlignmentValue","ChartAnnotation","BoxAndWhiskerSeries","findBoxPlotValues","boxPlotMode","updateTipRegion","renderBoxAndWhisker","tipRegion","updateTipSize","midWidth","midHeight","topWidth","showMean","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","ScrollElements","scrollGroup","backRectGroup","thumbGroup","renderCircle","arrows","thumbGrip","scrollbarThemeStyle","backRectEle","leftArrowEle","rightArrowEle","setArrowDirection","thumbRectX","thumbRectWidth","leftDirection","circleRadius","rightDirection","shadowGroup","leftCircleEle","rightCircleEle","sidePadding","gripCircle","gripWidth","ScrollBar","scrollElements","mouseMoveListener","scrollMouseMove","mouseUpListener","scrollMouseUp","animateDuration","getMouseXY","scrollMouseDown","scrollMouseWheel","isResizeLeft","isResizeRight","previousXY","previousWidth","previousRectX","startZoomPosition","startZoomFactor","startRange","scrollStarted","getArgs","isThumbDrag","moveLength","isWithIn","positionThumb","setZoomFactorPosition","mouseXY","thumbX","currentWidth","currentScrollWidth","setCursor","resizeThumb","getDefaults","removeScrollSvg","scrollbar","isHorizontalAxis","createScrollSvg","isLeftHover","isRightHover","isAxis","isCurrentAxis","previousRange","ParetoSeries","paretoSeries","currentAxis","secondaryAxis","newAxis","columnSeriesModule","AccumulationAnnotationSettings","AccumulationDataLabelSettings","AccPoints","labelVisible","isExplode","isClubbed","isSliced","AccumulationSeries","clubbedPoints","sumOfPoints","accumulation","resultData","seriesCounts","findSumOfPoints","sumOfClub","clubValue","groupTo","setPoints","isClub","pushPoints","lastGroupTo","clubPoint_1","generateClubPoint","pointsLength_1","explode","explodeAll","explodeIndex","clubPoint","groupMode","setAccEmptyPoint","seriesGroup","renderPoints","datalabelGroup","accumulationDataLabelModule","renderDataLabel","findMaxBounds","labelBound","pieSeriesModule","accumulationLegendModule","explodeDistance","pointId","renderPoint","getSeriesElement","findAreaRect","totalbound","AccumulationBase","pieCenter","pieRadius","pieLabelRadius","labelRadius","isCircular","processExplode","explodePoints","deExplodeAll","invokeExplode","pointExplode","accumulationSelectionModule","animationDuration","deExplodeSlice","clubPointsExploded","clubPointExplode","getSum","midAngle","explodeSlice","sliceId","setTranslate","setElementTransform","isReverse","PieBase","initProperties","initAngles","connectorStyle","explodeOffset","findCenter","defaultLabelBound","accumulationRect","getSeriesBound","accumulationRectCenter","getRectFromAngle","nextQuandrant","lastQuadrant","getDoughnutPath","getPiePath","PieSeries","getPathOption","currentStartAngle","curentDegree","accBaseModule","groupId","clipslice","AccumulationChart","isIE11Pointer","accumulationMouseMove","accumulationMouseEnd","accumulationMouseStart","accumulationOnMouseClick","accumulationRightClick","accumulationMouseLeave","accumulationResize","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","tl","tr","bl","br","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","sliceVisibility","sliceAnimate","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","AccumulationTooltip","getPieData","AccumulationSelection","indexes_2","checkEquals","pieId","checkPointVisibility","elementClass","parentClass","selectedDataIndexes_1","AccumulationAnnotation","pie","DataPoint","RangeSeries","renderChart","seriesLength","rangeSlider","processDataSource","viewData","processXAxis","calculateGroupingBounds","processYAxis","axisModule","doubleModule","chartGroup","createSeriesElement","drawSeriesBorder","labelHeight","chartElement","navigatorBorder","RangeNavigatorAxis","firstLevelLabels","secondLevelLabels","rangeNavigator","renderGridLines","chartAxis","disabledColor","gridLines","tick","findAxisLabels","lowerValues","renderAxisLabels","firstLevelElement","secondLevelElement","findLabelY","placeAxisLabels","getSecondaryLabelType","nextInterval","changedText","isFirstLevel","isSecondary","tickHeight","prevLabel","pointXGrid","maxLabels","prevX","intervalInTime","findSuitableFormat","secondaryLabelAlignment","findAlignment","prevWidth","every","nextLabel","RangeNavigatorSeries","ThumbSettings","StyleSettings","Periods","PeriodSelectorSettings","RangeTooltipSettings","RangeSlider","thumbVisible","thumpPadding","thumbColor","sliderGroup","unselectedRegionColor","leftUnSelectedElement","rightUnSelectedElement","leftSlider","rightSlider","createThump","thump","tickLength","lineColor","thumpY","sliderY","setSlider","isLeightWeight","selectedX","sliderWidth","leftX","rightX","leftRect","rightRect","currentStart","currentEnd","rangeTooltipModule","renderLeftTooltip","renderRightTooltip","getCurrentSlider","currentSlider","getRangeValue","previousMoveX","enableDeferredUpdate","hoverColor","periodSelectorModule","endbledTooltip","difference","secondLabel","rangeAxis","allowSnapping","setAllowSnapping","datePicker","isDeffered","RangeNavigator","lineSeriesModule","setSliderValue","isDateTime","createRangeSvg","renderChartBackground","periodSelectorSize","periodSelectorY","deductHeight","renderPeriodSelector","renderSlider","displayMode","renderSelectorElement","renderSelector","rangeOnMouseDown","rangeOnMouseClick","rangeResize","setMouseX","refreshRange","CLS_DISABLE","CLS_NAVARROW","CLS_NAVRIGHTARROW","CLS_NAVLEFTARROW","CLS_HSCROLLNAV","CLS_HSCROLLNAVRIGHT","CLS_OVERLAY","CLS_RIGHTOVERLAY","CLS_LEFTOVERLAY","HScroll","browser","browserCheck","ieCheck","uniqueId","touchHandler","swipeHandler","scrollEle","createOverlay","createNavIcon","scrollStep","scrollDiv","innerEle_1","scrollItems","nav","navEles","rightOverlayEle","clsRight","rightEle","navItem","leftEle","eventBinding","clsLeft","navEle","navLeftItem","onKeyPress","keyTimer","keyTimeout","eleScrolling","onKeyUp","tabHoldHandler","repeatScroll","clickEventHandler","scrollDis","isContinuous","rootEle","frameScrollRequest","swipeEle","scrollUpdating","scrollVal","arrowDisabling","addDisable","removeDisable","arrowIcon","navLeftEle","navRightEle","leftOverlay","rightOverlay","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_TBARIGNORE","CLS_POPPRI","CLS_MULTIROW_SEPARATOR","CLS_EXTENDABLE_SEPARATOR","CLS_EXTENDEDPOPOPEN","Toolbar","popupOpen","popupClose","tempId","trgtEle","ctrlTem","clearProperty","popObj","tbarAlign","attrb","enableCollision","scrollModule","tbarItemsCol","popupPriCount","keyModule","docKeyDown","popCheck","overflowMode","destroyHScroll","docEvent","tbarEle","tbarAlgEle","lefts","centers","rights","popEle","destroyItems","tbarItems","destroyMode","popupRefresh","elementFocus","fChild","activeEleSwitch","clstElement","tbrNavChk","keyHandling","clst","navChk","scrollChk","popAnimate","eleFocus","popupCheck","popFrstEle","activeEle","activeEleRemove","tbarScrollChk","sib","skipEle","isPopupElement","popupNav","popupClickHandler","CLS_RTL","getElementOffsetY","aria-orientation","renderOverflowMode","itemPositioning","checkPopupRefresh","initHScroll","innerItems","checkOverflow","itemWidthCal","innerItem","eleWidth","itemWidth","popNav","scrollNav","refreshOverflow","priorityCheck","offsetWid","removePositioning","createPopupEle","eleInlineItem","eleItem","multiVar","extendVar","innerNav","createPopupIcon","checkPriority","removeProperty","pushingPoppedEle","tbarObj","popupPri","eleHeight","sepHeight","nodeIndex","nodePri","tbResize","tbarElement","sepItem","extendEle","popupInit","eleStyles","borderRightWidth","tbarPopupHandler","isOpen","toolEle","popupElePos","popIcon","overflowHeight","inEle","pre","popPriority","eleWid","sepCheck","itemPopCount","checkClass","rVal","mrgn","fstEleCheck","tbarEleMrgn","eleWid_1","sepEle","popedEle","tbarPriRef","sepPri","des","elWid","wid","ig","ignoreCount","priEleCnt","eleSep","ignoreCheck","eleSepWidth","prevSep","popupEleWidth","popupEleRefresh","ignoreEleFetch","ignoreEle","ignoreInx","tbarWidth","tbarItemsWid","elWidth","btnText","eleSplice","sepBeforePri_1","refreshPositioning","tbarWid","popWid","tbarItemAlign","itemEle","showAlwaysInPopup","alignDiv","alignEle","leftAlign_1","ctrlTemplate","itemEleDom","innerPos","renderSubComponent","setAttr","addItems","itemsDiv","itemsRerender","itemAgn","items_1","algIndex","removeItems","removeItemByIndex","eleIdx","indexAgn","templateRender","templateProp","isComponent","itemType","tempStr","buttonRendering","dom","iconPos","textStr","btnTxt","prefixIcon","suffixIcon","tooltipText","tempDom","itemClick","showTextOn","sTxt","tEle","changedProb","newProperty","popupPriCheck","booleanCheck","CLS_ACRDN_ROOT","CLS_ROOT","CLS_HEADER","CLS_HEADERCTN","CLS_CONTENT","CLS_CTENT","CLS_TOOGLEICN","CLS_CTNHIDE","CLS_SLCTED","CLS_ACTIVE","CLS_TOGANIMATE","CLS_EXPANDSTATE","AccordionActionSettings","AccordionAnimationSettings","AccordionItem","Accordion","isDestroy","templateEle","eleStr","nested","isNested","expandedItems","initExpand","aria-multiselectable","expandMode","initItemExpand","innerEles","aria-level","toggleIconGenerate","tglIcon","hdrColIcon","expandItem","renderInnerItem","acrdnItem","acrdnHdr","acrdnCtn","acrdnCtnItem","acrdActive","getIndexByItem","contentRendering","ariaAttrUpdate","cntclkCheck","acrdAniEle","acrdAniEle_1","sameContentCheck","sameHeader","acrdnCtn_1","expandState","collapse","eleMoveFocus","clstItem","headerEleGenerate","ctnEle","hdrEle","fetchElement","hdr","hdrIcnEle","hdrIcon","temString","eleVal","itemcnt","ctn","trgtItemEle","isExpanded","eff","expandedItemsPush","expandProgress","expandAnimation","ef","icn","lastActiveItemId","expandedItemsPop","collapseProgress","collapseAnimation","trgtItEl","trgtHeight","itemHeight","itemAttribUpdate","itemLen","innerItemEle","expandedItemRefresh","eleHeader","isExpand","itemExpand","expandedItem","updateItem","acrdn","changedProp","FOCUSED","SEPARATOR","DOWNARROW","LEFTARROW","RIGHTARROW","HIDE","MenuItem","MenuBase","navIdx","isTapHold","ngElement","isMenu","targetElems","cmenuHandler","moverHandler","delegateClickHandler","closeMenu","actionName","actionNeeded","rightEnterKeyHandler","leftEscKeyHandler","cul","fliIdx","fli","getLIByClass","getIdx","cli","openMenu","sli","ulIndex","isMenuVisible","toggleAnimation","ICONS","hdata","hli","toggleVisiblity","collide","isRelative","xCollision","yCollision","hasField","getFields","showItemOnClick","cliWrapper","isInstLI","setLISelected","showSubMenu","cliIdx","culIdx","boundRect","classname","skipHdr","getChangedItemIndex","insertAfter","uls","isMenuOpen","isUniqueId","isCallBack","showItems","showHideItems","hideItems","ishide","iitems","insertItems","isAfter","menuitem","ContextMenu","Menu","tempItems","createMenuItems","pIdField","CLS_HIDDEN","CLS_ICON_CLOSE","CLS_WRAP","CLS_TB_ITEMS","CLS_TB_ITEM","CLS_TB_POPUP","CLS_PROGRESS","TabActionSettings","TabAnimationSettings","Header","TabItem","Tab","animObj","tbObj","expTemplateContent","cntEle","prevIndex","isPopup","isSwipeed","itemIndexArray","css","btnCls","CLS_ICONS","renderContainer","setOrientation","headerPlacement","renderHeader","bdrLine","CLS_INDICATOR","scrCnt","setContentHeight","selectedItem","tabItems","hdrItems","aria-controls","parseObject","clicked","setCloseButton","showCloseButton","hdrItem","reRenderItems","txtWrapEle","tbCount","tItems","tHtml","txtEmpty","headerTextCompile","tCont","wrapAttrs","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","compileElement","templateFUN","place","heightAdjustMode","hsCnt","tbWidth","setActive","trg_1","eleTrg","itemIndex","curActItem","refreshItemVisibility","eventArg","previousItem","prevItem","previousIndex","isSwiped","setItems","isReplace","refreshActiveBorder","spaceKeyDown","tabKeyModule","removeTab","actEle","nxtSib","scrBar","scrStart","scrEnd","eleStart","eleEnd","eleViewRange","closeButtonTitle","enableTab","addTab","lastEleIndex","addedItems","itemsCount","removeArgs","removedItem","removedIndex","cntTrg","hideTab","selectingItem","selectingIndex","cntItem","isHiddenEle","tempHdrEle","COLLAPSIBLE","EXPANDABLE","LISTITEM","LISTTEXT","PARENTITEM","LOAD","PROCESS","TEXTWRAP","TREEINPUT","SIBLING","DROPNEXT","FULLROW","EXPANDED","CHECK","CHECKBOXWRAP","CHECKBOXFRAME","treeAriaAttr","treeRole","FieldsSettings","ActionSettings","NodeAnimationSettings","TreeView","preventExpand","checkedElement","mouseDownStatus","TreeView_1","checkActionNodes","dragStartAction","ctrlDown","ctrlUp","ctrlEnter","ctrlHome","ctrlEnd","ctrlA","shiftDown","shiftUp","shiftEnter","shiftHome","shiftEnd","csDown","csUp","csEnter","csHome","csEnd","beforeNodeCreate","updateListProp","treeList","isLoaded","isInitalExpand","setTouchClass","selectedNodes","checkedNodes","expandedNodes","setDataBinding","setExpandOnType","wireEditingEvents","setDragAndDrop","allowDragAndDrop","setFullRow","fullRowSelect","nodeTemplateFn","nodeTemplate","iconModel","rippleIconFn","setMultiSelect","firstUl","treeData","isNumberTypeId","getType","setRootData","finalize","rootData","parentID","getDataType","groupedData","getGroupedData","rootItems","getChildNodes","isSorted","getSortedData","finalizeNode","checkboxEle","touchClass","addCheck","frame","frameMouseHandler","createFullRow","allowMultiSelection","addActionClass","nodeData","actionValue","iNodes","sNodes","selectNode","cNodes","disableExpandAttr","eNodes","renderChildNodes","updateList","updateCheckedProp","nodes_1","ensureParentCheckState","checkBoxEle","parentUL","currentParent","ensureChildCheckState","checkBoxes","checkedState","currentLoadData","isNodeChecked","doCheckBoxAction","doCheck","liEle","checkBox","validateCheckNode","isPrevent","isAdd","currLi","getCheckEvent","removeCheck","getNodeData","firstNode","updateIdAttr","hasPid","doExpandAction","eUids","expandGivenNodes","eNode","expandAction","afterFinalized","expandCallback","eUid","doSelectionAction","sUids","sNode","selectGivenNodes","preventContextMenu","setFocusElement","checkWrapper","triggerClickEvent","collapseNode","toggleSelect","nodeCheckingEvent","nodeCheckedEvent","expandNode","proxy_1","ul_1","liEle_1","setHeight","animateHeight","expandedNode","addExpand","expandArgs","getExpandEvent","colArgs","collapsedNode","removeExpand","toRemove","currentHeight","parentLi","expandChild","eicon","childItems","mapper_1","getChildFields","getNodeObject","ensureCheckNode","renderSubChild","nodeLevel","dataLevel","getChildMapper","isRoot","getChildGroup","objlen","dataId","cIcons","multiSelect","isActive","unselectNode","getSelectEvent","removeSelectAll","startNode","liList","currNode","addSelect","focusedNode","getFocusedNode","expandOnType","expandOn","expandHandler","expandCollapseAction","inpEle","oldText","checkNode","openNode","shiftKeySelect","navigateNode","navigateRootNode","createTextbox","navigateToFocus","isUp","focusNode","getScrollParent","parentPos","isVisibleInViewport","txtWrap","scrollHeight","isTowards","nextNode","getNextNode","getPrevNode","checkWrap","allCheckNode","newCheck","childCheck","validateCheck","childId","childId_1","toBeOpened","focusNextNode","setFocus","isBackwards","rootNode","getRootNode","getEndNode","fNode","prevNode","endNode","preNode","hoveredNode","fromDS","pNode","pid","reRenderNodes","newClass","editingHandler","oldInpEle","updateOldText","getEditEvent","wireInputEvents","editData","editFields","inputFocusOut","txtEle","appendNewText","isInput","getId","getChildNodeObject","childData","toBind","initializeDrag","destroyDrag","virtualEle","dragRoot","dragWrap","dragLi","isSameNode","cloneEle","DRAGITEM","nLen","cNode","getDragEvent","draggedNode","dragAction","removeVirtualEle","dropTarget","dropRoot","preventTargetExpand","dragParent","draggedParentNode","dropObj","over","dropAction","dropWrap","dropLi","isDescendant","virEle","renderVirtualEle","dropIndicator","dragInstance","appendNode","dropAsSiblingNode","dropAsChildNode","dropUl","dragParentUl","dragParentLi","moveData","updateElement","updateAriaLevel","updateInstance","dropParentUl","expandParent","childLi","dropParentLi","removedData","updateChildField","refId","getDataPos","updateField","currPid","removeChildNodes","addChildData","dropIcon","dragIcon","updateChildAriaLevel","sibEle","dragNode","dropData","draggedNodeData","newParent","dragLiParent","targetParent","indexValue","dropTar","clonedNode","droppedNode","droppedNodeData","dropIndex","dropLevel","addFullRow","toAdd","rowDiv","addMultiSelect","liEles_1","liEles_2","collapseByLevel","excludeHiddenNodes","getVisibleNodes","collapseAllNodes","expandByLevel","expandAllNodes","eIcons","vNodes","removeNode","removeData","updateSelectedNodes","updateExpandedNodes","newId","currId","doGivenAction","toExpand","addGivenNodes","isRemote","dropEle","updateMapper","refNode","navigateUrl","updated","childObj","doDisableAction","doEnableAction","updatePersistProp","removeField","sleNodes","slelen","enodes","nodelen","cnodes","getMapperProp","proxy_2","touchEditObj","wireClickEvent","proxy_3","touchClickObj","wireExpandOnEvent","proxy_4","touchExpandObj","matched","setCheckedNodes","uncheckAll","checkAll","collapseAll","addNodes","dropUl_1","proxy_5","beginEdit","disableNodes","enableNodes","ensureVisible","expandAll","getAllCheckedNodes","checkNodes","getNode","getTreeData","moveNodes","sourceNodes","removeNodes","updateNode","CLOSE","OPEN","TRASITION","VISIBILITY","DISABLEANIMATION","CONTEXT","SIDEBARABSOLUTE","Sidebar","setTarget","enableDock","setDock","setMediaQuery","setType","setCloseOnDocumentClick","closeOnDocumentClick","documentclickHandler","dockSize","z-index","classELement","destroyBackDrop","sibling","showBackdrop","closeArguments","changeArguments","setAnimation","openArguments","createBackDrop","getState","mediaQuery","enableGestureHandler","setEnableGestures","enableGestures","mainContentEle","sidebarEle","margin-left","margin-right","PeriodSelector","periodSelectorDiv","selectorElement","calendarId","selctorArgs","enableCustomFormat","toolbar","changedRange","setSelectedStyle","datePickerElement","onclick","updatedStart","updatedEnd","clickedEle","RangeTooltip","fadeOutTooltip","getTooltipContent","contentWidth","getContentSize","leftTooltip","rightTooltip","dateTimeModule","SmithchartFont","SmithchartMargin","SmithchartBorder","SmithchartRect","LabelCollection","LegendSeries","LabelRegion","HorizontalLabelCollection","RadialLabelCollections","LineSegment","PointRegion","ClosestPoint","MarkerOptions","SmithchartLabelPosition","Direction","counterclockwise","clockwise","DataLabelTextOptions","LabelOption","GridArcPoints","smithchartTitleFont","smithchartSubtitleFont","dataLabelFont","LegendTitle","LegendLocation","LegendItemStyleBorder","LegendItemStyle","LegendBorder","SmithchartLegendSettings","SmithchartMajorGridLines","SmithchartMinorGridLines","SmithchartAxisLine","SmithchartAxis","Subtitle","Title","SeriesTooltipBorder","SeriesTooltip","SeriesMarkerBorder","SeriesMarkerDataLabelBorder","SeriesMarkerDataLabelConnectorLine","SeriesMarkerDataLabel","SeriesMarker","SmithchartSeries","calculateAreaBounds","rightSpace","spaceValue","getLegendSpace","elementSpacing","subtitleHeight","modelsubTitleHeight","modelTitleHeight","legendBorder","leftLegendWidth","rightLegendWidth","topLegendHeight","bottomLegendHeight","ltheight","subtitle","AxisRender","radialLabels","radialLabelCollections","horizontalLabelCollections","labelCollections","renderArea","calculateChartArea","calculateCircleMargin","calculateXAxisRange","calculateRAxisRange","measureHorizontalAxis","measureRadialAxis","horizontalAxis","updateHAxis","radialAxis","updateRAxis","drawHAxisLabels","drawRAxisLabels","updateHMajorGridLines","updateHMinorGridLines","updateHAxisLine","updateRMajorGridLines","updateRMinorGridLines","updateRAxisLine","measureHMajorGridLines","measureHMinorGridLines","measureRMajorGridLines","measureRMinorGridLines","chartAreaWidth","chartAreaHeight","maxLabelWidth","maximumLabelLength","labelMargin","actualRadius","circleCoefficient","areaRadius","circleLeftX","circleTopY","circleCenterX","circleCenterY","calculateAxisLabels","previousR","isOverlap1","isOverlap2","staticlabels","spacingBetweenGridLines","coeff","horizontalAxisLabels","circleStartX","renderType","arcCy","radialPoint1","radialPoint2","arcPoints","majorHGridArcPoints","circlePoint","calculateHMajorArcStartEndPoints","intersectingCirclePoints","rotationAngle","sweepDirection","isLargeArc","epsilon","radialPoint","innerInterSectPoint","outerInterSectPoint","outterInterSectAngle","majorRGridArcPoints","calculateMajorArcStartEndPoints","circleXYRadianValue","outterX","outterY","calValue1","calValue2","arcHPoints","calculateMinorArcStartEndPoints","marcHPoints","midRadius","radiusSquare","radiusSquare2","gx","ix1","ix2","gy","iy1","iy2","calculateGridLinesPath","haxismgoptions","raxismgoptions","circleAxis","curLabelBounds","curWidth","curX","preLabelBounds","preWidth","preX","calculateRegion","axisLabelRenderEventArgs","textPosition","curY","curHeight","preY","preHeight","interSectPoint","rAxis","circlePointPosition","setLabelsOutsidePosition","setLabelsInsidePosition","textPositionX","textPositionY","minorHGridArcPoints","haxismioptions","minorGridArcPoints","raxismioptions","pathSegment","sb","arcCx","nextAngle","betweenAngle","arcStartX","arcStartY","arcStartPoint","centerValue","minorGridLineArcIntersectCircle","calValue","px","py","mx","my","seriesindex","pointsRegion","gmEle","seriesColors","circleOptions","labelOptions","allPoints","drawDataLabel","reactance","xPos","yPos","textY","connectorFlag","labelOption","drawDatalabelSymbol","calculateSmartLabels","compareDataLabels","resetValues","dataLabel1","dataLabel2","drawConnectorLines","connectorDirection","connectorLineValues","connectorLine","labelTemplateElement","SeriesRender","lineSegments","resistance","axisRender","resistantCx","reactanceCy","chartAreaRadius","chartAreaCx","chartAreaCy","resistantCy","reactanceCx","resistantR","reactanceR","drawSeries","gdlcEle","gdEle","rectOptions","dataEle","textRenderEventArgs","element_2","animateDataLabelTemplate","gsEle","seriesEventArgs","gspEle","reveffect","smithchartPrint","svgElements","exportType","canvas","Smithchart","titleText","maxTitleWidth","titleWidthEnable","titleEventArgs","titleLocation","renderSubtitle","subTitleSize","subTitleText","maxSubTitleWidth","subtitleEventArgs","borderRect","unWireEVents","wireEVents","smithchartLegendModule","seriesrender","secondaryElement","svgClientRect","smithchartOnClick","smithchartOnResize","tooltipRenderModule","smithchartMouseMove","tooltipElement_1","fadeoutTo","circleElement","legendText","legendSeries","TooltipRender","closestPoint","closestPointXY","pointindex","chartPoint","closePoint","SmithchartLegend","_drawLegend","legendActualBounds","allowItems","legendSizeHeight","legendSizeWidth","itemPadding","legendItemWidth","legendItemHeight","svgObjectWidth","maxRowWidth","totalRowHeight","curRowWidth","curRowHeight","itemsCountRow","legendsize","_getLegendSize","itemStyle","symbolHeight","legendPosition","titleFont","smithchartTitleHeight","smithchartSubtitleHeight","svgObjectHeight","legendTitleHeight","borderSize","svgWidth","svgHeight","gLegendEle","legendItemGroup","currentY","drawLegendTitle","drawLegendItem","drawLegendBorder","legendBoundsWidth","drawLegendShape","SparklineBorder","SparklineFont","TrackLineSettings","SparklineTooltipSettings","ContainerArea","LineSettings","RangeBandSettings","AxisSettings","Padding","SparklineMarkerSettings","LabelOffset","SparklineDataLabelSettings","SparklineRenderer","sparklineData","axisCalculation","processCategory","processDateTime","spark","drawAxis","rangeBandSettings","axisSettings","endRange","rangeBand","renderLabel","stValue","edValue","stHeight","unitY","edHeight","pathOption","renderLine","renderPie","stRad","edRad","highPointColor","lowPointColor","pointsYvalues","negativePointIndexes","stDeg","edDeg","eX","eY","pathArc","getPieSpecialPoint","pointArgs","triggerPointRender","diffRadian","negativePointColor","startPointColor","startPointIndex","endPointColor","endPointIndex","highPointIndex","lowPointIndex","axisHeight","renderColumn","lowPos","highPos","pointsYPos","markerPosition","paletteLength","getSpecialPoint","renderWinLoss","tiePointColor","markerSettings","markerArgs","dataLabelSettings","edgeLabelOption","textId","rectId","formatter","labelArgs","getLabelVisible","arrangeLabelPosition","edgeLabelMode","edgeLabel","findRanges","getInterval","maxPointsLength","sumofValues","isNumericArray","x_1","lineSettings","axisColor","axisWidth","unitX","z1","Sparkline","sparklineRenderer","createSVG","renderSparkline","createDiv","containerArea","sparklineTooltipModule","removeTooltipElements","tooltipSettings","trackLineSettings","sparklineMove","sparklineMouseLeave","sparklineMouseEnd","sparklineResize","sparklineClick","setSparklineMouseXY","isPointRegion","startId","index_1","refreshSparkline","SparklineTooltip","processTooltip","removeTracker","trackerPositions","renderTrackerLine","tracker","pathEle","toDateString","tooltipEvent","index.Chart","index.LineSeries","index.ScatterSeries","index.ColumnSeries","index.SplineSeries","index.SplineAreaSeries","index.StripLine","index.AreaSeries","index.ScrollBar","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.HistogramSeries","index.ErrorBar","index.Trendlines","index.DateTimeCategory","index.MultiColoredLineSeries","index.MultiColoredAreaSeries","index.MultiLevelLabel","index.ParetoSeries","index.AccumulationChart","index.PieSeries","index.FunnelSeries","index.PyramidSeries","index.AccumulationTooltip","index.AccumulationLegend","index.AccumulationSelection","index.AccumulationDataLabel","index.AccumulationAnnotation","index.RangeNavigator","index.RangeTooltip","index.PeriodSelector","index.Sparkline","index.SparklineTooltip","index.Smithchart","index.SmithchartLegend","index.TooltipRender","tickLineColor","pointerColor","Line","Range","Tick","Cap","NeedleTail","Annotation","Pointer","Annotations","autoAngle","updateLocation","currentRadius","GaugeTooltip","tooltipId","borderStyle","currentPointer","tooltipFormat","tooltipArgs","arrowInverted","addLeft","addTop","addHeight","addWidth","AxisRenderer","drawAxisOuterLine","setRangeColor","drawAxisLabels","nearSize","farSize","hiddenLabel","findAnchor","useRangeColor","drawMinorTickLines","minorTickElements","minorLineStyle","minorTicks","minorInterval","isRangeColor","majorValues","calculateTicks","drawMajorTickLines","majorTickElements","majorLineStyle","majorTicks","axisLineWidth","drawAxisRange","roundedStartAngle","roundedEndAngle","rangeElement","rangeIndex","calculateRangeRadius","roundedCornerRadius","rangeColors","PointerRenderer","drawPointers","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","isMajorTickOutside","isMinorTickOutside","isLabelOutside","majorTickOffset","minorTickOffset","axesElements","annotationsModule","CircularGauge","themeEffect","setThemeColors","labelcolor","others","gaugeOnMouseDown","gaugeRightClick","gaugeResize","setGaugeStyle","getMouseArgs","dragArgs","enablePointerDrag","activePointer","activeAxis","pointerDrag","gaugeAxisLayoutPanel","calculateSvgSize","isElementExist","annotationEnable","refreshWithoutAnimation","index.CircularGauge","index.GaugeTooltip","index.Annotations","getLengthFromListOfPoints","adjustPoint","isStart","rect1","rect2","unitePoint","intersects","SnapConstraints","Transform","RenderMode","KeyModifiers","Keys","RealAction","DiagramEvent","isDirt","Self","Parent","isSvgRender","staticSize","isRectElement","unitMode","float","floatingBounds","setOffsetWithRespectToBounds","getAbsolutePosition","validateDesiredSize","updateBounds","getGradientType","LinearGradient","RadialGradient","Stop","Gradient","ShapeStyle","desiredBounds","measureChildren","prevRotateAngle","childBounds","desired","force","GetChildrenBounds","offsetPt","newPoint","stretchChildren","applyPadding","findChildOffsetFromCenter","childSize","absolutePath","pointTimer","translatedPts","translatePoints","nativeSVG","measureNativeContent","contentSize","templatePosition","getAvailableSize","measureNativeSvg","textNodes","textWrapBounds","imageSource","stretch","measureImage","Canvas","childX","childY","alignChildBasedOnParent","alignChildBasedOnaPoint","parentSize","Ellipse","Hexagon","Parallelogram","Triangle","Plus","Star","Pentagon","Heptagon","Octagon","Trapezoid","Decagon","RightTriangle","Cylinder","Diamond","Port","Connect","Hyperlink","InheritReadOnly","Circle","OpenArrow","Fletch","OpenFetch","IndentedArrow","OutdentedArrow","DoubleArrow","Arrow","Process","Decision","Document","PreDefinedProcess","Terminator","PaperTap","DirectData","SequentialData","Sort","MultiDocument","Collate","SummingJunction","Or","InternalStorage","Extract","ManualOperation","Merge","OffPageReference","SequentialAccessStorage","Annotation2","Card","Delay","Preparation","Display","ManualInput","LoopLimit","StoredData","IconShape","DiagramTooltip","NodeBase","getConnectorType","BpmnFlow","ConnectorShape","getSegmentType","Decorator","Vector","ConnectorSegment","bridges","bpmnElement","getSegmentElement","getConnectorPoints","flow","getBpmnSequenceFlow","getBpmnAssociationFlow","getBpmnMessageFlow","updateShapePosition","anglePoints","getDecoratorElement","wrapperContent","getAnnotationElement","pathseqData","pathseq","segmentMessage","sourcePt","targetPt","beginningpoint","transferpoint","startpoint1","endpoint1","textele","updateAnnotation","pivotPoint","segmentAngle","horizor","verzor","displacement","newPoints","clipDecorator","isSource","segmentPath","getSegmentPath","connectorSegment","segmentElement","adjacentPoint","decEle","bridgePath","bridge","segmentPointIndex","getPath","getPt","st","targetID","targetPortID","j_3","connWidth","connHeight","Default","UserHandle","All","getShapeType","BasicShape","FlowShape","Path","BpmnShape","Native","Html","Shape","BpmnGateway","BpmnDataObject","BpmnTask","BpmnEvent","BpmnSubEvent","BpmnTransactionSubProcess","BpmnSubProcess","BpmnActivity","BpmnAnnotation","processId","outEdges","inEdges","nodeDefault","basicshape","basicshapedata","flowshape","bpmnModule","initBPMNContent","subProcess","activity","processes","children_1","collapsed","updateElementVisibility","initPorts","accessibilityContent","initPortWrapper","contentAccessibility","getIconOffet","initIcons","expandIcon","collapseIcon","initIconSymbol","initAnnotations","initAnnotationWrapper","portContent","pathdata","annotationcontent","initIconContainer","iconContent","iconContentBounds","updateRulerGeometry","renderRulerSpace","getRulerSVG","unitLength","unitOffset","updateSegments","run","rulerSegment","getNewSegment","updateSegment","segWidth","updateSegmentWidth","defStartValue","updateTickLabel","isRightOrBottom","tickAlignment","createNewTicks","createTickLabel","tickInterval","getLinePoint","linePoint","multiples","createMarkerLine","rulerSvg","drawRulerMarker","rulerSvgElements","markerColor","rulerSpace","getObjectType","renderGradient","grd","stops","radial","renderShadow","rotateContext","parseDashArray","setFontStyle","dashes","splittedDashes_1","segs","quadraticCurveTo","xAxisRotation","cp","currp","cpp","centp","ad","ra","sx","sy","labelAlign","startPointX","startPointY","endPointX","endPointY","parentSvg","fromPalette","alignOptions","srcWidth","srcHeight","destinationW","destinationH","resultWidth","xalign","yalign","getSliceOffset","sWidth","sHeight","dWidth","dHeight","canvas1","srcRatio","destRatio","getMeetOffset","labelX","labelY","pointx","pointy","tX","tY","svgContainer","onlyRect","ariaLabel","setSvgStyle","updateSelectionRegion","gElement","createGElement","enableSelector","classval","setSvgFontStyle","svgLabelAlign","text-decoration","imgAlign","aspectRatio","drawHTMLContent","drawNativeContent","setNativTransform","contentHeight","clipWidth","clipHeight","offset_1","stopElement","lineargradient","radialgradient","wrapBound","DiagramRenderer","svgRender","isSvgMode","setLayers","iconSvgLayer","adornerSvgLayer","nativeSvgLayer","diagramSvgLayer","getParentSvg","getParentElement","defaultParent","layerGElement","getGroupElement","nativeSvg","renderElement","createParent","renderImageElement","renderPathElement","renderNativeElement","renderHTMLElement","renderRect","drawSelectionRectangle","adornerLayer","renderHighlighter","renderResizeHandle","canMask","enableNode","renderPivotLine","renderRotateThumb","nodeWidth","nodeHeight","renderCircularHandle","renderEndPointHandle","connectedSource","connectedTarget","isSegmentEditing","ConnectorSource","ConnectorTarget","renderOrthogonalThumbs","segment_1","bezierPoint","renderBezierLine","renderOrthogonalThumb","getBaseAttributes","connected","renderUserHandler","pathSize","pathColor","renderSvgGridlines","gridSvg","ShowHorizontalLines","ShowVerticalLines","hWidth","hHeight","hSegmentwidth","vSegmentwidth","isRulerGrid","dynamicGrid","horizontalGridlines","scaledIntervals","verticalGridlines","lineIntervals","scaleSnapInterval","patternUnits","horizontalSvgGridlines","verticalSvgGridlines","hLine","intervals","lineDashArray","updateLineIntervals","vLine","updateGrid","svgGrid","newInterval","snapIntervals","gridlines","nativeLayer","sourceWidth","sourceHeight","widthRatio","ratio","svgParent","hasNativeParent","svgNativeParent","svgParent_1","parentG","drawRect","renderSvgBackGroundImage","bgimageLayer","getBackgroundImageLayer","transformLayers","svgMode","getGridLayer","diagramElementsLayer","Background","PageSettings","ScrollSettings","ServiceLocator","services","register","Gridlines","SnapSettings","DiagramRuler","RulerSettings","DataSource","Layout","PortDraw","ConnectorSourceEnd","ConnectorTargetEnd","BezierSourceThumb","BezierTargetThumb","OrthoThumb","SegmentEnd","PortDrag","LabelSelect","LabelDrag","LabelRotate","LabelResizeWest","LabelResizeEast","LabelResizeSouth","LabelResizeNorth","LabelResizeNorthEast","LabelResizeNorthWest","LabelResizeSouthEast","LabelResizeSouthWest","ToolBase","protectChange","commandHandler","inAction","isProtectChange","blocked","isTooltipVisible","childTable","undoElement","undoParentElement","startAction","mouseDown","prevPosition","startTransaction","mouseUp","endTransaction","endAction","initialBounds","horizontalsnap","snapped","verticalsnap","difx","dify","snapEnabled","snappingModule","canSnap","snapLine","getLayer","deltaWidth","deltaHeight","snapLeft","snapRight","snapTop","snapBottom","getPivot","SelectTool","doRubberBandSelection","arrayNodes","getSelectedObject","clickCount","unSelect","selectObjects","clearSelection","labelSelect","ConnectTool","ConnectorDrawingTool","segmentpoint1","segmentpoint2","selectedSegment","updateSelector","removeSnap","changeAnnotationDrag","entry","redoObject","undoObject","addHistoryEntry","oldValues","targetPortName","targetNodeNode","sourcePointChange","targetPointChange","removeTerminalSegment","snapConnectorEnd","targetPortId","targetNodeId","dragConnectorEnds","canDisconnect","disConnect","connect","canEnableDefaultTooltip","MoveTool","objType","objectType","selectedObject","getSubProcess","initialOffset","historyAdded","allowDrop","startGroupAction","entry_1","snapPoint","removeHighlighter","isDroppable","dropAnnotation","endGroupAction","changeObjectId","dragOverElement","oldValues_1","snappedPoint","removeChildFromBPmn","arg_1","dragSelectedObjects","drawHighlighter","portDrag","RotateTool","getAllDescendants","cloneChild","rotateChange","arg_2","snapAngle","rotateSelectedItems","ResizeTool","deltaValues","scaleObjects","sizeChange","entry_2","getChanges","AspectRatio","scaleSelectedItems","NodeDrawingTool","checkBoundaryConstraints","drawObject","updateNodeDimension","addObjectToDiagram","TextDrawingTool","drawingNode","addText","ZoomPanTool","moveTouches","startTouch0","startTouch1","moveTouch0","moveTouch1","focusPoint","updateTouch","difY","touch1","touch2","startTouch","moveTouch","ExpandTool","LabelTool","PolygonDrawingTool","dblClickArgs","PolyLineDrawingTool","updateConnectorPoints","LabelDragTool","labelDrag","redoValue","entryValue","LabelResizeTool","resizeObject","labelResize","LabelRotateTool","redoEntry","entryObject","ConnectorEditing","segmentIndex","dragOrthogonalSegment","dragControlPoint","addOrRemoveSegment","updateLastSegment","removePrevSegment","removeNextSegment","updateEndPoint","updateSeg","findIndex","newseg","intersectingSegs","addSegments","insertFirstSegment","addTerminalSegment","updateAdjacentSegments","segmentDirection","segValues","insertseg","nextseg","isNextUpdate","updatePreviousSegment","nextSegment","updateNextSegment","sec","lastseg","updatePortSegment","isSourceNode","updateFirstSegment","changeSegmentDirection","insertfirst","removeCurrentPrev","nextNext","line1Start","line1End","line2Start","line2End","firstSegPoint","lastSegPoint","DiagramEventHandler","currentAction","isBlocked","isMouseDown","doingAutoScroll","objectFinder","ObjectFinder","diagramCanvas","TextEdit","boundingRect","windowResize","updateViewPortSize","setViewPortSize","getSizeValue","canHideResizers","updateCursor","isForeignObject","isTextBox","foreignobject","isMetaKey","isDeleteKey","isMouseOnScrollBar","isScrolling","checkEditBoxAsTarget","updatePortVisibility","hoverElement","getMouseEventArgs","textEditing","endEdit","findObjectsUnderMouse","findObjectUnderMouse","sourceElement","findElementUnderMouse","findActionToBeDone","getTool","initialEventArgs","mouseMoveExtend","canAutoScroll","checkAutoScroll","isNode","hoverNode","checkAction","drawRulerMarkers","elementLeave","elementEnter","mouseEvents","autoScrollPosition","startAutoScroll","timeOutValue","diagram_1","doAutoScroll","isMultipleSelect","markers","removeRulerMarkers","isTriggerEvent","startTextEdit","keycode","gesture","keyModifiers","altKeyPressed","shiftKeyPressed","ctrlKeyPressed","keyDownEventArgs","KeyboardEvent","parameter","movingPosition","autoScrollBorder","autoScroll","targets","lastObjectUnderMouse","mouseEnter","elementOver","isPrivateTooltip","canEnableToolTip","keyModifier","Alt","Control","Shift","scrolled","updateScrollOffset","doubleClick","getObjectLayer","lock","inputChange","fontsize","textWrapper","textBounds","transforms","editTextBox","editTextBoxDiv","activeLabel","isAddTextNode","textAnnotationConnectors","findTargetObjectUnderMouse","resetTool","findElementUnderSelectedItem","findTargetUnderMouse","actions","actualTarget","layerTarger","layerObjTable","objArray_1","spatialSearch","findObjects","pointInBounds","actualTarget_1","portElement","findTargetElement","Layer","objectZIndex","zIndexTable","CommandHandler","connectorsTable","processTable","parentTable","layoutAnimateModule","backup","pointerEvents","toolName","ToolTip","connectionChange","dragOverArg","dragOver","connectorEnd","connectorPropertyChange","updateDiagramObject","nodeEndId","portEndId","connectionEventChange","argsTarget","connection","transaction","failure","portEnd","getAnnotation","annotationNode","annotationObj","checkAndRemoveAnnotations","refreshCanvasLayers","addTextAnnotation","oldNodeId","oldPortId","cut","pasteIndex","undoRedoModule","historyList","clipObject","copyObjects","refreshDiagramLayer","layerZIndexTable","activeLayer","objectName","removeLayer","layerId","layerObject","moveObjects","targetLayer","setActiveLayer","targerNodes","objects_1","cloneLayer","cloneObject_1","newlayer","copyProcesses","tempNode","selectedItems_1","sortByZIndex","processes_1","protectedChange","Group","unGroup","UndoRedo","removePorts","removeLabels","deleteChild","addChild","copiedItems","getNewObject","groupAction","objectTable","keyTable","copiedItems_1","clonedObj","cloneConnector","newNode","edges","edges_1","newConnector","edges_2","newobjs","translateObject","checkAnnotation","cloneGroup","cloneSubProcesses","currentAnnotation","innerChild","addProcess","connector_1","connectorTable","newChildren","initObject","removeFromAQuad","removeObjectsFromLayer","multipleSelection","cause","selectionChange","canDoMultipleSelection","canMultiSelect","canDoSingleSelection","findParent","selectGroup","selectProcesses","selectBpmnSubProcesses","hasProcesses","preventUpdate","hasLayer","selectorModel","objArray","selectormodel","getChildElements","moveSvgNode","diagramDiv","backNode","sendLayerBackward","currentLayerObject","targetObject","currentLayerObject_1","bringLayerForward","currentLayerObject_2","sendToBack","objectId","layerNum","updateNativeNodeIndex","bringToFront","tabelLength","diagramLayer","lastChildNode","diagramRenderer","nodeArray","sortID","sendForward","intersectArray","overlapObject","currentObject","sendBackward","temp_3","initSelectorWrapper","clearSelectionRectangle","selArray","rubberArray","getNodesConnectors","rubberBandSelectionMode","checkBezierThumb","dragSourceEnd","dragTargetEnd","triggerAction","clearSelectorLayer","nodePropertyChange","hasEnds","connectorSegmentChange","existingInnerBounds","isRotate","segmentChange","secondSegment","isDragSource","changeSegmentLength","translateBezierPoints","secPoint","nextDirection","changeSourceEndToNode","changeSourceEndToPort","segValues1","isTerminal","changeTerminal","sourcePoint2","boundaryConstraints","segmentNumber","rotateObjects","includeParent","objects_2","getChildrenBound","updateSubProcessess","rotatePoints","SnapToLines","refWrapper","scaleObject","updateGroupOffset","oldleft","oldtop","changedvalues","getPortChanges","getAnnotationChanges","updatePathAnnotationOffset","intersectingOffset","pointLength","intersetingPts","getInterceptWithSegment","updateLabelMargin","tempPt","conPoints","tarAngle","srcAngle","intercepts","imgLine","segemnt","angleAdd","labelWrapper","newMat","offsetx","offsety","nodeBounds","selectorBounds","top_2","fixedNode","organizationalChartModule","isAnimation","preventNodesUpdate","preventConnectorsUpdate","newTarget","oldTarget","nodeCollection","removeChildFromBPMN","targetNodes","connectHighlighter","tgt","tgtWrap","towardsLeft","towardsTop","SnapToObject","removeGuidelines","dropBPMNchild","undoObj","redoObj","objectBounds","storeObject","distribute","top_3","btt","undoSelectorObj","redoSelectorObj","sameSize","selectorObject","panx","PanX","canPanX","pany","PanY","canPanY","clearHighlighter","DiagramScroller","vPortWidth","vPortHeight","currentZoomFActor","hScrollSize","vScrollSize","updateScrollOffsets","getPageBounds","setScrollOffset","viewWidth","viewHeight","actualRight","currentRight","actualBottom","scrollerWidth","oldWidth","diagramWidth","oldHeight","diagramHeight","negwidth","negheight","multiplePage","getPageBreak","widthCount","heightCount","deltaX","deltaY","canZoom","canPan","minZoom","maxZoom","targetMatrix","applyScrollLimit","fitToPage","canZoomIn","customBounds","bringIntoView","hoffset","voffset","bringToCenter","actualbounds","scrollLimit","scrollableArea","allowedRight","allowed","allowedBottom","Quad","spatialSearching","findQuads","currentViewPort","quads","third","fourth","selectQuad","quadSet","getQuad","halfWidth","halfHeight","childRight","childBottom","newQuad","childTop","childLeft","isContained","addIntoAQuad","quadAddition","setCurrentNode","quad","isAdded","parentQuad","isempty","newWidth","SpatialSearch","quadSize","pageLeft","pageRight","pageTop","pageBottom","quadTable","updateQuad","nodBounds","isWithinPageBounds","leftElement","rightElement","findLeft","findTop","findBottom","findRight","quads_1","originX","originY","KeyGesture","Command","CommandManager","ContextMenuSettings","groupTable","isGroup","selectionConnectorsList","renderTimer","clearCollection","isConnector","clearObjects","objectArray","refreshLayout","refereshColelction","eventHandler","updateView","excludeFromLayout","updateBridging","intOffPageBackground","validatePageSize","updatePage","updateSnapSettings","initCommands","initObjects","updateRulerSettings","updateLayer","updateScrollSettings","propertyChange","canLogChange","modelChanged","resetDiagramActions","renderRulers","initializePrivateVariables","initializeServices","initDiagram","initViews","defaultLocale","Copy","Cut","Paste","Undo","Redo","SelectAll","Grouping","UnGroup","Order","BringToFront","MoveForward","SendToBack","SendBackward","layerZIndex","initHistory","initLayers","initializeDiagramLayers","renderPageBreaks","Render","droppable","tooltipelement","initDroppables","getObjectsOfLayer","updateViewPort","cutCommand","removeProcess","pasteCommand","copyCommand","moveForward","getActiveLayer","nudgeCommand","nudge","updateAnnotationDrag","updateConnectorProperties","getCustomTool","getCustomCursor","historyChangeTrigger","changeType","historyChange","undo","redo","PublicMethod","focusedPoint","zoomTo","updateEventValue","collectionChange","updateEdges","getTextAnnotationConn","initConnectors","updateDocks","updateSvgNodes","updateProcesses","processes_2","addAnnotation","spliceConnectorEdges","removeDependentConnector","objIndex","removeElements","currentObj","removeElement_1","removeCommand","Delete","canDelete","deleteGroup","removeBpmnProcesses","updateNodeEdges","startEditCommad","bpmnAnnotation","getTextAnnotationWrapper","addLabels","ReadOnly","enableReadOnly","textArea","focusOutEdit","updateNodeExpand","propChange","viewPort","updateLayout","mindMapChartModule","radialTreeModule","symmetricalLayoutModule","maxIteration","springLength","springFactor","complexHierarchicalTreeModule","updateIcon","updateDefaultLayoutIcons","saveDiagram","loadDiagram","exportDiagram","printandExportModule","addPorts","removelabelExtension","removePortsExtenion","real","overlap","renderOverlapElement","renderBackgroundLayer","commonStyle","bgLayer","renderGridLayer","svgGridSvg","renderDiagramLayer","diagramLayerDiv","diagramSvg","transformationLayer","scrollerSize","outer","widthNoScroll","widthWithScroll","getScrollerWidth","renderHTMLLayer","renderPortsExpandLayer","renderNativeLayer","renderAdornerLayer","svgAdornerSvg","svgSelector","svgPortsSvg","svgPortsLayer","svgExpandLayer","htmlLayerDiv","nativeLayerSvg","isLoad","initData","initLayerObjects","hasLayers","tempTabel","bpmnTable","addToLayer","initNodes","_h","_j","_k","_l","_m","groups_1","_o","connectors_1","layerObject_1","hPan","vPan","VerticalOffset","HorizontalOffset","ViewportHeight","ViewportWidth","CurrentZoom","scrollChange","dataBindingModule","initSource","independentObj","currentLayer","defaults","initNode","getEndNodeWrapper","isWidth","realActions","PreventDrag","updateDefaultLayoutIcon","isUpdateSize","node1","PreventScale","portContainer","newCommands","V","nudgeUp","Up","nudgeRight","nudgeDown","Down","nudgeLeft","startEdit","F2","endEditCommand","Escape","focusToNextItem","focusToPreviousItem","selectFocusedItem","Enter","initCommandManager","overrideCommands","newCommand","updateIconVisibility","updateDiagramContainerVisibility","refreshDiagram","refreshCanvasDiagramLayer","objectArray_1","refreshSvgDiagramLayer","renderBasicElement","clearCanvas","renderDiagramElements","inverse","fromExport","bridgingModule","clearRect","getPortLayerSvg","adornerSVG","gridLayer","removePageBreaks","backgroundLayer","showPageBreaks","setOverview","overview","renderDocument","renderNodes","updateThumbConstraints","hideRotate","hideResize","thumbConstraints","renderSelectorForAnnotation","adornerSvg","highlighter","selectionRect","getPortContainer","containsMargin","isBpmnTextAnnotation","textEdit","updateTextAnnotationContent","deleteNode","isAction","tempNode_1","updateObject","oldNode","oldConnector","actualSourcePoint","actualTargetPoint","nodePropertyChangeExtend","isLayout","existingBounds","updateMargin","updateBPMN","actualPort","updatePort","checkSelectedItem","updateTextAnnotationProp","updateConnectorEdges","updateGroupSize","connectorProprtyChangeExtend","updateBPMNConnector","disableBridging","oldSource","annotationWrapper","updateAnnotations","updateNodeProperty","selItems","canUpdateSize","isMeasure","portWrapper","iconRect","iconShape","entryTable","selectedSymbol","paletteId","selectedSymbols","dragEnter","findChild","addChildNodes","dragLeave","PrintAndExport","fileType","buffers","getDiagramBounds","setCanvas","diagramAsSvg","pom","initMouseEvent","images","setScaleValueforCanvas","diagramAsCanvas","pageWidth","getMultipleImage","exportImage","image1","byteString","atob","intArray","htmlElement_1","urlLink","mouseEvent_1","getObjectsBound","nodebounds","diagramLayerSVG","bgColor","bgImg","proportionX","proportionY","exportable","isImageExportable","proportion","brColor","brWidth","strokeRect","getPrintCanvasStyle","isExport","imageArray","mLeft","mTop","mRight","mBottom","drawnX","drawnY","imgHeight","imgWidth","printImage","pageWidth_1","pageHeight_1","pageSize_1","printWind","StackPanel","updateHorizontalStack","updateVerticalStack","measureStackPanel","arrangeHorizontalStack","arrangeVerticalStack","arrangeStackPanel","applyChildMargin","rotatedSize","parenBounds","DataBinding","dataTable","applyDataSource","nextLevel","rootNodes","updateMultipleRootNodes","applyNodeTemplate","nodeModel","rtNodes","canBreak","containsConnector","applyConnectorTemplate","tNode","connModel","menuClass","grouping","DiagramContextMenu","service","defaultItems","disableItems","hiddenItems","setLocaleKey","contextMenu","getMenuItems","contextMenuItemClick","contextMenuBeforeOpen","contextMenuOpen","onClose","contextMenuOnClose","menuItems","orderItems","groupItems","showCustomMenuOnly","getDefaultItems","buildDefaultItems","orderGroup","customItem","getKeyFromId","updateItemStatus","getLocaleText","ensureItems","ensureTarget","diagramArgs","newItem","contextItems_1","selectedLength","canUndo","canRedo","generateID","menuItem","bringToFrontOrder","moveForwardOrder","sendToBackOrder","sendBackwardOrder","BpmnDiagrams","annotationObjects","getBPMNEventShape","getBPMNGatewayShape","getBPMNDataObjectShape","getBPMNShapes","getBPMNActivityShape","renderBPMNTextAnnotation","getBPMNTextAnnotation","bpmnShape","bpmnShapeData","gatewayshape","gatewayNode","gatewayTypeNode","gatewayTypeNodeShapeData","gateway","setSizeForBPMNGateway","dataObjectshape","dataObject","dataobjNode","dataobjTypeNode","dataobjCollectionNode","getBPMNTaskShape","task","taskShapes","taskNode","childCount","getTaskChildCount","childSpace","taskTypeNodeData","taskTypeNode","childNode2data","loopType","loop","taskLoopNode","taskCompNode","getBPMNCompensationShape","compensation","subEvent","sub","eventshape","shapeEvent","shapeActivity","innerEvtNode","outerEvtNode","triggerNode","triggerNodeData","setSizeForBPMNEvents","setEventVisibility","setSubProcessVisibility","eventLength","elementWrapper","adhoc","getBPMNSubProcessShape","subProcessShapes","subprocessAdhoc","subProcessLoopShapes","subChildCount","getSubprocessChildCount","subprocessNode","getBPMNSubProcessTransaction","collapsedShape","getBPMNSubEvent","getBPMNSubProcessLoopShape","subChildSpace","boundary","getBPMNAdhocShape","subprocessComp","eventContainer","getBPMNSubprocessEvent","innerRect","transactionEvents","subprocessLoopData","subprocessLoop","redoElement","sources","processTable_1","processIndex","excludeChild","compensationNode","subProcessEventsShapes","adhocNode","annotationContainer","annotationPath","setAnnotationPath","annotationConnector","annotationsContainer","textObject","annotationObject","bpmnShapeContent","clearAnnotations","removeAnnotationObjects","nodeContent","parentBounds","getAnnotationPathAngle","parentNodeId","newShape","actualShape","sizeChanged","updateBPMNGateway","updateBPMNDataObject","updateBPMNActivity","updateBPMNEvent","bpmnshapeGatewaydata","elementWrapperChild1","elementWrapperChild2","setSizeForBPMNDataObjects","child0","child1","child2","updateEventVisibility","elementWrapperChild0","updateBPMNEventTrigger","bpmnshapeTriggerdata","actualObjectProp","updateBPMNActivityTask","updateBPMNActivityTaskLoop","updateBPMNActivitySubProcess","setSizeForBPMNActivity","bpmnshapeTaskdata","bpmnshapeLoopdata","updateChildMargin","updateBPMNSubProcessEvent","updateBPMNSubProcessAdhoc","updateBPMNSubProcessBoundary","updateBPMNSubProcessCollapsed","updateBPMNSubProcessCompensation","updateBPMNSubProcessLoop","updateBPMNSubProcessTransaction","eventIndex","eventWrapper","actualEvent","updateBPMNSubEvent","newEvent","getEventSize","wrapperChild","currentNode","flowType","sequence","getSequence","association","getAssociation","getMessage","offLength","eventNode","SubProcess","Timer","Escalation","Compensation","Conditional","Link","Signal","Terminate","Multiple","Parallel","Exclusive","Inclusive","EventBased","ExclusiveEventBased","ParallelEventBased","Service","Receive","Send","InstantiatingReceive","Manual","BusinessRule","User","Script","Standard","ParallelMultiInstance","SequenceMultiInstance","ConnectorBridging","lastBridge","Bridging","InheritBridging","canBridge","points1","bridgeSpacing","bridgeSpace","bgedir","connector1","points2","intersectsRect","intersectPts","getLengthAtFractionPoint","lengthFractionIndex","fullLength","stBridge","enBridge","angleCalculation","fix","lengthCalculation","var1","insertAt","arcSeg","createSegment","bridgeStartPoint","arcs","bgseg","stPoints","firstBridge","bridgeList","subBridge","createBridgeSegment","startPt","endPt","angle1","self","zOrder","inter1","intersect2","checkForHorizontalLine","roundedAngle","start1","end1","start2","end2","getLineSegment","pointAt","lengthAtFractionPt","previouspt2","suspect","getSlope","delX","delY","lhs","rhs","xDiff","yDiff","Snapping","horizontallysnapped","verticallysnapped","snapObject","roundedRight","roundedLeft","roundedTop","roundedBottom","currentright","currentbottom","SnapToVerticalLines","SnapToHorizontalLines","cutoff","bal","horizontalSnap","verticalSnap","ended","lengthY","hTarget","vTarget","lengthX","objectsAtLeft","objectsAtRight","objectsAtTop","objectsAtBottom","snapObjDistance","snapObjectDistance","hIntersectRect","vIntersectRect","targetBounds","findNodes","canBeTarget","canConsider","createSnapObject","createGuidelines","createHSpacingLines","createVSpacingLines","snapSize","sameWidth","sameHeight","hintersectedrect","vintersectedrect","nodesInView","targetBounds_1","targetBounds_2","actualDiff","addSameWidthLines","addSameHeightLines","initialBoundsT","actualTop","initialBound","initialBoundsB","actualLeft","initialRect","renderAlignmentLines","sortByDistance","nearestleft","nearestright","equaldistance","equallySpaced","findEquallySpacedNodesAtLeft","adjustablevalue","findEquallySpacedNodesAtRight","addHSpacingLines","deltaHorizontal","nearesttop","nearestbottom","findEquallySpacedNodesAtTop","findEquallySpacedNodesAtBottom","addVSpacingLines","deltaVertical","crnt","renderSpacingLines","equallySpacedObjects","sameWidths","sameSizes","sameHeights","snap","nd","ascending","equalDistance","prevBounds","actualDistance","groupUndo","currentEntry","canLog","undoStack","redoStack","getHistoryList","getUndoEntry","endGroupActionCount","undoEntry","undoGroupAction","currEntry","getHistroyObject","addObject","recordPositionChanged","recordSizeChanged","recordRotationChanged","recordConnectionChanged","recordPropertyChanged","isUndo","recordCollectionChanged","recordLabelCollectionChanged","recordPortCollectionChanged","recordSegmentChanged","recordPortChanged","recordAnnotationChanged","historyEntry","ignoreProperty","isRedo","oldElement","undoChanges","segmentChanged","positionChanged","connectionChanged","scaleWidth","scaleHeight","selectorObj","rotationChanged","getRedoEntry","startGroupActionCount","redoGroupAction","hList","entryCurrent","LayoutAnimation","setIntervalObject","layoutAnimation","setIntervalObjects_1","updateOpacity","layoutTimer","differenceX","differenceY","HierarchicalTree","layoutProp","viewport","anchorX","anchorY","firstLevelNodes","centerNode","maxLevel","graphNodes","horizontalSpacing","verticalSpacing","setUpLayoutInfo","tree","hasSubTree","updateTree","rootInfo","updateAnchor","updateNodes","updateConnectors","dontupdate","dimensions","lev","getDimensions","assistants","treeBounds","levelBounds","asstBounds","setDepthSpaceForAssitants","updateHorizontalTreeWithMultipleRows","updateVerticalTree","updateHorizontalTree","setBreadthSpaceForAssistants","canMoveBy","treeWidth","translateInfo","shapeBounds","dim","translateSubTree","subTreeTranslation","updateLeafNode","enableRouting","asstDif","firstChildInfo","findIntersectingLevels","actualLevel","treeIntersect","spaceLeftFromPrevSubTree","translated","shiftSubordinates","rBounds","updateRearBounds","bnds","lastLevel","isLastLeaf","findLevel","vSpace","asstHeight","asstElement","asst","asstWidth","uniteRects","shape1","childWidth","childHeight","actBounds","oldActBounds","childInfo","canMoveValue","translateSibilingsBy","leftCenter","rightCenter","minTranslation","splitChildrenInRows","unique","leftTree","rightTree","splitRows","treeInfo","rightMost","updateLeftTree","rightBounds","alignRowsToCenter","leftBounds","centered","centerObjct","childDimension","centeredX","centeredY","updateRearBoundsOfTree","childBnds","dontUpdate","oddBounds","evenBounds","oddLevels","findOffset","canMoveBy_1","dummy","treeType","dif","intersectingLevels","layoutInfo","viewPortBounds","visited","getConnectorSegments","get3Points","updateSegmentsForHorizontalOrientation","updateSegmentsForBalancedTree","get5Points","relative","getSegmentsForMultipleRows","startingPoint","getSegmentsFromPoints","point_1","MindMap","checkRoot","fistLevelNodes","findFirstLevelNodes","leftNodes","rightNodes","getMindmapBranch","fistLevelNodes_1","updateMindMapBranch","nodes_2","excludeNodes","newCollection","newCollection_1","outEdge","RadialTree","layoutNodes","depthFirstAllignment","populateLevels","transformToCircleLayout","nodeInfo","segmentOffset","stages","newlevel","nodeInfo1","nodeInfo2","actualCircumference","GraphForceNode","gnNode","velocityX","velocityY","graphNode","applyChanges","SymmetricLayout","cdCOEF","cfMAXVELOCITY","cnMAXITERACTION","cnSPRINGLENGTH","mszMaxForceVelocity","doGraphLayout","graphLayoutManager","graph","selectedNode","Bounds","getModelBounds","lstGraphNodes","GraphNodes","lstNodes","convertGraphNodes","preLayoutNodes","nLenght","makeSymmetricLayout","appendForces","resetGraphPosition","rcBounds","fMaxSize","ptCenter","dRotateAngle","dAngle","getForceNode","forceNode","gnChild","calcNodesForce","vtx1","vtx2","normalDistance","calcRelatesForce","updateNeigbour","gfnNode","ptPoint","szMin","ptLocation","lstToReturn","vtSource","vtTarget","pointDistance","lineAngle","calcForce","vx","vy","atan","symmetricLayout","GraphLayoutManager","minDist","fOffset","visitedStack","cycleEdgesCollection","graphObjects","passedNodes","selectionList","mhelperSelectedNode","nodeCollection_1","nodeGraphObject","graphType","connectorGraphObject","updateLayout1","modelBounds","trnsX","lNodes","nodesToLayout","detectCyclesInGraph","cycleConnColln","nodeSymbols","isCycleEdge","dictionaryLength","getNodesToPosition","selectNodes","nodeGraph","exploreGraphEdge","addNode","isConnectedToAnotherNode","LeftMargin","TopMargin","selectConnectedNodes","dictionaryContains","Added","getConnectedRelatives","exploreRelatives","addGraphNode","exploreRelatives1","relativesToExplore","fromNode","toNode","getConnectedParents","getConnectedChildren","keyObj","gnNodeChildren","setNode","findNode","fullName","nLength","nodeHelper","bFoundConnectedNode","searchEdgeCollection","edgesToSearchThrough","connectionDirection","nodeLink","nodeToAdd","collectionToAdd","vertex","currentStack","getUnVisitedChildNodes","currentEdge","con","ComplexHierarchicalTree","HierarchicalLayoutUtil","crossReduction","CrossReduction","createVertex","geometry","getEdges","findRoots","vertices","roots","best","maxDiff","conns","getVisibleTerminal","terminalCache","traverse","directed","currentComp","hierarchyVertices","filledVertices","vertexID","edgeIsSource","netCount","isSource2","filledVertexSet","candidateRoots","vertexSet","MultiParentModel","cycleStage","layeringStage","crossingStage","placementStage","clnode","dnode","coordinateAssignment","widestRankValue","placementStageExecute","plalementChange","calculateWidestRank","lastRankMaxCellSize","rankSizes","rankOffset","rankValue","maxRank","maxCellSize","ranks","localOffset","isVertex","numEdges","setXY","setTempVariable","widestRank","distanceToNextRank","minRank","isY","rankCoordinates","stage","maxOffset","initialCoords","facade","isAncestor","otherNode","hashCode","weightedCellSorter","weightedValue","rankIndex","minNode","nodeList","nodeWrapper","setDictionaryForSorter","maxTries","cellWrapper","nextLayerConnectedCells","getConnectedCellsOnLayer","previousLayerConnectedCells","nextConnectedCount","prevConnectedCount","medianNextLevel","medianXValue","medianPreviousLevel","numConnectedNeighbours","getTempVariable","cellMedian","leftCell","intraCellSpacing","rightCell","updateNodeList","connectedCell","connectedCellWrapper","getDictionaryForSorter","connectedCells","medianValues","medianPoint","jettyPositions","currentYDelta","currentXDelta","bestOffsetDelta","maxIterations","setCellLocations","getValues","vertexMapper","setVertexLocation","garphModelsetVertexLocation","realCell","initialRank","fixRanks","startNodes","internalNodes","getDictionaryValues","startNodesCopy","layerDeterminingEdges","internalNode","connectsAsTarget","edgesToBeMarked","connectsAsSource","allEdgesScanned","minimumLayer","internalEdge","removedCell","currentMaxLayer","seenNodes","unseenNodesArray","unseenNodes","rootsArray","modelRoots","getDictionary","visit","seenNodesCopy","invert","connectingEdge","isReversed","getEdgesBetween","dlayout","multiObjectIdentityCounter","dfsCount","hierarchicalUtil","internalVertices","hierarchicalLayout","createInternalCells","realEdges","realEdge","targetCell","internalTargetCell","setDictionary","undirectedEdges","directedEdges","rankList","oldRootsArray","updateMinMaxRank","seen","dic","layoutObjectId","visitor","dfsRoots","trackAncestors","extendedDfs","depthFirstSearch","updateConnectionRank","outgoingEdges","traversedList","removeConnectionEdge","cHash","hashCodeLength","transients","shallow","calculateCrossings","numRanks","totalCrossings","calculateRankCrossing","previousRank","tmpIndices","rankPosition","nodeIndices","connectedNode","otherCellRankPosition","indices","firstIndex","treeSize","treeIndex","nestedBestRanks","iterationsWithoutImprovement","currentBestCrossings","weightedMedian","candidateCrossings","iteration","downwardSweep","medianRank","connectedlayer","connectedAs","medianValue","arrayCount","leftMedian","rightMedian","numCellsForRank","reservedPositions","sorterEntry","nextLevelConnectedCells","nextRankValue","Palette","SymbolPreview","SymbolPalette","symbolTable","clonedElement","getSymbolPreview","enableSearch","accordionElement","refreshPalettes","accordionDiv","updatePalettes","allowDrag","measureElemnt","initSymbols","symbolGroup","prepareSymbol","group_1","renderPalette","paletteDiv","renderSymbols","addPaletteItem","paletteName","paletteSymbol","symbolPaletteGroup","getSymbolContainer","removePaletteItem","stackPanel","symbolContainer","getSymbolTemplate","getContainer","symbolInfo","getSymbolInfo","actualWidth","actualHeight","symbolMargin","scaleSymbol","getSymbolDescription","parentDiv","symbolPreviewWidth","symbolPreviewHeight","symbolPreview","measureAndArrangeSymbol","getHtmlSymbol","getGroupParent","updateSymbolSize","getSymbolSize","HTMLCanvasElement","isPreview","highlightedSymbol","srcElement","searchPalette","palette_1","HTMLInputElement","oldSymbol","initDraggable","measureChild","scaleChildren","scaleGroup","childContainer","symGroup","searchDiv","textBox","filterSymbols","createSearchPalette","symbolGroup_1","emptyDiv","Overview","viewPortRatio","renderCanvas","oldparent","removeDocument","getDiagram","documentMouseUp","xlink","eWidth","eHeight","bRect","screenX","screenY","renderHtmlLayer","addOverviewRectPanel","htmlDiv","ovw","innerrect","renderOverviewCorner","transrect","updateOverviewRectangle","resizeDirection","updateHelper","difx_1","dify_1","updateOverviewrect","updateOverviewCorner","transattr","rectname","translateOverviewRectangle","offwidth","offheight","updateParentView","renderOverviewRect","viewwidth","viewheight","scrollOverviewRect","scaled","delx","dely","webkitTransform","getNativeLayer","widthratio","heightratio","initHelper","shape-rendering","index.Diagram","index.HierarchicalTree","index.MindMap","index.RadialTree","index.ComplexHierarchicalTree","index.DataBinding","index.Snapping","index.PrintAndExport","index.BpmnDiagrams","index.SymmetricLayout","index.ConnectorBridging","index.UndoRedo","index.LayoutAnimation","index.DiagramContextMenu","index.ConnectorEditing","index.SymbolPalette","keysInternal","valuesInternal","WUniqueFormat","referenceCount","uniqueFormatType","propertiesHash","isEqual","modifiedValue","isBorderEqual","isCharacterFormatEqual","isParagraphFormatEqual","isCellFormatEqual","isShadingEqual","isRowFormatEqual","isListFormatEqual","isTableFormatEqual","isListLevelEqual","isSectionFormatEqual","isNotEqual","modifiedProperty","targetValue","getPropertyType","sourceValue","getBorderPropertyType","getCharacterFormatPropertyType","getParaFormatPropertyType","getCellFormatPropertyType","getShadingPropertyType","getRowFormatType","getListFormatType","getTableFormatType","getListLevelType","getSectionFormatType","cloneItems","mergeProperties","cloneProperties","WUniqueFormats","addUniqueFormat","matchedFormat","updateUniqueFormat","uniqueFormat","DocumentEditor","enableHeaderFooterIn","isShiftingEnabled","isLayoutEnabled","isPastingContent","disableHistoryIn","findResultsList","documentName","tablePropertiesDialogModule","bordersAndShadingDialogModule","cellOptionsDialogModule","tableOptionsDialogModule","paragraphDialogModule","imageResizerModule","useCtrlClickToFollowHyperlink","pageOutline","enableCursorOnReadOnly","enableLocalPaste","Table","Cell","Ok","Preferred Width","Percent","Measure in","Alignment","Indent from left","Borders and Shading","Options","Specify height","At least","Exactly","Row height is","Allow row to break across pages","Repeat as header row at the top of each page","Vertical alignment","Default cell margins","Default cell spacing","Allow spacing between cells","Cell margins","Same as the whole table","Borders","Single","DashSmallGap","DashLargeGap","Triple","ThinThickSmallGap","ThickThinSmallGap","ThinThickThinSmallGap","ThinThickMediumGap","ThickThinMediumGap","ThinThickThinMediumGap","ThinThickLargeGap","ThickThinLargeGap","ThinThickThinLargeGap","SingleWavy","DoubleWavy","DashDotStroked","Emboss3D","Engrave3D","Outset","Inset","Thick","Style","Width","Height","Letter","Tabloid","Legal","Statement","Executive","A3","A4","A5","B4","B5","Custom Size","Different odd and even","Different first page","From edge","Footer","Paper","Orientation","Table Of Contents","Show page numbers","Right align page numbers","Nothing","Tab leader","Show levels","Use hyperlinks instead of page numbers","Build table of contents from","Styles","Available styles","TOC level","Heading","List Paragraph","Outline levels","Table entry fields","Modify","Color","Setting","Box","Preview","Shading","Apply To","Table Properties","Cell Options","Table Options","Insert Table","Number of columns","Number of rows","Text to display","Address","Insert Hyperlink","Edit Hyperlink","Insert","General","Indentation","Before text","Special","First line","Hanging","After text","By","Before","Line Spacing","After","At","Spacing","Define new Multilevel list","List level","Choose level to modify","Level","Number format","Number style for this level","Enter formatting for number","Start at","Restart list after","Text indent at","Aligned at","Follow number with","Tab character","Space","Arabic","UpRoman","LowRoman","UpLetter","LowLetter","Leading zero","Bullet","Ordinal","Ordinal Text","For East","No Restart","Font style","Underline style","Font color","Effects","Strikethrough","Superscript","Subscript","Double strikethrough","Open Hyperlink","Copy Hyperlink","Remove Hyperlink","Paragraph","Merge Cells","Insert Above","Insert Below","Insert Left","Insert Right","Delete Table","Delete Row","Delete Column","File Name","Format Type","Navigation","Results","Replace","Replace All","We replaced all","Find","No matches","All Done","Result","of","with","Click to follow link","Continue Numbering","Bookmark name","Close","Restart At","Properties","Name","Style type","Style based on","Style for following paragraph","Formatting","Numbering and Bullets","Numbering","Update Field","Edit Field","Bookmark","Page Setup","No bookmarks found","Number format tooltip information","Format","Create New Style","Modify Style","New","Bullets","Use bookmarks","Table of Contents","viewer","PageLayoutViewer","SfdtReader","DocumentEditor_1","updateScrollBars","isDocumentLoaded","editorModule","editorHistoryModule","searchModule","contextMenuModule","isDocumentLoadedIn","enableEditorHistory","getDocumentStart","getDocumentEnd","isReadOnly","enableImageResizer","initializeComponents","openBlank","localizeDialogs","optionsPaneModule","isOptionsPaneShow","showHideOptionsPane","initOptionsPane","initParagraphDialog","pageSetupDialogModule","initPageSetupDialog","fontDialogModule","initFontDialog","hyperlinkDialogModule","initHyperlinkDialog","initContextMenu","listDialogModule","initListDialog","initTablePropertyDialog","initBordersAndShadingsDialog","initCellMarginsDialog","initTableOptionsDialog","tableDialogModule","initTableDialog","styleDialogModule","initStyleDialog","tableOfContentsDialogModule","initTableOfContentDialog","clearPreservedCollectionsInViewer","LayoutViewer","clearDocumentItems","getDocumentEditorElement","fireContentChange","fireDocumentChange","fireSelectionChange","isCompositionStart","predictText","fireZoomFactorChange","fireViewChange","visiblePages","endPage","showParagraphDialog","paragraphFormat","isReadOnlyMode","showPageSetupDialog","showFontDialog","characterFormat","showCellOptionsDialog","showTableOptionsDialog","showTableDialog","showTableOfContentsDialog","showStyleDialog","showHyperlinkDialog","showBookmarkDialog","bookmarkDialogModule","showStylesDialog","stylesDialogModule","showListDialog","showTablePropertiesDialog","showBordersAndShadingDialog","enablePrint","enableSfdtExport","enableWordExport","enableTextExport","enableSelection","enableEditor","enableContextMenu","enableOptionsPane","enableHyperlinkDialog","enableTableDialog","enableBookmarkDialog","enableTableOfContentsDialog","enablePageSetupDialog","enableStyleDialog","enableListDialog","enableParagraphDialog","enableFontDialog","enableTablePropertiesDialog","enableBordersAndShadingDialog","enableTableOptionsDialog","sfdtText","abstractLists","WStyles","onDocumentChanged","convertJsonToDocument","intializeDefaultStyles","scrollToPage","enableAllModules","Print","SfdtExport","WordExport","TextExport","Editor","ImageResizer","EditorHistory","OptionsPane","HyperlinkDialog","TableDialog","BookmarkDialog","TableOfContentsDialog","PageSetupDialog","StyleDialog","ListDialog","ParagraphDialog","BulletsAndNumberingDialog","FontDialog","TablePropertiesDialog","BordersAndShadingDialog","TableOptionsDialog","CellOptionsDialog","StylesDialog","updateViewerSize","fitPage","pageFitType","printModule","sfdtExportModule","wordExportModule","textExportModule","jsonString","BodyWidget","sectionFormat","WSectionFormat","paragraph","ParagraphWidget","WParagraphFormat","WCharacterFormat","childWidgets","containerWidget","hfs","parseHeaderFooter","evenHeader","evenFooter","firstPageHeader","firstPageFooter","headersFooters","findByName","baseStyle","listFormat","getStyleNames","styleType","getStyles","showDialog","dialogType","showOptionsPane","destroyDependentModules","browserUserAgent","getPageHeight","getPageWidth","printElement","generatePrintContent","htmlString","boundingRectangle","isPrinting","renderWidgets","canvasURL","pageCanvas","uniqueSectionFormat","ownerBase","uniqueSectionFormats","hasValue","getPropertyDefaultValue","initializeUniqueSectionFormat","uniqueSectionFormatTemp","addUniqueSectionFormat","copyFormat","isUndoing","isRedoing","updateUniqueSectionFormat","cloneFormat","WLevelOverride","overrideListLevel","levelNumber","startAt","WList","listId","sourceListId","abstractListId","abstractList","levelOverrides","getListLevel","levelOverride","getLevelOverride","mergeList","WListFormat","uniqueListFormat","baseListStyle","basedOn","listLevelNumber","WParagraphStyle","initializeUniqueListFormat","uniqueListFormats","uniqueListFormatTemp","addUniqueListFormat","clearFormat","ApplyStyle","mergeFormat","WTabStop","positionIn","deletePositionIn","justification","leader","deletePosition","tabJustification","uniqueParagraphFormat","tabs","getUpdatedTabs","inTabs","tabStops","hasTabStop","getListFormatParagraphFormat","listLevel","ifListFormat","getDefaultValue","docParagraphFormat","documentParagraphFormat","bodyWidget","initializeUniqueParagraphFormat","uniqueParagraphFormats","uniqueParaFormatTemp","addUniqueParaFormat","updateUniqueParagraphFormat","leftIndent","rightIndent","beforeSpacing","afterSpacing","lineSpacingType","outlineLevel","uniqueCharacterFormat","baseCharStyle","charStyleValue","checkCharacterStyle","baseStyleValue","checkBaseStyle","docCharacterFormat","documentCharacterFormat","returnPropertyType","initializeUniqueCharacterFormat","uniqueCharacterFormats","uniqueCharFormatTemp","addUniqueCharacterFormat","isEqualFormat","baselineAlignment","fontColor","strikethrough","highlightColor","isSameFormat","updateUniqueCharacterFormat","HelperMethods","spanText","indexOfAny","wordSplitCharacter","lastIndexOfAny","addCssStyle","getHighlightColorCode","convertPointToPixel","convertPixelToPoint","pixel","isLinkedFieldCharacter","FieldElementBox","fieldType","fieldEnd","fieldBegin","removeSpace","trimStart","trimEnd","writeCharacterFormat","styleName","decimalDigits","wordBefore","wordAfter","wordSplitCharacters","xIn","yIn","WStyle","copyStyle","paraStyle","WCharacterStyle","charStyle","returnStyle","styleObjects","styles_1","returnStyleObject","WBorder","uniqueBorderFormat","initializeUniqueBorder","uniqueBorderFormats","uniqueBorderFormatTemp","addUniqueBorderFormat","lineArray","getBorderLineWidthArray","borderLineArray","getBorderWeight","weight","numberOfLines","getNumberOfLines","borderNumber","getBorderNumber","getPrecedence","WBorders","leftIn","rightIn","topIn","bottomIn","horizontalIn","verticalIn","diagonalUpIn","diagonalDownIn","lineWidthIn","diagonalDown","diagonalUp","valueIn","WShading","uniqueShadingFormat","initializeUniqueShading","uniqueShadingFormats","uniqueShadingTemp","addUniqueShading","shading","foregroundColor","textureStyle","WTableFormat","owner","uniqueTableFormat","assignTableMarginValue","initializeUniqueTableFormat","uniqueTableFormats","uniqueTableFormatTemp","addUniqueTableFormat","initializeTableBorders","tableFormat","tableAlignment","preferredWidth","preferredWidthType","WRowFormat","uniqueRowFormat","beforeWidth","afterWidth","heightType","initializeUniqueRowFormat","uniqueRowFormats","uniqueRowFormatTemp","addUniqueRowFormat","allowBreakAcrossPages","gridBefore","gridBeforeWidth","gridBeforeWidthType","gridAfter","gridAfterWidth","gridAfterWidthType","WCellFormat","uniqueCellFormat","initializeUniqueCellFormat","uniqueCellFormats","uniqueCellFormatTemp","addUniqueCellFormat","containsMargins","Widget","bodyWidgets","widget","indexInOwner","previousPage","previousContainer","TableCellWidget","getPreviousSplitWidget","TableRowWidget","HeaderFooterWidget","previousRenderedWidget","nextContainer","getNextSplitWidget","nextRenderedWidget","BlockWidget","getPreviousSplitWidgets","widgets","previousSplitWidget","getSplitWidgets","nextSplitWidget","combineWidget","splitWidget","TableWidget","combineRows","addWidgets","destroyInternal","LineWidget","BlockContainer","sectionFormatIn","getHierarchicalIndex","hierarchicalIndex","headerFooterType","getTableCellWidget","touchPoint","tableCellWidget","chilgWidget","headerWidget","footerWidget","headerFooter","block","isPageBreak","ownerTable","ownerRow","getContainerWidth","isInsideTable","associatedCell","cellFormat","isEndsWithPageBreak","inlineElement","TextElementBox","ImageElementBox","BookmarkElementBox","getInline","indexInInline","isStarted","splittedWidget","ListTextElementBox","cloneLine","leftBorderWidth","rightBorderWidth","topBorderWidth","bottomBorderWidth","tableHolder","WTableHolder","spannedRowCollection","combineCells","tableCell","getOwnerWidth","isBasedOnViewer","getTableWidth","getTableClientWidth","tableWidth","getCellWidth","getMinimumPreferredWidth","fitCellsToClientArea","rowFormat","calculateGrid","tempGrid","spannedCells","currOffset","startOffset","removeSpannedCell","updateColumnSpans","getGridCount","buildTableColumns","isGridUpdated","resetColumns","rowSpannedCells","isAutoWidth","addColumns","rowSpannedCell","minWidth_1","ownerColumn","validateColumnWidths","fitColumns","setWidthToCells","rw","getMaxRowWidth","totalPreferredWidth","getTotalWidth","convertPointToPercent","tablePreferredWidth","ownerWidth","getTableOf","getRowOf","fitChildToClientArea","getColumnCellsForSelection","startCell","endCell","splitWidthToTableCells","tableClientWidth","splitWidthToRowCells","insertTableRowsInternal","tableRows","updateRowIndex","tableGrids","headerHeight","getCellOf","tableGrid","prevOffset","getCellOffset","gridStartIndex","getOffsetIndex","updateRowBySpannedCells","getPreviousRowSpannedCells","spannedCell","include","previousWidget","cellWidget","getContainerTable","previousCell","nextCell","cellPreferredWidth","getCellLeftBorder","leftBorder","cellBorder","rowBorders","tableBorders","getLeftBorderToRenderByHierarchy","prevCell","previousRow","prevRowCell","getPreviousCellLeftBorder","getLeftBorderWidth","getRightBorderWidth","getCellSpacing","actualCellSpacing","hasNoneStyle","prevCellRightBorder","getBorderBasedOnPriority","adjacentBorder","borderWeight","adjacentBorderWeight","borderPriority","adjacentBorderPriority","borderColInRGB","convertHexToRGB","R1","G1","B1","adjacentBorderColInRGB","R2","G2","B2","borderBrightness","adjacentBorderBrightness","getCellRightBorder","rightBorder","getRightBorderToRenderByHierarchy","nextWidget","getAdjacentCellRightBorder","nextCellLeftBorder","getCellTopBorder","topBorder","getTopBorderToRenderByHierarchy","prevTopCell","prevRow","getPreviousCellTopBorder","previousTopCell","prevTopCellBottomBorder","getCellBottomBorder","bottomBorder","getBottomBorderToRenderByHierarchy","nextBottomCell","nextRow","getAdjacentCellBottomBorder","prevBottomCellTopBorder","colCodeNo","paragraphWidget","splitParagraph","lastElement","isFirstLine","isLastLine","textIndex","getEndOffset","previousLine","elementBox","ElementBox","linkFieldCharacter","linkFieldTraversingForward","linkFieldTraversingBackwardSeparator","fieldSeparator","isFieldEnd","linkFieldTraversingBackward","previousNode","prevParagraph","nextLine","lineWidget","objectCharacter","hasFieldEnd","fieldBeginInternal","fieldSeparatorInternal","fieldEndInternal","baselineOffset","FieldTextElementBox","fieldText","TabElementBox","tabText","tabLeader","bookmarkTypeIn","refereneceIn","nameIn","bookmarkType","isInlineImage","imageStr","imgElement","isInlineImageIn","isMetaFile","isListFollowCharacter","isFollowCharacter","Page","repeatHeaderRowTableWidget","editor","removeFieldInWidget","removePage","tableColumns","getPreviousSpannedCellWidth","previousColumnIndex","curColumnIndex","currentColumnIndex","WColumn","endOffset","isFitColumns","preferredTableWidth","totalColumnWidth","CONTEXTMENU_COPY","CONTEXTMENU_CUT","CONTEXTMENU_PASTE","CONTEXTMENU_UPDATE_FIELD","CONTEXTMENU_EDIT_FIELD","CONTEXTMENU_HYPERLINK","CONTEXTMENU_OPEN_HYPERLINK","CONTEXTMENU_COPY_HYPERLINK","CONTEXTMENU_REMOVE_HYPERLINK","CONTEXTMENU_EDIT_HYPERLINK","CONTEXTMENU_FONT_DIALOG","CONTEXTMENU_PARAGRAPH","CONTEXTMENU_TABLE","CONTEXTMENU_INSERT_TABLE","CONTEXTMENU_DELETE_TABLE","CONTEXTMENU_INSERT_ABOVE","CONTEXTMENU_INSERT_BELOW","CONTEXTMENU_INSERT_RIGHT","CONTEXTMENU_INSERT_LEFT","CONTEXTMENU_COMPLETE_DELETE_TABLE","CONTEXTMENU_DELETE_ROW","CONTEXTMENU_DELETE_COLUMN","CONTEXTMENU_MERGE_CELL","CONTEXTMENU_CONTINUE_NUMBERING","CONTEXTMENU_RESTART_AT","contextMenuInstance","onContextMenuInternal","showHideElements","localValue","listStyle","oncontextmenu","disableBrowserContextmenu","menuOptions","handleContextMenuItem","caret","showCaret","pasteInternal","updateToc","navigateHyperlink","copyHyperlink","removeHyperlink","mergeCells","insertRow","insertColumn","deleteTable","deleteRow","deleteColumn","applyContinueNumbering","applyRestartNumbering","editField","tableProperties","insertTable","openHyperlink","editHyperlink","continueNumbering","restartAt","hideToolTip","copiedData","contextType","listLevelPattern","isCellSelected","getHyperlinkField","isImageField","canMergeCells","WAbstractList","abstractListIdIn","WListLevel","uniqueListLevel","followCharacter","numberFormat","restartLevel","initializeUniqueWListLevel","uniqueListLevels","uniqueListLevelTemp","addUniqueWListLevel","dotBullet","squareBullet","arrowBullet","circleBullet","allowLayout","isInitialLoad","maxTextHeight","maxBaseline","maxTextBaseline","isFieldCode","layoutItems","createNewPage","addBodyWidget","clientActiveArea","prevPage","sectionIndex","insertPage","layoutSection","updateFieldElements","ownerWidget","nextBlock","updateClientAreaForBlock","layoutBlock","layoutHeaderFooter","headerFooterWidget","getCurrentPageHeaderFooter","updateHFClientArea","layoutHeaderFooterItems","updateHeaderFooterToParent","typeIndex","getHeaderFooter","clearTableWidget","linkFieldInHeaderFooter","linkFieldInParagraph","linkFieldInTable","updateClientAreaLocation","pargaraph","shiftChildLocation","clientArea","shiftTop","widgetTop","footerMaxHeight","childWidget","shiftChildLocationForTableWidget","tableWidget","shiftChildLocationForTableRowWidget","rowWidget","shiftChildLocationForTableCellWidget","moveToLine","layoutParagraph","layoutTable","addParagraphWidget","textHelper","getParagraphMarkWidth","addLineWidget","layoutListItems","layoutEmptyLineWidget","updateClientWidth","updateWidgetToPage","clearLineMeasures","moveElementFromNextLine","nextElement","layoutFieldCharacters","moveToNextLine","moveFromNextPage","hasValidElement","getFieldResult","checkAndSplitTabOrLineBreakCharacter","getTextSize","getTabWidth","moveToNextPage","updateFieldText","cutClientWidth","addElementToLine","currentLine","addSplittedLineWidget","splitTextForClientArea","checkLineWidgetWithClientArea","splitElementForClientArea","getNextValidElementForField","character","splitByLineBreakOrTab","splitCurrentWidget","cutFromLeft","splitTextElementWordByWord","fieldStacks","isEmptyLine","isShiftEnter","paragraphMarkSize","getParagraphMarkSize","getBeforeSpacing","getLineSpacing","BaselineOffset","cutFromTop","getListById","clearListElementBox","layoutList","currentListLevel","getListNumber","updateTextSize","addListLevels","getListLevelPattern","splittedElementBox","movedElementBox","newLineWidget","splitByWord","getSplitIndexByWord","splitByCharacter","getTextSplitIndexByCharacter","splitWidth","measureTextExcludingSpaceAtEnd","splittedElement","getTextIndexAfterSpace","splittedText","isSplitByWord","textWidth","characterUptoWS","checkPreviousElement","spiltBy","inlineIndex","newSpan","paraFormat","isParagraphStart","isParagraphEnd","maxDescent","updateLineWidget","measurement","whiteSpaceCount","getWidthAndSpace","getSubWidth","spaceCount","addSubWidth","alignElements","alignLineElements","nextBody","moveBlocksToNextPage","updateClientArea","nextParagraph","insertIndex","isLastElement","getCellContentHeight","enableHeaderAndFooter","shiftFooterChildLocation","footerDistance","lastTextElement","updateListValues","getListText","getListStartValue","renderedLists","getAbstractListById","startVal","listAdv","listText","levelKey","getListTextListLevel","getAsLetter","quotient","listValue","getAsRoman","getAsLeadingZero","levelOverrideAdv","fposition","isCustomTab","defaultTabWidth","tabPosition","tabwidth","getRightTabWidth","clientActiveWidth","totalClientWidth","clientActiveAreaWidth","justify","trimSpace","lineText","elementText","isParagraphFirstLine","isParagraphLastLine","lastLineWidget","lastInline","moveNextWidgetsToTable","rowWidgets","moveFromNext","currentTable","nextWidgets","addTableCellWidget","maxCellMarginTop","maxCellMarginBottom","prevColumnIndex","cellspace","prevSpannedCellWidth","addWidgetToTable","tableCollection","endRowWidget","prevWidget","rowWidgetIndex","addTableWidget","updateRowHeightBySpannedCell","updateRowHeightByCellSpacing","updateHeightForRowWidget","updateSpannedRowCollection","prevRowWidget","updateRowHeight","mergedCellHeight","isRowSpanEnd","splittedCellWidgets","splittedCell","isVerticalMergedCellContinue","colIndex","splitWidgets","tableRowWidget","isLastRow","isFirstLineFitForRow","getSplittedWidgetForRow","insertSplittedCellWidgets","getSplittedWidget","updateWidgetLocation","updateWidgetsToTable","tableWidgets","isAllowBreakAcrossPages","moveRowToNextTable","continueHeader","isInsertSplittedWidgets","updateWidgetsToPage","prevBodyWidget","curretTable","currentRenderingPage","updateChildLocationForRow","getHeaderHeight","row_1","updateWidgetToRow","lastWidget","isUpdateVerticalPosition","isLayouted","cellspacing","currentRowWidgetIndex","rowSpanWidgetEndIndex","splitSpannedCellWidget","spanEndRowWidget","childWidget_1","updateHeightForCellWidget","updateCellVerticalPosition","updateHeightForTableWidget","previousRowIndex","insertRowSpannedWidget","insertEmptySplittedCellWidget","previousLeft","emptyCellWidget","createCellWidget","splitMinimalWidget","splittedPara","getSplittedWidgetForPara","tableCol","tableHeight","splittedTable","getSplittedWidgetForTable","createTableWidget","newTable","lineBottom","rowBottom","splittedRow","isFirstLineFitForPara","paraWidget","cellwidget","isFirstLineFitInShiftWidgets","containerCellWidget","isFirstLineFitForTable","isFit","isFirstLineFitForCell","updateChildLocationForTable","updateChildLocationForCell","isUpdateToTop","getDisplacement","updateCellContentVerticalPosition","updateTableWidgetLocation","cellContentHeight","getTableLeftBorder","getTableRightBorder","getTableTopBorder","getTableBottomBorder","getCellDiagonalUpBorder","getCellDiagonalDownBorder","layoutNextItemsBlock","blockAdv","blockToShift","updateNextBlockList","currentWidget","isInsertingTOC","updateContainerWidget","getFirstParagraphInFirstCell","updateWholeListItems","updateListItemsTillEnd","updateClientAreaForLine","startLineWidget","getParentTable","reLayoutParagraph","elementBoxIndex","layoutBodyWidgetCollection","reLayoutTable","reLayoutLine","isInHeaderFooter","updateHCFClientAreaWithTop","isBlockInHeader","block_1","clearPosition","clearHeight","clearRowWidget","clearCellWidget","blockIndex","shiftNextWidget","curretBlock","checkAndGetBlock","currentParagraph","shiftNextWidgets","tableView","updateClientAreaTopOrLeft","layoutRow","addTableRowWidget","updateClientAreaForRow","layoutCell","getMaxTopOrBottomCellMargin","topOrBottom","updateClientAreaForCell","shiftLayoutedItems","reLayoutOrShiftWidgets","removeEmptyPages","fieldCode","getFieldCode","shiftWidgetsBlock","updateRenderedListItems","shiftWidgetsForPara","shiftWidgetsForTable","prevBodyObj","getBodyWidgetOfPreviousBlock","shiftToPreviousWidget","updateClientAreaByWidget","isFitInClientArea","nextBodyWidget","createOrGetNextBodyWidget","previousBlock","isSplittedToNewPage","shiftTableWidget","shiftRowWidget","shiftCellWidget","shiftParagraphWidget","updateVerticalPositionToTop","combinedTable","isUpdateTop","tablewidget","previousBodyWidget","maxElementHeight","getMaxElementHeight","paragraphView","widgetIndex","updateParagraphWidgetInternal","activeArea","lastLine","newParagraphWidget","destroyAndScroll","scrollToBottom","createSplitBody","newBody","lineToLayout","Renderer","pageCanvasIn","containerCanvas","selectionCanvas","getColor","pageContext","setPageSize","renderHFWidgets","renderHeaderSeparator","selectionContext","dpr","devicePixelRatio","cliped","widgetHeight","headerFooterHeight","getScaledValue","renderWidget","renderDashLine","getHeaderFooterType","renderHeaderFooterMark","renderHeaderFooterMarkText","footerHeight","differentFirstPage","differentOddAndEvenPages","renderParagraphWidget","renderTableWidget","renderTableCellWidget","renderTableRowWidget","renderTableOutline","visibleBounds","selectedWidgets","addSelectionHighlightTable","renderTableCellOutline","addSelectionHighlight","searchHighlighters","widgetInfo","toSkipFieldCode","underlineY","getUnderlineYPosition","renderListTextElementBox","renderImageElementBox","renderTextElementBox","breakCharacterFormat","renderUnderline","renderStrikeThrough","isHeightType","scaledWidth","tabElement","getTabLeader","tabString","getTabLeaderString","renderedHeight","underlineHeight","widgetWidth","isClipped","containerWid","renderSingleBorder","cellTopMargin","cellBottomMargin","cellLeftMargin","cellRightMargin","renderCellBackground","nextRowIsInCurrentTableWidget","nextRowWidget","TextHelper","containerContext","paragraphMark","textTrimEndWidth","getFormatText","heightInfoCollection","sizeInfo","getHeightInternal","formatText","spanElement","applyStyle","textTopVal","lineBreakMark","listCharacterFormat","onMouseWheelInternal","viewerContainer","pageContainer","wheel","setZoomFactor","onZoomFactorChanged","updateCaretPosition","updateTouchMarkPosition","updateImageResizerPosition","clearContent","handleZoom","selectionStartPageIn","selectionEndPageIn","tableLefts","isTimerStarted","preZoomFactor","preDifference","fieldEndParagraph","fieldToLayout","isSelectionChangedOnMouseMoved","isControlPressed","isTouchInput","useTouchSelectionMark","touchDownOnSelectionMark","isCompositionUpdated","isCompositionCanceled","isCompositionEnd","preDefinedStyles","isRowOrCellResizing","isMouseDownInFooterRegion","pageFitTypeIn","fieldCollection","isPageField","mouseDownOffset","zoomFactorInternal","compositionStart","compositionUpdated","compositionEnd","onImageResizer","isImageResizerVisible","isImageResizing","onMouseUpInternal","TouchEvent","onTouchUpInternal","onKeyPressInternal","handleTextInput","onTextInputInternal","editableDiv","onPaste","onFocusOut","hideCaret","vtHeight","onWindowResize","resizeTimer","updateViewerSizeInternal","onContextMenu","onMouseDownInternal","isLeftButtonPressed","enableImageResizerMode","selectedResizeElement","cursorPoint","findFocusedPage","isCursorInsidePageRect","isCursorInFooterRegion","tableResize","isInCellResizerArea","isInRowResizerArea","handleResize","checkCursorIsInSelection","getLineWidget","onMouseMoveInternal","isImageMoveToNextPage","handleImageResizingOnMouse","handleResizing","updateTextPositionForSelection","touchY","touchPoint_1","moveTextPosition","checkForCursorVisibility","onDoubleTap","checkAndEnableHeaderFooter","selectCurrentWord","isListTextSelected","updateResizingHistory","isImageSelected","navigateHyperLinkOnEvent","isSelectionInListText","selectListText","mouseUpInternal","scrollToPosition","updateHistoryForImageResizer","imageResizer","onTouchStartInternal","zoomX","zoomY","getTouchOffsetValue","resizeObj","getImagePointOnTouch","getCaretBottom","onTouchMoveInternal","handleImageResizingOnTouch","currentDiff","onPinchOutInternal","onPinchInInternal","onKeyUpInternal","getSelection","anchorOffset","setEditableDivCaretPosition","onKeyDownInternal","isHandled","keyEventArgs","initalizeStyles","bookmarks","containerCanvasIn","selectionCanvasIn","visibleBoundsIn","dialogInternal","initDialog","dialogInternal2","initDialog2","onPageFitTypeChanged","getListLevelNumber","getBookmarks","includeHidden","bookmark","outline","contentEditable","initializeImageResizer","initTouchEllipse","wireEvent","initCaret","dialogTarget","tocStyles","tocBookmarkId","editorHistory","documentStart","pageGap","getLeftValue","isInsideRect","selectionLineWidget","touchOffsetValues","updatedZoomFactor","optionsRect","optionsPane","beforeLayout","currentResizingTable","resizerPosition","headerDistance","updateClientAreaForTable","updateTextPosition","selectCurrentParagraph","endPosition","getLineWidgetInternal","prevLineWidget","prevTop","caretInfo","updateCaretSize","caretHeight","updateCaretToPage","scrollBarWidth","isMouseDragged","getPageTop","getLineWidgetBodyWidget","clearSelectionHighlight","clearSelectionHighlightInSelectedWidgets","scrollToLastPage","fieldCodes","fieldCategory","fieldPattern","getFieldText","unWireEvent","hyperlinkField","isRowResize","isCellResize","resizePosition","getImagePoint","lineLeft","getLineStartLeft","getHyperLinkFieldInCurrentSelection","updateTextPositionIn","setHyperlinkContentToToolTip","updateCurrentPage","prevScaleFactor","verticalHeight","horizontalWidth","horWidth","prevPageTop","prevY","getCurrentHeaderFooter","createHeaderFooterWidget","viewerWidth","viewerHeight","displayPixelRatio","updateScrollBarPosition","updateVisiblePages","pageH","left_1","addVisiblePage","setImageResizerPositions","renderPage","renderVisiblePages","jsonObject","parseCharacterFormat","parseParagraphFormat","parseAbstractList","parseList","parseStyles","parseSections","parseStyle","wStyle","basedStyle","getStyle","styleString","linkStyle","charaStyle","nextStyleString","abstract","parseListLevel","listCollection","parseLevelOverride","parseSectionFormat","parseTextBody","oddHeader","oddFooter","parseBody","styleObj","inlines","parseParagraph","parseTable","parseTableFormat","tableRow","parseRowFormat","parseRowGridValues","parseCellFormat","writeInlineFormat","lineWidgetCount","bookmarkStart","sourceFormat","parseBorders","parseShading","isSamePaddingAsTable","parseCellMargin","sourceBorders","destBorder","parseBorder","sourceBorder","sourceShading","destShading","texture","inlineFormat","parseListFormat","parseTabStop","wTabs","tabStop","SelectionCharacterFormat","boldIn","italicIn","underlineIn","strikeThroughIn","baselineAlignmentIn","highlightColorIn","fontSizeIn","fontColorIn","notifyPropertyChanged","fontFamilyIn","isCleared","isRetrieveFormatting","propertyValue","onApplyCharacterFormat","combineFormat","selectionCharacterFormat","SelectionParagraphFormat","leftIndentIn","rightIndentIn","beforeSpacingIn","afterSpacingIn","textAlignmentIn","firstLineIndentIn","lineSpacingIn","lineSpacingTypeIn","listLevelNumberIn","levelPattern","onApplyListInternal","onApplyParagraphFormat","copyToFormat","getList","currentAbstractList","cloneListLevel","cloneLevelOverride","setList","onApplyList","history_1","setOffsetValue","updateListChangesInHistory","updateListParagraphs","applyListChanges","layoutWholeDocument","updateSelectionTextPosition","currentBaseHistoryInfo","modifiedProperties","updateSelection","updateHistory","SelectionSectionFormat","differentFirstPageIn","differentOddAndEvenPagesIn","pageHeightIn","pageWidthIn","leftMarginIn","bottomMarginIn","topMarginIn","rightMarginIn","headerDistanceIn","footerDistanceIn","getPropertyvalue","onApplySectionFormat","SelectionTableFormat","backgroundIn","tableAlignmentIn","cellSpacingIn","preferredWidthIn","tableIn","preferredWidthTypeIn","onApplyTableFormat","SelectionCellFormat","verticalAlignmentIn","onApplyTableCellFormat","clearCellFormat","SelectionRowFormat","heightIn","heightTypeIn","isHeaderIn","allowRowBreakAcrossPagesIn","onApplyTableRowFormat","clearRowFormat","SelectionImageFormat","updateImageFormat","onImageFormat","copyImageFormat","clearImageFormat","HtmlExport","fieldCheck","writeHtml","serializeSection","serializeParagraph","serializeTable","blockStyle","tagAttributes","serializeParagraphStyle","createAttributesTag","serializeInlines","endTag","serializeImageContainer","serializeInlineStyle","serializeSpan","spanClass","decodeHtmlNames","imageStyle","serializeCell","cellHtml","serializeCellBordersStyle","createTableStartTag","serializeRow","createTableEndTag","createRowStartTag","isList","paragraphClass","serializeCharacterFormat","serializeParagraphFormat","serializeTableBorderStyle","convertBorderLineStyle","serializeBorderStyle","borderPosition","tagValue","localProperties","createTag","tableStyle","createRowEndTag","htmlText","TextPosition","isUpdateLocation","getStartOffset","getLineLength","getHierarchicalIndexInternal","setPositionForSelection","physicalLocation","isLastRenderedInline","getParagraphLength","setPositionFromLine","positionAtStart","updatePhysicalPosition","setPositionInternal","setPositionForCurrentIndex","getParagraphWidget","setPositionParagraph","moveNextLine","getPhysicalPositionInternal","isAtSamePosition","isInSameParagraph","isExistBefore","isExistAfter","startParagraph","endParagraph","offsetInLine","setPositionForLineWidget","nextLineWidget","getNextRenderedBlock","prevLine","curretOffSet","moveNextPosition","getNextStartInline","moveNextPositionInternal","fieldEndOffset","fieldEndIndex","isForwardSelection","moveToInline","nextOffset","getNextValidOffset","nextValidInline","getNextValidElement","getStartLineOffset","inlineObj","updateOffsetToNextParagraph","moveToPreviousParagraphInTable","previousParagraph","currentPara","getPreviousSelectionCell","getPreviousParagraphBlock","isHighlight","getNextSelectionBlock","getContainerCellOf","getNextParagraphBlock","updateOffsetToPrevPosition","inlineInfo","getPreviousValidOffset","getPreviousSelectionBlock","previousInline","getPreviousValidElement","moveToNextParagraphStartInternal","movePreviousPosition","movePreviousPositionInternal","hasValidInline","moveBackward","nextInline","getNextRenderedElementBox","fieldBeginOffset","fieldBeginIndex","selectionStartIndex","selectionStartInlineObj","selectionStartInline","inlineObj_1","moveToWordStartInternal","getPreviousWordOffset","calculateOffset","getNextWordOffset","isInField","endSelection","excludeSpace","getNextWordOffsetSpan","getNextWordOffsetImage","getNextWordOffsetFieldBegin","getNextWordOffsetFieldSeperator","getNextWordOffsetFieldEnd","wordEndIndex","getPreviousWordOffsetSpan","getPreviousWordOffsetImage","getPreviousWordOffsetFieldBegin","getPreviousWordOffsetFieldSeparator","getPreviousWordOffsetFieldEnd","getPreviousWordOffsetBookMark","wordStartIndex","setPreviousWordOffset","validateForwardFieldSelection","selectionEndIndex","isPositionMoved","validateBackwardFieldSelection","paragraphStartInternal","moveToPreviousParagraph","moveToNextParagraphInTableCheck","paragraphValue","moveToParagraphStartInternal","moveToParagraphEndInternal","moveToNextParagraph","splittedParagraph","moveToNextParagraphInTable","moveToLineStartInternal","getFirstCellInRegion","lastParagraph","getLastParagraph","prevBlock","getLastBlockInLastCell","getLineWidgetParagraph","upDownSelectionLength","getLastCellInRegion","updateTextPositionWidget","moveToLineEndInternal","getFirstParagraph","getFirstBlockInFirstCell","moveToPreviousLine","getFirstElementInternal","getIndexInInline","prevInline","moveToWordEndInternal","incrementValue","getNextSelectionCell","moveUpInTable","lineStart","isMoveToLineEnd","moveDownInTable","firstItemWidth","getLeftInternal","isPositionUpdated","isBackwardSelection","containerCell","getSelectedCell","isInContainerCell","containsCell","isContainerCellSelected","isAtParagraphStart","getContainerCell","isForward","SelectionWidgetInfo","widthIn","fieldBeginAdv","linkInternal","localRef","opensNewWindow","parseFieldValues","typeInternal","isLocalRef","parseFieldValue","setLinkType","endChar","navigationLink","imageContainer","documentEditor","isSkipLayouting","contextTypeInternal","skipFormatRetrieval","isMoveDownOrMoveUp","characterFormatIn","paragraphFormatIn","rowFormatIn","cellFormatIn","tableFormatIn","imageFormatInternal","htmlWriterIn","startInternal","endInternal","selectionStartPage","selectionEndPage","goToHeader","enableHeadersFootersRegion","goToFooter","closeHeaderFooter","disableHeaderFooter","goToPage","updateTextPositionForBlockContainer","selectTable","selectTableInternal","selectRow","selectTableRow","selectColumn","selectColumnInternal","selectCell","selectTableCell","selectionSettings","pageCoordinates","toggleBold","toggleItalic","toggleUnderline","toggleStrikethrough","toggleHighlightColor","toggleSubscript","toggleSuperscript","toggleTextAlignment","increaseIndent","decreaseIndent","fireRequestNavigate","linkType","localReference","navigateBookmark","hyperLinkField","linkText","getLinkText","copyToClipboard","highlightSelection","isSelectionChanged","hideImageResizer","highlightSelectedContent","createHighlightBorder","selectionWidget","clipSelection","createHighlightBorderInsideTable","isVisiblePage","canvasContext","removeSelectionHighlight","pageRect","selectCurrentWordRange","fireSelectionChanged","wordStart","extendToParagraphStart","extendToParagraphEnd","updateForwardSelection","updateBackwardSelection","extendToPreviousLine","extendToLineEnd","extendToLineStart","firstrow","firstcell","selectionLength","isMovePrevious","cellStart","getCellLeft","cellEnd","cellLeft","firstBlock","getFirstParagraphBlock","lastrow","lastcell","moveToLineStart","moveToLineEnd","setPositionForBlock","lastPage","handleControlEndKey","documentEnd","selectContent","handleControlHomeKey","handleControlLeftKey","extendToWordStart","handleControlRightKey","extendToWordEnd","handleControlDownKey","handleControlUpKey","handleShiftLeftKey","extendBackward","handleShiftUpKey","handleShiftRightKey","extendForward","handleShiftDownKey","extendToNextLine","handleControlShiftLeftKey","handleControlShiftUpKey","handleControlShiftRightKey","handleControlShiftDownKey","handleLeftKey","handleUpKey","handleRightKey","handleEndKey","handleHomeKey","handleDownKey","handleShiftEndKey","handleShiftHomeKey","handleControlShiftEndKey","handleControlShiftHomeKey","handleTabKey","isNavigateInCell","isShiftTab","selectPreviousCell","selectNextCell","updateListLevel","selectTableCellInternal","clearMultiSelection","firstParagraph","selectParagraph","firstLineWidget","firstPara","lastPara","getLastParagraphBlock","selectPosition","startTextPos","endTextPos","columnCells","startCellColumnCells","endCellColumnCells","startPos","endPos","getContainerWidget","extendToWordStartEnd","getTextPosition","includeObject","getTextInternal","startInlineObj","elementInfo","getRenderedInline","endInlineObj","endInline","getTextInline","nextParagraphWidget","endParagraphWidget","startLineIndex","getFieldCodeInternal","getTocFieldInternal","getNextParagraph","getPreviousParagraph","getFirstParagraphInCell","getLastParagraphInLastCell","getLastParagraphInFirstRow","getPreviousTextInline","getNextTextInline","cell1","cell2","isExistBeforeInline","currentInline","isExistAfterInline","getPreviousRenderedBlock","getNextParagraphCell","getFirstBlockInNextHeaderFooter","getLastBlockInPreviousHeaderFooter","getPreviousParagraphCell","endLine","getLineInfo","childLength","getElementInfo","getPreviousParagraphSelection","getFirstParagraphInLastRow","getPreviousSelectionRow","getNextParagraphSelection","getNextSelection","getNextSelectionRow","getCellInTable","getPreviousSelection","selLength","isMovePrev","validOffset","maxBaselineOffset","getPhysicalPositionInline","startInline","fieldValue","elementBoxObj","getElementBoxInternal","positionImageResizer","showImageResizer","highlightCell","startElement","endElement","endLineWidget","startLineObj","getStartLineWidget","endLineObj","getEndLineWidget","highlightParagraph","highlightNextBlock","highlightTable","getLineWidgetInternalInline","linewidget","highlightCells","endCellLeft","endCellRight","tableWidgetCollection","startTableIndex","endTableIndex","highlightRow","endRowIndex","highlightInternal","getNextParagraphRow","getPreviousParagraphRow","containsRow","highlightCellWidget","sourceCell","getSelectedCells","highlightContainer","previousValidInline","validateTextPosition","getElementBox","getFieldCharacterPosition","getNextLineWidget","getPreviousTextElement","getNextTextElement","measureObj","firstInline","getEndPosition","getRenderedField","elementObj","getCaretHeight","isEmptySelection","getFieldCharacterHeight","heightElement","maxLineHeight","paragarph","textSizeInfo","charHeight","isNonEmptySelection","clearChildSelectionHighlight","clearSelectionHighlightLineWidget","getLineWidgetParaWidget","getLineWidgetTableWidget","getLineWidgetRowWidget","leftCellSpacing","rightCellSpacing","topCellSpacing","bottomCellSpacing","getLineWidgetCellWidget","getFirstBlock","caretPosition","isImageSelectedObj","selectInternal","includeParagraphMark","elementValues","getFirstElement","textMetrics","isLineEnd","updatePositionObj","selectFirstBlock","skipSelectionChange","retrieveCurrentFormatProperties","retrieveImageFormat","retrieveCharacterFormat","retrieveParagraphFormat","retrieveSectionFormat","retrieveTableFormat","imageFormat","setCurrentContextType","contextIsinImage","contextIsinTable","isInHeader","tableAdv","retrieveCellFormat","retrieveRowFormat","getCellFormat","getRowFormat","tempTableRow","startTable","endTable","startParaSection","endParaSection","startPageIndex","endPageIndex","getParagraphFormatForSelection","getParagraphFormatInternalInParagraph","getParagraphFormatInternalInCell","getParagraphFormatInternalInBlock","getParagraphFormatInternalInTable","getParagraphFormatInCell","getParagraphFormatInBlock","getParagraphFormatInParagraph","getParagraphFormatInTable","cellAdv","getParagraphFormatInRow","getParaFormatForCell","startCellIn","endCellIn","para","elemInfo","getCharacterFormatForSelection","getCharacterFormatInTableCell","getCharacterFormat","getCharacterFormatForTableRow","tableRowAdv","getCharacterFormatForSelectionCell","getCharacterFormatForBlock","getCharacterFormatInternalInTable","startIn","endIn","setCharacterFormat","isFieldStartSelected","fieldInline","getCharacterFormatInternal","inlineAndIndex","getNextValidCharacterFormatOfField","getNextValidCharacterFormat","getCharacterFormatInTable","top_4","copySelectionParagraphFormat","getHyperlinkDisplayText","isNestedField","displayText","toolTipElement","toolTipText","top_5","showToolTip","toolTipField","toolTipObject","cursorPosition","lineStartLeft","checkedFields","getHyperLinkFields","getHyperLinkFieldInternal","paragraphIsInFieldResult","inlineIsInFieldResult","getBlock","bodyIndex","getBlockInternal","fieldParagraph","selectionIndex","highlightListText","updateImageSize","getSelectedCellsInTable","startColumnIndex","endColumnIndex","startRowindex","copySelectedContent","isCut","htmlWriter","handleCut","removeAllRanges","createRange","selectNodeContents","addRange","copySuccess","execCommand","caretLeft","caretStartLeft","caretEndLeft","getSelectionPage","setStart","skipUpdate","paragraphInfo","caretHeightInfo","searchResults","pagePoint","isCursorInHeaderRegion","moveToStart","bookmrkElmnt","bookmrkEnd","endoffset","selectBookmark","getTocField","tocPara","isTocStyle","TextSearch","isFooter","find","findOption","findNext","hierarchicalPosition","stringToRegex","textSearchResults","clearResults","findDocument","currentSearchResult","textToFind","isPatternEmpty","wordEmpty","patternRegExp","findAll","isFirstMatch","hierachicalPosition","findInline","findInlineText","inlineEle","stringBuilder","spans","matchObject","addResult","spanKeys","spanLength","SearchWidgetInfo","leftInternal","widthInternal","TextSearchResult","TextSearchResults","innerList","textSearchResult","SearchResults","navigate","textToReplace","replaceInternal","replaceAll","replaceAllInternal","clearSearchHighlight","isHandledOddPageHeader","isHandledEvenPageHeader","isHandledOddPageFooter","isHandledEvenPageFooter","textSearch","searchResultsInternal","findOptions","replaceText","insertText","endTextPosition","initComplexHistory","currentHistoryInfo","updateComplexHistory","updateComplexWithoutHistory","highlightResult","highlightSearchResult","highlightSearchResultParaWidget","findHighLight","addSearchHighlightBorder","highlighters","searchHighlight","addSearchResultItems","addFindResultView","addFindResultViewForSearch","suffixtext","boxObj","boxIndex","shiftIndex","headerFooterString","layoutViewer","wholeWord","searchText","resultsText","messageDivText","replaceButtonText","replaceAllButtonText","focusedIndex","isOptionsPane","replacePaneText","findPaneText","matchDivReplaceText","tabInstance","selectedTabItem","previousTab","nextTab","onFindPane","onReplacePane","searchOptionChange","clearSearchResultItems","searchInput","navigateSearchResult","messageDiv","localeValue","resultContainer","resultsListBlock","clearFocusElement","wholeWordsChange","matchInput","wholeInput","matchChange","onWireEvents","searchIcon","searchIconClickInternal","navigateToNextResult","navigateNextResultButtonClick","navigateToPreviousResult","navigatePreviousResultButtonClick","onKeyDown","onEnableDisableReplaceButton","resultListBlockClick","closeButton","replaceButton","onReplaceButtonClick","replaceAllButton","onReplaceAllButtonClick","replaceDiv","occurrenceDiv","replaceTabContentDiv","findDiv","findTabButtonHeader","replaceTabButtonHeader","getMessageDivHeight","replaceWith","onKeyDownOnOptionPane","focusIndex","findText","selectionText","matchDiv","patterns","resultsContainerHeight","currentelement","listElementsDiv","listElements","currentlist","list_1","closeSpan","findTab","tabHeader","findTabButton","replaceTabButton","tabContent","findTabContent","findTabContentDiv","searchTextBoxContainer","replaceTabContent","createReplacePane","replaceHeader","replaceButtonDiv","emptyDiv6","currentIndexValue","optionPaneContainer","selectedText","resultListBox","TableResizer","resizeNode","initResizingHistory","getRowReSizerPosition","getCellReSizerPosition","getTableWidget","startingPointX","resizerBoundaryWidth","getCellReSizerPositionInternal","childTableWidget","getTableWidgetFromWidget","childCellWidget","getActualWidth","resizeTableCellColumn","resizeTableRow","reLayout","selectionFlag","setPreferredWidth","newIndent","resizeColumnWithSelection","rightColumn","prevDragValue","dragOffset","updateCellPreferredWidths","updateGridValue","resizeColumnAtLastColumnIndex","resizeCellAtMiddle","selectedCells","resizeColumnAtStart","leftColumnCollection","getColumnCells","increaseOrDecreaseWidth","updateRowsGridAfterWidth","rightColumnCollection","isColumnResizing","isColumnSelected","changeWidthOfCells","selectedRow","newGridBefore","updateGridBefore","leastGridBefore","getLeastGridBefore","updateWidthForCells","hasTableWidth","leftColumn","isContinue","getOffsetValue","isLeftSideCollection","ignoreRow","isIncrease","minimumWidth","isSelection","currentRowWidth","getRowWidth","toUpdateGridAfter","leftColumnCells","rightColumnCells","columnCell","applyProperties","tableHistoryInfo","isAutoFit","updateGridBeforeWidth","updateGridAfterWidth","editHyperlinkInternal","isHandledComplex","refListNumber","incrementListNumber","removedBookmarkElements","pageRefFields","isBordersAndShadingDialog","nbsp","lineFeed","textBoxText","handleBackKey","insertField","fieldCodeSpan","fieldResultSpan","pasteContentsInternal","clearDirectFormatting","clearFormatting","getCompleteStyles","getPrefixAndSuffix","boxInfo","spaceIndex","prefixAdded","endInlineInfo","suffixAdded","toggleBaselineAlignment","acceptTab","handleEnterKey","handleDelete","handleShiftEnter","insertPageBreak","onBackSpace","onDelete","onEnter","animationTimer","copyInsertFormat","insertFormat","sFormat","insertPosition","isRemoved","getParagraphInfo","editPosition","removeSelectedContents","updateInsertPosition","insertTextInline","tempSpan","splittedSpan","updateEndPosition","isSelectionOnHyperlink","checkAndConvertList","checkAndConvertToHyperlink","insertSectionBreak","insertSection","newSectionFormat","newParagraph","splitTable","updateNextBlocksIndex","splitParagraphInternal","splitBodyWidget","startBlock","newBodyWidget","updateSectionIndex","insertRemoveHeaderFooter","updateBlockIndex","startBodyWidget","increaseIndex","currentSectionIndex","isTab","convertList","isLeadingZero","tabValue","previousText","checkNumberFormat","checkLeadingZero","deleteSelectedContents","leadingZeroText","autoConvertList","newAbstractList","isBullet","isZero","getPageFromBlockWidget","insertImageText","insertFieldBeginText","insertFieldSeparatorText","insertFieldEndText","insertBookMarkText","spanObj","spanIndex","previousInlineObj","nextInlineObj","isEnter","tabCharIndex","lowerCaseText","containsURL","atIndex","dotIndex","autoFormatHyperlink","blockInfo","createHyperlinkElement","appylingHyperlinkFormat","updateCharacterFormatWithUpdate","initInsertInline","insertHyperlinkfield","isBookmark","unLinkFieldCharacter","fieldIndex","insertHyperlink","insertHyperlinkInternal","fieldStartPosition","insertHyperlinkByFormat","insertElement","insertInlineInSelection","insertElementInCurrentLine","isReLayout","checkIsNotRedoing","checkEndPosition","updateHistoryPosition","fieldResult","fieldObj","newFieldBegin","insertInlineInternal","removedNodes","insertClonedFieldResult","getClonedFieldResultWithSel","getClonedFieldResult","insertParagraph","insertBlock","curParagraph","fieldSeparatorPosition","pasteWindow","pasteLocal","pasteContents","getBlocks","pasteContent","insertParaFormat","removeSelectedContentInternal","pasteCopiedData","insertTableRows","insertBlockInternal","insertTableInternal","moveRows","removeBlock","insertBlockTable","moveInlines","checkInsertPosition","deleteSelectedContent","curInline","insertElementInternal","prevElement","newElement","relayout","startPara","insertNewParagraphWidget","insertImage","insertPicture","createTable","startLine","above","rowPlacement","getOwnerCell","cloneTableToHistoryInfo","getRowCountToInsert","isAffectedByRowSpannedCell","cellCountInfo","updateRowspan","newRow","createRowAndColumn","updateCellFormatForInsertedRow","cellFormats","isCellIncluded","isRowSpanned","clonedRowIndex","columnPlacement","newCell","getColumnCountToInsert","createColumn","isCellInserted","rowCell","getOwnerRow","endRow","getOwnerTable","mergeSelectedCellsInTable","startOwnerCell","endOwnerCell","mergedCell","mergeSelectedCells","cellInfo","updateSelectedCellsInTable","rowStartIndex","mergeBorders","updateBlockIndexAfterMerge","mergedCellborders","cellBorders","startCellIndex","canMergeSelectedCellsInTable","startLeft","endLeft","selectionLeft","selectionRight","isRowLeftWithinSel","isRowRightWithinSel","rowLeft","rowRight","checkCellWithInSelection","isPrevCellWithinSel","checkPrevOrNextCellIsWithinSel","isNextCellWithinSel","isNoRowSpan","isCellWithInSel","checkCurrentCell","checkCellWidth","isPrev","prevOrNextCell","isPrevCellWithInSel","cellOwner","spannedCellOwner","checkRowSpannedCells","insertIndex_1","isMoved","moveContent","removeEmptyLine","updateHeaderFooterWidget","isHandledComplexHistory","updateHeaderFooterWidgetToPage","shiftPageContent","isEvenPage","updateHeaderFooterWidgetToPageInternal","hfWidget","headerOrFooter","removeFieldInBlock","removeFieldTable","checkAndShiftFromBottom","isAtParagraphEnd","applyCharFormatValue","applyCharacterFormatForListText","updateSelectionCharacterFormatting","applyListCharacterFormatByValue","updateListCharacterFormat","updateListTextSelRange","startPositionInternal","endPositionInternal","initHistoryPosition","startSelectionReLayouting","currentList","clearList","applyBullet","bullet","applyBulletOrNumbering","applyNumbering","baseAlignment","updateProperty","initializeHistory","updateParagraphFormatInternal","currentUnderline","script","completeStylesString","existingStyles","styleNames_1","createStyleIn","getUniqueStyleName","uniqueName","getUniqueName","matchArray","updateCharacterFormat","applyCharFormatSelectedContent","applyCharFormat","applyCharFormatCell","applyCharFormatForSelectedPara","splittedLastParagraph","splittedWidets","getNextParagraphForCharacterFormatting","widgetCollection","applyCharFormatForTable","inlineLength","applyCharFormatInline","getCurrentSelectionValue","updateFontSize","fontsizeCollection","formatInline","getCharacterFormatValueOfCell","applyCharFormatForSelectedCell","applyCharFormatRow","applyCharFormatForTableCell","applyCharFormatForSelTable","startCellLeft","startCellRight","applyCharFormatValueInternal","copyInlineCharacterFormat","destFormat","addModifiedProperties","modifiedFormat","getIndentIncrementValue","applyParaFormatProperty","layoutItemBlock","updateSelectionParagraphFormatting","increaseLevel","incrementFactor","currentParagraphIndent","getIndentIncrementValueInternal","fPosition","updateParagraphFormat","applyParaFormatSelectedContent","applyCharacterStyle","applyParaFormat","applyParaFormatInCell","addModifiedPropertiesForParagraphFormat","copyParagraphFormat","copyFromListLevelParagraphFormat","onListFormatChange","updateListParagraphFormat","listlevel","oldFormat","newFormat","applyContinueNumberingInternal","numberingInfo","getContinueNumberingInfo","getParagraphFormat","listPattern","changeListId","revertContinueNumbering","levelNum","listType","baseHistoryInfo","addModifiedPropertiesForContinueNumbering","checkNumberArabic","restartListAt","createListLevels","restartListAtInternal","changeRestartNumbering","addModifiedPropertiesForRestartNumbering","levelPatterns","indexOfLevelPattern","getNextParagraphForFormatting","cellContainer","getParaFormatValueInCell","applyParaFormatCellInternal","applyParagraphFormatRow","applyParaFormatTableCell","wCell","applyParagraphFormatTableInternal","wRow","applyParaFormatTable","updateSectionFormat","startSectionIndex","endSectionIndex","applyPropertyValueForSection","getTableFormatAction","applyTablePropertyValue","updateSelectionTableFormat","getRowAction","applyRowPropertyValue","getTableCellAction","applyCellPropertyValue","addModifiedPropertiesForSection","startInfo","endInfo","combineSection","nextSection","combineSectionChild","updateTableFormat","updateCellFormat","updateRowFormat","tableStartPosition","newStartPosition","updateFormatForCell","rowStartPosition","rowEndPosition","applyRowFormat","reLayoutSelectionOfTable","reLayoutSelection","isEnded","reLayoutSelectionOfBlock","removeSelectedContent","editAction","deletePara","deleteTableCell","getParagraphForSelection","deleteCells","removeRow","updateTable","paragraphStart","endParagraphStartOffset","isCombineNextParagraph","lastLinelength","isEndInAdjacentTable","isStartParagraph","removeInlines","deleteSection","deleteBlock","insertParagraphPaste","addRemovedNodes","checkAndInsertBlock","combineSectionInternal","currentSection","lastBlockIndex","paragraphAdv","deleteTableBlock","deletePreviousBlock","updateEditPosition","deleteCellsInTable","deleteCell","deleteContainer","isDeleteCells","cell_1","setActionInternal","copyChildToClipboard","checkClearCells","deleteContent","splitEndRow","enableHistoryMode","clonedTable","deleteParagraphMark","removeContent","copyListLevel","listParagraphs","updateListParagraphsInBlock","startListLevel","tempList","abstractListAdv","listName","bulletCharacters","isInsertPageBreak","initialStart","breakParagraph","pageBreak","updateIndex","singleBackspace","skipBackSpace","insertRemoveBookMarkElements","bookMark","bookMarkStart","bookMarkEnd","isBackSpace","deleteSelectedContentInternal","getParagraph","historyInfo","startBlockInfo","endBlockInfo","currentLineWidget","setPositionForHistory","removeAtOffset","singleDelete","nextRenderedInline","bookMarkBegin","paraEndOffset","singleDeleteInternal","updateEditPositionOnMerge","imageElementBox","insertPictureInternal","fitImageToPage","onPortrait","onLandscape","changeMarginValue","onPaperSize","currentBlock","updateListItems","updateListItemsForPara","updateListItemsForTable","updateListItemsForRow","updateListItemsForCell","updateRenderedListItemsForPara","updateRenderedListItemsForTable","updateRenderedListItemsForRow","updateRenderedListItemsForCell","getParagraphInfoInternal","lineOffset","insertPageNumber","createFields","insertPageCount","fieldtext","insertBookmark","bookmarkEnd","insertElements","updateComplexHistoryInternal","deleteBookmark","bookmarkName","setBookmarkInfo","deleteBookmarkInternal","getSelectionInfo","startElementInfo","endElementInfo","endElements","startElements","insertElementsInternal","hfString","getBodyWidget","getBlockByIndex","blockObj","getParagraphInternal","getHeaderFooterWidget","getBodyWidgetInternal","isInsertPosition","applyBorders","getBorder","clearAllBorderValues","selectedCell","getTopBorderCellsOnSelection","getLeftBorderCellsOnSelection","getRightBorderCellsOnSelection","getBottomBorderCellsOnSelection","getAdjacentCellToApplyBottomBorder","clearBorder","getAdjacentCellToApplyRightBorder","applyAllBorders","applyInsideBorders","updateGridForTableDialog","borderType","isLastSelectedRow","isLastRightCell","nextRowIndex","getAdjacentBottomBorderOnEmptyCells","rightBorderCells","getSelectedCellsNextWidgets","topBorderCells","leftBorderCells","bottomBorderCells","nextCellColIndex","isSingleCell","startPosIn","endPosIn","applyBordersInternal","applyBorder","applyShading","onTableFormat","applyTableFormat","addModifiedTableProperties","handleTableFormat","applyFormat","shiftNextItem","onRowFormat","rowStartPos","rowEndPos","addModifiedRowProperties","handleRowFormat","onCellFormat","updateCellMargins","cellStartPosition","cellEndPosition","applyCellmarginsValue","getSelectedCellInColumn","rowEndIndex","addModifiedCellProperties","handleCellFormat","isTocField","tocField","insertTableOfContents","validateTocSettings","getTocSettings","tocSettings","includePageNumber","startLevel","endLevel","swtiches","swtch","includeHyperlink","includeOutlineLevels","decodeTSwitch","tSwitch","levelSettings","tableOfContentsSettings","constructTocFieldCode","buildToc","tocLastPara","tocLastLine","appendEndField","appendEmptyPara","updatePageRef","emptyPara","emptyLine","tocFieldCode","constructTSwitch","isFirstPara","tocDomBody","createHeadingLevels","createOutlineLevels","isHeadingStyle","isOutlineLevelStyle","insertTocBookmark","createTOCWidgets","levelStyle","headingStyle","createTocFieldElement","tocLine","headingStyleName","tocStyleName","insertTocHyperlink","pageField","insertTocPageNumber","bookMarkname","isRightAlign","pageRef","generateBookmarkName","onCellContentAlignment","ModifiedLevel","ownerListLevelIn","modifiedListLevelIn","ownerListLevel","modifiedListLevel","ModifiedParagraphFormat","ownerFormat","ownerFormatIn","modifiedFormatIn","RowHistoryFormat","rowHeightType","revertChanges","currentRowHeightType","TableHistoryInfo","TableFormatHistoryInfo","copyProperties","RowFormatHistoryInfo","CellFormatHistoryInfo","tableHierarchicalIndex","CellHistoryFormat","BaseHistoryInfo","ownerIn","modifiedPropertiesIn","modifiedNodeLength","removedNodesIn","actionIn","selectionStartIn","selectionEndIn","insertPositionIn","endPositionIn","revertBookmark","bookmarkInfo","recordChanges","revert","selectionStartTextPosition","selectionEndTextPosition","revertModifiedProperties","deletedNodes","insertTextPosition","isRemoveContent","isRedoAction","revertModifiedNodes","isDelete","revertResizing","revertTableDialogProperties","revertProperties","redoAction","lastNode","insertRemovedNodes","prevTableHistoryInfo","tableHistoryInfoCurrent","currentPropertyIndex","applyTableOptionsHelper","previousFormat","currentFormat","skipRemove","nextFormat","addModifiedPropertiesForList","previousLevel","modifiedLevel","updateListChanges","addModifiedCellOptions","copyCellOptions","addModifiedTableOptions","copyTableOptions","getCharacterPropertyValue","previousTableFormat","resizeContainerDiv","topLeftRect","topMiddleRect","topRightRect","bottomLeftRect","bottomMiddleRect","bottomRightRect","leftMiddleRect","rightMiddleRect","topLeftRectParent","topMiddleRectParent","topRightRectParent","bottomLeftRectParent","bottomMiddleRectParent","bottomRightRectParent","leftMiddleRectParent","rightMiddleRectParent","resizeMarkSizeIn","selectedImageWidget","imageResizerPoints","ImageResizingPoints","imageResizerDiv","currentImageElementBoxIn","imageResizerDivElement","resizeDiv","initResizeMarks","currentImageElementBox","currentPageDiv","currentPageDivWidth","currentPageDivHeight","imageResizerDivWidth","imageResizerDivHeight","resizeMarkSize","setImageResizerPosition","selectedImageInfo","SelectedImageInfo","initResizeContainerDiv","setImageResizingPoints","applyPropertiesForTouch","applyPropertiesForMouse","resizeRectElement","boxShadow","handleImageResizing","topRightResizing","topLeftResizing","topMiddleResizing","bottomRightResizing","bottomLeftResizing","leftMiddleResizing","initHistoryForImageResizer","getOuterResizingPoint","getInnerResizingPoint","touchEvent","imageResizingPoints","bottomMiddle","topMiddle","rightMiddle","leftMiddle","touchPoints","imageResizingPointsOnTouch","HistoryInfo","isChildHistoryInfo","modifiedActions","addModifiedAction","undoStackIn","redoStackIn","historyInfoStack","modifiedParaFormats","undoLimitIn","redoLimitIn","rowHistoryFormat","cellHistoryFormat","redoLimit","undoLimit","clearRedoStack","hasAction","modifiedLevelsInternal","modifiedCollection","revertListChanges","clearHistory","clearUndoStack","documentPath","stylePath","numberingPath","settingsPath","headerPath","footerPath","imagePath","appPath","corePath","contentTypesPath","generalRelationPath","wordRelationPath","headerRelationPath","footerRelationPath","xmlContentType","fontContentType","documentContentType","settingsContentType","footerContentType","headerContentType","numberingContentType","stylesContentType","webSettingsContentType","appContentType","coreContentType","customContentType","customXmlContentType","relationContentType","tableStyleContentType","settingsRelType","footerRelType","headerRelType","documentRelType","numberingRelType","stylesRelType","fontRelType","tableStyleRelType","coreRelType","appRelType","customRelType","imageRelType","hyperlinkRelType","controlRelType","packageRelType","customXmlRelType","customUIRelType","attachedTemplateRelType","wNamespace","wpNamespace","pictureNamespace","aNamespace","a14Namespace","rNamespace","rpNamespace","vNamespace","oNamespace","xmlNamespace","w10Namespace","cpNamespace","dcNamespace","docPropsNamespace","veNamespace","mNamespace","wneNamespace","customPropsNamespace","vtNamespace","chartNamespace","slNamespace","dtNamespace","wmlNamespace","w14Namespace","wpCanvasNamespace","wpDrawingNamespace","wpGroupNamespace","wpInkNamespace","wpShapeNamespace","w15Namespace","diagramNamespace","eNamespace","pNamespace","certNamespace","cRelationshipsTag","cRelationshipTag","cIdTag","cTypeTag","cTargetTag","cUserShapesTag","cExternalData","twipsInOnePoint","twentiethOfPoint","borderMultiplier","percentageFactor","emusPerPoint","cConditionalTableStyleTag","cTableFormatTag","cTowFormatTag","cCellFormatTag","cParagraphFormatTag","cCharacterFormatTag","packageType","relsPartPath","documentRelsPartPath","webSettingsPath","wordMLDocumentPath","wordMLStylePath","wordMLNumberingPath","wordMLSettingsPath","wordMLHeaderPath","wordMLFooterPath","wordMLCommentsPath","wordMLImagePath","wordMLFootnotesPath","wordMLEndnotesPath","wordMLAppPath","wordMLCorePath","wordMLCustomPath","wordMLFontTablePath","wordMLChartsPath","wordMLDefaultEmbeddingPath","wordMLEmbeddingPath","wordMLDrawingPath","wordMLThemePath","wordMLFontsPath","wordMLDiagramPath","wordMLControlPath","wordMLVbaProject","wordMLVbaData","wordMLVbaProjectPath","wordMLVbaDataPath","wordMLWebSettingsPath","wordMLCustomItemProp1Path","wordMLFootnoteRelPath","wordMLEndnoteRelPath","wordMLSettingsRelPath","wordMLNumberingRelPath","wordMLFontTableRelPath","wordMLCustomXmlPropsRelType","wordMLControlRelType","wordMLDiagramContentType","lastSection","mRelationShipID","mDocPrID","mDifferentFirstPage","mBookmarks","mDocumentImages","mExternalLinkImages","mHeaderFooterImages","mHeaderFooterColl","mArchive","clearDocument","setDocument","compressionLevel","mVerticalMerge","mGridSpans","serializeDocument","serializeStyles","serializeNumberings","serializeSettings","serializeCoreProperties","serializeAppProperties","serializeFontTable","contenttype","serializeSettingsRelation","serializeHeaderFooters","serializeDocumentRelations","serializeGeneralRelations","serializeContentTypes","mSections","mLists","mAbstractLists","defCharacterFormat","defParagraphFormat","defaultTabWidthValue","mStyles","blockOwner","writeCommonAttributeStrings","serializeDocumentBody","archiveItem","writeCustom","writeDup","serializeBodyItems","serializeSectionProperties","serializeHFReference","serializeSectionType","serializePageSetup","serializeColumns","pageSetup","serializePageSize","serializePageMargins","roundToTwoDecimal","sectionBreakCode","hfId","hf","getNextRelationShipID","addHeaderFooter","hfType","hfColl","blockCollection","isLastSection","serializeBodyItem","serializeParagraphItems","paraItems","serializeFieldCharacter","serializePicture","serializeBookMark","serializeTextRange","bookmarkId","getBookmarkId","serializeDrawing","serializeInlinePicture","serializeDrawingGraphics","sourceString","startString","picture","updateShapeId","documentImages","externalImages","tOwner","updateHFImageRels","addImageRelation","imageCollection","relationId","headerId","hfKeys","headerImages","headerFooterImages","serializeTableFormat","serializeTableGrid","serializeTableRows","serializeGridColumns","serializeRowFormat","serializeCells","pointWidth","serializeCellFormat","serializeCellWidth","serializeCellMerge","serializeGridSpan","serializeBorders","serializeShading","serializeTableCellDirection","serializeCellVerticalAlign","cf","collKey","isserialized","createMerge","serializeColumnSpan","checkMergeCell","gridValue","serializeTableWidth","serializeTableAlignment","serializeCellSpacing","serializeTableIndentation","serializeTableBorders","serializeTblLayout","getTextureStyle","multipler","serializeBorder","sz","getBorderStyle","tableIndent","isField","serializeListFormat","serializeParagraphSpacing","serializeIndentation","serializeParagraphAlignment","serializeTabs","serializeTab","getTabJustification","txtAlignment","serializeDefaultStyles","serializeDocumentStyles","zipArchiveItem","serializeBoolProperty","getHighlightColor","getUnderlineStyle","underlineStyle","serializeAbstractListStyles","serializeListInstances","listStyles","generateHex","ilvl","serializeListLevel","levelIndex","getLevelPattern","serializeLevelFollow","serializeLevelText","patternType","lvlIndex","fc","tabWidth","serializeHeaderFooter","headerFooterPath","headerFooterRelsPath","serializeHeader","serializeFooter","writeHFCommonAttributes","serializeHFRelations","serializeImagesRelations","serializeRelationShip","serializeHeaderFooterRelations","base64ImageString","formatClippedString","imageBlob","enc4","serializeExternalLinkImages","serializeHFRelation","relType","relationshipID","relationshipType","targetPath","resetRelationShipID","serializeDefaultContentType","serializeOverrideContentType","serializeHFContentTypes","serializeHeaderFootersContentType","partName","curSectionIndex","inField","updateLastParagraph","writeBody","writeNewLine","writeSectionEnd","writeHeadersFooters","bodyItemsCount","bodyItem","isLastPara","writeParagraph","writeTable","writeHeaderFooter","paragraphs","pCount","writeInlineStyles","writeParagraphFormat","endPara","createSection","createParagraph","writeBodyWidget","writeStyles","writeLists","writeHeaderFooters","writeBlock","writeNextBlock","writeLines","writeInlines","writeInline","started","writeListFormat","writeTabs","listIdValue","writeRow","createRow","writeCell","createCell","writeTableFormat","writeRowFormat","writeCellFormat","writeShading","wShading","writeBorder","wBorder","writeBorders","wBorders","wCellFormat","wRowFormat","wTableFormat","writeStyle","writeList","writeAbstractList","wAbstractList","writeListLevel","wList","wListLevel","dropDownBaseClasses","noData","fixedHead","DropDownBase","getPropObject","oldProperty","getValueByText","listData","checkValueCase","isTextByValue","typeOfData","dataSource_1","checkingAccent","checkIgnoreCase","getItemValue","checkNonIgnoreCase","itemValue","textItem","typedText","l10nUpdate","actionFailure","noRecordsTemplate","actionFailureTemplate","getTextByValue","enableRtlElements","jsonElement","resetList","renderItemsBySelect","setListData","getJSONfromOption","optionGroup","scrollTimer","isRequested","isDataFetched","emptyDataRequest","onActionComplete","onActionFailure","localDataArgs","postRender","focusItem","listEle","getSortedDataSource","listOption","fieldValues","setFloatingHeader","fixedHeaderElement","setFixedHeader","scrollStop","topIndex","itemTemplate","templateListItem","liWidth","firstLi","textField","getIndexByValue","setFields","updateDataSource","setUpdateInitial","isEmptyData","rippleFun","wrapperElement","selectedItemValue","updateActionCompleteData","tempLi","hidden","getDataByValue","dropDownListClasses","inputFocus","iconAnimation","device","filterBarClearIcon","filterInput","filterParent","mobileFilter","clearIconHide","popupFullScreen","disableIcon","hiddenElement","DropDownList","initializeData","isDocumentClick","isFilterFocus","beforePopupOpen","initRemoteRender","isNotSearchList","isTyped","preventAutoFill","isValidKey","typedString","isEscapeKey","isTabKey","actionCompleteData","isUpdated","prevSelectPoints","isSelectCustom","isDropDownClick","preventAltUp","isCustomFilter","isSecondClick","floatLabelChange","floatElement","onChangeEvent","resetFocusElement","resetSelection","allowFiltering","valueTempElement","setHTMLAttributes","getAriaAttributes","hidePopup","preventTabIndex","getNgDirective","getElementByText","getElementByValue","listItems_1","updateValues","setHiddenValue","onBlur","isFilterLayout","focusOutAction","onFocus","resetValueHandler","dropDownClick","bindCommonEvent","unBindCommonEvent","searchKeyEvent","spinnerElement","filterInputObj","preventAction","preventHomeEnd","isEditTextBox","isTabAction","isSelectFocusItem","pageUpSelection","getPageCount","pageDownSelection","focusDropDown","selectCurrentItem","onDocumentClick","activeStateChange","cloneElements","updateSelectedItem","preventSelect","detachChanges","focusedItem","activeItem","previousItemData","previousSelectedLI","valueTemplate","setValueTemplate","dataText","detachChangeEvent","defineProperties","preItems","onFilterUp","searchLists","onFilterDown","getSelectionPoints","removeFillSelection","isFiltering","preventDefaultAction","updateData","filteringAction","baseEventArgs","filterQuery","focusIndexItem","setSearchBox","filterBarPlaceholder","clearIconElement","searchKeyModule","onInput","addNewItem","highlightedItem","refreshPopup","searchBox","setHeaderTemplate","searchBoxHeight","getFocusElement","setSearchBoxPosition","backIconElement","clickOnBackIcon","scrollParentElements_1","listScroll","popupStyles","borderTop","borderBottom","destroyPopup","clearElement","popupOffset","lastItem","paddingBottom","scrollBottom","currentOffset","nextBottom","boxRange","isPopupButton","scrollableParentElements_1","onselect","stopImmediatePropagation","onchange","setOldText","setOldValue","ddlProps","onpopstate","pushState","ComboBox","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","fieldsSettings","itemCreated_1","showPopupButton","atcProps","HIDE_LIST","CHIP","CHIP_CLOSE","CHIP_SELECTED","ZERO_SIZE","CLOSEICON_CLASS","CLOSE_ICON_HIDE","MultiSelect","selectAllEventData","selectAllEventEle","scrollFocusStatus","keyDownStatus","enableRTL","allowCustomValue","hideSelectedItem","closePopupOnSelect","updateHTMLAttribute","updateReadonly","updateClearButton","overAllClear","componentWrapper","updateCssClass","onPopupShown","focusAtFirstListItem","isFirstClick","mainList","refreshListItems","addListFocus","focusAtLastListItem","updateListARIA","disableStatus","removelastSelection","chipCollectionWrapper","removeValue","removeChipSelection","updateDelimeter","delimiterChar","makeTextBoxEmpty","mainData","refreshSelection","targetInputElement","getForQuery","valuecheck","updateActionList","showSelectAll","mainListCollection","remoteCustomValue","checkForCustomValue","tempQuery","unwireListEvents","setInitialValue","selectAllAction","setDynValue","initialValueUpdate","initialUpdate","refreshPlaceHolder","updateValueState","hideGroupItem","ariaValue","checkSelectAll","checkMaxSelection","element1","temp1","searchCount","searchActiveCount","openClick","openOnClick","KeyUp","expandTextbox","showOverAllClear","checkTextLength","remoteFilterAction","dataUpdater","backCommand","dataChecks","wrapperClick","updateDelimView","removeChipFocus","refreshInputHight","floatLabelBlur","initStatus","getPagingCount","showDelimWrapper","viewWrapper","floatLabelFocus","delimiterWrapper","hideDelimWrapper","mobFilter","calcPopupWidth","popupKeyActions","updateAriaAttribute","arrowUp","arrowDown","selectByKey","spaceKeySelection","escapeAction","enableSelectionOrder","checkBackCommand","moveByList","focuseElem","moveBy","removeSelectedChip","selectListByKey","hideOverAllClear","maximumSelectionLength","updateListSelection","selectedElem","addChipSelection","moveByTop","chipClick","onChipRemove","setFloatLabelType","updateMainList","removeChip","updateChipStatus","element2","addListSelection","addChip","dispatchSelect","isNotTrigger","getChip","closeElements","onMobileChipInteraction","chipElem","chipClose","chip","data-value","chipContent","setClass","mouseIn","mouseOut","fieldProperty","listCurrentOptions","overAllHeight","selectAllHeight","onListMouseDown","ClearAll","delim","indexItem","selectItems","mainlist","addListHover","ariaCheck","delimChar","wrapperleng","remainContent","overflowCountTemplate","raminElement","remainSize","overAllContainer","remainValue","newTemp","selectAllItem","onLoadSelect","dropDownIcon","msProps","mainLiLength","liLength","DELIMITER_VIEW","checkAutoFocus","placeholderText","placeholderElement","showDropDownIcon","CheckBoxSelection","activeLi","listSelection","setSelectAll","setDeviceSearchBox","getFocus","setReorder","getActiveList","checboxCreate","checkAllParent","selectAllSpan","selectAllText","unSelectAllText","activeLiCount","ulEle","navigationUrl","bookmarkDropdown","bookmarkCheckbox","onKeyUpOnUrlBox","urlValue","urlTextBox","displayTextBox","enableOrDisableInsertButton","onInsertHyperlink","onKeyUpOnDisplayBox","onInsertButtonClick","onCancelButtonClick","dialog","clearValue","loadHyperlinkDialog","localObj","bookmarkDiv","addressText","insertButton","closeHyperlinkDialog","onUseBookmarkChange","onBookmarkchange","autofocus","bookmarkText","bookmarkTextElement","bookmarkValue","bookmarkCheckDiv","bookmarkCheck","address","keyUpInsertTable","rowsCountBox","columnsCountBox","onInsertTableClick","rowValueTextBox","columnValueTexBox","columnContainer","columnValue","rowContainer","rowValue","addBookmark","textBoxInput","selectHandler","gotoBookmark","initBookmarkDialog","dlgFields","commonDiv","textBoxDiv","listviewDiv","listviewInstance","buttonDiv","addbuttonDiv","addButtonElement","deleteButtonDiv","deleteButtonElement","gotoButtonDiv","gotoButtonElement","removeObjects","loadTableofContentDialog","showLevel","closeTableOfContentDialog","unWireEventsAndBindings","changeShowLevelValue","changeByValue","headings","heading1","heading2","heading3","heading4","heading5","heading6","heading7","heading8","heading9","normal","changeStyle","headingValue","getElementValue","checkLevel","changeHeadingStyle","changePageNumberValue","changeRightAlignValue","changeStyleValue","applyTableOfContentProperties","applyLevelSetting","ownerId","generalDiv","genLabel","leftGeneralDiv","rightGeneralDiv","leftBottomGeneralDiv","rightBottomGeneralDiv","pageNumberDiv","rightAlignDiv","tabDiv","tabLeaderLabelDiv","tabLeaderLabel","tabLeaderDiv","showDiv","showLevelLabelDiv","showLevelLabel","showLevelDiv","buildTableDiv","buildTableLabel","tr1","td1","availableLabel","td2","tocLabel","tableDiv","table1","tr2","td3","heading1Label","td4","tr3","td5","heading2Label","td6","tr4","td7","heading3Label","td8","tr5","td9","heading4Label","td10","tr6","td11","heading5Label","td12","tr7","td13","heading6Label","td14","tr8","td15","heading7Label","td16","tr9","td17","heading8Label","td18","tr10","td19","heading9Label","td20","tr12","td23","normalLabel","td24","stylesLevelDiv","fieldsDiv","outDiv","outlineDiv","resetButtonDiv","resetElement","tocStylesDiv","tocStylesLabel","listViewDiv","modifyButtonDiv","modifyElement","getHeadingLevel","newStartLevel","newEndLevel","isEndLevel","isPortrait","loadPageSetupDialog","topMarginBox","leftMarginBox","bottomMarginBox","rightMarginBox","widthBox","heightBox","checkBox1","checkBox2","headerBox","footerBox","landscape","portrait","closePageSetupDialog","keyUpInsertPageSettings","applyPageSetupProperties","changeByPaperSize","paperSize","ejtabContainer","marginTab","paperTab","layoutTab","ejtab","marginHeader","paperHeader","layoutHeader","marginContent","paperContent","layoutContent","initMarginProperties","initPaperSizeProperties","initLayoutProperties","tabObj","marginDiv","leftMarginDiv","rightMarginDiv","topLabel","topTextBox","bottomBoxLabel","bottomTextBox","leftBoxLabel","leftTextBox","rightLabel","rightTextBox","orientationDiv","orientationLabeldiv","orientationPropDiv","portraitDiv","landscapeDiv","sizeDiv","leftSizeDiv","rightSizeDiv","widthLabel","widthTextBox","heightLabel","heightTextBox","paperSizeDiv","layoutDiv","firstPageDiv","oddOrEvenDiv","textLabelDiv","propertyDiv","leftLayoutDiv","rightLayoutDiv","headerLabel","footerLabel","keyUpParagraphSettings","applyParagraphFormat","changeBeforeSpacing","changeAfterSpacing","changeLeftIndent","changeRightIndent","changeLineSpacingValue","changeFirstLineIndent","changeByTextAlignment","special","byIn","changeBySpacing","atIn","loadParagraphDialog","selectionFormat","alignValue","lineSpaceValue","isApply","onParagraphFormat","closeParagraphDialog","alignLabel","indentionDiv","leftIndentionDiv","rightIndentionDiv","spacingDiv","leftSpacingDiv","rightSpacingDiv","indentLabel","beforeTextLabel","specialLabel","afterTextLabel","byLabel","by","spaceLabel","beforeLabel","lineSpaceLabel","afterLabel","atLabel","lineSpacingAt","local","ListViewModel","listIn","levelNumberIn","listLevelAdv","viewModel","alignedAt","listLevelElement","followNumberWith","restartBy","isListCharacterFormat","onTextIndentChanged","onStartValueChanged","onListLevelValueChanged","updateDialogValues","updateRestartLevelBox","onNumberFormatChanged","onAlignedAtValueChanged","onFollowCharacterValueChanged","onLevelPatternValueChanged","numberFormatTextBox","loadListDialog","dialog2","disposeBindingForListUI","closeListDialog","listLevelDiv","numberStyleDiv","numberFormatDiv","indentsDiv","startAtTextBox","textIndentAtTextBox","alignedAtTextBox","followCharacterElement","numberStyleEle","restartElement","formatInfoToolTip","option_1","listPatternConverter","followCharacterConverter","styleBasedOn","styleParagraph","onlyThisDocument","openDialog","showNumberingBulletDialog","setBoldProperty","fontButtonClicked","setItalicProperty","setUnderlineProperty","fontSizeUpdate","fontFamilyChanged","fontColorUpdate","setLeftAlignment","setRightAlignment","setCenterAlignment","setJustifyAlignment","increaseBeforeAfterSpacing","decreaseBeforeAfterSpacing","updateNextStyle","typedName","getTypeValue","isUserNextParaUpdated","isEdit","editStyleName","updateOkButton","enableOrDisableOkButton","styleTypeChange","toggleDisable","updateStyleNames","styleBasedOnChange","styleParagraphChange","numberingBulletDialog","showNumberBulletDialog","onOkButtonClick","styleNameElement","createLinkStyle","loadStyleDialog","closeStyleDialog","styleNameTypeDiv","nameWholeDiv","nameValue","styleTypeWholeDiv","styleTypeDivElement","styleTypeValue","styleBasedParaDiv","styleBasedOnWholeDiv","styleBasedOnDivElement","styleBasedOnValue","styleParagraphWholeDiv","styleParagraphDivElement","styleParagraphValue","formatting","optionsDiv","fontOptionsDiv","createFontOptions","paragraphOptionsDiv","createParagraphOptions","createFormatDropdown","formatBtn","dropDownbtn","fontFamilyElement","fontSizeElement","fontGroupButton","createButtonElement","fontColorElement","alignmentDiv","leftAlign","centerAlign","lineSpacingDiv","singleLineSpacing","onePointFiveLineSpacing","doubleLineSpacing","indentingDiv","buttonElement","paragraphFOrmat","nxtName","basedOnIndex","numberListClick","setActiveElement","bulletListClick","loadNumberingBulletDialog","closeNumberingBulletDialog","initNumberingBulletDialog","tabTarget","createNumberList","createBulletList","numberListDiv","ulTag","numberedNone","createNumberNoneListTag","numberedNumberDot","createNumberListTag","numberedNumberBrace","numberedUpRoman","numberedUpLettter","numberedLowLetterDot","numberedLowLetterBrace","numberedLowRoman","text1","text3","liTag","liInnerDiv","cssFloat","createBulletListTag","liNextDiv","bulletListDiv","bulletNone","bulletDot","bulletCircle","bulletSquare","bulletFlower","bulletArrow","bulletTick","fontStyleInternal","fontNameList","fontStyleText","fontSizeText","colorPicker","underlineDrop","strikethroughBox","doublestrikethrough","superscript","subscript","loadFontDialog","closeFontDialog","onInsertFontFormat","onCharacterFormat","fontStyleUpdate","fontFamilyUpdate","underlineUpdate","singleStrikeUpdate","enableCheckBoxProperty","doubleStrikeUpdate","superscriptUpdate","subscriptUpdate","effectLabel","strikeThroughElement","superScriptElement","subScriptElement","doubleStrikeThroughElement","fontDiv","getFontDiv","getFontSizeDiv","colorDiv","fontColorDiv","fontColorLabel","fontEffectsDiv","fontEffectSubDiv1","fontEffectSubDiv2","sizeSubDiv1","sizeLabel","underlineElement","sizeSubDiv2","underlineLabel","fontSubDiv1","fontNameLabel","fontNameValues","fontSubDiv2","fontStyleLabel","fontStyleValues","hasCellWidth","isTableBordersAndShadingUpdated","isCellBordersAndShadingUpdated","isCellOptionsUpdated","isTableOptionsUpdated","onBeforeOpen","loadTableProperties","onCloseTablePropertyDialog","applyTableProperties","preferCheckBox","rowHeightCheckBox","preferredCellWidthCheckBox","rowHeightValue","closeTablePropertiesDialog","applyTableSubProperties","applySubCellOptions","applySubTableOptions","tableWidthBox","tableWidthType","leftIndentBox","rowHeightBox","allowRowBreak","cellWidthBox","cellWidthType","changeTableCheckBox","changeTableAlignment","updateClassForAlignmentProperties","tableTab","getTableAlignment","changeTableRowCheckBox","changeTableCellCheckBox","changeCellAlignment","updateClassForCellAlignment","cellTab","getCellAlignment","showBordersShadingsPropertiesDialog","rowFormatInternal","rowTab","separatorLine","tableHeader","rowHeader","cellHeader","tableContent","rowContent","cellContent","initTableProperties","initTableRowProperties","initTableCellProperties","alignMentButtons","cellAlignment","calculateGridValue","setTableProperties","setTableRowProperties","setTableCellProperties","bordersAndShadingButton","tableOptionButton","cellOptionButton","onTableWidthChange","onTableWidthTypeChange","onLeftIndentChange","onRowHeightChange","onRowHeightTypeChange","onAllowBreakAcrossPage","onRepeatHeader","onCellWidthChange","onCellWidthTypeChange","sizeHeader","parentContainer","childContainer1","childContainer2","childContainer3","controlDiv","labeltext","alignmentHeader","alignmentContainer","classDivName","leftAlignDiv","centerAlignDiv","leftlabel","centerlabel","rightlabel","leftIndenetContainer","leftIndentLabel","tableOptionContiner","formatNumericTextBox","tableHasWidth","groupButtons","groupButton","sizeLabeldiv","childDiv1","childdiv2","child3","child4","allowRowContainer","repeatHeaderContaniner","enableRowHeight","parentdiv","childdiv1","preferredCellWidth","divAlignment","divStyle","topAlignDiv","cellTopAlign","cellCenterAlign","bottomAlignDiv","cellBottomAlign","centerLabel","bottomLabel","cellAlignments","applyBordersShadingsProperties","tablePropertiesDialog","checkClassName","previewDivTopTop","previewDivTopBottom","previewDivTopCenter","previewDivBottomcenter","previewDivBottomLeft","previewDivBottomRight","previewDivDiagonalRight","previewDivLeftDiagonal","shadingColorPicker","ulelementShading","applyTo","noneDiv","currentTableFormat","closeDialog","closeBordersShadingsDialog","handleSettingCheckBoxAction","tableBorderDialogId","updateClassForSettingDivElements","setSettingPreviewDivElement","boxDiv","allDiv","customDiv","handlePreviewCheckBoxAction","compareClass","handlePreviewCheckBoxShowHide","showHidePreviewDivElements","applyTableCellPreviewBoxes","previewDivBottomcenterContainer","previewDivTopCenterContainer","previewVerticalDiv","previewHorizontalDiv","previewDivBottomRightContainer","applyPreviewTableBackgroundColor","previewDiv","applyPreviewTableBorderColor","previewRightDiagonalDiv","previewLeftDiagonalDiv","settingsContiner","styleContainer","previewContiner","styleText","dropDownList","widthText","widthNumeric","colorText","borderColorPickerElement","settingText","noneDivContainer","noneDivLabel","boxDivContainer","boxDivLabel","allDivContainer","allDivLabel","customDivContainer","customDivLabel","noneDivTransparent","boxDivTransparent","allDivTransparent","customDivTransparent","previewText","previewDivTopTopContainer","previewDivTopBottomContainer","previewDivLeftDiagonalContainer","previewDivBottomLeftContainer","previewDivDiagonalRightContainer","previewDivTopTopTransParent","previewDivTopCenterTransParent","previewDivTopBottomTransParent","previewDivLeftDiagonalTransParent","previewDivBottomLeftTransparent","previewDivBottomcenterTransparent","previewDivBottomRightTransparent","previewDivDiagonalRightTransparent","shadingContiner","shadingText","shadings","shadingColorPickerElement","shdApply","divsion","borderColorPicker","loadBordersShadingsPropertiesDialog","settingDivs","tempClassName","isShowHidePreviewTableElements","settingDiv","compareElementClass","setElement","compareElement","setPropertyPreviewDivElement","cloneBorders","getLineStyle","colorPickerEvent","fillColorEvent","horizontalBorder","verticalBorder","diagonalDownBorder","customBorder","diagonalUpBorder","applyTableCellProperties","cellSpaceTextBox","applyTableOptions","closeCellMarginsDialog","changeAllowSpaceCheckBox","allowSpaceCheckBox","removeEvents","innerDivLabel","getCellMarginDialogElements","cellSpaceLabel","table2","cellspacingTextBox","divBtn","loadCellMarginsDialog","applyTableOptionsHistory","applySubTableOptionsHelper","documentLocale","changeSameAsTable","sameAsTableCheckBox","localizeValue","sameAsTable","loadCellProperties","enableTextBox","enableCheckBox","applyCellMarginsInternal","applyCellMarginsForCells","rowCells","iterateCells","applySubCellMargins","leftLabel","modifyStyles","addNewStyles","initStylesDialog","newButtonDiv","newButtonElement","modifybuttonDiv","modifyButtonElement","hideObjects","index.DocumentEditor","index.Print","index.SfdtExport","index.WordExport","index.TextExport","index.Search","index.Editor","index.EditorHistory","index.OptionsPane","index.ContextMenu","index.ImageResizer","index.HyperlinkDialog","index.TableDialog","index.BookmarkDialog","index.TableOfContentsDialog","index.PageSetupDialog","index.ParagraphDialog","index.ListDialog","index.StyleDialog","index.StylesDialog","index.BulletsAndNumberingDialog","index.FontDialog","index.TablePropertiesDialog","index.BordersAndShadingDialog","index.TableOptionsDialog","index.CellOptionsDialog","index.MultiSelect","index.CheckBoxSelection","CellType","CellStyle","numFmtId","backColor","wrapText","indent","isGlobalStyle","CellXfs","CellStyleXfs","CellStyles","xfId","NumFmt","formatCode","mLine","mColor","Cells","inserted","Rows","Worksheets","Worksheet","isSummaryRowBelow","showGridLines","HyperLink","FreezePane","MergeCell","MergeCells","mergeCell","mCell","isIntersecting","intersectingCell","ref","ValueFormatter","CsvHelper","csvStr","globalStyles","Map","worksheets","parseWorksheet","parseRows","rows_1","parseRow","parseCell","csv","parseCellValue","has","dwlLink","BlobHelper","getBlob","Workbook","saveType","currencyString","sharedStringCount","unitsProportions","hyperlinkStyle","mSaveType","sharedString","mFonts","mBorders","printTitles","cellStyles","mNumFmt","mFills","mCellXfs","mCellStyleXfs","parserCellStyle","cellStylesIn","tFormat","parserWorksheets","builtInProperties","BuiltInProperties","parserBuiltInProperties","csvHelper","jsonBuiltInProperties","author","comments","company","manager","subject","createdDate","tags","jsonSheet","sheet","mergedCellsStyle","mHyperLinks","parserColumns","parserRows","freeze","parserFreezePanes","printTitle","parserPrintTitle","hyperLinks","mergeOptions","sourceJson","destJson","getCellName","getColumnName","strColumnName","iCurrentDigit","titleRowName","printTitleName","fromRow","toRow","titleColName","fromColumn","toColumn","freezePanes","columnsLength","rowsLength","rowId","parserRow","insertMergedCellsStyle","rowToInsert","styleIndex","cellToInsert","refName","parseGrouping","parseCells","isCollapsed","cellsLength","spanMin","spanMax","cellId","jsonCell","hyperLink","getCellValueType","rId","parseCellType","processMergeCells","applyGlobalStyle","cellType","defStyleIndex","parserBorder","processCellStyle","switchNumberFormat","numFmt","cellStyleXfs","cellXfs","returnFormat","processNumFormatId","compareResult","compareStyle","isNewFont","toCompareStyle","isNewBorder","bStyle","isAllBorder","toCompareBorder","allBorderStyle","toOADate","blobSaveType","proxyUrl","xlsxMatch","csvMatch","saveWorkbook","saveWorksheets","saveSharedString","saveStyles","saveApp","saveCore","saveContentType","saveTopLevelRelation","saveWorkbookRelation","workbookTemp","sheets","printTitle_1","addToArchive","saveWorksheet","sheetBlob","sheetString","saveSheetView","colString","pixelsToColumnWidth","rowString","pixelsToRowHeight","hLink","saveSheetRelations","pixels","dDigitWidth","trunc","relStr","paneString","sstStart","si","processString","updateCellXfsStyleXfs","styleTemp","saveNumberFormats","saveFonts","saveFills","saveBorders","saveCellStyleXfs","saveCellXfs","saveCellStyles","compareFontResult","fontId","fillId","borderId","applyAlignment","numFmtStyle_1","fillsStyle","bordersStyle","cellStyleString","cellXfsStyle","cellStyleXf","saveAlignment","cellXf","alignString","appString","coreString","toISOString","wbRelation","contentTypeString","sheetsOverride","xmlString","updatedMergedCellStyles","sCell","eCell","dateToTicks","isLeapYear","timeToTicks","daysTo1899","allowSorting","allowResizing","allowGrouping","allowReordering","showColumnMenu","enableGroupByFormat","showInColumnChooser","edit","sortDirection","getEditTemplate","editTemplateFn","getFilterTemplate","filterTemplateFn","valueFormatter","commandsTemplate","headerTemplateFn","fltrTemplateFn","editTemplate","filterTemplate","isForeignColumn","editType","sortComparer","a_1","getSortDirection","setSortDirection","getFormatter","formatFn","getParser","parserFn","getColumnTemplate","getHeaderTemplate","getFilterItemTemplate","getDomSetter","disableHtmlEncode","queryCellInfo","headerCellInfo","actionBegin","actionComplete","dataBound","rowSelecting","rowSelected","rowDeselecting","rowDeselected","cellSelecting","cellSelected","cellDeselecting","cellDeselected","columnDragStart","columnDrag","columnDrop","rowDragStart","rowDrag","rowDrop","printComplete","detailDataBound","batchAdd","batchCancel","batchDelete","beforeDataBound","beforeOpenColumnChooser","filterChoiceRequest","filterAfterOpen","filterBeforeOpen","initialLoad","initialEnd","dataReady","contentReady","uiUpdate","onEmpty","inBoundModelChanged","colGroupRefresh","headerRefreshed","pageComplete","sortComplete","filterComplete","searchComplete","reorderComplete","rowDragAndDropComplete","groupComplete","ungroupComplete","groupAggregates","refreshFooterRenderer","refreshAggregateCell","refreshAggregates","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","excelHeaderQueryCellInfo","pdfExportComplete","pdfHeaderQueryCellInfo","freezeRender","filterOpen","filterDialogCreated","filterMenuClose","initForeignKeyColumn","getForeignKeyData","showEmptyGrid","dataStateChange","dataSourceChanged","rtlUpdated","beforeFragAppend","frozenHeight","recordAdded","cancelBegin","editNextValCell","RenderType","ToolbarItem","CheckBoxFilter","filterSettings","existingPredicate","filterState","cBoxTrue","cBoxFalse","searchHandler","searchBoxKeyUp","searchBoxClick","sInput","refreshCheckboxes","updateSearchIcon","sIcon","updateModel","actualPredicate","filteredColumns","sortSettings","allowCaseSensitive","getAndSetChkElem","sBox","hideSearchbox","inputargs","cBox","events.filterBeforeOpen","filterModel","columnName","columnType","events.actionBegin","btnClick","isExcel","dialogCreated","getAllData","events.filterDialogCreated","getColumns","destroyTemplate","events.filterMenuClose","clearFilter","events.preventBatch","filterCollection","fltrBtnHandler","optr","caseSen","itemsCnt","fObj","initiateFilter","fColl","firstVal","parsed","getDataModule","predicte","filterChoiceCount","filterEvent","processSearch","getPredicateFromCols","getPredicate","predicateList","fPredicate","foreignColumn","getForeignKeyColumns","events.generateQuery","events.filterChoiceRequest","processDataOperation","eventPromise","dataSuccess","getStateEventArgument","events.dataStateChange","adaptr","allPromise","runArray","fullData","cols","getDistinct","filteredData","events.filterAfterOpen","events.actionComplete","updateResult","createFilterItems","updateAllCBoxes","updateIndeterminatenBtn","cBoxes_1","createCheckbox","cBoxes","selectAllValue","isColFiltered","getCheckedState","foreignDataObj","events.foreignKeyData","generatePredicate","updateDateFilter","getCaseValue","dataState","isPending","resolver","events.rowsAdded","addRows","events.rowsRemoved","removeRows","events.dataSourceModified","events.destroy","events.updateData","crudActions","events.addDeleteAction","gObj","skipPage","columnQueryMode","selectQueryFields","searchQuery","aggregateQuery","sortQuery","pageQuery","isForeign","allowPaging","groupSettings","getColumnByField","isGrpFmt","formatGroupColumn","sortGrp","sSettings","searchSettings","fGeneratePredicate","skipFoerign","actualFilter","checkBoxCols","defaultFltrCols","excelPredicate","defaultFltrCols_1","column_1","sType","events.showEmptyGrid","getKey","getPrimaryKeyFieldNames","crud","events.recordAdded","deferred_1","previousData","events.crudAction","setState","events.dataSourceChanged","toIndex","dataArgs","isDataChanged","editArgs","isSpanned","CellMergeRender","cellArgs","cellRenderer","getCellRenderer","cellSpan","aria-colSpan","enableColumnVirtualization","backupMergeCells","fName","setMergeCells","generteKey","fname","splitKey","getMergeCells","updateVirtualCells","mCells","getIndexFromAllColumns","vColumnIndices","getColumnIndexesInView","getVisibleColumns","RowRenderer","rowTemplate","refreshRow","refreshMergeCells","cells_1","rowArgs","attrCopy","chekBoxEnable","isDataRow","getSelectedRowIndexes","isCheckBoxSelection","checkAllRows","buildAttributeFromRow","cellRendererFact","DetailExpand","Filter","CommandColumn","summarycell","isAltRow","RowModelGenerator","generateRows","generateRow","ensureColumns","detailTemplate","generateCell","enableAltRow","refreshForeignKeyRow","generateCells","oIndex","opt","isDataCell","rowID","refreshRows","SummaryModelGenerator","groupFooterTemplate","groupCaptionTemplate","columnSelector","buildSummaryData","getGeneratedRow","summaryRow","raw","indents","getIndentByLevel","isDetailGridAlone","indentLength","getGeneratedCell","getCellType","Indent","sColumn","scolumn","single","disp","Summary","GroupSummaryModelGenerator","GroupSummary","CaptionSummaryModelGenerator","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","contentDiv","createContentTable","setTable","multiselectable","initializeContentDrop","frozenRows","getHeaderContent","setColGroup","getColGroup","freezeRowElements","rowElements","refreshContentRows","hdrTbody","frag","hdrfrag","fCont","mCont","modelData","registeredTemplate","tbody","getRowTemplate","isTR","colcount","getHeaderTable","events.beforeFragAppend","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","visualElement","headercelldiv","getStackedHeaderColumnByHeaderText","getColumnByUid","events.columnDragStart","events.columnDrag","events.columnDragStop","events.headerDrop","widthService","events.columnPositionChanged","colPosRefresh","headerDiv","createHeaderTable","initializeHeaderDrag","initializeHeaderDrop","events.headerRefreshed","headerPanel","headerTable","tHead","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","getColumnIndexByField","frozenCnt","frzCol","refreshUI","setWidthToColumns","updateDefaultCursor","gCells","textWrapSettings","wrapMode","checkDepth","showDropArea","headerRows","CellRenderer","locator","localizer","rowChkBox","getGui","evaluate","fData","dummyData","invokeFormatter","refreshCell","refreshTD","displayAsCheckBox","localeStr","fromFormatter","appendHtml","persistSelection","buildAttributeFromCell","clipMode","isCheckBoxType","AriaService","setExpand","setSort","isBusy","invalid","setGrabbed","isGrabbed","grabbed","setDropTarget","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","emptyGrid","headerRenderer","getRenderer","contentRenderer","Content","isLayoutRendered","emptyRow","events.cancelBegin","refreshComplete","isFActon","isNeedForeignAction","getFData","deffered_1","events.getForeignKeyData","disablePageWiseAggregates","validateGroupRecords","dataManagerFailure","deferred","sendBulkRequest","dmSuccess","dmFailure","renderEmptyRow","isTrigger","colspan","events.onEmpty","dynamicColumnChange","getCurrentViewRecords","updateColumnType","isColTypeDef","events.beforeDataBound","events.tooltipDestroy","prevPageMoving","totalRecordsCount","updatesOnInitialRender","events.dataReady","events.toolbarRefresh","events.actionFailure","buildColumns","events.autoCol","instantiateRenderer","addRenderer","cellrender","addCellRenderer","events.initialLoad","events.modelChanged","group0","groupN","addWhere","curFilter","rPredicate","updateGroupInfo","untouched","uGroup","itemGroup","uGroupItem","CellRendererFactory","cellRenderMap","RendererFactory","rendererMap","rName","ColumnWidthService","setColumnWidth","cWidth","setWidthToTable","headerCol","getContentTable","fWidth","mHdr","contentCol","getSiblingsHeight","getHeightFromDirection","tWidth","setWidthToFrozenTable","freezeWidth","setWidthToMovableTable","movableWidth","FocusStrategy","currentInfo","oneTime","forget","skipFocus","focusByClick","prevIndexes","focusCheck","validator","passiveFocus","skipAction","getFocusInfo","elementToFocus","onClick","clearOutline","beforeArgs","byKey","byClick","clickArgs","event.beforeCellFocused","skipOn","keyArgs","bValue","swapInfo","jump","toHeader","toFrozen","getNextCurrent","setActiveByKey","clearIndicator","getFocusedElement","fContent","fHeader","setFocusedElement","addFocus","event.cellFocused","isJump","getInfo","focusedColumnUid","getColumnByIndex","refreshMatrix","FixedContentFocus","ContentFocus","FixedHeaderFocus","HeaderFocus","cFocus","updateRow","handlerInstance","focusElement","cellPosition","gridPosition","passiveHandler","event.keyPressed","event.click","event.contentReady","event.headerRefreshed","restoreFocus","event.batchAdd","event.batchCancel","event.batchDelete","event.detailDataBound","event.onEmpty","internalCellFocus","getPrevIndexes","forgetPrevious","getFocusable","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","current1","current2","current3","SearchBox","searchFocus","searchBlur","__assign","assign","selectedRowIndexes","selectedRowCellIndexes","selectedRecords","isMultiShiftRequest","isMultiCtrlRequest","enableSelectMultiTouch","selectedRowState","chkAllCollec","isCheckedOnAdd","persistSelectedData","isCancelDeSelect","isPreventCellSelect","disableUI","factory","initializeSelection","onActionBegin","fDataUpdate","rowObj","getRowObj","gridElement","hidePopUp","isEditing","editModule","formObj","isPersistSelection","getSelectedMovableRow","selectedMovableRow","selectData","getRowObjectFromUID","isRowType","isCtrlPressed","isShiftPressed","prevRowIndex","addMovableArgs","events.rowSelecting","clearRow","updateRowSelection","selectedRowIndex","events.rowSelected","updateRowProps","mRow","mObj","previousMovRow","selectRowsByRange","selectRows","getCollectionFromIndexes","rowIndexes","isSingleSel","rowIndexes_1","rowIdx","addRowsToSelection","rowIndexes_2","isUnSelected","rowDeselect","events.rowDeselecting","addRemoveClassesForRow","events.rowDeselected","clearRowSelection","isRowSelected","updatePersistCollection","chkState","pKey_1","primaryKey","updatePersistDelete","updateCheckBoxes","chkBox","checkedTarget","setCheckAllState","clearCellSelection","movableRow","rowDeselectObj","getSelectedMovableCell","getMovableCellFromIndex","getColIndex","isCellType","getCellFromIndex","prevCIdxs","currentCell","previousRowCellIndex","prevECIdxs","previousRowCell","getCellIndex","events.cellSelecting","clearCell","updateCellSelection","updateCellProps","selectedRowCellIndex","events.cellSelected","rIdx","selectCellsByRange","cellIndexes","stIndex","edIndex","cellSelectionMode","getLastColIndex","selectCells","rowCellIndexes","addRowCellIndex","addCellsToSelection","getMovableRowsObject","cellIndexes_1","selectedCellIdx","cellDeselect","events.cellDeselecting","events.cellDeselected","rowCellIndex","isRowAvail","getSelectedCellsElement","cLen","addMovableRows","gBRect","isDragged","isCellDrag","selectLikeExcel","allowRowDragAndDrop","postion","clearSelAfterRefresh","events.initialEnd","events.cellSelectionComplete","events.inBoundModelChanged","events.cellFocused","onCellFocused","actionBeginFunction","actionCompleteFunction","refreshHeader","addEventListener_checkbox","removeEventListener_checkbox","getCheckAllBox","checkBoxSelectionChanged","initPerisistSelection","checkboxMode","gobj","checkboxColumn","chkField","ensureCheckboxFieldSelection","refreshPersistSelection","setRowSelection","checkState","editChkBox","onDataBound","checkSelectAllAction","cRenderer","editForm","stateStr","getCheckAllStatus","triggerChkChangeEvent","checkSelect","rowCellSelectionHandler","moveIntoUncheckCollection","updateSelectedRowIndex","selectedVal","checkedLen","spanEle","popUpClickHandler","chkSelect","checkboxOnly","headerAction","thLen","applyDownUpKey","applyRightLeftKey","shiftDownKey","applyShiftLeftRightKey","applyHomeEndKey","applyCtrlHomeEndKey","ctrlPlusA","applySpaceSelection","applyUpDown","getSelectedRecords","getRowsObject","onDataBoundFunction","actionCompleteFunc","actionCompleteHandler","events.click","searchString","refreshSearch","events.searchComplete","onSearchComplete","ShowHide","showBy","getToggleFields","hideBy","getKeyBy","allowSelection","Scroll","lastScrollTop","oneTimeReady","toolbarModule","mHdrHeight","ensureOverflow","setPadding","getThreshold","cssProps","getCssProperties","removePadding","setScrollLeft","headerModule","getMovableHeader","onContentScroll","scrollTarget","isPreventScrollEvent","onFreezeContentScroll","onWheelScroll","deltaMode","onTouchScroll","pageXY","getPointXY","setPageXY","getFooterContent","isAsyncPrint","printing","renderPrintGrid","isPrintGrid","printGridModel","printGridProp","printMode","printGrid","selectedRows","removeColGroup","waitingPop","events.printComplete","groupCaption","colGroups","AggregateColumn","getTemplate","setPropertiesSilent","AggregateRow","Clipboard","copyContent","isSelect","events.keyPressed","clipBoardTextArea","setCopyData","withHeader","headerTextArray","getCopyData","checkBoxSelection","colIndexes","getColumnHeaderByIndex","isCell","isElement","queryCommandSupported","rowCellIndxes","getSelectedRowCellIndexes","SortDescriptor","SortSettings","FilterSettings","SelectionSettings","SearchSettings","RowDropSettings","TextWrapSettings","GroupSettings","EditSettings","inViewIndexes","freezeRefresh","mergePersistGridData","keyEntity","ignoreInArrays","ignoreOnColumn","ignoreInColumn","allowExcelExport","allowPdfExport","isDetail","toolbarTemplate","isCommandColumn","allowAdding","allowDeleting","extendRequiredModules","contextMenuItems","showColumnChooser","isForeignKeyEnabled","mediaCol","filterOperators","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","notEqual","EmptyRecord","True","False","InvalidFilterMessage","GroupDropArea","GroupDisable","FilterbarTitle","EmptyDataSourceError","Add","Edit","Update","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","Ungroup","autoFitAll","autoFit","Export","FirstPage","PreviousPage","SortAscending","SortDescending","EditRecord","DeleteRecord","FilterMenu","Blanks","FilterTrue","FilterFalse","NoResult","ClearFilter","NumberFilter","TextFilter","DateFilter","DateTimeFilter","MatchCase","Between","CustomFilter","CustomFilterPlaceHolder","CustomFilterDatePlaceHolder","AND","OR","ShowRowsWhere","ctrlAltPageUp","ctrlAltPageDown","altPageUp","altPageDown","ctrlDownArrow","ctrlUpArrow","ctrlPlusP","ctrlPlusC","ctrlShiftPlusH","renderModule","getMediaColumns","processModel","gridRender","addListener","updateStackedFilter","gcol","getShowHideService","hideAtMedia","media","mediaQueryUpdate","showHider","refreshMediaCol","eventInitializer","hasGridChild","removeListener","toolTipObj","focusModule","checkCursor","requireRefresh","requireGridRefresh","updateColumnObject","rowTemplateFn","detailTemplateFn","extendedPropertyChange","updateRTL","getToolbar","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","stackedHeader","individualColumn","stackedColumn","getLocaleConstants","setColumnIndexesInView","setGridHeaderContent","setGridContentTable","setGridContent","setGridHeaderTable","footerElement","getFooterContentTable","getPager","gridPager","setGridPager","getRowInfo","rowsObject","mrows","dRows","setCellValue","fieldIdx","mTr","pkName","movableSelectedRow","rowObjects","movableRowObjects","sRow","events.refreshFooterRenderer","events.groupAggregates","events.queryCellInfo","setRowData","rowObject","getColumnHeaderByField","getColumnHeaderByUid","getUidByColumnField","getColumnFieldNames","columnNames","getDetailTemplate","getSelectedRows","showColumns","hideColumns","getFrozenCount","getVisibleFrozenColumns","getVisibleFrozenColumnsCount","getVisibleFrozenCount","visibleFrozenColumns","pageNo","pagerModule","updateExternalMessage","sortColumn","isMultiSort","sortModule","clearSorting","removeSortColumn","filterByColumn","filterOperator","filterValue","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","deleteRecord","fieldname","closeEdit","addRecord","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","getTooltipStatus","htable","ctable","isEllipsisTooltip","myTableDiv","mySubDiv","myTable","myTr","mytd","mouseClickHandler","dblClickHandler","allowKeyboard","dataBoundFunction","checkEdit","events.dblclick","filterClear","keyPress","saveCell","events.editNextValCell","mergeColumns","storedColumn","ind","localCol","setInjectedModules","refreshColumns","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","groupColumn","groupModule","ungroupColumn","isContextMenuOpen","ensureModuleInjected","propertyNames","contentRefresh","isModelChanged","aria","sortedColumn","getSortedColsIndexByField","sortedCols","sCol","getSortColumnFromField","lastSortedCol","allowMultiSorting","backupSettings","removeSortIcons","updateSortedCols","lastSortedCols","lastCols","restoreSettings","refreshSortSettings","addSortIcons","events.sortComplete","refreshSortIcons","cancelBeginEvent","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","prevPageDisabled","lastPageDisabled","nextPageDisabled","PagerMessage","pageNoMsgElem","pageCountMsgElem","regx","Pager","defaultConstants","currentPageInfo","totalItemsInfo","firstPageTooltip","lastPageTooltip","nextPageTooltip","previousPageTooltip","nextPagerTooltip","previousPagerTooltip","pagerDropDown","pagerAllDropDown","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","convertValue","dropDownListObject","beforeValueChange","pageSizeValue","ExternalMessage","externalMessage","Global","pagerDestroy","gridExtend","dropDownChanged","addAriaAttr","numericContainerNew","numericContainer","numericContainerDiv","isForceCancel","appendToElement","handlers","complete","inboundChange","events.pageComplete","FilterCellRenderer","fltrData","filterBarTemplate","templateWrite","FlMenuOptrUI","customFltrOperators","customFilterOperators","renderOperatorUI","dlgConetntEle","dlgObj","optrData","customOptr","operators","dropDatasource","selectedValue","dropSelectedVal","optrDiv","optrInput","dropOptr","dropDownOpen","selValue","selectedField","getFlOperator","StringFilterUI","serLocator","actObj","getAutoCompleteOptions","getOptrInstance","localizeText","filteredValue","filterOptr","filterObj","actuiObj","NumberFilterUI","numericTxtObj","BooleanFilterUI","dropInstance","drpuiObj","DateFilterUI","fltrSettings","inputElem","datePickerObj","FilterMenuRenderer","fltrObj","isDialogOpen","colTypes","boolean","datetime","flMuiObj","renderDlgContent","mainDiv","dlgDiv","filterBtnClick","clearBtnClick","renderFilterUI","writeMethod","renderFlValueUI","valueDiv","instanceofFilterUI","ui","dlgContentEle","flValue","flOptrValue","targ","fltrValue","flIcon","ExcelFilter","getCMenuDS","unwireExEvents","cmenu","createMenu","isCheckIcon","menu","createMenuElem","ensureTextFilter","iconName","isSubMenu","wireExEvents","clickExHandler","destroyCMenu","menuObj","submenu","isCMenuOpen","selectedMenu","preventClose","client","contextRect","getContextBounds","getCMenuYPosition","contextWidth","filterLength","renderDialogue","complexFieldName","overlayClick","removeDialog","createdDialog","dateTimePicker","renderCustomFilter","fieldSet","checkBoxValue","colValue","fOperator","sValue","sOperator","andRadio","firstOperator","firstValue","secondOperator","secondValue","mPredicate","fpred","fieldElement","xlfloptr","menuText","getSelectedValue","getSelectedText","renderRadioButton","radioDiv","frstpredicate","secndpredicate","renderMatchCase","orRadio","isFilteredCol","fltrPredicates","columnObj","valueInput","renderAutoComplete","renderNumericTextBox","renderDate","renderDateTime","matchCaseDiv","matchCaseInput","completeAction","columnvalue","performComplexDataOperation","returnObj","duplicateMap","cellText","nextFlMenuOpen","Excel","fltrDlgDetails","getLocalizedCustomOperators","fltrElem","updateFilterMsg","filterBarElement","currentFilterObject","getFilteredColsIndexByField","currentFilteringColumn","events.filterComplete","events.filterOpen","columnMenuFilter","filterIconClickHandler","filterCell","checkForSkipInput","filterStatusMsg","applyColumnFormat","addFilteredClass","checkAlreadyColFiltered","getFlvalue","setFormatForFlColumn","refreshFilterSettings","updateFilter","getFilterBarElement","fltrElement","filterDialogOpen","customOperators","filterHandler","localizedStrings","currentFilterColumn","closeHeaderEle","processFilter","updateCrossIcon","getFormatFlValue","showFilterBarStatus","isSkip","skipInput","startTimer","onTimerTick","immediateModeDelay","templateRead","validateFilterValue","getOperator","singleOp","multipleOp","=","!","numOptr","stringOperator","numberOperator","dateOperator","datetimeOperator","booleanOperator","gClient","fClient","datepickerEle","targetText","filterIconElement","refreshFilterIcon","resizeClassList","suppress","isDblClk","findColumn","resizeColumn","footerTable","headerTextClone","contentTextClone","indentWidthClone","contentText","wHeader","wContent","columnbyindex","calcTableWidth","offsetWidthValue","refreshHeight","setHandlerHeight","getResizeHandlers","resizeStart","callAutoFit","getTargetColumn","refreshColumnWidth","mtbody","ftbody","mtr","ftr","parentElementWidth","appendHelper","getPointX","minMove","removeHelper","cancelResizeAction","resizeEnd","setHelperHeight","mousemove","colData","isFrozenColResized","doubleTapEvent","calcPos","fLeft","parentOffset","getUserAgent","timeoutHandler","Reorder","events.reorderComplete","createReorderElement","chkDropPosition","srcElem","destElem","closestElement","targetParentContainerIndex","chkDropAllCols","isFound","findColParent","getColumnsModel","subCols","uId","destElemUid","destColumn","sourceUid_1","colMatchIndex_1","destUid_1","moveColumns","oldIdx","column_2","destIndex","getColParent","srcIdx","fromIndex","flatColumns","fTh","mTh","fHeaders","fColumn","setDisplay","updateScrollPostion","updateArrowPosition","draggableType","cliRect","cliRectBaseLeft","cliRectBaseRight","scrollElem","cliRectBase","RowDD","events.rowDragStart","dropElem","rowDropSettings","isDragStop","getElementFromPosition","events.rowDrag","events.rowDrop","events.rowDragAndDropComplete","getTargetIdx","targetRow","srcControl","targetIndex","isAppliedGroup","isAppliedUnGroup","groupGenerator","events.groupComplete","events.ungroupComplete","onGroupAggregates","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","editedData","iterateGroupAggregates","summaryRows","dataUid","events.refreshAggregateCell","deletedCols","changeds","mergeData","pKeyVal","cItem","eData","aggr","aggrds","DetailRow","toogleExpandcollapse","uid_1","isDetailRow","detailRow","detailCell","parentPrimaryKeys","parentKeyField","parentRowData","injectedModues","gridElem","idx_1","events.detailDataBound","detailElement","getTDfromIndex","predefinedItems","gridID","preItems_1","localeName","ColumnChooser","createToolbar","toolbarClickHandler","viewStr","searchElement","refreshToolbarItems","updateSearchBox","hasData","toolbarItems_1","getItemObject","itemObject","gID","tarElement","searchBoxObj","FooterRenderer","gridModule","modelGenerator","movableContent","fDiv","mDiv","frozenContent","tFoot","freezeTable","renderSummaryContent","cStart","cEnd","summaries","dummies","fragment","rowrenderer","srow","frozenDiv","onScroll","refreshCol","mheaderCol","fheaderCol","onWidthChange","getColFromIndex","updateFooterTableWidth","fCol","mergeds","initds","addrow","idVal","currentds","curIndx","agrVal","SummaryCellRenderer","refreshWithAggregate","cellNode","curCell","Aggregate","initiateRender","cellFac","footerRenderer","prepareSummaryInfo","getFormatFromType","cModel","InterSectionObserver","fromWheel","sentinelInfo","containerRect","entered","observe","onEnterCallback","virtualScrollHandler","debounced100","debounced50","sentinel","setPageHeight","VirtualRowModelGenerator","cOffsets","rowModelGenerator","notifyArgs","virtualInfo","loadNext","loadSelf","nextInfo","getBlockIndexes","loadedBlocks","checkAndResetCache","blockIndexes","isBlockAvailable","getStartIndex","updateGroupRow","columnIndexes","blk","getColumnIndexes","calWidth","iOffset","offsetVal","refreshColOffsets","gLen","currentFirst","iterateGroup","oRow","VirtualContentRenderer","preventEvent","tmpOffsets","VirtualElementHandler","offsetKeys","eventListener","vgenerator","renderWrapper","renderPlaceHolder","debounceEvent","getBlockHeight","observer","adjustTable","scrollListener","scrollArgs","viewInfo","getInfoFromView","prevInfo","tempBlocks","infoType","getPageFromTop","ensureBlocks","mIdx","old","isEndBlock","getTotalBlocks","newChild","cBlock","cOffset","getColumnOffset","refreshOffsets","getTranslateY","setWrapperWidth","setVirtualHeight","onDataReady","maxPage","resetScrollPosition","cHeight","isOnenter","endTranslate","blockHeight","maxBlock","onEntered","getBlockSize","totalBlocks","startIdx","bSize","rem","refreshVirtualElement","VirtualHeaderRenderer","gen","VirtualScroll","ensurePageSize","blockSize","InlineEditRender","addNew","mTbody","getEditElement","renderMovableform","events.frozenHeight","movableForm","updateFreezeEdit","getFreezeRow","fHdr","tdElement","refreshFreezeEdit","fCls","mTd","updateFrozenCont","td_1","BatchEditRender","columnObject","DialogEditRender","events.dialogDestroy","setLocaleObj","primaryKeyValue","dialogClose","events.destroyForm","dataCell","EditRender","Inline","Batch","getEditElements","convertWidget","fForm","cols_1","tArgs","BooleanEditCell","activeClasses","selectChkBox","editRow","checkBoxChange","DropDownEditCell","ddActionComplete","dlgElement","NumericEditCell","DefaultEditCell","NormalEdit","allowEditOnDblClick","editComplete","editRowIndex","primaryKeys","primaryKeyValues","applyFormValidation","editFormValidate","form1","form2","mFormObj","getCurrentEditedData","mForm","addedRowIndex","destroyElements","destroyWidgets","editHandler","edSucc","edFail","editSuccess","editFailure","updateCurrentViewData","requestSuccess","stopEditStatus","dataLen","tmpRecord","contained","mElem","editMElem","events.doubleTap","events.deleteComplete","events.saveComplete","InlineEdit","BatchEdit","cellDetails","events.beforeCellFocused","onBeforeCellFocused","setCellIdx","editCell","isAddRow","validateFormObj","isLastCellPrimaryKey","editCellFromIndex","removeRowObjectFromUID","events.batchCancel","refreshRowIdx","bulkDelete","bulkAddRow","batchSave","getBatchChanges","batchChanges","mergeBatchChanges","addRowObject","getIndexFromData","events.batchDelete","nonMovableRows","defaultData","getDefaultData","events.batchAdd","findNextEditableCell","args1","isValOnly","validation","validationRules","checkNPCell","dValues","mRowData","colIdx","getDataByIndex","getCellIdx","isColored","updateCell","setChanges","rowcell","isForceSave","cloneEditedData","visibleColumns","addCancelWhilePaging","DialogEdit","DatePickerEditCell","TemplateEditCell","editCellType","dropdownedit","numericedit","datepickeredit","datetimepickeredit","booleanedit","defaultedit","templateedit","updateEditObj","createAlertDlg","createConfirmDlg","updateColTypeObj","tapEvent","alertDObj","refreshToolbar","showDeleteConfirmDialog","endEditing","getCurrentEditCellData","getValueFromType","destroyToolTip","dlgWidget","dlgOk","dlgCancel","alertClick","btnOptions","executeAction","inputs","preventObj","mRules","createFormObj","validationComplete","valErrorPlacement","getElemTable","isFHdr","gcontent","isScroll","inputClient","showColumn","hideColumn","isDlgOpen","dlghide","initialOpenDlg","stateChangeColumns","isInitialOpen","isCustomizeOpenCC","rtlUpdate","enableAfterRenderEle","hideDialog","clearActions","refreshCheckboxState","columnChooserSearch","removeCancelIcon","addcancelIcon","events.beforeOpenColumnChooser","mOpenDlg","openColumnChooser","renderChooserList","customDialogOpen","customDialogClose","columnChooserManualSearch","confirmDlgBtnClick","ccsearchele","ccsearchicon","conDiv","innerDivContent","refreshCheckboxList","columnStateChange","dialogInstance","stateColumns","colUid","currentCol","checkstatecolumn","coluid","searchVal","fltrCol","clearSearch","nMatchele","checkBoxClickHandler","checkstate","columnUid","refreshCheckboxButton","searchValue","gdCol","columnUID","cbox","cclist","hideColState","showColState","cccheckboxlist","ExportHelper","hideColumnInclude","getColumnData","columnPromise","fColumns","getHeaders","isHideColumnInclude","measureColumnDepth","actualColumns","processColumns","processHeaderCells","removeCellFromRow","generateActualColumns","getConvertedWidth","getCellCount","resultCells","appendGridCells","isFirstColumn","isLastColumn","isIgnoreFirstCell","gridColumn","ExportValueFormatter","returnFormattedValue","formatCellValue","ExcelExport","book","workSheet","rowLength","expType","includeHiddenColumn","isCsvExport","isElementIdChanged","isExporting","exportValueFormatter","exportProperties","isCsv","gridObject","processRecords","processInnerRecords","groupedColLength","blankRows","multipleExport","processExcelHeader","groupIndent","processHeaderContent","processRecordContent","events.excelExportComplete","blobPromise","currentViewRecords","processRecordRows","processGroupedRows","processAggregates","processExcelFooter","getCaptionThemeStyle","groupCaptionSummaryRows","fillAggregates","lIndex","hIndex","tCell","rLen","excelCellArgs","getColumnStyle","rec","byGroup","summaryModel","groupSummaryRows","sRows","customIndex","cells_2","Sum","Average","Max","Min","TrueCount","FalseCount","getAggreateValue","wholeText","JSON1","JSON2","attrname","gridCell","getHeaderThemeStyle","excelHeaderCellArgs","events.excelHeaderQueryCellInfo","getRecordThemeStyle","updateThemeStyle","themestyle","noRows","updatedCellIndex","footerRows","spannedCells_1","PdfExport","customDataSource","isGrouping","processExport","events.pdfExportComplete","gridTheme","processExportProperties","headerThemeStyle","headerFont","headerBrush","processGridHeaders","setColumnProperties","captionThemeStyle","getSummaryCaptionThemeStyle","processGroupedRecords","processRecord","penBrushColor","groupIndex","dataSourceItems","captionSummaryModel","gridHeader","events.pdfHeaderQueryCellInfo","getHorizontalAlignment","getVerticalAlignment","pdfPageSettings","getPageSize","fromTop","drawPageTemplate","fromBottom","processContentValidation","drawPageNumber","getBrushFromContent","textPenColor","penColor","setContentFormat","documentHeader","textBrushColor","brushColor","getPageNumberStyle","pageNumberType","compositeField","getPenFromContent","penSize","getDashStyle","isCaption","captionRow","sRows_1","leastCaptionSummaryIndex","getSummaryWithoutTemplate","setRecordThemeStyle","verticalAlign","getFontFamily","bigint","CommandColumnRenderer","unbounDiv","renderButton","buttonOption","commandType","commandClickHandler","batchEdit","editIcon","pager","ungroup","excel","fPage","nPage","pPage","descending","groupHeader","touchPop","enableAfterRenderMenu","exportItems","exportGroup","getLastPage","totalpage","targetColumn","closestGrid","dItem","ensureDisabledStatus","ensureFrozenHeader","AutoFitAll","AutoFit","CsvExport","PrevPage","FreezeRowModelGenerator","isFrzLoad","FreezeContentRender","setFrozenContent","setMovableContent","getMovableContent","getFrozenContent","mTbl","FreezeRender","refreshFreeze","setFrozenHeight","rfshMovable","updateColgroup","setFrozenHeader","setMovableHeader","getFrozenHeader","refreshStackedHdrHgt","addMovableFirstCls","movablefirstcell","filterRow","hdrClassList","setWrapHeight","updateResizeHandler","isContReset","isStackedHdr","fRowHgt","mRowHgt","isWrap","tBody","movableContentHeight","fRowSpan","mRowSpan","fTr","getRowSpan","updateStackedHdrRowHgt","rSpan","minRowSpan","maxRowSpan","frozenHeader","movableHeader","mTable","Freeze","ColumnMenu","GROUP","UNGROUP","ASCENDING","DESCENDING","FILTER","POP","WRAP","CHOOSER","getColumnMenuHandlers","columnMenuHandlerDown","columnMenu","unwireFilterEvents","columnMenuHandlerClick","getHeaderCell","openColumnMenu","isFilterItemAdded","filterPosition","columnMenuItemClick","columnMenuBeforeOpen","columnMenuOnClose","beforeMenuItemRender","columnMenuBeforeClose","wireFilterEvents","appendFilter","isChooserItem","colChooser","getFilter","isFilterPopupOpen","defultItems_1","getDefault","getDefaultItem","createChooserItems","filterPopup","getFilterPop","gridPos","liPos","ForeignKey","initForeignKeyColumns","generateQueryFormData","foreignColumns","genarateColumnQuery","genarateQuery","responses","fromData","needQuery","queryColumn","isTrue","filterColumn","destroyEvent","index.Grid","index.Filter","index.Page","index.Sort","index.Group","index.Reorder","index.RowDD","index.DetailRow","index.Toolbar","index.Aggregate","index.VirtualScroll","index.Edit","index.Resize","index.ExcelExport","index.PdfExport","index.CommandColumn","index.Freeze","index.ColumnMenu","index.ColumnChooser","index.ForeignKey","BubbleData","PaletteCollection","ColorCollection","BubbleTooltipData","mappingName","bubbleData","LegendColorCollection","PaletteSettings","CellColor","heatMap","convertToRGB","previousOffset","previousColor","getEqualColor","nextColor","getPercentageColor","convertToHex","itemColor","colorSplit","prevColor","getPercentage","getColorCollection","colorCollection","legendColorCollection","bubbleSizeWithColor","minColorValue","dataSourceMinValue","maxColorValue","dataSourceMaxValue","emptyPointColor","paletteSettings","emptyCellColor","tempcolorMapping","orderbyOffset","isCompact","updateLegendColorCollection","returnCollection","PaletterColor","getColorByValue","rbg","compareValue","cellSettings","tileType","bubbleType","fontModel","CurrentRect","basic","TextBasic","LineOption","strokewidth","dasharray","PathAttributes","DrawSvgCanvas","heatmap","isFromSeries","enableCanvasRendering","drawCanvasRectangle","canvasRenderer","drawCanvasCircle","drawCanvasPath","canvasDrawText","createWrapText","GradientColor","CanvasTooltip","GradientPointer","pathX1","pathY1","pathX2","pathY2","pathX3","pathY3","CurrentLegendRect","heatMapTitleFont","rectLabelFont","tooltipLabels","axisLabelSize","axisLabelInterval","dateTimeAxisLabelInterval","getTitleSize","getMaxLabelSize","calculateNumericAxisLabels","adaptorMin","adaptorMax","adaptorModule","isCellData","adaptiveXMinMax","adaptiveYMinMax","calculateCategoryAxisLabels","calculateDateTimeAxisLabel","showLabelOn","calculateLabelInterval","getTotalLabelLength","numberOfDays","years","AxisHelper","drawSvgCanvas","drawXAxisLine","compactInterval","axisInterval","tempintervel","lableStrtX","lableRect","labelInterval","lableStartY","CellSettings","cellColor","renderRectSeries","createSeriesGroup","tempBorder","tempX","tempY","dataXIndex","dataYIndex","cellSetting","tempHeight","tempRectPosition","rectPositionCollection","bubbleColorValue","getBubbleRadius","setTextAndColor","rectPosition","updateRectDetails","renderTileCell","updateLabelVisibleStatus","renderBubbleCell","renderSectorCell","checkLabelXDisplay","checkLabelYDisplay","tempCircleRadius","getRadiusBypercentage","showLabel","getFormatedText","themeCellTextStyle","containerTextObject","containerRectObject","adaptData","clonedDataSource","isColorValueExist","tempBubbleCollection","isJsonData","adaptorType","bubbleDataMapping","bubblePosition","curve","cX","cY","X1","Y1","tempcX","tempcY","pathBorderWidth","tempColor","sectorContibution","sector","tempMaxString","valueInPrecentage","isInversedBubbleSize","highlightSvgRect","tempID","tempRectHoverClass","enableCellHighlighting","getCurrentRect","firstRectDetails","heatMapSeries","rectX","rectY","hoverXAxisLabel","hoverXAxisValue","hoverYAxisLabel","hoverYAxisValue","TwoDimensional","tempCloneData","completeDataSource","tempVariable","dataLength","cloneDataIndex","minMaxDatasource","tempSizeArray","tempColorArray","processDataArray","minMaxVal","getMinMaxValue","internalArray","tempx","minMaxValue","getMinValue","getMaxValue","performSort","checkmin","maxLegendLabelSize","gradientScaleSize","segmentCollections","textWrapCollections","previousOptions","listPerPage","numberOfPages","listWidth","legendRect","lastList","navigationCollections","pagingRect","listInterval","legendLabelTooltip","labelXCollections","labelYCollections","legendXCollections","legendYCollections","legendRectPositionCollection","renderLegendItems","rectItems","legendRectScale","rectItemsSvg","enableSmartLegend","horizontalGradient","legendMinValue","legendMaxValue","gradientOptions","gradientColor","cgradientColors","gradientPercentage","linearGradient","rectItem","renderColorAxisGrid","renderSmartLegend","labelDisplayType","renderLegendLabel","legendScale","listRect","translategroup","calculateListPerPage","renderListLegendMode","smartLegendRect","legendY","dominantBaseline","textWrapWidth","legendRectPadding","textBasic","renderGradientPointer","legendPath","cellValue","removeGradientPointer","gradientPointer","paletteCollection","calculateListLegendBounds","perListWidth","numberOfRows","calculateLegendSize","legendTop","axisTitlePadding","titleSettings","calculateGradientScale","measureListLegendBound","rightArrowX","rightArrowY","pagingTextRect","rightArrowRect","leftArrowRect","leftOption","rightOption","calculateColorAxisGrid","legendPart","maxTextWrapLength","previousSegmentWidth","nextSegmentWidth","legendElement","renderLegendLabelTooltip","division","isNext","createTooltipDiv","currentLegendRect","tempTooltipText","HeatMap","heatMapAxis","twoDimensional","tempTooltipRectId","updateBubbleHelperProperty","processInitData","calculateMaxLength","completeAdaptDataSource","showHideTooltip","reRenderDatasource","constructDatasource","setRenderMode","legendVisibilityByCellType","renderSecondaryElement","heatMapTitle","isHeatmapRect","lastRectDetails","cellTextColor","heatMapMouseClick","heatMapMouseMove","heatMapMouseLeave","heatMapResize","xAxisMax","yAxisMax","svgCanvasRect","xLabel","yLabel","cellElement","isheatmapRect","showGradientPointer","tooltipTimer","isFadeout","legendTooltipTimer","gradientTimer","main","AdaptiveMinMax","reconstructedXAxis","reconstructedYAxis","processJsonTableData","processJsonCellData","constructAdaptiveAxis","processCellData","getNumericAxisCollection","getDateAxisCollection","loopIndex","tempAxisColl","dataIndex","adaptordata","tempDataCollection","xLabels","yLabels","currentDataXIndex","currentDataYIndex","reconstructData","xindex","getSplitDataValue","xDataMapping","yDataMapping","valueMapping","tempSplitDataCollection","tempSplitData","splitIndex","isShow","hetmapSeries","value2","argData","index.HeatMap","index.Adaptor","VisibleRange","Align","calculateAxesBounds","containerBounds","checkThermometer","checkAlign","calculateLineBounds","calculateTickBounds","calculateLabelBounds","calculatePointerBounds","calculateRangesBounds","labelBounds","prevAxis","checkPreviousAxes","major","minor","majorInterval","majorTickBounds","minorTickBounds","calculateMarkerBounds","calculateBarBounds","endVal","rangePalettes","Animations","performMarkerAnimation","markerType","currentPath","performBarAnimation","clipVal","lineY","pointerValue","startPointerVal","axisElements","gaugeAxesG","axisObject","drawRanges","drawTicks","axisAlign","tranX","nearAxisWidth","farAxisWidth","containerObject","tickID","tickBounds","tickPath","pointesGroup","pointerClipRectGroup","pointerID","gaugeResized","drawBarPointer","renderAnnotationElements","secondaryID","annotationGroup","createAnnotationTemplate","getTooltipLocation","tooltipPos","lineX","lineId","LinearGauge","renderGaugeElements","renderAxisElements","appendSecondaryElement","titleBounds","actualRect","moveOnPointer","mouseElement","gaugeOnMouseMove","svgPath","markerDrag","triggerDragEvent","barDrag","elementExist","index.LinearGauge","index.ListView","index.Virtualization","MinMax","GeoLocation","PolylineOption","PatternOptions","patternContentUnits","patternTransform","MapAjax","sendData","dataOptions","mapsTitleFont","mapsSubTitleFont","legendTitleFont","FabricTheme","BootstrapTheme","HighContrastTheme","ColorMappingSettings","HighlightSettings","NavigationLineSettings","showArrow","BubbleSettings","CommonTitleSettings","SubTitleSettings","TitleSettings","ShapeSettings","LayerSettings","isBaseLayer","Tile","MapsAreaSettings","layerRendering","shapeRendering","markerRendering","markerMouseMove","bubbleRendering","bubbleMouseMove","legendRendering","annotationRendering","itemSelection","itemHighlight","BingMap","getBingMap","subDomains","subDomain","quadKey","tileZoomLevel","digit","ColorMapping","getShapeColorMapping","colorValuePath","valuePath","shapeColor","colorMapping_1","LayerPanel","ajaxProcessCount","ajaxModule","ajaxResponse","measureLayerPanel","secondaryEle","isTileMap","tileSvgObject","layerGroup","processLayers","renderTileLayer","bing","currentFactor","panTileMap","generateTiles","markerModule","navigationLineModule","renderNavigation","translateLayerElements","layerType","bing_1","bingMapType","featureData","bbox","calculateRectBounds","calculatePathCollection","bubbleCalculation","bubbleSettings","bubbledata","renderData","groupElements","geometryData","coords","generatePoints","labelTemplateEle","currentShapeData","polyLineOptions","shapeID","drawingType","generateMultiPolygonPath","lineData","bubbleG","bubbleModule","bubble_1","renderBubble","bubbleIndex","coordinates","calculatePolygonBox","multiPolygonDatas","horFactor","verFactor","layerElement","baseTranslatePoint","baseScale","calculateRectBox","currentCoords","userLang","xcount","ycount","baseLayer","baseLayerIndex","urlTemplate","proxTiles","proxTiles_1","baseTile","subtile","arrangeTiles","tileElment","tiles_1","factorX","factorY","availSize","annotationXValue","annotationYValue","Maps","baseTileTranslatePoint","setTextStyle","setBackgroundValue","subtitleSettings","setLabelFont","mapsArea","layers_1","findBaseAndSubLayers","addTabIndex","processRequestJsonData","serverProcess","queryModule","processResponseJsonData","processAjaxRequest","localAjax","processType","renderMap","createTile","createZoomingToolbars","arrangeTemplate","zoomingChange","layerCollectionEle","tileRect","tileSvgRect","markerTemplateElements","templateGroupEle","toolBarGroup","alignToolBar","applyTransform","layerOffset","currentTemplate","templateOffset","mainLayer","parentRect","baseIndex","mainLayers","subLayers","subLayer","subLayerIndex","trimmedTitle","mapsOnClick","mapsOnDoubleClick","mouseDownOnMap","mouseMoveOnMap","mouseEndOnMap","mapsOnResize","markerClick","bubbleClick","bubbleMove","zoomByPosition","performZooming","addMarker","currentMarker","findVisibleLayers","isBubbleVisible","isMarkersVisible","isDataLabelVisible","isNavigationVisible","getBubbleVisible","isLayerVisible","isBubblevisible","istooltipVisible","layers_2","navigationLine_1","navigation","highlightSettings","markers_1","bubbles_1","bubble","Bubble","bubbleCollection","bubbleValue","getRatioOfBubble","shapePoints","midIndex","layer_1","bubbleElement","LayerIndex","BubbleIndex","DataIndex","transPoint","animationDelay","bubbleRadius","getbubble","trackElements","markerSVGObject","markerTemplateEle","markerIndex","markerData","markerID","shapeCustom","getMarker","rightWidth","leftWidth","heightTop","heightBottom","getDataLabel","shapeName","datasrcObj","labelpath","shapePoint","textLocation","eventargs","datalabel","trimmedLable","location1","xpositionEnds","xpositionStart","smartLabelMode","intersectionAction","border_1","NavigationLine","navigationEle","arrowColor","arrowSize","arrowSettings","arrowPosition","startArrow","endArrow","offSet","offSetValue","navigationGroup","arcId_1","radius_1","convertRadius","triId","legendBorderRect","interactiveLocation","legendItemRect","heightIncrement","widthIncrement","textMaxWidth","drawLegend","legendRenderingCollections","getLegends","getMarkersLegendCollections","legendTitle","titleTextStyle","legendItemStartX_1","legendItemStartY_1","legendMode","shapeLocation","labelAction","labelDisplayMode","arrangement","legendtitleSize","itemTextStyle","legendLength","position_1","textX_1","textY_1","itemStartX","itemStartY","maxTextWidth","itemTextSize","legendItem","legendTextSize","prvePositionX","nextPositionY","getPageChanged","prevPositionY","nextPositionX","DisplayText","ImageSrc","legendObj","getRangeLegendCollection","getEqualLegendCollection","getDataLegendCollection","shapeBorder","itemId","renderLegendBorder","shapeSize","shapeId","renderOptions_1","pagingGroup","pagingFont","pagingTextSize","leftPageX","rightPageX","pageTextX","leftPageElement","rightPageElement","rightPath","leftPath","leftPageOptions","leftRectPageOptions","rightPageOptions","rightRectPageOptions","pageTextOptions","trimTitle","getLegendAlignment","changeNextPage","imageSrc","rangeData_1","colorMapProcess_1","getLegendData","legendFill","getOverallLegendItemsCollection","legendData","newColllection","equalData_1","eqaulColorProcess_1","colorMapping_2","interactiveHandler","hoverId","renderInteractivePointer","invertedPointer","Highlight","addHighlight","mapHighlight","shapeIn","layerIndex_1","highlightMap","mouseClick","selectionsettings","selectionType","selectMap","enableMultiSelect","MapsTooltip","tootipArgs","markerIdex","markerFill","rectZoomingStart","handled","pinchFactor","newZoomFactor","prevLevel","prevScale","minBounds","maxBounds","mapTotalWidth","mapTotalHeight","translatePointX","translatePointY","getTileTranslatePosition","currentLevel","prevSize","performRectZooming","zoomCalculationFactor","setInteraction","newInteraction","lastScale","updateInteraction","fingers","touchCenter","newScale","newTileFactor","translatePointX_1","translatePointY_1","drawZoomRectangle","mouseDownPoints","mouseMovePoints","rectSVGObject","rectOption","animateTransform","templateCount","currentEle","markerTranslate","bubleIndex","dataLabelTranslate","markerTemplateElement","datalabelTemplateElemement","layerEle","y_1","panning","x_2","y_2","layerRect","panningXDirection","panningYDirection","toolBarZooming","tileZoomFactor","xSpacing","ySpacing","toolBarOrientation","toolbarsCollection","toolbars","toolBarLength","toolWidth","toolHeight","toolbar_1","currentToolbarEle","performToolBarAction","panColor","performZoomingByToolBar","zoomColor","panningStyle","toolBarSize","mapMouseWheel","mouseWheelZoom","doubleClickZoom","firstMove","pinchZooming","zoomRectElement","zoomOnClick","boundwidth","boundHeight","layerScale","topPos","index.Maps","index.Bubble","index.Marker","index.Highlight","index.MapsTooltip","index.NavigationLine","fields_1","CONTAINER","MESSAGE","ToastPosition","ButtonModelProps","ToastAnimations","ToastAnimationSettings","Toast","progressObj","intervalId","titleTemplate","contentTemplate","toastTemplate","toastObj","templateChanges","toastContainer","setPositioning","toastEle","setWidthHeight","personalizeToast","templateRendering","setProgress","appendToTarget","clearContentTemplate","clearTitleTemplate","clearToastTemplate","fetchEle","newestOnTop","destroyToast","tempVar","clo","clearProgress","clearContainerPos","customPosition","hideAnimate","toastClose","progressEle","setIcon","setTitle","closeBtn","CLOSEBTN","hideEta","maxHideTime","timeOutId","extendedTimeout","toastHoverAction","delayedToastProgress","showProgressBar","progressBarEle","updateProgressBar","titleEle","msgContainer","tempEle_1","appendMessageContainer","actionBtnContainer","actionBtn","btnDom","toastBeforeOpen","displayToast","clickToClose","isCloseIcon","showAnimate","toastOpen","PivotUtil","PivotEngine","savedFieldList","enableValueSoring","formatFields","calculatedFields","calculatedFormulas","valueAxis","saveDataHeaders","colFirstLvl","rowFirstLvl","colStartPos","enableValueSorting","headerCollection","rowHeaders","columnHeaders","rowHeadersCount","columnHeadersCount","valueMatrix","indexMatrix","rMembers","cMembers","memberCnt","pageInLimit","colHdrBufferCalculated","colValuesLength","rowValuesLength","slicedHeaders","enableSort","enableSorting","allowValueFilter","isValueFilterEnabled","formatSettings","calculatedFieldSettings","validateFilters","isExpandAll","isValueFiltersAvail","drilledMembers","isMutiMeasures","valueSortSettings","headerDelimiter","valueSortData","fillFieldMembers","updateSortSettings","generateValueMatrix","filterMembers","updateFilterMembers","generateGridData","getFormattedFields","isSort","isValueFilteringEnabled","dataFields","getCalculatedField","fieldList","isExcelFilter","dateMember","formattedMembers","members","updateTreeViewData","updateFieldList","lnt","aggregateType","formula","actualFormula","fieldKeys","calc","calcProperties","powerFunction","formulaType","lmt","aggregateValue","filterElements","filterElements_1","dataFields_1","indMat","dlen","fList","kLn","kl","isDataAvail","membersCnt","fmembersCnt","dl","mkey","ordinal","isDrilled","actualText","fillDrilledInfo","mem","vMat","keyLen","flList","tkln","sln","slt","filterRw","isInclude","getFilters","dln","indexObject","ilist","rln","rlt","isValidFilterField","allowLabelFilter","applyLabelFilter","frameFilterList","showLabelFilter","showDateFilter","showNumberFilter","allowLabelFiltering","isValidFilterElement","dataFields_2","getLabelFilterMembers","getDateFilterMembers","members_1","operand1","getParsedValue","operand2","members_2","members_3","isMemberInclude","isLabelFilter","fln","allowFil","final","iln","ilt","applyValueFiltering","valueFilter","rowFilterData","isValueFiltered","allMember","getFilteredData","mPos","getAggregateValue","isLevelFiltered","removefilteredData","valueFilteredData","validateFilteredParentData","formatSetting","valueSort","levelName","allMemberData","rowFilteredData","index_2","updateFramedHeaders","framedHeaders","dataHeaders","filteredHeaders","framedHeaders_1","dHeader","isHeaderAvail","validateFilteredHeaders","filterFramedHeaders","filteredHeaders_1","vHeader","isEmptyDataAvail","getIndexedHeaders","insertAllMembersCommon","pivotValues","valueContent","colheads","columnFilteredData","valuesCount","valueFilters","valueFields","filterSettings_1","isAvail","applyValueSorting","calculatePagingValues","insertTotalPosition","getHeaderData","insertSubTotals","getTableData","removeIndexProperties","isEngineUpdated","textArray","hText","mIndex","mType","getMember","sortByValueRow","vlen","insertAllMember","rCnt","cCnt","rowCnt","savedCell","spanCnt","indexObj","colCnt","rowPos","keyInd","parentMember","showPosition","rlen","decisionObj","childrens","memInd","headerValue","getOrderedIndex","orderedIndex","slicedHeader","summCell","lt_1","isValueSorting","rowCurrentPage","rowSize","exactStartPos","performSlicing","columnCurrentPage","columnSize","reformAxis","tnum","vlt","actCnt","isLeastNode","hpos","actpos","vln","calObj","vData","cln","clt","updateRowData","recursiveRowData","vcnt","colItmLn","sortText","lvl","ri","avgCnt","isMaxFirst","calcField","aggregateField","aggregatedValue","type_1","enginePopulating","enginePopulated","beforeExport","initSubComponent","treeViewUpdate","pivotButtonUpdate","initCalculatedField","DEVICE","ICON_DISABLE","TOGGLE_FIELD_LIST_CLASS","FIELD_LIST_CLASS","FIELD_LIST_FOOTER_CLASS","RIGHT_AXIS_PANEL_CLASS","AXIS_CONTENT_CLASS","AXIS_PROMPT_CLASS","PIVOT_BUTTON_WRAPPER_CLASS","PIVOT_BUTTON_CLASS","SORT_DESCEND_CLASS","FILTER_COMMON_CLASS","FILTERED_CLASS","DROP_INDICATOR_CLASS","INDICATOR_HOVER_CLASS","EDITOR_TREE_WRAPPER_CLASS","EDITOR_TREE_CONTAINER_CLASS","NODE_CHECK_CLASS","OK_BUTTON_CLASS","CANCEL_BUTTON_CLASS","ERROR_DIALOG_CLASS","DROPPABLE_CLASS","COLUMN_AXIS_CLASS","FILTER_AXIS_CLASS","GROUPING_BAR_CLASS","GROUP_ROW_CLASS","NO_DRAG_CLASS","SELECTED_NODE_CLASS","TEXT_CONTENT_CLASS","ADAPTIVE_FIELD_LIST_BUTTON_CLASS","ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS","ADD_ICON_CLASS","LIST_TEXT_CLASS","LIST_SELECT_CLASS","SELECTED_OPTION_ICON_CLASS","FILTER_INPUT_DIV_2_CLASS","COLLAPSE","TOOLTIP_HEADER","TOOLTIP_CONTENT","EDITOR_SEARCH_WRAPPER_CLASS","CALCINPUT","FORMAT","FORMULA","TREEVIEWOUTER","CALC_EDITED","FORMAT_DIALOG","FORMAT_CONDITION_BUTTON","FORMAT_COLOR_PICKER","VIRTUALTRACK_DIV","MOVABLECONTENT_DIV","MOVABLEHEADER_DIV","colPos","lastSpan","engine","engineModule","gridSettings","formatList","getFormatList","injectGridModules","getRowStartPos","frameDataSource","frameStackedHeaders","calculateGridWidth","bindGrid","cls.MOVABLEHEADER_DIV","cls.MOVABLECONTENT_DIV","vtr","cls.VIRTUALTRACK_DIV","virtualHeaderDiv","frameEmptyData","frameEmptyColumns","contextMenuClick","beforeCopy","beforePrint","setGroupWidth","resizeStop","onResizeStop","rowCellBoundEvent","borderRight","borderLeft","columnCellBoundEvent","excelColumnEvent","pdfColumnEvent","excelQueryCellInfo","excelRowEvent","pdfQueryCellInfo","pdfRowEvent","updateGridSettings","appendValueSortIcon","vSort","padding-top","resizeInfo","showGroupingBar","groupingBarModule","cls.GROUPING_BAR_CLASS","isValueCell","localizedText","cls.COLLAPSE","cls.ICON","pivotView","hdrdiv","dataContent","calculateColWidth","parWidth","colTotWidth","integrateModel","headerCnt","headerSplit","splitPos","actualCnt","colField","setSavedWidth","tmpSpan","innerModel","formatArray","vCnt","fCnt","exportHeaderEvent","exportContentEvent","FieldOptions","FieldListFieldOptions","ConditionalFormatSettings","CalculatedFieldSettings","FormatSettings","DrillOptions","ValueSortSettings","GridSettings","exportToExcel","dataCollections","events.beforeExport","workSheets","dataColl","colLen","actualrCnt","pivotCell","PDFExport","exportToPDF","eventParams","applyEvent","dataCollIndex","colLength","integratedCnt","isColHeader","pdfGridRow","localCnt","isEmptyRow","conditionalFormattingModule","KeyboardInteraction","pivotViewKeyboardModule","processTab","processEnter","getNextButton","allPivotButtons","cls.PIVOT_BUTTON_CLASS","gridFocus","nextButton","showFieldList","cls.TOGGLE_FIELD_LIST_CLASS","PivotContextMenu","renderContextMenu","onBeforeMenuOpen","onSelectContextMenu","dropClass","pivotCommon","dataSourceUpdate","addInternalEvents","onHorizondalScroll","onVerticalScroll","common","rowValues","exactSize","scrollPosObject","verticalSection","colValues","horizontalSection","timeOutObj","excessMove","removeInternalEvents","GroupingBarSettings","PivotView","PivotView_1","isCommonRequire","allowConditionalFormatting","allowCalculatedField","isAdaptive","beforeRender","setToolTip","onBeforeTooltipOpen","grandTotal","noValue","rowAxisPrompt","columnAxisPrompt","valueAxisPrompt","filterAxisPrompt","calculatedField","createCalculatedField","invalidFormula","dropText","dropTextMobile","warning","ok","allFields","addToRow","addToColumn","addToValue","addToFilter","emptyData","fieldExist","confirmText","noMatches","formulaField","dragField","enterValue","chooseDate","BeforeOrEqualTo","AfterOrEqualTo","labelTextContent","dateTextContent","valueTextContent","Equals","DoesNotEquals","BeginWith","DoesNotBeginWith","DoesNotEndsWith","DoesNotContains","GreaterThanOrEqualTo","LessThanOrEqualTo","NotBetween","And","NotEquals","AllValues","conditionalFormating","formatLabel","isDragging","updateClass","events.initSubComponent","generateData","renderPivotGrid","onContentReady","axisFieldModule","virtualscrollModule","applyFormatting","isRefreshGrid","events.enginePopulated","cls.ROOT","cls.DEVICE","onDrill","fieldAvail","memIndex","pivotFieldListModule","fieldListSpinnerElement","isEmptyGrid","virtualDiv","movableTable","vHeight","vWidth","mCnt","cls.TOOLTIP_HEADER","cls.TOOLTIP_CONTENT","getRowText","getColText","rowText","colText","CellClicked","setGridRowWidth","cellClick","renderEmptyGrid","initEngine","events.enginePopulating","format_1","conditionalFormatSettings","checkCondition","conditions","isHex","colourNameToHex","head","insertRule","conditionalValue1","conditionalValue2","CommonKeyboardInteraction","shiftF","shiftS","processSort","processDelete","cls.FILTER_COMMON_CLASS","EventBase","updateSorting","filterDialog","dialogPopUp","cls.SORT_DESCEND_CLASS","sortObj","getSortItemByName","newSortObj","updateFiltering","fieldCaption","filterItems","getFilterItemByName","popupTarget","createFilterDialog","sortObjects","filterObjects","getFormatItemByName","formatObjects","searchTreeNodes","treeObj","searchList","nonSearchList","checkedStatus","NodeStateModified","onStateModified","droppedClass","nodeDropped","cls.DROPPABLE_CLASS","droppedPosition","btnElement","cls.COLUMN_AXIS_CLASS","cls.FILTER_AXIS_CLASS","errorDialog","createErrorDialog","getButtonPosition","targetBtn","cls.PIVOT_BUTTON_WRAPPER_CLASS","axisPanel","pivotButtons","DataSourceUpdate","dataSourceItem","removeFieldFromReport","getNewField","isDataSource","ErrorDialog","cls.ERROR_DIALOG_CLASS","errorPopUp","closeErrorDialog","cls.OK_BUTTON_CLASS","removeErrorDialog","FilterDialog","editorDialog","data-fieldName","getFilterObject","allowExcelLikeFilter","createTreeView","renderMode","cls.ICON_DISABLE","closeFilterDialog","cls.CANCEL_BUTTON_CLASS","removeFilterDialog","createTabMenu","updateCheckedState","editorTreeWrapper","cls.EDITOR_TREE_WRAPPER_CLASS","cls.EDITOR_SEARCH_WRAPPER_CLASS","editorSearch","selectAllWrapper","selectAllContainer","treeViewContainer","cls.EDITOR_TREE_CONTAINER_CLASS","promptDiv","cls.EMPTY_MEMBER_CLASS","eventBase","memberTreeView","disabledList","allMemberSelect","nodeChecking","validateTreeNode","formatObj","cls.SELECTED_OPTION_ICON_CLASS","types_1","createCustomFilter","valueOptions","measures","selectedOption","selectedValueIndex","betweenOperators","operatorCollection","operatorCollection_1","cls.FILTER_DIV_CONTENT_CLASS","data-type","data-operator","data-measure","data-value1","data-value2","textContentdiv","betweenTextContentdiv","cls.BETWEEN_TEXT_DIV_CLASS","separatordiv","filterWrapperDiv1","optionWrapperDiv1","optionWrapperDiv2","filterWrapperDiv2","dropOptionDiv1","dropOptionDiv2","inputDiv1","inputDiv2","cls.FILTER_INPUT_DIV_2_CLASS","inputField1","inputField2","createElements","optionDiv1","optionDiv2","vDataSource","oDataSource","valueIndex","popupInstance","updateInputValues","disabledClasses_1","inputObj1_1","inputObj2_1","inputObj1_2","inputObj2_2","inputObj1","inputObj2","visibleNodes","uncheckedNodes","getUnCheckedNodes","getCheckedNodes","cls.NODE_CHECK_CLASS","treeNodes","isFilterField","PivotCommon","pivotEngine","nodeStateModified","DialogRenderer","fieldListWrappper","renderAdaptiveLayout","renderFieldListDialog","unWireDialogEvent","wireDialogEvent","renderStaticLayout","createCalculatedButton","toggleFieldList","fieldListDialog","showFieldListDialog","cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS","cls.ADD_ICON_CLASS","showCalculatedField","cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS","onCloseFieldList","removeFieldListIcon","cls.FIELD_LIST_FOOTER_CLASS","selectedNodes_1","adaptiveElement","layoutFooter","createAxisTable","events.initCalculatedField","createAddButton","calculatedButton","calculateField","cls.CALCULATED_FIELD_CLASS","calculatedFieldModule","footerContainer","fieldListButton","axisWrapper","cls.FIELD_LIST_CLASS","axisContent","cls.AXIS_CONTENT_CLASS","axisPrompt","cls.AXIS_PROMPT_CLASS","dialogRenderer","activeindex","treeViewModule","onShowFieldList","TreeViewRenderer","renderTreeDialog","fieldTable","treeHeader","treeViewElement","centerDiv","axisHeader","renderTreeView","nodeChecked","nodeStateChange","nodeDragStart","nodeDragStop","getTreeUpdate","fieldDialog","closeTreeDialog","onFieldAdd","cls.LIST_TEXT_CLASS","cls.SELECTED_NODE_CLASS","cls.NO_DRAG_CLASS","isNodeDropped","isDropped","getButton","droppableElement","sourcePosition","dropPosition","droppableButton","cls.DROP_INDICATOR_CLASS","cls.INDICATOR_HOVER_CLASS","cls.TEXT_CONTENT_CLASS","pivotFieldList","cls.LIST_SELECT_CLASS","liElements_1","refreshTreeView","currentFieldSet","currentFieldSet_1","events.treeViewUpdate","AxisTableRenderer","axisTable","leftAxisPanel","rightAxisPanel","cls.RIGHT_AXIS_PANEL_CLASS","renderAxisTable","fieldLabels","axisTitleWrapper","cls.AXIS_ICON_CLASS","getIconupdate","localePrompt","updateDropIndicator","PivotButton","pivotButtonModule","renderPivotButton","valuePos","showValuesButton","pivotGridModule","buttonWrapper","data-tag","data-uid","isvalue","dropIndicatorElement","dropLastIndicatorElement","dragWrapper","createButtonDragIcon","createSortOption","createFilterOption","groupingBarSettings","showRemoveIcon","createDraggable","createDragClone","onDragStart","onDragging","onDragStop","pivotButton","dragElement","showSortIcon","filterCLass","cls.FILTERED_CLASS","showFilterIcon","isButtonDropped","droppableTarget","bindDialogEvents","updateDialogButtonEvents","updateFilterState","updateCustomFilter","filterItem","refreshPivotButtonState","removeDataSourceSettings","removeButton","unCheckedNodeCount","selectedButton","pivotButtons_1","events.pivotButtonUpdate","AxisFieldRenderer","createPivotButtons","axisTableModule","PivotFieldList","staticFieldList","dropFilterPrompt","dropColPrompt","dropRowPrompt","dropValPrompt","addPrompt","adaptiveFieldHeader","centerHeader","captionData","fieldListRender","getFieldCaption","isTreeViewRefresh","CALC","CalculatedField","existingReport","newFields","isFieldExist","formulaText","currentFieldName","confirmPopUp","displayMenu","dropField","fieldClickHandler","cls.FORMAT","cls.CALC_EDITED","cls.CALCINPUT","curMenu","openContextMenu","selectContextMenu","beforeMenuOpen","applyFormula","report","cField","createConfirmDialog","addFormula","getFieldListData","fieldDropped","textCovered","cursorPos","textBeforeText","textAfterText","renderDialogElements","outerDiv","cls.FORMULA","accordDiv","addBtn","inputDiv","fieldTitle","wrapDiv","cls.TREEVIEWOUTER","formulaTitle","dropDiv","okBtn","renderMobileLayout","nodeCollapsing","dragItem","nodeClicked","drawNode","drawTreeNode","createTypeContainer","data-ftxt","getAccordionData","cancelBtnClick","cls.FLAT","accordion","expanding","addBtnClick","createCalculatedFieldDialog","renderDialogLayout","keyboardEvents","replaceFormula","FieldList","initiateModule","Common","commonModule","initiateCommonModule","AxisFields","cls.GROUP_ROW_CLASS","GroupingBar","touchObj","renderLayout","groupingTable","rowAxisPanel","cls.AXIS_ROW_CLASS","columnAxisPanel","cls.AXIS_COLUMN_CLASS","valueAxisPanel","cls.AXIS_VALUE_CLASS","filterAxisPanel","cls.AXIS_FILTER_CLASS","rowPanel","columnPanel","cls.GROUP_COLUMN_CLASS","valuePanel","cls.GROUP_VALUE_CLASS","filterPanel","cls.GROUP_FILTER_CLASS","axisPanels_1","colGroupElement","emptyHeader","rightAxisPanelWidth","rightPanelHeight","topLeftHeight","columnRows","trCell","colHeight","columnRows_1","rowHeader_1","rightAxisWidth","emptyRowHeader","groupHeight","columnRows_2","rowHeader_2","lastButton","lastButtonWidth","buttonWidth","rowHeaderTable","rowContentTable","colwidth","valueColWidth","setColWidth","dropIndicatorUpdate","ConditionalFormatting","fieldsDropDown","conditionsDropDown","refreshConditionValues","addFormat","cls.FORMAT_ROUND_BUTTON","cls.FORMAT_CONDITION_BUTTON","cls.FLAT_CLASS","cls.FORMAT_DIALOG","createDialogElements","renderDropDowns","renderColorPicker","tRow","valuelabel","measureDropdown","measureInput","conditionDropdown","conditionInput","cls.INPUT","valuespan","formatlabel","fontNameDropdown","fontNameInput","fontSizeDropdown","fontSizeInput","colorPicker1","colorPicker2","valuePreview","cls.FORMAT_COLOR_PICKER","toggleBtn","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","greenyellow","honeydew","hotpink","indianred ","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellowgreen","showConditionalFormattingDialog","index.PivotView","index.GroupingBar","index.FieldList","index.CalculatedField","index.ConditionalFormatting","maxZindex","makeEle","replaceTheme","ensureTemplate","iframeMouseDown","toolbarClick","refreshBegin","toolbarUpdated","bindOnEnd","htmlToolbarClick","markdownToolbarClick","destroyColorPicker","toolbarRenderComplete","enableFullScreen","disableFullScreen","dropDownSelect","beforeDropDownItemRender","execCommandCallBack","imageToolbarAction","linkToolbarAction","insertLink","updateToolbarItem","insertCompleted","imageLink","imageAlt","imageSize","sourceCode","updateSource","beforeDropDownOpen","selectionSave","selectionRestore","expandPopupClick","sourceCodeMouseDown","editAreaClick","colorPickerChanged","tableColorPickerChanged","focusChange","getSelectedHtml","renderInlineToolbar","rtlMode","tableToolbarAction","checkUndo","CLS_SCRIPT_SHEET","CLS_STYLE_SHEET","CLS_TOOLBAR","CLS_INLINE","CLS_FULL_SCREEN","CLS_QUICK_DROPDOWN","CLS_INLINE_POP","CLS_INLINE_DROPDOWN","CLS_DROPDOWN_POPUP","CLS_DROPDOWN_ICONS","CLS_DROPDOWN_ITEMS","CLS_DROPDOWN_BTN","CLS_RM_WHITE_SPACE","CLS_IMGRIGHT","CLS_IMGLEFT","CLS_IMGCENTER","CLS_IMGBREAK","CLS_CAPTION","CLS_CAPINLINE","CLS_IMGINLINE","CLS_EXPAND_OPEN","CLS_RTE_ELEMENTS","CLS_COLOR_CONTENT","CLS_RTE_READONLY","CLS_TABLE_SEL","CLS_TB_DASH_BOR","CLS_TB_ALT_BOR","CLS_TB_COL_RES","CLS_TB_ROW_RES","CLS_TB_BOX_RES","ToolbarType","templateItems","tools","alignments","justifyleft","justifycenter","justifyright","justifyfull","fontname","backgroundcolor","clearformat","clearall","unorderedlist","orderedlist","outdent","createlink","openlink","editlink","removelink","createtable","removetable","openimagelink","editimagelink","removeimagelink","insertlink","alttext","dimension","fullscreen","maximize","minimize","lowercase","uppercase","sourcecode","viewside","insertcode","tableheader","tableremove","tablerows","tablecolumns","tablecellbackground","tablecellhorizontalalign","tablecellverticalalign","tableeditproperties","alignmentItems","imageAlignItems","imageDisplayItems","tableRowsItems","tableColumnsItems","TableCellVerticalAlignItems","TableStyleItems","justifyLeft","justifyCenter","justifyRight","justifyFull","unorderedList","orderedList","createLink","openLink","editLink","removeLink","altText","lowerCase","upperCase","insertCode","linkTooltipLabel","linkWebUrl","linkTitle","linkurl","linkOpenInNewWindow","linkHeader","dialogInsert","dialogCancel","dialogUpdate","imageHeader","imageLinkHeader","mdimageLink","imageUploadMessage","imageDeviceUploadMessage","imageAlternateText","alternateHeader","imageCaption","imageSizeHeader","textPlaceholder","tblhead","inserttablebtn","tabledialogHeader","cellpadding","tableCellHorizontalAlign","tableCellVerticalAlign","removeTable","tableRemove","tableCellBackground","tableEditProperties","insertColumnLeft","insertColumnRight","insertRowBefore","insertRowAfter","insertcolumnleft","insertcolumnright","deletecolumn","aligntop","alignmiddle","alignbottom","insertrowbefore","insertrowafter","deleterow","ToolbarRenderer","popupOverlay","onPopupOverlay","toolbarBeforeCreate","toolbarCreated","toolbarClicked","events.toolbarClick","dropDownSelected","events.dropDownSelect","events.beforeDropDownItemRender","events.selectionSave","dropDownClose","events.selectionRestore","renderToolbar","rteToolbarObj","beforeCreate","renderDropDownButton","inlineMode","events.beforeDropDownOpen","classes.CLS_QUICK_DROPDOWN","setIsModel","popupContainer","paletteSelection","dropDownArgs","colorbox","borderBottomColor","renderColorPickerDropDown","currentDropdown","colorpickerValue","editorManager","nodeSelection","getRange","startContainer","events.tableColorPickerChanged","events.colorPickerChanged","onmousedown","quickToolbarSettings","beforeTileRender","colorPickerArgs","iosDevices","isIDevice","beforeModeSwitch","toolbarPanel","BaseToolbar","renderFactory","events.rtlMode","setRtl","getTemplateObject","getID","tbItems_1","getToolbarOptions","toolbarRenderer","DropDownButtons","initializeInstance","dropdownContent","containerType","tbElement","model.templateItems","classes.CLS_DROPDOWN_BTN","formatItem","classes.CLS_DROPDOWN_POPUP","classes.CLS_DROPDOWN_ITEMS","fontItem","imageAlignmentDropDown","imageDisplayDropDown","rowDropDown","columnDropDown","verticalAlignDropDown","tableStylesDropDown","tableRowsDropDown","model.tableRowsItems","tableColumnsDropDown","model.tableColumnsItems","tableCellVerticalAlignDropDown","model.TableCellVerticalAlignItems","displayDropDown","model.imageDisplayItems","imageAlignDropDown","classes.CLS_DROPDOWN_ICONS","model.imageAlignItems","tableSettings","removeDropDownClasses","destroyDropDowns","events.iframeMouseDown","onIframeMouseDown","ToolbarAction","renderSelection","events.htmlToolbarClick","events.markdownToolbarClick","isToolbar","isTransformChild","editableElement","getEditPanel","editPanel","toolbarBindEvent","keyBoardModule","getToolbarElement","toolBarKeyDown","keyConfig","createToolbarElement","enableFloating","tbWrapper","getToolbarMode","tbMode","checkToolbarResponsive","addFixedTBarClass","events.renderColorPicker","checkIsTransformChild","transformElements","toggleFloatClass","scrollParent","isBody","isFloat","floatOffset","floatingToolbarOffset","tbHeight","getToolbarHeight","getExpandTBarPopHeight","scrollParentRelativeTop","trgHeight","bodyStyle","targetTop","scrollParentYOffset","scrollParentRect","scrollParentTop","events.renderInlineToolbar","refreshToolbarOverflow","removeFixedTBarClass","showFixedTBar","hideFixedTBar","model.tools","targetItem","addTBarItem","updateToolbarStatus","fullScreenModule","showFullScreen","hideScreen","hideFullScreen","getBaseToolbar","enableTBarItems","undoRedoManager","getUndoStatus","removeTBarItems","popHeight","expandPopup","classes.CLS_EXPAND_OPEN","classes.CLS_TOOLBAR","isToolbarDestroyed","destroyToolbar","unWireScrollElementsEvents","events.destroyColorPicker","focusChangeHandler","dropDownBeforeOpenHandler","toolbarMouseDownHandler","toolbarActionModule","events.bindOnEnd","events.toolbarUpdated","events.refreshBegin","onRefresh","events.enableFullScreen","events.disableFullScreen","events.updateToolbarItem","events.expandPopupClick","events.focusChange","events.mouseDown","events.sourceCodeMouseDown","wireScrollElementsEvents","]","[","ColorPickerInput","renderColorPickerInput","suffixID","fontNode","classes.CLS_RTE_ELEMENTS","fontColorPicker","fontColorDropDown","backgroundColorPicker","backgroundColorDropDown","events.toolbarRenderComplete","BaseQuickToolbar","isDOMElement","popupRenderer","dropDownButtons","colorPickerObj","appendPopupContent","toolbarElement","popupType","classes.CLS_INLINE_POP","popupId","stringItems","quickTBarObj","imgWrapper","classes.CLS_RM_WHITE_SPACE","targetOffsetTop","parentOffsetTop","parentData","editTop","tBarElementHeight","editHeight","popWidth","parentTop","contentTop","windowY","windowHeight","windowWidth","bodyRightSpace","editPanelTop","editPanelHeight","bodyRight","toolbarAvail","expTBHeight","tBarHeight","iframeSettings","contentWindow","disableToolbarItem","enableToolbarItem","showPopupData","viewSourcePanel","sourceCodeModule","getViewPanel","removeEleFromDOM","addQTBarItem","removeQTBarItem","getBaseToolbarObject","PopupRenderer","popupPanel","QuickToolbar","formatItems","formattedItems","getQTBarOptions","popType","createQTBar","qTBar","initializeQuickToolbars","quickToolbarModule","onMouseDown","isRTE","renderQuickToolbars","linkQTBar","imageQTBar","textQTBar","tableQTBar","LinkToolbar","TextToolbar","ImageToolbar","TableToolbar","renderInlineQuickToolbar","inlineQTBar","InlineToolbar","showInlineQTBar","hideInlineQTBar","hideQuickToolbars","deBounce","deBouncer","isIFrame","onSelection","inlineQTBarMouseDownHandler","getInlineBaseToolbar","wireInlineQTBarEvents","events.keyDown","unWireInlineQTBarEvents","renderCount","appendCount","charCountBackground","htmlLength","restrict","showCharCount","arrayKey","events.sourceCode","events.updateSource","MarkdownSelection","getLineNumber","textarea","getAllParents","getSelectedLine","getLine","getSelectedParentPoints","selectedPoints","selectedLine","startLength","isStartWith","replaceSpecialChar","getRegex","syntax","getSelectedInlinePoints","MarkdownToolbarStatus","toolbarStatus","inlinecode","onRefreshHandler","parentsLines","documentNode","isListsApplied","mdSelectionFormats","isAppliedCommand","listTags","formatTags","checkLine","selectionDirection","parentLines","firstPrevText","lastNextText","ExecCommandCallBack","events.execCommandCallBack","commandCallBack","FORMAT_TYPE","KEY_DOWN_HANDLER","KEY_UP_HANDLER","Formatter","rangeCount","getRangeAt","getAncestorNode","commonAncestorContainer","itemCollection","CONSTANT.actionBegin","getUndoRedoStack","clipboardAction","CONSTANT.checkUndo","enableUndo","onKeyHandler","CONSTANT.execCommandCallBack","CONSTANT.actionComplete","editorMode","CONSTANT.insertCompleted","isNotify","undoRedoStack","LISTS_COMMAND","selectionCommand","LINK_COMMAND","CLEAR_COMMAND","MDLists","markdownSelection","CONSTANT.LISTS_COMMAND","applyListsHandler","EVENTS.KEY_DOWN_HANDLER","EVENTS.KEY_UP_HANDLER","tabKey","enterKey","addedLength","isNotFirst","isNotFirstLine","getListRegex","getAction","tabSpaceLength","splitTab","getTabSpace","curTabSpace","prevTabSpace","ol","OL","UL","tabSpace","appliedLine","configKey","MDFormats","EVENTS.FORMAT_TYPE","applyFormats","cleanFormat","applyCodeBlock","CONSTANT.selectionCommand","clearRegex","MDSelectionFormats","applyCommands","isMatch","matchText","InlineCode","StrikeThrough","singleCharRegx","multiCharRegx","isFormat","splitText","splitAt","cmdB","cmdI","beforeText","afterText","isApplied","textReplace","repStart","repEnd","repStartText","replaceAt","repEndText","regxB","repText","regxTemp","regTest","markdownFormatTags","h6","h5","h4","h3","h1","blockquote","markdownSelectionTags","UpperCase","LowerCase","markdownListsTags","htmlKeyConfig","toolbar-focus","insert-link","insert-image","outdents","html-source","full-screen","decrease-fontsize","increase-fontsize","justify-center","justify-full","justify-left","justify-right","clear-format","ordered-list","unordered-list","markdownKeyConfig","UndoRedoCommands","undoRedoSteps","undoRedoTimer","onAction","changEle","removedContent","MDLink","CONSTANT.LINK_COMMAND","ClearFormat","CONSTANT.CLEAR_COMMAND","replaceRegex","clearSelectionTags","selectionTags","expString","regExp","startExp","endExp","clearFormatTags","MarkdownParser","listObj","linkObj","clearObj","editorKeyDown","editorKeyUp","exeValue","MarkdownFormatter","updateFormatter","editElement","MarkdownRender","rteID","rteObj","MarkdownEditor","saveSelection","onToolbarClick","events.selectAll","events.getSelectedHtml","onSelectionSave","onSelectionRestore","events.insertLink","events.insertImage","toolbarUpdate","IMAGE","TABLE","INSERT_COLUMN","DELETECOLUMN","REMOVETABLE","TABLEHEADER","TABLE_VERTICAL_ALIGN","ALIGNMENT_TYPE","BLOCK_TAGS","IGNORE_BLOCK_TAGS","TABLE_BLOCK_TAGS","SELECTION_TYPE","INSERTHTML_TYPE","NodeSelection","startNodeName","endNodeName","saveInstance","cloneRange","documentFromRange","getNodeArray","endContainer","docElement","isChildNode","getNodeCollection","getParentNodeCollection","getParentNodes","getSelectionNodeCollection","getSelectionNodes","getInsertNodeCollection","getInsertNodes","setRangePoint","isvalid","constant","setSelectionText","setEnd","setSelectionContents","setSelectionNode","getSelectedNodes","insertParentNode","surroundContents","setCursorPoint","markerClassName","startSelection","DOMNode","currentDocument","isBlockNode","CONSTANT.BLOCK_TAGS","isLink","blockParentNode","rawAttributes","rawAttr","orderRawAttr","attrKey","attrValue","clearAttributes","openTagString","closeTagString","createTagString","parseHTMLFragment","createContextualFragment","referenceNode","wrapInner","unWrap","unWrapNode","getSelectedNode","TEXT_NODE","nodeFinds","existNodes","isEditorArea","getPreviousNode","saveMarker","startTextNode","endTextNode","setMarker","existNode","CONSTANT.IGNORE_BLOCK_TAGS","createTempNode","blockNodes","collectionNodes","ignoreTableTag","listNodes","CONSTANT.TABLE_BLOCK_TAGS","Lists","domNode","ignoreDefault","revertList","revertClean","nestedList","cleanNode","prevSibling","siblingList","nestedElement","listsNodes","applyLists","isRevert","checkLists","openTag","closeTag","replaceHTML","collectionString","nodesTemp","liParents","contentNodes","viewNode","classAttr","nodeInnerHtml","emptyLi","emptyUl","Formats","formatsNodes","cleanFormats","replaceTag","ignoreAttr","InsertMethods","WrapBefore","AppendBefore","Wrap","unwrap","NodeCutter","GetSpliceNode","SplitNode","setStartBefore","setEndAfter","extractContents","spliceEmptyNode","GetCursorStart","GetCursorRange","cursorRange","TrimLineBreak","GetCursorNode","InsertHtml","insertNode","nodeCutter","closestPrantNode","closestEle","sibNode","lasNode","searchEle","LinkCommand","selectParent","Alignments","JustifyLeft","JustifyCenter","JustifyRight","JustifyFull","CONSTANT.ALIGNMENT_TYPE","alignmentNodes","text-align","Indents","indentValue","applyIndents","indentsNodes","parentNodes","indentsValue","ImageCommand","CONSTANT.IMAGE","createImage","imgEle","TableCommand","CONSTANT.TABLE","CONSTANT.INSERT_COLUMN","CONSTANT.DELETECOLUMN","CONSTANT.REMOVETABLE","CONSTANT.TABLEHEADER","CONSTANT.TABLE_VERTICAL_ALIGN","tableVerticalAlign","tblBody","tdWid","curRow","tabCell","allRows","colTemplate","seletedTable","cellCount","createTHead","th","deleteTHead","IsFormatted","getFormattedNode","getFormatParent","isFormattedNode","isUnderline","isStrikethrough","isSuperscript","isSubscript","isFontColor","isFontName","isFontSize","isBackgroundColor","inlineTags","SelectionCommands","domSelection","isFormatted","isCursor","isFontStyle","cursorNode","insertCursorNode","formatNode","removeFormat","cursorNodes","cursorFormat","getInsertNode","splitNode","GetFormatNode","toLocaleUpperCase","SelectionBasedExec","CONSTANT.SELECTION_TYPE","InsertHtmlExec","CONSTANT.INSERTHTML_TYPE","applyHtml","exactNodes","cloneSelectNodes","clearInlines","reSelection","cloneParentNodes","clearBlocks","selectionNodes","endIndexNode","spliceParent","removeParent","parentIndex","NONVALID_TAGS","NONVALID_PARENT_TAGS","removeInlineParent","ClearFormatExec","applyClear","UndoRedoManager","EditorManager","alignmentObj","indentsObj","imgObj","selectionObj","inserthtmlObj","tableObj","HTMLFormatter","statusCollection","ToolbarStatus","formatCollection","isOrderedList","isUnorderedList","isAlignment","isFormats","HtmlToolbarStatus","rteContent","contenteditable","IframeContentRender","iFrameContent","iframe","contentDocument","HtmlEditor","rangeCollection","nodeSelectionObj","colorPickerModule","events.selectRange","enableTabKey","textCont","spaceLink","selectNodeEle","urlText","selectParentEle","events.imageToolbarAction","events.linkToolbarAction","events.tableToolbarAction","linkDialog","imageDialog","events.createTable","events.insertCompleted","showLinkQuickToolbar","onToolbarAction","events.editAreaClick","editAreaClickHandler","quickToolObj","linkTop","linkPos","hideLinkQuickToolbar","inputDetails","selectText","linkWebAddress","linkDisplayText","linkTooltip","urlPlace","textPlace","linkDialogEle","linkContent","contentElem","linkTarget","linkUrl","linkOpenLabel","checkBoxObj","linkInsert","linkCancel","selectObj","selfLink","cancelDialog","checkUrl","linkEle","isUrl","linkUpdate","showImageQuickToolbar","deleteImg","events.imageLink","insertImgLink","events.imageAlt","insertAltText","events.imageSize","alignmentSelect","afterRender","events.paste","imagePaste","imageClick","events.checkUndo","insertImageSettings","resizeBtnInit","preventDefaultResize","imgResizeDiv","imageResize","getPointY","resizeBtnStat","botLeft","botRight","imgResizePos","resizeImgDupPos","imgWid","imgHgt","borWid","devWid","setAspectRatio","expectedX","expectedY","resizeByPercent","pixToPerc","imgDupMouseMove","imgDupPos","openImgLink","editImgLink","removeImgLink","insertEle","captionEle","remvoeResizEle","justifyImageLeft","justifyImageCenter","justifyImageRight","imageWithLinkQTBarItemUpdate","newItems","hideImageQuickToolbar","imagDialog","linkWrap","inputLink","linkargs_1","selfImage","altWrap","altHeader","inputAlt","altArgs_1","insertAlt","classes.CLS_CAPTION","imgWrap","imgInner","imgCaption","classes.CLS_IMGINLINE","classes.CLS_CAPINLINE","classes.CLS_IMGBREAK","classes.CLS_IMGLEFT","classes.CLS_IMGRIGHT","classes.CLS_IMGCENTER","imgSizeHeader","dialogContent","imgsizeInput","insertSize","imgDialog","imgInsert","imglinkCancel","imgHeader","insertImageUrl","imageUrlPopup","imgUrl","placeUrl","inputUrl","uploadUrl","matchUrl","imgSizeWrap","getClientRects","widthNum","heightNum","dialogEle","imgUpload","linkHeaderText","uploadParentEle","deviceImgUpMsg","imgUpMsg","btnEle","browserMsg","fileSelect","uploadEle","uploadObj","allowedTypes","removing","dataurl","mime","bstr","u8arr","ViewSource","onInitialEnd","updateSourceCode","CONSTANT.KEY_DOWN_HANDLER","getSourceCode","previewKeyDown","previewElement","wireBaseKeyDown","unWireBaseKeyDown","updateValueData","invokeChangeEvent","editHTML","moveEle","insertTableDialog","docClick","dropdownSelect","cellSelect","setBGColor","resizeHelper","addColumn","removeRowColumn","tableStyles","removeResizeEle","tabSelection","tableArrowNavigation","editTable","classes.CLS_TB_DASH_BOR","classes.CLS_TB_ALT_BOR","classes.CLS_TABLE_SEL","selText","hideTableQuickToolbar","range_1","tableCellSelect","tblHeader","tableCellLeave","tableCellClick","tableInsert","editdlgObj","curTable","tableResizeEleCreation","colReEle","classes.CLS_TB_COL_RES","data-col","unselectable","rowReEle","classes.CLS_TB_ROW_RES","data-row","tableReBox","classes.CLS_TB_BOX_RES","columnEle","rowEle","tableBox","cellColl","actualwid","totalwid","tabkey","delKey","insertbtn","drawTable","data-column","data-cell","editContent","tableDlgContent","dlgContent","tableCellDlgContent","customTable","tableColumn","tableWrap","columnTextBox","rowTextBox","tableDialog","widthVal","executeGroup","strikeThrough","formatBlock","heading","insertHTML","insertHorizontalRule","insertBrOnReturn","insertOrderedList","insertUnorderedList","ToolbarSettings","ImageSettings","TableSettings","QuickToolbarSettings","FontFamily","FontSize","FontColor","BackgroundColor","Resources","IFrameSettings","InlineMode","FullScreen","scrollableParent","classes.CLS_FULL_SCREEN","toggleParentOverflow","RichTextEditor","isFocusOut","updateEnable","setContainer","originalElement","rteOutterWrapper","executeCommand","commandName","decode","RTERender","allowedKeys","onCopy","onCut","placeHolderWrapper","removeHtmlAttributes","classes.CLS_RTE_READONLY","updatePanelValue","countModule","frameSetting","scripts","classes.CLS_SCRIPT_SHEET","removeSheets","classes.CLS_STYLE_SHEET","setIframeSettings","enableHtmlEncode","srcList","updateReadOnly","printArgs","removeToolbarItem","styleSrc","scriptSrc","InjectSheet","scriptSheet","scriptEle","createScriptElement","styleEle","createStyleElement","rel","compiledTemplate","heightValue","rteHeight","expandPopHeight","getHtml","showSourceCode","preventImgResize","defaultResize","resizeHandler","cloneValue","scrollParentElements","index.RichTextEditor","index.Link","index.Image","index.Count","index.QuickToolbar","index.HtmlEditor","index.MarkdownEditor","index.Table","navigating","renderCell","eventClick","eventRendered","scrollUiUpdate","documentClick","cellMouseDown","tapHoldReady","DISABLE_CLASS","TABLE_CONTAINER_CLASS","ALLDAY_CELLS_CLASS","ALLDAY_ROW_CLASS","CONTENT_TABLE_CLASS","WORK_CELLS_CLASS","WORK_HOURS_CLASS","DATE_HEADER_WRAP_CLASS","DATE_HEADER_CONTAINER_CLASS","HEADER_CELLS_CLASS","CURRENT_DAY_CLASS","CURRENTDATE_CLASS","CURRENT_PANEL_CLASS","PREVIOUS_PANEL_CLASS","TRANSLATE_CLASS","RESOURCE_GROUP_CELLS_CLASS","RESOURCE_TEXT_CLASS","RESOURCE_COLUMN_WRAP_CLASS","RESOURCE_PARENT_CLASS","RESOURCE_EXPAND_CLASS","RESOURCE_COLLAPSE_CLASS","RESOURCE_TREE_ICON_CLASS","RESOURCE_CELLS_CLASS","TIME_CELLS_WRAP_CLASS","CURRENT_TIME_CLASS","CURRENT_TIMELINE_CLASS","PREVIOUS_TIMELINE_CLASS","HIDE_CHILDS_CLASS","APPOINTMENT_WRAPPER_CLASS","RESOURCE_TOOLBAR_CONTAINER","RESOURCE_HEADER_TOOLBAR","SELECTED_CELL_CLASS","WEEK_NUMBER_WRAPPER_CLASS","APPOINTMENT_WRAP_CLASS","WRAPPER_CONTAINER_CLASS","APPOINTMENT_CONTAINER_CLASS","APPOINTMENT_CLASS","APPOINTMENT_BORDER","APPOINTMENT_DETAILS","TABLE_WRAP_CLASS","OUTER_TABLE_CLASS","CONTENT_WRAP_CLASS","AGENDA_CELLS_CLASS","AGENDA_SELECTED_CELL","NAVIGATE_CLASS","DATE_HEADER_CLASS","APPOINTMENT_INDICATOR_CLASS","EVENT_INDICATOR_CLASS","EVENT_ACTION_CLASS","CLONE_TIME_INDICATOR_CLASS","EVENT_RESIZE_CLASS","RESIZE_CLONE_CLASS","LEFT_RESIZE_HANDLER","RIGHT_RESIZE_HANDLER","TOP_RESIZE_HANDLER","BOTTOM_RESIZE_HANDLER","EVENT_RECURRENCE_ICON_CLASS","EVENT_RECURRENCE_EDIT_ICON_CLASS","ALLDAY_APPOINTMENT_WRAPPER_CLASS","ALLDAY_APPOINTMENT_CLASS","ROW_COUNT_WRAPPER_CLASS","ALLDAY_APPOINTMENT_SECTION_CLASS","APPOINTMENT_ROW_EXPAND_CLASS","APPOINTMENT_ROW_COLLAPSE_CLASS","MORE_INDICATOR_CLASS","POPUP_HEADER_CLASS","POPUP_HEADER_ICON_WRAPPER","POPUP_FOOTER_CLASS","DATE_TIME_DETAILS_CLASS","QUICK_POPUP_EVENT_DETAILS_CLASS","EVENT_CREATE_CLASS","EDIT_EVENT_CLASS","DELETE_EVENT_CLASS","TEXT_ELLIPSIS","MORE_POPUP_WRAPPER_CLASS","MORE_EVENT_POPUP_CLASS","MORE_EVENT_DATE_HEADER_CLASS","MORE_EVENT_HEADER_DATE_CLASS","MORE_EVENT_CLOSE_CLASS","MORE_EVENT_CONTENT_CLASS","MORE_EVENT_WRAPPER_CLASS","QUICK_DIALOG_EDIT_EVENT_CLASS","QUICK_DIALOG_EDIT_SERIES_CLASS","QUICK_DIALOG_DELETE_CLASS","QUICK_DIALOG_CANCEL_CLASS","QUICK_DIALOG_ALERT_BTN_CLASS","EVENT_WINDOW_DIALOG_CLASS","FORM_CLASS","EVENT_WINDOW_ALL_DAY_CLASS","TIME_ZONE_CLASS","SUBJECT_CLASS","LOCATION_CLASS","EVENT_WINDOW_START_CLASS","DESCRIPTION_CLASS","EVENT_WINDOW_TIME_ZONE_DIV_CLASS","EVENT_WINDOW_START_TZ_CLASS","EVENT_WINDOW_END_TZ_CLASS","EVENT_WINDOW_DELETE_BUTTON_CLASS","EDIT_ICON_CLASS","DELETE_CLASS","CLOSE_CLASS","CLOSE_ICON_CLASS","EVENT_TOOLTIP_ROOT_CLASS","HIDDEN_CLASS","POPUP_WRAPPER_CLASS","RESOURCE_LEVEL_TITLE","RESOURCE_TREE_POPUP_OVERLAY","RESOURCE_TREE_POPUP","HeaderRenderer","events.documentClick","closeHeaderPopup","hideHeaderPopup","headerPopup","toolbarEle","prevNavEle","nextNavEle","updateActiveView","updateItems","getPopUpRelativeElement","setDayOfWeek","headerCalendar","setCalendarDate","getCalendarView","setCalendarView","calendarView","viewIndex","updateDateRange","getDateRangeText","showInPopup","viewName","renderHeaderPopup","headerPopupEle","headerCalendarEle","calendarChange","changeDate","calculateViewIndex","cls.POPUP_OPEN","changeView","isSelectedDate","util.resetTime","activeView","getNextPreviousDate","isSameTime","activeCellsData","msInterval","activeViewOptions","timeScale","slotCount","isAllDay","eventWindow","openEditor","toolbarPopUp","getHeaderElement","updateHeaderItems","classType","dateRangeEle","cls.HIDDEN_CLASS","cls.TEXT_ELLIPSIS","setDimensions","cssProperties","ScheduleTouch","cls.TABLE_CONTAINER_CLASS","onTransitionEnd","touchLeftDirection","touchRightDirection","uiStateValues","cls.APPOINTMENT_CLASS","timeStampStart","cls.TRANSLATE_CLASS","cls.CONTENT_WRAP_CLASS","isScrollTriggered","nextPanel","getTranslateX","previousPanel","cls.PREVIOUS_PANEL_CLASS","offsetDist","swapPanels","transitionDuration","confirmSwipe","cancelSwipe","cls.WORK_CELLS_CLASS","cls.ALLDAY_CELLS_CLASS","cls.HEADER_CELLS_CLASS","getCellDetails","events.tapHoldReady","nextPrevType","currentPanel","getRenderDates","navArgs","events.navigating","generateColumnLevels","cls.CURRENT_PANEL_CLASS","WebKitCSSMatrix","m41","shiftDownArrow","shiftUpArrow","shiftRightArrow","shiftLeftArrow","ctrlLeftArrow","ctrlRightArrow","altOne","altTwo","altThree","altFour","altFive","altSix","processDown","processUp","processLeft","processRight","processViewNavigation","focusFirstCell","processEscape","event.cellMouseDown","onCellMouseDown","initialTarget","getClosestCell","onMouseSelection","onMoveup","allDayRow","getAllDayRow","onAppointmentSelection","getSelectedEventElements","isPreventAction","cls.POPUP_WRAPPER_CLASS","cls.QUICK_POPUP_EVENT_DETAILS_CLASS","cls.EVENT_CREATE_CLASS","cls.EDIT_EVENT_CLASS","cls.DELETE_EVENT_CLASS","cls.CLOSE_CLASS","cls.SUBJECT_CLASS","event.cellClick","cls.MORE_EVENT_CLOSE_CLASS","cls.ALLDAY_APPOINTMENT_SECTION_CLASS","cls.MORE_INDICATOR_CLASS","cls.MORE_EVENT_HEADER_DATE_CLASS","getNavigateView","getCells","isInverseTable","tableEle","maxRow","maxColumn","inverseCells","focusCell","cls.AGENDA_CELLS_CLASS","removeSelectedAppointmentClass","isTimelineView","cls.CONTENT_TABLE_CLASS","cls.RESOURCE_GROUP_CELLS_CLASS","getWorkCellElements","isInverseTableSelect","isMultiple","removeSelectedClass","initialId","resourceSelectedCells","allDayCells","getAllDayCells","resourceAllDayCells","addSelectedClass","selectAppointment","appointments","getAppointmentElements","nextAppEle","addSelectedAppointments","cls.AGENDA_SELECTED_CELL","selectAppointmentElementFromWorkCell","appointmentElements_1","getUniqueAppointmentElements","filteredElements_1","selectedDate_1","eventsProcessed","eventObject","eventFields","focusElements","getAppointmentElementsByGuid","util.MS_PER_DAY","appointmentElements","getWorkCellFromAppointmentElement","getEventByGuid","selectWorkCellByTime","viewCollections","getSelectedElements","selectedEventElements","getSelectedAppointments","moreEventWrapper","cls.MORE_POPUP_WRAPPER_CLASS","quickPopupWrapper","getQuickPopupElement","getTableRows","curRowIndex","processLeftRight","sectionRowIndex","maxIndex","isCancelLeftRightAction","selectedAppointments","calculateNextPrevDate","curColIndex","maxColIndex","allDayRow_1","allDayRow_2","nextPrevDate","getFocusableElements","processTabOnPopup","firstEle","footerEle","cls.POPUP_FOOTER_CLASS","cls.DELETE_CLASS","lastEle","cls.APPOINTMENT_BORDER","activeEventData","getSelectedEvents","quickPopup","deleteClick","onClosePopup","morePopup","Timezone","convertedDate","toLocaleString","fromOffset","toOffset","fromLocalOffset","toLocalOffset","removeLocalOffset","localTimezoneName","Intl","DateTimeFormat","resolvedOptions","timezoneData","TIMES","EVERY","UNTIL","DAYS","WEEKS","MONTHS","YEARS","SU","MO","TU","WE","TH","FR","SA","slots","timeZonePropChanged","oldTimezone","processed","events_1","util.getDateFromString","processTimezoneChange","processTimezone","recurrenceRule","recurrenceID","generateOccurrence","generateGuid","filterEvents","timezonePropertyChange","eventsData","event.dataReady","processedData","timezoneConvert","startTimezone","endTimezone","startTz","endTz","zone","resourceTdData","fieldMapping","filterEventsByResource","sortByTime","resourceCollection","resourceBase","allowGroupEdit","allowMultiple","tempPredicate","groupOrder","d1","d2","sortByDateTime","object1","object2","d3","d4","d5","d6","getSmallestMissingNumber","large","splitEventByDay","eventStartTime","eventEndTime","util.addDays","util.getDaysCount","app","splitEvent","dateRender","util.getDateInMs","orgStart","orgEnd","slot","firstSlot","byDate","showWeekend","hasBreak","cloneEventObject","dateInRange","availSlot","availSlot_1","slot_1","focusElements_1","eventSelect","elementSelect","selectedAppointments_1","keyboardInteractionModule","nearestTime","isAllDayAppointment","targetArea","getGroupIndexFromEvent","resourceData","lastResourceLevel","resIndex","isFullDay","event.documentClick","appointmentBorderRemove","wireAppointmentEvents","eventDoubleClick","wireResizeEvent","dragAndDropModule","wireDragEvent","renderResizeHandler","spanEvent","resizeEdge","cls.EVENT_RESIZE_CLASS","cls.RIGHT_RESIZE_HANDLER","cls.LEFT_RESIZE_HANDLER","cls.TOP_RESIZE_HANDLER","cls.BOTTOM_RESIZE_HANDLER","cls.RESIZE_CLONE_CLASS","event.eventClick","quickPopupHide","openRecurrenceAlert","getEventIDType","getEventMaxID","resourceId","eventId","idType","maxId","occurrenceCollection","currentViewDate","eventRule","recurrenceException","generatedDates","getRecurrenceEvent","getOccurrencesByID","getOccurrencesByRange","event_3","applyResourceColor","getResourceColor","alphaColor","Crud","refreshData","actionArgs","addEvent","editParms","processCrudTimezone","crudArgs","parentEvent","occurrence","edited","exDate","excludeDateCheck","delApp","delApp_1","deleteEvent","normalEvent","recEvent","dataObj_1","normalEvent_1","event_4","recEvent_1","delApp_2","event_5","exceptionDateList","FieldValidator","renderFormValidator","errorPlacement","QuickPopups","isMultipleEventSelect","fieldValidator","renderQuickPopup","renderMorePopup","renderQuickDialog","quickPopupOpen","quickPopupClose","moreEventPopup","cls.MORE_EVENT_POPUP_CLASS","cls.MORE_EVENT_DATE_HEADER_CLASS","cls.NAVIGATE_CLASS","morePopupOpen","morePopupClose","cls.CLOSE_ICON_CLASS","closeClick","navigationClick","quickDialog","dialogButtonClick","beforeQuickDialogClose","clickEvent","quickDialogClass","cls.QUICK_DIALOG_EDIT_EVENT_CLASS","cls.QUICK_DIALOG_EDIT_SERIES_CLASS","cls.QUICK_DIALOG_DELETE_CLASS","cls.QUICK_DIALOG_CANCEL_CLASS","cls.QUICK_DIALOG_ALERT_BTN_CLASS","cls.DISABLE_CLASS","cls.FORM_CLASS","eventSettings","editDeleteOnly","editDeleteSeries","showQuickDialog","openRecurrenceValidationAlert","openDeleteAlert","openValidationError","event.popupOpen","createMoreEventList","eventCollection","moreEventContentEle","cls.MORE_EVENT_CONTENT_CLASS","moreEventWrapperEle","cls.MORE_EVENT_WRAPPER_CLASS","eventCollection_1","eventText","appointmentEle","data-id","data-guid","aria-grabbed","cls.EVENT_RECURRENCE_ICON_CLASS","cls.EVENT_RECURRENCE_EDIT_ICON_CLASS","event.eventRendered","tapHoldEventPopup","eventTitle","eventTemplate","cls.POPUP_HEADER_CLASS","cls.EDIT_ICON_CLASS","editClick","beforeQuickPopupOpen","showQuickInfo","subjectElement_1","getFormattedString","templateArgs","quickInfoTemplates","getQuickInfoTemplatesHeader","cls.POPUP_HEADER_ICON_WRAPPER","getQuickInfoTemplatesContent","cls.DATE_TIME_DETAILS_CLASS","details","getResourceText","getQuickInfoTemplatesFooter","quickCellPopup","subjectElement","moreButton","detailsClick","saveButton","saveClick","isSameEventClick","editButton","eventTooltip","updateTapHoldEventPopup","eventSubject","getRecurrenceSummary","cls.TIME_ZONE_CLASS","getTimezone","cls.DESCRIPTION_CLASS","quickEventPopup","deleteButton","resourceValue","resourceCollection_1","resourceIndex_1","idField","lastResource_1","resNames_1","lastResourceData_1","util.findIndexInData","resourceDetails","startDateDetails","endDateDetails","startTimeDetail","getTimeString","endTimeDetail","allDayLength","moreEventClick","dateElement","moreEventElements","cls.CURRENTDATE_CLASS","gIndex","saveObj","getObjectFromFormData","setResourceValues","subjectEle","updateMoreEventContent","getDateFromElement","filteredEvents","moreElement","eventSave","eventObj","titleContent","zoneDetails","ruleSummary","getRecurrenceEditorInstance","getRuleSummary","getDataFromTarget","isEventPopup","destroyButtons","applyEventColor","colorEle","borderLeftColor","moreWrapper","event.tapHoldReady","removeEventListner","EventTooltip","cls.EVENT_TOOLTIP_ROOT_CLASS","getTargets","onBeforeRender","cls.RESOURCE_CELLS_CLASS","resCollection","getHeaderTooltipTemplate","tooltipTemplate","eventStart","eventEnd","tooltipSubject","startMonthDate","startMonthYearDate","endMonthYearDate","getEventTooltipTemplate","INPUTWARAPPER","INPUTWARAPPERSIDE","REPEATELEMENT","REPEATINTERVAL","DAYWRAPPER","WEEKWRAPPER","YEAREXPANDERWRAPPER","YEAREXPANDERELEMENT","MONETHEXPANDERWRAPPER","MONTHEXPANDERELEMENT","MONTHEXPANDERCHECKBOXWRAPPER","FORMLEFT","FORMRIGHT","MONTHEXPANNDERELEM","ENDONDATE","ENDONCOUNTWRAPPER","ENDONCOUNT","HIDEWRAPPER","PRIMARY","none","daily","weekly","monthly","yearly","valueData","neverClassList","weekClassList","monthClassList","yearClassList","dailyClassList","noEndClassList","endOnCountClassList","endOnDateClassList","RecurrenceEditor","never","onDay","weeks","summaryTimes","summaryOn","summaryUntil","summaryRepeat","summaryDay","summaryWeek","summaryMonth","summaryYear","monthWeek","monthPosition","monthExpander","yearExpander","renderStatus","dayButtons","monthButtons","startState","endOn","showFormElement","updateForm","freshOnEndForm","updateEndOnForm","selectMonthDay","updateUntilDate","onMonthDay","applyCustomClass","renderComponent","repeatType","selectedType","getRecurrenceRule","setRecurrenceRule","resetDayButton","daySelection","rotateArray","rtlClass","untilDateObj","monthDate","monthWeekDays","monthValue","monthWeekPos","getDayPosition","renderDropdowns","getRepeatData","resetFormValues","getEndData","getPopupWidth","renderDropDownList","dropDownData","onWeekDay","getMonthPosData","getDayData","getMonthData","setDefaultValue","formelement_1","recurreneElement_1","renderDatePickers","dayButtonRender","btns_1","btns","radioButtonRender","numericTextboxRender","recurrenceCount","positionCollection","monthposValue","weekday_1","fullDay","getSelectedDaysData","ruleData","RULEBYDAY","getSelectedMonthData","RULEBYMONTHDAY","getIntervalData","RULEINTERVAL","getEndOnCount","RULECOUNT","getYearMonthRuleData","RULEBYMONTH","updateWeekButton","updateMonthUI","getUntilData","RULEUNTIL","destroyComponents","resetFields","cldrObj1","generateSummary","getRecurrenceDates","RULEFREQ","RULEDAILY","RULEWEEKLY","RULEMONTHLY","RULEYEARLY","endon","EVENT_FIELD","REPEAT_CONTAINER_CLASS","EventWindow","renderEventWindow","getEventWindowContent","cls.EVENT_WINDOW_DIALOG_CLASS","onBeforeClose","cls.EVENT_WINDOW_DELETE_BUTTON_CLASS","eventDelete","editorTemplate","cellClickAction","onCellDetailsUpdate","onEventDetailsUpdate","setDialogContent","getSlotDuration","refreshDateTimePicker","startObj","cls.EVENT_WINDOW_START_CLASS","onsubmit","getDefaultEventWindowContent","templeteEle","getEditorTemplate","createDivElement","titleLocationDiv","titleDiv","renderTextBox","locationDiv","cls.LOCATION_CLASS","startEndDateTimeDiv","startDateTimeDiv","renderDateTimePicker","onTimeChange","endDateTimeDiv","timezoneParentDiv","cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS","startTimezoneDiv","renderDropDown","cls.EVENT_WINDOW_START_TZ_CLASS","endTimezoneDiv","cls.EVENT_WINDOW_END_TZ_CLASS","allDayTimezoneDiv","allDayDiv","renderCheckBox","cls.EVENT_WINDOW_ALL_DAY_CLASS","timezoneDiv","repeatParentDiv","repeatDiv","repeatEditConainer","REPEAT_BUTTON_ICON_CLASS","descriptionDiv","loadRecurrenceEditor","createRecurrenceEditor","resourceParentDiv","renderMultiSelect","submit","recurrenceEditor","renderRecurrenceEditor","dateTimeDiv","getFieldName","dateTimeInput","getFieldLabel","resourceDiv","resourceInput","resourceTemplate","colorField","onMultiselectResourceChange","onDropdownResourceChange","timezoneInput","onTimezoneChange","filtering","byGroupID","resObject","datasource","groupIDField","filterRes","filterDatasource","resObj","resValue","startTimezoneObj","endTimezoneObj","checkBoxDiv","checkBoxInput","repeatStatus","editorTitles","onAllDayChange","timezoneChangeStyle","onRepeatChange","renderRepeatDialog","repeatDialogObject","repeatSaveDialog","repeatCancelDialog","repeatOpenDialog","repeatRule","repeatStartDate","updateRepeatLabel","closeRepeatDialog","repeatTempRule","showDetails","getValidationRule","formelement","getFormElements","keyNames","curElement","isCustomElement","setValueToElement","setDefaultValueToElement","timezoneObj","allDayStatus","updateDateTime","workHours","timezoneValue","refreshResourceDataSource","resetFormFields","tz","alertType","Repeat","recurrenceValidation","getEventIdFromForm","isResourceEventExpand","resourceSaveEvent","eveId","editOccurrenceValidation","formElement_1","getValueFromElement","alertMessage","recEditor","tempDiff","getRecurrenceIndex","recColl","recIndex","recurColl","lastResouceData","lastlevel","eventList","addValues","lastResource","groupId_1","eventList_1","formelement_2","isDataRefresh","initializeLayout","dayModule","weekModule","workWeekModule","monthModule","agendaModule","monthAgendaModule","timelineViewsModule","viewClass","timelineMonthModule","firstView","updateLabelText","isGroupAdaptive","enableCompactView","headerTooltipTemplate","WorkHours","TimeScale","QuickInfoTemplates","HeaderRows","Field","EventSettings","ResourceBase","leftPixel","renderResourceHeaderIndent","resColTd","resColDiv","cls.RESOURCE_TEXT_CLASS","events.renderCell","hideResourceRows","trCount","resData","ClassName","cls.RESOURCE_PARENT_CLASS","expandedField","createResourceColumn","resColl","resDiv","cls.RESOURCE_COLUMN_WRAP_CLASS","tbl","createTableLayout","generateTreeData","countCalculation","getContentRows","resRows","ntd","cls.RESOURCE_COLLAPSE_CLASS","cls.RESOURCE_EXPAND_CLASS","iconDiv","cls.RESOURCE_TREE_ICON_CLASS","setMargin","onTreeIconClick","setResourceHeaderContent","resourceHeaderTemplate","ntr","parentCollection","wholeCollection","totalCount","workCellCollection","headerRowCollection","clickedRes","contentRows","eventRows","cls.APPOINTMENT_CONTAINER_CLASS","eventElements","clonedCollection","events.scrollUiUpdate","renderResourceHeader","resourceWrapper","cls.RESOURCE_TOOLBAR_CONTAINER","cls.RESOURCE_HEADER_TOOLBAR","cls.RESOURCE_LEVEL_TITLE","renderResourceHeaderText","menuClick","renderResourceTree","cls.RESOURCE_TREE_POPUP_OVERLAY","treeWrapper","cls.RESOURCE_TREE_POPUP","cls.WRAPPER_CONTAINER_CLASS","resourceTree","treeViewObj","resourceClick","treePopup","isTimeLine","treeCollection","resTreeColl","resourceTreeLevel","resTree","treeHandler","treeLevel","levelId","treeArgs","resourceName","resourceChild","resourceLevel","levelIcon","headerWrapper","bindResourcesData","isSetModel","promises","setResourceCollection","requiredResources","colorIndex","requiredResources_1","startHourField","endHourField","workDaysField","cssClassField","resourceColorField","generateResourceLevels","innerDates","resTreeGroup","lastColumnDates","prevResource","prevResourceData","prevOrder","dateCol","renderDates","resWorkDays","workDays","resStartHour","resEndHour","getDateSlots","dateSlots","generateCustomHours","resCssClass","slotData","resourceLevelIndex","generateHeaderLevels","dateSlots_1","dateSlot","headerDates","headerLevels","currentLevelChilds_1","currentLevelChild","nextLevelChilds_1","nextLevelChild","lastLevelResource","dateHeaderLevels","dateColSpan","datesColumn","headerDates_1","resGroup","resTd","isCrud","setValues","filterData","getCssClass","getResourceData","groupEditIndex","resourceObj","groupEditIndex_1","length_4","addResource","length_5","removeResource","length_6","resToolBarEle","Schedule","eventTooltipTemplateFn","templateParser","editorTemplateFn","quickInfoTemplatesHeaderFn","quickInfoTemplatesContentFn","quickInfoTemplatesFooterFn","initializeResources","isLayoutOnly","initializeView","showHeaderBar","scheduleTouchModule","initializePopups","getViewIndex","setViewOptions","isModuleLoad","viewOptions","selectedView","isOptions","fieldViewName","getActiveViewOptions","majorSlotTemplate","minorSlotTemplate","allowVirtualScrolling","cellTemplate","dateHeaderTemplate","showWeekNumber","crudModule","initializeTemplates","cellTemplateFn","dateHeaderTemplateFn","majorSlotTemplateFn","minorSlotTemplateFn","appointmentTemplateFn","resourceHeaderTemplateFn","headerTooltipTemplateFn","getDayNames","setCldrTimeFormat","previousView","animateLayout","workWeek","agenda","weekAgenda","workWeekAgenda","monthAgenda","noEvents","emptyContainer","allDay","noTitle","deleteMultipleEvent","deleteSeries","editSeries","editEvent","addTitle","moreDetails","deleteRecurrenceContent","deleteMultipleContent","recurrence","wrongPattern","seriesChangeAlert","createError","recurrenceDateValidation","sameDayAlert","editRecurrence","repeats","startEndError","invalidDateError","timelineDay","timelineWeek","timelineWorkWeek","timelineMonth","onScheduleResize","allowKeyboardInteraction","selectedCells_1","cls.SELECTED_CELL_CLASS","cls.ALLDAY_ROW_CLASS","getIndexOfDate","isAllDayCell","dateInMS","getCellTemplate","getDateHeaderTemplate","getMajorSlotTemplate","getMinorSlotTemplate","getAppointmentTemplate","getResourceHeaderTemplate","requireScheduleRefresh","highlightCurrentTime","onEventSettingsPropertyChanged","onGroupSettingsPropertyChanged","setWorkHours","viewStartHour","getStartHour","getEndHour","dates_1","tds","cls.WORK_HOURS_CLASS","endDateFromColSpan","getEndDateFromStartDate","getResourcesByIndex","scrollToHour","getEvents","eventID","getCurrentViewDates","getCurrentViewEvents","refreshEvents","getEventDetails","isSlotAvailable","adjustEventWrapper","ActionBase","actionObj","slotInterval","actionIndex","excludeSelectors","scrollEdges","getChangedData","indexCol","getOriginalElement","cloneIndex_1","saveChangedData","isSameResource","calculateIntervalTime","intervalTime","getContentAreaDimension","viewElement","trElement","getResourceElements","leftOffset","rightOffset","getPageCoordinates","contentElements","minIndex","updateTimePosition","timeElement","timeIndicator","cls.CLONE_TIME_INDICATOR_CLASS","wrapperClass","cls.DATE_HEADER_WRAP_CLASS","cls.TIME_CELLS_WRAP_CLASS","createCloneElement","cloneClassLists","cls.EVENT_ACTION_CLASS","removeCloneElement","getCursorElement","yIsScrollable","xIsScrollable","yInBounds","xInBounds","scrollBy","autoScrollValidation","allowScroll","viewBoundaries","actionClass","resizeTarget","resizeArgs","workCell","noOfDays_1","cls.ALLDAY_APPOINTMENT_CLASS","resizeValidation","leftStyles","getLeftRightStyles","horizontalResizing","rightStyles","topStyles","getTopBottomStyles","verticalResizing","bottomStyles","resizeTime","headerName","noOfDays_2","cellOffsetWidth","resizeDate","spanMinutes","cloneIndex","originalWidth","noOfDays","clnHeight","clnTop","isTimeViews","targetWidth","cloneWidth","viewDimension","DragAndDrop","dragAreaTarget","dragHelper","dragPosition","setDragActionDefaultValues","cloneBottom","eventGuid","updateDraggingDateTime","isAllowDrop","morePopupEventDragging","calculateTimelineDate","calculateTimelineTime","calculateVerticalDate","calculateVerticalTime","eventDuration","dragEnd","cls.APPOINTMENT_WRAPPER_CLASS","swapDragging","heightPerMinute","diffInMinutes","isAllDayDrag","getEventWrapper","spanHours","cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS","eventHeight_1","getAllDayEventHeight","allDayElement","cursorElement","outerWrapper","timeString","endTimeDiff","startTimeDiff","widthPerMinute","calculateResourceGroupingPosition","dragDate","srtDateDiff","trCollection","eventHeight","dropSelectors_1","ViewBase","customHelper","getDayName","getTimelineDate","createEventTable","eventTable","collapseRows","cls.SCHEDULE_TABLE_CLASS","createColGroup","lastRow","colGroupEle","getScrollXIndent","scrollTopPanel","getDatesHeaderElement","scrollHeaderLabels","applyLeft","headerCells","tdLeft","hiddenLeft","getHeaderBarHeight","headerBarHeight","cls.DATE_HEADER_CONTAINER_CLASS","isCurrentDate","isCurrentMonth","isWorkDay","isWorkHour","daysCount","formatDateRange","longDateFormat","getMobileDateElement","tdData","renderResourceMobileLayout","WorkCellInteraction","navigateEle","navigateView","sameView","isWorkCell","cellDblClick","VerticalEvent","renderedEvents","renderedAllDayEvents","overlapEvents","moreEvents","overlapList","allDayEvents","allDayLevel","animationUiUpdate","renderAppointments","cls.ROW_COUNT_WRAPPER_CLASS","setAllDayRowHeight","rowExpandCollapse","renderEvents","dateCount","resources_1","getResourceList","filterEvents_1","renderAllDayEvents","renderNormalEvents","resourceIndex","createAppointmentElement","recordSubject","appointmentWrapper","appointmentDetails","cls.APPOINTMENT_DETAILS","appointmentSubject","appointmentStartTime","appointmentEndTime","timeStr","recurrenceIcon","renderSpannedIcon","createMoreIndicator","currentDay","countWrapper","innerCountWrap","moreIndicatorElement","data-index","data-count","countCell","moreCount","cls.EVENT_INDICATOR_CLASS","iconLeft","iconRight","iconTop","iconBottom","isSpannedEvent","startEndHours","util.getStartEndHours","dayCount","currentDates","allDayRowCell","cellTop","eStart","eEnd","appWidth","isDateRange","isAlreadyRendered","allDayDifference","allDayIndex","getOverlapIndex","widthAdjustment","wIndex","appointmentElement","events.eventRendered","appHeight","allDayRowHeight","addOrRemoveClass","schedule","getAppointmentHeight","getTopValue","appIndex","adjustOverlapElements","appointmentWrap","appLeft","eventsList","date_1","appointmentList_1","appointment_1","filterList","eventsList_1","appLevel","length1","length2","eleGuid","apps","moreEventCount","cls.APPOINTMENT_ROW_EXPAND_CLASS","cls.APPOINTMENT_ROW_COLLAPSE_CLASS","getEventHeight","eventElement","MonthEvent","moreIndicatorHeight","appointmentWrapper_1","getElementHeightFromClass","monthHeaderHeight","util.getOuterHeight","cls.DATE_HEADER_CLASS","renderResourceEvents","renderEventsHandler","workCells","getSlotDates","splittedEvents_1","updateIndicatorIcon","cloneData","eventLocation","innerElement","appendEventIcons","overlapCount","diffInDays","cellTd","appTop","renderEventElement","cellTd_1","getFilteredEvents","appArea","renderedAppCount","getMoreIndicatorElement","moreIndicatorClick","getOverlapEvents","appointmentsList","appointments_1","moreEventArgs","data-start-date","data-end-date","VerticalView","baseCssClass","workCellAction","event.scrollUiUpdate","scrollLeftPanel","onApaptiveMove","onApaptiveScroll","leftPanel","getLeftPanelElement","timecells","getScrollableElement","scrollerHeight","util.getScrollBarWidth","scrollToWorkHour","leftPanelElement","firstWorkHourCell","getTopFromDateTime","columnLevels","colLevels","workStartHour","workEndHour","renderDates_1","cls.CURRENT_DAY_CLASS","isWorkHourRange","showTimeIndicator","getCurrentTimeIndicatorIndex","changeCurrentTimePosition","currentTimeIndicatorTimer","clearCurrentTimeIndicatorTimer","currentDateIndex","removeCurrentTimeIndicatorElements","firstRow","topInPx","curTimeWrap","cls.PREVIOUS_TIMELINE_CLASS","currentDateIndex_1","cls.CURRENT_TIMELINE_CLASS","currentTimeEle","cls.CURRENT_TIME_CLASS","timeCellsWrap","cls.HIDE_CHILDS_CLASS","getWorkCellHeight","getTdContent","cls.TABLE_WRAP_CLASS","cls.OUTER_TABLE_CLASS","dateTd","renderDatesHeader","indentTd","renderLeftIndent","workTd","scrollContainer","renderTimeCells","renderContentArea","timesTd","ntr_1","util.getWeekNumber","createTd","appointmentExpandCollapse","nth","createAllDayRow","wireCellEvents","createEventWrapper","event.renderCell","getTimeSlotRows","renderContentTable","createContentTd","renderContentTableHeader","getContentTdClass","cellDate","util.setTime","data-date","innerWrapper","getContentAreaElement","msMajorInterval","msStartHour","msEndHour","majorTickDivider","Day","Week","WorkWeek","par","Month","dayNameFormat","monthDates","onScrollUIUpdate","onCellClick","cls.WEEK_NUMBER_WRAPPER_CLASS","getDayNameFormat","renderWeekNumberContent","contentArea","monthAgendaWrapper","renderAppointmentContainer","contentWrapper","contentWrapTable","createWeekNumberElement","createHeaderCell","getContentSlots","slotDatas","prepareSlots","includeResource","colDates_2","colDate","resourcesTd","colDates_1","updateClassList","isOtherMonth","util.firstDateOfMonth","util.lastDateOfMonth","util.addMonths","renderDateHeaderElement","dateHeader","getMonthStart","monthStart","util.getWeekFirstDate","getMonthEnd","util.WEEK_LENGTH","monthEnd","AgendaBase","viewBase","createAgendaContentElement","aTd","appWrapper","createAppointment","appSubjectWrap","strDate","allDayStr","processAgendaEvents","splited","wireEventActions","eventElement_1","dateHeaderElement_1","dayNavigationClick","calculateResourceTableElement","agendaDate","agendaLastDate","initialDate","lastLevelInfo","tempLastLevelInfo","firstDate","finalDate","agendaCollection","hideEmptyAgendaDays","resDataCollection","resDayCollection","topResources","tempGroupedData","totalRowSpan","createResourceTableRow","renderEmptyContent","tContent","tContentCollection","rowSpanCollection","createDateHeaderElement","eTr","createTableRowElement","eTd","aria-rowindex","aria-colindex","dTd","Agenda","agendaDates","virtualScrollTop","agendaBase","eventLoad","refreshEvent","refreshDate","appointmentFiltering","appoint","updateHeaderText","agendaDaysCount","nTr","cTd","agendaScrolling","virtualScrolling","filterDate","emptyTBody","getElementFromScrollerPosition","scrollDate","getPreviousNextDate","scrollToValue","getStartDateFromEndDate","dateStart","dateEnd","onAgendaScrollUiUpdate","MonthAgenda","wrapperContainer","appWrap","cls.APPOINTMENT_WRAP_CLASS","appendAppContainer","setEventWrapperHeight","availableHeight","clearElements","cls.APPOINTMENT_INDICATOR_CLASS","onEventRender","appContainer","appointmentIndicators_1","TimelineEvent","appContainers","dayLength","appointments_2","slotsPerDay","wrapIndex","getStartTime","getEndTime","appRight","getNormalEventsWidth","getRowTop","moreIndicator","appPos","isAlreadyAvail","slotStartTime","slotEndTime","getFilterEvents","getNextDay","isSameDay","getSameDayEventsWidth","getSpannedEventsWidth","spannedWidth","getAppointmentLeft","slotTd","indicatorPos","TimelineHeaderRow","groupByYear","groupByMonth","dates_2","groupByWeek","dates_3","jsDate","generateSlots","tempFn","tdDatas","htmlCol","hourSlots","lastLevelColspan","byYear","byMonth","byWeek","TimelineViews","getLeftFromDateTime","generateTimeSlots","timeSlotData","tempTimeSlots_1","headerWrap","diffInDates","getWorkCellWidth","getRowCount","getResourceTdData","resLevel","resSHr","resEHr","TimelineMonth","contentTr","contentTd","index.Schedule","index.Day","index.Week","index.WorkWeek","index.Month","index.Agenda","index.MonthAgenda","index.TimelineViews","index.TimelineMonth","index.DragAndDrop","nextChild","itemRendering","itemSelected","tooltipRendering","legendItemRendering","InitialDrillSettings","LeafItemSettings","LevelSettings","TreeMapAjax","LayoutPanel","processLayoutPanel","totalRect","levelsOfData","initialDrillDown","groupName","getDrilldownData","calculateLayoutItems","renderLayoutItems","drillData","computeSliceAndDiceDimensional","computeSquarifyDimensional","leafItem","sliceAndDiceProcess","groupGap","childValue","parentArea","alottedValue","totalWeight","isHierarchicalData","calculateChildrenLayout","groupPadding","computeTotalArea","performRowsLayout","newCoordinates","newStack","nextDatum","restData","currentRowLength","valueSum","newContainer","cutArea","findMaxAspectRatio","minArea","maxArea","sumArea","isParent","subXOffset","subYOffset","dataLength_1","dataSum_1","datum","txtVisible","getItemColor","interSectAction","rectPath","layoutGroup","templateGroup","isLeafItem","headerFormat","showLabels","enableDrillDown","headerStyle","labelTemplate","RenderItems","renderItemText","textName","tspanText","labelInterSectAction","maxNumber","collectionLength","stringText","itemFill","itemOpacity","equalColorValuePath","rangeColorValuePath","templateLocation","TreeMap","drilledItems","processDataManager","renderTreeMapElements","processingData","treeMapLegendModule","elementChange","checkIsHierarchicalData","levelOrderName","hierarchyData","processHierarchicalData","processFlatJsonData","reOrderLevelData","findTotalWeight","dataCount","mainData_1","orderNames","childName","childGroupPath_1","currentName","prevPath","groupObj","clickOnTreeMap","mouseDownOnTreeMap","mouseMoveOnTreeMap","mouseEndOnTreeMap","mouseLeaveOnTreeMap","resizeOnTreeMap","mouseEvent","newDrillItem","layoutID","moveArgs","treeMapTooltipModule","removeInteractivePointer","TreeMapLegend","legendNames","gradientCount","defsElement","findColorMappingLegendItems","findPaletteLegendItems","orientation_1","legendTitleSize","startX_1","startY_1","rectWidth_1","rectHeight_1","itemTextStyle_1","legendLength_1","calculateLegendItems","legendName","itemArea","isAddData","gradientElement","colorMapProcess","isAddNewLegendData","stop1Color","stop2Color","newDataProcess","renderLegendTitle","isLineShape","interactiveId","drawInteractivePointer","areaX","areaY","TreeMapHighlight","processHighlight","treeMapElement","orders","highLightElements","highLightId","selectionElements","TreeMapSelection","selectionId","TreeMapTooltip","toolTipData","index.TreeMap","index.TreeMapTooltip","index.TreeMapLegend","index.TreeMapHighlight","index.TreeMapSelection"],"mappings":"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C,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,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yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,OAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,OAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,OAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,OAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,OAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAE7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAM,MAC7C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,MAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,MAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,MAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,MAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,MAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,MAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,MAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,KAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9C4C,KAAKk/R,yBAAyB9hS,SAAS,MAAO,OAC9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,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,KAMTd,EAA8B4B,YAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,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K,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,KAMTzC,EAA8ByD,aAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,GAMxCzD,EAA8B6D,mBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAA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GAAS,IACVu6X,EAASpmY,UAAW,oBAAgB,GACvC+0F,IACIlpF,GAAS,IACVu6X,EAASpmY,UAAW,2BAAuB,GAC9C+0F,IACIroF,KAAYy5X,KACbC,EAASpmY,UAAW,iBAAa,GACpC+0F,IACIlpF,KACDu6X,EAASpmY,UAAW,oBAAgB,GACvC+0F,IACIlpF,EAAS,KACVu6X,EAASpmY,UAAW,gBAAY,GACnC+0F,IACIlpF,GAAS,IACVu6X,EAASpmY,UAAW,yBAAqB,GAC5C+0F,IACIlpF,GAAS,IACVu6X,EAASpmY,UAAW,iBAAa,GACpC+0F,IACIlpF,KACDu6X,EAASpmY,UAAW,qBAAiB,GACxC+0F,IACIlpF,EAAS,SACVu6X,EAASpmY,UAAW,gBAAY,GACnC+0F,IACIroF,KAAYu5X,KACbG,EAASpmY,UAAW,cAAU,GACjC+0F,IACIlpF,GAAS,IACVu6X,EAASpmY,UAAW,qBAAiB,GACxC+0F,IACIlpF,KACDu6X,EAASpmY,UAAW,oBAAgB,GACvC+0F,IACIlpF,KACDu6X,EAASpmY,UAAW,qBAAiB,GACxC+0F,IACIlpF,EAAS,SACVu6X,EAASpmY,UAAW,iBAAa,GACpC+0F,IACIlpF,GAAS,IACVu6X,EAASpmY,UAAW,oBAAgB,GACvC+0F,IACItnF,KACD24X,EAASpmY,UAAW,eAAW,GAClC+0F,IACItnF,KACD24X,EAASpmY,UAAW,iBAAa,GACpC+0F,IACItnF,KACD24X,EAASpmY,UAAW,yBAAqB,GAC5C+0F,IACItnF,KACD24X,EAASpmY,UAAW,gBAAY,GACnC+0F,IACItnF,KACD24X,EAASpmY,UAAW,iBAAa,GACpC+0F,IACItnF,KACD24X,EAASpmY,UAAW,gBAAY,GACnC+0F,IACItnF,KACD24X,EAASpmY,UAAW,mBAAe,GACtC+0F,IACItnF,KACD24X,EAASpmY,UAAW,oBAAgB,GACvC+0F,IACItnF,KACD24X,EAASpmY,UAAW,mBAAe,GACtC+0F,IACItnF,KACD24X,EAASpmY,UAAW,qBAAiB,GACxC+0F,IACItnF,KACD24X,EAASpmY,UAAW,sBAAkB,GACzC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,EAAehza,UAAW,gBAAY,GACzC+0F,IACIlpF,GAAS,IACVmna,EAAehza,UAAW,oBAAgB,GAC7C+0F,IACIlpF,EAAS,SACVmna,EAAehza,UAAW,YAAQ,GACrC+0F,IACIlpF,GAAS,IACVmna,EAAehza,UAAW,iBAAa,GAC1C+0F,IACI/nF,KAAe8la,KAChBE,EAAehza,UAAW,cAAU,GACvC+0F,IACIroF,KAAYqma,KACbC,EAAehza,UAAW,mBAAe,GAC5C+0F,IACIlpF,OAAS/L,IACVkza,EAAehza,UAAW,iBAAa,GACnCgza,GACTtqW,IAKEuqW,GAA8B,SAAU59U,GAExC,SAAS49U,IACL,OAAkB,OAAX59U,GAAmBA,EAAOn1F,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbA6vF,GAAUy+U,EAAc59U,GAIxBN,IACIlpF,EAAS,SACVona,EAAajza,UAAW,gBAAY,GACvC+0F,IACIroF,KAAYkma,KACbK,EAAajza,UAAW,YAAQ,GACnC+0F,IACIroF,KAAYsma,KACbC,EAAajza,UAAW,kBAAc,GAClCiza,GACTvqW,IAKEwqW,GAAgC,SAAU79U,GAG1C,SAAS69U,EAAejua,EAAQ+Q,EAAU5K,EAAchI,GACpD,OAAOiyF,EAAOpvF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAoBzE,OAvBA6vF,GAAU0+U,EAAgB79U,GAK1BN,IACIlpF,EAAS,KACVqna,EAAelza,UAAW,YAAQ,GACrC+0F,IACIlpF,EAAS,KACVqna,EAAelza,UAAW,UAAM,GACnC+0F,IACIlpF,EAAS,IACVqna,EAAelza,UAAW,aAAS,GACtC+0F,IACIlpF,KACDqna,EAAelza,UAAW,cAAU,GACvC+0F,IACIlpF,KACDqna,EAAelza,UAAW,aAAS,GACtC+0F,IACIlpF,EAAS,IACVqna,EAAelza,UAAW,cAAU,GAChCkza,GACTxqW,IAKE4pW,GAA2B,SAAUj9U,GAErC,SAASi9U,IACL,OAAkB,OAAXj9U,GAAmBA,EAAOn1F,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BA6vF,GAAU89U,EAAWj9U,GAIr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AQhzD,UAAW,4BAAwB,GAC9C+0F,IACIlpF,KACDmnD,EAAQhzD,UAAW,uBAAmB,GACzC+0F,IACIlpF,KACDmnD,EAAQhzD,UAAW,sBAAkB,GACxC+0F,IACIlpF,KACDmnD,EAAQhzD,UAAW,yBAAqB,GAC3C+0F,IACIlpF,KACDmnD,EAAQhzD,UAAW,qBAAiB,GACvC+0F,IACIlpF,KACDmnD,EAAQhzD,UAAW,uBAAmB,GACzC+0F,IACIroF,KAAYw5C,KACb8M,EAAQhzD,UAAW,qBAAiB,GACvC+0F,IACIroF,KAAYk1a,KACb5uX,EAAQhzD,UAAW,sBAAkB,GACxC+0F,IACIroF,KAAY21a,KACbrvX,EAAQhzD,UAAW,cAAU,GAChC+0F,IACIroF,KAAYm+b,KACb73Y,EAAQhzD,UAAW,sBAAkB,GACxC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,kBAAc,GACpC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,iBAAa,GACnC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,iBAAa,GACnC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,gBAAY,GAClC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,aAAS,GAC/B+0F,IACItnF,KACDulD,EAAQhzD,UAAW,qBAAiB,GACvC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,mBAAe,GACrC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,gBAAY,GAClC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,oBAAgB,GACtC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,uBAAmB,GACzC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,kBAAc,GACpC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,wBAAoB,GAC1C+0F,IACItnF,KACDulD,EAAQhzD,UAAW,yBAAqB,GAC3C+0F,IACItnF,KACDulD,EAAQhzD,UAAW,yBAAqB,GAC3C+0F,IACItnF,KACDulD,EAAQhzD,UAAW,sBAAkB,GACxC+0F,IACItnF,KACDulD,EAAQhzD,UAAW,sBAAkB,GACxC+0F,IACItnF,KACDulD,EAAQhzD,UAAW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UAAW,iBAAa,GACxC+0F,IACIlpF,GAAS,IACVw2lB,EAAarimB,UAAW,yBAAqB,GAChD+0F,IACIlpF,EAAS,OACVw2lB,EAAarimB,UAAW,oBAAgB,GAC3C+0F,IACIlpF,EAAS,OACVw2lB,EAAarimB,UAAW,qBAAiB,GAC5C+0F,IACIlpF,EAAS,qBACVw2lB,EAAarimB,UAAW,yBAAqB,GAChD+0F,IACIlpF,EAAS,uBACVw2lB,EAAarimB,UAAW,6BAAyB,GACpD+0F,IACIlpF,EAAS,SACVw2lB,EAAarimB,UAAW,iBAAa,GACxC+0F,IACIlpF,GAAS,IACVw2lB,EAAarimB,UAAW,eAAW,GACtC+0F,IACIlpF,OACDw2lB,EAAarimB,UAAW,kBAAc,GACzC+0F,IACIlpF,EAAS,OACVw2lB,EAAarimB,UAAW,aAAS,GACpC+0F,IACIlpF,EAAS,MACVw2lB,EAAarimB,UAAW,cAAU,GACrC+0F,IACIlpF,GAAS,IACVw2lB,EAAarimB,UAAW,oBAAgB,GAC3C+0F,IACItnF,KACD40lB,EAAarimB,UAAW,mBAAe,GAC1C+0F,IACItnF,KACD40lB,EAAarimB,UAAW,sBAAkB,GAC7C+0F,IACItnF,KACD40lB,EAAarimB,UAAW,qBAAiB,GAC5C+0F,IACItnF,KACD40lB,EAAarimB,UAAW,cAAU,GACrC+0F,IACItnF,KACD40lB,EAAarimB,UAAW,iBAAa,GACxC+0F,IACItnF,KACD40lB,EAAarimB,UAAW,eAAW,GACtC+0F,IACItnF,KACD40lB,EAAarimB,UAAW,iBAAa,GACxCqimB,EAAettgB,IACXhnF,GACDs0lB,IAEL1sf,ICz3BEnhB,GAAwC,WACxC,IAAIC,EAAgBxxF,OAAOyxF,iBACpBC,wBAA2BxxF,OAAS,SAAU88B,EAAGtL,GAAKsL,EAAE00D,UAAYhgE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAIigE,KAAKjgE,EAAOA,EAAErpB,eAAespF,KAAI30D,EAAE20D,GAAKjgE,EAAEigE,KACzE,OAAO,SAAU30D,EAAGtL,GAEhB,SAASkgE,IAAOlwF,KAAKpC,Y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AW,kBAAc,GACxC+0F,IACIroF,KAAY8rD,KACb4vqB,EAAYpouB,UAAW,iBAAa,GACvC+0F,IACI/nF,OAAiBq+N,KAClB+8f,EAAYpouB,UAAW,YAAQ,GAClC+0F,IACIroF,KAAYm6N,KACbuhgB,EAAYpouB,UAAW,eAAW,GACrC+0F,IACI/nF,OAAiBmzZ,KAClBioU,EAAYpouB,UAAW,mBAAe,GACzC+0F,IACIlpF,OACDu8tB,EAAYpouB,UAAW,qBAAiB,GAC3C+0F,IACIlpF,GAAS,IACVu8tB,EAAYpouB,UAAW,4BAAwB,GAClD+0F,IACIlpF,EAAS,OACVu8tB,EAAYpouB,UAAW,mBAAe,GACzC+0F,IACIlpF,EAAS,IACVu8tB,EAAYpouB,UAAW,gBAAY,GACtC+0F,IACIlpF,EAAS,OACVu8tB,EAAYpouB,UAAW,cAAU,GACpC+0F,IACIlpF,EAAS,aACVu8tB,EAAYpouB,UAAW,aAAS,GACnC+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,cAAU,GACpC+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,YAAQ,GAClC+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,yBAAqB,GAC/C+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,uBAAmB,GAC7C+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,wBAAoB,GAC9C+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,qBAAiB,GAC3C+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,sBAAkB,GAC5C+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,uBAAmB,GAC7C+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,sBAAkB,GAC5C+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,oBAAgB,GAC1C+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,mBAAe,GACzC+0F,IACItnF,KACD26tB,EAAYpouB,UAAW,eAAW,GACrCoouB,EAAcrzoB,IACVhnF,GACDq6tB,IAELzynB,ICv1BFuznB,GAAkB1ynB,OAAQkwT,GAAmBC,qvBCA7CwiU,GAAe3ynB,OAAQ4ynB,QCEZvug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AAS,SACVot1B,EAASj51B,UAAW,aAAS,GAChC+0F,IACIlpF,EAAS,SACVot1B,EAASj51B,UAAW,cAAU,GACjC+0F,IACIlpF,GAAS,IACVot1B,EAASj51B,UAAW,qBAAiB,GACxC+0F,IACIlpF,GAAS,IACVot1B,EAASj51B,UAAW,yBAAqB,GAC5C+0F,IACIlpF,EAAS,SACVot1B,EAASj51B,UAAW,mBAAe,GACtC+0F,IACIlpF,GAAU,MAAO,OAAQ,WAAY,QAAS,YAC/Cot1B,EAASj51B,UAAW,aAAS,GAChC+0F,IACIlpF,EAAS,IAAIkZ,OACdk00B,EAASj51B,UAAW,oBAAgB,GACvC+0F,IACIlpF,KACDot1B,EAASj51B,UAAW,kBAAc,GACrC+0F,IACIlpF,GAAS,IACVot1B,EAASj51B,UAAW,mBAAe,GACtC+0F,IACIlpF,EAAS,IACVot1B,EAASj51B,UAAW,sBAAkB,GACzC+0F,IACIlpF,GAAU,EAAG,EAAG,EAAG,EAAG,KACvBot1B,EAASj51B,UAAW,gBAAY,GACnC+0F,IACIlpF,EAAS,UACVot1B,EAASj51B,UAAW,iBAAa,GACpC+0F,IACIlpF,EAAS,UACVot1B,EAASj51B,UAAW,eAAW,GAClC+0F,IACIlpF,GAAS,IACVot1B,EAASj51B,UAAW,qBAAiB,GACxC+0F,IACIroF,KAAYyj1B,KACb8I,EAASj51B,UAAW,iBAAa,GACpC+0F,IACIroF,KAAY0j1B,KACb6I,EAASj51B,UAAW,iBAAa,GACpC+0F,IACIlpF,GAAS,IACVot1B,EAASj51B,UAAW,gCAA4B,GACnD+0F,IACIlpF,GAAS,IACVot1B,EAASj51B,UAAW,wBAAoB,GAC3C+0F,IACIlpF,KACDot1B,EAASj51B,UAAW,0BAAsB,GAC7C+0F,IACIlpF,KACDot1B,EAASj51B,UAAW,oBAAgB,GACvC+0F,IACIlpF,GAAS,IACVot1B,EAASj51B,UAAW,gBAAY,GACnC+0F,IACIlpF,GAAS,IACVot1B,EAASj51B,UAAW,qBAAiB,GACxC+0F,IACIlpF,GAAS,IACVot1B,EAASj51B,UAAW,sBAAkB,GACzC+0F,IACIlpF,KACDot1B,EAASj51B,UAAW,sBAAkB,GACzC+0F,IACIroF,KAAY2j1B,KACb4I,EAASj51B,UAAW,0BAAsB,GAC7C+0F,IACIlpF,EAAS,IACVot1B,EAASj51B,UAAW,uBAAmB,GAC1C+0F,IACIlpF,GAAS,IACVot1B,EAASj51B,UAAW,2BAAuB,GAC9C+0F,IACIlpF,KACDot1B,EAASj51B,UAAW,gBAAY,GACnC+0F,IACIroF,KAAY8j1B,KACbyI,EAASj51B,UAAW,qBAAiB,GACxC+0F,IACIlpF,KACDot1B,EAASj51B,UAAW,8BAA0B,GACjD+0F,IACIroF,KAAYktb,KACbq/Z,EAASj51B,UAAW,aAAS,GAChC+0F,IACI/nF,KAAeylzB,KAChBwmC,EAASj51B,UAAW,iBAAa,GACpC+0F,IACI/nF,KAAesj1B,KAChB2I,EAASj51B,UAAW,kBAAc,GACrC+0F,IACIlpF,KACDot1B,EAASj51B,UAAW,gBAAY,GACnC+0F,IACIlpF,GAAS,IACVot1B,EAASj51B,UAAW,iBAAa,GACpC+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,eAAW,GAClC+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,iBAAa,GACpC+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,iBAAa,GACpC+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,uBAAmB,GAC1C+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,mBAAe,GACtC+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,sBAAkB,GACzC+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,qBAAiB,GACxC+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,kBAAc,GACrC+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,kBAAc,GACrC+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,kBAAc,GACrC+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,qBAAiB,GACxC+0F,IACItnF,KACDwr1B,EAASj51B,UAAW,mBAAe,GACtC+0F,IACItnF,KACDwr1B,EAASj51B,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"}